hedgewars/uLocale.pas
author sheepluva
Mon, 03 Feb 2014 14:06:11 +0100
changeset 10099 67b7bc539639
parent 10082 2f7b7992258f
child 10105 8c5fa1d15bd5
permissions -rw-r--r--
fix for issue #777 (IceGun: Segfault when freezing water, with rqBlurryLand enabled)
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
10082
2f7b7992258f unbreak build. didn't test changes
nemo
parents: 10080
diff changeset
    39
uses uRandom, uVariables, uDebug, uPhysFSLayer, sysutils, uUtils;
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);
10080
ac51bcb534ef Even more love to pas2c
unc0rr
parents: 10015
diff changeset
    63
        if (StrLength(s) > 0) and (s[0] >= '0') and (s[0] <= '9') then
10009
88929358d2e1 Convert some ansistrings to pchars
unc0rr
parents: 9998
diff changeset
    64
            begin
10080
ac51bcb534ef Even more love to pas2c
unc0rr
parents: 10015
diff changeset
    65
            TryDo(StrLength(s) > 6, 'Load locale: empty string', true);
10009
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);
10080
ac51bcb534ef Even more love to pas2c
unc0rr
parents: 10015
diff changeset
    72
            sc:= StrAlloc(StrLength(s) - 5);
10009
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.