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

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.7 ! root       17: #define DISKDLG_ACSIPREVID         4
        !            18: #define DISKDLG_ACSIID             6
        !            19: #define DISKDLG_ACSINEXTID         7
        !            20: #define DISKDLG_ACSIEJECT          8
        !            21: #define DISKDLG_ACSIBROWSE         9
        !            22: #define DISKDLG_ACSINAME          10
        !            23: #define DISKDLG_SCSIPREVID        13
        !            24: #define DISKDLG_SCSIID            15
        !            25: #define DISKDLG_SCSINEXTID        16
        !            26: #define DISKDLG_SCSIEJECT         17
        !            27: #define DISKDLG_SCSIBROWSE        18
        !            28: #define DISKDLG_SCSINAME          19
        !            29: #define DISKDLG_IDEPREVID         22
        !            30: #define DISKDLG_IDEID             24
        !            31: #define DISKDLG_IDENEXTID         25
        !            32: #define DISKDLG_IDESWAPOFF        27
        !            33: #define DISKDLG_IDESWAPON         28
        !            34: #define DISKDLG_IDESWAPAUTO       29
        !            35: #define DISKDLG_IDEEJECT          30
        !            36: #define DISKDLG_IDEBROWSE         31
        !            37: #define DISKDLG_IDENAME           32
        !            38: #define DISKDLG_GEMDOSEJECT       35
        !            39: #define DISKDLG_GEMDOSBROWSE      36
        !            40: #define DISKDLG_GEMDOSNAME        37
        !            41: #define DISKDLG_GEMDOSCONV        38
        !            42: #define DISKDLG_DRIVESKIP         39
        !            43: #define DISKDLG_PROTOFF           41
        !            44: #define DISKDLG_PROTON            42
        !            45: #define DISKDLG_PROTAUTO          43
        !            46: #define DISKDLG_BOOTHD            44
        !            47: #define DISKDLG_EXIT              45
        !            48: 
        !            49: static char acsi_id_txt[2];
        !            50: static char scsi_id_txt[2];
        !            51: static char ide_id_txt[2];
        !            52: static char dlgname_gdos[64], dlgname_acsi[64];
        !            53: static char dlgname_scsi[64], dlgname_ide[64];
