|
|
1.1 root 1: /*
2: Hatari - dlgHardDisk.c
3:
1.1.1.3 root 4: This file is distributed under the GNU General Public License, version 2
5: or at your option any later version. Read the file gpl.txt for details.
1.1 root 6: */
7: const char DlgHardDisk_fileid[] = "Hatari dlgHardDisk.c : " __DATE__ " " __TIME__;
8:
9: #include <assert.h>
10: #include "main.h"
11: #include "configuration.h"
12: #include "dialog.h"
13: #include "sdlgui.h"
14: #include "file.h"
15:
16:
1.1.1.2 root 17: #define DISKDLG_ACSIEJECT 3
18: #define DISKDLG_ACSIBROWSE 4
19: #define DISKDLG_ACSINAME 5
20: #define DISKDLG_IDEMASTEREJECT 7
21: #define DISKDLG_IDEMASTERBROWSE 8
22: #define DISKDLG_IDEMASTERNAME 9
23: #define DISKDLG_IDESLAVEEJECT 11
24: #define DISKDLG_IDESLAVEBROWSE 12
25: #define DISKDLG_IDESLAVENAME 13
26: #define DISKDLG_GEMDOSEJECT 15
27: #define DISKDLG_GEMDOSBROWSE 16
28: #define DISKDLG_GEMDOSNAME 17
29: #define DISKDLG_PROTOFF 19
30: #define DISKDLG_PROTON 20
31: #define DISKDLG_PROTAUTO 21
32: #define DISKDLG_BOOTHD 22
33: #define DISKDLG_EXIT 23
1.1 root 34:
35:
36: /* The disks dialog: */
37: static SGOBJ diskdlg[] =
38: {
1.1.1.2 root 39: { SGBOX, 0, 0, 0,0, 64,19, NULL },
1.1 root 40: { SGTEXT, 0, 0, 27,1, 10,1, "Hard disks" },
41:
42: { SGTEXT, 0, 0, 2,3, 14,1, "ACSI HD image:" },
43: { SGBUTTON, 0, 0, 46,3, 7,1, "Eject" },
44: { SGBUTTON, 0, 0, 54,3, 8,1, "Browse" },
45: { SGTEXT, 0, 0, 3,4, 58,1, NULL },
46:
1.1.1.2 root 47: { SGTEXT, 0, 0, 2,5, 20,1, "IDE HD master image:" },
48: { SGBUTTON, 0, 0, 46,5, 7,1, "Eject" },
49: { SGBUTTON, 0, 0, 54,5, 8,1, "Browse" },
50: { SGTEXT, 0, 0, 3,6, 58,1, NULL },
51:
52: { SGTEXT, 0, 0, 2,7, 19,1, "IDE HD slave image:" },
53: { SGBUTTON, 0, 0, 46,7, 7,1, "Eject" },
54: { SGBUTTON, 0, 0, 54,7, 8,1, "Browse" },
55: { SGTEXT, 0, 0, 3,8, 58,1, NULL },
1.1 root 56:
57: { SGTEXT, 0, 0, 2,9, 13,1, "GEMDOS drive:" },
58: { SGBUTTON, 0, 0, 46,9, 7,1, "Eject" },
59: { SGBUTTON, 0, 0, 54,9, 8,1, "Browse" },
60: { SGTEXT, 0, 0, 3,10, 58,1, NULL },
61:
1.1.1.2 root 62: { SGTEXT, 0, 0, 2,12, 31,1, "GEMDOS drive write protection:" },
63: { SGRADIOBUT, 0, 0, 33,12, 5,1, "Off" },
64: { SGRADIOBUT, 0, 0, 40,12, 5,1, "On" },
65: { SGRADIOBUT, 0, 0, 46,12, 6,1, "Auto" },
66:
67: { SGCHECKBOX, 0, 0, 2,14, 14,1, "Boot from HD" },
68:
69: { SGBUTTON, SG_DEFAULT, 0, 22,16, 20,1, "Back to main menu" },
1.1 root 70: { -1, 0, 0, 0,0, 0,0, NULL }
71: };
72:
73:
74: /**
75: * Let user browse given directory, set directory if one selected.
76: * return false if none selected, otherwise return true.
77: */
78: static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
79: {
80: char *str, *selname;
81:
82: selname = SDLGui_FileSelect(confname, NULL, false);
83: if (selname)
84: {
85: strcpy(confname, selname);
86: free(selname);
87:
88: str = strrchr(confname, PATHSEP);
89: if (str != NULL)
90: str[1] = 0;
91: File_CleanFileName(confname);
92: File_ShrinkName(dlgname, confname, maxlen);
93: return true;
94: }
95: return false;
96: }
97:
98:
99: /**
100: * Show and process the hard disk dialog.
101: */
102: void DlgHardDisk_Main(void)
103: {
1.1.1.2 root 104: int but, i;
105: char dlgname_gdos[64], dlgname_acsi[64];
106: char dlgname_ide_master[64], dlgname_ide_slave[64];
1.1 root 107:
108: SDLGui_CenterDlg(diskdlg);
109:
110: /* Set up dialog to actual values: */
111:
112: /* Boot from harddisk? */
113: if (ConfigureParams.HardDisk.bBootFromHardDisk)
114: diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED;
115: else
116: diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED;
117:
118: /* ACSI hard disk image: */
1.1.1.4 ! root 119: if (ConfigureParams.Acsi[0].bUseDevice)
! 120: File_ShrinkName(dlgname_acsi, ConfigureParams.Acsi[0].sDeviceFile,
1.1 root 121: diskdlg[DISKDLG_ACSINAME].w);
122: else
123: dlgname_acsi[0] = '\0';
124: diskdlg[DISKDLG_ACSINAME].txt = dlgname_acsi;
125:
1.1.1.2 root 126: /* IDE master hard disk image: */
127: if (ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage)
128: File_ShrinkName(dlgname_ide_master, ConfigureParams.HardDisk.szIdeMasterHardDiskImage,
129: diskdlg[DISKDLG_IDEMASTERNAME].w);
130: else
131: dlgname_ide_master[0] = '\0';
132: diskdlg[DISKDLG_IDEMASTERNAME].txt = dlgname_ide_master;
133:
134: /* IDE slave hard disk image: */
135: if (ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage)
136: File_ShrinkName(dlgname_ide_slave, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage,
137: diskdlg[DISKDLG_IDESLAVENAME].w);
1.1 root 138: else
1.1.1.2 root 139: dlgname_ide_slave[0] = '\0';
140: diskdlg[DISKDLG_IDESLAVENAME].txt = dlgname_ide_slave;
1.1 root 141:
142: /* GEMDOS hard disk directory: */
143: if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
144: File_ShrinkName(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0],
145: diskdlg[DISKDLG_GEMDOSNAME].w);
146: else
147: dlgname_gdos[0] = '\0';
148: diskdlg[DISKDLG_GEMDOSNAME].txt = dlgname_gdos;
149:
1.1.1.2 root 150: /* Write protection */
151: for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
152: {
153: diskdlg[i].state &= ~SG_SELECTED;
154: }
155: diskdlg[DISKDLG_PROTOFF+ConfigureParams.HardDisk.nWriteProtection].state |= SG_SELECTED;
156:
1.1 root 157: /* Draw and process the dialog */
158: do
159: {
160: but = SDLGui_DoDialog(diskdlg, NULL);
161: switch (but)
162: {
163: case DISKDLG_ACSIEJECT:
1.1.1.4 ! root 164: ConfigureParams.Acsi[0].bUseDevice = false;
1.1 root 165: dlgname_acsi[0] = '\0';
166: break;
167: case DISKDLG_ACSIBROWSE:
168: if (SDLGui_FileConfSelect(dlgname_acsi,
1.1.1.4 ! root 169: ConfigureParams.Acsi[0].sDeviceFile,
1.1 root 170: diskdlg[DISKDLG_ACSINAME].w, false))
1.1.1.4 ! root 171: ConfigureParams.Acsi[0].bUseDevice = true;
1.1 root 172: break;
1.1.1.2 root 173: case DISKDLG_IDEMASTEREJECT:
174: ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = false;
175: dlgname_ide_master[0] = '\0';
176: break;
177: case DISKDLG_IDEMASTERBROWSE:
178: if (SDLGui_FileConfSelect(dlgname_ide_master,
179: ConfigureParams.HardDisk.szIdeMasterHardDiskImage,
180: diskdlg[DISKDLG_IDEMASTERNAME].w, false))
181: ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = true;
182: break;
183: case DISKDLG_IDESLAVEEJECT:
184: ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = false;
185: dlgname_ide_slave[0] = '\0';
186: break;
187: case DISKDLG_IDESLAVEBROWSE:
188: if (SDLGui_FileConfSelect(dlgname_ide_slave,
189: ConfigureParams.HardDisk.szIdeSlaveHardDiskImage,
190: diskdlg[DISKDLG_IDESLAVENAME].w, false))
191: ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = true;
1.1 root 192: break;
193: case DISKDLG_GEMDOSEJECT:
194: ConfigureParams.HardDisk.bUseHardDiskDirectories = false;
195: dlgname_gdos[0] = '\0';
196: break;
197: case DISKDLG_GEMDOSBROWSE:
198: if (DlgDisk_BrowseDir(dlgname_gdos,
199: ConfigureParams.HardDisk.szHardDiskDirectories[0],
200: diskdlg[DISKDLG_GEMDOSNAME].w))
201: ConfigureParams.HardDisk.bUseHardDiskDirectories = true;
202: break;
203: }
204: }
205: while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
206: && but != SDLGUI_ERROR && !bQuitProgram);
207:
208: /* Read values from dialog: */
1.1.1.2 root 209: for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
210: {
211: if (diskdlg[i].state & SG_SELECTED)
212: {
213: ConfigureParams.HardDisk.nWriteProtection = i-DISKDLG_PROTOFF;
214: break;
215: }
216: }
1.1 root 217: ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED);
218: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.