Annotation of hatari/src/gui-sdl/dlgDisc.c, revision 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.