Rev 39 | Rev 44 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 39 | Rev 40 | ||
|---|---|---|---|
| Line 4... | Line 4... | ||
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | // useful macros |
6 | // useful macros |
| 7 | #define READ_WIDESTRING(dest,inifile,section,key,default_value) wcscpy_s ((dest), sizeof (dest) / sizeof (wchar_t), INIFile_ReadEntryAsString ((inifile), (section), (key), (default_value))) |
7 | #define READ_WIDESTRING(dest,inifile,section,key,default_value) wcscpy_s ((dest), sizeof (dest) / sizeof (wchar_t), INIFile_ReadEntryAsString ((inifile), (section), (key), (default_value))) |
| 8 | #define WRITE_WIDESTRING(section,key,value) INIFile_WriteEntryAsString (inifile, (section), (key), (value)) |
8 | #define WRITE_WIDESTRING(section,key,value) INIFile_WriteEntryAsString (inifile, (section), (key), (value)) |
| - | 9 | ||
| - | 10 | ||
| - | 11 | // global variables used in this module only |
|
| - | 12 | static wchar_t filename[MAX_PATH]; |
|
| 9 | 13 | ||
| 10 | 14 | ||
| 11 | void Config_Load (void) |
15 | void Config_Load (void) |
| 12 | { |
16 | { |
| 13 | // this function opens and parses the INI configuration file for the program |
17 | // this function opens and parses the INI configuration file for the program |
| 14 | // WARNING: it does also build the smilies list ! |
18 | // WARNING: it does also build the smilies list ! |
| 15 | 19 | ||
| 16 | wchar_t filename[MAX_PATH]; |
- | |
| 17 | void *inifile; |
20 | void *inifile; |
| 18 | void *engine_inifile; |
- | |
| 19 | smiley_t *smiley; |
21 | smiley_t *smiley; |
| 20 | char *file_buffer; |
22 | char *file_buffer; |
| 21 | wchar_t smiley_pathname[MAX_PATH]; |
23 | wchar_t smiley_pathname[MAX_PATH]; |
| 22 | wchar_t *smiley_name; |
24 | wchar_t *smiley_name; |
| 23 | wchar_t *ptr; |
- | |
| 24 | int smiley_index; |
25 | int smiley_index; |
| 25 | int file_length; |
26 | int file_length; |
| 26 | FILE *fp; |
27 | FILE *fp; |
| 27 | 28 | ||
| 28 | // open the INI file |
29 | // open the INI file |
| Line 70... | Line 71... | ||
| 70 | options.engine.depth = INIFile_ReadEntryAsLong (inifile, L"engine", L"allowed depth", 4); |
71 | options.engine.depth = INIFile_ReadEntryAsLong (inifile, L"engine", L"allowed depth", 4); |
| 71 | options.engine.max_depth = INIFile_ReadEntryAsLong (inifile, L"engine", L"maximum depth", 100); |
72 | options.engine.max_depth = INIFile_ReadEntryAsLong (inifile, L"engine", L"maximum depth", 100); |
| 72 | options.engine.blunder_chances = INIFile_ReadEntryAsLong (inifile, L"engine", L"blunder chances", 0); |
73 | options.engine.blunder_chances = INIFile_ReadEntryAsLong (inifile, L"engine", L"blunder chances", 0); |
| 73 | options.engine.obstinacy_level = INIFile_ReadEntryAsLong (inifile, L"engine", L"obstinacy", 0); |
74 | options.engine.obstinacy_level = INIFile_ReadEntryAsLong (inifile, L"engine", L"obstinacy", 0); |
| 74 | options.engine.is_expert_mode = (INIFile_ReadEntryAsBool (inifile, L"engine", L"expert mode", false) > 0); |
75 | options.engine.is_expert_mode = (INIFile_ReadEntryAsBool (inifile, L"engine", L"expert mode", false) > 0); |
| 75 | - | ||
| 76 | // given the selected engine program, load and interpret the right engine config file |
- | |
| 77 | swprintf_s (filename, WCHAR_SIZEOF (filename), L"%s/engines/%s/engine.ini", app_path, options.engine.program); |
- | |
| 78 | engine_inifile = INIFile_LoadINIFile (filename); |
- | |
| 79 | if (engine_inifile != NULL) |
- | |
| 80 | { |
- | |
| 81 | READ_WIDESTRING (options.engine.name, engine_inifile, L"program", L"name", L"Crafty v24.0"); |
- | |
| 82 | READ_WIDESTRING (options.engine.cmdline, engine_inifile, L"program", L"executable", L"crafty.exe"); |
- | |
| 83 | - | ||
| 84 | READ_WIDESTRING (options.engine.replystring_move, engine_inifile, L"reply strings", L"move", L"): "); |
- | |
| 85 | READ_WIDESTRING (options.engine.replystring_hint, engine_inifile, L"reply strings", L"hint", L"Hint: "); |
- | |
| 86 | - | ||
| 87 | READ_WIDESTRING (options.engine.command_new, engine_inifile, L"commands", L"new game", L"new"); |
- | |
| 88 | for (ptr = options.engine.command_new; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 89 | READ_WIDESTRING (options.engine.command_setboard, engine_inifile, L"commands", L"setup table from FEN", L"setboard %s"); |
- | |
| 90 | for (ptr = options.engine.command_setboard; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 91 | READ_WIDESTRING (options.engine.command_sd, engine_inifile, L"commands", L"search depth set", L"sd %d"); |
- | |
| 92 | for (ptr = options.engine.command_sd; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 93 | READ_WIDESTRING (options.engine.command_go, engine_inifile, L"commands", L"play", L"go"); |
- | |
| 94 | for (ptr = options.engine.command_go; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 95 | READ_WIDESTRING (options.engine.command_hint, engine_inifile, L"commands", L"hint", L"hint"); |
- | |
| 96 | for (ptr = options.engine.command_hint; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 97 | READ_WIDESTRING (options.engine.command_force, engine_inifile, L"commands", L"force move", L"force %s"); |
- | |
| 98 | for (ptr = options.engine.command_force; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 99 | READ_WIDESTRING (options.engine.command_quit, engine_inifile, L"commands", L"quit", L"quit"); |
- | |
| 100 | for (ptr = options.engine.command_quit; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
- | |
| 101 | - | ||
| 102 | INIFile_FreeINIFile (engine_inifile); // close the engine config file |
- | |
| 103 | } |
- | |
| 104 | 76 | ||
| 105 | // [network] |
77 | // [network] |
| 106 | READ_WIDESTRING (options.network.server_address, inifile, L"network", L"server address", L"freechess.org"); |
78 | READ_WIDESTRING (options.network.server_address, inifile, L"network", L"server address", L"freechess.org"); |
| 107 | options.network.server_port = INIFile_ReadEntryAsLong (inifile, L"network", L"server port", 5000); |
79 | options.network.server_port = INIFile_ReadEntryAsLong (inifile, L"network", L"server port", 5000); |
| 108 | READ_WIDESTRING (options.network.login, inifile, L"network", L"login", L"guest"); |
80 | READ_WIDESTRING (options.network.login, inifile, L"network", L"login", L"guest"); |
| Line 179... | Line 151... | ||
| 179 | } |
151 | } |
| 180 | 152 | ||
| 181 | // close the INI file |
153 | // close the INI file |
| 182 | INIFile_FreeINIFile (inifile); |
154 | INIFile_FreeINIFile (inifile); |
| 183 | return; // finished loading config |
155 | return; // finished loading config |
| - | 156 | } |
|
| - | 157 | ||
| - | 158 | ||
| - | 159 | void Config_LoadEngine (const wchar_t *engine_name) |
|
| - | 160 | { |
|
| - | 161 | // this function loads the engine-specific parameters. The best place to call it is at the beginning |
|
| - | 162 | // of a game versus the computer, just before the engine executable process is started. |
|
| - | 163 | ||
| - | 164 | void *engine_inifile; |
|
| - | 165 | wchar_t *ptr; |
|
| - | 166 | ||
| - | 167 | // reset values first |
|
| - | 168 | memset (&options.engine.program_options, 0, sizeof (options.engine.program_options)); |
|
| - | 169 | ||
| - | 170 | // given the selected engine program, load and interpret the right engine config file |
|
| - | 171 | swprintf_s (filename, WCHAR_SIZEOF (filename), L"%s/engines/%s/engine.ini", app_path, engine_name); |
|
| - | 172 | engine_inifile = INIFile_LoadINIFile (filename); |
|
| - | 173 | if (engine_inifile == NULL) |
|
| - | 174 | return; // engine file not found |
|
| - | 175 | ||
| - | 176 | // basic program information |
|
| - | 177 | READ_WIDESTRING (options.engine.program_options.name, engine_inifile, L"program", L"name", L"Crafty v24.0"); |
|
| - | 178 | READ_WIDESTRING (options.engine.program_options.cmdline, engine_inifile, L"program", L"executable", L"crafty.exe"); |
|
| - | 179 | ||
| - | 180 | // reply string patterns |
|
| - | 181 | READ_WIDESTRING (options.engine.program_options.replystring_move, engine_inifile, L"reply strings", L"move", L"): "); |
|
| - | 182 | READ_WIDESTRING (options.engine.program_options.replystring_hint, engine_inifile, L"reply strings", L"hint", L"Hint: "); |
|
| - | 183 | ||
| - | 184 | // engine commands |
|
| - | 185 | READ_WIDESTRING (options.engine.program_options.command_new, engine_inifile, L"commands", L"new game", L"new"); |
|
| - | 186 | for (ptr = options.engine.program_options.command_new; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 187 | READ_WIDESTRING (options.engine.program_options.command_setboard, engine_inifile, L"commands", L"setup table from FEN", L"setboard %s"); |
|
| - | 188 | for (ptr = options.engine.program_options.command_setboard; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 189 | READ_WIDESTRING (options.engine.program_options.command_sd, engine_inifile, L"commands", L"search depth set", L"sd %d"); |
|
| - | 190 | for (ptr = options.engine.program_options.command_sd; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 191 | READ_WIDESTRING (options.engine.program_options.command_go, engine_inifile, L"commands", L"play", L"go"); |
|
| - | 192 | for (ptr = options.engine.program_options.command_go; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 193 | READ_WIDESTRING (options.engine.program_options.command_hint, engine_inifile, L"commands", L"hint", L"hint"); |
|
| - | 194 | for (ptr = options.engine.program_options.command_hint; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 195 | READ_WIDESTRING (options.engine.program_options.command_force, engine_inifile, L"commands", L"force move", L"force %s"); |
|
| - | 196 | for (ptr = options.engine.program_options.command_force; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 197 | READ_WIDESTRING (options.engine.program_options.command_quit, engine_inifile, L"commands", L"quit", L"quit"); |
|
| - | 198 | for (ptr = options.engine.program_options.command_quit; *ptr != 0; ptr++) if (*ptr == L';') *ptr = L'\n'; |
|
| - | 199 | ||
| - | 200 | INIFile_FreeINIFile (engine_inifile); // close the engine config file |
|
| - | 201 | return; // engine parameters loaded successfully |
|
| 184 | } |
202 | } |
| 185 | 203 | ||
| 186 | 204 | ||
| 187 | void Config_Save (void) |
205 | void Config_Save (void) |
| 188 | { |
206 | { |
| 189 | // this function saves the software configuration into an INI file. |
207 | // this function saves the software configuration into an INI file. |
| 190 | // WARNING: it does also free the smilies list ! |
208 | // WARNING: it does also free the smilies list ! |
| 191 | 209 | ||
| 192 | wchar_t filename[MAX_PATH]; |
- | |
| 193 | wchar_t smiley_name[32]; |
210 | wchar_t smiley_name[32]; |
| 194 | smiley_t *smiley; |
211 | smiley_t *smiley; |
| 195 | void *inifile; |
212 | void *inifile; |
| 196 | int smiley_index; |
213 | int smiley_index; |
| 197 | int smiley_index2; |
214 | int smiley_index2; |