Add menu option to create blank disc image.
This commit is contained in:
parent
5fd2fd40aa
commit
0e37f08cb5
11 changed files with 1498 additions and 1330 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
143
src/wx-createdisc.cc
Normal 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
8
src/wx-createdisc.h
Normal 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_ */
|
||||
2871
src/wx-resources.cpp
2871
src/wx-resources.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -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] = "";
|
||||
|
|
|
|||
Loading…
Reference in a new issue