1.1       root       54: 
                     55: /* The disks dialog: */
                     56: static SGOBJ diskdlg[] =
                     57: {
1.1.1.7 ! root       58:        { SGBOX, 0, 0, 0,0, 64,25, NULL },
1.1       root       59:        { SGTEXT, 0, 0, 27,1, 10,1, "Hard disks" },
                     60: 
1.1.1.7 ! root       61:        { SGBOX, 0, 0, 1,3, 62,2, NULL },
        !            62:        { SGBOX, 0, 0, 1,3, 62,1, NULL },
        !            63:        { SGBUTTON, 0, 0,  1,3, 3,1, "\x04" },
        !            64:        { SGTEXT, 0, 0, 5,3, 7,1, "ACSI HD" },
        !            65:        { SGTEXT, 0, 0, 13,3, 3,1, acsi_id_txt },
        !            66:        { SGBUTTON, 0, 0, 15,3, 3,1, "\x03" },
        !            67:        { SGBUTTON, 0, 0, 47,3, 7,1, "Ejec_t" },
        !            68:        { SGBUTTON, 0, 0, 55,3, 8,1, "Brow_se" },
        !            69:        { SGTEXT, 0, 0, 2,4, 60,1, dlgname_acsi },
        !            70: 
        !            71:        { SGBOX, 0, 0, 1,6, 62,2, NULL },
        !            72:        { SGBOX, 0, 0, 1,6, 62,1, NULL },
        !            73:        { SGBUTTON, 0, 0,  1,6, 3,1, "\x04" },
        !            74:        { SGTEXT, 0, 0, 5,6, 9,1, "SCSI HD" },
        !            75:        { SGTEXT, 0, 0, 13,6, 1,1, scsi_id_txt },
        !            76:        { SGBUTTON, 0, 0, 15,6, 3,1, "\x03" },
        !            77:        { SGBUTTON, 0, 0, 47,6, 7,1, "Eje_ct" },
        !            78:        { SGBUTTON, 0, 0, 55,6, 8,1, "Bro_wse" },
        !            79:        { SGTEXT, 0, 0, 2,7, 60,1, dlgname_scsi },
        !            80: 
        !            81:        { SGBOX, 0, 0, 1,9, 62,2, NULL },
        !            82:        { SGBOX, 0, 0, 1,9, 62,1, NULL },
        !            83:        { SGBUTTON, 0, 0,  1,9, 3,1, "\x04" },
        !            84:        { SGTEXT, 0, 0, 5,9, 19,1, "IDE HD" },
        !            85:        { SGTEXT, 0, 0, 12,9, 1,1, ide_id_txt },
        !            86:        { SGBUTTON, 0, 0, 15,9, 3,1, "\x03" },
        !            87:        { SGTEXT, 0, 0, 19,9, 9,1, "Byteswap:" },
        !            88:        { SGRADIOBUT, 0, 0, 29,9, 5,1, "Off" },
        !            89:        { SGRADIOBUT, 0, 0, 35,9, 4,1, "On" },
        !            90:        { SGRADIOBUT, 0, 0, 40,9, 6,1, "Auto" },
        !            91:        { SGBUTTON, 0, 0, 47,9, 7,1, "E_ject" },
        !            92:        { SGBUTTON, 0, 0, 55,9, 8,1, "Br_owse" },
        !            93:        { SGTEXT, 0, 0, 2,10, 60,1, dlgname_ide },
        !            94: 
        !            95:        { SGBOX, 0, 0, 1,12, 62,8, NULL },
        !            96:        { SGTEXT, 0, 0, 2,12, 13,1, "GEMDOS drive:" },
        !            97:        { SGBUTTON, 0, 0, 47,12, 7,1, "_Eject" },
        !            98:        { SGBUTTON, 0, 0, 55,12, 8,1, "B_rowse" },
        !            99:        { SGTEXT, 0, 0, 3,13, 58,1, dlgname_gdos },
        !           100: 
        !           101:        { SGCHECKBOX, 0, 0, 8,15, 43,1, "Atari <-> _host 8-bit file name conversion" },
        !           102:        { SGCHECKBOX, 0, 0, 8,16, 46,1, "Add GEMDOS HD after ACSI/SCSI/IDE _partitions" },
        !           103: 
        !           104:        { SGTEXT, 0, 0, 8,18, 31,1, "Write protection:" },
        !           105:        { SGRADIOBUT, 0, 0, 26,18, 5,1, "O_ff" },
        !           106:        { SGRADIOBUT, 0, 0, 32,18, 4,1, "O_n" },
        !           107:        { SGRADIOBUT, 0, 0, 37,18, 6,1, "_Auto" },
1.1.1.2   root      108: 
1.1.1.7 ! root      109:        { SGCHECKBOX, 0, 0, 2,21, 21,1, "_Boot from hard disk" },
1.1.1.5   root      110: 
1.1.1.7 ! root      111:        { SGBUTTON, SG_DEFAULT, 0, 22,23, 20,1, "Back to main menu" },
1.1.1.6   root      112:        { SGSTOP, 0, 0, 0,0, 0,0, NULL }
1.1       root      113: };
                    114: 
                    115: 
                    116: /**
                    117:  * Let user browse given directory, set directory if one selected.
                    118:  * return false if none selected, otherwise return true.
                    119:  */
                    120: static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
                    121: {
                    122:        char *str, *selname;
                    123: 
1.1.1.5   root      124:        selname = SDLGui_FileSelect("GEMDOS drive directory:", confname, NULL, false);
1.1       root      125:        if (selname)
                    126:        {
                    127:                strcpy(confname, selname);
                    128:                free(selname);
                    129: 
                    130:                str = strrchr(confname, PATHSEP);
                    131:                if (str != NULL)
                    132:                        str[1] = 0;
                    133:                File_CleanFileName(confname);
                    134:                File_ShrinkName(dlgname, confname, maxlen);
                    135:                return true;
                    136:        }
                    137:        return false;
                    138: }
                    139: 
