mirror of
https://github.com/Wiimpathy/HatariWii.git
synced 2024-06-02 16:48:43 +02:00
154 lines
4.0 KiB
C
154 lines
4.0 KiB
C
/*
|
|
Hatari - dlgNewDisk.c
|
|
|
|
This file is distributed under the GNU General Public License, version 2
|
|
or at your option any later version. Read the file gpl.txt for details.
|
|
*/
|
|
const char DlgNewDisk_fileid[] = "Hatari dlgNewDisk.c : " __DATE__ " " __TIME__;
|
|
|
|
#include "main.h"
|
|
#include "configuration.h"
|
|
#include "createBlankImage.h"
|
|
#include "dialog.h"
|
|
#include "sdlgui.h"
|
|
#include "file.h"
|
|
#include "log.h"
|
|
|
|
#define DLGNEWDISK_DECTRACK 3
|
|
#define DLGNEWDISK_TRACKSTR 4
|
|
#define DLGNEWDISK_INCTRACK 5
|
|
#define DLGNEWDISK_SECTORS9 7
|
|
#define DLGNEWDISK_SECTORS10 8
|
|
#define DLGNEWDISK_SECTORS11 9
|
|
#define DLGNEWDISK_SECTORS18 10
|
|
#define DLGNEWDISK_SECTORS36 11
|
|
#define DLGNEWDISK_SIDES1 13
|
|
#define DLGNEWDISK_SIDES2 14
|
|
#define DLGNEWDISK_SAVE 15
|
|
#define DLGNEWDISK_EXIT 16
|
|
|
|
static char szTracks[3];
|
|
static int nTracks = 80;
|
|
|
|
/* The new disk image dialog: */
|
|
static SGOBJ newdiskdlg[] =
|
|
{
|
|
{ SGBOX, 0, 0, 0,0, 29,14, NULL },
|
|
{ SGTEXT, 0, 0, 6,1, 16,1, "New floppy image" },
|
|
{ SGTEXT, 0, 0, 2,3, 7,1, "Tracks:" },
|
|
{ SGBUTTON, 0, 0, 12,3, 1,1, "\x04", SG_SHORTCUT_LEFT },
|
|
{ SGTEXT, 0, 0, 14,3, 2,1, szTracks },
|
|
{ SGBUTTON, 0, 0, 17,3, 1,1, "\x03", SG_SHORTCUT_RIGHT },
|
|
{ SGTEXT, 0, 0, 2,5, 8,1, "Sectors:" },
|
|
{ SGRADIOBUT, 0, SG_SELECTED, 12,5, 4,1, " _9" },
|
|
{ SGRADIOBUT, 0, 0, 17,5, 4,1, "1_0" },
|
|
{ SGRADIOBUT, 0, 0, 22,5, 4,1, "11" },
|
|
{ SGRADIOBUT, 0, 0, 12,6, 9,1, "1_8 (HD)" },
|
|
{ SGRADIOBUT, 0, 0, 12,7, 9,1, "3_6 (ED)" },
|
|
{ SGTEXT, 0, 0, 2,9, 6,1, "Sides:" },
|
|
{ SGRADIOBUT, 0, 0, 12,9, 3,1, "_1" },
|
|
{ SGRADIOBUT, 0, SG_SELECTED, 17,9, 3,1, "_2" },
|
|
{ SGBUTTON, SG_DEFAULT, 0, 4,12, 8,1, "_Create" },
|
|
{ SGBUTTON, SG_CANCEL, 0, 18,12, 6,1, "_Back" },
|
|
{ -1, 0, 0, 0,0, 0,0, NULL }
|
|
};
|
|
|
|
#define DEFAULT_DISK_NAME "new_disk.st"
|
|
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
/**
|
|
* Handle creation of a the "new blank disk image".
|
|
* return true if disk created, false otherwise.
|
|
*/
|
|
static bool DlgNewDisk_CreateDisk(const char *path)
|
|
{
|
|
int nSectors, nSides;
|
|
|
|
/* (potentially non-existing) filename? */
|
|
if (File_DirExists(path))
|
|
{
|
|
Log_AlertDlg(LOG_ERROR, "ERROR: '%s' isn't a file!", path);
|
|
return false;
|
|
}
|
|
|
|
/* Get number of sectors */
|
|
if (newdiskdlg[DLGNEWDISK_SECTORS36].state & SG_SELECTED)
|
|
nSectors = 36;
|
|
else if (newdiskdlg[DLGNEWDISK_SECTORS18].state & SG_SELECTED)
|
|
nSectors = 18;
|
|
else if (newdiskdlg[DLGNEWDISK_SECTORS11].state & SG_SELECTED)
|
|
nSectors = 11;
|
|
else if (newdiskdlg[DLGNEWDISK_SECTORS10].state & SG_SELECTED)
|
|
nSectors = 10;
|
|
else
|
|
nSectors = 9;
|
|
|
|
/* Get number of sides */
|
|
if (newdiskdlg[DLGNEWDISK_SIDES1].state & SG_SELECTED)
|
|
nSides = 1;
|
|
else
|
|
nSides = 2;
|
|
|
|
return CreateBlankImage_CreateFile(path, nTracks, nSectors, nSides);
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
/**
|
|
* Show and process the "new blank disk image" dialog.
|
|
* Return file name of last created diskimage or NULL if none created.
|
|
* Caller needs to free the name.
|
|
*/
|
|
char *DlgNewDisk_Main(void)
|
|
{
|
|
int but;
|
|
char *szNewDiskName, *tmpname, *retname = NULL;
|
|
sprintf(szTracks, "%i", nTracks);
|
|
|
|
SDLGui_CenterDlg(newdiskdlg);
|
|
|
|
/* Initialize disk image name: */
|
|
szNewDiskName = File_MakePath(ConfigureParams.DiskImage.szDiskImageDirectory, "new_disk.st", NULL);
|
|
if (!szNewDiskName)
|
|
return NULL;
|
|
|
|
/* Draw and process the dialog */
|
|
do
|
|
{
|
|
but = SDLGui_DoDialog(newdiskdlg, NULL, false);
|
|
switch(but)
|
|
{
|
|
case DLGNEWDISK_DECTRACK:
|
|
if (nTracks > 40)
|
|
nTracks -= 1;
|
|
sprintf(szTracks, "%i", nTracks);
|
|
break;
|
|
case DLGNEWDISK_INCTRACK:
|
|
if (nTracks < 85)
|
|
nTracks += 1;
|
|
sprintf(szTracks, "%i", nTracks);
|
|
break;
|
|
case DLGNEWDISK_SAVE:
|
|
tmpname = SDLGui_FileSelect("New floppy image:", szNewDiskName, NULL, true);
|
|
if (tmpname)
|
|
{
|
|
if (DlgNewDisk_CreateDisk(tmpname))
|
|
{
|
|
if (retname)
|
|
free(retname);
|
|
retname = tmpname;
|
|
}
|
|
else
|
|
free(tmpname);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
while (but != DLGNEWDISK_EXIT && but != SDLGUI_QUIT
|
|
&& but != SDLGUI_ERROR && !bQuitProgram);
|
|
|
|
free(szNewDiskName);
|
|
return retname;
|
|
}
|