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