TINSEL: Merged NewName() inside DoSave() in order to remove a static var
This commit is contained in:
parent
d1c4b56223
commit
c89f2276d1
1 changed files with 27 additions and 36 deletions
|
@ -77,9 +77,6 @@ SRSTATE SRstate = SR_IDLE;
|
||||||
// in DOS_DW.C
|
// in DOS_DW.C
|
||||||
extern void syncSCdata(Common::Serializer &s);
|
extern void syncSCdata(Common::Serializer &s);
|
||||||
|
|
||||||
// in DOS_MAIN.C
|
|
||||||
//char HardDriveLetter();
|
|
||||||
|
|
||||||
// in PCODE.C
|
// in PCODE.C
|
||||||
extern void syncGlobInfo(Common::Serializer &s);
|
extern void syncGlobInfo(Common::Serializer &s);
|
||||||
|
|
||||||
|
@ -283,32 +280,6 @@ static void syncSavedData(Common::Serializer &s, SAVED_DATA &sd) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when saving a game to a new file.
|
|
||||||
* Generates a new, unique, filename.
|
|
||||||
*/
|
|
||||||
static char *NewName() {
|
|
||||||
static char result[FNAMELEN]; // FIXME: Avoid non-const global vars
|
|
||||||
int i;
|
|
||||||
int ano = 1; // Allocated number
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
Common::String fname = _vm->getSavegameFilename(ano);
|
|
||||||
strcpy(result, fname.c_str());
|
|
||||||
|
|
||||||
for (i = 0; i < numSfiles; i++)
|
|
||||||
if (!strcmp(savedFiles[i].name, result))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (i == numSfiles)
|
|
||||||
break;
|
|
||||||
ano++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare two TimeDate structs to see which one was earlier.
|
* Compare two TimeDate structs to see which one was earlier.
|
||||||
* Returns 0 if they are equal, a negative value if a is lower / first, and
|
* Returns 0 if they are equal, a negative value if a is lower / first, and
|
||||||
|
@ -498,19 +469,37 @@ static bool DoRestore() {
|
||||||
*/
|
*/
|
||||||
static void DoSave() {
|
static void DoSave() {
|
||||||
Common::OutSaveFile *f;
|
Common::OutSaveFile *f;
|
||||||
const char *fname;
|
char tmpName[FNAMELEN];
|
||||||
|
|
||||||
// Next getList() must do its stuff again
|
// Next getList() must do its stuff again
|
||||||
NeedLoad = true;
|
NeedLoad = true;
|
||||||
|
|
||||||
if (SaveSceneName == NULL)
|
if (SaveSceneName == NULL) {
|
||||||
SaveSceneName = NewName();
|
// Generate a new unique save name
|
||||||
|
int i;
|
||||||
|
int ano = 1; // Allocated number
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
Common::String fname = _vm->getSavegameFilename(ano);
|
||||||
|
strcpy(tmpName, fname.c_str());
|
||||||
|
|
||||||
|
for (i = 0; i < numSfiles; i++)
|
||||||
|
if (!strcmp(savedFiles[i].name, tmpName))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i == numSfiles)
|
||||||
|
break;
|
||||||
|
ano++;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveSceneName = tmpName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (SaveSceneDesc[0] == 0)
|
if (SaveSceneDesc[0] == 0)
|
||||||
SaveSceneDesc = "unnamed";
|
SaveSceneDesc = "unnamed";
|
||||||
|
|
||||||
fname = SaveSceneName;
|
f = _vm->getSaveFileMan()->openForSaving(SaveSceneName);
|
||||||
|
|
||||||
f = _vm->getSaveFileMan()->openForSaving(fname);
|
|
||||||
Common::Serializer s(0, f);
|
Common::Serializer s(0, f);
|
||||||
|
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
|
@ -537,12 +526,14 @@ static void DoSave() {
|
||||||
|
|
||||||
f->finalize();
|
f->finalize();
|
||||||
delete f;
|
delete f;
|
||||||
|
SaveSceneName = NULL; // Invalidate save name
|
||||||
return;
|
return;
|
||||||
|
|
||||||
save_failure:
|
save_failure:
|
||||||
if (f) {
|
if (f) {
|
||||||
delete f;
|
delete f;
|
||||||
_vm->getSaveFileMan()->removeSavefile(fname);
|
_vm->getSaveFileMan()->removeSavefile(SaveSceneName);
|
||||||
|
SaveSceneName = NULL; // Invalidate save name
|
||||||
}
|
}
|
||||||
GUI::MessageDialog dialog("Failed to save game state to file.");
|
GUI::MessageDialog dialog("Failed to save game state to file.");
|
||||||
dialog.runModal();
|
dialog.runModal();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue