Annotation of hatari/src/gui-sdl/dlgHardDisk.c, revision 1.1.1.5

1.1       root        1: /*
                      2:   Hatari - dlgHardDisk.c
                      3: 
1.1.1.3   root        4:   This file is distributed under the GNU General Public License, version 2
                      5:   or at your option any later version. Read the file gpl.txt for details.
1.1       root        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_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
1.1.1.5 ! root       29: #define DISKDLG_GEMDOSCONV        18
        !            30: #define DISKDLG_DRIVESKIP         19
        !            31: #define DISKDLG_PROTOFF           21
        !            32: #define DISKDLG_PROTON            22
        !            33: #define DISKDLG_PROTAUTO          23
        !            34: #define DISKDLG_BOOTHD            24
        !            35: #define DISKDLG_EXIT              25
1.1       root       36: 
                     37: 
                     38: /* The disks dialog: */
                     39: static SGOBJ diskdlg[] =
                     40: {
1.1.1.5 ! root       41:        { SGBOX, 0, 0, 0,0, 64,22, NULL },
1.1       root       42:        { SGTEXT, 0, 0, 27,1, 10,1, "Hard disks" },
                     43: 
                     44:        { SGTEXT, 0, 0, 2,3, 14,1, "ACSI HD image:" },
1.1.1.5 ! root       45:        { SGBUTTON, 0, 0, 46,3, 7,1, "Ejec_t" },
        !            46:        { SGBUTTON, 0, 0, 54,3, 8,1, "Brow_se" },
1.1       root       47:        { SGTEXT, 0, 0, 3,4, 58,1, NULL },
                     48: 
1.1.1.2   root       49:        { SGTEXT, 0, 0, 2,5, 20,1, "IDE HD master image:" },
1.1.1.5 ! root       50:        { SGBUTTON, 0, 0, 46,5, 7,1, "Eje_ct" },
        !            51:        { SGBUTTON, 0, 0, 54,5, 8,1, "Bro_wse" },
1.1.1.2   root       52:        { SGTEXT, 0, 0, 3,6, 58,1, NULL },
                     53: 
                     54:        { SGTEXT, 0, 0, 2,7, 19,1, "IDE HD slave image:" },
1.1.1.5 ! root       55:        { SGBUTTON, 0, 0, 46,7, 7,1, "E_ject" },
        !            56:        { SGBUTTON, 0, 0, 54,7, 8,1, "Br_owse" },
1.1.1.2   root       57:        { SGTEXT, 0, 0, 3,8, 58,1, NULL },
1.1       root       58: 
                     59:        { SGTEXT, 0, 0, 2,9, 13,1, "GEMDOS drive:" },
1.1.1.5 ! root       60:        { SGBUTTON, 0, 0, 46,9, 7,1, "_Eject" },
        !            61:        { SGBUTTON, 0, 0, 54,9, 8,1, "B_rowse" },
1.1       root       62:        { SGTEXT, 0, 0, 3,10, 58,1, NULL },
                     63: 
1.1.1.5 ! root       64:        { SGCHECKBOX, 0, 0, 8,12, 42,1, "Atari <-> _host 8-bit file name conversion" },
        !            65:        { SGCHECKBOX, 0, 0, 8,13, 42,1, "After ACSI/IDE _partitions (experimental)" },
1.1.1.2   root       66: 
1.1.1.5 ! root       67:        { SGTEXT, 0, 0, 8,15, 31,1, "Write protection:" },
        !            68:        { SGRADIOBUT, 0, 0, 26,15, 5,1, "O_ff" },
        !            69:        { SGRADIOBUT, 0, 0, 32,15, 4,1, "O_n" },
        !            70:        { SGRADIOBUT, 0, 0, 37,15, 6,1, "_Auto" },
1.1.1.2   root       71: 
1.1.1.5 ! root       72:        { SGCHECKBOX, 0, 0, 2,17, 16,1, "_Boot from HD" },
        !            73: 
        !            74:        { SGBUTTON, SG_DEFAULT, 0, 22,20, 20,1, "Back to main menu" },
1.1       root       75:        { -1, 0, 0, 0,0, 0,0, NULL }
                     76: };
                     77: 
                     78: 
                     79: /**
                     80:  * Let user browse given directory, set directory if one selected.
                     81:  * return false if none selected, otherwise return true.
                     82:  */
                     83: static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
                     84: {
                     85:        char *str, *selname;
                     86: 
1.1.1.5 ! root       87:        selname = SDLGui_FileSelect("GEMDOS drive directory:", confname, NULL, false);
1.1       root       88:        if (selname)
                     89:        {
                     90:                strcpy(confname, selname);
                     91:                free(selname);
                     92: 
                     93:                str = strrchr(confname, PATHSEP);
                     94:                if (str != NULL)
                     95:                        str[1] = 0;
                     96:                File_CleanFileName(confname);
                     97:                File_ShrinkName(dlgname, confname, maxlen);
                     98:                return true;
                     99:        }
                    100:        return false;
                    101: }
                    102: 
                    103: 
                    104: /**
                    105:  * Show and process the hard disk dialog.
                    106:  */
                    107: void DlgHardDisk_Main(void)
                    108: {
1.1.1.2   root      109:        int but, i;
                    110:        char dlgname_gdos[64], dlgname_acsi[64];
                    111:        char dlgname_ide_master[64], dlgname_ide_slave[64];
1.1       root      112: 
                    113:        SDLGui_CenterDlg(diskdlg);
                    114: 
                    115:        /* Set up dialog to actual values: */
                    116: 
1.1.1.5 ! root      117:        /* Convert 8-bit GEMDOS file names? */
        !           118:        if (ConfigureParams.HardDisk.bFilenameConversion)
        !           119:                diskdlg[DISKDLG_GEMDOSCONV].state |= SG_SELECTED;
        !           120:        else
        !           121:                diskdlg[DISKDLG_GEMDOSCONV].state &= ~SG_SELECTED;
        !           122: 
        !           123:        /* Skip ACSI/IDE partitions? */
        !           124:        if (ConfigureParams.HardDisk.nGemdosDrive == DRIVE_SKIP)
        !           125:                diskdlg[DISKDLG_DRIVESKIP].state |= SG_SELECTED;
        !           126:        else
        !           127:                diskdlg[DISKDLG_DRIVESKIP].state &= ~SG_SELECTED;
        !           128: 
1.1       root      129:        /* Boot from harddisk? */
                    130:        if (ConfigureParams.HardDisk.bBootFromHardDisk)
                    131:                diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED;
                    132:        else
                    133:                diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED;
                    134: 
                    135:        /* ACSI hard disk image: */
1.1.1.4   root      136:        if (ConfigureParams.Acsi[0].bUseDevice)
                    137:                File_ShrinkName(dlgname_acsi, ConfigureParams.Acsi[0].sDeviceFile,
1.1       root      138:                                diskdlg[DISKDLG_ACSINAME].w);
                    139:        else
                    140:                dlgname_acsi[0] = '\0';
                    141:        diskdlg[DISKDLG_ACSINAME].txt = dlgname_acsi;
                    142: 
1.1.1.2   root      143:        /* IDE master hard disk image: */
                    144:        if (ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage)
                    145:                File_ShrinkName(dlgname_ide_master, ConfigureParams.HardDisk.szIdeMasterHardDiskImage,
                    146:                                diskdlg[DISKDLG_IDEMASTERNAME].w);
                    147:        else
                    148:                dlgname_ide_master[0] = '\0';
                    149:        diskdlg[DISKDLG_IDEMASTERNAME].txt = dlgname_ide_master;
                    150: 
                    151:        /* IDE slave hard disk image: */
                    152:        if (ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage)
                    153:                File_ShrinkName(dlgname_ide_slave, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage,
                    154:                                diskdlg[DISKDLG_IDESLAVENAME].w);
1.1       root      155:        else
1.1.1.2   root      156:                dlgname_ide_slave[0] = '\0';
                    157:        diskdlg[DISKDLG_IDESLAVENAME].txt = dlgname_ide_slave;
1.1       root      158: 
                    159:        /* GEMDOS hard disk directory: */
                    160:        if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
                    161:                File_ShrinkName(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0],
                    162:                                diskdlg[DISKDLG_GEMDOSNAME].w);
                    163:        else
                    164:                dlgname_gdos[0] = '\0';
                    165:        diskdlg[DISKDLG_GEMDOSNAME].txt = dlgname_gdos;
                    166: 
