cfgfile_write_path2(f, _T("statefile"), p->statefile, PATH_NONE);
if (p->quitstatefile[0])
cfgfile_write_path2(f, _T("statefile_quit"), p->quitstatefile, PATH_NONE);
+ if (p->statefile_path[0])
+ cfgfile_dwrite_path2(f, _T("statefile_path"), p->statefile_path, PATH_NONE);
cfgfile_write (f, _T("nr_floppies"), _T("%d"), p->nr_floppies);
cfgfile_dwrite_bool (f, _T("floppy_write_protect"), p->floppy_read_only);
if (cfgfile_path(option, value, _T("statefile_quit"), p->quitstatefile, sizeof p->quitstatefile / sizeof (TCHAR)))
return 1;
+ if (cfgfile_path(option, value, _T("statefile_path"), p->statefile_path, sizeof p->statefile_path / sizeof(TCHAR))) {
+ _tcscpy(path_statefile, p->statefile_path);
+ target_setdefaultstatefilename(path_statefile);
+ return 1;
+ }
+
if (cfgfile_string (option, value, _T("statefile_name"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) {
fetch_statefilepath (savestate_fname, sizeof savestate_fname / sizeof (TCHAR));
_tcscat (savestate_fname, tmpbuf);
static int replaycounter;
struct zfile *savestate_file;
-static int savestate_docompress, savestate_specialdump, savestate_nodialogs;
+
+#define SAVESTATE_DOCOMPRESS 1
+#define SAVESTATE_NODIALOGS 2
+#define SAVESTATE_SPECIALDUMP1 4
+#define SAVESTATE_SPECIALDUMP2 8
+#define SAVESTATE_ALWAYSUSEPATH 16
+#define SAVESTATE_SPECIALDUMP (SAVESTATE_SPECIALDUMP1 | SAVESTATE_SPECIALDUMP2)
+static int savestate_flags;
TCHAR savestate_fname[MAX_DPATH];
+TCHAR path_statefile[MAX_DPATH];
#define STATEFILE_ALLOC_SIZE 600000
static int statefile_alloc;
/* 1=compressed,2=not compressed,3=ram dump,4=audio dump */
void savestate_initsave (const TCHAR *filename, int mode, int nodialogs, bool save)
{
+ savestate_flags = 0;
if (filename == NULL) {
savestate_fname[0] = 0;
- savestate_docompress = 0;
- savestate_specialdump = 0;
- savestate_nodialogs = 0;
return;
}
_tcscpy (savestate_fname, filename);
- savestate_docompress = (mode == 1) ? 1 : 0;
- savestate_specialdump = (mode == 3) ? 1 : (mode == 4) ? 2 : 0;
- savestate_nodialogs = nodialogs;
+ savestate_flags |= (mode == 1) ? SAVESTATE_DOCOMPRESS : 0;
+ savestate_flags |= (mode == 3) ? SAVESTATE_SPECIALDUMP1 : (mode == 4) ? SAVESTATE_SPECIALDUMP2 : 0;
+ savestate_flags |= nodialogs ? SAVESTATE_NODIALOGS : 0;
new_blitter = false;
if (save) {
savestate_free ();
int save_state (const TCHAR *filename, const TCHAR *description)
{
struct zfile *f;
- int comp = savestate_docompress;
+ int comp = (savestate_flags & SAVESTATE_DOCOMPRESS) != 0;
- if (!savestate_specialdump && !savestate_nodialogs) {
+ if (!(savestate_flags & SAVESTATE_SPECIALDUMP) && !(savestate_flags & SAVESTATE_NODIALOGS)) {
if (is_savestate_incompatible()) {
static int warned;
if (!warned) {
}
}
new_blitter = false;
- savestate_nodialogs = 0;
- custom_prepare_savestate ();
+ savestate_flags &= ~SAVESTATE_NODIALOGS;
+ custom_prepare_savestate();
f = zfile_fopen (filename, _T("w+b"), 0);
if (!f)
return 0;
- if (savestate_specialdump) {
+ if (savestate_flags & SAVESTATE_SPECIALDUMP) {
size_t pos;
- if (savestate_specialdump == 2)
+ if (savestate_flags & SAVESTATE_SPECIALDUMP2) {
write_wavheader (f, 0, 22050);
+ }
pos = zfile_ftell32(f);
save_rams (f, -1);
- if (savestate_specialdump == 2) {
+ if (savestate_flags & SAVESTATE_SPECIALDUMP2) {
size_t len, len2, i;
uae_u8 *tmp;
len = zfile_ftell32(f) - pos;
return v;
}
-void savestate_quick (int slot, int save)
+void savestate_quick(int slot, int save)
{
+ if (path_statefile[0]) {
+ _tcscpy(savestate_fname, path_statefile);
+ }
int i, len = uaetcslen(savestate_fname);
i = len - 1;
- while (i >= 0 && savestate_fname[i] != '_')
+ while (i >= 0 && savestate_fname[i] != '_') {
i--;
+ }
if (i < len - 6 || i <= 0) { /* "_?.uss" */
i = len - 1;
- while (i >= 0 && savestate_fname[i] != '.')
+ while (i >= 0 && savestate_fname[i] != '.') {
i--;
+ }
if (i <= 0) {
write_log (_T("savestate name skipped '%s'\n"), savestate_fname);
return;
}
}
_tcscpy (savestate_fname + i, _T(".uss"));
- if (slot > 0)
+ if (slot > 0) {
_stprintf (savestate_fname + i, _T("_%d.uss"), slot);
+ }
+ savestate_flags = 0;
if (save) {
write_log (_T("saving '%s'\n"), savestate_fname);
- savestate_docompress = 1;
- savestate_nodialogs = 1;
+ savestate_flags |= SAVESTATE_DOCOMPRESS;
+ savestate_flags |= SAVESTATE_NODIALOGS;
+ savestate_flags |= SAVESTATE_ALWAYSUSEPATH;
save_state (savestate_fname, _T(""));
} else {
if (!zfile_exists (savestate_fname)) {
return;
}
savestate_state = STATE_DORESTORE;
+ savestate_flags |= SAVESTATE_ALWAYSUSEPATH;
write_log (_T("staterestore starting '%s'\n"), savestate_fname);
}
}