# HG changeset patch # User TomW # Date 1408825956 -3600 # Node ID 55564c65aa15ed152dfed135798d1cad273ef6ff # Parent 871b132c615843b3b575f67ea4aac1cba3e95278 Added configuration load/save options. diff -r 871b132c6158 -r 55564c65aa15 src/config.c --- a/src/config.c Sat Aug 23 16:28:16 2014 +0100 +++ b/src/config.c Sat Aug 23 21:32:36 2014 +0100 @@ -3,6 +3,8 @@ #include #include "config.h" +char config_file_default[256]; + static char config_file[256]; typedef struct list_t @@ -92,9 +94,9 @@ } } -void config_load() +void config_load(char *fn) { - FILE *f = fopen(config_file, "rt"); + FILE *f = fopen(fn, "rt"); section_t *current_section; memset(&config_head, 0, sizeof(list_t)); @@ -357,9 +359,9 @@ s[c] = '/'; } -void config_save() +void config_save(char *fn) { - FILE *f = fopen(config_file, "wt"); + FILE *f = fopen(fn, "wt"); section_t *current_section; current_section = (section_t *)config_head.next; diff -r 871b132c6158 -r 55564c65aa15 src/config.h --- a/src/config.h Sat Aug 23 16:28:16 2014 +0100 +++ b/src/config.h Sat Aug 23 21:32:36 2014 +0100 @@ -8,7 +8,9 @@ void append_filename(char *dest, char *s1, char *s2, int size); void put_backslash(char *s); -void config_load(); -void config_save(); +void config_load(char *fn); +void config_save(char *fn); void config_dump(); void config_free(); + +extern char config_file_default[256]; diff -r 871b132c6158 -r 55564c65aa15 src/ibm.h --- a/src/ibm.h Sat Aug 23 16:28:16 2014 +0100 +++ b/src/ibm.h Sat Aug 23 21:32:36 2014 +0100 @@ -470,3 +470,6 @@ uint64_t timer_read(); extern uint64_t timer_freq; + + +void loadconfig(char *fn); diff -r 871b132c6158 -r 55564c65aa15 src/pc.c --- a/src/pc.c Sat Aug 23 16:28:16 2014 +0100 +++ b/src/pc.c Sat Aug 23 21:32:36 2014 +0100 @@ -52,7 +52,7 @@ int output; int atfullspeed; -void loadconfig(); + void saveconfig(); int infocus; int mousecapture; @@ -198,7 +198,7 @@ mouse_init(); joystick_init(); - loadconfig(); + loadconfig(NULL); pclog("Config loaded\n"); cpuspeed2=(AT)?2:1; @@ -424,14 +424,19 @@ int cga_comp=0; -void loadconfig() +void loadconfig(char *fn) { char s[512]; char *p; - append_filename(s, pcempath, "pcem.cfg", 511); - set_config_file(s); - config_load(); + if (!fn) + { + append_filename(config_file_default, pcempath, "pcem.cfg", 511); + + config_load(config_file_default); + } + else + config_load(fn); GAMEBLASTER = get_config_int(NULL, "gameblaster", 0); GUS = get_config_int(NULL, "gus", 0); @@ -522,5 +527,5 @@ set_config_int(NULL, "hdd_cylinders", hdc[1].tracks); set_config_string(NULL, "hdd_fn", ide_fn[1]); - config_save(); + config_save(config_file_default); } diff -r 871b132c6158 -r 55564c65aa15 src/pc.rc --- a/src/pc.rc Sat Aug 23 16:28:16 2014 +0100 +++ b/src/pc.rc Sat Aug 23 21:32:36 2014 +0100 @@ -40,6 +40,9 @@ MENUITEM "&Integer scale", IDM_VID_FS_INT END END + MENUITEM SEPARATOR + MENUITEM "&Load configuration...", IDM_CONFIG_LOAD + MENUITEM "&Save configuration...", IDM_CONFIG_SAVE END POPUP "&Misc" BEGIN diff -r 871b132c6158 -r 55564c65aa15 src/resources.h --- a/src/resources.h Sat Aug 23 16:28:16 2014 +0100 +++ b/src/resources.h Sat Aug 23 21:32:36 2014 +0100 @@ -7,6 +7,8 @@ #define IDM_EJECT_B 40013 #define IDM_HDCONF 40014 #define IDM_CONFIG 40020 +#define IDM_CONFIG_LOAD 40021 +#define IDM_CONFIG_SAVE 40022 #define IDM_STATUS 40030 #define IDM_VID_RESIZE 40050 #define IDM_VID_DDRAW 40060 diff -r 871b132c6158 -r 55564c65aa15 src/win.c --- a/src/win.c Sat Aug 23 16:28:16 2014 +0100 +++ b/src/win.c Sat Aug 23 21:32:36 2014 +0100 @@ -14,6 +14,7 @@ #include #include #include "ibm.h" +#include "config.h" #include "video.h" #include "resources.h" #include "cpu.h" @@ -840,6 +841,29 @@ CheckMenuItem(hmenu, IDM_VID_FS_FULL + video_fullscreen_scale, MF_CHECKED); saveconfig(); break; + + case IDM_CONFIG_LOAD: + pause = 1; + if (!getfile(hwnd, "Configuration (*.CFG)\0*.CFG\0All files (*.*)\0*.*\0", "")) + { + if (MessageBox(NULL, "This will reset PCem!\nOkay to continue?", "PCem", MB_OKCANCEL) == IDOK) + { + loadconfig(openfilestring); + config_save(config_file_default); + mem_resize(); + loadbios(); + resetpchard(); + } + } + pause = 0; + break; + + case IDM_CONFIG_SAVE: + pause = 1; + if (!getsfile(hwnd, "Configuration (*.CFG)\0*.CFG\0All files (*.*)\0*.*\0", "")) + config_save(openfilestring); + pause = 0; + break; case IDM_CDROM_DISABLED: if (cdrom_enabled)