|
|
1.1 root 1: /*
2: Hatari - dlgMemory.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6: */
1.1.1.2 ! root 7: char DlgMemory_rcsid[] = "Hatari $Id: dlgMemory.c,v 1.7 2005/02/13 16:18:52 thothy Exp $";
1.1 root 8:
9: #include "main.h"
10: #include "dialog.h"
11: #include "sdlgui.h"
12: #include "memorySnapShot.h"
13: #include "file.h"
14: #include "screen.h"
15:
16:
17: #define DLGMEM_512KB 4
18: #define DLGMEM_1MB 5
19: #define DLGMEM_2MB 6
20: #define DLGMEM_4MB 7
21: #define DLGMEM_FILENAME 11
22: #define DLGMEM_SAVE 12
23: #define DLGMEM_RESTORE 13
24: #define DLGMEM_EXIT 14
25:
26:
27: static char dlgSnapShotName[36+1];
28:
29:
30: /* The memory dialog: */
31: static SGOBJ memorydlg[] =
32: {
33: { SGBOX, 0, 0, 0,0, 40,21, NULL },
34:
35: { SGBOX, 0, 0, 1,1, 38,7, NULL },
36: { SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" },
37: { SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" },
38: { SGRADIOBUT, 0, 0, 19,4, 8,1, "512 kB" },
39: { SGRADIOBUT, 0, 0, 30,4, 6,1, "1 MB" },
40: { SGRADIOBUT, 0, 0, 19,6, 6,1, "2 MB" },
41: { SGRADIOBUT, 0, 0, 30,6, 6,1, "4 MB" },
42:
43: { SGBOX, 0, 0, 1,9, 38,8, NULL },
44: { SGTEXT, 0, 0, 12,10, 17,1, "Memory state save" },
45: { SGTEXT, 0, 0, 2,12, 20,1, "Snap-shot file name:" },
46: { SGTEXT, 0, 0, 2,13, 36,1, dlgSnapShotName },
47: { SGBUTTON, 0, 0, 8,15, 10,1, "Save" },
48: { SGBUTTON, 0, 0, 22,15, 10,1, "Restore" },
49:
50: { SGBUTTON, 0, 0, 10,19, 20,1, "Back to main menu" },
51: { -1, 0, 0, 0,0, 0,0, NULL }
52: };
53:
54:
55: /*-----------------------------------------------------------------------*/
56: /*
57: Show and process the memory dialog.
58: */
59: void Dialog_MemDlg(void)
60: {
61: int but;
62: char *tmpname;
63:
64: /* Allocate memory for tmpname: */
1.1.1.2 ! root 65: tmpname = malloc(FILENAME_MAX);
! 66: if (!tmpname)
! 67: {
! 68: perror("Dialog_MemDlg");
! 69: return;
! 70: }
1.1 root 71:
72: SDLGui_CenterDlg(memorydlg);
73:
74: memorydlg[DLGMEM_512KB].state &= ~SG_SELECTED;
75: memorydlg[DLGMEM_1MB].state &= ~SG_SELECTED;
76: memorydlg[DLGMEM_2MB].state &= ~SG_SELECTED;
77: memorydlg[DLGMEM_4MB].state &= ~SG_SELECTED;
78: if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_512Kb )
79: memorydlg[DLGMEM_512KB].state |= SG_SELECTED;
80: else if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_1Mb )
81: memorydlg[DLGMEM_1MB].state |= SG_SELECTED;
82: else if( DialogParams.Memory.nMemorySize == MEMORY_SIZE_2Mb )
83: memorydlg[DLGMEM_2MB].state |= SG_SELECTED;
84: else
85: memorydlg[DLGMEM_4MB].state |= SG_SELECTED;
86:
87: File_ShrinkName(dlgSnapShotName, DialogParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w);
88:
89: do
90: {
1.1.1.2 ! root 91: but = SDLGui_DoDialog(memorydlg, NULL);
1.1 root 92:
93: switch(but)
94: {
95: case DLGMEM_SAVE: /* Save memory snap-shot */
96: strcpy(tmpname, DialogParams.Memory.szMemoryCaptureFileName);
97: if( SDLGui_FileSelect(tmpname, NULL, TRUE) ) /* Choose file name */
98: {
99: if( !File_DoesFileNameEndWithSlash(tmpname) )
100: {
101: strcpy(DialogParams.Memory.szMemoryCaptureFileName, tmpname);
102: File_ShrinkName(dlgSnapShotName, tmpname, memorydlg[DLGMEM_FILENAME].w);
103: MemorySnapShot_Capture(DialogParams.Memory.szMemoryCaptureFileName);
104: }
105: }
106: break;
107: case DLGMEM_RESTORE: /* Load memory snap-shot */
108: strcpy(tmpname, DialogParams.Memory.szMemoryCaptureFileName);
109: if( SDLGui_FileSelect(tmpname, NULL, FALSE) ) /* Choose file name */
110: {
111: if( !File_DoesFileNameEndWithSlash(tmpname) )
112: {
113: strcpy(DialogParams.Memory.szMemoryCaptureFileName, tmpname);
114: File_ShrinkName(dlgSnapShotName, tmpname, memorydlg[DLGMEM_FILENAME].w);
115: MemorySnapShot_Restore(DialogParams.Memory.szMemoryCaptureFileName);
116: }
117: }
118: break;
119: }
120: }
1.1.1.2 ! root 121: while (but != DLGMEM_EXIT && but != SDLGUI_QUIT && !bQuitProgram );
1.1 root 122:
123: if( memorydlg[DLGMEM_512KB].state & SG_SELECTED )
124: DialogParams.Memory.nMemorySize = MEMORY_SIZE_512Kb;
125: else if( memorydlg[DLGMEM_1MB].state & SG_SELECTED )
126: DialogParams.Memory.nMemorySize = MEMORY_SIZE_1Mb;
127: else if( memorydlg[DLGMEM_2MB].state & SG_SELECTED )
128: DialogParams.Memory.nMemorySize = MEMORY_SIZE_2Mb;
129: else
130: DialogParams.Memory.nMemorySize = MEMORY_SIZE_4Mb;
131:
1.1.1.2 ! root 132: free(tmpname);
1.1 root 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.