|
|
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.