|
|
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:
1.1.1.2 ! root 17: #define DISKDLG_CDROM0 3
! 18: #define DISKDLG_SCSIEJECT0 4
! 19: #define DISKDLG_SCSIBROWSE0 5
! 20: #define DISKDLG_SCSINAME0 6
! 21:
! 22: #define DISKDLG_CDROM1 8
! 23: #define DISKDLG_SCSIEJECT1 9
! 24: #define DISKDLG_SCSIBROWSE1 10
! 25: #define DISKDLG_SCSINAME1 11
! 26:
! 27: #define DISKDLG_CDROM2 13
! 28: #define DISKDLG_SCSIEJECT2 14
! 29: #define DISKDLG_SCSIBROWSE2 15
! 30: #define DISKDLG_SCSINAME2 16
! 31:
! 32: #define DISKDLG_CDROM3 18
! 33: #define DISKDLG_SCSIEJECT3 19
! 34: #define DISKDLG_SCSIBROWSE3 20
! 35: #define DISKDLG_SCSINAME3 21
! 36:
! 37: #define DISKDLG_CDROM4 23
! 38: #define DISKDLG_SCSIEJECT4 24
! 39: #define DISKDLG_SCSIBROWSE4 25
! 40: #define DISKDLG_SCSINAME4 26
! 41:
! 42: #define DISKDLG_CDROM5 28
! 43: #define DISKDLG_SCSIEJECT5 29
! 44: #define DISKDLG_SCSIBROWSE5 30
! 45: #define DISKDLG_SCSINAME5 31
! 46:
! 47: #define DISKDLG_CDROM6 33
! 48: #define DISKDLG_SCSIEJECT6 34
! 49: #define DISKDLG_SCSIBROWSE6 35
! 50: #define DISKDLG_SCSINAME6 36
! 51:
! 52: #define DISKDLG_EXIT 37
1.1 root 53:
54:
55: /* The disks dialog: */
56: static SGOBJ diskdlg[] =
57: {
1.1.1.2 ! root 58: { SGBOX, 0, 0, 0,0, 64,29, NULL },
! 59: { SGTEXT, 0, 0, 27,1, 10,1, "SCSI disks" },
1.1 root 60:
1.1.1.2 ! root 61: { SGTEXT, 0, 0, 2,3, 14,1, "SCSI Disk 0:" },
! 62: { SGCHECKBOX, 0, 0, 36, 3, 8, 1, "CD-ROM" },
1.1 root 63: { SGBUTTON, 0, 0, 46,3, 7,1, "Eject" },
64: { SGBUTTON, 0, 0, 54,3, 8,1, "Browse" },
65: { SGTEXT, 0, 0, 3,4, 58,1, NULL },
1.1.1.2 ! root 66:
! 67: { SGTEXT, 0, 0, 2, 6, 14,1, "SCSI Disk 1:" },
! 68: { SGCHECKBOX, 0, 0, 36, 6, 8, 1, "CD-ROM" },
! 69: { SGBUTTON, 0, 0, 46,6, 7,1, "Eject" },
! 70: { SGBUTTON, 0, 0, 54,6, 8,1, "Browse" },
! 71: { SGTEXT, 0, 0, 3,7, 58,1, NULL },
1.1 root 72:
1.1.1.2 ! root 73: { SGTEXT, 0, 0, 2, 9, 14,1, "SCSI Disk 2:" },
! 74: { SGCHECKBOX, 0, 0, 36, 9, 8, 1, "CD-ROM" },
1.1 root 75: { SGBUTTON, 0, 0, 46,9, 7,1, "Eject" },
76: { SGBUTTON, 0, 0, 54,9, 8,1, "Browse" },
1.1.1.2 ! root 77: { SGTEXT, 0, 0, 3,10, 58,1, NULL },
1.1 root 78:
1.1.1.2 ! root 79: { SGTEXT, 0, 0, 2, 12, 14,1, "SCSI Disk 3:" },
! 80: { SGCHECKBOX, 0, 0, 36, 12, 8, 1, "CD-ROM" },
! 81: { SGBUTTON, 0, 0, 46,12, 7,1, "Eject" },
! 82: { SGBUTTON, 0, 0, 54,12, 8,1, "Browse" },
! 83: { SGTEXT, 0, 0, 3,13, 58,1, NULL },
! 84:
! 85: { SGTEXT, 0, 0, 2, 15, 14,1, "SCSI Disk 4:" },
! 86: { SGCHECKBOX, 0, 0, 36, 15, 8, 1, "CD-ROM" },
! 87: { SGBUTTON, 0, 0, 46,15, 7,1, "Eject" },
! 88: { SGBUTTON, 0, 0, 54,15, 8,1, "Browse" },
! 89: { SGTEXT, 0, 0, 3,16, 58,1, NULL },
! 90:
! 91: { SGTEXT, 0, 0, 2, 18, 14,1, "SCSI Disk 5:" },
! 92: { SGCHECKBOX, 0, 0, 36, 18, 8, 1, "CD-ROM" },
! 93: { SGBUTTON, 0, 0, 46,18, 7,1, "Eject" },
! 94: { SGBUTTON, 0, 0, 54,18, 8,1, "Browse" },
! 95: { SGTEXT, 0, 0, 3,19, 58,1, NULL },
! 96:
! 97: { SGTEXT, 0, 0, 2, 21, 14,1, "SCSI Disk 6:" },
! 98: { SGCHECKBOX, 0, 0, 36, 21, 8, 1, "CD-ROM" },
! 99: { SGBUTTON, 0, 0, 46,21, 7,1, "Eject" },
! 100: { SGBUTTON, 0, 0, 54,21, 8,1, "Browse" },
! 101: { SGTEXT, 0, 0, 3,22, 58,1, NULL },
1.1 root 102:
103:
1.1.1.2 ! root 104: { SGBUTTON, SG_DEFAULT, 0, 22,26, 20,1, "Back to main menu" },
1.1 root 105: { -1, 0, 0, 0,0, 0,0, NULL }
106: };
107:
108:
109: /**
110: * Let user browse given directory, set directory if one selected.
111: * return false if none selected, otherwise return true.
112: */
1.1.1.2 ! root 113: /*static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
1.1 root 114: {
115: char *str, *selname;
116:
117: selname = SDLGui_FileSelect(confname, NULL, false);
118: if (selname)
119: {
120: strcpy(confname, selname);
121: free(selname);
122:
123: str = strrchr(confname, PATHSEP);
124: if (str != NULL)
125: str[1] = 0;
126: File_CleanFileName(confname);
127: File_ShrinkName(dlgname, confname, maxlen);
128: return true;
129: }
130: return false;
1.1.1.2 ! root 131: }*/
1.1 root 132:
133:
134: /**
135: * Show and process the hard disk dialog.
136: */
137: void DlgHardDisk_Main(void)
138: {
1.1.1.2 ! root 139: int but;
! 140: char dlgname_scsi[ESP_MAX_DEVS][64];
! 141: int dialog_offset = DISKDLG_SCSINAME1 - DISKDLG_SCSINAME0;
1.1 root 142:
143: SDLGui_CenterDlg(diskdlg);
144:
145: /* Set up dialog to actual values: */
146:
1.1.1.2 ! root 147: /* SCSI hard disk image: */
! 148: int target;
! 149: for (target = 0; target < ESP_MAX_DEVS; target++) {
! 150: if (ConfigureParams.SCSI.target[target].bAttached) {
! 151: File_ShrinkName(dlgname_scsi[target], ConfigureParams.SCSI.target[target].szImageName,
! 152: diskdlg[DISKDLG_SCSINAME0+target*dialog_offset].w);
! 153: } else {
! 154: dlgname_scsi[target][0] = '\0';
! 155: }
! 156: diskdlg[DISKDLG_SCSINAME0+target*dialog_offset].txt = dlgname_scsi[target];
! 157: }
! 158:
! 159: /* CD-ROM true or false? */
! 160: for (target = 0; target < ESP_MAX_DEVS; target++) {
! 161: if (ConfigureParams.SCSI.target[target].bCDROM)
! 162: diskdlg[DISKDLG_CDROM0+target*dialog_offset].state |= SG_SELECTED;
! 163: else
! 164: diskdlg[DISKDLG_CDROM0+target*dialog_offset].state &= ~SG_SELECTED;
! 165: }
1.1 root 166:
1.1.1.2 ! root 167:
1.1 root 168: /* Draw and process the dialog */
169: do
170: {
171: but = SDLGui_DoDialog(diskdlg, NULL);
172: switch (but)
173: {
1.1.1.2 ! root 174: case DISKDLG_SCSIEJECT0:
! 175: ConfigureParams.SCSI.target[0].bAttached = false;
! 176: ConfigureParams.SCSI.target[0].szImageName[0] = '\0';
! 177: dlgname_scsi[0][0] = '\0';
! 178: break;
! 179: case DISKDLG_SCSIBROWSE0:
! 180: if (SDLGui_FileConfSelect(dlgname_scsi[0], ConfigureParams.SCSI.target[0].szImageName, diskdlg[DISKDLG_SCSINAME0].w, false))
! 181: ConfigureParams.SCSI.target[0].bAttached = true;
! 182: break;
! 183:
! 184: case DISKDLG_SCSIEJECT1:
! 185: ConfigureParams.SCSI.target[1].bAttached = false;
! 186: ConfigureParams.SCSI.target[1].szImageName[0] = '\0';
! 187: dlgname_scsi[1][0] = '\0';
! 188: break;
! 189: case DISKDLG_SCSIBROWSE1:
! 190: if (SDLGui_FileConfSelect(dlgname_scsi[1], ConfigureParams.SCSI.target[1].szImageName, diskdlg[DISKDLG_SCSINAME1].w, false))
! 191: ConfigureParams.SCSI.target[1].bAttached = true;
! 192: break;
! 193:
! 194: case DISKDLG_SCSIEJECT2:
! 195: ConfigureParams.SCSI.target[2].bAttached = false;
! 196: ConfigureParams.SCSI.target[2].szImageName[0] = '\0';
! 197: dlgname_scsi[2][0] = '\0';
! 198: break;
! 199: case DISKDLG_SCSIBROWSE2:
! 200: if (SDLGui_FileConfSelect(dlgname_scsi[2], ConfigureParams.SCSI.target[2].szImageName, diskdlg[DISKDLG_SCSINAME2].w, false))
! 201: ConfigureParams.SCSI.target[2].bAttached = true;
! 202: break;
! 203:
! 204: case DISKDLG_SCSIEJECT3:
! 205: ConfigureParams.SCSI.target[3].bAttached = false;
! 206: ConfigureParams.SCSI.target[3].szImageName[3] = '\0';
! 207: dlgname_scsi[3][0] = '\0';
! 208: break;
! 209: case DISKDLG_SCSIBROWSE3:
! 210: if (SDLGui_FileConfSelect(dlgname_scsi[3], ConfigureParams.SCSI.target[3].szImageName, diskdlg[DISKDLG_SCSINAME3].w, false))
! 211: ConfigureParams.SCSI.target[3].bAttached = true;
! 212: break;
! 213:
! 214: case DISKDLG_SCSIEJECT4:
! 215: ConfigureParams.SCSI.target[4].bAttached = false;
! 216: ConfigureParams.SCSI.target[4].szImageName[4] = '\0';
! 217: dlgname_scsi[4][0] = '\0';
! 218: break;
! 219: case DISKDLG_SCSIBROWSE4:
! 220: if (SDLGui_FileConfSelect(dlgname_scsi[4], ConfigureParams.SCSI.target[4].szImageName, diskdlg[DISKDLG_SCSINAME4].w, false))
! 221: ConfigureParams.SCSI.target[4].bAttached = true;
! 222: break;
! 223:
! 224: case DISKDLG_SCSIEJECT5:
! 225: ConfigureParams.SCSI.target[5].bAttached = false;
! 226: ConfigureParams.SCSI.target[5].szImageName[0] = '\0';
! 227: dlgname_scsi[5][0] = '\0';
! 228: break;
! 229: case DISKDLG_SCSIBROWSE5:
! 230: if (SDLGui_FileConfSelect(dlgname_scsi[5], ConfigureParams.SCSI.target[5].szImageName, diskdlg[DISKDLG_SCSINAME5].w, false))
! 231: ConfigureParams.SCSI.target[5].bAttached = true;
! 232: break;
! 233:
! 234: case DISKDLG_SCSIEJECT6:
! 235: ConfigureParams.SCSI.target[6].bAttached = false;
! 236: ConfigureParams.SCSI.target[6].szImageName[0] = '\0';
! 237: dlgname_scsi[6][0] = '\0';
! 238: break;
! 239: case DISKDLG_SCSIBROWSE6:
! 240: if (SDLGui_FileConfSelect(dlgname_scsi[6], ConfigureParams.SCSI.target[6].szImageName, diskdlg[DISKDLG_SCSINAME6].w, false))
! 241: ConfigureParams.SCSI.target[6].bAttached = true;
! 242: break;
! 243: }
1.1 root 244: }
245: while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
246: && but != SDLGUI_ERROR && !bQuitProgram);
1.1.1.2 ! root 247:
! 248: /* Read values from dialog: */
! 249: for (target = 0; target < ESP_MAX_DEVS; target++) {
! 250: ConfigureParams.SCSI.target[target].bCDROM = (diskdlg[DISKDLG_CDROM0+target*dialog_offset].state & SG_SELECTED);
! 251: }
1.1 root 252: }
1.1.1.2 ! root 253:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.