|
|
1.1 ! root 1: /* ! 2: Hatari - dlgNewDisk.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: const char DlgNewDisk_fileid[] = "Hatari dlgNewDisk.c : " __DATE__ " " __TIME__; ! 8: ! 9: #include "main.h" ! 10: #include "configuration.h" ! 11: #include "createBlankImage.h" ! 12: #include "dialog.h" ! 13: #include "sdlgui.h" ! 14: #include "file.h" ! 15: #include "log.h" ! 16: ! 17: #define DLGNEWDISK_DECTRACK 3 ! 18: #define DLGNEWDISK_TRACKSTR 4 ! 19: #define DLGNEWDISK_INCTRACK 5 ! 20: #define DLGNEWDISK_SECTORS9 7 ! 21: #define DLGNEWDISK_SECTORS10 8 ! 22: #define DLGNEWDISK_SECTORS11 9 ! 23: #define DLGNEWDISK_SECTORS18 10 ! 24: #define DLGNEWDISK_SECTORS36 11 ! 25: #define DLGNEWDISK_SIDES1 13 ! 26: #define DLGNEWDISK_SIDES2 14 ! 27: #define DLGNEWDISK_SAVE 15 ! 28: #define DLGNEWDISK_EXIT 16 ! 29: ! 30: static char szTracks[3]; ! 31: static int nTracks = 80; ! 32: ! 33: /* The new disk image dialog: */ ! 34: static SGOBJ newdiskdlg[] = ! 35: { ! 36: { SGBOX, 0, 0, 0,0, 29,14, NULL }, ! 37: { SGTEXT, 0, 0, 6,1, 16,1, "New floppy image" }, ! 38: { SGTEXT, 0, 0, 2,3, 7,1, "Tracks:" }, ! 39: { SGBUTTON, 0, 0, 12,3, 1,1, "\x04" }, /* Left-arrow button */ ! 40: { SGTEXT, 0, 0, 14,3, 2,1, szTracks }, ! 41: { SGBUTTON, 0, 0, 17,3, 1,1, "\x03" }, /* Right-arrow button */ ! 42: { SGTEXT, 0, 0, 2,5, 8,1, "Sectors:" }, ! 43: { SGRADIOBUT, 0, SG_SELECTED, 12,5, 4,1, " 9" }, ! 44: { SGRADIOBUT, 0, 0, 17,5, 4,1, "10" }, ! 45: { SGRADIOBUT, 0, 0, 22,5, 4,1, "11" }, ! 46: { SGRADIOBUT, 0, 0, 12,6, 9,1, "18 (HD)" }, ! 47: { SGRADIOBUT, 0, 0, 12,7, 9,1, "36 (ED)" }, ! 48: { SGTEXT, 0, 0, 2,9, 6,1, "Sides:" }, ! 49: { SGRADIOBUT, 0, 0, 12,9, 4,1, "1" }, ! 50: { SGRADIOBUT, 0, SG_SELECTED, 17,9, 4,1, "2" }, ! 51: { SGBUTTON, 0, 0, 4,12, 8,1, "Create" }, ! 52: { SGBUTTON, 0, 0, 18,12, 6,1, "Back" }, ! 53: { -1, 0, 0, 0,0, 0,0, NULL } ! 54: }; ! 55: ! 56: #define DEFAULT_DISK_NAME "new_disk.st" ! 57: ! 58: ! 59: /*-----------------------------------------------------------------------*/ ! 60: /** ! 61: * Handle creation of a the "new blank disk image". ! 62: * return true if disk created, false otherwise. ! 63: */ ! 64: static bool DlgNewDisk_CreateDisk(const char *path) ! 65: { ! 66: int nSectors, nSides; ! 67: ! 68: /* (potentially non-existing) filename? */ ! 69: if (File_DirExists(path)) ! 70: { ! 71: Log_AlertDlg(LOG_ERROR, "ERROR: '%s' isn't a file!", path); ! 72: return false; ! 73: } ! 74: ! 75: /* Get number of sectors */ ! 76: if (newdiskdlg[DLGNEWDISK_SECTORS36].state & SG_SELECTED) ! 77: nSectors = 36; ! 78: else if (newdiskdlg[DLGNEWDISK_SECTORS18].state & SG_SELECTED) ! 79: nSectors = 18; ! 80: else if (newdiskdlg[DLGNEWDISK_SECTORS11].state & SG_SELECTED) ! 81: nSectors = 11; ! 82: else if (newdiskdlg[DLGNEWDISK_SECTORS10].state & SG_SELECTED) ! 83: nSectors = 10; ! 84: else ! 85: nSectors = 9; ! 86: ! 87: /* Get number of sides */ ! 88: if (newdiskdlg[DLGNEWDISK_SIDES1].state & SG_SELECTED) ! 89: nSides = 1; ! 90: else ! 91: nSides = 2; ! 92: ! 93: return CreateBlankImage_CreateFile(path, nTracks, nSectors, nSides); ! 94: } ! 95: ! 96: ! 97: /*-----------------------------------------------------------------------*/ ! 98: /** ! 99: * Show and process the "new blank disk image" dialog. ! 100: * Return file name of last created diskimage or NULL if none created. ! 101: * Caller needs to free the name. ! 102: */ ! 103: char *DlgNewDisk_Main(void) ! 104: { ! 105: int but; ! 106: char *szNewDiskName, *tmpname, *retname = NULL; ! 107: sprintf(szTracks, "%i", nTracks); ! 108: ! 109: SDLGui_CenterDlg(newdiskdlg); ! 110: ! 111: /* Initialize disk image name: */ ! 112: szNewDiskName = File_MakePath(ConfigureParams.DiskImage.szDiskImageDirectory, "new_disk.st", NULL); ! 113: if (!szNewDiskName) ! 114: return NULL; ! 115: ! 116: /* Draw and process the dialog */ ! 117: do ! 118: { ! 119: but = SDLGui_DoDialog(newdiskdlg, NULL); ! 120: switch(but) ! 121: { ! 122: case DLGNEWDISK_DECTRACK: ! 123: if (nTracks > 40) ! 124: nTracks -= 1; ! 125: sprintf(szTracks, "%i", nTracks); ! 126: break; ! 127: case DLGNEWDISK_INCTRACK: ! 128: if (nTracks < 85) ! 129: nTracks += 1; ! 130: sprintf(szTracks, "%i", nTracks); ! 131: break; ! 132: case DLGNEWDISK_SAVE: ! 133: if (retname) ! 134: free(retname); ! 135: tmpname = SDLGui_FileSelect(szNewDiskName, NULL, true); ! 136: if (tmpname) ! 137: { ! 138: if (DlgNewDisk_CreateDisk(tmpname)) ! 139: retname = tmpname; ! 140: else ! 141: free(tmpname); ! 142: } ! 143: break; ! 144: } ! 145: } ! 146: while (but != DLGNEWDISK_EXIT && but != SDLGUI_QUIT ! 147: && but != SDLGUI_ERROR && !bQuitProgram); ! 148: ! 149: free(szNewDiskName); ! 150: return retname; ! 151: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.