Add menu option to create blank disc image.

This commit is contained in:
SarahW 2018-01-21 16:13:41 +00:00
commit 0e37f08cb5
11 changed files with 1498 additions and 1330 deletions

View file

@ -45,7 +45,7 @@ pcem_SOURCES += wx-main.cc wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc
wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c wx-sdl2-video.c \
wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \
wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c \
wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc wx-joystickconfig.cc
wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc wx-joystickconfig.cc wx-createdisc.cc
if USE_ALSA
pcem_LDADD += -lasound
pcem_SOURCES += midi_alsa.c

View file

@ -23,7 +23,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o

View file

@ -23,7 +23,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o

View file

@ -24,7 +24,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o win-midi.o \
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx.res
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o wx.res
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o

View file

@ -24,7 +24,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o win-midi.o \
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-hostconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx.res
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o wx.res
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
NETOBJ = ne2000.o nethandler.o

View file

@ -22,7 +22,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o

View file

@ -111,6 +111,10 @@
<checkable>1</checkable>
</object>
<object class="separator"/>
<object class="wxMenuItem" name="IDM_DISC_CREATE">
<label>Create blank disc image...</label>
</object>
<object class="separator"/>
<object class="wxMenuItem" name="IDM_DISC_ZIP">
<label>Load _ZIP drive...</label>
</object>

143
src/wx-createdisc.cc Normal file
View file

@ -0,0 +1,143 @@
extern "C" void pclog(const char *format, ...);
#include "wx-createdisc.h"
#include "wx-utils.h"
#include "wx/wxprec.h"
#include "wx-dialogbox.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();
}

8
src/wx-createdisc.h Normal file
View file

@ -0,0 +1,8 @@
#ifndef SRC_WX_CREATEDISC_H_
#define SRC_WX_CREATEDISC_H_
extern "C" {
void creatediscimage_open(void *hwnd);
}
#endif /* SRC_WX_CREATEDISC_H_ */

File diff suppressed because it is too large Load diff

View file

@ -42,6 +42,8 @@
#include "wx-common.h"
#include "wx-display.h"
extern void creatediscimage_open(void *hwnd);
#define ID_IS(s) wParam == wx_xrcid(s)
#define ID_RANGE(a, b) wParam >= wx_xrcid(a) && wParam <= wx_xrcid(b)
@ -856,6 +858,10 @@ int wx_handle_command(void* hwnd, int wParam, int checked)
wx_checkmenuitem(hmenu, wParam, bpb_disable);
saveconfig(NULL);
}
else if (ID_IS("IDM_DISC_CREATE"))
{
creatediscimage_open(hwnd);
}
else if (ID_IS("IDM_DISC_ZIP"))
{
char zip_fn[256] = "";