author | truelight |
Tue, 22 Aug 2006 15:39:22 +0000 | |
changeset 4347 | 38fc1b161e89 |
parent 4344 | 7e123fec5b0b |
child 4370 | 5beb8896ae3d |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
1721
e2887b445ac0
(svn r2225) -Fix: split the endian-detection to target/host. Now cross-compiling
truelight
parents:
1376
diff
changeset
|
3 |
#define STRGEN |
e2887b445ac0
(svn r2225) -Fix: split the endian-detection to target/host. Now cross-compiling
truelight
parents:
1376
diff
changeset
|
4 |
|
0 | 5 |
#include "../stdafx.h" |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
6 |
#include "../macros.h" |
0 | 7 |
#include <stdio.h> |
8 |
#include <string.h> |
|
9 |
#include <stdlib.h> |
|
10 |
#include <stdarg.h> |
|
11 |
||
2482
374f6395847d
(svn r3008) [ 1247535 ] Native Support for Win64 (compile&run only) (michi_cc)
Darkvater
parents:
2459
diff
changeset
|
12 |
#if (!defined(WIN32) && !defined(WIN64)) || defined(__CYGWIN__) |
0 | 13 |
#include <unistd.h> |
14 |
#endif |
|
15 |
||
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
16 |
#ifdef __MORPHOS__ |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
17 |
#ifdef stderr |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
18 |
#undef stderr |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
19 |
#endif |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
20 |
#define stderr stdout |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
21 |
#endif // __MORPHOS__ |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
22 |
|
3395 | 23 |
#ifdef __WATCOMC__ |
24 |
uint _map_log_x; // an unpleasant hack required because Watcom is insisting on |
|
25 |
uint _map_size_x; // these variables being valid references in map.h |
|
26 |
uint _map_size_y; |
|
27 |
uint _map_tile_mask; |
|
28 |
uint _map_size; |
|
29 |
#endif |
|
30 |
||
0 | 31 |
/* Compiles a list of strings into a compiled string list */ |
32 |
||
33 |
typedef void (*ParseCmdProc)(char *buf, int value); |
|
34 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
35 |
typedef struct LanguagePackHeader { |
0 | 36 |
uint32 ident; |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
37 |
uint32 version; // 32-bits of auto generated version info which is basically a hash of strings.h |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
38 |
char name[32]; // the international name of this language |
0 | 39 |
char own_name[32]; // the localized name of this language |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
40 |
char isocode[16]; // the ISO code for the language (not country code) |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
41 |
uint16 offsets[32]; // the offsets |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
42 |
byte plural_form; // plural form index |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
43 |
byte pad[3]; // pad header to be a multiple of 4 |
0 | 44 |
} LanguagePackHeader; |
45 |
||
46 |
typedef struct CmdStruct { |
|
47 |
const char *cmd; |
|
48 |
ParseCmdProc proc; |
|
49 |
long value; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
50 |
int8 consumes; |
2087 | 51 |
byte flags; |
0 | 52 |
} CmdStruct; |
53 |
||
2087 | 54 |
enum { |
55 |
C_DONTCOUNT = 1, |
|
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
56 |
C_CASE = 2, |
2087 | 57 |
}; |
58 |
||
59 |
||
60 |
typedef struct Case { |
|
61 |
int caseidx; |
|
62 |
char *string; |
|
63 |
struct Case *next; |
|
64 |
} Case; |
|
65 |
||
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
66 |
static bool _masterlang; |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
67 |
static bool _translated; |
2459
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
68 |
static const char* _file = "(unknown file)"; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
69 |
static int _cur_line; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
70 |
static int _errors, _warnings; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
71 |
|
2087 | 72 |
typedef struct LangString { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
73 |
char *name; // Name of the string |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
74 |
char *english; // English text |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
75 |
char *translated; // Translated text |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
76 |
uint16 hash_next; // next hash entry |
2087 | 77 |
uint16 index; |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
78 |
int line; // line of string in source-file |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
79 |
Case *english_case; // cases for english |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
80 |
Case *translated_case; // cases for foreign |
2087 | 81 |
} LangString; |
82 |
||
83 |
static LangString *_strings[65536]; |
|
84 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
85 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
86 |
#define HASH_SIZE 32767 |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
87 |
static uint16 _hash_head[HASH_SIZE]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
88 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
89 |
static byte _put_buf[4096]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
90 |
static int _put_pos; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
91 |
static int _next_string_id; |
0 | 92 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
93 |
static uint32 _hash; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
94 |
static char _lang_name[32], _lang_ownname[32], _lang_isocode[16]; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
95 |
static byte _lang_pluralform; |
2087 | 96 |
#define MAX_NUM_GENDER 8 |
97 |
static char _genders[MAX_NUM_GENDER][8]; |
|
98 |
static int _numgenders; |
|
0 | 99 |
|
2087 | 100 |
// contains the name of all cases. |
101 |
#define MAX_NUM_CASES 50 |
|
102 |
static char _cases[MAX_NUM_CASES][16]; |
|
103 |
static int _numcases; |
|
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
104 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
105 |
// for each plural value, this is the number of plural forms. |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
106 |
static const byte _plural_form_counts[] = { 2, 1, 2, 3, 3, 3, 3, 3, 4 }; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
107 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
108 |
static const char *_cur_ident; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
109 |
|
2087 | 110 |
typedef struct CmdPair { |
111 |
const CmdStruct *a; |
|
112 |
char *v; |
|
113 |
} CmdPair; |
|
114 |
||
115 |
typedef struct ParsedCommandStruct { |
|
116 |
int np; |
|
117 |
CmdPair pairs[32]; |
|
118 |
const CmdStruct *cmd[32]; // ordered by param # |
|
119 |
} ParsedCommandStruct; |
|
120 |
||
121 |
// Used when generating some advanced commands. |
|
122 |
static ParsedCommandStruct _cur_pcs; |
|
123 |
static int _cur_argidx; |
|
124 |
||
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
125 |
static uint HashStr(const char *s) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
126 |
{ |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
127 |
uint hash = 0; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
128 |
for (; *s != '\0'; s++) hash = ROL(hash, 3) ^ *s; |
0 | 129 |
return hash % HASH_SIZE; |
130 |
} |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
131 |
|
2087 | 132 |
static void HashAdd(const char *s, LangString *ls) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
133 |
{ |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
134 |
uint hash = HashStr(s); |
2087 | 135 |
ls->hash_next = _hash_head[hash]; |
136 |
_hash_head[hash] = ls->index + 1; |
|
0 | 137 |
} |
138 |
||
2087 | 139 |
static LangString *HashFind(const char *s) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
140 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
141 |
int idx = _hash_head[HashStr(s)]; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
142 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
143 |
while (--idx >= 0) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
144 |
LangString* ls = _strings[idx]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
145 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
146 |
if (strcmp(ls->name, s) == 0) return ls; |
2087 | 147 |
idx = ls->hash_next; |
0 | 148 |
} |
2087 | 149 |
return NULL; |
0 | 150 |
} |
151 |
||
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
152 |
#ifdef _MSC_VER |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
153 |
# define LINE_NUM_FMT "(%d)" |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
154 |
#else |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
155 |
# define LINE_NUM_FMT ":%d" |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
156 |
#endif |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
157 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
158 |
static void CDECL Warning(const char *s, ...) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
159 |
{ |
0 | 160 |
char buf[1024]; |
161 |
va_list va; |
|
162 |
va_start(va, s); |
|
163 |
vsprintf(buf, s, va); |
|
164 |
va_end(va); |
|
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
165 |
fprintf(stderr, "%s" LINE_NUM_FMT ": Warning: %s\n", _file, _cur_line, buf); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
166 |
_warnings++; |
0 | 167 |
} |
168 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
169 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
170 |
static void CDECL Error(const char *s, ...) |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
171 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
172 |
char buf[1024]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
173 |
va_list va; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
174 |
va_start(va, s); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
175 |
vsprintf(buf, s, va); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
176 |
va_end(va); |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
177 |
fprintf(stderr, "%s" LINE_NUM_FMT ": Error: %s\n", _file, _cur_line, buf); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
178 |
_errors++; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
179 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
180 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
181 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
182 |
static void NORETURN CDECL Fatal(const char *s, ...) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
183 |
{ |
0 | 184 |
char buf[1024]; |
185 |
va_list va; |
|
186 |
va_start(va, s); |
|
187 |
vsprintf(buf, s, va); |
|
188 |
va_end(va); |
|
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
189 |
fprintf(stderr, "%s" LINE_NUM_FMT ": FATAL: %s\n", _file, _cur_line, buf); |
0 | 190 |
exit(1); |
191 |
} |
|
192 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
193 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
194 |
static void ttd_strlcpy(char *dst, const char *src, size_t len) |
0 | 195 |
{ |
196 |
assert(len > 0); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
197 |
while (--len > 0 && *src != '\0') *dst++ = *src++; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
198 |
*dst = '\0'; |
0 | 199 |
} |
200 |
||
201 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
202 |
static void PutByte(byte c) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
203 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
204 |
if (_put_pos == lengthof(_put_buf)) Fatal("Put buffer too small"); |
0 | 205 |
_put_buf[_put_pos++] = c; |
206 |
} |
|
207 |
||
208 |
||
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
209 |
static void EmitSingleByte(char *buf, int value) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
210 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
211 |
if (*buf != '\0') Warning("Ignoring trailing letters in command"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
212 |
PutByte((byte)value); |
0 | 213 |
} |
214 |
||
215 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
216 |
static void EmitEscapedByte(char *buf, int value) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
217 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
218 |
if (*buf != '\0') Warning("Ignoring trailing letters in command"); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
219 |
PutByte(0x85); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
220 |
PutByte((byte)value); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
221 |
} |
0 | 222 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
223 |
static void EmitSetX(char *buf, int value) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
224 |
{ |
0 | 225 |
char *err; |
226 |
int x = strtol(buf, &err, 0); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
227 |
if (*err != 0) Fatal("SetX param invalid"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
228 |
PutByte(1); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
229 |
PutByte((byte)x); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
230 |
} |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
231 |
|
0 | 232 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
233 |
static void EmitSetXY(char *buf, int value) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
234 |
{ |
0 | 235 |
char *err; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
236 |
int x; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
237 |
int y; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
238 |
|
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
239 |
x = strtol(buf, &err, 0); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
240 |
if (*err != ' ') Fatal("SetXY param invalid"); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
241 |
y = strtol(err + 1, &err, 0); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
242 |
if (*err != 0) Fatal("SetXY param invalid"); |
0 | 243 |
|
2087 | 244 |
PutByte(2); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
245 |
PutByte((byte)x); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
246 |
PutByte((byte)y); |
0 | 247 |
} |
248 |
||
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
249 |
// The plural specifier looks like |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
250 |
// {NUM} {PLURAL -1 passenger passengers} then it picks either passenger/passengers depending on the count in NUM |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
251 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
252 |
// This is encoded like |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
253 |
// CommandByte <ARG#> <NUM> {Length of each string} {each string} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
254 |
|
2087 | 255 |
bool ParseRelNum(char **buf, int *value) |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
256 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
257 |
const char* s = *buf; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
258 |
char* end; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
259 |
bool rel = false; |
2087 | 260 |
int v; |
261 |
||
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
262 |
while (*s == ' ' || *s == '\t') s++; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
263 |
if (*s == '+') { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
264 |
rel = true; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
265 |
s++; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
266 |
} |
2087 | 267 |
v = strtol(s, &end, 0); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
268 |
if (end == s) return false; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
269 |
if (rel || v < 0) { |
2087 | 270 |
*value += v; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
271 |
} else { |
2087 | 272 |
*value = v; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
273 |
} |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
274 |
*buf = end; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
275 |
return true; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
276 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
277 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
278 |
// Parse out the next word, or NULL |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
279 |
char *ParseWord(char **buf) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
280 |
{ |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
281 |
char *s = *buf, *r; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
282 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
283 |
while (*s == ' ' || *s == '\t') s++; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
284 |
if (*s == '\0') return NULL; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
285 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
286 |
if (*s == '"') { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
287 |
r = ++s; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
288 |
// parse until next " or NUL |
2952 | 289 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
290 |
if (*s == '\0') break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
291 |
if (*s == '"') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
292 |
*s++ = '\0'; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
293 |
break; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
294 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
295 |
s++; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
296 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
297 |
} else { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
298 |
// proceed until whitespace or NUL |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
299 |
r = s; |
2952 | 300 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
301 |
if (*s == '\0') break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
302 |
if (*s == ' ' || *s == '\t') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
303 |
*s++ = '\0'; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
304 |
break; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
305 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
306 |
s++; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
307 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
308 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
309 |
*buf = s; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
310 |
return r; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
311 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
312 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
313 |
// Forward declaration |
2087 | 314 |
static int TranslateArgumentIdx(int arg); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
315 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
316 |
static void EmitWordList(const char* const* words, uint nw) |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
317 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
318 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
319 |
uint j; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
320 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
321 |
PutByte(nw); |
2952 | 322 |
for (i = 0; i < nw; i++) PutByte(strlen(words[i])); |
323 |
for (i = 0; i < nw; i++) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
324 |
for (j = 0; words[i][j] != '\0'; j++) PutByte(words[i][j]); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
325 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
326 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
327 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
328 |
static void EmitPlural(char *buf, int value) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
329 |
{ |
2087 | 330 |
int argidx = _cur_argidx; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
331 |
const char* words[5]; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
332 |
int nw = 0; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
333 |
|
2087 | 334 |
// Parse out the number, if one exists. Otherwise default to prev arg. |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
335 |
if (!ParseRelNum(&buf, &argidx)) argidx--; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
336 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
337 |
// Parse each string |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
338 |
for (nw = 0; nw < 5; nw++) { |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
339 |
words[nw] = ParseWord(&buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
340 |
if (words[nw] == NULL) break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
341 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
342 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
343 |
if (nw == 0) |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
344 |
Fatal("%s: No plural words", _cur_ident); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
345 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
346 |
if (_plural_form_counts[_lang_pluralform] != nw) { |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
347 |
if (_translated) { |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
348 |
Fatal("%s: Invalid number of plural forms. Expecting %d, found %d.", _cur_ident, |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
349 |
_plural_form_counts[_lang_pluralform], nw); |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
350 |
} else { |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
351 |
Warning("'%s' is untranslated. Tweaking english string to allow compilation for plural forms", _cur_ident); |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
352 |
if (nw > _plural_form_counts[_lang_pluralform]) { |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
353 |
nw = _plural_form_counts[_lang_pluralform]; |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
354 |
} else { |
2952 | 355 |
for (; nw < _plural_form_counts[_lang_pluralform]; nw++) { |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
356 |
words[nw] = words[nw - 1]; |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
357 |
} |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
358 |
} |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
359 |
} |
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
360 |
} |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
361 |
|
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
362 |
PutByte(0x8D); |
2087 | 363 |
PutByte(TranslateArgumentIdx(argidx)); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
364 |
EmitWordList(words, nw); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
365 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
366 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
367 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
368 |
static void EmitGender(char *buf, int value) |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
369 |
{ |
2087 | 370 |
int argidx = _cur_argidx; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
371 |
uint nw; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
372 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
373 |
if (buf[0] == '=') { |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
374 |
buf++; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
375 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
376 |
// This is a {G=DER} command |
2952 | 377 |
for (nw = 0; ; nw++) { |
378 |
if (nw >= 8) Fatal("G argument '%s' invalid", buf); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
379 |
if (strcmp(buf, _genders[nw]) == 0) break; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
380 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
381 |
// now nw contains the gender index |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
382 |
PutByte(0x87); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
383 |
PutByte(nw); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
384 |
} else { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
385 |
const char* words[8]; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
386 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
387 |
// This is a {G 0 foo bar two} command. |
2087 | 388 |
// If no relative number exists, default to +0 |
389 |
if (!ParseRelNum(&buf, &argidx)) {} |
|
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
390 |
|
2952 | 391 |
for (nw = 0; nw < 8; nw++) { |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
392 |
words[nw] = ParseWord(&buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
393 |
if (words[nw] == NULL) break; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
394 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
395 |
if (nw != _numgenders) Fatal("Bad # of arguments for gender command"); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
396 |
PutByte(0x85); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
397 |
PutByte(13); |
2087 | 398 |
PutByte(TranslateArgumentIdx(argidx)); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
399 |
EmitWordList(words, nw); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
400 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
401 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
402 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
403 |
|
0 | 404 |
static const CmdStruct _cmd_structs[] = { |
405 |
// Update position |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
406 |
{"SETX", EmitSetX, 1, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
407 |
{"SETXY", EmitSetXY, 2, 0, 0}, |
0 | 408 |
|
409 |
// Font size |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
410 |
{"TINYFONT", EmitSingleByte, 8, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
411 |
{"BIGFONT", EmitSingleByte, 9, 0, 0}, |
0 | 412 |
|
413 |
// Colors |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
414 |
{"BLUE", EmitSingleByte, 15, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
415 |
{"SILVER", EmitSingleByte, 16, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
416 |
{"GOLD", EmitSingleByte, 17, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
417 |
{"RED", EmitSingleByte, 18, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
418 |
{"PURPLE", EmitSingleByte, 19, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
419 |
{"LTBROWN", EmitSingleByte, 20, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
420 |
{"ORANGE", EmitSingleByte, 21, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
421 |
{"GREEN", EmitSingleByte, 22, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
422 |
{"YELLOW", EmitSingleByte, 23, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
423 |
{"DKGREEN", EmitSingleByte, 24, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
424 |
{"CREAM", EmitSingleByte, 25, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
425 |
{"BROWN", EmitSingleByte, 26, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
426 |
{"WHITE", EmitSingleByte, 27, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
427 |
{"LTBLUE", EmitSingleByte, 28, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
428 |
{"GRAY", EmitSingleByte, 29, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
429 |
{"DKBLUE", EmitSingleByte, 30, 0, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
430 |
{"BLACK", EmitSingleByte, 31, 0, 0}, |
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
431 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
432 |
{"CURRCOMPACT", EmitEscapedByte, 0, 1, 0}, // compact currency (32 bits) |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
433 |
{"REV", EmitEscapedByte, 2, 0, 0}, // openttd revision string |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
434 |
{"SHORTCARGO", EmitEscapedByte, 3, 2, 0}, // short cargo description, only ### tons, or ### litres |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
435 |
{"CURRCOMPACT64", EmitEscapedByte, 4, 2, 0}, // compact currency 64 bits |
0 | 436 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
437 |
// These are special versions of {STRING1} |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
438 |
// The first string includes the second string. |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
439 |
{"COMPANY", EmitEscapedByte, 5, 1, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
440 |
{"PLAYERNAME", EmitEscapedByte, 5, 1, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
441 |
{"VEHICLE", EmitEscapedByte, 5, 1, 0}, |
0 | 442 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
443 |
{"STRING1", EmitEscapedByte, 5, 1, C_CASE}, // included string that consumes ONE argument |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
444 |
{"STRING2", EmitEscapedByte, 6, 2, C_CASE}, // included string that consumes TWO arguments |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
445 |
{"STRING3", EmitEscapedByte, 7, 3, C_CASE}, // included string that consumes THREE arguments |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
446 |
{"STRING4", EmitEscapedByte, 8, 4, C_CASE}, // included string that consumes FOUR arguments |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
447 |
{"STRING5", EmitEscapedByte, 9, 5, C_CASE}, // included string that consumes FIVE arguments |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
448 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
449 |
{"STATIONFEATURES", EmitEscapedByte, 10, 1, 0}, // station features string, icons of the features |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
450 |
{"INDUSTRY", EmitEscapedByte, 11, 1, 0}, // industry, takes an industry # |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
451 |
{"VOLUME", EmitEscapedByte, 12, 1, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
452 |
{"DATE_TINY", EmitEscapedByte, 14, 1, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
453 |
{"CARGO", EmitEscapedByte, 15, 2, 0}, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3015
diff
changeset
|
454 |
{"POWER", EmitEscapedByte, 16, 1, 0}, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3015
diff
changeset
|
455 |
{"VOLUME_S", EmitEscapedByte, 17, 1, 0}, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3015
diff
changeset
|
456 |
{"WEIGHT", EmitEscapedByte, 18, 1, 0}, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3015
diff
changeset
|
457 |
{"WEIGHT_S", EmitEscapedByte, 19, 1, 0}, |
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3395
diff
changeset
|
458 |
{"FORCE", EmitEscapedByte, 20, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
459 |
|
2087 | 460 |
{"P", EmitPlural, 0, 0, C_DONTCOUNT}, // plural specifier |
461 |
{"G", EmitGender, 0, 0, C_DONTCOUNT}, // gender specifier |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
462 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
463 |
{"DATE_LONG", EmitSingleByte, 0x82, 1, 0}, |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
464 |
{"DATE_SHORT", EmitSingleByte, 0x83, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
465 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
466 |
{"VELOCITY", EmitSingleByte, 0x84, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
467 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
468 |
// 0x85 is the marker for escaped commands |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
469 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
470 |
{"SKIP", EmitSingleByte, 0x86, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
471 |
|
2087 | 472 |
{"STRING", EmitSingleByte, 0x88, 1, C_CASE}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
473 |
|
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
474 |
// Numbers |
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
475 |
{"COMMA", EmitSingleByte, 0x8B, 1, 0}, // Number with comma |
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
476 |
{"NUM", EmitSingleByte, 0x8E, 1, 0}, // Signed number |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
477 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
478 |
{"CURRENCY", EmitSingleByte, 0x8F, 1, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
479 |
{"CURRENCY64", EmitSingleByte, 0x9C, 2, 0}, |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
480 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
481 |
{"WAYPOINT", EmitSingleByte, 0x99, 1, 0}, // waypoint name |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
482 |
{"STATION", EmitSingleByte, 0x9A, 1, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
483 |
{"TOWN", EmitSingleByte, 0x9B, 1, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
484 |
|
2087 | 485 |
// 0x9D is used for the pseudo command SETCASE |
486 |
// 0x9E is used for case switching |
|
487 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
488 |
{"", EmitSingleByte, '\n', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
489 |
{"{", EmitSingleByte, '{', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
490 |
{"UPARROW", EmitSingleByte, 0x80, 0, 0}, |
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
491 |
{"SMALLUPARROW", EmitSingleByte, 0x90, 0, 0}, |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
492 |
{"SMALLDOWNARROW", EmitSingleByte, 0x91, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
493 |
{"TRAIN", EmitSingleByte, 0x94, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
494 |
{"LORRY", EmitSingleByte, 0x95, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
495 |
{"BUS", EmitSingleByte, 0x96, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
496 |
{"PLANE", EmitSingleByte, 0x97, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
497 |
{"SHIP", EmitSingleByte, 0x98, 0, 0}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
498 |
{"NBSP", EmitSingleByte, 0xA0, 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
499 |
{"CENT", EmitSingleByte, '¢', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
500 |
{"POUNDSIGN", EmitSingleByte, '£', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
501 |
{"EURO", EmitSingleByte, '¤', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
502 |
{"YENSIGN", EmitSingleByte, '¥', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
503 |
{"COPYRIGHT", EmitSingleByte, '©', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
504 |
{"DOWNARROW", EmitSingleByte, 0xAA, 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
505 |
{"CHECKMARK", EmitSingleByte, 0xAC, 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
506 |
{"CROSS", EmitSingleByte, 0xAD, 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
507 |
{"REGISTERED", EmitSingleByte, '®', 0, C_DONTCOUNT}, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
508 |
{"RIGHTARROW", EmitSingleByte, 0xAF, 0, C_DONTCOUNT}, |
0 | 509 |
}; |
510 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
511 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
512 |
static const CmdStruct *FindCmd(const char *s, int len) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
513 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
514 |
const CmdStruct* cs; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
515 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
516 |
for (cs = _cmd_structs; cs != endof(_cmd_structs); cs++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
517 |
if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs; |
0 | 518 |
} |
519 |
return NULL; |
|
520 |
} |
|
521 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
522 |
static uint ResolveCaseName(const char *str, uint len) |
2087 | 523 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
524 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
525 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
526 |
for (i = 0; i < MAX_NUM_CASES; i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
527 |
if (memcmp(_cases[i], str, len) == 0 && _cases[i][len] == 0) return i + 1; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
528 |
} |
2087 | 529 |
Fatal("Invalid case-name '%s'", str); |
530 |
} |
|
531 |
||
0 | 532 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
533 |
// returns NULL on eof |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
534 |
// else returns command struct |
2087 | 535 |
static const CmdStruct *ParseCommandString(const char **str, char *param, int *argno, int *casei) |
0 | 536 |
{ |
2087 | 537 |
const char *s = *str, *start; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
538 |
const CmdStruct *cmd; |
2060
9f3855e81f4b
(svn r2569) Get rid of some dubious casts and thus warnings on 64bit machines
tron
parents:
2059
diff
changeset
|
539 |
byte c; |
0 | 540 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
541 |
*argno = -1; |
2087 | 542 |
*casei = -1; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
543 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
544 |
// Scan to the next command, exit if there's no next command. |
2952 | 545 |
for (; *s != '{'; s++) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
546 |
if (*s == '\0') return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
547 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
548 |
s++; // Skip past the { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
549 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
550 |
if (*s >= '0' && *s <= '9') { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
551 |
char *end; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
552 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
553 |
*argno = strtoul(s, &end, 0); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
554 |
if (*end != ':') Fatal("missing arg #"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
555 |
s = end + 1; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
556 |
} |
0 | 557 |
|
558 |
// parse command name |
|
559 |
start = s; |
|
2087 | 560 |
do { |
0 | 561 |
c = *s++; |
2087 | 562 |
} while (c != '}' && c != ' ' && c != '=' && c != '.' && c != 0); |
0 | 563 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
564 |
cmd = FindCmd(start, s - start - 1); |
0 | 565 |
if (cmd == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
566 |
Error("Undefined command '%.*s'", s - start - 1, start); |
0 | 567 |
return NULL; |
568 |
} |
|
569 |
||
2087 | 570 |
if (c == '.') { |
571 |
const char *casep = s; |
|
572 |
||
573 |
if (!(cmd->flags & C_CASE)) |
|
574 |
Fatal("Command '%s' can't have a case", cmd->cmd); |
|
575 |
||
576 |
do c = *s++; while (c != '}' && c != ' ' && c != '\0'); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
577 |
*casei = ResolveCaseName(casep, s - casep - 1); |
2087 | 578 |
} |
579 |
||
580 |
if (c == '\0') { |
|
581 |
Error("Missing } from command '%s'", start); |
|
582 |
return NULL; |
|
583 |
} |
|
584 |
||
585 |
||
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
586 |
if (c != '}') { |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
587 |
if (c == '=') s--; |
0 | 588 |
// copy params |
589 |
start = s; |
|
2952 | 590 |
for (;;) { |
0 | 591 |
c = *s++; |
592 |
if (c == '}') break; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
593 |
if (c == '\0') { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
594 |
Error("Missing } from command '%s'", start); |
0 | 595 |
return NULL; |
596 |
} |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
597 |
if (s - start == 250) Fatal("param command too long"); |
0 | 598 |
*param++ = c; |
599 |
} |
|
600 |
} |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
601 |
*param = '\0'; |
0 | 602 |
|
603 |
*str = s; |
|
604 |
||
605 |
return cmd; |
|
606 |
} |
|
607 |
||
608 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
609 |
static void HandlePragma(char *str) |
0 | 610 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
611 |
if (!memcmp(str, "id ", 3)) { |
0 | 612 |
_next_string_id = strtoul(str + 3, NULL, 0); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
613 |
} else if (!memcmp(str, "name ", 5)) { |
0 | 614 |
ttd_strlcpy(_lang_name, str + 5, sizeof(_lang_name)); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
615 |
} else if (!memcmp(str, "ownname ", 8)) { |
0 | 616 |
ttd_strlcpy(_lang_ownname, str + 8, sizeof(_lang_ownname)); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
617 |
} else if (!memcmp(str, "isocode ", 8)) { |
1376
d4e1dd8eb7e5
(svn r1880) [Codechange] Added isocodes to langfiles and support code to strgen (Lauri Nurmi)
miham
parents:
1097
diff
changeset
|
618 |
ttd_strlcpy(_lang_isocode, str + 8, sizeof(_lang_isocode)); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
619 |
} else if (!memcmp(str, "plural ", 7)) { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
620 |
_lang_pluralform = atoi(str + 7); |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
621 |
if (_lang_pluralform >= lengthof(_plural_form_counts)) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
622 |
Fatal("Invalid pluralform %d", _lang_pluralform); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
623 |
} else if (!memcmp(str, "gender ", 7)) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
624 |
char* buf = str + 7; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
625 |
|
2952 | 626 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
627 |
const char* s = ParseWord(&buf); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
628 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
629 |
if (s == NULL) break; |
2087 | 630 |
if (_numgenders >= MAX_NUM_GENDER) Fatal("Too many genders, max %d", MAX_NUM_GENDER); |
631 |
ttd_strlcpy(_genders[_numgenders], s, sizeof(_genders[_numgenders])); |
|
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
632 |
_numgenders++; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
633 |
} |
2087 | 634 |
} else if (!memcmp(str, "case ", 5)) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
635 |
char* buf = str + 5; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
636 |
|
2952 | 637 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
638 |
const char* s = ParseWord(&buf); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
639 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
640 |
if (s == NULL) break; |
2087 | 641 |
if (_numcases >= MAX_NUM_CASES) Fatal("Too many cases, max %d", MAX_NUM_CASES); |
642 |
ttd_strlcpy(_cases[_numcases], s, sizeof(_cases[_numcases])); |
|
643 |
_numcases++; |
|
644 |
} |
|
0 | 645 |
} else { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
646 |
Fatal("unknown pragma '%s'", str); |
0 | 647 |
} |
648 |
} |
|
649 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
650 |
static void ExtractCommandString(ParsedCommandStruct* p, const char* s, bool warnings) |
0 | 651 |
{ |
652 |
char param[100]; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
653 |
int argno; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
654 |
int argidx = 0; |
2087 | 655 |
int casei; |
0 | 656 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
657 |
memset(p, 0, sizeof(*p)); |
0 | 658 |
|
2952 | 659 |
for (;;) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
660 |
// read until next command from a. |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
661 |
const CmdStruct* ar = ParseCommandString(&s, param, &argno, &casei); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
662 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
663 |
if (ar == NULL) break; |
0 | 664 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
665 |
// Sanity checking |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
666 |
if (argno != -1 && ar->consumes == 0) Fatal("Non consumer param can't have a paramindex"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
667 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
668 |
if (ar->consumes) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
669 |
if (argno != -1) argidx = argno; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
670 |
if (argidx < 0 || argidx >= lengthof(p->cmd)) Fatal("invalid param idx %d", argidx); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
671 |
if (p->cmd[argidx] != NULL && p->cmd[argidx] != ar) Fatal("duplicate param idx %d", argidx); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
672 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
673 |
p->cmd[argidx++] = ar; |
2087 | 674 |
} else if (!(ar->flags & C_DONTCOUNT)) { // Ignore some of them |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
675 |
if (p->np >= lengthof(p->pairs)) Fatal("too many commands in string, max %d", lengthof(p->pairs)); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
676 |
p->pairs[p->np].a = ar; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
677 |
p->pairs[p->np].v = param[0] != '\0' ? strdup(param) : ""; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
678 |
p->np++; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
679 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
680 |
} |
0 | 681 |
} |
682 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
683 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
684 |
static const CmdStruct *TranslateCmdForCompare(const CmdStruct *a) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
685 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
686 |
if (a == NULL) return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
687 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
688 |
if (strcmp(a->cmd, "STRING1") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
689 |
strcmp(a->cmd, "STRING2") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
690 |
strcmp(a->cmd, "STRING3") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
691 |
strcmp(a->cmd, "STRING4") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
692 |
strcmp(a->cmd, "STRING5") == 0) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
693 |
return FindCmd("STRING", 6); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
694 |
} |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
695 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
696 |
if (strcmp(a->cmd, "SKIP") == 0) return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
697 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
698 |
return a; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
699 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
700 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
701 |
|
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
702 |
static bool CheckCommandsMatch(char *a, char *b, const char *name) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
703 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
704 |
ParsedCommandStruct templ; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
705 |
ParsedCommandStruct lang; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
706 |
int i,j; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
707 |
bool result = true; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
708 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
709 |
ExtractCommandString(&templ, b, true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
710 |
ExtractCommandString(&lang, a, true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
711 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
712 |
// For each string in templ, see if we find it in lang |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
713 |
if (templ.np != lang.np) { |
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
714 |
Warning("%s: template string and language string have a different # of commands", name); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
715 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
716 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
717 |
|
2952 | 718 |
for (i = 0; i < templ.np; i++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
719 |
// see if we find it in lang, and zero it out |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
720 |
bool found = false; |
2952 | 721 |
for (j = 0; j < lang.np; j++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
722 |
if (templ.pairs[i].a == lang.pairs[j].a && |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
723 |
strcmp(templ.pairs[i].v, lang.pairs[j].v) == 0) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
724 |
// it was found in both. zero it out from lang so we don't find it again |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
725 |
lang.pairs[j].a = NULL; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
726 |
found = true; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
727 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
728 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
729 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
730 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
731 |
if (!found) { |
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
732 |
Warning("%s: command '%s' exists in template file but not in language file", name, templ.pairs[i].a->cmd); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
733 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
734 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
735 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
736 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
737 |
// if we reach here, all non consumer commands match up. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
738 |
// Check if the non consumer commands match up also. |
2952 | 739 |
for (i = 0; i < lengthof(templ.cmd); i++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
740 |
if (TranslateCmdForCompare(templ.cmd[i]) != TranslateCmdForCompare(lang.cmd[i])) { |
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
741 |
Warning("%s: Param idx #%d '%s' doesn't match with template command '%s'", name, i, |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
742 |
lang.cmd[i] == NULL ? "<empty>" : lang.cmd[i]->cmd, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
743 |
templ.cmd[i] == NULL ? "<empty>" : templ.cmd[i]->cmd); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
744 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
745 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
746 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
747 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
748 |
return result; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
749 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
750 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
751 |
static void HandleString(char *str, bool master) |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
752 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
753 |
char *s,*t; |
2087 | 754 |
LangString *ent; |
755 |
char *casep; |
|
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
756 |
|
0 | 757 |
if (*str == '#') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
758 |
if (str[1] == '#' && str[2] != '#') HandlePragma(str + 2); |
0 | 759 |
return; |
760 |
} |
|
761 |
||
762 |
// Ignore comments & blank lines |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
763 |
if (*str == ';' || *str == ' ' || *str == '\0') return; |
0 | 764 |
|
765 |
s = strchr(str, ':'); |
|
766 |
if (s == NULL) { |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
767 |
Error("Line has no ':' delimiter"); |
0 | 768 |
return; |
769 |
} |
|
770 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
771 |
// Trim spaces. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
772 |
// After this str points to the command name, and s points to the command contents |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
773 |
for (t = s; t > str && (t[-1] == ' ' || t[-1] == '\t'); t--); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
774 |
*t = 0; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
775 |
s++; |
0 | 776 |
|
2087 | 777 |
// Check if the string has a case.. |
778 |
// The syntax for cases is IDENTNAME.case |
|
779 |
casep = strchr(str, '.'); |
|
780 |
if (casep) *casep++ = 0; |
|
781 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
782 |
// Check if this string already exists.. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
783 |
ent = HashFind(str); |
0 | 784 |
|
785 |
if (master) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
786 |
if (ent != NULL && casep == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
787 |
Error("String name '%s' is used multiple times", str); |
0 | 788 |
return; |
789 |
} |
|
790 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
791 |
if (ent == NULL && casep != NULL) { |
2087 | 792 |
Error("Base string name '%s' doesn't exist yet. Define it before defining a case.", str); |
0 | 793 |
return; |
794 |
} |
|
795 |
||
2087 | 796 |
if (ent == NULL) { |
797 |
if (_strings[_next_string_id]) { |
|
798 |
Error("String ID 0x%X for '%s' already in use by '%s'", ent, str, _strings[_next_string_id]->name); |
|
799 |
return; |
|
800 |
} |
|
801 |
||
802 |
// Allocate a new LangString |
|
3718
7e99107bbe2f
(svn r4689) - Codechange: correct parameter order or calloc, and use the sizeof the variable rather than a struct
peter1138
parents:
3489
diff
changeset
|
803 |
ent = calloc(1, sizeof(*ent)); |
2087 | 804 |
_strings[_next_string_id] = ent; |
805 |
ent->index = _next_string_id++; |
|
806 |
ent->name = strdup(str); |
|
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
807 |
ent->line = _cur_line; |
2087 | 808 |
|
809 |
HashAdd(str, ent); |
|
810 |
} |
|
811 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
812 |
if (casep != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
813 |
Case* c = malloc(sizeof(*c)); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
814 |
|
2087 | 815 |
c->caseidx = ResolveCaseName(casep, strlen(casep)); |
816 |
c->string = strdup(s); |
|
817 |
c->next = ent->english_case; |
|
818 |
ent->english_case = c; |
|
819 |
} else { |
|
820 |
ent->english = strdup(s); |
|
821 |
} |
|
822 |
||
0 | 823 |
} else { |
2087 | 824 |
if (ent == NULL) { |
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
825 |
Warning("String name '%s' does not exist in master file", str); |
0 | 826 |
return; |
827 |
} |
|
828 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
829 |
if (ent->translated && casep == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
830 |
Error("String name '%s' is used multiple times", str); |
0 | 831 |
return; |
832 |
} |
|
833 |
||
2087 | 834 |
if (s[0] == ':' && s[1] == '\0' && casep == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
835 |
// Special syntax :: means we should just inherit the master string |
2087 | 836 |
ent->translated = strdup(ent->english); |
0 | 837 |
} else { |
2087 | 838 |
// make sure that the commands match |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
839 |
if (!CheckCommandsMatch(s, ent->english, str)) return; |
2087 | 840 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
841 |
if (casep != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
842 |
Case* c = malloc(sizeof(*c)); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
843 |
|
2087 | 844 |
c->caseidx = ResolveCaseName(casep, strlen(casep)); |
845 |
c->string = strdup(s); |
|
846 |
c->next = ent->translated_case; |
|
847 |
ent->translated_case = c; |
|
848 |
} else { |
|
849 |
ent->translated = strdup(s); |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
850 |
} |
0 | 851 |
} |
852 |
} |
|
853 |
} |
|
854 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
855 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
856 |
static void rstrip(char *buf) |
0 | 857 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
858 |
int i = strlen(buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
859 |
while (i > 0 && (buf[i - 1] == '\r' || buf[i - 1] == '\n' || buf[i - 1] == ' ')) i--; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
860 |
buf[i] = '\0'; |
0 | 861 |
} |
862 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
863 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
864 |
static void ParseFile(const char *file, bool english) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
865 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
866 |
FILE *in; |
0 | 867 |
char buf[2048]; |
868 |
||
2459
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
869 |
_file = file; |
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
870 |
|
2087 | 871 |
// For each new file we parse, reset the genders. |
872 |
_numgenders = 0; |
|
873 |
// TODO:!! We can't reset the cases. In case the translated strings |
|
874 |
// derive some strings from english.... |
|
875 |
||
876 |
||
0 | 877 |
in = fopen(file, "r"); |
2459
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
878 |
if (in == NULL) Fatal("Cannot open file"); |
0 | 879 |
_cur_line = 1; |
880 |
while (fgets(buf, sizeof(buf),in) != NULL) { |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
881 |
rstrip(buf); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
882 |
HandleString(buf, english); |
0 | 883 |
_cur_line++; |
884 |
} |
|
885 |
fclose(in); |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
886 |
} |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
887 |
|
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
888 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
889 |
static uint32 MyHashStr(uint32 hash, const char *s) |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
890 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
891 |
for (; *s != '\0'; s++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
892 |
hash = ROL(hash, 3) ^ *s; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
893 |
hash = (hash & 1 ? hash >> 1 ^ 0xDEADBEEF : hash >> 1); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
894 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
895 |
return hash; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
896 |
} |
0 | 897 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
898 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
899 |
// make a hash of the file to get a unique "version number" |
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
900 |
static void MakeHashOfStrings(void) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
901 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
902 |
uint32 hash = 0; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
903 |
uint i; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
904 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
905 |
for (i = 0; i != lengthof(_strings); i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
906 |
const LangString* ls = _strings[i]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
907 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
908 |
if (ls != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
909 |
const CmdStruct* cs; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
910 |
const char* s; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
911 |
char buf[256]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
912 |
int argno; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
913 |
int casei; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
914 |
|
2087 | 915 |
s = ls->name; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
916 |
hash ^= i * 0x717239; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
917 |
hash = (hash & 1 ? hash >> 1 ^ 0xDEADBEEF : hash >> 1); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
918 |
hash = MyHashStr(hash, s + 1); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
919 |
|
2087 | 920 |
s = ls->english; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
921 |
while ((cs = ParseCommandString(&s, buf, &argno, &casei)) != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
922 |
if (cs->flags & C_DONTCOUNT) continue; |
2087 | 923 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
924 |
hash ^= (cs - _cmd_structs) * 0x1234567; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
925 |
hash = (hash & 1 ? hash >> 1 ^ 0xF00BAA4 : hash >> 1); |
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
926 |
} |
0 | 927 |
} |
928 |
} |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
929 |
_hash = hash; |
0 | 930 |
} |
931 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
932 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
933 |
static uint CountInUse(uint grp) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
934 |
{ |
0 | 935 |
int i; |
936 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
937 |
for (i = 0x800; --i >= 0;) if (_strings[(grp << 11) + i] != NULL) break; |
0 | 938 |
return i + 1; |
939 |
} |
|
940 |
||
941 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
942 |
bool CompareFiles(const char *n1, const char *n2) |
0 | 943 |
{ |
944 |
FILE *f1, *f2; |
|
945 |
char b1[4096]; |
|
946 |
char b2[4096]; |
|
947 |
size_t l1, l2; |
|
948 |
||
949 |
f2 = fopen(n2, "rb"); |
|
950 |
if (f2 == NULL) return false; |
|
951 |
||
952 |
f1 = fopen(n1, "rb"); |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
953 |
if (f1 == NULL) Fatal("can't open %s", n1); |
0 | 954 |
|
955 |
do { |
|
956 |
l1 = fread(b1, 1, sizeof(b1), f1); |
|
957 |
l2 = fread(b2, 1, sizeof(b2), f2); |
|
958 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
959 |
if (l1 != l2 || memcmp(b1, b2, l1)) { |
0 | 960 |
fclose(f2); |
961 |
fclose(f1); |
|
962 |
return false; |
|
963 |
} |
|
964 |
} while (l1); |
|
965 |
||
966 |
fclose(f2); |
|
967 |
fclose(f1); |
|
968 |
return true; |
|
969 |
} |
|
970 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
971 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
972 |
static void WriteStringsH(const char *filename) |
0 | 973 |
{ |
974 |
FILE *out; |
|
975 |
int i; |
|
976 |
int next = -1; |
|
977 |
int lastgrp; |
|
978 |
||
979 |
out = fopen("tmp.xxx", "w"); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
980 |
if (out == NULL) Fatal("can't open tmp.xxx"); |
0 | 981 |
|
982 |
fprintf(out, "enum {"); |
|
983 |
||
984 |
lastgrp = 0; |
|
985 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
986 |
for (i = 0; i != lengthof(_strings); i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
987 |
if (_strings[i] != NULL) { |
0 | 988 |
if (lastgrp != (i >> 11)) { |
989 |
lastgrp = (i >> 11); |
|
990 |
fprintf(out, "};\n\nenum {"); |
|
991 |
} |
|
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
992 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
993 |
fprintf(out, next == i ? "\t%s,\n" : "\n\t%s = 0x%X,\n", _strings[i]->name, i); |
0 | 994 |
next = i + 1; |
995 |
} |
|
996 |
} |
|
997 |
||
998 |
fprintf(out, "};\n"); |
|
999 |
||
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1000 |
fprintf(out, |
0 | 1001 |
"\nenum {\n" |
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
1002 |
"\tLANGUAGE_PACK_IDENT = 0x474E414C, // Big Endian value for 'LANG' (LE is 0x 4C 41 4E 47)\n" |
0 | 1003 |
"\tLANGUAGE_PACK_VERSION = 0x%X,\n" |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1004 |
"};\n", (uint)_hash |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1005 |
); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1006 |
|
0 | 1007 |
fclose(out); |
1008 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1009 |
if (CompareFiles("tmp.xxx", filename)) { |
0 | 1010 |
// files are equal. tmp.xxx is not needed |
1011 |
unlink("tmp.xxx"); |
|
1012 |
} else { |
|
1013 |
// else rename tmp.xxx into filename |
|
2482
374f6395847d
(svn r3008) [ 1247535 ] Native Support for Win64 (compile&run only) (michi_cc)
Darkvater
parents:
2459
diff
changeset
|
1014 |
#if defined(WIN32) || defined(WIN64) |
0 | 1015 |
unlink(filename); |
1016 |
#endif |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1017 |
if (rename("tmp.xxx", filename) == -1) Fatal("rename() failed"); |
0 | 1018 |
} |
1019 |
} |
|
1020 |
||
2087 | 1021 |
static int TranslateArgumentIdx(int argidx) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1022 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1023 |
int i, sum; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1024 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1025 |
if (argidx < 0 || argidx >= lengthof(_cur_pcs.cmd)) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1026 |
Fatal("invalid argidx %d", argidx); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1027 |
|
2952 | 1028 |
for (i = sum = 0; i < argidx; i++) { |
2374
e4443eab6293
(svn r2900) Fix a bug, which incremented the counter of a loop twice and therefore calculated wrong argument indices
tron
parents:
2353
diff
changeset
|
1029 |
const CmdStruct *cs = _cur_pcs.cmd[i]; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1030 |
sum += (cs != NULL) ? cs->consumes : 1; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1031 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1032 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1033 |
return sum; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1034 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1035 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1036 |
static void PutArgidxCommand(void) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1037 |
{ |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
1038 |
PutByte(0x8C); |
2087 | 1039 |
PutByte(TranslateArgumentIdx(_cur_argidx)); |
1040 |
} |
|
1041 |
||
1042 |
||
1043 |
static void PutCommandString(const char *str) |
|
1044 |
{ |
|
1045 |
const CmdStruct *cs; |
|
1046 |
char param[256]; |
|
1047 |
int argno; |
|
1048 |
int casei; |
|
1049 |
||
1050 |
_cur_argidx = 0; |
|
1051 |
||
1052 |
while (*str != '\0') { |
|
1053 |
// Process characters as they are until we encounter a { |
|
1054 |
if (*str != '{') { |
|
1055 |
PutByte(*str++); |
|
1056 |
continue; |
|
1057 |
} |
|
1058 |
cs = ParseCommandString(&str, param, &argno, &casei); |
|
1059 |
if (cs == NULL) break; |
|
1060 |
||
1061 |
if (casei != -1) { |
|
1062 |
PutByte(0x9D); // {SETCASE} |
|
1063 |
PutByte(casei); |
|
1064 |
} |
|
1065 |
||
1066 |
// For params that consume values, we need to handle the argindex properly |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1067 |
if (cs->consumes > 0) { |
2087 | 1068 |
// Check if we need to output a move-param command |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1069 |
if (argno != -1 && argno != _cur_argidx) { |
2087 | 1070 |
_cur_argidx = argno; |
1071 |
PutArgidxCommand(); |
|
1072 |
} |
|
1073 |
||
1074 |
// Output the one from the master string... it's always accurate. |
|
1075 |
cs = _cur_pcs.cmd[_cur_argidx++]; |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1076 |
if (cs == NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1077 |
Fatal("%s: No argument exists at position %d", _cur_ident, _cur_argidx - 1); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1078 |
} |
2087 | 1079 |
} |
1080 |
||
1081 |
cs->proc(param, cs->value); |
|
1082 |
} |
|
1083 |
} |
|
1084 |
||
1085 |
static void WriteLength(FILE *f, uint length) |
|
1086 |
{ |
|
1087 |
if (length < 0xC0) { |
|
1088 |
fputc(length, f); |
|
1089 |
} else if (length < 0x4000) { |
|
1090 |
fputc((length >> 8) | 0xC0, f); |
|
1091 |
fputc(length & 0xFF, f); |
|
1092 |
} else { |
|
1093 |
Fatal("string too long"); |
|
1094 |
} |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1095 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1096 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1097 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1098 |
static void WriteLangfile(const char *filename, int show_todo) |
0 | 1099 |
{ |
1100 |
FILE *f; |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1101 |
uint in_use[32]; |
0 | 1102 |
LanguagePackHeader hdr; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1103 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1104 |
uint j; |
0 | 1105 |
|
1106 |
f = fopen(filename, "wb"); |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1107 |
if (f == NULL) Fatal("can't open %s", filename); |
0 | 1108 |
|
1109 |
memset(&hdr, 0, sizeof(hdr)); |
|
2952 | 1110 |
for (i = 0; i != 32; i++) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1111 |
uint n = CountInUse(i); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1112 |
|
0 | 1113 |
in_use[i] = n; |
1114 |
hdr.offsets[i] = TO_LE16(n); |
|
1115 |
} |
|
1116 |
||
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1117 |
// see line 655: fprintf(..."\tLANGUAGE_PACK_IDENT = 0x474E414C,...) |
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
1118 |
hdr.ident = TO_LE32(0x474E414C); // Big Endian value for 'LANG' |
0 | 1119 |
hdr.version = TO_LE32(_hash); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1120 |
hdr.plural_form = _lang_pluralform; |
0 | 1121 |
strcpy(hdr.name, _lang_name); |
1122 |
strcpy(hdr.own_name, _lang_ownname); |
|
1376
d4e1dd8eb7e5
(svn r1880) [Codechange] Added isocodes to langfiles and support code to strgen (Lauri Nurmi)
miham
parents:
1097
diff
changeset
|
1123 |
strcpy(hdr.isocode, _lang_isocode); |
0 | 1124 |
|
1125 |
fwrite(&hdr, sizeof(hdr), 1, f); |
|
1126 |
||
2952 | 1127 |
for (i = 0; i != 32; i++) { |
1128 |
for (j = 0; j != in_use[i]; j++) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1129 |
const LangString* ls = _strings[(i << 11) + j]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1130 |
const Case* casep; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1131 |
const char* cmdp; |
0 | 1132 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1133 |
// For undefined strings, just set that it's an empty string |
2087 | 1134 |
if (ls == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1135 |
WriteLength(f, 0); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1136 |
continue; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1137 |
} |
0 | 1138 |
|
2087 | 1139 |
_cur_ident = ls->name; |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
1140 |
_cur_line = ls->line; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1141 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1142 |
// Produce a message if a string doesn't have a translation. |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1143 |
if (show_todo > 0 && ls->translated == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1144 |
if (show_todo == 2) { |
2087 | 1145 |
Warning("'%s' is untranslated", ls->name); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1146 |
} else { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1147 |
const char *s = "<TODO> "; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1148 |
while (*s != '\0') PutByte(*s++); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1149 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1150 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1151 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1152 |
// Extract the strings and stuff from the english command string |
2087 | 1153 |
ExtractCommandString(&_cur_pcs, ls->english, false); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1154 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1155 |
if (ls->translated_case != NULL || ls->translated != NULL) { |
2087 | 1156 |
casep = ls->translated_case; |
1157 |
cmdp = ls->translated; |
|
1158 |
} else { |
|
1159 |
casep = ls->english_case; |
|
1160 |
cmdp = ls->english; |
|
1161 |
} |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1162 |
|
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1163 |
_translated = _masterlang || (cmdp != ls->english); |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
1164 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1165 |
if (casep != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1166 |
const Case* c; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1167 |
uint num; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1168 |
|
2087 | 1169 |
// Need to output a case-switch. |
1170 |
// It has this format |
|
1171 |
// <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT> |
|
1172 |
// Each LEN is printed using 2 bytes in big endian order. |
|
1173 |
PutByte(0x9E); |
|
1174 |
// Count the number of cases |
|
2952 | 1175 |
for (num = 0, c = casep; c; c = c->next) num++; |
2087 | 1176 |
PutByte(num); |
1177 |
||
1178 |
// Write each case |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1179 |
for (c = casep; c != NULL; c = c->next) { |
2087 | 1180 |
int pos; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1181 |
|
2087 | 1182 |
PutByte(c->caseidx); |
1183 |
// Make some space for the 16-bit length |
|
1184 |
pos = _put_pos; |
|
1185 |
PutByte(0); |
|
1186 |
PutByte(0); |
|
1187 |
// Write string |
|
1188 |
PutCommandString(c->string); |
|
1189 |
PutByte(0); // terminate with a zero |
|
1190 |
// Fill in the length |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1191 |
_put_buf[pos + 0] = GB(_put_pos - (pos + 2), 8, 8); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1192 |
_put_buf[pos + 1] = GB(_put_pos - (pos + 2), 0, 8); |
0 | 1193 |
} |
2087 | 1194 |
} |
0 | 1195 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1196 |
if (cmdp != NULL) PutCommandString(cmdp); |
0 | 1197 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1198 |
WriteLength(f, _put_pos); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1199 |
fwrite(_put_buf, 1, _put_pos, f); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1200 |
_put_pos = 0; |
0 | 1201 |
} |
1202 |
} |
|
1203 |
||
1204 |
fputc(0, f); |
|
1205 |
fclose(f); |
|
1206 |
} |
|
1207 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1208 |
|
250
733e18ca6e93
(svn r251) -Project ready for 0.3.4 release. Updated installer, readme and fileinformation
darkvater
parents:
236
diff
changeset
|
1209 |
int CDECL main(int argc, char* argv[]) |
0 | 1210 |
{ |
1211 |
int show_todo = 0; |
|
1212 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1213 |
if (argc > 1 && (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0)) { |
2418
ce15155b77f5
(svn r2944) Add Revision keyword to the file for --version/-v
Darkvater
parents:
2411
diff
changeset
|
1214 |
puts("$Revision$"); |
0 | 1215 |
return 0; |
1216 |
} |
|
1217 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1218 |
if (argc > 1 && |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1219 |
(strcmp(argv[1], "-t") == 0 || strcmp(argv[1], "--todo") == 0)) { |
0 | 1220 |
show_todo = 1; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1221 |
argc--, argv++; |
0 | 1222 |
} |
1223 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1224 |
if (argc > 1 && |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1225 |
(strcmp(argv[1], "-w") == 0 || strcmp(argv[1], "--warning") == 0)) { |
0 | 1226 |
show_todo = 2; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1227 |
argc--, argv++; |
0 | 1228 |
} |
1229 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1230 |
if (argc > 1 && ( |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1231 |
strcmp(argv[1], "-h") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1232 |
strcmp(argv[1], "--help") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1233 |
strcmp(argv[1], "-?") == 0 |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1234 |
)) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1235 |
puts( |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1236 |
"strgen - $Revision$\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1237 |
" -v | --version print version information and exit\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1238 |
" -h | -? | --help print this help message and exit\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1239 |
" -t | --todo replace any untranslated strings with '<TODO>'\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1240 |
" -w | --warning print a warning for any untranslated strings\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1241 |
" Run without parameters strgen will search for lang/english.txt and\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1242 |
" parse it. Passing an argument, strgen will translate that language\n" |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1243 |
" file with lang/english.txt as a reference." |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1244 |
); |
2904
1075bac76b72
(svn r3459) - CodeChange: add help-output to strgen and also verbose variants of the switches
Darkvater
parents:
2765
diff
changeset
|
1245 |
return 0; |
1075bac76b72
(svn r3459) - CodeChange: add help-output to strgen and also verbose variants of the switches
Darkvater
parents:
2765
diff
changeset
|
1246 |
} |
1075bac76b72
(svn r3459) - CodeChange: add help-output to strgen and also verbose variants of the switches
Darkvater
parents:
2765
diff
changeset
|
1247 |
|
0 | 1248 |
if (argc == 1) { |
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1249 |
_masterlang = true; |
0 | 1250 |
// parse master file |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1251 |
ParseFile("lang/english.txt", true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1252 |
MakeHashOfStrings(); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1253 |
if (_errors) return 1; |
0 | 1254 |
|
1255 |
// write english.lng and strings.h |
|
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1256 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1257 |
WriteLangfile("lang/english.lng", 0); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1258 |
WriteStringsH("table/strings.h"); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1259 |
} else if (argc == 2) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1260 |
char buf[256]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1261 |
char* r; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1262 |
|
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1263 |
_masterlang = false; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1264 |
ParseFile("lang/english.txt", true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1265 |
MakeHashOfStrings(); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1266 |
ParseFile(argv[1], false); |
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1267 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1268 |
if (_errors) return 1; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1269 |
|
0 | 1270 |
strcpy(buf, argv[1]); |
1271 |
r = strrchr(buf, '.'); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1272 |
if (r == NULL || strcmp(r, ".txt") != 0) r = strchr(buf, 0); |
0 | 1273 |
strcpy(r, ".lng"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1274 |
WriteLangfile(buf, show_todo); |
0 | 1275 |
} else { |
1276 |
fprintf(stderr, "invalid arguments\n"); |
|
1277 |
} |
|
1278 |
||
1279 |
return 0; |
|
1280 |
} |