|
|
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:
17: #define DISKDLG_ACSIEJECT 3
18: #define DISKDLG_ACSIBROWSE 4
19: #define DISKDLG_ACSINAME 5
20: #define DISKDLG_IDEEJECT 7
21: #define DISKDLG_IDEBROWSE 8
22: #define DISKDLG_IDENAME 9
23: #define DISKDLG_GEMDOSEJECT 11
24: #define DISKDLG_GEMDOSBROWSE 12
25: #define DISKDLG_GEMDOSNAME 13
26: #define DISKDLG_BOOTHD 14
27: #define DISKDLG_EXIT 15
28:
29:
30: /* The disks dialog: */
31: static SGOBJ diskdlg[] =
32: {
33: { SGBOX, 0, 0, 0,0, 64,16, NULL },
34: { SGTEXT, 0, 0, 27,1, 10,1, "Hard disks" },
35:
36: { SGTEXT, 0, 0, 2,3, 14,1, "ACSI HD image:" },
37: { SGBUTTON, 0, 0, 46,3, 7,1, "Eject" },
38: { SGBUTTON, 0, 0, 54,3, 8,1, "Browse" },
39: { SGTEXT, 0, 0, 3,4, 58,1, NULL },
40:
41: { SGTEXT, 0, 0, 2,6, 13,1, "IDE HD image:" },
42: { SGBUTTON, 0, 0, 46,6, 7,1, "Eject" },
43: { SGBUTTON, 0, 0, 54,6, 8,1, "Browse" },
44: { SGTEXT, 0, 0, 3,7, 58,1, NULL },
45:
46: { SGTEXT, 0, 0, 2,9, 13,1, "GEMDOS drive:" },
47: { SGBUTTON, 0, 0, 46,9, 7,1, "Eject" },
48: { SGBUTTON, 0, 0, 54,9, 8,1, "Browse" },
49: { SGTEXT, 0, 0, 3,10, 58,1, NULL },
50:
51: { SGCHECKBOX, 0, 0, 2,12, 14,1, "Boot from HD" },
52: { SGBUTTON, SG_DEFAULT, 0, 22,14, 20,1, "Back to main menu" },
53: { -1, 0, 0, 0,0, 0,0, NULL }
54: };
55:
56:
57: /**
58: * Let user browse given directory, set directory if one selected.
59: * return false if none selected, otherwise return true.
60: */
61: static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
62: {
63: char *str, *selname;
64:
65: selname = SDLGui_FileSelect(confname, NULL, false);
66: if (selname)
67: {
68: strcpy(confname, selname);
69: free(selname);
70:
71: str = strrchr(confname, PATHSEP);
72: if (str != NULL)
73: str[1] = 0;
74: File_CleanFileName(confname);
75: File_ShrinkName(dlgname, confname, maxlen);
76: return true;
77: }
78: return false;
79: }
80:
81:
82: /**
83: * Show and process the hard disk dialog.
84: */
85: void DlgHardDisk_Main(void)
86: {
87: int but;
88: char dlgname_gdos[64], dlgname_acsi[64], dlgname_ide[64];
89:
90: SDLGui_CenterDlg(diskdlg);
91:
92: /* Set up dialog to actual values: */
93:
94: /* Boot from harddisk? */
95: if (ConfigureParams.HardDisk.bBootFromHardDisk)
96: diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED;
97: else
98: diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED;
99:
100: /* ACSI hard disk image: */
101: if (ConfigureParams.HardDisk.bUseHardDiskImage)
102: File_ShrinkName(dlgname_acsi, ConfigureParams.HardDisk.szHardDiskImage,
103: diskdlg[DISKDLG_ACSINAME].w);
104: else
105: dlgname_acsi[0] = '\0';
106: diskdlg[DISKDLG_ACSINAME].txt = dlgname_acsi;
107:
108: /* IDE hard disk image: */
109: if (ConfigureParams.HardDisk.bUseIdeHardDiskImage)
110: File_ShrinkName(dlgname_ide, ConfigureParams.HardDisk.szIdeHardDiskImage,
111: diskdlg[DISKDLG_IDENAME].w);
112: else
113: dlgname_ide[0] = '\0';
114: diskdlg[DISKDLG_IDENAME].txt = dlgname_ide;
115:
116: /* GEMDOS hard disk directory: */
117: if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
118: File_ShrinkName(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0],
119: diskdlg[DISKDLG_GEMDOSNAME].w);
120: else
121: dlgname_gdos[0] = '\0';
122: diskdlg[DISKDLG_GEMDOSNAME].txt = dlgname_gdos;
123:
124: /* Draw and process the dialog */
125: do
126: {
127: but = SDLGui_DoDialog(diskdlg, NULL);
128: switch (but)
129: {
130: case DISKDLG_ACSIEJECT:
131: ConfigureParams.HardDisk.bUseHardDiskImage = false;
132: dlgname_acsi[0] = '\0';
133: break;
134: case DISKDLG_ACSIBROWSE:
135: if (SDLGui_FileConfSelect(dlgname_acsi,
136: ConfigureParams.HardDisk.szHardDiskImage,
137: diskdlg[DISKDLG_ACSINAME].w, false))
138: ConfigureParams.HardDisk.bUseHardDiskImage = true;
139: break;
140: case DISKDLG_IDEEJECT:
141: ConfigureParams.HardDisk.bUseIdeHardDiskImage = false;
142: dlgname_ide[0] = '\0';
143: break;
144: case DISKDLG_IDEBROWSE:
145: if (SDLGui_FileConfSelect(dlgname_ide,
146: ConfigureParams.HardDisk.szIdeHardDiskImage,
147: diskdlg[DISKDLG_IDENAME].w, false))
148: ConfigureParams.HardDisk.bUseIdeHardDiskImage = true;
149: break;
150: case DISKDLG_GEMDOSEJECT:
151: ConfigureParams.HardDisk.bUseHardDiskDirectories = false;
152: dlgname_gdos[0] = '\0';
153: break;
154: case DISKDLG_GEMDOSBROWSE:
155: if (DlgDisk_BrowseDir(dlgname_gdos,
156: ConfigureParams.HardDisk.szHardDiskDirectories[0],
157: diskdlg[DISKDLG_GEMDOSNAME].w))
158: ConfigureParams.HardDisk.bUseHardDiskDirectories = true;
159: break;
160: }
161: }
162: while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
163: && but != SDLGUI_ERROR && !bQuitProgram);
164:
165: /* Read values from dialog: */
166: ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED);
167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.