--- hatari/src/gui-sdl/dlgMemory.c 2019/04/01 07:11:38 1.1.1.1 +++ hatari/src/gui-sdl/dlgMemory.c 2019/04/01 07:15:39 1.1.1.7 @@ -4,12 +4,11 @@ This file is distributed under the GNU Public License, version 2 or at your option any later version. Read the file gpl.txt for details. */ -char DlgMemory_rcsid[] = "Hatari $Id: dlgMemory.c,v 1.1.1.1 2019/04/01 07:11:38 root Exp $"; +const char DlgMemory_fileid[] = "Hatari dlgMemory.c : " __DATE__ " " __TIME__; #include "main.h" #include "dialog.h" #include "sdlgui.h" -#include "memAlloc.h" #include "memorySnapShot.h" #include "file.h" #include "screen.h" @@ -19,10 +18,13 @@ char DlgMemory_rcsid[] = "Hatari $Id: dl #define DLGMEM_1MB 5 #define DLGMEM_2MB 6 #define DLGMEM_4MB 7 -#define DLGMEM_FILENAME 11 -#define DLGMEM_SAVE 12 -#define DLGMEM_RESTORE 13 -#define DLGMEM_EXIT 14 +#define DLGMEM_8MB 8 +#define DLGMEM_14MB 9 +#define DLGMEM_FILENAME 13 +#define DLGMEM_SAVE 14 +#define DLGMEM_RESTORE 15 +#define DLGMEM_AUTOSAVE 16 +#define DLGMEM_EXIT 17 static char dlgSnapShotName[36+1]; @@ -31,99 +33,122 @@ static char dlgSnapShotName[36+1]; /* The memory dialog: */ static SGOBJ memorydlg[] = { - { SGBOX, 0, 0, 0,0, 40,21, NULL }, + { SGBOX, 0, 0, 0,0, 40,22, NULL }, - { SGBOX, 0, 0, 1,1, 38,7, NULL }, - { SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" }, - { SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" }, - { SGRADIOBUT, 0, 0, 19,4, 8,1, "512 kB" }, - { SGRADIOBUT, 0, 0, 30,4, 6,1, "1 MB" }, - { SGRADIOBUT, 0, 0, 19,6, 6,1, "2 MB" }, - { SGRADIOBUT, 0, 0, 30,6, 6,1, "4 MB" }, - - { SGBOX, 0, 0, 1,9, 38,8, NULL }, - { SGTEXT, 0, 0, 12,10, 17,1, "Memory state save" }, - { SGTEXT, 0, 0, 2,12, 20,1, "Snap-shot file name:" }, - { SGTEXT, 0, 0, 2,13, 36,1, dlgSnapShotName }, - { SGBUTTON, 0, 0, 8,15, 10,1, "Save" }, - { SGBUTTON, 0, 0, 22,15, 10,1, "Restore" }, + { SGBOX, 0, 0, 1,1, 38,7, NULL }, + { SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" }, + { SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" }, + { SGRADIOBUT, 0, 0, 18,4, 9,1, "512 KiB" }, + { SGRADIOBUT, 0, 0, 18,5, 7,1, "1 MiB" }, + { SGRADIOBUT, 0, 0, 18,6, 7,1, "2 MiB" }, + { SGRADIOBUT, 0, 0, 29,4, 7,1, "4 MiB" }, + { SGRADIOBUT, 0, 0, 29,5, 7,1, "8 MiB" }, + { SGRADIOBUT, 0, 0, 29,6, 8,1, "14 MiB" }, + + { SGBOX, 0, 0, 1,9, 38,10, NULL }, + { SGTEXT, 0, 0, 12,10, 17,1, "Memory state save" }, + { SGTEXT, 0, 0, 2,12, 20,1, "Snap-shot file name:" }, + { SGTEXT, 0, 0, 2,13, 36,1, dlgSnapShotName }, + { SGBUTTON, 0, 0, 8,15, 10,1, "Save" }, + { SGBUTTON, 0, 0, 22,15, 10,1, "Restore" }, + { SGCHECKBOX, 0, 0, 2,17, 37,1, "Load/save state at start-up/exit" }, - { SGBUTTON, 0, 0, 10,19, 20,1, "Back to main menu" }, - { -1, 0, 0, 0,0, 0,0, NULL } + { SGBUTTON, SG_DEFAULT, 0, 10,20, 20,1, "Back to main menu" }, + { -1, 0, 0, 0,0, 0,0, NULL } }; -/*-----------------------------------------------------------------------*/ -/* - Show and process the memory dialog. -*/ -void Dialog_MemDlg(void) + +/** + * Show and process the memory dialog. + * @return true if a memory snapshot has been loaded, false otherwise + */ +bool Dialog_MemDlg(void) { - int but; - char *tmpname; + int i; + int but; - /* Allocate memory for tmpname: */ - tmpname = Memory_Alloc(FILENAME_MAX); + SDLGui_CenterDlg(memorydlg); - SDLGui_CenterDlg(memorydlg); + for (i = DLGMEM_512KB; i <= DLGMEM_14MB; i++) + { + memorydlg[i].state &= ~SG_SELECTED; + } + + switch (ConfigureParams.Memory.nMemorySize) + { + case 0: + memorydlg[DLGMEM_512KB].state |= SG_SELECTED; + break; + case 1: + memorydlg[DLGMEM_1MB].state |= SG_SELECTED; + break; + case 2: + memorydlg[DLGMEM_2MB].state |= SG_SELECTED; + break; + case 4: + memorydlg[DLGMEM_4MB].state |= SG_SELECTED; + break; + case 8: + memorydlg[DLGMEM_8MB].state |= SG_SELECTED; + break; + default: + memorydlg[DLGMEM_14MB].state |= SG_SELECTED; + break; + } + + File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w); + + + if (ConfigureParams.Memory.bAutoSave) + memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED; + else + memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED; + + do + { + but = SDLGui_DoDialog(memorydlg, NULL); + + switch (but) + { + case DLGMEM_SAVE: /* Save memory snap-shot */ + if (SDLGui_FileConfSelect(dlgSnapShotName, + ConfigureParams.Memory.szMemoryCaptureFileName, + memorydlg[DLGMEM_FILENAME].w, true)) + { + MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true); + } + break; + case DLGMEM_RESTORE: /* Load memory snap-shot */ + if (SDLGui_FileConfSelect(dlgSnapShotName, + ConfigureParams.Memory.szMemoryCaptureFileName, + memorydlg[DLGMEM_FILENAME].w, false)) + { + MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true); + return true; + } + break; + } + } + while (but != DLGMEM_EXIT && but != SDLGUI_QUIT + && but != SDLGUI_ERROR && !bQuitProgram ); + + /* Read new values from dialog: */ + + if (memorydlg[DLGMEM_512KB].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySize = 0; + else if (memorydlg[DLGMEM_1MB].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySize = 1; + else if (memorydlg[DLGMEM_2MB].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySize = 2; + else if (memorydlg[DLGMEM_4MB].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySize = 4; + else if (memorydlg[DLGMEM_8MB].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySize = 8; + else + ConfigureParams.Memory.nMemorySize = 14; - memorydlg[DLGMEM_512KB].state &= ~SG_SELECTED; - memorydlg[DLGMEM_1MB].state &= ~SG_SELECTED; - memorydlg[DLGMEM_2MB].state &= ~SG_SELECTED; - memorydlg[DLGMEM_4MB].state &= ~SG_SELECTED; - if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_512Kb ) - memorydlg[DLGMEM_512KB].state |= SG_SELECTED; - else if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_1Mb ) - memorydlg[DLGMEM_1MB].state |= SG_SELECTED; - else if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_2Mb ) - memorydlg[DLGMEM_2MB].state |= SG_SELECTED; - else - memorydlg[DLGMEM_4MB].state |= SG_SELECTED; - - File_ShrinkName(dlgSnapShotName, DialogParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w); - - do - { - but = SDLGui_DoDialog(memorydlg); - - switch(but) - { - case DLGMEM_SAVE: /* Save memory snap-shot */ - strcpy(tmpname, DialogParams.Memory.szMemoryCaptureFileName); - if( SDLGui_FileSelect(tmpname, NULL, TRUE) ) /* Choose file name */ - { - if( !File_DoesFileNameEndWithSlash(tmpname) ) - { - strcpy(DialogParams.Memory.szMemoryCaptureFileName, tmpname); - File_ShrinkName(dlgSnapShotName, tmpname, memorydlg[DLGMEM_FILENAME].w); - MemorySnapShot_Capture(DialogParams.Memory.szMemoryCaptureFileName); - } - } - break; - case DLGMEM_RESTORE: /* Load memory snap-shot */ - strcpy(tmpname, DialogParams.Memory.szMemoryCaptureFileName); - if( SDLGui_FileSelect(tmpname, NULL, FALSE) ) /* Choose file name */ - { - if( !File_DoesFileNameEndWithSlash(tmpname) ) - { - strcpy(DialogParams.Memory.szMemoryCaptureFileName, tmpname); - File_ShrinkName(dlgSnapShotName, tmpname, memorydlg[DLGMEM_FILENAME].w); - MemorySnapShot_Restore(DialogParams.Memory.szMemoryCaptureFileName); - } - } - break; - } - } - while( but!=DLGMEM_EXIT && !bQuitProgram ); - - if( memorydlg[DLGMEM_512KB].state & SG_SELECTED ) - DialogParams.Memory.nMemorySize = MEMORY_SIZE_512Kb; - else if( memorydlg[DLGMEM_1MB].state & SG_SELECTED ) - DialogParams.Memory.nMemorySize = MEMORY_SIZE_1Mb; - else if( memorydlg[DLGMEM_2MB].state & SG_SELECTED ) - DialogParams.Memory.nMemorySize = MEMORY_SIZE_2Mb; - else - DialogParams.Memory.nMemorySize = MEMORY_SIZE_4Mb; + ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED); - Memory_Free(tmpname); + return false; }