Annotation of hatari/src/gui-sdl/dlgDisk.c, revision 1.1.1.4

1.1       root        1: /*
                      2:   Hatari - dlgDisk.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: */
1.1.1.4 ! root        7: const char DlgDisk_rcsid[] = "Hatari $Id: dlgDisk.c,v 1.8 2008-11-18 19:53:29 eerot Exp $";
1.1       root        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 "floppy.h"
                     16: 
                     17: 
                     18: #define DISKDLG_EJECTA      4
                     19: #define DISKDLG_BROWSEA     5
                     20: #define DISKDLG_DISKA       6
                     21: #define DISKDLG_EJECTB      8
                     22: #define DISKDLG_BROWSEB     9
                     23: #define DISKDLG_DISKB       10
                     24: #define DISKDLG_IMGDIR      12
                     25: #define DISKDLG_BROWSEIMG   13
                     26: #define DISKDLG_AUTOB       14
                     27: #define DISKDLG_CREATEIMG   15
                     28: #define DISKDLG_PROTOFF     17
                     29: #define DISKDLG_PROTON      18
                     30: #define DISKDLG_PROTAUTO    19
                     31: #define DISKDLG_EJECTHDIMG  23
                     32: #define DISKDLG_BROWSEHDIMG 24
                     33: #define DISKDLG_DISKHDIMG   25
                     34: #define DISKDLG_UNMOUNTGDOS 27
                     35: #define DISKDLG_BROWSEGDOS  28
                     36: #define DISKDLG_DISKGDOS    29
                     37: #define DISKDLG_BOOTHD      30
                     38: #define DISKDLG_EXIT        31
                     39: 
                     40: 
                     41: /* The disks dialog: */
                     42: static SGOBJ diskdlg[] =
                     43: {
                     44:        { SGBOX, 0, 0, 0,0, 64,25, NULL },
                     45: 
                     46:        { SGBOX, 0, 0, 1,1, 62,12, NULL },
                     47:        { SGTEXT, 0, 0, 25,1, 12,1, "Floppy disks" },
                     48:        { SGTEXT, 0, 0, 2,2, 8,1, "Drive A:" },
                     49:        { SGBUTTON, 0, 0, 46,2, 7,1, "Eject" },
                     50:        { SGBUTTON, 0, 0, 54,2, 8,1, "Browse" },
                     51:        { SGTEXT, 0, 0, 3,3, 58,1, NULL },
                     52:        { SGTEXT, 0, 0, 2,4, 8,1, "Drive B:" },
                     53:        { SGBUTTON, 0, 0, 46,4, 7,1, "Eject" },
                     54:        { SGBUTTON, 0, 0, 54,4, 8,1, "Browse" },
                     55:        { SGTEXT, 0, 0, 3,5, 58,1, NULL },
                     56:        { SGTEXT, 0, 0, 2,7, 32,1, "Default floppy images directory:" },
                     57:        { SGTEXT, 0, 0, 3,8, 58,1, NULL },
                     58:        { SGBUTTON, 0, 0, 54,7, 8,1, "Browse" },
                     59:        { SGCHECKBOX, 0, 0, 2,10, 16,1, "Auto insert B" },
                     60:        { SGBUTTON, 0, 0, 42,10, 20,1, "Create blank image" },
                     61:        { SGTEXT, 0, 0, 2,12, 17,1, "Write protection:" },
                     62:        { SGRADIOBUT, 0, 0, 21,12, 5,1, "Off" },
                     63:        { SGRADIOBUT, 0, 0, 28,12, 5,1, "On" },
                     64:        { SGRADIOBUT, 0, 0, 34,12, 6,1, "Auto" },
                     65: 
                     66:        { SGBOX, 0, 0, 1,14, 62,8, NULL },
                     67:        { SGTEXT, 0, 0, 27,14, 10,1, "Hard disks" },
                     68:        { SGTEXT, 0, 0, 2,15, 9,1, "HD image:" },
                     69:        { SGBUTTON, 0, 0, 46,15, 7,1, "Eject" },
                     70:        { SGBUTTON, 0, 0, 54,15, 8,1, "Browse" },
                     71:        { SGTEXT, 0, 0, 3,16, 58,1, NULL },
                     72:        { SGTEXT, 0, 0, 2,17, 13,1, "GEMDOS drive:" },
                     73:        { SGBUTTON, 0, 0, 46,17, 7,1, "Eject" },
                     74:        { SGBUTTON, 0, 0, 54,17, 8,1, "Browse" },
                     75:        { SGTEXT, 0, 0, 3,18, 58,1, NULL },
                     76:        { SGCHECKBOX, 0, 0, 2,20, 14,1, "Boot from HD" },
                     77: 
                     78:        { SGBUTTON, SG_DEFAULT, 0, 22,23, 20,1, "Back to main menu" },
                     79:        { -1, 0, 0, 0,0, 0,0, NULL }
                     80: };
                     81: 
                     82: 
                     83: /**
                     84:  * Let user browse given disk, insert disk if one selected.
                     85:  * return FALSE if no disk selected, otherwise return TRUE.
                     86:  */
