146 lines
5 KiB
C++
146 lines
5 KiB
C++
#include <stdint.h>
|
|
|
|
extern "C" void pclog(const char *format, ...);
|
|
|
|
#include "wx-createdisc.h"
|
|
|
|
#include "wx-utils.h"
|
|
#include "wx/wxprec.h"
|
|
|
|
#include "wx-dialogbox.h"
|
|
#include <stdint.h>
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
#include "wx/xrc/xmlres.h"
|
|
|
|
#define IDC_CONFIG_BASE 1000
|
|
|
|
static struct
|
|
{
|
|
char name[80];
|
|
int nr_sectors;
|
|
} disc_formats[] =
|
|
{
|
|
{"160 kB", 1*40*8},
|
|
{"180 kB", 1*40*9},
|
|
{"320 kB", 2*40*8},
|
|
{"360 kB", 2*40*9},
|
|
{"720 kB", 2*80*9},
|
|
{"1.44 MB", 2*80*18},
|
|
{"2.88 MB", 2*80*36},
|
|
{"100 MB (Zip)", 2048*96},
|
|
{"", 0}
|
|
};
|
|
|
|
static int creatediscimage_dlgproc(void *hdlg, int message, INT_PARAM wParam,
|
|
LONG_PARAM lParam)
|
|
{
|
|
wxWindow *window = (wxWindow *)hdlg;
|
|
int c;
|
|
|
|
switch (message)
|
|
{
|
|
case WX_INITDIALOG:
|
|
return TRUE;
|
|
|
|
case WX_COMMAND:
|
|
switch (wParam)
|
|
{
|
|
case wxID_OK:
|
|
c = 0;
|
|
|
|
while (disc_formats[c].nr_sectors)
|
|
{
|
|
wxWindow *rb_win = window->FindWindow(IDC_CONFIG_BASE + c);
|
|
wxRadioButton *rb = wxDynamicCast(rb_win, wxRadioButton);
|
|
|
|
if (rb->GetValue())
|
|
break;
|
|
c++;
|
|
}
|
|
|
|
if (disc_formats[c].nr_sectors)
|
|
{
|
|
char openfilestring[260];
|
|
int ret;
|
|
|
|
memset(openfilestring, 0, sizeof(openfilestring));
|
|
ret = wx_filedialog(hdlg, "Save", "",
|
|
"Disc image (*.img;*.ima)|*.img;*.ima|All files (*.*)|*.*",
|
|
".img",
|
|
0, openfilestring);
|
|
|
|
if (!ret)
|
|
{
|
|
FILE *f = fopen(openfilestring, "wb");
|
|
if (f)
|
|
{
|
|
uint8_t sector[512];
|
|
int d;
|
|
|
|
memset(sector, 0, 512);
|
|
|
|
for (d = 0; d < disc_formats[c].nr_sectors; d++)
|
|
fwrite(sector, 512, 1, f);
|
|
|
|
fclose(f);
|
|
}
|
|
}
|
|
}
|
|
|
|
wx_enddialog(hdlg, 0);
|
|
return TRUE;
|
|
|
|
case wxID_CANCEL:
|
|
wx_enddialog(hdlg, 0);
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void creatediscimage_open(void *hwnd)
|
|
{
|
|
int id = IDC_CONFIG_BASE;
|
|
int c = 0;
|
|
|
|
PCemDialogBox dialog((wxWindow *)hwnd, creatediscimage_dlgproc);
|
|
|
|
dialog.SetTitle("Create Disc Image");
|
|
|
|
wxFlexGridSizer* root = new wxFlexGridSizer(0, 1, 0, 0);
|
|
root->SetFlexibleDirection(wxBOTH);
|
|
root->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
|
|
dialog.SetSizer(root);
|
|
|
|
wxFlexGridSizer* sizer = new wxFlexGridSizer(0, 1, 0, 0);
|
|
sizer->SetFlexibleDirection(wxBOTH);
|
|
sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
|
|
root->Add(sizer, 1, wxEXPAND, 5);
|
|
|
|
while (disc_formats[c].nr_sectors)
|
|
{
|
|
wxBoxSizer *radioSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
sizer->Add(radioSizer, 1, wxEXPAND, 5);
|
|
wxRadioButton *rb = new wxRadioButton(&dialog, id++, disc_formats[c].name);
|
|
radioSizer->Add(rb, 1, wxALL, 5);
|
|
|
|
c++;
|
|
}
|
|
|
|
wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
root->Add(okCancelSizer, 1, wxEXPAND, 5);
|
|
|
|
okCancelSizer->Add(0, 0, 1, wxEXPAND, 5);
|
|
okCancelSizer->Add(new wxButton(&dialog, wxID_OK), 0, wxALL, 5);
|
|
okCancelSizer->Add(new wxButton(&dialog, wxID_CANCEL), 0, wxALL, 5);
|
|
|
|
dialog.Fit();
|
|
dialog.OnInit();
|
|
dialog.ShowModal();
|
|
dialog.Destroy();
|
|
}
|