diff --git a/cgdoom/cgdoom.c b/cgdoom/cgdoom.c index 87704ca..9881166 100644 --- a/cgdoom/cgdoom.c +++ b/cgdoom/cgdoom.c @@ -131,7 +131,7 @@ const char *CGD_WADFileName = NULL; const char *CGD_RecordDemoName = NULL; /* Delayed file accesses */ -CGD_DelayedFileWrite CGD_DelayedSaves[6] = { 0 }; +CGD_DelayedFileWrite CGD_DelayedSaves[CGD_DELAYEDSAVES_COUNT] = { 0 }; /* Performance counters */ struct CGD_Perf CGD_Perf; @@ -435,7 +435,7 @@ static void DelayedWriteFile(int i) fc_path[j++] = dfw->filename[i]; fc_path[j++] = 0x0000; - UI_DelayedWrites(CGD_DelayedSaves, 6, i, -1); + UI_DelayedWrites(CGD_DelayedSaves, CGD_DELAYEDSAVES_COUNT, i, -1); Bfile_DeleteEntry(fc_path); @@ -463,7 +463,8 @@ static void DelayedWriteFile(int i) source += chunk_size; size -= chunk_size; - UI_DelayedWrites(CGD_DelayedSaves, 6, i, dfw->size - size); + UI_DelayedWrites(CGD_DelayedSaves, CGD_DELAYEDSAVES_COUNT, i, + dfw->size - size); } Bfile_CloseFile_OS(fd); @@ -728,8 +729,7 @@ int main(void) if(gWADfd >= 0) Bfile_CloseFile_OS(gWADfd); - int delayed_writes = sizeof(CGD_DelayedSaves) / sizeof(CGD_DelayedSaves[0]); - for(int i = 0; i < delayed_writes; i++) { + for(int i = 0; i < CGD_DELAYEDSAVES_COUNT; i++) { CGD_DelayedFileWrite *dfw = &CGD_DelayedSaves[i]; if(dfw->data != NULL) DelayedWriteFile(i); diff --git a/cgdoom/cgdoom.h b/cgdoom/cgdoom.h index bac6fb6..4a33d13 100644 --- a/cgdoom/cgdoom.h +++ b/cgdoom/cgdoom.h @@ -69,11 +69,18 @@ extern int CGD_TrustUnalignedLumps; extern int startmap, startepisode; /* WAD file name (without .wad), used to avoid save file conflicts */ extern const char *CGD_WADFileName; -/* Save Game operations delayed until closing the add-in (one per save) */ -extern CGD_DelayedFileWrite CGD_DelayedSaves[6]; /* Name of record demo file */ extern const char *CGD_RecordDemoName; +/* IDs for delayed saves */ +enum { + CGD_DELAYEDSAVES_SAVES = 0, /* 6 entries */ + CGD_DELAYEDSAVES_DEMO = 6, + CGD_DELAYEDSAVES_COUNT, +}; +/* Save Game operations delayed until closing the add-in (one per save) */ +extern CGD_DelayedFileWrite CGD_DelayedSaves[CGD_DELAYEDSAVES_COUNT]; + // Keyboard interface. diff --git a/cgdoom/g_game.c b/cgdoom/g_game.c index af0c75a..ff2986b 100644 --- a/cgdoom/g_game.c +++ b/cgdoom/g_game.c @@ -953,9 +953,10 @@ void G_DoLoadGame (void) gameaction = ga_nothing; /* Read data from yet-unsaved saves */ - if (CGD_DelayedSaves[saveslotnumber].data != NULL) { - savebuffer = (void *)CGD_DelayedSaves[saveslotnumber].data; - length = CGD_DelayedSaves[saveslotnumber].size; + int n = CGD_DELAYEDSAVES_SAVES + saveslotnumber; + if (CGD_DelayedSaves[n].data != NULL) { + savebuffer = (void *)CGD_DelayedSaves[n].data; + length = CGD_DelayedSaves[n].size; } else { sprintf(savename, "%s_%d.dsg", CGD_WADFileName, saveslotnumber); @@ -1001,7 +1002,7 @@ void G_DoLoadGame (void) I_Error ("Bad savegame"); // done - if (CGD_DelayedSaves[saveslotnumber].data == NULL) + if (CGD_DelayedSaves[n].data == NULL) Z_Free (savebuffer); if (setsizeneeded) @@ -1067,7 +1068,8 @@ boolean G_DoSaveGame (void) save_now = true; #endif - CGD_DelayedFileWrite *dfw = &CGD_DelayedSaves[savegameslot]; + int n = CGD_DELAYEDSAVES_SAVES + savegameslot; + CGD_DelayedFileWrite *dfw = &CGD_DelayedSaves[n]; /* Allocate memory to hold the data while delaying */ if (!save_now) { @@ -1434,8 +1436,10 @@ boolean G_CheckDemoStatus (void) if (demorecording) { *demo_p++ = DEMOMARKER; - M_WriteFile (demoname, demobuffer, demo_p - demobuffer); - Z_Free (demobuffer); + CGD_DelayedFileWrite *dfw = &CGD_DelayedSaves[CGD_DELAYEDSAVES_DEMO]; + strcpy(dfw->filename, demoname); + dfw->data = demobuffer; + dfw->size = demo_p - demobuffer; demorecording = false; printf ("Demo %s recorded", demoname); } diff --git a/cgdoom/m_menu.c b/cgdoom/m_menu.c index 88efb78..d1f9a85 100644 --- a/cgdoom/m_menu.c +++ b/cgdoom/m_menu.c @@ -468,8 +468,9 @@ void M_ReadSaveStrings(void) for (i = 0;i < load_end;i++) { /* Use the pending file write as a bypass */ - if (CGD_DelayedSaves[i].data != NULL) { - memcpy(savegamestrings[i], CGD_DelayedSaves[i].data, + int n = CGD_DELAYEDSAVES_SAVES + i; + if (CGD_DelayedSaves[n].data != NULL) { + memcpy(savegamestrings[i], CGD_DelayedSaves[n].data, SAVESTRINGSIZE); LoadMenu[i].status = 1; continue;