1.1.1.7 ! root      140: static void DlgHardDisk_PrepAcsi(int id)
        !           141: {
        !           142:        if (ConfigureParams.Acsi[id].bUseDevice)
        !           143:        {
        !           144:                File_ShrinkName(dlgname_acsi, ConfigureParams.Acsi[id].sDeviceFile,
        !           145:                                diskdlg[DISKDLG_ACSINAME].w);
        !           146:        }
        !           147:        else
        !           148:        {
        !           149:                dlgname_acsi[0] = '\0';
        !           150:        }
        !           151: 
        !           152:        acsi_id_txt[0] = '0' + id;
        !           153:        acsi_id_txt[1] = 0;
        !           154: }
        !           155: 
        !           156: static void DlgHardDisk_PrepScsi(int id)
        !           157: {
        !           158:        if (ConfigureParams.Scsi[id].bUseDevice)
        !           159:        {
        !           160:                File_ShrinkName(dlgname_scsi, ConfigureParams.Scsi[id].sDeviceFile,
        !           161:                                diskdlg[DISKDLG_SCSINAME].w);
        !           162:        }
        !           163:        else
        !           164:        {
        !           165:                dlgname_scsi[0] = '\0';
        !           166:        }
        !           167: 
        !           168:        scsi_id_txt[0] = '0' + id;
        !           169:        scsi_id_txt[1] = 0;
        !           170: }
        !           171: 
        !           172: static void DlgHardDisk_PrepIde(int id)
        !           173: {
        !           174:        int idx;
        !           175: 
        !           176:        if (ConfigureParams.Ide[id].bUseDevice)
        !           177:        {
        !           178:                File_ShrinkName(dlgname_ide, ConfigureParams.Ide[id].sDeviceFile,
        !           179:                                diskdlg[DISKDLG_IDENAME].w);
        !           180:        }
        !           181:        else
        !           182:        {
        !           183:                dlgname_ide[0] = '\0';
        !           184:        }
        !           185: 
        !           186:        for (idx = DISKDLG_IDESWAPOFF; idx <= DISKDLG_IDESWAPAUTO; idx++)
        !           187:                diskdlg[idx].state &= ~SG_SELECTED;
        !           188:        diskdlg[DISKDLG_IDESWAPOFF + ConfigureParams.Ide[id].nByteSwap].state |= SG_SELECTED;
        !           189: 
        !           190:        ide_id_txt[0] = '0' + id;
        !           191:        ide_id_txt[1] = '\0';
        !           192: }
        !           193: 
        !           194: static void DlgHardDisk_ReadBackIdeByteSwapSetting(int id)
        !           195: {
        !           196:        int idx;
        !           197: 
        !           198:        for (idx = DISKDLG_IDESWAPOFF; idx <= DISKDLG_IDESWAPAUTO; idx++)
        !           199:        {
        !           200:                if (diskdlg[idx].state & SG_SELECTED)
        !           201:                {
        !           202:                        ConfigureParams.Ide[id].nByteSwap = idx - DISKDLG_IDESWAPOFF;
        !           203:                        break;
        !           204:                }
        !           205:        }
        !           206: }
1.1       root      207: 
                    208: /**
                    209:  * Show and process the hard disk dialog.
                    210:  */
                    211: void DlgHardDisk_Main(void)
                    212: {
1.1.1.2   root      213:        int but, i;
1.1.1.7 ! root      214:        static int a_id, s_id, i_id;
1.1       root      215: 
                    216:        SDLGui_CenterDlg(diskdlg);
                    217: 
                    218:        /* Set up dialog to actual values: */
                    219: 
                    220:        /* Boot from harddisk? */
                    221:        if (ConfigureParams.HardDisk.bBootFromHardDisk)
                    222:                diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED;
                    223:        else
                    224:                diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED;
                    225: 
1.1.1.7 ! root      226:        /* Hard disk images: */
        !           227:        DlgHardDisk_PrepAcsi(a_id);
        !           228:        DlgHardDisk_PrepScsi(s_id);
        !           229:        DlgHardDisk_PrepIde(i_id);
1.1       root      230: 
                    231:        /* GEMDOS hard disk directory: */
                    232:        if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
                    233:                File_ShrinkName(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0],
                    234:                                diskdlg[DISKDLG_GEMDOSNAME].w);
                    235:        else
                    236:                dlgname_gdos[0] = '\0';
                    237:        diskdlg[DISKDLG_GEMDOSNAME].txt = dlgname_gdos;