1.1.1.3   root       87: static bool DlgDisk_BrowseDisk(char *dlgname, int drive, int diskid)
1.1       root       88: {
                     89:        char *selname, *zip_path;
                     90:        const char *tmpname;
                     91: 
1.1.1.3   root       92:        assert(drive >= 0 && drive < MAX_FLOPPYDRIVES);
                     93:        if (ConfigureParams.DiskImage.szDiskFileName[drive][0])
                     94:                tmpname = ConfigureParams.DiskImage.szDiskFileName[drive];
1.1       root       95:        else
1.1.1.3   root       96:                tmpname = ConfigureParams.DiskImage.szDiskImageDirectory;
1.1       root       97: 
                     98:        selname = SDLGui_FileSelect(tmpname, &zip_path, FALSE);
                     99:        if (selname)
                    100:        {
1.1.1.3   root      101:                if (File_Exists(selname))
1.1       root      102:                {
1.1.1.3   root      103:                        const char *realname;
                    104:                        realname = Floppy_SetDiskFileName(drive, selname, zip_path);
1.1       root      105:                        /* TODO: error dialog when this fails */
                    106:                        if (realname)
                    107:                        {
                    108:                                File_ShrinkName(dlgname, realname, diskdlg[diskid].w);
                    109:                        }
                    110:                }
                    111:                else
                    112:                {
1.1.1.3   root      113:                        Floppy_SetDiskFileNameNone(drive);
                    114:                        dlgname[0] = '\0';
1.1       root      115:                }
1.1.1.4 ! root      116:                if (zip_path)
        !           117:                        free(zip_path);
1.1       root      118:                free(selname);
                    119:                return TRUE;
                    120:        }
                    121:        return FALSE;
                    122: }
                    123: 
                    124: 
                    125: /**
                    126:  * Let user browse given directory, set directory if one selected.
                    127:  * return FALSE if none selected, otherwise return TRUE.
                    128:  */
