Annotation of hatari/src/gui-sdl/dlgDisc.c, revision 1.1.1.1

1.1       root        1: /*
                      2:   Hatari - dlgDisc.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: char DlgDisc_rcsid[] = "Hatari $Id: dlgDisc.c,v 1.7 2004/07/05 15:38:36 thothy Exp $";
                      8: 
                      9: #include "main.h"
                     10: #include "configuration.h"
                     11: #include "dialog.h"
                     12: #include "sdlgui.h"
                     13: #include "memAlloc.h"
                     14: #include "file.h"
                     15: #include "floppy.h"
                     16: #include "gemdos.h"
                     17: #include "hdc.h"
                     18: 
                     19: 
                     20: #define DISCDLG_EJECTA      4
                     21: #define DISCDLG_BROWSEA     5
                     22: #define DISCDLG_DISCA       6
                     23: #define DISCDLG_EJECTB      8
                     24: #define DISCDLG_BROWSEB     9
                     25: #define DISCDLG_DISCB       10
                     26: #define DISCDLG_IMGDIR      12
                     27: #define DISCDLG_BROWSEIMG   13
                     28: #define DISCDLG_AUTOB       14
                     29: #define DISCDLG_CREATEIMG   15
                     30: #define DISCDLG_EJECTHDIMG  19
                     31: #define DISCDLG_BROWSEHDIMG 20
                     32: #define DISCDLG_DISCHDIMG   21
                     33: #define DISCDLG_UNMOUNTGDOS 23
                     34: #define DISCDLG_BROWSEGDOS  24
                     35: #define DISCDLG_DISCGDOS    25
                     36: #define DISCDLG_BOOTHD      26
                     37: #define DISCDLG_EXIT        27
                     38: 
                     39: 
                     40: /* The discs dialog: */
                     41: static SGOBJ discdlg[] =
                     42: {
                     43:   { SGBOX, 0, 0, 0,0, 64,25, NULL },
                     44:   { SGBOX, 0, 0, 1,1, 62,11, NULL },
                     45:   { SGTEXT, 0, 0, 25,1, 12,1, "Floppy discs" },
                     46:   { SGTEXT, 0, 0, 2,2, 8,1, "Drive A:" },
                     47:   { SGBUTTON, 0, 0, 46,2, 7,1, "Eject" },
                     48:   { SGBUTTON, 0, 0, 54,2, 8,1, "Browse" },
                     49:   { SGTEXT, 0, 0, 3,3, 58,1, NULL },
                     50:   { SGTEXT, 0, 0, 2,4, 8,1, "Drive B:" },
                     51:   { SGBUTTON, 0, 0, 46,4, 7,1, "Eject" },
                     52:   { SGBUTTON, 0, 0, 54,4, 8,1, "Browse" },
                     53:   { SGTEXT, 0, 0, 3,5, 58,1, NULL },
                     54:   { SGTEXT, 0, 0, 2,7, 30,1, "Default disk images directory:" },
                     55:   { SGTEXT, 0, 0, 3,8, 58,1, NULL },
                     56:   { SGBUTTON, 0, 0, 54,7, 8,1, "Browse" },
                     57:   { SGCHECKBOX, 0, 0, 2,10, 16,1, "Auto insert B" },
                     58:   { SGBUTTON, 0, 0, 42,10, 20,1, "Create blank image" },
                     59:   { SGBOX, 0, 0, 1,13, 62,9, NULL },
                     60:   { SGTEXT, 0, 0, 27,13, 10,1, "Hard discs" },
                     61:   { SGTEXT, 0, 0, 2,14, 9,1, "HD image:" },
                     62:   { SGBUTTON, 0, 0, 46,14, 7,1, "Eject" },
                     63:   { SGBUTTON, 0, 0, 54,14, 8,1, "Browse" },
                     64:   { SGTEXT, 0, 0, 3,15, 58,1, NULL },
                     65:   { SGTEXT, 0, 0, 2,17, 13,1, "GEMDOS drive:" },
                     66:   { SGBUTTON, 0, 0, 46,17, 7,1, "Eject" },
                     67:   { SGBUTTON, 0, 0, 54,17, 8,1, "Browse" },
                     68:   { SGTEXT, 0, 0, 3,18, 58,1, NULL },
                     69:   { SGCHECKBOX, 0, 0, 2,20, 14,1, "Boot from HD" },
                     70:   { SGBUTTON, 0, 0, 22,23, 20,1, "Back to main menu" },
                     71:   { -1, 0, 0, 0,0, 0,0, NULL }
                     72: };
                     73: 
                     74: 
                     75: /*-----------------------------------------------------------------------*/
                     76: /*
                     77:   Show and process the disc image dialog.
                     78: */
                     79: void Dialog_DiscDlg(void)
                     80: {
                     81:   int but;
                     82:   char dlgnamea[64], dlgnameb[64], dlgdiscdir[64];
                     83:   char dlgnamegdos[64], dlgnamehdimg[64];
                     84:   char *tmpname;
                     85:   char *zip_path;
                     86: 
                     87:   /* Allocate memory for tmpname and zip_path: */
                     88:   tmpname = Memory_Alloc(2 * FILENAME_MAX);
                     89:   zip_path = tmpname + FILENAME_MAX;
                     90:   zip_path[0] = 0;
                     91: 
                     92:   SDLGui_CenterDlg(discdlg);
                     93: 
                     94:   /* Set up dialog to actual values: */
                     95: 
                     96:   /* Disc name A: */
                     97:   if( EmulationDrives[0].bDiscInserted )
                     98:     File_ShrinkName(dlgnamea, EmulationDrives[0].szFileName, discdlg[DISCDLG_DISCA].w);
                     99:   else
                    100:     dlgnamea[0] = 0;
                    101:   discdlg[DISCDLG_DISCA].txt = dlgnamea;
                    102: 
                    103:   /* Disc name B: */
                    104:   if( EmulationDrives[1].bDiscInserted )
                    105:     File_ShrinkName(dlgnameb, EmulationDrives[1].szFileName, discdlg[DISCDLG_DISCB].w);
                    106:   else
                    107:     dlgnameb[0] = 0;
                    108:   discdlg[DISCDLG_DISCB].txt = dlgnameb;
                    109: 
                    110:   /* Default image directory: */
                    111:   File_ShrinkName(dlgdiscdir, DialogParams.DiscImage.szDiscImageDirectory, discdlg[DISCDLG_IMGDIR].w);
                    112:   discdlg[DISCDLG_IMGDIR].txt = dlgdiscdir;
                    113: 
                    114:   /* Auto insert disc B: */
                    115:   if( DialogParams.DiscImage.bAutoInsertDiscB )
                    116:     discdlg[DISCDLG_AUTOB].state |= SG_SELECTED;
                    117:    else
                    118:     discdlg[DISCDLG_AUTOB].state &= ~SG_SELECTED;
                    119: 
                    120:   /* Boot from harddisk? */
                    121:   if( DialogParams.HardDisc.bBootFromHardDisc )
                    122:     discdlg[DISCDLG_BOOTHD].state |= SG_SELECTED;
                    123:    else
                    124:     discdlg[DISCDLG_BOOTHD].state &= ~SG_SELECTED;
                    125: 
                    126:   /* GEMDOS Hard disc directory: */
                    127:   if( strcmp(DialogParams.HardDisc.szHardDiscDirectories[0], ConfigureParams.HardDisc.szHardDiscDirectories[0])!=0
                    128:       || GEMDOS_EMU_ON )
                    129:     File_ShrinkName(dlgnamegdos, DialogParams.HardDisc.szHardDiscDirectories[0], discdlg[DISCDLG_DISCGDOS].w);
                    130:   else
                    131:     dlgnamegdos[0] = 0;
                    132:   discdlg[DISCDLG_DISCGDOS].txt = dlgnamegdos;
                    133: 
                    134:   /* Hard disc image: */
                    135:   if( ACSI_EMU_ON )
                    136:     File_ShrinkName(dlgnamehdimg, DialogParams.HardDisc.szHardDiscImage, discdlg[DISCDLG_DISCHDIMG].w);
                    137:   else
                    138:     dlgnamehdimg[0] = 0;
                    139:   discdlg[DISCDLG_DISCHDIMG].txt = dlgnamehdimg;
                    140: 
                    141:   /* Draw and process the dialog */
                    142:   do
                    143:   {
                    144:     but = SDLGui_DoDialog(discdlg);
                    145:     switch(but)
                    146:     {
                    147:       case DISCDLG_EJECTA:                        /* Eject disc in drive A: */
                    148:         Floppy_EjectDiscFromDrive(0, FALSE);
                    149:         dlgnamea[0] = 0;
                    150:         break;
                    151:       case DISCDLG_BROWSEA:                       /* Choose a new disc A: */
                    152:         if( EmulationDrives[0].bDiscInserted )
                    153:           strcpy(tmpname, EmulationDrives[0].szFileName);
                    154:          else
                    155:           strcpy(tmpname, DialogParams.DiscImage.szDiscImageDirectory);
                    156:         if( SDLGui_FileSelect(tmpname, zip_path, FALSE) )
                    157:         {
                    158:           if( !File_DoesFileNameEndWithSlash(tmpname) && File_Exists(tmpname) )
                    159:           {
                    160:             Floppy_ZipInsertDiscIntoDrive(0, tmpname, zip_path); /* FIXME: This shouldn't be done here but in Dialog_CopyDialogParamsToConfiguration */
                    161:             File_ShrinkName(dlgnamea, tmpname, discdlg[DISCDLG_DISCA].w);
                    162:           }
                    163:           else
                    164:           {
                    165:             Floppy_EjectDiscFromDrive(0, FALSE); /* FIXME: This shouldn't be done here but in Dialog_CopyDialogParamsToConfiguration */
                    166:             dlgnamea[0] = 0;
                    167:           }
                    168:         }
                    169:         break;
                    170:       case DISCDLG_EJECTB:                        /* Eject disc in drive B: */
                    171:         Floppy_EjectDiscFromDrive(1, FALSE);
                    172:         dlgnameb[0] = 0;
                    173:         break;
                    174:       case DISCDLG_BROWSEB:                       /* Choose a new disc B: */
                    175:         if( EmulationDrives[1].bDiscInserted )
                    176:           strcpy(tmpname, EmulationDrives[1].szFileName);
                    177:          else
                    178:           strcpy(tmpname, DialogParams.DiscImage.szDiscImageDirectory);
                    179:         if( SDLGui_FileSelect(tmpname, zip_path, FALSE) )
                    180:         {
                    181:           if( !File_DoesFileNameEndWithSlash(tmpname) && File_Exists(tmpname) )
                    182:           {
                    183:             Floppy_ZipInsertDiscIntoDrive(1, tmpname, zip_path); /* FIXME: This shouldn't be done here but in Dialog_CopyDialogParamsToConfiguration */
                    184:             File_ShrinkName(dlgnameb, tmpname, discdlg[DISCDLG_DISCB].w);
                    185:           }
                    186:           else
                    187:           {
                    188:             Floppy_EjectDiscFromDrive(1, FALSE); /* FIXME: This shouldn't be done here but in Dialog_CopyDialogParamsToConfiguration */
                    189:             dlgnameb[0] = 0;
                    190:           }
                    191:         }
                    192:         break;
                    193:       case DISCDLG_BROWSEIMG:
                    194:         strcpy(tmpname, DialogParams.DiscImage.szDiscImageDirectory);
                    195:         if( SDLGui_FileSelect(tmpname, NULL, FALSE) )
                    196:         {
                    197:           char *ptr;
                    198:           ptr = strrchr(tmpname, '/');
                    199:           if( ptr!=NULL )  ptr[1]=0;
                    200:           strcpy(DialogParams.DiscImage.szDiscImageDirectory, tmpname);
                    201:           File_ShrinkName(dlgdiscdir, DialogParams.DiscImage.szDiscImageDirectory, discdlg[DISCDLG_IMGDIR].w);
                    202:         }
                    203:         break;
                    204:       case DISCDLG_CREATEIMG:
                    205:         DlgNewDisc_Main();
                    206:         break;
                    207:       case DISCDLG_UNMOUNTGDOS:
                    208:         GemDOS_UnInitDrives();   /* FIXME: This shouldn't be done here but it's the only quick solution I could think of */
                    209:         strcpy(DialogParams.HardDisc.szHardDiscDirectories[0], ConfigureParams.HardDisc.szHardDiscDirectories[0]);
                    210:         dlgnamegdos[0] = 0;
                    211:         break;
                    212:       case DISCDLG_BROWSEGDOS:
                    213:         strcpy(tmpname, DialogParams.HardDisc.szHardDiscDirectories[0]);
                    214:         if( SDLGui_FileSelect(tmpname, NULL, FALSE) )
                    215:         {
                    216:           char *ptr;
                    217:           ptr = strrchr(tmpname, '/');
                    218:           if( ptr!=NULL )  ptr[1]=0;        /* Remove file name from path */
                    219:           strcpy(DialogParams.HardDisc.szHardDiscDirectories[0], tmpname);
                    220:           File_ShrinkName(dlgnamegdos, DialogParams.HardDisc.szHardDiscDirectories[0], discdlg[DISCDLG_DISCGDOS].w);
                    221:         }
                    222:         break;
                    223:       case DISCDLG_EJECTHDIMG:
                    224:         DialogParams.HardDisc.szHardDiscImage[0] = 0;
                    225:         DialogParams.HardDisc.bUseHardDiscImage = FALSE;
                    226:         dlgnamehdimg[0] = 0;
                    227:         break;
                    228:       case DISCDLG_BROWSEHDIMG:
                    229:         strcpy(tmpname, DialogParams.HardDisc.szHardDiscImage);
                    230:         if( SDLGui_FileSelect(tmpname, NULL, FALSE) )
                    231:         {
                    232:           strcpy(DialogParams.HardDisc.szHardDiscImage, tmpname);
                    233:           if( !File_DoesFileNameEndWithSlash(tmpname) && File_Exists(tmpname) )
                    234:           {
                    235:             File_ShrinkName(dlgnamehdimg, tmpname, discdlg[DISCDLG_DISCHDIMG].w);
                    236:             DialogParams.HardDisc.bUseHardDiscImage = TRUE;
                    237:           }
                    238:           else
                    239:           {
                    240:             dlgnamehdimg[0] = 0;
                    241:           }
                    242:         }
                    243:         break;
                    244:     }
                    245:   }
                    246:   while(but!=DISCDLG_EXIT && !bQuitProgram);
                    247: 
                    248:   /* Read values from dialog */
                    249:   DialogParams.DiscImage.bAutoInsertDiscB = (discdlg[DISCDLG_AUTOB].state & SG_SELECTED);
                    250:   DialogParams.HardDisc.bBootFromHardDisc = (discdlg[DISCDLG_BOOTHD].state & SG_SELECTED);
                    251: 
                    252:   Memory_Free(tmpname);
                    253: }

unix.superglobalmegacorp.com

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