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