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