author | peter1138 |
Sun, 03 Aug 2008 17:35:08 +0000 | |
changeset 9834 | 7474149531c1 |
parent 9768 | 0c0fb94c89df |
child 10039 | 1f236afd6cd1 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
9111
48ce04029fe4
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
9085
diff
changeset
|
3 |
/** @file strings.cpp Handling of translated strings. */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1853
diff
changeset
|
6 |
#include "openttd.h" |
2291
c142846954ee
(svn r2815) Store the currency information in one central place instead of scattering it in several unrelated files
tron
parents:
2257
diff
changeset
|
7 |
#include "currency.h" |
8764
771b642c60e0
(svn r12460) -Change: rename src/namegen.h to src/namegen_func.h so MSVC can have both files in it's treelist.
rubidium
parents:
8763
diff
changeset
|
8 |
#include "namegen_func.h" |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8764
diff
changeset
|
9 |
#include "station_base.h" |
0 | 10 |
#include "town.h" |
430 | 11 |
#include "screenshot.h" |
1542
62a03537ad0b
(svn r2046) -Codechange: moved all waypoint code to waypoint.c/waypoint.h
truelight
parents:
1376
diff
changeset
|
12 |
#include "waypoint.h" |
2070
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
13 |
#include "industry.h" |
2159
f6284cf5fab0
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
2150
diff
changeset
|
14 |
#include "variables.h" |
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
15 |
#include "newgrf_text.h" |
4120
b21fda0c260a
(svn r5464) [Behaviour Fix] : When starting the game, the system will now verify the presence of music files in gm forlder.
belugas
parents:
3833
diff
changeset
|
16 |
#include "music.h" |
4942
7fb6c39eb421
(svn r6930) -Codechange: Move industry name into IndustrySpec
belugas
parents:
4920
diff
changeset
|
17 |
#include "industry.h" |
6929
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
18 |
#include "fileio.h" |
6091
c8827d9ae04a
(svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents:
6088
diff
changeset
|
19 |
#include "cargotype.h" |
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
20 |
#include "group.h" |
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
21 |
#include "debug.h" |
6956
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
22 |
#include "newgrf_townname.h" |
8790 | 23 |
#include "signs_base.h" |
7059
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
24 |
#include "newgrf_engine.h" |
8086
48da1cf8f7d1
(svn r11647) -Fix (r11646): it did not compile without freetype...
rubidium
parents:
8085
diff
changeset
|
25 |
#include "spritecache.h" |
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
26 |
#include "fontcache.h" |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
27 |
#include "gui.h" |
8114
dd6d21dc99c1
(svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents:
8087
diff
changeset
|
28 |
#include "strings_func.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8130
diff
changeset
|
29 |
#include "functions.h" |
9085
8b3897a75aed
(svn r12944) -Codechange: use rev.h instead of externs at many places
smatz
parents:
9070
diff
changeset
|
30 |
#include "rev.h" |
8120
7128bb2b57a3
(svn r11681) -Fix (r11674): hopefully fix the compile error on big endian machines.
rubidium
parents:
8114
diff
changeset
|
31 |
#include "core/endian_func.hpp" |
8140
0d0d8c94f84b
(svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents:
8132
diff
changeset
|
32 |
#include "date_func.h" |
8144
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8140
diff
changeset
|
33 |
#include "vehicle_base.h" |
8214
971f861d5543
(svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents:
8202
diff
changeset
|
34 |
#include "string_func.h" |
8254
1496654ca5e7
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8237
diff
changeset
|
35 |
#include "player_func.h" |
1496654ca5e7
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8237
diff
changeset
|
36 |
#include "player_base.h" |
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
37 |
#include "fios.h" |
8270
e7c342f6b14c
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8264
diff
changeset
|
38 |
#include "settings_type.h" |
8275
f17d0c863ee3
(svn r11839) -Codechange: move some variables from variables.h to a more logical location.
rubidium
parents:
8270
diff
changeset
|
39 |
#include "video/video_driver.hpp" |
8786
1823ff88a054
(svn r12490) -Codechange: rename engine.h to engine_func.h and remove unneeded inclusions of engine.h and/or replace them with engine_type.h.
rubidium
parents:
8785
diff
changeset
|
40 |
#include "engine_func.h" |
9070
dd0121143eba
(svn r12924) -Feature: Introducing the so called 'engine pool' which primarily removes the fixed engine type limits and also happens to allow (with the patch option 'dynamic_engines') multiple NewGRF vehicle sets to coexist.
peter1138
parents:
8998
diff
changeset
|
41 |
#include "engine_base.h" |
8987
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
42 |
#include "saveload.h" |
0 | 43 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
44 |
#include "table/strings.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
45 |
#include "table/control_codes.h" |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
46 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
47 |
DynamicLanguages _dynlang; |
7266
b16e67e992b4
(svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents:
7059
diff
changeset
|
48 |
uint64 _decode_parameters[20]; |
2201 | 49 |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
50 |
static char *StationGetSpecialString(char *buff, int x, const char* last); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
51 |
static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char* last); |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
52 |
static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last); |
0 | 53 |
|
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
54 |
static char *FormatString(char *buff, const char *str, const int64 *argv, uint casei, const char* last); |
0 | 55 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
56 |
struct LanguagePack { |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
57 |
uint32 ident; // 32-bits identifier |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
58 |
uint32 version; // 32-bits of auto generated version info which is basically a hash of strings.h |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
59 |
char name[32]; // the international name of this language |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
60 |
char own_name[32]; // the localized name of this language |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
61 |
char isocode[16]; // the ISO code for the language (not country code) |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
62 |
uint16 offsets[32]; // the offsets |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
63 |
byte plural_form; // how to compute plural forms |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4416
diff
changeset
|
64 |
byte pad[3]; // pad header to be a multiple of 4 |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
65 |
char data[VARARRAY_SIZE]; // list of strings |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
66 |
}; |
1319
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
67 |
|
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
68 |
static char **_langpack_offs; |
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
69 |
static LanguagePack *_langpack; |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
70 |
static uint _langtab_num[32]; // Offset into langpack offs |
1319
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
71 |
static uint _langtab_start[32]; // Offset into langpack offs |
0 | 72 |
|
73 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
74 |
/** Read an int64 from the argv array. */ |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
75 |
static inline int64 GetInt64(const int64 **argv) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
76 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
77 |
assert(argv); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
78 |
return *(*argv)++; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
79 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
80 |
|
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
81 |
/** Read an int32 from the argv array. */ |
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
82 |
static inline int32 GetInt32(const int64 **argv) |
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
83 |
{ |
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
84 |
return (int32)GetInt64(argv); |
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
85 |
} |
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
86 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
87 |
/** Read an array from the argv array. */ |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
88 |
static inline const int64 *GetArgvPtr(const int64 **argv, int n) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
89 |
{ |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
90 |
const int64 *result; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
91 |
assert(*argv); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
92 |
result = *argv; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
93 |
(*argv) += n; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
94 |
return result; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
95 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
96 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
97 |
|
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
98 |
const char *GetStringPtr(StringID string) |
0 | 99 |
{ |
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
100 |
switch (GB(string, 11, 5)) { |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
101 |
case 28: return GetGRFStringPtr(GB(string, 0, 11)); |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
102 |
case 29: return GetGRFStringPtr(GB(string, 0, 11) + 0x0800); |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
103 |
case 30: return GetGRFStringPtr(GB(string, 0, 11) + 0x1000); |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
104 |
default: return _langpack_offs[_langtab_start[string >> 11] + (string & 0x7FF)]; |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
105 |
} |
0 | 106 |
} |
107 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
108 |
/** The highest 8 bits of string contain the "case index". |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
109 |
* These 8 bits will only be set when FormatString wants to print |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
110 |
* the string in a different case. No one else except FormatString |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
111 |
* should set those bits, therefore string CANNOT be StringID, but uint32. |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
112 |
* @param buffr |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
113 |
* @param string |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
114 |
* @param argv |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
115 |
* @param last |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
116 |
* @return a formatted string of char |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
117 |
*/ |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
118 |
static char *GetStringWithArgs(char *buffr, uint string, const int64 *argv, const char* last) |
0 | 119 |
{ |
7810
6b4a83fb86c8
(svn r11360) -Fix [FS#1375]: do not crash when trying to "draw" an invalid string, just draw a message saying it is invalid.
rubidium
parents:
7763
diff
changeset
|
120 |
if (GB(string, 0, 16) == 0) return GetStringWithArgs(buffr, STR_UNDEFINED, argv, last); |
6b4a83fb86c8
(svn r11360) -Fix [FS#1375]: do not crash when trying to "draw" an invalid string, just draw a message saying it is invalid.
rubidium
parents:
7763
diff
changeset
|
121 |
|
2140
a04d0142ad65
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2131
diff
changeset
|
122 |
uint index = GB(string, 0, 11); |
a04d0142ad65
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2131
diff
changeset
|
123 |
uint tab = GB(string, 11, 5); |
0 | 124 |
|
1321 | 125 |
switch (tab) { |
126 |
case 4: |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
127 |
if (index >= 0xC0) |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
128 |
return GetSpecialTownNameString(buffr, index - 0xC0, GetInt32(&argv), last); |
1321 | 129 |
break; |
130 |
||
131 |
case 14: |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
132 |
if (index >= 0xE4) |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
133 |
return GetSpecialPlayerNameString(buffr, index - 0xE4, argv, last); |
1321 | 134 |
break; |
135 |
||
136 |
case 15: |
|
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
137 |
/* Old table for custom names. This is no longer used */ |
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
138 |
error("Incorrect conversion of custom name string."); |
1321 | 139 |
|
4710
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
140 |
case 26: |
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
141 |
/* Include string within newgrf text (format code 81) */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7872
diff
changeset
|
142 |
if (HasBit(index, 10)) { |
4710
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
143 |
StringID string = GetGRFStringID(0, 0xD000 + GB(index, 0, 10)); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
144 |
return GetStringWithArgs(buffr, string, argv, last); |
4710
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
145 |
} |
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
146 |
break; |
1aa2b507818f
(svn r6622) - Add support for NewGRF text includes. (Based on mart3p's patch)
peter1138
parents:
4602
diff
changeset
|
147 |
|
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
148 |
case 28: |
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
149 |
return FormatString(buffr, GetGRFStringPtr(index), argv, 0, last); |
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
150 |
|
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
151 |
case 29: |
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
152 |
return FormatString(buffr, GetGRFStringPtr(index + 0x0800), argv, 0, last); |
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
153 |
|
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
154 |
case 30: |
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
155 |
return FormatString(buffr, GetGRFStringPtr(index + 0x1000), argv, 0, last); |
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
156 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
157 |
case 31: |
9648
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
158 |
NOT_REACHED(); |
0 | 159 |
} |
160 |
||
2639 | 161 |
if (index >= _langtab_num[tab]) { |
1321 | 162 |
error( |
9470
08424e2e79e4
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
9466
diff
changeset
|
163 |
"String 0x%X is invalid. " |
1321 | 164 |
"Probably because an old version of the .lng file.\n", string |
165 |
); |
|
2639 | 166 |
} |
0 | 167 |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
168 |
return FormatString(buffr, GetStringPtr(GB(string, 0, 16)), argv, GB(string, 24, 8), last); |
0 | 169 |
} |
170 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
171 |
char *GetString(char *buffr, StringID string, const char* last) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
172 |
{ |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
173 |
return GetStringWithArgs(buffr, string, (int64*)_decode_parameters, last); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
174 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
175 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
176 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
177 |
char *InlineString(char *buf, StringID string) |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
178 |
{ |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
179 |
buf += Utf8Encode(buf, SCC_STRING_ID); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
180 |
buf += Utf8Encode(buf, string); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
181 |
return buf; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
182 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
183 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
184 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
185 |
/** This function is used to "bind" a C string to a OpenTTD dparam slot. |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
186 |
* @param n slot of the string |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
187 |
* @param str string to bind |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
188 |
*/ |
2055
4926ed1a7562
(svn r2564) Fix: Fixed conceptual issue in network_gui.c. AllocateName is not meant to be used by GUI-code, because it modifies the "game-state".
ludde
parents:
2053
diff
changeset
|
189 |
void SetDParamStr(uint n, const char *str) |
4926ed1a7562
(svn r2564) Fix: Fixed conceptual issue in network_gui.c. AllocateName is not meant to be used by GUI-code, because it modifies the "game-state".
ludde
parents:
2053
diff
changeset
|
190 |
{ |
9768
0c0fb94c89df
(svn r13904) -Fix (r13715): 'cast from/to pointer to/from integer of different size' warnings
glx
parents:
9659
diff
changeset
|
191 |
SetDParam(n, (uint64)(size_t)str); |
2055
4926ed1a7562
(svn r2564) Fix: Fixed conceptual issue in network_gui.c. AllocateName is not meant to be used by GUI-code, because it modifies the "game-state".
ludde
parents:
2053
diff
changeset
|
192 |
} |
4926ed1a7562
(svn r2564) Fix: Fixed conceptual issue in network_gui.c. AllocateName is not meant to be used by GUI-code, because it modifies the "game-state".
ludde
parents:
2053
diff
changeset
|
193 |
|
1309
4403a69da4f8
(svn r1813) Declare functions implemented in strings.c in their own shiny new header (though i think some of these function don't belong into strings.c)
tron
parents:
1306
diff
changeset
|
194 |
void InjectDParam(int amount) |
0 | 195 |
{ |
7006
bfa3974da32b
(svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents:
7005
diff
changeset
|
196 |
memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint64)); |
0 | 197 |
} |
198 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
199 |
// TODO |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
200 |
static char *FormatCommaNumber(char *buff, int64 number, const char *last) |
0 | 201 |
{ |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
202 |
uint64 divisor = 10000000000000000000ULL; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
203 |
uint64 quot; |
0 | 204 |
int i; |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
205 |
uint64 tot; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
206 |
uint64 num; |
0 | 207 |
|
208 |
if (number < 0) { |
|
209 |
*buff++ = '-'; |
|
210 |
number = -number; |
|
211 |
} |
|
212 |
||
213 |
num = number; |
|
214 |
||
215 |
tot = 0; |
|
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
216 |
for (i = 0; i < 20; i++) { |
0 | 217 |
quot = 0; |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
218 |
if (num >= divisor) { |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
219 |
quot = num / divisor; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
220 |
num = num % divisor; |
0 | 221 |
} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
222 |
if (tot |= quot || i == 19) { |
1312
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
223 |
*buff++ = '0' + quot; |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
224 |
if ((i % 3) == 1 && i != 19) *buff++ = ','; |
0 | 225 |
} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
226 |
|
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
227 |
divisor /= 10; |
0 | 228 |
} |
229 |
||
1316 | 230 |
*buff = '\0'; |
0 | 231 |
|
232 |
return buff; |
|
233 |
} |
|
234 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
235 |
// TODO |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
236 |
static char *FormatNoCommaNumber(char *buff, int64 number, const char *last) |
0 | 237 |
{ |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
238 |
uint64 divisor = 10000000000000000000ULL; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
239 |
uint64 quot; |
0 | 240 |
int i; |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
241 |
uint64 tot; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
242 |
uint64 num; |
0 | 243 |
|
244 |
if (number < 0) { |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
245 |
buff = strecpy(buff, "-", last); |
0 | 246 |
number = -number; |
247 |
} |
|
248 |
||
249 |
num = number; |
|
250 |
||
251 |
tot = 0; |
|
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
252 |
for (i = 0; i < 20; i++) { |
0 | 253 |
quot = 0; |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
254 |
if (num >= divisor) { |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
255 |
quot = num / divisor; |
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
256 |
num = num % divisor; |
0 | 257 |
} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
258 |
if (tot |= quot || i == 19) { |
1312
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
259 |
*buff++ = '0' + quot; |
0 | 260 |
} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
261 |
|
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
262 |
divisor /= 10; |
0 | 263 |
} |
264 |
||
1316 | 265 |
*buff = '\0'; |
0 | 266 |
|
267 |
return buff; |
|
268 |
} |
|
269 |
||
270 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
271 |
static char *FormatYmdString(char *buff, Date date, const char* last) |
0 | 272 |
{ |
273 |
YearMonthDay ymd; |
|
4289
8981ce44336d
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4288
diff
changeset
|
274 |
ConvertDateToYMD(date, &ymd); |
0 | 275 |
|
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
276 |
int64 args[3] = { ymd.day + STR_01AC_1ST - 1, STR_0162_JAN + ymd.month, ymd.year }; |
6158
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
277 |
return FormatString(buff, GetStringPtr(STR_DATE_LONG), args, 0, last); |
0 | 278 |
} |
279 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
280 |
static char *FormatMonthAndYear(char *buff, Date date, const char* last) |
0 | 281 |
{ |
282 |
YearMonthDay ymd; |
|
4289
8981ce44336d
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4288
diff
changeset
|
283 |
ConvertDateToYMD(date, &ymd); |
0 | 284 |
|
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
285 |
int64 args[2] = { STR_MONTH_JAN + ymd.month, ymd.year }; |
6158
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
286 |
return FormatString(buff, GetStringPtr(STR_DATE_SHORT), args, 0, last); |
0 | 287 |
} |
288 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
289 |
static char *FormatTinyDate(char *buff, Date date, const char* last) |
1097
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
290 |
{ |
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
291 |
YearMonthDay ymd; |
4289
8981ce44336d
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4288
diff
changeset
|
292 |
ConvertDateToYMD(date, &ymd); |
1097
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
293 |
|
6158
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
294 |
char day[3]; |
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
295 |
char month[3]; |
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
296 |
/* We want to zero-pad the days and months */ |
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
297 |
snprintf(day, lengthof(day), "%02i", ymd.day); |
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
298 |
snprintf(month, lengthof(month), "%02i", ymd.month + 1); |
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
299 |
|
9768
0c0fb94c89df
(svn r13904) -Fix (r13715): 'cast from/to pointer to/from integer of different size' warnings
glx
parents:
9659
diff
changeset
|
300 |
int64 args[3] = { (int64)(size_t)day, (int64)(size_t)month, ymd.year }; |
6158
346066286004
(svn r8906) -Feature: translation dependant formatting of dates.
rubidium
parents:
6091
diff
changeset
|
301 |
return FormatString(buff, GetStringPtr(STR_DATE_TINY), args, 0, last); |
1097
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
302 |
} |
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
303 |
|
6996
dbdeeb666e2d
(svn r10252) -Fix: never overflow when applying exchange rates before drawing the amount of money.
rubidium
parents:
6994
diff
changeset
|
304 |
static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money number, bool compact, const char* last) |
0 | 305 |
{ |
7763
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
306 |
/* We are going to make number absolute for printing, so |
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
307 |
* keep this piece of data as we need it later on */ |
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
308 |
bool negative = number < 0; |
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
309 |
const char *multiplier = ""; |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
310 |
char buf[40]; |
7763
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
311 |
char *p; |
0 | 312 |
int j; |
313 |
||
7763
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
314 |
number *= spec->rate; |
0 | 315 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
316 |
/* convert from negative */ |
1316 | 317 |
if (number < 0) { |
7422
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
318 |
if (buff + Utf8CharLen(SCC_RED) > last) return buff; |
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
319 |
buff += Utf8Encode(buff, SCC_RED); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
320 |
buff = strecpy(buff, "-", last); |
1316 | 321 |
number = -number; |
322 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
64
diff
changeset
|
323 |
|
4602
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
324 |
/* Add prefix part, folowing symbol_pos specification. |
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
325 |
* Here, it can can be either 0 (prefix) or 2 (both prefix anf suffix). |
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
326 |
* The only remaining value is 1 (suffix), so everything that is not 1 */ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
327 |
if (spec->symbol_pos != 1) buff = strecpy(buff, spec->prefix, last); |
0 | 328 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
329 |
/* for huge numbers, compact the number into k or M */ |
0 | 330 |
if (compact) { |
331 |
if (number >= 1000000000) { |
|
332 |
number = (number + 500000) / 1000000; |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
333 |
multiplier = "M"; |
0 | 334 |
} else if (number >= 1000000) { |
335 |
number = (number + 500) / 1000; |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
336 |
multiplier = "k"; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
64
diff
changeset
|
337 |
} |
0 | 338 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
64
diff
changeset
|
339 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
340 |
/* convert to ascii number and add commas */ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
341 |
p = endof(buf); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
342 |
*--p = '\0'; |
0 | 343 |
j = 4; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
64
diff
changeset
|
344 |
do { |
1316 | 345 |
if (--j == 0) { |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
346 |
*--p = spec->separator; |
1316 | 347 |
j = 3; |
348 |
} |
|
7763
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
349 |
*--p = '0' + (char)(number % 10); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
350 |
} while ((number /= 10) != 0); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
351 |
buff = strecpy(buff, p, last); |
0 | 352 |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
353 |
buff = strecpy(buff, multiplier, last); |
0 | 354 |
|
4602
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
355 |
/* Add suffix part, folowing symbol_pos specification. |
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
356 |
* Here, it can can be either 1 (suffix) or 2 (both prefix anf suffix). |
43c44f7df615
(svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents:
4505
diff
changeset
|
357 |
* The only remaining value is 1 (prefix), so everything that is not 0 */ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
358 |
if (spec->symbol_pos != 0) buff = strecpy(buff, spec->suffix, last); |
0 | 359 |
|
7763
342e5357b592
(svn r11312) -Codechange: implement a overflow safe integer and use that for money and don't misuses CommandCost to have a overflow safe integer. Based on a patch by Noldo.
rubidium
parents:
7616
diff
changeset
|
360 |
if (negative) { |
7422
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
361 |
if (buff + Utf8CharLen(SCC_PREVIOUS_COLOUR) > last) return buff; |
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
362 |
buff += Utf8Encode(buff, SCC_PREVIOUS_COLOUR); |
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
363 |
*buff = '\0'; |
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
364 |
} |
fb7f6dc87b55
(svn r10820) -Codechange: make negative currencies red and restore the colour from before the currency was printed; this removes the need to make two strings for printing currencies (one for positive currencies and one for negative currencies).
rubidium
parents:
7411
diff
changeset
|
365 |
|
0 | 366 |
return buff; |
367 |
} |
|
368 |
||
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
369 |
static int DeterminePluralForm(int64 count) |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
370 |
{ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
371 |
/* The absolute value determines plurality */ |
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
372 |
uint64 n = abs(count); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
373 |
|
2952 | 374 |
switch (_langpack->plural_form) { |
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
375 |
default: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
376 |
NOT_REACHED(); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
377 |
|
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
378 |
/* Two forms, singular used for one only |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
379 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
380 |
* Danish, Dutch, English, German, Norwegian, Swedish, Estonian, Finnish, |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
381 |
* Greek, Hebrew, Italian, Portuguese, Spanish, Esperanto */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
382 |
case 0: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
383 |
return n != 1; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
384 |
|
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
385 |
/* Only one form |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
386 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
387 |
* Hungarian, Japanese, Korean, Turkish */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
388 |
case 1: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
389 |
return 0; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
390 |
|
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
391 |
/* Two forms, singular used for zero and one |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
392 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
393 |
* French, Brazilian Portuguese */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
394 |
case 2: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
395 |
return n > 1; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
396 |
|
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
397 |
/* Three forms, special case for zero |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
398 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
399 |
* Latvian */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
400 |
case 3: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
401 |
return n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? 1 : 2; |
8733
e60ce9c3ae47
(svn r12417) -Fix: Add a new plural rule for Icelandic.
maedhros
parents:
8445
diff
changeset
|
402 |
|
8735
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
403 |
/* Three forms, special case for one and two |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
404 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
405 |
* Gaelige (Irish) */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
406 |
case 4: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
407 |
return n == 1 ? 0 : n == 2 ? 1 : 2; |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
408 |
|
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
409 |
/* Three forms, special case for numbers ending in 1[2-9] |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
410 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
411 |
* Lithuanian */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
412 |
case 5: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
413 |
return n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2; |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
414 |
|
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
415 |
/* Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4] |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
416 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
417 |
* Croatian, Czech, Russian, Slovak, Ukrainian */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
418 |
case 6: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
419 |
return n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2; |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
420 |
|
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
421 |
/* Three forms, special case for one and some numbers ending in 2, 3, or 4 |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
422 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
423 |
* Polish */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
424 |
case 7: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
425 |
return n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2; |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
426 |
|
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
427 |
/* Four forms, special case for one and all numbers ending in 02, 03, or 04 |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
428 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
429 |
* Slovenian */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
430 |
case 8: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
431 |
return n % 100 == 1 ? 0 : n % 100 == 2 ? 1 : n % 100 == 3 || n % 100 == 4 ? 2 : 3; |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
432 |
|
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
433 |
/* Two forms; singular used for everything ending in 1 but not in 11. |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
434 |
* Used in: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
435 |
* Icelandic */ |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
436 |
case 9: |
d7e8cc159876
(svn r12420) -Cleanup: Fix the indentation, improve a variable name, and add a NOT_REACHED to DeterminePluralForm.
maedhros
parents:
8733
diff
changeset
|
437 |
return n % 10 == 1 && n % 100 != 11 ? 0 : 1; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
438 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
439 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
440 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
441 |
static const char *ParseStringChoice(const char *b, uint form, char *dst, int *dstlen) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
442 |
{ |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
443 |
//<NUM> {Length of each string} {each string} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
444 |
uint n = (byte)*b++; |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6420
diff
changeset
|
445 |
uint pos, i, mylen = 0, mypos = 0; |
2952 | 446 |
|
447 |
for (i = pos = 0; i != n; i++) { |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
448 |
uint len = (byte)*b++; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
449 |
if (i == form) { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
450 |
mypos = pos; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
451 |
mylen = len; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
452 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
453 |
pos += len; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
454 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
455 |
*dstlen = mylen; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
456 |
memcpy(dst, b + mypos, mylen); |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
457 |
return b + pos; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
458 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
459 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
460 |
struct Units { |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
461 |
int s_m; ///< Multiplier for velocity |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
462 |
int s_s; ///< Shift for velocity |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
463 |
StringID velocity; ///< String for velocity |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
464 |
int p_m; ///< Multiplier for power |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
465 |
int p_s; ///< Shift for power |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
466 |
StringID power; ///< String for velocity |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
467 |
int w_m; ///< Multiplier for weight |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
468 |
int w_s; ///< Shift for weight |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
469 |
StringID s_weight; ///< Short string for weight |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
470 |
StringID l_weight; ///< Long string for weight |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
471 |
int v_m; ///< Multiplier for volume |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
472 |
int v_s; ///< Shift for volume |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
473 |
StringID s_volume; ///< Short string for volume |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
474 |
StringID l_volume; ///< Long string for volume |
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
475 |
int f_m; ///< Multiplier for force |
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
476 |
int f_s; ///< Shift for force |
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
477 |
StringID force; ///< String for force |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
478 |
}; |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
479 |
|
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
480 |
/* Unit conversions */ |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
481 |
static const Units units[] = { |
5402
3d37a300486e
(svn r7596) -Codechange: Always display tractive effort in kN.
peter1138
parents:
5296
diff
changeset
|
482 |
{ // Imperial (Original, mph, hp, metric ton, litre, kN) |
5874
2db89a640b7a
(svn r8464) -Revert (r4322): Change back to converting to mph in the GUI code, as 1 mph == 1.6 km/h is too far out for some people.
peter1138
parents:
5814
diff
changeset
|
483 |
1, 0, STR_UNITS_VELOCITY_IMPERIAL, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
484 |
1, 0, STR_UNITS_POWER_IMPERIAL, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
485 |
1, 0, STR_UNITS_WEIGHT_SHORT_METRIC, STR_UNITS_WEIGHT_LONG_METRIC, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
486 |
1000, 0, STR_UNITS_VOLUME_SHORT_METRIC, STR_UNITS_VOLUME_LONG_METRIC, |
5402
3d37a300486e
(svn r7596) -Codechange: Always display tractive effort in kN.
peter1138
parents:
5296
diff
changeset
|
487 |
1, 0, STR_UNITS_FORCE_SI, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
488 |
}, |
5402
3d37a300486e
(svn r7596) -Codechange: Always display tractive effort in kN.
peter1138
parents:
5296
diff
changeset
|
489 |
{ // Metric (km/h, hp, metric ton, litre, kN) |
5874
2db89a640b7a
(svn r8464) -Revert (r4322): Change back to converting to mph in the GUI code, as 1 mph == 1.6 km/h is too far out for some people.
peter1138
parents:
5814
diff
changeset
|
490 |
103, 6, STR_UNITS_VELOCITY_METRIC, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
491 |
1, 0, STR_UNITS_POWER_METRIC, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
492 |
1, 0, STR_UNITS_WEIGHT_SHORT_METRIC, STR_UNITS_WEIGHT_LONG_METRIC, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
493 |
1000, 0, STR_UNITS_VOLUME_SHORT_METRIC, STR_UNITS_VOLUME_LONG_METRIC, |
5402
3d37a300486e
(svn r7596) -Codechange: Always display tractive effort in kN.
peter1138
parents:
5296
diff
changeset
|
494 |
1, 0, STR_UNITS_FORCE_SI, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
495 |
}, |
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
496 |
{ // SI (m/s, kilowatt, kilogram, cubic metres, kilonewton) |
5874
2db89a640b7a
(svn r8464) -Revert (r4322): Change back to converting to mph in the GUI code, as 1 mph == 1.6 km/h is too far out for some people.
peter1138
parents:
5814
diff
changeset
|
497 |
1831, 12, STR_UNITS_VELOCITY_SI, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
498 |
764, 10, STR_UNITS_POWER_SI, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
499 |
1000, 0, STR_UNITS_WEIGHT_SHORT_SI, STR_UNITS_WEIGHT_LONG_SI, |
3485
1c77f46830c9
(svn r4336) Fix units conversion of volume for SI
peter1138
parents:
3477
diff
changeset
|
500 |
1, 0, STR_UNITS_VOLUME_SHORT_SI, STR_UNITS_VOLUME_LONG_SI, |
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
501 |
1, 0, STR_UNITS_FORCE_SI, |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
502 |
}, |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
503 |
}; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2075
diff
changeset
|
504 |
|
8898
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
505 |
/** |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
506 |
* Convert the given (internal) speed to the display speed. |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
507 |
* @param speed the speed to convert |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
508 |
* @return the converted speed. |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
509 |
*/ |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
510 |
uint ConvertSpeedToDisplaySpeed(uint speed) |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
511 |
{ |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
512 |
return (speed * units[_settings_game.locale.units].s_m) >> units[_settings_game.locale.units].s_s; |
8898
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
513 |
} |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
514 |
|
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
515 |
/** |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
516 |
* Convert the given display speed to the (internal) speed. |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
517 |
* @param speed the speed to convert |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
518 |
* @return the converted speed. |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
519 |
*/ |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
520 |
uint ConvertDisplaySpeedToSpeed(uint speed) |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
521 |
{ |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
522 |
return ((speed << units[_settings_game.locale.units].s_s) + units[_settings_game.locale.units].s_m / 2) / units[_settings_game.locale.units].s_m; |
8898
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
523 |
} |
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
524 |
|
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
525 |
static char* FormatString(char* buff, const char* str, const int64* argv, uint casei, const char* last) |
0 | 526 |
{ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
527 |
WChar b; |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
528 |
const int64 *argv_orig = argv; |
2087 | 529 |
uint modifier = 0; |
0 | 530 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
531 |
while ((b = Utf8Consume(&str)) != '\0') { |
7616
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
532 |
if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) { |
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
533 |
/* We need to pass some stuff as it might be modified; oh boy. */ |
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
534 |
b = RemapNewGRFStringControlCode(b, &buff, &str, (int64*)argv); |
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
535 |
if (b == 0) continue; |
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
536 |
} |
ebf15b08ac38
(svn r11145) -Codechange: add support for "decoding" TTDPs string codes wrt to registers 0x100 to 0x10F.
rubidium
parents:
7435
diff
changeset
|
537 |
|
1316 | 538 |
switch (b) { |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
539 |
case SCC_SETX: // {SETX} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
540 |
if (buff + Utf8CharLen(SCC_SETX) + 1 < last) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
541 |
buff += Utf8Encode(buff, SCC_SETX); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
542 |
*buff++ = *str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
543 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
544 |
break; |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2353
diff
changeset
|
545 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
546 |
case SCC_SETXY: // {SETXY} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
547 |
if (buff + Utf8CharLen(SCC_SETXY) + 2 < last) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
548 |
buff += Utf8Encode(buff, SCC_SETXY); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
549 |
*buff++ = *str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
550 |
*buff++ = *str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
551 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
552 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
553 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
554 |
case SCC_STRING_ID: // {STRINL} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
555 |
buff = GetStringWithArgs(buff, Utf8Consume(&str), argv, last); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
556 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
557 |
|
9648
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
558 |
case SCC_RAW_STRING_POINTER: { // {RAW_STRING} |
9768
0c0fb94c89df
(svn r13904) -Fix (r13715): 'cast from/to pointer to/from integer of different size' warnings
glx
parents:
9659
diff
changeset
|
559 |
const char *str = (const char*)(size_t)GetInt64(&argv); |
9648
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
560 |
buff = FormatString(buff, str, argv, casei, last); |
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
561 |
break; |
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
562 |
} |
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
563 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
564 |
case SCC_DATE_LONG: // {DATE_LONG} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
565 |
buff = FormatYmdString(buff, GetInt32(&argv), last); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
566 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
567 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
568 |
case SCC_DATE_SHORT: // {DATE_SHORT} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
569 |
buff = FormatMonthAndYear(buff, GetInt32(&argv), last); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
570 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
571 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
572 |
case SCC_VELOCITY: {// {VELOCITY} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
573 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
574 |
assert(_settings_game.locale.units < lengthof(units)); |
8898
f8b701997c01
(svn r12665) -Codechange: make the internal speed <-> display speed conversions available to a bigger part of the code.
rubidium
parents:
8790
diff
changeset
|
575 |
args[0] = ConvertSpeedToDisplaySpeed(GetInt32(&argv)); |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
576 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].velocity), args, modifier >> 24, last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
577 |
modifier = 0; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
578 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
579 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
580 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
581 |
case SCC_CURRENCY_COMPACT: /* {CURRCOMPACT} */ |
6994
8eab245a77c3
(svn r10250) -Fix: money is always 64 bits, so always parse those 64 bits.
rubidium
parents:
6956
diff
changeset
|
582 |
buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last); |
0 | 583 |
break; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
584 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
585 |
case SCC_REVISION: /* {REV} */ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
586 |
buff = strecpy(buff, _openttd_revision, last); |
0 | 587 |
break; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
588 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
589 |
case SCC_CARGO_SHORT: { /* {SHORTCARGO} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
590 |
/* Short description of cargotypes. Layout: |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
591 |
* 8-bit = cargo type |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
592 |
* 16-bit = cargo count */ |
6091
c8827d9ae04a
(svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents:
6088
diff
changeset
|
593 |
StringID cargo_str = GetCargo(GetInt32(&argv))->units_volume; |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
594 |
switch (cargo_str) { |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
595 |
case STR_TONS: { |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
596 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
597 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
598 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].w_m >> units[_settings_game.locale.units].w_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
599 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].l_weight), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
600 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
601 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
602 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
603 |
|
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
604 |
case STR_LITERS: { |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
605 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
606 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
607 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].v_m >> units[_settings_game.locale.units].v_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
608 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].l_volume), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
609 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
610 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
611 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
612 |
|
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
613 |
default: |
6359
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
614 |
if (cargo_str >= 0xE000 && cargo_str < 0xF800) { |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
615 |
/* NewGRF strings from Action 4 use a different format here, |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
616 |
* of e.g. "x tonnes of coal", so process accordingly. */ |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
617 |
buff = GetStringWithArgs(buff, cargo_str, argv++, last); |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
618 |
} else { |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
619 |
buff = FormatCommaNumber(buff, GetInt32(&argv), last); |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
620 |
buff = strecpy(buff, " ", last); |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
621 |
buff = strecpy(buff, GetStringPtr(cargo_str), last); |
8527262c4cf8
(svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents:
6357
diff
changeset
|
622 |
} |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
623 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
624 |
} |
1316 | 625 |
} break; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
626 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
627 |
case SCC_STRING1: { /* {STRING1} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
628 |
/* String that consumes ONE argument */ |
2087 | 629 |
uint str = modifier + GetInt32(&argv); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
630 |
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 1), last); |
2087 | 631 |
modifier = 0; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
632 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
633 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
634 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
635 |
case SCC_STRING2: { /* {STRING2} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
636 |
/* String that consumes TWO arguments */ |
2087 | 637 |
uint str = modifier + GetInt32(&argv); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
638 |
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 2), last); |
2087 | 639 |
modifier = 0; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
640 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
641 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
642 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
643 |
case SCC_STRING3: { /* {STRING3} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
644 |
/* String that consumes THREE arguments */ |
2087 | 645 |
uint str = modifier + GetInt32(&argv); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
646 |
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 3), last); |
2087 | 647 |
modifier = 0; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
648 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
649 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
650 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
651 |
case SCC_STRING4: { /* {STRING4} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
652 |
/* String that consumes FOUR arguments */ |
2087 | 653 |
uint str = modifier + GetInt32(&argv); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
654 |
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 4), last); |
2087 | 655 |
modifier = 0; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
656 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
657 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
658 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
659 |
case SCC_STRING5: { /* {STRING5} */ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
660 |
/* String that consumes FIVE arguments */ |
2087 | 661 |
uint str = modifier + GetInt32(&argv); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
662 |
buff = GetStringWithArgs(buff, str, GetArgvPtr(&argv, 5), last); |
2087 | 663 |
modifier = 0; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
664 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
665 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
666 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
667 |
case SCC_STATION_FEATURES: { /* {STATIONFEATURES} */ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
668 |
buff = StationGetSpecialString(buff, GetInt32(&argv), last); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
669 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2057
diff
changeset
|
670 |
} |
0 | 671 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
672 |
case SCC_INDUSTRY_NAME: { /* {INDUSTRY} */ |
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
2966
diff
changeset
|
673 |
const Industry* i = GetIndustry(GetInt32(&argv)); |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
674 |
int64 args[2]; |
2070
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
675 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
676 |
/* industry not valid anymore? */ |
7390
16fb97ba8133
(svn r10759) -Codechange: make the industry struct use the pool item class as super class.
rubidium
parents:
7386
diff
changeset
|
677 |
if (!i->IsValid()) break; |
2070
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
678 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
679 |
/* First print the town name and the industry type name |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
680 |
* The string STR_INDUSTRY_PATTERN controls the formatting */ |
2070
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
681 |
args[0] = i->town->index; |
4942
7fb6c39eb421
(svn r6930) -Codechange: Move industry name into IndustrySpec
belugas
parents:
4920
diff
changeset
|
682 |
args[1] = GetIndustrySpec(i->type)->name; |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
683 |
buff = FormatString(buff, GetStringPtr(STR_INDUSTRY_FORMAT), args, modifier >> 24, last); |
2087 | 684 |
modifier = 0; |
2070
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
685 |
break; |
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
686 |
} |
47b1f29d4671
(svn r2580) Change: Added {INDUSTRY} command for printing industry names instead of the old {TOWN} {STRING} way.
ludde
parents:
2063
diff
changeset
|
687 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
688 |
case SCC_VOLUME: { // {VOLUME} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
689 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
690 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
691 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].v_m >> units[_settings_game.locale.units].v_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
692 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].l_volume), args, modifier >> 24, last); |
2087 | 693 |
modifier = 0; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
694 |
break; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
695 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
696 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
697 |
case SCC_GENDER_LIST: { // {G 0 Der Die Das} |
8445
54a5d84d1d7d
(svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings.
peter1138
parents:
8323
diff
changeset
|
698 |
const char *s = GetStringPtr(argv_orig[(byte)*str++]); // contains the string that determines gender. |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
699 |
int len; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
700 |
int gender = 0; |
7411
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
701 |
if (s != NULL) { |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
702 |
wchar_t c = Utf8Consume(&s); |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
703 |
/* Switch case is always put before genders, so remove those bits */ |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
704 |
if (c == SCC_SWITCH_CASE) { |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
705 |
/* Skip to the last (i.e. default) case */ |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
706 |
for (uint num = (byte)*s++; num != 0; num--) s += 3 + (s[1] << 8) + s[2]; |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
707 |
|
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
708 |
c = Utf8Consume(&s); |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
709 |
} |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
710 |
/* Does this string have a gender, if so, set it */ |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
711 |
if (c == SCC_GENDER_INDEX) gender = (byte)s[0]; |
6aa1fd67a914
(svn r10792) -Fix [FS#1104]: when determining the gender of a string, do not assume that the gender is in the front of the string when there can be case switching code at that location.
rubidium
parents:
7393
diff
changeset
|
712 |
} |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
713 |
str = ParseStringChoice(str, gender, buff, &len); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
714 |
buff += len; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
715 |
break; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
716 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
717 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
718 |
case SCC_DATE_TINY: { // {DATE_TINY} |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
719 |
buff = FormatTinyDate(buff, GetInt32(&argv), last); |
2087 | 720 |
break; |
721 |
} |
|
722 |
||
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
723 |
case SCC_CARGO: { // {CARGO} |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
724 |
/* Layout now is: |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
725 |
* 8bit - cargo type |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
726 |
* 16-bit - cargo count */ |
4898
e3962fe14ef8
(svn r6858) - Fix (r6855): Handle rail vehicles with no capacity (N/A) by setting cargo type to CT_INVALID and handling it later. STR_8838_N_A is not a valid cargo type...
peter1138
parents:
4840
diff
changeset
|
727 |
CargoID cargo = GetInt32(&argv); |
7393
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7390
diff
changeset
|
728 |
StringID cargo_str = (cargo == CT_INVALID) ? STR_8838_N_A : GetCargo(cargo)->quantifier; |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
729 |
buff = GetStringWithArgs(buff, cargo_str, argv++, last); |
2087 | 730 |
break; |
731 |
} |
|
732 |
||
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
733 |
case SCC_POWER: { // {POWER} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
734 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
735 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
736 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].p_m >> units[_settings_game.locale.units].p_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
737 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].power), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
738 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
739 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
740 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
741 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
742 |
case SCC_VOLUME_SHORT: { // {VOLUME_S} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
743 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
744 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
745 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].v_m >> units[_settings_game.locale.units].v_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
746 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].s_volume), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
747 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
748 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
749 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
750 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
751 |
case SCC_WEIGHT: { // {WEIGHT} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
752 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
753 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
754 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].w_m >> units[_settings_game.locale.units].w_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
755 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].l_weight), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
756 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
757 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
758 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
759 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
760 |
case SCC_WEIGHT_SHORT: { // {WEIGHT_S} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
761 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
762 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
763 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].w_m >> units[_settings_game.locale.units].w_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
764 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].s_weight), args, modifier >> 24, last); |
3342
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
765 |
modifier = 0; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
766 |
break; |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
767 |
} |
cb9b5c6dd74c
(svn r4126) - Feature: A new multi-lingual multi-measuring-unit system:
peter1138
parents:
3329
diff
changeset
|
768 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
769 |
case SCC_FORCE: { // {FORCE} |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
770 |
int64 args[1]; |
9466
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
771 |
assert(_settings_game.locale.units < lengthof(units)); |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
772 |
args[0] = GetInt32(&argv) * units[_settings_game.locale.units].f_m >> units[_settings_game.locale.units].f_s; |
5a1d4eb2ae07
(svn r13386) -Fix: global currency/units setting being overriden when loading a savegame.
rubidium
parents:
9413
diff
changeset
|
773 |
buff = FormatString(buff, GetStringPtr(units[_settings_game.locale.units].force), args, modifier >> 24, last); |
3489
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
774 |
modifier = 0; |
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
775 |
break; |
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
776 |
} |
497361c60b90
(svn r4340) Add force {FORCE} to the units system. This is currently unused.
peter1138
parents:
3485
diff
changeset
|
777 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
778 |
case SCC_SKIP: // {SKIP} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
779 |
argv++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
780 |
break; |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2353
diff
changeset
|
781 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
782 |
/* This sets up the gender for the string. |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
783 |
* We just ignore this one. It's used in {G 0 Der Die Das} to determine the case. */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
784 |
case SCC_GENDER_INDEX: // {GENDER 0} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
785 |
str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
786 |
break; |
2630 | 787 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
788 |
case SCC_STRING: {// {STRING} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
789 |
uint str = modifier + GetInt32(&argv); |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
790 |
/* WARNING. It's prohibited for the included string to consume any arguments. |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
791 |
* For included strings that consume argument, you should use STRING1, STRING2 etc. |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
792 |
* To debug stuff you can set argv to NULL and it will tell you */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
793 |
buff = GetStringWithArgs(buff, str, argv, last); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
794 |
modifier = 0; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
795 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
796 |
} |
2087 | 797 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
798 |
case SCC_COMMA: // {COMMA} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
799 |
buff = FormatCommaNumber(buff, GetInt64(&argv), last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
800 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
801 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
802 |
case SCC_ARG_INDEX: // Move argument pointer |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
803 |
argv = argv_orig + (byte)*str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
804 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
805 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
806 |
case SCC_PLURAL_LIST: { // {P} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
807 |
int64 v = argv_orig[(byte)*str++]; // contains the number that determines plural |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
808 |
int len; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
809 |
str = ParseStringChoice(str, DeterminePluralForm(v), buff, &len); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
810 |
buff += len; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
811 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
812 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
813 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
814 |
case SCC_NUM: // {NUM} |
7356
2f277ca36d46
(svn r10719) -Codechange: since DParams are now 64 bits we should make NUM and COMMA handle writing 64 bit integers to the strings.
rubidium
parents:
7348
diff
changeset
|
815 |
buff = FormatNoCommaNumber(buff, GetInt64(&argv), last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
816 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
817 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
818 |
case SCC_CURRENCY: // {CURRENCY} |
6994
8eab245a77c3
(svn r10250) -Fix: money is always 64 bits, so always parse those 64 bits.
rubidium
parents:
6956
diff
changeset
|
819 |
buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
820 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
821 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
822 |
case SCC_WAYPOINT_NAME: { // {WAYPOINT} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
823 |
Waypoint *wp = GetWaypoint(GetInt32(&argv)); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
824 |
|
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
825 |
if (!wp->IsValid()) { // waypoint doesn't exist anymore |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
826 |
buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
827 |
} else if (wp->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
828 |
buff = strecpy(buff, wp->name, last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
829 |
} else { |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
830 |
int64 temp[2]; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
831 |
temp[0] = wp->town_index; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
832 |
temp[1] = wp->town_cn + 1; |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
833 |
StringID str = wp->town_cn == 0 ? STR_WAYPOINTNAME_CITY : STR_WAYPOINTNAME_CITY_SERIAL; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
834 |
|
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
835 |
buff = GetStringWithArgs(buff, str, temp, last); |
2087 | 836 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
837 |
break; |
0 | 838 |
} |
1097
196431cb50fe
(svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents:
1093
diff
changeset
|
839 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
840 |
case SCC_STATION_NAME: { // {STATION} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
841 |
const Station* st = GetStation(GetInt32(&argv)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
842 |
|
5996
4bcab9c286d8
(svn r8707) -Codechange: Turn IsValidStation into a method of Station
celestar
parents:
5874
diff
changeset
|
843 |
if (!st->IsValid()) { // station doesn't exist anymore |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
844 |
buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
845 |
} else if (st->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
846 |
buff = strecpy(buff, st->name, last); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
847 |
} else { |
7055
a98b5a273ddb
(svn r10320) -Fix [FS#278]: one could only build a limited number of stations before one had to rename them.
rubidium
parents:
7051
diff
changeset
|
848 |
int64 temp[3]; |
6956
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
849 |
temp[0] = STR_TOWN; |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
850 |
temp[1] = st->town->index; |
7055
a98b5a273ddb
(svn r10320) -Fix [FS#278]: one could only build a limited number of stations before one had to rename them.
rubidium
parents:
7051
diff
changeset
|
851 |
temp[2] = st->index; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
852 |
buff = GetStringWithArgs(buff, st->string_id, temp, last); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
853 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
854 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
855 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
856 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
857 |
case SCC_TOWN_NAME: { // {TOWN} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
858 |
const Town* t = GetTown(GetInt32(&argv)); |
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
859 |
int64 temp[1]; |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
860 |
|
7386
93f6a042d1c3
(svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium
parents:
7382
diff
changeset
|
861 |
assert(t->IsValid()); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
862 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
863 |
temp[0] = t->townnameparts; |
6956
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
864 |
uint32 grfid = t->townnamegrfid; |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
865 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
866 |
if (t->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
867 |
buff = strecpy(buff, t->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
868 |
} else if (grfid == 0) { |
6956
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
869 |
/* Original town name */ |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
870 |
buff = GetStringWithArgs(buff, t->townnametype, temp, last); |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
871 |
} else { |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
872 |
/* Newgrf town name */ |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
873 |
if (GetGRFTownName(grfid) != NULL) { |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
874 |
/* The grf is loaded */ |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
875 |
buff = GRFTownNameGenerate(buff, t->townnamegrfid, t->townnametype, t->townnameparts, last); |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
876 |
} else { |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
877 |
/* Fallback to english original */ |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
878 |
buff = GetStringWithArgs(buff, SPECSTR_TOWNNAME_ENGLISH, temp, last); |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
879 |
} |
3579bfc5157b
(svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents:
6929
diff
changeset
|
880 |
} |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
881 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
882 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
883 |
|
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
884 |
case SCC_GROUP_NAME: { // {GROUP} |
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
885 |
const Group *g = GetGroup(GetInt32(&argv)); |
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
886 |
|
7382
721b2d81ce91
(svn r10751) -Codechange: make the group struct use the pool item class as super class.
rubidium
parents:
7356
diff
changeset
|
887 |
assert(g->IsValid()); |
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
888 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
889 |
if (g->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
890 |
buff = strecpy(buff, g->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
891 |
} else { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
892 |
int64 args[1]; |
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
893 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
894 |
args[0] = g->index; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
895 |
buff = GetStringWithArgs(buff, STR_GROUP_NAME_FORMAT, args, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
896 |
} |
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
897 |
break; |
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
898 |
} |
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6492
diff
changeset
|
899 |
|
7059
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
900 |
case SCC_ENGINE_NAME: { // {ENGINE} |
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
901 |
EngineID engine = (EngineID)GetInt32(&argv); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
902 |
const Engine *e = GetEngine(engine); |
7059
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
903 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
904 |
if (e->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
905 |
buff = strecpy(buff, e->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
906 |
} else { |
9070
dd0121143eba
(svn r12924) -Feature: Introducing the so called 'engine pool' which primarily removes the fixed engine type limits and also happens to allow (with the patch option 'dynamic_engines') multiple NewGRF vehicle sets to coexist.
peter1138
parents:
8998
diff
changeset
|
907 |
buff = GetStringWithArgs(buff, e->info.string_id, NULL, last); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
908 |
} |
7059
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
909 |
break; |
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
910 |
} |
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
911 |
|
7049
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
912 |
case SCC_VEHICLE_NAME: { // {VEHICLE} |
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
913 |
const Vehicle *v = GetVehicle(GetInt32(&argv)); |
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
914 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
915 |
if (v->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
916 |
buff = strecpy(buff, v->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
917 |
} else { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
918 |
int64 args[1]; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
919 |
args[0] = v->unitnumber; |
7049
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
920 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
921 |
StringID str; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
922 |
switch (v->type) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
923 |
default: NOT_REACHED(); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
924 |
case VEH_TRAIN: str = STR_SV_TRAIN_NAME; break; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
925 |
case VEH_ROAD: str = STR_SV_ROADVEH_NAME; break; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
926 |
case VEH_SHIP: str = STR_SV_SHIP_NAME; break; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
927 |
case VEH_AIRCRAFT: str = STR_SV_AIRCRAFT_NAME; break; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
928 |
} |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
929 |
|
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
930 |
buff = GetStringWithArgs(buff, str, args, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
931 |
} |
7049
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
932 |
break; |
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
933 |
} |
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7006
diff
changeset
|
934 |
|
7056
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7055
diff
changeset
|
935 |
case SCC_SIGN_NAME: { // {SIGN} |
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7055
diff
changeset
|
936 |
const Sign *si = GetSign(GetInt32(&argv)); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
937 |
if (si->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
938 |
buff = strecpy(buff, si->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
939 |
} else { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
940 |
buff = GetStringWithArgs(buff, STR_280A_SIGN, NULL, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
941 |
} |
7056
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7055
diff
changeset
|
942 |
break; |
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7055
diff
changeset
|
943 |
} |
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7055
diff
changeset
|
944 |
|
7058
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
945 |
case SCC_COMPANY_NAME: { // {COMPANY} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
946 |
const Player *p = GetPlayer((PlayerID)GetInt32(&argv)); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
947 |
|
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
948 |
if (p->name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
949 |
buff = strecpy(buff, p->name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
950 |
} else { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
951 |
int64 args[1]; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
952 |
args[0] = p->name_2; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
953 |
buff = GetStringWithArgs(buff, p->name_1, args, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
954 |
} |
7058
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
955 |
break; |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
956 |
} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
957 |
|
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
958 |
case SCC_COMPANY_NUM: { // {COMPANYNUM} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
959 |
PlayerID player = (PlayerID)GetInt32(&argv); |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
960 |
|
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
961 |
/* Nothing is added for AI or inactive players */ |
9659
187142ff9b6c
(svn r13731) -Codechange: make a pool of the array of players.
rubidium
parents:
9652
diff
changeset
|
962 |
if (IsValidPlayerID(player) && IsHumanPlayer(player)) { |
7058
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
963 |
int64 args[1]; |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
964 |
args[0] = player + 1; |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
965 |
buff = GetStringWithArgs(buff, STR_7002_PLAYER, args, last); |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
966 |
} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
967 |
break; |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
968 |
} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
969 |
|
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
970 |
case SCC_PLAYER_NAME: { // {PLAYERNAME} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
971 |
const Player *p = GetPlayer((PlayerID)GetInt32(&argv)); |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
972 |
|
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
973 |
if (p->president_name != NULL) { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
974 |
buff = strecpy(buff, p->president_name, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
975 |
} else { |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
976 |
int64 args[1]; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
977 |
args[0] = p->president_name_2; |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
978 |
buff = GetStringWithArgs(buff, p->president_name_1, args, last); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
979 |
} |
7058
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
980 |
break; |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
981 |
} |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
982 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
983 |
case SCC_SETCASE: { // {SETCASE} |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
984 |
/* This is a pseudo command, it's outputted when someone does {STRING.ack} |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
985 |
* The modifier is added to all subsequent GetStringWithArgs that accept the modifier. */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
986 |
modifier = (byte)*str++ << 24; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
987 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
988 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
989 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
990 |
case SCC_SWITCH_CASE: { // {Used to implement case switching} |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
991 |
/* <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT> |
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
992 |
* Each LEN is printed using 2 bytes in big endian order. */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
993 |
uint num = (byte)*str++; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
994 |
while (num) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
995 |
if ((byte)str[0] == casei) { |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
996 |
/* Found the case, adjust str pointer and continue */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
997 |
str += 3; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
998 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
999 |
} |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1000 |
/* Otherwise skip to the next case */ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1001 |
str += 3 + (str[1] << 8) + str[2]; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1002 |
num--; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1003 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1004 |
break; |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1005 |
} |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1006 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1007 |
default: |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1008 |
if (buff + Utf8CharLen(b) < last) buff += Utf8Encode(buff, b); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1009 |
break; |
0 | 1010 |
} |
1011 |
} |
|
1316 | 1012 |
*buff = '\0'; |
0 | 1013 |
return buff; |
1014 |
} |
|
1015 |
||
1016 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1017 |
static char *StationGetSpecialString(char *buff, int x, const char* last) |
0 | 1018 |
{ |
8998
2748f3d2a1f6
(svn r12793) -Codechange: Use enum values for station types instead of mysterious hex (ln)
peter1138
parents:
8991
diff
changeset
|
1019 |
if ((x & FACIL_TRAIN) && (buff + Utf8CharLen(SCC_TRAIN) < last)) buff += Utf8Encode(buff, SCC_TRAIN); |
2748f3d2a1f6
(svn r12793) -Codechange: Use enum values for station types instead of mysterious hex (ln)
peter1138
parents:
8991
diff
changeset
|
1020 |
if ((x & FACIL_TRUCK_STOP) && (buff + Utf8CharLen(SCC_LORRY) < last)) buff += Utf8Encode(buff, SCC_LORRY); |
2748f3d2a1f6
(svn r12793) -Codechange: Use enum values for station types instead of mysterious hex (ln)
peter1138
parents:
8991
diff
changeset
|
1021 |
if ((x & FACIL_BUS_STOP) && (buff + Utf8CharLen(SCC_BUS) < last)) buff += Utf8Encode(buff, SCC_BUS); |
2748f3d2a1f6
(svn r12793) -Codechange: Use enum values for station types instead of mysterious hex (ln)
peter1138
parents:
8991
diff
changeset
|
1022 |
if ((x & FACIL_AIRPORT) && (buff + Utf8CharLen(SCC_PLANE) < last)) buff += Utf8Encode(buff, SCC_PLANE); |
2748f3d2a1f6
(svn r12793) -Codechange: Use enum values for station types instead of mysterious hex (ln)
peter1138
parents:
8991
diff
changeset
|
1023 |
if ((x & FACIL_DOCK) && (buff + Utf8CharLen(SCC_SHIP) < last)) buff += Utf8Encode(buff, SCC_SHIP); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4942
diff
changeset
|
1024 |
*buff = '\0'; |
0 | 1025 |
return buff; |
1026 |
} |
|
1027 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1028 |
static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char* last) |
1316 | 1029 |
{ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1030 |
char name[512]; |
0 | 1031 |
|
4920
67f6806ce054
(svn r6896) - Fix (r6895): Supply last position of the correct buffer *again*
peter1138
parents:
4919
diff
changeset
|
1032 |
_town_name_generators[ind](name, seed, lastof(name)); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1033 |
return strecpy(buff, name, last); |
0 | 1034 |
} |
1035 |
||
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1036 |
static const char* const _silly_company_names[] = { |
0 | 1037 |
"Bloggs Brothers", |
1038 |
"Tiny Transport Ltd.", |
|
1039 |
"Express Travel", |
|
1040 |
"Comfy-Coach & Co.", |
|
1041 |
"Crush & Bump Ltd.", |
|
1042 |
"Broken & Late Ltd.", |
|
1043 |
"Sam Speedy & Son", |
|
1044 |
"Supersonic Travel", |
|
1045 |
"Mike's Motors", |
|
1046 |
"Lightning International", |
|
1047 |
"Pannik & Loozit Ltd.", |
|
1048 |
"Inter-City Transport", |
|
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1049 |
"Getout & Pushit Ltd." |
0 | 1050 |
}; |
1051 |
||
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1052 |
static const char* const _surname_list[] = { |
0 | 1053 |
"Adams", |
1054 |
"Allan", |
|
1055 |
"Baker", |
|
1056 |
"Bigwig", |
|
1057 |
"Black", |
|
1058 |
"Bloggs", |
|
1059 |
"Brown", |
|
1060 |
"Campbell", |
|
1061 |
"Gordon", |
|
1062 |
"Hamilton", |
|
1063 |
"Hawthorn", |
|
1064 |
"Higgins", |
|
1065 |
"Green", |
|
1066 |
"Gribble", |
|
1067 |
"Jones", |
|
1068 |
"McAlpine", |
|
1069 |
"MacDonald", |
|
1070 |
"McIntosh", |
|
1071 |
"Muir", |
|
1072 |
"Murphy", |
|
1073 |
"Nelson", |
|
1074 |
"O'Donnell", |
|
1075 |
"Parker", |
|
1076 |
"Phillips", |
|
1077 |
"Pilkington", |
|
1078 |
"Quigley", |
|
1079 |
"Sharkey", |
|
1080 |
"Thomson", |
|
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1081 |
"Watkins" |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1082 |
}; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1083 |
|
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1084 |
static const char* const _silly_surname_list[] = { |
0 | 1085 |
"Grumpy", |
1086 |
"Dozy", |
|
1087 |
"Speedy", |
|
1088 |
"Nosey", |
|
1089 |
"Dribble", |
|
1090 |
"Mushroom", |
|
1091 |
"Cabbage", |
|
1092 |
"Sniffle", |
|
1093 |
"Fishy", |
|
1094 |
"Swindle", |
|
1095 |
"Sneaky", |
|
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1096 |
"Nutkins" |
0 | 1097 |
}; |
1098 |
||
1312
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
1099 |
static const char _initial_name_letters[] = { |
1321 | 1100 |
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', |
1101 |
'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', |
|
0 | 1102 |
}; |
1103 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1104 |
static char *GenAndCoName(char *buff, uint32 arg, const char* last) |
0 | 1105 |
{ |
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1106 |
const char* const* base; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1107 |
uint num; |
0 | 1108 |
|
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
1109 |
if (_settings_game.game_creation.landscape == LT_TOYLAND) { |
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1110 |
base = _silly_surname_list; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1111 |
num = lengthof(_silly_surname_list); |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1112 |
} else { |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1113 |
base = _surname_list; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1114 |
num = lengthof(_surname_list); |
0 | 1115 |
} |
1116 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1117 |
buff = strecpy(buff, base[num * GB(arg, 16, 8) >> 8], last); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1118 |
buff = strecpy(buff, " & Co.", last); |
0 | 1119 |
|
1120 |
return buff; |
|
1121 |
} |
|
1122 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1123 |
static char *GenPresidentName(char *buff, uint32 x, const char* last) |
0 | 1124 |
{ |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1125 |
char initial[] = "?. "; |
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1126 |
const char* const* base; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1127 |
uint num; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1128 |
uint i; |
0 | 1129 |
|
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1130 |
initial[0] = _initial_name_letters[sizeof(_initial_name_letters) * GB(x, 0, 8) >> 8]; |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1131 |
buff = strecpy(buff, initial, last); |
0 | 1132 |
|
2150
f710b959b1c4
(svn r2660) Get rid of some more shifting/anding/casting
tron
parents:
2140
diff
changeset
|
1133 |
i = (sizeof(_initial_name_letters) + 35) * GB(x, 8, 8) >> 8; |
0 | 1134 |
if (i < sizeof(_initial_name_letters)) { |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1135 |
initial[0] = _initial_name_letters[i]; |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1136 |
buff = strecpy(buff, initial, last); |
0 | 1137 |
} |
1138 |
||
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
1139 |
if (_settings_game.game_creation.landscape == LT_TOYLAND) { |
2650
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1140 |
base = _silly_surname_list; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1141 |
num = lengthof(_silly_surname_list); |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1142 |
} else { |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1143 |
base = _surname_list; |
cec7c95d039d
(svn r3192) Split the surname list into two lists (non-toyland/toyland) and use lengthof() to get the number of names instead of using magic numbers
tron
parents:
2643
diff
changeset
|
1144 |
num = lengthof(_surname_list); |
0 | 1145 |
} |
1146 |
||
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1147 |
buff = strecpy(buff, base[num * GB(x, 16, 8) >> 8], last); |
0 | 1148 |
|
1149 |
return buff; |
|
1150 |
} |
|
1151 |
||
7002
1bf6a62b0fcb
(svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents:
6996
diff
changeset
|
1152 |
static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last) |
0 | 1153 |
{ |
1316 | 1154 |
switch (ind) { |
1321 | 1155 |
case 1: // not used |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1156 |
return strecpy(buff, _silly_company_names[GetInt32(&argv) & 0xFFFF], last); |
0 | 1157 |
|
1321 | 1158 |
case 2: // used for Foobar & Co company names |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1159 |
return GenAndCoName(buff, GetInt32(&argv), last); |
0 | 1160 |
|
1321 | 1161 |
case 3: // President name |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1162 |
return GenPresidentName(buff, GetInt32(&argv), last); |
0 | 1163 |
|
1321 | 1164 |
case 4: // song names |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1165 |
return strecpy(buff, origin_songs_specs[GetInt32(&argv) - 1].song_name, last); |
0 | 1166 |
} |
1167 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1168 |
/* town name? */ |
8969
6d1c74e0e2cd
(svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents:
8898
diff
changeset
|
1169 |
if (IsInsideMM(ind - 6, 0, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1)) { |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1170 |
buff = GetSpecialTownNameString(buff, ind - 6, GetInt32(&argv), last); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1171 |
return strecpy(buff, " Transport", last); |
0 | 1172 |
} |
1173 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1174 |
/* language name? */ |
7954
57b51c69c072
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7928
diff
changeset
|
1175 |
if (IsInsideMM(ind, (SPECSTR_LANGUAGE_START - 0x70E4), (SPECSTR_LANGUAGE_END - 0x70E4) + 1)) { |
0 | 1176 |
int i = ind - (SPECSTR_LANGUAGE_START - 0x70E4); |
1853
a7b4892162f6
(svn r2359) Use strecpy instead of str_cat (which was rather a cpy than a cat, btw), remove the latter and simplify some constructs
tron
parents:
1704
diff
changeset
|
1177 |
return strecpy(buff, |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1178 |
i == _dynlang.curr ? _langpack->own_name : _dynlang.ent[i].name, last); |
0 | 1179 |
} |
1180 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1181 |
/* resolution size? */ |
7954
57b51c69c072
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7928
diff
changeset
|
1182 |
if (IsInsideMM(ind, (SPECSTR_RESOLUTION_START - 0x70E4), (SPECSTR_RESOLUTION_END - 0x70E4) + 1)) { |
0 | 1183 |
int i = ind - (SPECSTR_RESOLUTION_START - 0x70E4); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1184 |
buff += snprintf( |
9533
e8b86b70c5f6
(svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents:
9470
diff
changeset
|
1185 |
buff, last - buff + 1, "%dx%d", _resolutions[i].width, _resolutions[i].height |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1186 |
); |
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1187 |
return buff; |
0 | 1188 |
} |
1189 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1190 |
/* screenshot format name? */ |
7954
57b51c69c072
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7928
diff
changeset
|
1191 |
if (IsInsideMM(ind, (SPECSTR_SCREENSHOT_START - 0x70E4), (SPECSTR_SCREENSHOT_END - 0x70E4) + 1)) { |
0 | 1192 |
int i = ind - (SPECSTR_SCREENSHOT_START - 0x70E4); |
4912
0f51b47cb983
(svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents:
4898
diff
changeset
|
1193 |
return strecpy(buff, GetScreenshotFormatDesc(i), last); |
0 | 1194 |
} |
1195 |
||
1196 |
assert(0); |
|
1197 |
return NULL; |
|
1198 |
} |
|
1199 |
||
6898
d23c46e9a6ec
(svn r10145) -Fix: make compiling with networking disabled (again) possible.
rubidium
parents:
6797
diff
changeset
|
1200 |
#ifdef ENABLE_NETWORK |
6793
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1201 |
extern void SortNetworkLanguages(); |
6898
d23c46e9a6ec
(svn r10145) -Fix: make compiling with networking disabled (again) possible.
rubidium
parents:
6797
diff
changeset
|
1202 |
#else /* ENABLE_NETWORK */ |
d23c46e9a6ec
(svn r10145) -Fix: make compiling with networking disabled (again) possible.
rubidium
parents:
6797
diff
changeset
|
1203 |
static inline void SortNetworkLanguages() {} |
d23c46e9a6ec
(svn r10145) -Fix: make compiling with networking disabled (again) possible.
rubidium
parents:
6797
diff
changeset
|
1204 |
#endif /* ENABLE_NETWORK */ |
6793
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1205 |
|
1316 | 1206 |
bool ReadLanguagePack(int lang_index) |
1207 |
{ |
|
0 | 1208 |
int tot_count, i; |
1209 |
size_t len; |
|
1312
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
1210 |
char **langpack_offs; |
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
1211 |
char *s; |
0 | 1212 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1213 |
LanguagePack *lang_pack = (LanguagePack*)ReadFileToMem(_dynlang.ent[lang_index].file, &len, 200000); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1214 |
|
0 | 1215 |
if (lang_pack == NULL) return false; |
1319
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
1216 |
if (len < sizeof(LanguagePack) || |
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
1217 |
lang_pack->ident != TO_LE32(LANGUAGE_PACK_IDENT) || |
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
1218 |
lang_pack->version != TO_LE32(LANGUAGE_PACK_VERSION)) { |
0 | 1219 |
free(lang_pack); |
1220 |
return false; |
|
1221 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
64
diff
changeset
|
1222 |
|
9543
a60fb4bacc66
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
smatz
parents:
9533
diff
changeset
|
1223 |
#if TTD_ENDIAN == TTD_BIG_ENDIAN |
1316 | 1224 |
for (i = 0; i != 32; i++) { |
2966
661554d683cd
(svn r3529) - Fix: [ 1415782 ] crash in string code with openbsd/zaurus; alignment issues (thanks Tron for the help)
Darkvater
parents:
2957
diff
changeset
|
1225 |
lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]); |
0 | 1226 |
} |
9543
a60fb4bacc66
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
smatz
parents:
9533
diff
changeset
|
1227 |
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ |
0 | 1228 |
|
1229 |
tot_count = 0; |
|
1316 | 1230 |
for (i = 0; i != 32; i++) { |
1319
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
1231 |
uint num = lang_pack->offsets[i]; |
0 | 1232 |
_langtab_start[i] = tot_count; |
1233 |
_langtab_num[i] = num; |
|
1234 |
tot_count += num; |
|
1235 |
} |
|
1236 |
||
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1237 |
/* Allocate offsets */ |
5609
dc6a58930ba4
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5587
diff
changeset
|
1238 |
langpack_offs = MallocT<char*>(tot_count); |
0 | 1239 |
|
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1240 |
/* Fill offsets */ |
1319
beeef5cce0e4
(svn r1823) Get rid of some ugly cast magic concerning language packs
tron
parents:
1318
diff
changeset
|
1241 |
s = lang_pack->data; |
1316 | 1242 |
for (i = 0; i != tot_count; i++) { |
1312
594340ca5b87
(svn r1816) Use char instead of byte for string formatting
tron
parents:
1311
diff
changeset
|
1243 |
len = (byte)*s; |
1316 | 1244 |
*s++ = '\0'; // zero terminate the string before. |
1245 |
if (len >= 0xC0) len = ((len & 0x3F) << 8) + (byte)*s++; |
|
0 | 1246 |
langpack_offs[i] = s; |
1247 |
s += len; |
|
1248 |
} |
|
1249 |
||
1321 | 1250 |
free(_langpack); |
0 | 1251 |
_langpack = lang_pack; |
1252 |
||
1321 | 1253 |
free(_langpack_offs); |
0 | 1254 |
_langpack_offs = langpack_offs; |
1255 |
||
6344
e5edb531b27e
(svn r9373) -Fix (r9271): the chosen language was not stored nor read properly in/from the cfg.
rubidium
parents:
6320
diff
changeset
|
1256 |
const char *c_file = strrchr(_dynlang.ent[lang_index].file, PATHSEPCHAR) + 1; |
e5edb531b27e
(svn r9373) -Fix (r9271): the chosen language was not stored nor read properly in/from the cfg.
rubidium
parents:
6320
diff
changeset
|
1257 |
ttd_strlcpy(_dynlang.curr_file, c_file, lengthof(_dynlang.curr_file)); |
0 | 1258 |
|
1259 |
_dynlang.curr = lang_index; |
|
3601
138bf309cf27
(svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents:
3489
diff
changeset
|
1260 |
SetCurrentGrfLangID(_langpack->isocode); |
6793
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1261 |
SortNetworkLanguages(); |
0 | 1262 |
return true; |
1263 |
} |
|
1264 |
||
7348
aca2f2517ec1
(svn r10711) -Fix [Win32]: take default language from current user's locale on Windows (In-)
KUDr
parents:
7316
diff
changeset
|
1265 |
/* Win32 implementation in win32.cpp. */ |
7435
c5d1a7a3235c
(svn r10851) -Feature [OSX]: OpenTTD will now pick the same language as finder is set to if no config file is found (ln-)
bjarni
parents:
7422
diff
changeset
|
1266 |
/* OS X implementation in os/macosx/macos.mm. */ |
c5d1a7a3235c
(svn r10851) -Feature [OSX]: OpenTTD will now pick the same language as finder is set to if no config file is found (ln-)
bjarni
parents:
7422
diff
changeset
|
1267 |
#if !(defined(WIN32) || defined(__APPLE__)) |
3329
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1268 |
/** Determine the current charset based on the environment |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1269 |
* First check some default values, after this one we passed ourselves |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1270 |
* and if none exist return the value for $LANG |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6359
diff
changeset
|
1271 |
* @param param environment variable to check conditionally if default ones are not |
3329
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1272 |
* set. Pass NULL if you don't want additional checks. |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1273 |
* @return return string containing current charset, or NULL if not-determinable */ |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1274 |
const char *GetCurrentLocale(const char *param) |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1275 |
{ |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1276 |
const char *env; |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1277 |
|
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1278 |
env = getenv("LANGUAGE"); |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1279 |
if (env != NULL) return env; |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1280 |
|
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1281 |
env = getenv("LC_ALL"); |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1282 |
if (env != NULL) return env; |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1283 |
|
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1284 |
if (param != NULL) { |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1285 |
env = getenv(param); |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1286 |
if (env != NULL) return env; |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1287 |
} |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1288 |
|
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1289 |
return getenv("LANG"); |
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1290 |
} |
8991
749d842945cc
(svn r12786) -Change: remove more function from functions.h.
rubidium
parents:
8987
diff
changeset
|
1291 |
#else |
749d842945cc
(svn r12786) -Change: remove more function from functions.h.
rubidium
parents:
8987
diff
changeset
|
1292 |
const char *GetCurrentLocale(const char *param); |
7435
c5d1a7a3235c
(svn r10851) -Feature [OSX]: OpenTTD will now pick the same language as finder is set to if no config file is found (ln-)
bjarni
parents:
7422
diff
changeset
|
1293 |
#endif /* !(defined(WIN32) || defined(__APPLE__)) */ |
3329
9885789ecaf7
(svn r4105) - Feature: Add proper ISO-8859-15 <> LOCALCODE conversion. As the mess that is makefile can't properly support it at the moment, it is only available for MACOSX. Windows doesn't need FS conversion and I have no idea about OS/2 so it's disabled for them.
Darkvater
parents:
3033
diff
changeset
|
1294 |
|
6793
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1295 |
int CDECL StringIDSorter(const void *a, const void *b) |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1296 |
{ |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1297 |
const StringID va = *(const StringID*)a; |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1298 |
const StringID vb = *(const StringID*)b; |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1299 |
char stra[512]; |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1300 |
char strb[512]; |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1301 |
GetString(stra, va, lastof(stra)); |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1302 |
GetString(strb, vb, lastof(strb)); |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1303 |
|
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1304 |
return strcmp(stra, strb); |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1305 |
} |
05d91fa1c75c
(svn r10032) -Add: sort the strings in server language dropdown
glx
parents:
6643
diff
changeset
|
1306 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1307 |
/** |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1308 |
* Checks whether the given language is already found. |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1309 |
* @param langs languages we've found so fa |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1310 |
* @param max the length of the language list |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1311 |
* @param language name of the language to check |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1312 |
* @return true if and only if a language file with the same name has not been found |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1313 |
*/ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1314 |
static bool UniqueLanguageFile(const Language *langs, uint max, const char *language) |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1315 |
{ |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1316 |
for (uint i = 0; i < max; i++) { |
6344
e5edb531b27e
(svn r9373) -Fix (r9271): the chosen language was not stored nor read properly in/from the cfg.
rubidium
parents:
6320
diff
changeset
|
1317 |
const char *f_name = strrchr(langs[i].file, PATHSEPCHAR) + 1; |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1318 |
if (strcmp(f_name, language) == 0) return false; // duplicates |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1319 |
} |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1320 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1321 |
return true; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1322 |
} |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1323 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1324 |
/** |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1325 |
* Reads the language file header and checks compatability. |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1326 |
* @param file the file to read |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1327 |
* @param hdr the place to write the header information to |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1328 |
* @return true if and only if the language file is of a compatible version |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1329 |
*/ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1330 |
static bool GetLanguageFileHeader(const char *file, LanguagePack *hdr) |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1331 |
{ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1332 |
FILE *f = fopen(file, "rb"); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1333 |
if (f == NULL) return false; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1334 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1335 |
size_t read = fread(hdr, sizeof(*hdr), 1, f); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1336 |
fclose(f); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1337 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1338 |
return read == 1 && |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1339 |
hdr->ident == TO_LE32(LANGUAGE_PACK_IDENT) && |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1340 |
hdr->version == TO_LE32(LANGUAGE_PACK_VERSION); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1341 |
} |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1342 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1343 |
/** |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1344 |
* Gets a list of languages from the given directory. |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1345 |
* @param langs the list to write to |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1346 |
* @param start the initial offset in the list |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1347 |
* @param max the length of the language list |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1348 |
* @param path the base directory to search in |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1349 |
* @return the number of added languages |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1350 |
*/ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1351 |
static int GetLanguageList(Language *langs, int start, int max, const char *path) |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1352 |
{ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1353 |
int i = start; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1354 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1355 |
DIR *dir = ttd_opendir(path); |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1356 |
if (dir != NULL) { |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1357 |
struct dirent *dirent; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1358 |
while ((dirent = readdir(dir)) != NULL && i < max) { |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1359 |
const char *d_name = FS2OTTD(dirent->d_name); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1360 |
const char *extension = strrchr(d_name, '.'); |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1361 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1362 |
/* Not a language file */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1363 |
if (extension == NULL || strcmp(extension, ".lng") != 0) continue; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1364 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1365 |
/* Filter any duplicate language-files, first-come first-serve */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1366 |
if (!UniqueLanguageFile(langs, i, d_name)) continue; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1367 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1368 |
langs[i].file = str_fmt("%s%s", path, d_name); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1369 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1370 |
/* Check whether the file is of the correct version */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1371 |
LanguagePack hdr; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1372 |
if (!GetLanguageFileHeader(langs[i].file, &hdr)) { |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1373 |
free(langs[i].file); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1374 |
continue; |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1375 |
} |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1376 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1377 |
i++; |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1378 |
} |
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1379 |
closedir(dir); |
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1380 |
} |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1381 |
return i - start; |
4219
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1382 |
} |
72768a8f3a97
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Darkvater
parents:
4120
diff
changeset
|
1383 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1384 |
/** |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1385 |
* Make a list of the available language packs. put the data in |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1386 |
* _dynlang struct. |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1387 |
*/ |
6247 | 1388 |
void InitializeLanguagePacks() |
0 | 1389 |
{ |
6929
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1390 |
Searchpath sp; |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1391 |
Language files[MAX_LANG]; |
6929
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1392 |
uint language_count = 0; |
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1393 |
|
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1394 |
FOR_ALL_SEARCHPATHS(sp) { |
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1395 |
char path[MAX_PATH]; |
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1396 |
FioAppendDirectory(path, lengthof(path), sp, LANG_DIR); |
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1397 |
language_count += GetLanguageList(files, language_count, lengthof(files), path); |
56470c1b8a66
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
6898
diff
changeset
|
1398 |
} |
9470
08424e2e79e4
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
9466
diff
changeset
|
1399 |
if (language_count == 0) usererror("No available language packs (invalid versions?)"); |
2257
ea9008cb49ec
(svn r2777) -Feature: When starting without a config file determine the language on basis of the current locale
tron
parents:
2201
diff
changeset
|
1400 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1401 |
/* Acquire the locale of the current system */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1402 |
const char *lang = GetCurrentLocale("LC_MESSAGES"); |
4505
abb08e94a1ea
(svn r6290) -Feature: When automatically detecting the language try to first match language+territory (e.g. de_CH), then just language (e.g. de) and fall back to en_GB otherwise
tron
parents:
4503
diff
changeset
|
1403 |
if (lang == NULL) lang = "en_GB"; |
2257
ea9008cb49ec
(svn r2777) -Feature: When starting without a config file determine the language on basis of the current locale
tron
parents:
2201
diff
changeset
|
1404 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1405 |
int chosen_language = -1; ///< Matching the language in the configuartion file or the current locale |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1406 |
int language_fallback = -1; ///< Using pt_PT for pt_BR locale when pt_BR is not available |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1407 |
int en_GB_fallback = 0; ///< Fallback when no locale-matching language has been found |
0 | 1408 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1409 |
DynamicLanguages *dl = &_dynlang; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1410 |
dl->num = 0; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1411 |
/* Fill the dynamic languages structures */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1412 |
for (uint i = 0; i < language_count; i++) { |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1413 |
/* File read the language header */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1414 |
LanguagePack hdr; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1415 |
if (!GetLanguageFileHeader(files[i].file, &hdr)) continue; |
1321 | 1416 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1417 |
dl->ent[dl->num].file = files[i].file; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1418 |
dl->ent[dl->num].name = strdup(hdr.name); |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1419 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1420 |
/* We are trying to find a default language. The priority is by |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1421 |
* configuration file, local environment and last, if nothing found, |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1422 |
* english. If def equals -1, we have not picked a default language */ |
6344
e5edb531b27e
(svn r9373) -Fix (r9271): the chosen language was not stored nor read properly in/from the cfg.
rubidium
parents:
6320
diff
changeset
|
1423 |
const char *lang_file = strrchr(dl->ent[dl->num].file, PATHSEPCHAR) + 1; |
e5edb531b27e
(svn r9373) -Fix (r9271): the chosen language was not stored nor read properly in/from the cfg.
rubidium
parents:
6320
diff
changeset
|
1424 |
if (strcmp(lang_file, dl->curr_file) == 0) chosen_language = dl->num; |
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1425 |
|
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1426 |
if (chosen_language == -1) { |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1427 |
if (strcmp (hdr.isocode, "en_GB") == 0) en_GB_fallback = dl->num; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1428 |
if (strncmp(hdr.isocode, lang, 5) == 0) chosen_language = dl->num; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1429 |
if (strncmp(hdr.isocode, lang, 2) == 0) language_fallback = dl->num; |
0 | 1430 |
} |
1431 |
||
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1432 |
dl->num++; |
0 | 1433 |
} |
1434 |
||
9470
08424e2e79e4
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
9466
diff
changeset
|
1435 |
if (dl->num == 0) usererror("Invalid version of language packs"); |
0 | 1436 |
|
6320
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1437 |
/* We haven't found the language in the config nor the one in the locale. |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1438 |
* Now we set it to one of the fallback languages */ |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1439 |
if (chosen_language == -1) { |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1440 |
chosen_language = (language_fallback != -1) ? language_fallback : en_GB_fallback; |
32d0f299e2fd
(svn r9271) -Codechange: make the language pack initialisation a little more clear and extendable (more language paths).
rubidium
parents:
6248
diff
changeset
|
1441 |
} |
0 | 1442 |
|
9470
08424e2e79e4
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
9466
diff
changeset
|
1443 |
if (!ReadLanguagePack(chosen_language)) usererror("Can't read language pack '%s'", dl->ent[chosen_language].file); |
2075
21d2986569d1
(svn r2585) - Fix [Makefile]: some small cleanups, remove warnings, and add mersenne to makefile (Luca)
Darkvater
parents:
2070
diff
changeset
|
1444 |
} |
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1445 |
|
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1446 |
/** |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1447 |
* Check whether the currently loaded language pack |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1448 |
* uses characters that the currently loaded font |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1449 |
* does not support. If this is the case an error |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1450 |
* message will be shown in English. The error |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1451 |
* message will not be localized because that would |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1452 |
* mean it might use characters that are not in the |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1453 |
* font, which is the whole reason this check has |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1454 |
* been added. |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1455 |
*/ |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1456 |
void CheckForMissingGlyphsInLoadedLanguagePack() |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1457 |
{ |
8201
92f3b5542ecb
(svn r11764) -Change: make the 'do characters exist in the current font file(s)' more robust.
rubidium
parents:
8144
diff
changeset
|
1458 |
const Sprite *question_mark = GetGlyph(FS_NORMAL, '?'); |
92f3b5542ecb
(svn r11764) -Change: make the 'do characters exist in the current font file(s)' more robust.
rubidium
parents:
8144
diff
changeset
|
1459 |
|
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1460 |
for (uint i = 0; i != 32; i++) { |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1461 |
for (uint j = 0; j < _langtab_num[i]; j++) { |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1462 |
const char *string = _langpack_offs[_langtab_start[i] + j]; |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1463 |
WChar c; |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1464 |
while ((c = Utf8Consume(&string)) != '\0') { |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1465 |
if (c == SCC_SETX) { |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1466 |
/* |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1467 |
* SetX is, together with SetXY as special character that |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1468 |
* uses the next (two) characters as data points. We have |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1469 |
* to skip those, otherwise the UTF8 reading will go |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1470 |
* haywire. |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1471 |
*/ |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1472 |
string++; |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1473 |
} else if (c == SCC_SETXY) { |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1474 |
string += 2; |
8201
92f3b5542ecb
(svn r11764) -Change: make the 'do characters exist in the current font file(s)' more robust.
rubidium
parents:
8144
diff
changeset
|
1475 |
} else if (IsPrintable(c) && c != '?' && GetGlyph(FS_NORMAL, c) == question_mark) { |
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1476 |
/* |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1477 |
* The character is printable, but not in the normal font. |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1478 |
* This is the case we were testing for. In this case we |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1479 |
* have to show the error. As we do not want the string to |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1480 |
* be translated by the translators, we 'force' it into the |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1481 |
* binary and 'load' it via a BindCString. To do this |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1482 |
* properly we have to set the color of the string, |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1483 |
* otherwise we end up with a lot of artefacts. The color |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1484 |
* 'character' might change in the future, so for safety |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1485 |
* we just Utf8 Encode it into the string, which takes |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1486 |
* exactly three characters, so it replaces the "XXX" with |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1487 |
* the color marker. |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1488 |
*/ |
8202 | 1489 |
static char *err_str = strdup("XXXThe current font is missing some of the characters used in the texts for this language. Read the readme to see how to solve this."); |
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1490 |
Utf8Encode(err_str, SCC_YELLOW); |
9648
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
1491 |
SetDParamStr(0, err_str); |
c79160082c0f
(svn r13715) -Fix [FS#2129]: C-like strings had to be rebound each time they were printed, otherwise the text could change due to the few number of slots that could be used to bind.
rubidium
parents:
9543
diff
changeset
|
1492 |
ShowErrorMessage(INVALID_STRING_ID, STR_JUST_RAW_STRING, 0, 0); |
8085
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1493 |
return; |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1494 |
} |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1495 |
} |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1496 |
} |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1497 |
} |
5b58f6315fb8
(svn r11646) -Codechange: check whether (some) characters are missing in the current 'font' for the 'currently' chosen language and give a warning when that does happen.
rubidium
parents:
7954
diff
changeset
|
1498 |
} |
8987
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1499 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1500 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1501 |
/* --- Handling of saving/loading string IDs from old savegames --- */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1502 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1503 |
/** |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1504 |
* Remap a string ID from the old format to the new format |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1505 |
* @param s StringID that requires remapping |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1506 |
* @return translated ID |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1507 |
*/ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1508 |
StringID RemapOldStringID(StringID s) |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1509 |
{ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1510 |
switch (s) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1511 |
case 0x0006: return STR_SV_EMPTY; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1512 |
case 0x7000: return STR_SV_UNNAMED; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1513 |
case 0x70E4: return SPECSTR_PLAYERNAME_ENGLISH; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1514 |
case 0x70E9: return SPECSTR_PLAYERNAME_ENGLISH; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1515 |
case 0x8864: return STR_SV_TRAIN_NAME; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1516 |
case 0x902B: return STR_SV_ROADVEH_NAME; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1517 |
case 0x9830: return STR_SV_SHIP_NAME; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1518 |
case 0xA02F: return STR_SV_AIRCRAFT_NAME; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1519 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1520 |
default: |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1521 |
if (IsInsideMM(s, 0x300F, 0x3030)) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1522 |
return s - 0x300F + STR_SV_STNAME; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1523 |
} else { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1524 |
return s; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1525 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1526 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1527 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1528 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1529 |
/** Location to load the old names to. */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1530 |
char *_old_name_array = NULL; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1531 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1532 |
/** |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1533 |
* Copy and convert old custom names to UTF-8. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1534 |
* They were all stored in a 512 by 32 long string array and are |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1535 |
* now stored with stations, waypoints and other places with names. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1536 |
* @param id the StringID of the custom name to clone. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1537 |
* @return the clones custom name. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1538 |
*/ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1539 |
char *CopyFromOldName(StringID id) |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1540 |
{ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1541 |
/* Is this name an (old) custom name? */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1542 |
if (GB(id, 11, 5) != 15) return NULL; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1543 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1544 |
if (CheckSavegameVersion(37)) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1545 |
/* Old names were 32 characters long, so 128 characters should be |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1546 |
* plenty to allow for expansion when converted to UTF-8. */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1547 |
char tmp[128]; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1548 |
const char *strfrom = &_old_name_array[32 * GB(id, 0, 9)]; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1549 |
char *strto = tmp; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1550 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1551 |
for (; *strfrom != '\0'; strfrom++) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1552 |
WChar c = (byte)*strfrom; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1553 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1554 |
/* Map from non-ISO8859-15 characters to UTF-8. */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1555 |
switch (c) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1556 |
case 0xA4: c = 0x20AC; break; // Euro |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1557 |
case 0xA6: c = 0x0160; break; // S with caron |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1558 |
case 0xA8: c = 0x0161; break; // s with caron |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1559 |
case 0xB4: c = 0x017D; break; // Z with caron |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1560 |
case 0xB8: c = 0x017E; break; // z with caron |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1561 |
case 0xBC: c = 0x0152; break; // OE ligature |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1562 |
case 0xBD: c = 0x0153; break; // oe ligature |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1563 |
case 0xBE: c = 0x0178; break; // Y with diaresis |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1564 |
default: break; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1565 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1566 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1567 |
/* Check character will fit into our buffer. */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1568 |
if (strto + Utf8CharLen(c) > lastof(tmp)) break; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1569 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1570 |
strto += Utf8Encode(strto, c); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1571 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1572 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1573 |
/* Terminate the new string and copy it back to the name array */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1574 |
*strto = '\0'; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1575 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1576 |
return strdup(tmp); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1577 |
} else { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1578 |
/* Name will already be in UTF-8. */ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1579 |
return strdup(&_old_name_array[32 * GB(id, 0, 9)]); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1580 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1581 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1582 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1583 |
/** |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1584 |
* Free the memory of the old names array. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1585 |
* Should be called once the old names have all been converted. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1586 |
*/ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1587 |
void ResetOldNames() |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1588 |
{ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1589 |
free(_old_name_array); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1590 |
_old_name_array = NULL; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1591 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1592 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1593 |
/** |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1594 |
* Initialize the old names table memory. |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1595 |
*/ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1596 |
void InitializeOldNames() |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1597 |
{ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1598 |
free(_old_name_array); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1599 |
_old_name_array = CallocT<char>(512 * 32); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1600 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1601 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1602 |
static void Load_NAME() |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1603 |
{ |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1604 |
int index; |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1605 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1606 |
while ((index = SlIterateArray()) != -1) { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1607 |
SlArray(&_old_name_array[32 * index], SlGetFieldLength(), SLE_UINT8); |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1608 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1609 |
} |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1610 |
|
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1611 |
extern const ChunkHandler _name_chunk_handlers[] = { |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1612 |
{ 'NAME', NULL, Load_NAME, CH_ARRAY | CH_LAST}, |
80d22b9c2a0c
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
rubidium
parents:
8969
diff
changeset
|
1613 |
}; |