mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 09:58:19 -07:00
230 lines
4.6 KiB
C
230 lines
4.6 KiB
C
/* Copyright holders: Sarah Walker
|
|
see COPYING for more details
|
|
*/
|
|
#include "ibm.h"
|
|
#include "device.h"
|
|
#include "allegro-main.h"
|
|
#include "allegro-gui.h"
|
|
#include "disc.h"
|
|
#include "ide.h"
|
|
|
|
static int file_return(void)
|
|
{
|
|
return D_CLOSE;
|
|
}
|
|
|
|
static int file_exit(void)
|
|
{
|
|
quited = 1;
|
|
return D_CLOSE;
|
|
}
|
|
|
|
static int file_reset(void)
|
|
{
|
|
resetpchard();
|
|
return D_CLOSE;
|
|
}
|
|
|
|
static int file_cad(void)
|
|
{
|
|
resetpc_cad();
|
|
return D_CLOSE;
|
|
}
|
|
|
|
|
|
static MENU file_menu[]=
|
|
{
|
|
{"&Return", file_return, NULL, 0, NULL},
|
|
{"&Hard Reset", file_reset, NULL, 0, NULL},
|
|
{"&Ctrl+Alt+Del", file_cad, NULL, 0, NULL},
|
|
{"E&xit", file_exit, NULL, 0, NULL},
|
|
{NULL,NULL,NULL,0,NULL}
|
|
};
|
|
|
|
static int disc_load_a()
|
|
{
|
|
char fn[260];
|
|
int ret;
|
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
|
strcpy(fn, discfns[0]);
|
|
ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA;FDI", 260, xsize, ysize);
|
|
if (ret)
|
|
{
|
|
disc_close(0);
|
|
disc_load(0, fn);
|
|
saveconfig();
|
|
}
|
|
return D_O_K;
|
|
}
|
|
|
|
static int disc_load_b()
|
|
{
|
|
char fn[260];
|
|
int ret;
|
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
|
strcpy(fn, discfns[1]);
|
|
ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA;FDI", 260, xsize, ysize);
|
|
if (ret)
|
|
{
|
|
disc_close(1);
|
|
disc_load(1, fn);
|
|
saveconfig();
|
|
}
|
|
return D_O_K;
|
|
}
|
|
|
|
static int disc_eject_a()
|
|
{
|
|
disc_close(0);
|
|
saveconfig();
|
|
|
|
return D_O_K;
|
|
}
|
|
|
|
static int disc_eject_b()
|
|
{
|
|
disc_close(1);
|
|
saveconfig();
|
|
|
|
return D_O_K;
|
|
}
|
|
|
|
static MENU disc_menu[]=
|
|
{
|
|
{"Load drive &A:...", disc_load_a, NULL, 0, NULL},
|
|
{"Load drive &B:...", disc_load_b, NULL, 0, NULL},
|
|
{"&Eject drive &A:", disc_eject_a, NULL, 0, NULL},
|
|
{"Eject drive &B:", disc_eject_b, NULL, 0, NULL},
|
|
{"&Configure hard discs...", disc_hdconf, NULL, 0, NULL},
|
|
{NULL,NULL,NULL,0,NULL}
|
|
};
|
|
|
|
static MENU cdrom_menu[];
|
|
|
|
static void cdrom_update()
|
|
{
|
|
int c;
|
|
|
|
for (c = 0; cdrom_menu[c].text; c++)
|
|
cdrom_menu[c].flags = 0;
|
|
|
|
if (!cdrom_enabled)
|
|
cdrom_menu[0].flags = D_SELECTED;
|
|
else
|
|
cdrom_menu[1].flags = D_SELECTED;
|
|
|
|
return D_O_K;
|
|
}
|
|
|
|
static int cdrom_disabled()
|
|
{
|
|
if (!cdrom_enabled)
|
|
return D_O_K;
|
|
|
|
if (alert("This will reset 86Box!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
|
{
|
|
atapi->exit();
|
|
cdrom_enabled = 0;
|
|
saveconfig();
|
|
resetpchard();
|
|
cdrom_update();
|
|
}
|
|
|
|
return D_O_K;
|
|
}
|
|
|
|
static int cdrom_empty()
|
|
{
|
|
if (cdrom_enabled)
|
|
{
|
|
atapi->exit();
|
|
cdrom_drive = -1;
|
|
cdrom_null_open(cdrom_drive);
|
|
return D_O_K;
|
|
}
|
|
|
|
if (alert("This will reset 86Box!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
|
{
|
|
cdrom_drive = -1;
|
|
cdrom_enabled = 1;
|
|
cdrom_null_open(cdrom_drive);
|
|
saveconfig();
|
|
resetpchard();
|
|
cdrom_update();
|
|
}
|
|
}
|
|
|
|
static int cdrom_dev()
|
|
{
|
|
if (cdrom_enabled)
|
|
{
|
|
atapi->exit();
|
|
cdrom_drive = 1;
|
|
ioctl_open(cdrom_drive);
|
|
return D_O_K;
|
|
}
|
|
|
|
if (alert("This will reset 86Box!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
|
{
|
|
cdrom_drive = 1;
|
|
cdrom_enabled = 1;
|
|
ioctl_open(cdrom_drive);
|
|
saveconfig();
|
|
resetpchard();
|
|
cdrom_update();
|
|
}
|
|
}
|
|
|
|
static MENU cdrom_menu[] =
|
|
{
|
|
{"&Disabled", cdrom_disabled, NULL, 0, NULL},
|
|
{"&Empty", cdrom_empty, NULL, 0, NULL},
|
|
{"/dev/cdrom", cdrom_dev, NULL, 0, NULL},
|
|
{NULL,NULL,NULL,0,NULL}
|
|
};
|
|
|
|
static MENU settings_menu[]=
|
|
{
|
|
{"&Configure...", settings_configure, NULL, 0, NULL},
|
|
{"CD-ROM", NULL, cdrom_menu, 0, NULL},
|
|
{NULL,NULL,NULL,0,NULL}
|
|
};
|
|
|
|
static MENU main_menu[]=
|
|
{
|
|
{"&File", NULL, file_menu, 0, NULL},
|
|
{"&Disc", NULL, disc_menu, 0, NULL},
|
|
{"&Settings", NULL, settings_menu, 0, NULL},
|
|
{NULL,NULL,NULL,0,NULL}
|
|
};
|
|
|
|
static DIALOG main_windows_gui[]=
|
|
{
|
|
{d_menu_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, main_menu, NULL, NULL},
|
|
{d_yield_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, NULL, NULL, NULL},
|
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
|
};
|
|
|
|
void gui_enter()
|
|
{
|
|
DIALOG_PLAYER *dp;
|
|
int x = 1;
|
|
infocus = 0;
|
|
|
|
dp = init_dialog(main_windows_gui, 0);
|
|
show_mouse(screen);
|
|
while (x && !(mouse_b & 2) && !key[KEY_ESC])
|
|
{
|
|
x = update_dialog(dp);
|
|
}
|
|
show_mouse(NULL);
|
|
shutdown_dialog(dp);
|
|
|
|
clear(screen);
|
|
clear_keybuf();
|
|
|
|
infocus = 1;
|
|
|
|
device_force_redraw();
|
|
}
|