|
|
1.1 root 1: /*
2: Previous - dlgSCSI.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 DlgSCSI_fileid[] = "Previous dlgSCSI.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 SCSIDLG_OFFSET 2
18: #define SCSIDLG_INTERVAL 7
19:
20: #define SCSIDLG_READONLY 1
21: #define SCSIDLG_LEFT 2
22: #define SCSIDLG_DEVTYPE 3
23: #define SCSIDLG_RIGHT 4
24: #define SCSIDLG_SELECT 5
25: #define SCSIDLG_NAME 6
26:
27: #define GET_BUTTON(x) (((x)-(SCSIDLG_OFFSET))%(SCSIDLG_INTERVAL))
28: #define GET_TARGET(x) (((x)-(SCSIDLG_OFFSET))/(SCSIDLG_INTERVAL))
29: #define PUT_BUTTON(x,y) (((x)*(SCSIDLG_INTERVAL))+(SCSIDLG_OFFSET)+(y))
30:
31: #define SCSIDLG_EXIT 51
32:
33:
34: /* The SCSI dialog: */
35: static SGOBJ scsidlg[] =
36: {
37: { SGBOX, 0, 0, 0,0, 64,29, NULL },
38: { SGTEXT, 0, 0, 27,1, 10,1, "SCSI disks" },
39:
40: { SGTEXT, 0, 0, 2,3, 14,1, "SCSI Disk 0:" },
41: { SGTEXT, 0, 0, 15,3, 14,1, NULL },
42: { SGBUTTON, 0, 0, 36, 3, 3, 1, "\x04" },
43: { SGTEXT, 0, 0, 40, 3, 8, 1, NULL },
44: { SGBUTTON, 0, 0, 49, 3, 3, 1, "\x03" },
45: { SGBUTTON, 0, 0, 54,3, 8,1, "Browse" },
46: { SGTEXT, 0, 0, 3,4, 58,1, NULL },
47:
48: { SGTEXT, 0, 0, 2,6, 14,1, "SCSI Disk 1:" },
49: { SGTEXT, 0, 0, 15,6, 14,1, NULL },
50: { SGBUTTON, 0, 0, 36, 6, 3, 1, "\x04" },
51: { SGTEXT, 0, 0, 40, 6, 8, 1, NULL },
52: { SGBUTTON, 0, 0, 49, 6, 3, 1, "\x03" },
53: { SGBUTTON, 0, 0, 54,6, 8,1, "Browse" },
54: { SGTEXT, 0, 0, 3,7, 58,1, NULL },
55:
56: { SGTEXT, 0, 0, 2,9, 14,1, "SCSI Disk 2:" },
57: { SGTEXT, 0, 0, 15,9, 14,1, NULL },
58: { SGBUTTON, 0, 0, 36, 9, 3, 1, "\x04" },
59: { SGTEXT, 0, 0, 40, 9, 8, 1, NULL },
60: { SGBUTTON, 0, 0, 49, 9, 3, 1, "\x03" },
61: { SGBUTTON, 0, 0, 54,9, 8,1, "Browse" },
62: { SGTEXT, 0, 0, 3,10, 58,1, NULL },
63:
64: { SGTEXT, 0, 0, 2,12, 14,1, "SCSI Disk 3:" },
65: { SGTEXT, 0, 0, 15,12, 14,1, NULL },
66: { SGBUTTON, 0, 0, 36, 12, 3, 1, "\x04" },
67: { SGTEXT, 0, 0, 40, 12, 8, 1, NULL },
68: { SGBUTTON, 0, 0, 49, 12, 3, 1, "\x03" },
69: { SGBUTTON, 0, 0, 54,12, 8,1, "Browse" },
70: { SGTEXT, 0, 0, 3,13, 58,1, NULL },
71:
72: { SGTEXT, 0, 0, 2,15, 14,1, "SCSI Disk 4:" },
73: { SGTEXT, 0, 0, 15,15, 14,1, NULL },
74: { SGBUTTON, 0, 0, 36, 15, 3, 1, "\x04" },
75: { SGTEXT, 0, 0, 40, 15, 8, 1, NULL },
76: { SGBUTTON, 0, 0, 49, 15, 3, 1, "\x03" },
77: { SGBUTTON, 0, 0, 54,15, 8,1, "Browse" },
78: { SGTEXT, 0, 0, 3,16, 58,1, NULL },
79:
80: { SGTEXT, 0, 0, 2,18, 14,1, "SCSI Disk 5:" },
81: { SGTEXT, 0, 0, 15,18, 14,1, NULL },
82: { SGBUTTON, 0, 0, 36, 18, 3, 1, "\x04" },
83: { SGTEXT, 0, 0, 40, 18, 8, 1, NULL },
84: { SGBUTTON, 0, 0, 49, 18, 3, 1, "\x03" },
85: { SGBUTTON, 0, 0, 54,18, 8,1, "Browse" },
86: { SGTEXT, 0, 0, 3,19, 58,1, NULL },
87:
88: { SGTEXT, 0, 0, 2,21, 14,1, "SCSI Disk 6:" },
89: { SGTEXT, 0, 0, 15,21, 14,1, NULL },
90: { SGBUTTON, 0, 0, 36, 21, 3, 1, "\x04" },
91: { SGTEXT, 0, 0, 40, 21, 8, 1, NULL },
92: { SGBUTTON, 0, 0, 49, 21, 3, 1, "\x03" },
93: { SGBUTTON, 0, 0, 54,21, 8,1, "Browse" },
94: { SGTEXT, 0, 0, 3,22, 58,1, NULL },
95:
96: { SGBUTTON, SG_DEFAULT, 0, 21,26, 21,1, "Back to main menu" },
97: { -1, 0, 0, 0,0, 0,0, NULL }
98: };
99:
100:
101: #define SCSIDLG_EJECT_WARNING "WARNING: Don't eject manually if a guest system is running. Risk of data loss. Eject now?"
102: #define SCSIDLG_NODEV_NOTICE "No image selected for harddisk drive. Ignoring drive."
103:
104: /**
105: * Let user browse given directory, set directory if one selected.
106: * return false if none selected, otherwise return true.
107: */
108: /*static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
109: {
110: char *str, *selname;
111:
112: selname = SDLGui_FileSelect(confname, NULL, false);
113: if (selname)
114: {
115: strcpy(confname, selname);
116: free(selname);
117:
118: str = strrchr(confname, PATHSEP);
119: if (str != NULL)
120: str[1] = 0;
121: File_CleanFileName(confname);
122: File_ShrinkName(dlgname, confname, maxlen);
123: return true;
124: }
125: return false;
126: }*/
127:
128:
129: /* Draw device type selector */
130:
131: void DlgSCSI_DrawDevtypeSelect(void) {
132: int i;
133:
134: for (i = 0; i < ESP_MAX_DEVS; i++) {
135: switch (ConfigureParams.SCSI.target[i].nDeviceType) {
136: case DEVTYPE_HARDDISK:
137: scsidlg[PUT_BUTTON(i,SCSIDLG_DEVTYPE)].txt = "Harddisk";
138: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Select";
139: break;
140: case DEVTYPE_CD:
141: scsidlg[PUT_BUTTON(i,SCSIDLG_DEVTYPE)].txt = " CD-ROM ";
142: if (ConfigureParams.SCSI.target[i].bDiskInserted) {
143: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Eject";
144: } else {
145: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Insert";
146: }
147: break;
148: case DEVTYPE_FLOPPY:
149: scsidlg[PUT_BUTTON(i,SCSIDLG_DEVTYPE)].txt = " Floppy ";
150: if (ConfigureParams.SCSI.target[i].bDiskInserted) {
151: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Eject";
152: } else {
153: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Insert";
154: }
155: break;
156: case DEVTYPE_NONE:
157: scsidlg[PUT_BUTTON(i,SCSIDLG_DEVTYPE)].txt = "";
158: scsidlg[PUT_BUTTON(i,SCSIDLG_SELECT)].txt = "Select";
159: break;
160:
161: default:
162: scsidlg[PUT_BUTTON(i,SCSIDLG_DEVTYPE)].txt = " Error! ";
163: break;
164: }
165: if (ConfigureParams.SCSI.target[i].bWriteProtected) {
166: scsidlg[PUT_BUTTON(i,SCSIDLG_READONLY)].txt = "read-only";
167: } else {
168: scsidlg[PUT_BUTTON(i,SCSIDLG_READONLY)].txt = "";
169: }
170: }
171: }
172:
173: /**
174: * Show and process the hard disk dialog.
175: */
176: void DlgSCSI_Main(void)
177: {
178: int but;
179: int i;
180: char dlgname_scsi[ESP_MAX_DEVS][64];
181:
182: SDLGui_CenterDlg(scsidlg);
183:
184: /* Set up dialog to actual values: */
185: DlgSCSI_DrawDevtypeSelect();
186:
187: /* SCSI disk image: */
188: for (i = 0; i < ESP_MAX_DEVS; i++) {
189: if (ConfigureParams.SCSI.target[i].bDiskInserted) {
190: File_ShrinkName(dlgname_scsi[i], ConfigureParams.SCSI.target[i].szImageName,
191: scsidlg[PUT_BUTTON(i,SCSIDLG_NAME)].w);
192: } else {
193: dlgname_scsi[i][0] = '\0';
194: }
195: scsidlg[PUT_BUTTON(i,SCSIDLG_NAME)].txt = dlgname_scsi[i];
196: }
197:
198: /* Draw and process the dialog */
199: do
200: {
201: but = SDLGui_DoDialog(scsidlg, NULL);
202:
203: if (but>=SCSIDLG_OFFSET && but<((SCSIDLG_INTERVAL*ESP_MAX_DEVS)+SCSIDLG_OFFSET)) {
204:
205: switch (GET_BUTTON(but)) {
206: case SCSIDLG_LEFT:
207: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType+=NUM_DEVTYPES-1;
208: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType%=NUM_DEVTYPES;
209: DlgSCSI_DrawDevtypeSelect();
210: break;
211: case SCSIDLG_RIGHT:
212: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType++;
213: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType%=NUM_DEVTYPES;
214: DlgSCSI_DrawDevtypeSelect();
215: break;
216: case SCSIDLG_SELECT:
217: if ((ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType == DEVTYPE_CD ||
218: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType == DEVTYPE_FLOPPY) &&
219: ConfigureParams.SCSI.target[GET_TARGET(but)].bDiskInserted) {
220: if (DlgAlert_Query(SCSIDLG_EJECT_WARNING)) {
221: ConfigureParams.SCSI.target[GET_TARGET(but)].bDiskInserted = false;
222: ConfigureParams.SCSI.target[GET_TARGET(but)].szImageName[0] = '\0';
223: scsidlg[PUT_BUTTON(GET_TARGET(but),SCSIDLG_NAME)].txt[0] = '\0';
224: }
225: } else if (SDLGui_DiskSelect(dlgname_scsi[GET_TARGET(but)],
226: ConfigureParams.SCSI.target[GET_TARGET(but)].szImageName,
227: scsidlg[PUT_BUTTON(GET_TARGET(but),SCSIDLG_NAME)].w,
228: &ConfigureParams.SCSI.target[GET_TARGET(but)].bWriteProtected)) {
229: ConfigureParams.SCSI.target[GET_TARGET(but)].bDiskInserted = true;
230: if (ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType == DEVTYPE_NONE) {
231: ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType = DEVTYPE_HARDDISK;
232: }
233: }
234: DlgSCSI_DrawDevtypeSelect();
235: break;
236:
237: default:
238: break;
239: }
240: }
241: }
242: while (but != SCSIDLG_EXIT && but != SDLGUI_QUIT
243: && but != SDLGUI_ERROR && !bQuitProgram);
244:
245: /* Check for invalid combinations */
246: for (i = 0; i < ESP_MAX_DEVS; i++) {
247: if (ConfigureParams.SCSI.target[i].nDeviceType==DEVTYPE_NONE) {
248: ConfigureParams.SCSI.target[i].bDiskInserted = false;
249: ConfigureParams.SCSI.target[i].szImageName[0] = '\0';
250: ConfigureParams.SCSI.target[i].bWriteProtected = false;
251: }
252: if (ConfigureParams.SCSI.target[i].nDeviceType==DEVTYPE_HARDDISK &&
253: ConfigureParams.SCSI.target[i].bDiskInserted == false) {
254: DlgAlert_Notice(SCSIDLG_NODEV_NOTICE);
255: ConfigureParams.SCSI.target[i].nDeviceType = DEVTYPE_NONE;
256: ConfigureParams.SCSI.target[i].bWriteProtected = false;
257: }
258: if (ConfigureParams.SCSI.target[i].nDeviceType==DEVTYPE_CD) {
259: ConfigureParams.SCSI.target[i].bWriteProtected = true;
260: }
261: }
262: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.