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