unsigned char *framebuff = 0; // temporary buffer for alt renderer\r
int state_slot = 0;\r
int reset_timing = 0;\r
+int config_slot = 0, config_slot_current = 0;\r
\r
\r
// utilities\r
int emu_ReadConfig(int game)\r
{\r
FILE *f;\r
- char cfg[512];\r
+ char cfg[512], extbuf[16];\r
int bread = 0;\r
\r
if (!game)\r
currentConfig.PicoCDBuffers = 64;\r
currentConfig.scaling = 0;\r
strncpy(cfg, PicoConfigFile, 511);\r
+ if (config_slot != 0)\r
+ {\r
+ char *p = strrchr(cfg, '.');\r
+ if (p == NULL) p = cfg + strlen(cfg);\r
+ sprintf(extbuf, ".%i.pbcfg", config_slot);\r
+ strncpy(p, extbuf, 511 - (p - cfg));\r
+ }\r
cfg[511] = 0;\r
} else {\r
- romfname_ext(cfg, "cfg/", ".pbcfg");\r
+ if (config_slot != 0)\r
+ sprintf(extbuf, ".%i.pbcfg", config_slot);\r
+ else strcpy(extbuf, ".pbcfg");\r
+ romfname_ext(cfg, "cfg/", extbuf);\r
f = fopen(cfg, "rb");\r
if (!f) romfname_ext(cfg, NULL, ".pbcfg");\r
else fclose(f);\r
currentConfig.KeyBinds[22] = 1<<30; // vol down\r
}\r
\r
+ if (bread > 0) config_slot_current = config_slot;\r
return (bread > 0); // == sizeof(currentConfig));\r
}\r
\r
int emu_WriteConfig(int game)\r
{\r
FILE *f;\r
- char cfg[512];\r
+ char cfg[512], extbuf[16];\r
int bwrite = 0;\r
\r
if (!game)\r
{\r
strncpy(cfg, PicoConfigFile, 511);\r
+ if (config_slot != 0)\r
+ {\r
+ char *p = strrchr(cfg, '.');\r
+ if (p == NULL) p = cfg + strlen(cfg);\r
+ sprintf(extbuf, ".%i.pbcfg", config_slot);\r
+ strncpy(p, extbuf, 511 - (p - cfg));\r
+ }\r
cfg[511] = 0;\r
} else {\r
- romfname_ext(cfg, "cfg/", ".pbcfg");\r
+ if (config_slot != 0)\r
+ sprintf(extbuf, ".%i.pbcfg", config_slot);\r
+ else strcpy(extbuf, ".pbcfg");\r
+ romfname_ext(cfg, "cfg/", extbuf);\r
}\r
\r
printf("emu_WriteConfig: %s ", cfg);\r
}\r
printf((bwrite == sizeof(currentConfig)) ? "(ok)\n" : "(failed)\n");\r
\r
+ if (bwrite == sizeof(currentConfig)) config_slot_current = config_slot;\r
return (bwrite == sizeof(currentConfig));\r
}\r
\r