1.1.1.2   root      167:        /* Write protection */
                    168:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    169:        {
                    170:                diskdlg[i].state &= ~SG_SELECTED;
                    171:        }
                    172:        diskdlg[DISKDLG_PROTOFF+ConfigureParams.HardDisk.nWriteProtection].state |= SG_SELECTED;
                    173: 
1.1       root      174:        /* Draw and process the dialog */
                    175:        do
                    176:        {
1.1.1.5 ! root      177:                but = SDLGui_DoDialog(diskdlg, NULL, false);
1.1       root      178:                switch (but)
                    179:                {
                    180:                 case DISKDLG_ACSIEJECT:
1.1.1.4   root      181:                        ConfigureParams.Acsi[0].bUseDevice = false;
1.1       root      182:                        dlgname_acsi[0] = '\0';
                    183:                        break;
                    184:                 case DISKDLG_ACSIBROWSE:
1.1.1.5 ! root      185:                        if (SDLGui_FileConfSelect("ACSI HD image:", dlgname_acsi,
1.1.1.4   root      186:                                                  ConfigureParams.Acsi[0].sDeviceFile,
1.1       root      187:                                                  diskdlg[DISKDLG_ACSINAME].w, false))
1.1.1.4   root      188:                                ConfigureParams.Acsi[0].bUseDevice = true;
1.1       root      189:                        break;
1.1.1.2   root      190:                 case DISKDLG_IDEMASTEREJECT:
                    191:                        ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = false;
                    192:                        dlgname_ide_master[0] = '\0';
                    193:                        break;
                    194:                 case DISKDLG_IDEMASTERBROWSE:
1.1.1.5 ! root      195:                        if (SDLGui_FileConfSelect("IDE HD master image:", dlgname_ide_master,
1.1.1.2   root      196:                                                  ConfigureParams.HardDisk.szIdeMasterHardDiskImage,
                    197:                                                  diskdlg[DISKDLG_IDEMASTERNAME].w, false))
                    198:                                ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = true;
                    199:                        break;
                    200:                 case DISKDLG_IDESLAVEEJECT:
                    201:                        ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = false;
                    202:                        dlgname_ide_slave[0] = '\0';
                    203:                        break;
                    204:                 case DISKDLG_IDESLAVEBROWSE:
1.1.1.5 ! root      205:                        if (SDLGui_FileConfSelect("IDE HD slave image:", dlgname_ide_slave,
1.1.1.2   root      206:                                                  ConfigureParams.HardDisk.szIdeSlaveHardDiskImage,
                    207:                                                  diskdlg[DISKDLG_IDESLAVENAME].w, false))
                    208:                                ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = true;
1.1       root      209:                        break;
                    210:                 case DISKDLG_GEMDOSEJECT:
                    211:                        ConfigureParams.HardDisk.bUseHardDiskDirectories = false;
                    212:                        dlgname_gdos[0] = '\0';
                    213:                        break;
                    214:                 case DISKDLG_GEMDOSBROWSE:
                    215:                        if (DlgDisk_BrowseDir(dlgname_gdos,
                    216:                                             ConfigureParams.HardDisk.szHardDiskDirectories[0],
                    217:                                             diskdlg[DISKDLG_GEMDOSNAME].w))
                    218:                                ConfigureParams.HardDisk.bUseHardDiskDirectories = true;
                    219:                        break;
                    220:                }
                    221:        }
                    222:        while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
                    223:                && but != SDLGUI_ERROR && !bQuitProgram);
                    224: 
                    225:        /* Read values from dialog: */
1.1.1.2   root      226:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    227:        {
                    228:                if (diskdlg[i].state & SG_SELECTED)
                    229:                {
                    230:                        ConfigureParams.HardDisk.nWriteProtection = i-DISKDLG_PROTOFF;
                    231:                        break;
                    232:                }
                    233:        }
1.1       root      234:        ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED);
1.1.1.5 ! root      235: 
        !           236:        if (diskdlg[DISKDLG_DRIVESKIP].state & SG_SELECTED)
        !           237:                ConfigureParams.HardDisk.nGemdosDrive = DRIVE_SKIP;
        !           238:        else if (ConfigureParams.HardDisk.nGemdosDrive == DRIVE_SKIP)
        !           239:                ConfigureParams.HardDisk.nGemdosDrive = DRIVE_C;
        !           240: 
        !           241:        if (diskdlg[DISKDLG_GEMDOSCONV].state & SG_SELECTED)
        !           242:                ConfigureParams.HardDisk.bFilenameConversion = true;
        !           243:        else
        !           244:                ConfigureParams.HardDisk.bFilenameConversion = false;
1.1       root      245: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.