Rev 1 | Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 11 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | // localizedtexts.cpp |
1 | // localizedtexts.cpp |
2 | 2 | ||
3 | #include "common.h" |
3 | #include "common.h" |
4 | 4 | ||
5 | 5 | ||
6 | bool LocalizedTexts_Init (const wchar_t * |
6 | bool LocalizedTexts_Init (const wchar_t *fmt, ...) |
7 | { |
7 | { |
8 | // this function opens and parses the INI file containing the localized texts and fills the |
8 | // this function opens and parses the INI file containing the localized texts and fills the |
9 | // global text_t structure. |
9 | // global text_t structure. |
10 | 10 | ||
11 | wchar_t |
11 | static wchar_t lngfile_pathname[MAX_PATH]; |
- | 12 | va_list argptr; |
|
12 | void *inifile; |
13 | void *inifile; |
13 | text_t *text; |
14 | text_t *text; |
14 | int text_index; |
15 | int text_index; |
15 | wchar_t *id_string; |
16 | wchar_t *id_string; |
16 | wchar_t *filter_char; |
17 | wchar_t *filter_char; |
- | 18 | ||
- | 19 | // concatenate all the arguments in one string |
|
- | 20 | va_start (argptr, fmt); |
|
- | 21 | wvsprintf (lngfile_pathname, fmt, argptr); |
|
- | 22 | va_end (argptr); |
|
17 | 23 | ||
18 | // open the INI file |
24 | // open the INI file |
19 | swprintf_s (filename, WCHAR_SIZEOF (filename), L"%s\\%s", app_path, lngfile_pathname); |
- | |
20 | inifile = INIFile_LoadINIFile ( |
25 | inifile = INIFile_LoadINIFile (lngfile_pathname); |
21 | 26 | ||
22 | // consistency check |
27 | // consistency check |
23 | if (inifile == NULL) |
28 | if (inifile == NULL) |
24 | { |
29 | { |
25 | MessageBox (NULL, L"Chess Giants was unable to load its data files.\nThe game cannot start.\n\nPlease reinstall this program to fix the problem.", L"Chess Giants", MB_ICONERROR | MB_OK); |
30 | MessageBox (NULL, L"Chess Giants was unable to load its data files.\nThe game cannot start.\n\nPlease reinstall this program to fix the problem.", L"Chess Giants", MB_ICONERROR | MB_OK); |
Line 46... | Line 51... | ||
46 | text->localized_string = (wchar_t *) SAFE_malloc (65536, sizeof (wchar_t), false); // allocate big space for localized string... |
51 | text->localized_string = (wchar_t *) SAFE_malloc (65536, sizeof (wchar_t), false); // allocate big space for localized string... |
47 | wcscpy_s (text->localized_string, 65536, INIFile_ReadEntryAsString (inifile, L"texts", text->id_string, text->id_string)); // ... read it... |
52 | wcscpy_s (text->localized_string, 65536, INIFile_ReadEntryAsString (inifile, L"texts", text->id_string, text->id_string)); // ... read it... |
48 | text->localized_string = (wchar_t *) SAFE_realloc (text->localized_string, 65536, wcslen (text->localized_string) + 1, sizeof (wchar_t), false); // and resize correctly |
53 | text->localized_string = (wchar_t *) SAFE_realloc (text->localized_string, 65536, wcslen (text->localized_string) + 1, sizeof (wchar_t), false); // and resize correctly |
49 | 54 | ||
50 | // conventionally, all texts whose ID end in "FileFilter" are file filters. Convert them for Windows API. |
55 | // conventionally, all texts whose ID end in "FileFilter" are file filters. Convert them for Windows API. |
- | 56 | // Reminder: INI file key entries are LOWERCASE. |
|
51 | if ( |
57 | if (wcsistr (text->id_string, L"FileFilter") != NULL) |
52 | { |
58 | { |
53 | filter_char = text->localized_string; // convert vertical bars into string terminator characters |
59 | filter_char = text->localized_string; // convert vertical bars into string terminator characters |
54 | while (*filter_char != 0) { if (*filter_char == L'|') *filter_char = 0; filter_char++; } |
60 | while (*filter_char != 0) { if (*filter_char == L'|') *filter_char = 0; filter_char++; } |
55 | } |
61 | } |
56 | } |
62 | } |