hedgewars/uLocale.pas
author nemo
Fri, 30 Sep 2011 22:33:28 -0400
changeset 6077 d8fa5a85d24f
parent 4976 088d40d8aba2
child 6453 11c578d30bd3
permissions -rw-r--r--
This prevents girders from erasing landbacktex (square windows in tunnels and such), at the cost of requiring lfBasic and lfObject to be treated the same apart from graphically
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
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 4807
diff changeset
     3
 * Copyright (c) 2004-2011 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;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
    29
function  Format(fmt: ansistring; var arg: ansistring): ansistring;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
    30
function  GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    31
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    32
implementation
4403
unc0rr
parents: 4390
diff changeset
    33
uses uRandom, uUtils, uVariables, uDebug;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    34
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    35
var trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of ansistring;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    36
    trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    37
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    38
procedure LoadLocale(FileName: shortstring);
2999
30c4d62cd0c3 Engine:
smxx
parents: 2948
diff changeset
    39
var s: ansistring;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    40
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    41
    a, b, c: LongInt;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    42
    first: array[TEventId] of boolean;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    43
    e: TEventId;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    44
    loaded: boolean;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    45
begin
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    46
loaded:= false;
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    47
for e:= Low(TEventId) to High(TEventId) do first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    48
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    49
{$I-} // iochecks off
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    50
Assign(f, FileName);
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    51
filemode:= 0; // readonly
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    52
Reset(f);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    53
if IOResult = 0 then loaded:= true;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    54
TryDo(loaded, 'Cannot load locale "' + FileName + '"', false);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    55
if loaded then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    56
   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    57
   while not eof(f) do
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    58
       begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    59
       readln(f, s);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    60
       if Length(s) = 0 then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    61
       if not (s[1] in ['0'..'9']) then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    62
       TryDo(Length(s) > 6, 'Load locale: empty string', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    63
       val(s[1]+s[2], a, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    64
       TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    65
       TryDo(s[3] = ':', 'Load locale: ":" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    66
       val(s[4]+s[5], b, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    67
       TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    68
       TryDo(s[6] = '=', 'Load locale: "=" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    69
       Delete(s, 1, 6);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    70
       case a of
4807
180dbfb13903 display caption for ammotype amNothing when switched to so that players know what just happened
sheepluva
parents: 4403
diff changeset
    71
           0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammo[TAmmoStrId(b)]:= s;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    72
           1: if (b >=0) and (b <= ord(High(TMsgStrId))) then trmsg[TMsgStrId(b)]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    73
           2: if (b >=0) and (b <= ord(High(TEventId))) then begin
4374
bcefeeabaa33 Move some stuff from uMisc to uUtils
unC0Rr
parents: 4361
diff changeset
    74
               TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + IntToStr(a) + ':' + IntToStr(b), false);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    75
               if first[TEventId(b)] then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    76
                   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    77
                   trevt_n[TEventId(b)]:= 0;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    78
                   first[TEventId(b)]:= false;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    79
                   end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    80
               trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    81
               inc(trevt_n[TEventId(b)]);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    82
               end;
4807
180dbfb13903 display caption for ammotype amNothing when switched to so that players know what just happened
sheepluva
parents: 4403
diff changeset
    83
           3: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammoc[TAmmoStrId(b)]:= s;
180dbfb13903 display caption for ammotype amNothing when switched to so that players know what just happened
sheepluva
parents: 4403
diff changeset
    84
           4: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammod[TAmmoStrId(b)]:= s;
2863
9eb53b1f1842 Engine:
smxx
parents: 2747
diff changeset
    85
           5: if (b >=0) and (b <= ord(High(TGoalStrId))) then trgoal[TGoalStrId(b)]:= s;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    86
           end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    87
       end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    88
   Close(f)
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    89
   end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    90
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    91
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    92
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    93
function GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    94
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    95
    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
    96
        GetEventString:= '*missing translation*'
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    97
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    98
        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
    99
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   100
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   101
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   102
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   103
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   104
i:= Pos('%1', fmt);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   105
if i = 0 then Format:= fmt
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   106
         else 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
   107
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   108
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   109
function Format(fmt: ansistring; var arg: ansistring): ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   110
var i: LongInt;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   111
begin
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   112
i:= Pos('%1', fmt);
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   113
if i = 0 then Format:= fmt
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   114
         else Format:= copy(fmt, 1, i - 1) + arg + Format(copy(fmt, i + 2, Length(fmt) - i - 1), arg)
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   115
end;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   116
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   117
procedure LoadLocaleWrapper(str: pchar); cdecl; export;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   118
begin
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   119
    LoadLocale(Strpas(str));
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   120
end;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   121
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   122
end.