hedgewars/uLocale.pas
author sheepluva
Thu, 23 Jan 2014 13:56:53 +0100
changeset 10061 b7161f00a6ca
parent 10015 4feced261c68
child 10080 ac51bcb534ef
permissions -rw-r--r--
hide complete IP of other users, when non-admin requests player info. showing the first two parts of the IP was kinda pointless to begin with (what for?) and has recently lead to increased abuse and lobby flooding due to bots collecting/posting IP tracking information
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1063
diff changeset
     2
 * Hedgewars, a free turn based strategy game
9998
736015b847e3 update copyright to 2014
sheepluva
parents: 9080
diff changeset
     3
 * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     4
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     8
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    12
 * GNU General Public License for more details.
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    13
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    15
 * along with this program; if not, write to the Free Software
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    17
 *)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    18
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2457
diff changeset
    19
{$INCLUDE "options.inc"}
079ef82eac75 revamped file access and debug display
koda
parents: 2457
diff changeset
    20
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    21
unit uLocale;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    22
interface
4361
64ea345ab655 Move variables from uConsts to uVariables
unc0rr
parents: 4246
diff changeset
    23
uses uTypes;
2863
9eb53b1f1842 Engine:
smxx
parents: 2747
diff changeset
    24
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    25
const MAX_EVENT_STRINGS = 100;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    26
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    27
procedure LoadLocale(FileName: shortstring);
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
    28
function  Format(fmt: shortstring; var arg: shortstring): shortstring;
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    29
function  FormatA(fmt: PChar; arg: ansistring): ansistring;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    30
function  GetEventString(e: TEventId): PChar;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    31
procedure initModule;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    32
procedure freeModule;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    33
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    34
{$IFDEF HWLIBRARY}
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    35
procedure LoadLocaleWrapper(str: pchar); cdecl; export;
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    36
{$ENDIF}
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    37
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    38
implementation
10015
4feced261c68 partial merge of the webgl branch
koda
parents: 10009 9956
diff changeset
    39
uses uRandom, uVariables, uDebug, uPhysFSLayer, sysutils;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    40
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    41
var trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of PChar;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    42
    trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    43
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    44
procedure LoadLocale(FileName: shortstring);
10015
4feced261c68 partial merge of the webgl branch
koda
parents: 10009 9956
diff changeset
    45
var s: PChar = nil;
4feced261c68 partial merge of the webgl branch
koda
parents: 10009 9956
diff changeset
    46
    sc: PChar;
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    47
    f: pfsFile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    48
    a, b, c: LongInt;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    49
    first: array[TEventId] of boolean;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    50
    e: TEventId;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    51
begin
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    52
for e:= Low(TEventId) to High(TEventId) do
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    53
    first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    54
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    55
f:= pfsOpenRead(FileName);
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    56
TryDo(f <> nil, 'Cannot load locale "' + FileName + '"', false);
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    57
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    58
if f <> nil then
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    59
    begin
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
    60
    while not pfsEof(f) do
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    61
        begin
8107
ee21b816394f Bring ansistrings back
unc0rr
parents: 8028
diff changeset
    62
        pfsReadLnA(f, s);
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    63
        if (Length(s) > 0) and (s[0] >= '0') and (s[0] <= '9') then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    64
            begin
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    65
            TryDo(Length(s) > 6, 'Load locale: empty string', true);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    66
            val(s[0]+s[1], a, c);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    67
            TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    68
            TryDo(s[2] = ':', 'Load locale: ":" expected', true);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    69
            val(s[3]+s[4], b, c);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    70
            TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    71
            TryDo(s[5] = '=', 'Load locale: "=" expected', true);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    72
            sc:= StrAlloc(length(s) - 5);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    73
            StrCopy(sc, @s[6]);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    74
            case a of
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    75
                0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    76
                    trammo[TAmmoStrId(b)]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    77
                1: if (b >=0) and (b <= ord(High(TMsgStrId))) then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    78
                    trmsg[TMsgStrId(b)]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    79
                2: if (b >=0) and (b <= ord(High(TEventId))) then
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    80
                    begin
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    81
                    TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + IntToStr(a) + ':' + IntToStr(b), false);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    82
                    if first[TEventId(b)] then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    83
                        begin
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    84
                        trevt_n[TEventId(b)]:= 0;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    85
                        first[TEventId(b)]:= false;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    86
                        end;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    87
                    trevt[TEventId(b)][trevt_n[TEventId(b)]]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    88
                    inc(trevt_n[TEventId(b)]);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    89
                    end;
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    90
                3: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    91
                    trammoc[TAmmoStrId(b)]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    92
                4: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    93
                    trammod[TAmmoStrId(b)]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    94
                5: if (b >=0) and (b <= ord(High(TGoalStrId))) then
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    95
                    trgoal[TGoalStrId(b)]:= sc;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    96
            end;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    97
            end;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    98
        StrDispose(s);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    99
        end;
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 7069
diff changeset
   100
   pfsClose(f);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   101
   end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   102
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   103
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   104
function GetEventString(e: TEventId): PChar;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   105
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   106
    if trevt_n[e] = 0 then // no messages for this event type?
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   107
        GetEventString:= '*missing translation*'
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   108
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   109
        GetEventString:= trevt[e][GetRandom(trevt_n[e])]; // Pick a random message and return it
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   110
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   111
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   112
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   113
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   114
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   115
i:= Pos('%1', fmt);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   116
if i = 0 then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   117
    Format:= fmt
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   118
else
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   119
    Format:= copy(fmt, 1, i - 1) + arg + Format(copy(fmt, i + 2, Length(fmt) - i - 1), arg)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   120
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   121
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   122
function FormatA(fmt: PChar; arg: ansistring): ansistring;
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   123
var i: LongInt;
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   124
    s: ansistring;
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   125
begin
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   126
s:= fmt;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   127
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   128
i:= Pos('%1', s);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   129
if i = 0 then
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   130
    FormatA:= s
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   131
else
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   132
    FormatA:= copy(s, 1, i - 1) + arg + FormatA(PChar(copy(s, i + 2, Length(s) - i - 1)), arg)
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   133
end;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   134
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
   135
{$IFDEF HWLIBRARY}
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   136
procedure LoadLocaleWrapper(str: pchar); cdecl; export;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   137
begin
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   138
    LoadLocale(Strpas(str));
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   139
end;
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
   140
{$ENDIF}
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   141
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   142
procedure initModule;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   143
var e: TEventId;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   144
    i: LongInt;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   145
begin
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   146
    for e:= Low(TEventId) to High(TEventId) do
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   147
        for i:= 0 to Pred(MAX_EVENT_STRINGS) do
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   148
            trevt[e][i]:= nil;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   149
end;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   150
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   151
procedure freeModule;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   152
var e: TEventId;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   153
    i: LongInt;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   154
begin
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   155
    for e:= Low(TEventId) to High(TEventId) do
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   156
        for i:= 0 to Pred(trevt_n[e]) do
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   157
            StrDispose(trevt[e][i]);
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   158
end;
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
   159
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   160
end.