1.1.1.7 ! root      238:        if (ConfigureParams.HardDisk.bFilenameConversion)
        !           239:                diskdlg[DISKDLG_GEMDOSCONV].state |= SG_SELECTED;
        !           240:        else
        !           241:                diskdlg[DISKDLG_GEMDOSCONV].state &= ~SG_SELECTED;
        !           242:        if (ConfigureParams.HardDisk.nGemdosDrive == DRIVE_SKIP)
        !           243:                diskdlg[DISKDLG_DRIVESKIP].state |= SG_SELECTED;
        !           244:        else
        !           245:                diskdlg[DISKDLG_DRIVESKIP].state &= ~SG_SELECTED;
1.1       root      246: 
1.1.1.2   root      247:        /* Write protection */
                    248:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    249:        {
                    250:                diskdlg[i].state &= ~SG_SELECTED;
                    251:        }
                    252:        diskdlg[DISKDLG_PROTOFF+ConfigureParams.HardDisk.nWriteProtection].state |= SG_SELECTED;
                    253: 
1.1       root      254:        /* Draw and process the dialog */
                    255:        do
                    256:        {
1.1.1.5   root      257:                but = SDLGui_DoDialog(diskdlg, NULL, false);
1.1       root      258:                switch (but)
                    259:                {
1.1.1.7 ! root      260:                 case DISKDLG_ACSIPREVID:
        !           261:                        if (a_id > 0)
        !           262:                        {
        !           263:                                --a_id;
        !           264:                                DlgHardDisk_PrepAcsi(a_id);
        !           265:                        }
        !           266:                        break;
        !           267:                 case DISKDLG_ACSINEXTID:
        !           268:                        if (a_id < 7)
        !           269:                        {
        !           270:                                ++a_id;
        !           271:                                DlgHardDisk_PrepAcsi(a_id);
        !           272:                        }
        !           273:                        break;
1.1       root      274:                 case DISKDLG_ACSIEJECT:
1.1.1.7 ! root      275:                        ConfigureParams.Acsi[a_id].bUseDevice = false;
1.1       root      276:                        dlgname_acsi[0] = '\0';
                    277:                        break;
                    278:                 case DISKDLG_ACSIBROWSE:
1.1.1.5   root      279:                        if (SDLGui_FileConfSelect("ACSI HD image:", dlgname_acsi,
1.1.1.7 ! root      280:                                                  ConfigureParams.Acsi[a_id].sDeviceFile,
1.1       root      281:                                                  diskdlg[DISKDLG_ACSINAME].w, false))
1.1.1.7 ! root      282:                                ConfigureParams.Acsi[a_id].bUseDevice = true;
        !           283:                        break;
        !           284: 
        !           285:                 case DISKDLG_SCSIPREVID:
        !           286:                        if (s_id > 0)
        !           287:                        {
        !           288:                                --s_id;
        !           289:                                DlgHardDisk_PrepScsi(s_id);
        !           290:                        }
        !           291:                        break;
        !           292:                 case DISKDLG_SCSINEXTID:
        !           293:                        if (s_id < 7)
        !           294:                        {
        !           295:                                ++s_id;
        !           296:                                DlgHardDisk_PrepScsi(s_id);
        !           297:                        }
        !           298:                        break;
        !           299:                 case DISKDLG_SCSIEJECT:
        !           300:                        ConfigureParams.Scsi[s_id].bUseDevice = false;
        !           301:                        dlgname_scsi[0] = '\0';
1.1       root      302:                        break;
1.1.1.7 ! root      303:                 case DISKDLG_SCSIBROWSE:
        !           304:                        if (SDLGui_FileConfSelect("SCSI HD image:", dlgname_scsi,
        !           305:                                                  ConfigureParams.Scsi[s_id].sDeviceFile,
        !           306:                                                  diskdlg[DISKDLG_SCSINAME].w, false))
        !           307:                                ConfigureParams.Scsi[s_id].bUseDevice = true;
        !           308:                        break;
        !           309: 
        !           310:                 case DISKDLG_IDEPREVID:
        !           311:                        DlgHardDisk_ReadBackIdeByteSwapSetting(i_id);
        !           312:                        if (i_id > 0)
        !           313:                        {
        !           314:                                --i_id;
        !           315:                                DlgHardDisk_PrepIde(i_id);
        !           316:                        }
1.1       root      317:                        break;
1.1.1.7 ! root      318:                 case DISKDLG_IDENEXTID:
        !           319:                        DlgHardDisk_ReadBackIdeByteSwapSetting(i_id);
        !           320:                        if (i_id < 1)
        !           321:                        {
        !           322:                                ++i_id;
        !           323:                                DlgHardDisk_PrepIde(i_id);
        !           324:                        }
        !           325:                        break;
        !           326:                 case DISKDLG_IDEEJECT:
        !           327:                        ConfigureParams.Ide[i_id].bUseDevice = false;
        !           328:                        dlgname_ide[0] = '\0';
        !           329:                        break;
        !           330:                 case DISKDLG_IDEBROWSE:
        !           331:                        if (SDLGui_FileConfSelect("IDE HD 0 image:", dlgname_ide,
        !           332:                                                  ConfigureParams.Ide[i_id].sDeviceFile,
        !           333:                                                  diskdlg[DISKDLG_IDENAME].w, false))
        !           334:                                ConfigureParams.Ide[i_id].bUseDevice = true;
        !           335:                        break;
        !           336: 
1.1       root      337:                 case DISKDLG_GEMDOSEJECT:
                    338:                        ConfigureParams.HardDisk.bUseHardDiskDirectories = false;
                    339:                        dlgname_gdos[0] = '\0';
                    340:                        break;
                    341:                 case DISKDLG_GEMDOSBROWSE:
                    342:                        if (DlgDisk_BrowseDir(dlgname_gdos,
                    343:                                             ConfigureParams.HardDisk.szHardDiskDirectories[0],
                    344:                                             diskdlg[DISKDLG_GEMDOSNAME].w))
                    345:                                ConfigureParams.HardDisk.bUseHardDiskDirectories = true;
                    346:                        break;
                    347:                }
                    348:        }
                    349:        while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
                    350:                && but != SDLGUI_ERROR && !bQuitProgram);
                    351: 
                    352:        /* Read values from dialog: */
1.1.1.7 ! root      353:        DlgHardDisk_ReadBackIdeByteSwapSetting(i_id);
1.1.1.2   root      354:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    355:        {
                    356:                if (diskdlg[i].state & SG_SELECTED)
                    357:                {
                    358:                        ConfigureParams.HardDisk.nWriteProtection = i-DISKDLG_PROTOFF;
                    359:                        break;
                    360:                }
                    361:        }
1.1       root      362:        ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED);
1.1.1.5   root      363: 
                    364:        if (diskdlg[DISKDLG_DRIVESKIP].state & SG_SELECTED)
                    365:                ConfigureParams.HardDisk.nGemdosDrive = DRIVE_SKIP;
                    366:        else if (ConfigureParams.HardDisk.nGemdosDrive == DRIVE_SKIP)
                    367:                ConfigureParams.HardDisk.nGemdosDrive = DRIVE_C;
                    368: 
                    369:        if (diskdlg[DISKDLG_GEMDOSCONV].state & SG_SELECTED)
                    370:                ConfigureParams.HardDisk.bFilenameConversion = true;
                    371:        else
                    372:                ConfigureParams.HardDisk.bFilenameConversion = false;
1.1       root      373: }

unix.superglobalmegacorp.com

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