1.1.1.3   root      129: static bool DlgDisk_BrowseDir(char *dlgname, char *confname, int maxlen)
1.1       root      130: {
                    131:        char *str, *selname;
                    132: 
                    133:        selname = SDLGui_FileSelect(confname, NULL, FALSE);
                    134:        if (selname)
                    135:        {
                    136:                strcpy(confname, selname);
                    137:                free(selname);
                    138: 
1.1.1.2   root      139:                str = strrchr(confname, PATHSEP);
1.1       root      140:                if (str != NULL)
                    141:                        str[1] = 0;
                    142:                File_CleanFileName(confname);
                    143:                File_ShrinkName(dlgname, confname, maxlen);
                    144:                return TRUE;
                    145:        }
                    146:        return FALSE;
                    147: }
                    148: 
                    149: /*-----------------------------------------------------------------------*/
                    150: /*
                    151:   Show and process the disk image dialog.
                    152: */
                    153: void Dialog_DiskDlg(void)
                    154: {
                    155:        int but, i;
1.1.1.3   root      156:        char dlgname[MAX_FLOPPYDRIVES][64], dlgdiskdir[64];
1.1       root      157:        char dlgnamegdos[64], dlgnamehdimg[64];
                    158: 
                    159:        SDLGui_CenterDlg(diskdlg);
                    160: 
                    161:        /* Set up dialog to actual values: */
                    162: 
                    163:        /* Disk name A: */
                    164:        if (EmulationDrives[0].bDiskInserted)
1.1.1.3   root      165:                File_ShrinkName(dlgname[0], ConfigureParams.DiskImage.szDiskFileName[0],
1.1       root      166:                                diskdlg[DISKDLG_DISKA].w);
                    167:        else
1.1.1.3   root      168:                dlgname[0][0] = '\0';
                    169:        diskdlg[DISKDLG_DISKA].txt = dlgname[0];
1.1       root      170: 
                    171:        /* Disk name B: */
                    172:        if (EmulationDrives[1].bDiskInserted)
1.1.1.3   root      173:                File_ShrinkName(dlgname[1], ConfigureParams.DiskImage.szDiskFileName[1],
1.1       root      174:                                diskdlg[DISKDLG_DISKB].w);
                    175:        else
1.1.1.3   root      176:                dlgname[1][0] = '\0';
                    177:        diskdlg[DISKDLG_DISKB].txt = dlgname[1];
1.1       root      178: 
                    179:        /* Default image directory: */
1.1.1.3   root      180:        File_ShrinkName(dlgdiskdir, ConfigureParams.DiskImage.szDiskImageDirectory,
1.1       root      181:                        diskdlg[DISKDLG_IMGDIR].w);
                    182:        diskdlg[DISKDLG_IMGDIR].txt = dlgdiskdir;
                    183: 
                    184:        /* Auto insert disk B: */
1.1.1.3   root      185:        if (ConfigureParams.DiskImage.bAutoInsertDiskB)
1.1       root      186:                diskdlg[DISKDLG_AUTOB].state |= SG_SELECTED;
                    187:        else
                    188:                diskdlg[DISKDLG_AUTOB].state &= ~SG_SELECTED;
                    189: 
                    190:        /* Write protection */
                    191:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    192:        {
                    193:                diskdlg[i].state &= ~SG_SELECTED;
                    194:        }
1.1.1.3   root      195:        diskdlg[DISKDLG_PROTOFF+ConfigureParams.DiskImage.nWriteProtection].state |= SG_SELECTED;
1.1       root      196: 
                    197:        /* Boot from harddisk? */
1.1.1.3   root      198:        if (ConfigureParams.HardDisk.bBootFromHardDisk)
1.1       root      199:                diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED;
                    200:        else
                    201:                diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED;
                    202: 
                    203:        /* GEMDOS hard disk directory: */
1.1.1.3   root      204:        if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
                    205:                File_ShrinkName(dlgnamegdos, ConfigureParams.HardDisk.szHardDiskDirectories[0],
1.1       root      206:                                diskdlg[DISKDLG_DISKGDOS].w);
                    207:        else
1.1.1.3   root      208:                dlgnamegdos[0] = '\0';
1.1       root      209:        diskdlg[DISKDLG_DISKGDOS].txt = dlgnamegdos;
                    210: 
                    211:        /* Hard disk image: */
1.1.1.3   root      212:        if (ConfigureParams.HardDisk.bUseHardDiskImage)
                    213:                File_ShrinkName(dlgnamehdimg, ConfigureParams.HardDisk.szHardDiskImage,
1.1       root      214:                                diskdlg[DISKDLG_DISKHDIMG].w);
                    215:        else
1.1.1.3   root      216:                dlgnamehdimg[0] = '\0';
1.1       root      217:        diskdlg[DISKDLG_DISKHDIMG].txt = dlgnamehdimg;
                    218: 
                    219:        /* Draw and process the dialog */
                    220:        do
                    221:        {
                    222:                but = SDLGui_DoDialog(diskdlg, NULL);
                    223:                switch (but)
                    224:                {
                    225:                 case DISKDLG_EJECTA:                         /* Eject disk in drive A: */
1.1.1.3   root      226:                        Floppy_SetDiskFileNameNone(0);
                    227:                        dlgname[0][0] = '\0';
1.1       root      228:                        break;
                    229:                 case DISKDLG_BROWSEA:                        /* Choose a new disk A: */
1.1.1.3   root      230:                        DlgDisk_BrowseDisk(dlgname[0], 0, DISKDLG_DISKA);
1.1       root      231:                        break;
                    232:                 case DISKDLG_EJECTB:                         /* Eject disk in drive B: */
1.1.1.3   root      233:                        Floppy_SetDiskFileNameNone(1);
                    234:                        dlgname[1][0] = '\0';
1.1       root      235:                        break;
                    236:                case DISKDLG_BROWSEB:                         /* Choose a new disk B: */
1.1.1.3   root      237:                        DlgDisk_BrowseDisk(dlgname[1], 1, DISKDLG_DISKB);
1.1       root      238:                        break;
                    239:                 case DISKDLG_BROWSEIMG:
                    240:                        DlgDisk_BrowseDir(dlgdiskdir,
1.1.1.3   root      241:                                         ConfigureParams.DiskImage.szDiskImageDirectory,
1.1       root      242:                                         diskdlg[DISKDLG_IMGDIR].w);
                    243:                        break;
                    244:                 case DISKDLG_CREATEIMG:
                    245:                        DlgNewDisk_Main();
                    246:                        break;
                    247:                 case DISKDLG_UNMOUNTGDOS:
1.1.1.3   root      248:                        ConfigureParams.HardDisk.bUseHardDiskDirectories = FALSE;
                    249:                        dlgnamegdos[0] = '\0';
1.1       root      250:                        break;
                    251:                 case DISKDLG_BROWSEGDOS:
                    252:                        if (DlgDisk_BrowseDir(dlgnamegdos,
1.1.1.3   root      253:                                             ConfigureParams.HardDisk.szHardDiskDirectories[0],
1.1       root      254:                                             diskdlg[DISKDLG_DISKGDOS].w))
1.1.1.3   root      255:                                ConfigureParams.HardDisk.bUseHardDiskDirectories = TRUE;
1.1       root      256:                        break;
                    257:                 case DISKDLG_EJECTHDIMG:
1.1.1.3   root      258:                        ConfigureParams.HardDisk.bUseHardDiskImage = FALSE;
                    259:                        dlgnamehdimg[0] = '\0';
1.1       root      260:                        break;
                    261:                 case DISKDLG_BROWSEHDIMG:
                    262:                        if (SDLGui_FileConfSelect(dlgnamehdimg,
1.1.1.3   root      263:                                                  ConfigureParams.HardDisk.szHardDiskImage,
1.1       root      264:                                                  diskdlg[DISKDLG_DISKHDIMG].w, FALSE))
1.1.1.3   root      265:                                ConfigureParams.HardDisk.bUseHardDiskImage = TRUE;
1.1       root      266:                        break;
                    267:                }
                    268:        }
                    269:        while (but != DISKDLG_EXIT && but != SDLGUI_QUIT
                    270:                && but != SDLGUI_ERROR && !bQuitProgram);
                    271: 
                    272:        /* Read values from dialog: */
                    273: 
                    274:        for (i = DISKDLG_PROTOFF; i <= DISKDLG_PROTAUTO; i++)
                    275:        {
                    276:                if (diskdlg[i].state & SG_SELECTED)
                    277:                {
1.1.1.3   root      278:                        ConfigureParams.DiskImage.nWriteProtection = i-DISKDLG_PROTOFF;
1.1       root      279:                        break;
                    280:                }
                    281:        }
                    282: 
1.1.1.3   root      283:        ConfigureParams.DiskImage.bAutoInsertDiskB = (diskdlg[DISKDLG_AUTOB].state & SG_SELECTED);
                    284:        ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED);
1.1       root      285: }

unix.superglobalmegacorp.com

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