|
|
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_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 ! 34: ! 35: ! 36: /* The disks dialog: */ ! 37: static SGOBJ diskdlg[] = ! 38: { ! 39: { SGBOX, 0, 0, 0,0, 64,19, NULL }, ! 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: ! 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 }, ! 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: ! 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" }, ! 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: { ! 104: int but, i; ! 105: char dlgname_gdos[64], dlgname_acsi[64]; ! 106: char dlgname_ide_master[64], dlgname_ide_slave[64]; ! 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: ! 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); ! 138: else ! 139: dlgname_ide_slave[0] = '\0'; ! 140: diskdlg[DISKDLG_IDESLAVENAME].txt = dlgname_ide_slave; ! 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: ! 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: ! 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; ! 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; ! 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: */ ! 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: } ! 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.