diff --git a/sc2/src/sc2code/libs/input/sdl/input.c b/sc2/src/sc2code/libs/input/sdl/input.c index eebfd1577..ad0da589e 100644 --- a/sc2/src/sc2code/libs/input/sdl/input.c +++ b/sc2/src/sc2code/libs/input/sdl/input.c @@ -150,7 +150,7 @@ initKeyConfig (void) int i; /* First, load in the menu keys */ - res_LoadFilename (contentDir, "menu.key"); + res_LoadFilename (contentDir, "menu.key", NULL); for (i = 0; i < NUM_MENU_KEYS; i++) { if (!menu_res_names[i]) @@ -178,7 +178,9 @@ initKeyConfig (void) } } - res_LoadFile (fp); + res_LoadFile (fp, NULL); + // TODO RES070 + // res_LoadFile (fp, "keys."); res_CloseResFile (fp); register_flight_controls (); @@ -457,7 +459,9 @@ SaveKeyConfiguration (uio_DirHandle *path, const char *fname) f = res_OpenResFile (path, fname, "wb"); if (f) { - res_SaveFile (f, "keys."); + res_SaveFile (f, "keys.", FALSE); + // TODO RES070 + // res_SaveFile (f, "keys.", TRUE); res_CloseResFile (f); } } diff --git a/sc2/src/sc2code/libs/reslib.h b/sc2/src/sc2code/libs/reslib.h index 0bb20b7a3..3e1d1bae8 100644 --- a/sc2/src/sc2code/libs/reslib.h +++ b/sc2/src/sc2code/libs/reslib.h @@ -99,11 +99,11 @@ extern DIRENTRY_REF LoadDirEntryTable (uio_DirHandle *dirHandle, /* Key-Value resources */ void res_ClearTables (void); -void res_LoadFilename (uio_DirHandle *path, const char *fname); -void res_SaveFilename (uio_DirHandle *path, const char *fname, const char *root); +void res_LoadFilename (uio_DirHandle *path, const char *fname, const char *prefix); +void res_SaveFilename (uio_DirHandle *path, const char *fname, const char *root, BOOLEAN strip_root); -void res_LoadFile (uio_Stream *fname); -void res_SaveFile (uio_Stream *fname, const char *root); +void res_LoadFile (uio_Stream *fname, const char *prefix); +void res_SaveFile (uio_Stream *fname, const char *root, BOOLEAN strip_root); BOOLEAN res_HasKey (const char *key); diff --git a/sc2/src/sc2code/libs/resource/mapres.c b/sc2/src/sc2code/libs/resource/mapres.c index abd66ba9a..123d7bcaf 100644 --- a/sc2/src/sc2code/libs/resource/mapres.c +++ b/sc2/src/sc2code/libs/resource/mapres.c @@ -178,7 +178,7 @@ res_HasKey (const char *key) } void -res_LoadFile (uio_Stream *s) +res_LoadFile (uio_Stream *s, const char *prefix) { check_map_init (); @@ -187,11 +187,11 @@ res_LoadFile (uio_Stream *s) return; } - PropFile_from_file (s, res_PutString); + PropFile_from_file (s, res_PutString, prefix); } void -res_LoadFilename (uio_DirHandle *path, const char *fname) +res_LoadFilename (uio_DirHandle *path, const char *fname, const char *prefix) { check_map_init (); @@ -200,11 +200,11 @@ res_LoadFilename (uio_DirHandle *path, const char *fname) return; } - PropFile_from_filename (path, fname, res_PutString); + PropFile_from_filename (path, fname, res_PutString, prefix); } void -res_SaveFile (uio_Stream *f, const char *prefix) +res_SaveFile (uio_Stream *f, const char *prefix, BOOLEAN strip_root) { CharHashTable_Iterator *i; int prefix_len = 0; @@ -220,7 +220,11 @@ res_SaveFile (uio_Stream *f, const char *prefix) const char *key = CharHashTable_iteratorKey (i); const char *value = (const char *)CharHashTable_iteratorValue (i); if (!prefix || !strncmp (prefix, key, prefix_len)) { - WriteResFile (key, 1, strlen (key), f); + if (prefix && strip_root) { + WriteResFile (key+prefix_len, 1, strlen (key) - prefix_len, f); + } else { + WriteResFile (key, 1, strlen (key), f); + } PutResFileChar(' ', f); PutResFileChar('=', f); PutResFileChar(' ', f); @@ -233,14 +237,14 @@ res_SaveFile (uio_Stream *f, const char *prefix) } void -res_SaveFilename (uio_DirHandle *path, const char *fname, const char *prefix) +res_SaveFilename (uio_DirHandle *path, const char *fname, const char *prefix, BOOLEAN strip_root) { uio_Stream *f; check_map_init (); f = res_OpenResFile (path, fname, "wb"); if (f) { - res_SaveFile (f, prefix); + res_SaveFile (f, prefix, strip_root); res_CloseResFile (f); } } diff --git a/sc2/src/sc2code/libs/resource/propfile.c b/sc2/src/sc2code/libs/resource/propfile.c index 685970a17..ed09ce2f3 100644 --- a/sc2/src/sc2code/libs/resource/propfile.c +++ b/sc2/src/sc2code/libs/resource/propfile.c @@ -24,7 +24,7 @@ #include "reslib.h" void -PropFile_from_string (char *d, PROPERTY_HANDLER handler) +PropFile_from_string (char *d, PROPERTY_HANDLER handler, const char *prefix) { int len, i; @@ -84,12 +84,19 @@ PropFile_from_string (char *d, PROPERTY_HANDLER handler) make a new map entry. */ d[key_end] = '\0'; d[value_end] = '\0'; - handler (d+key_start, d+value_start); + if (prefix) { + char buf[256]; + snprintf(buf, 255, "%s%s", prefix, d+key_start); + buf[255]=0; + handler(buf, d+value_start); + } else { + handler (d+key_start, d+value_start); + } } } void -PropFile_from_file (uio_Stream *f, PROPERTY_HANDLER handler) +PropFile_from_file (uio_Stream *f, PROPERTY_HANDLER handler, const char *prefix) { long flen; char *data; @@ -104,17 +111,17 @@ PropFile_from_file (uio_Stream *f, PROPERTY_HANDLER handler) flen = ReadResFile (data, 1, flen, f); data[flen] = '\0'; - PropFile_from_string (data, handler); + PropFile_from_string (data, handler, prefix); free (data); } void -PropFile_from_filename (uio_DirHandle *path, const char *fname, PROPERTY_HANDLER handler) +PropFile_from_filename (uio_DirHandle *path, const char *fname, PROPERTY_HANDLER handler, const char *prefix) { uio_Stream *f = res_OpenResFile (path, fname, "rt"); if (!f) { return; } - PropFile_from_file (f, handler); + PropFile_from_file (f, handler, prefix); res_CloseResFile(f); } diff --git a/sc2/src/sc2code/libs/resource/propfile.h b/sc2/src/sc2code/libs/resource/propfile.h index 12d6445e5..8da250676 100644 --- a/sc2/src/sc2code/libs/resource/propfile.h +++ b/sc2/src/sc2code/libs/resource/propfile.h @@ -23,8 +23,8 @@ typedef void (*PROPERTY_HANDLER) (const char *, const char *); -void PropFile_from_string (char *d, PROPERTY_HANDLER handler); -void PropFile_from_file (uio_Stream *f, PROPERTY_HANDLER handler); -void PropFile_from_filename (uio_DirHandle *path, const char *fname, PROPERTY_HANDLER handler); +void PropFile_from_string (char *d, PROPERTY_HANDLER handler, const char *prefix); +void PropFile_from_file (uio_Stream *f, PROPERTY_HANDLER handler, const char *prefix); +void PropFile_from_filename (uio_DirHandle *path, const char *fname, PROPERTY_HANDLER handler, const char *prefix); #endif diff --git a/sc2/src/sc2code/libs/resource/resinit.c b/sc2/src/sc2code/libs/resource/resinit.c index ef78553f0..5a3270049 100644 --- a/sc2/src/sc2code/libs/resource/resinit.c +++ b/sc2/src/sc2code/libs/resource/resinit.c @@ -192,7 +192,7 @@ InitResourceSystem (void) void LoadResourceIndex (uio_DirHandle *dir, const char *rmpfile) { - PropFile_from_filename (dir, rmpfile, process_resource_desc); + PropFile_from_filename (dir, rmpfile, process_resource_desc, NULL); } void diff --git a/sc2/src/sc2code/setupmenu.c b/sc2/src/sc2code/setupmenu.c index 28776ced8..d1041fc33 100644 --- a/sc2/src/sc2code/setupmenu.c +++ b/sc2/src/sc2code/setupmenu.c @@ -1371,6 +1371,8 @@ SetGlobalOptions (GLOBALOPTS *opts) res_PutString ("keys.5.name", input_templates[4].name); res_PutString ("keys.6.name", input_templates[5].name); - res_SaveFilename (configDir, "uqm.cfg", "config."); + res_SaveFilename (configDir, "uqm.cfg", "config.", FALSE); + // TODO RES070 + // res_SaveFilename (configDir, "uqm.cfg", "config.", TRUE); SaveKeyConfiguration (configDir, "flight.cfg"); } diff --git a/sc2/src/starcon2.c b/sc2/src/starcon2.c index 59f5b0fd4..569991d7b 100644 --- a/sc2/src/starcon2.c +++ b/sc2/src/starcon2.c @@ -210,7 +210,10 @@ main (int argc, char *argv[]) PlayerControls[1] = CONTROL_TEMPLATE_JOY_1; // Fill in the options struct based on uqm.cfg - res_LoadFilename (configDir, "uqm.cfg"); + res_LoadFilename (configDir, "uqm.cfg", NULL); + // TODO RES070 + // res_LoadFilename (configDir, "uqm.cfg", "config."); + if (res_HasKey ("config.reswidth")) { options.width = res_GetInteger ("config.reswidth");