|
|
1.1 root 1: /*
2: Hatari - dlgHardDisk.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: 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: */
119: if (ConfigureParams.HardDisk.bUseHardDiskImage)
120: File_ShrinkName(dlgname_acsi, ConfigureParams.HardDisk.szHardDiskImage,
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:
164: ConfigureParams.HardDisk.bUseHardDiskImage = false;
165: dlgname_acsi[0] = '\0';
166: break;
167: case DISKDLG_ACSIBROWSE:
168: if (SDLGui_FileConfSelect(dlgname_acsi,
169: ConfigureParams.HardDisk.szHardDiskImage,
170: diskdlg[DISKDLG_ACSINAME].w, false))
171: ConfigureParams.HardDisk.bUseHardDiskImage = true;
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.