2020-04-26 00:12:11 +02:00
|
|
|
#define UNICODE
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
2020-05-13 01:39:57 +08:00
|
|
|
#include <windows.h>
|
2020-04-26 00:12:11 +02:00
|
|
|
#include <86box/86box.h>
|
|
|
|
|
#include <86box/cdrom.h>
|
2020-04-26 16:59:16 +02:00
|
|
|
#include <86box/config.h>
|
2020-04-26 00:12:11 +02:00
|
|
|
#include <86box/device.h>
|
|
|
|
|
#include <86box/timer.h>
|
|
|
|
|
#include <86box/fdd.h>
|
2020-04-26 16:59:16 +02:00
|
|
|
#include <86box/fdd_86f.h>
|
2020-04-26 00:12:11 +02:00
|
|
|
#include <86box/hdc.h>
|
|
|
|
|
#include <86box/language.h>
|
|
|
|
|
#include <86box/machine.h>
|
|
|
|
|
#include <86box/scsi_device.h>
|
|
|
|
|
#include <86box/mo.h>
|
2020-04-26 16:59:16 +02:00
|
|
|
#include <86box/plat.h>
|
2020-04-26 00:12:11 +02:00
|
|
|
#include <86box/scsi.h>
|
2020-04-26 16:59:16 +02:00
|
|
|
#include <86box/sound.h>
|
2020-04-26 15:43:33 +02:00
|
|
|
#include <86box/ui.h>
|
2020-04-26 00:12:11 +02:00
|
|
|
#include <86box/zip.h>
|
|
|
|
|
#include <86box/win.h>
|
|
|
|
|
|
PIC rewrite, proper SMRAM API, complete SiS 471 rewrite and addition of 40x, 460, and 461, changes to mem.c/h, disabled Voodoo memory dumping on exit, bumped SDL Hardware scale quality to 2, bumped IDE/ATAPI drives to ATA-6, finally bumped emulator version to 3.0, redid the bus type ID's to allow for planned ATAPI hard disks, made SST flash set its high mappings to the correct address if the CPU is 16-bit, and added the SiS 401 AMI 486 Clone, AOpen Vi15G, and the Soyo 4SA2 (486 with SiS 496/497 that can boot from CD-ROM), assorted 286+ protected mode fixes (for slightly more accuracy), and fixes to 808x emulation (MS Word 1.0 and 1.10 for DOS now work correctly from floppy).
2020-10-14 23:15:01 +02:00
|
|
|
#define MACHINE_HAS_IDE (machines[machine].flags & MACHINE_IDE_QUAD)
|
2021-04-13 23:46:50 +05:00
|
|
|
#define MACHINE_HAS_SCSI (machines[machine].flags & MACHINE_SCSI_DUAL)
|
2020-04-26 00:12:11 +02:00
|
|
|
|
|
|
|
|
#define FDD_FIRST 0
|
|
|
|
|
#define CDROM_FIRST FDD_FIRST + FDD_NUM
|
|
|
|
|
#define ZIP_FIRST CDROM_FIRST + CDROM_NUM
|
|
|
|
|
#define MO_FIRST ZIP_FIRST + ZIP_NUM
|
|
|
|
|
|
|
|
|
|
static HMENU media_menu, stbar_menu;
|
|
|
|
|
static HMENU menus[FDD_NUM + CDROM_NUM + ZIP_NUM + MO_NUM];
|
|
|
|
|
static char index_map[255];
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
media_menu_set_ids(HMENU hMenu, int id)
|
|
|
|
|
{
|
|
|
|
|
int c = GetMenuItemCount(hMenu);
|
|
|
|
|
|
2020-04-26 16:59:16 +02:00
|
|
|
MENUITEMINFO mii = { 0 };
|
2020-04-26 00:12:11 +02:00
|
|
|
mii.fMask = MIIM_ID;
|
2020-04-26 16:59:16 +02:00
|
|
|
mii.cbSize = sizeof(mii);
|
2020-04-26 00:12:11 +02:00
|
|
|
|
|
|
|
|
for(int i = 0; i < c; i++)
|
|
|
|
|
{
|
|
|
|
|
GetMenuItemInfo(hMenu, i, TRUE, &mii);
|
|
|
|
|
mii.wID |= id;
|
|
|
|
|
SetMenuItemInfo(hMenu, i, TRUE, &mii);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Loads the submenu from resource by name */
|
|
|
|
|
static HMENU
|
|
|
|
|
media_menu_load_resource(wchar_t *lpName)
|
|
|
|
|
{
|
|
|
|
|
HMENU loaded = LoadMenu(NULL, lpName);
|
|
|
|
|
|
|
|
|
|
/* The actual submenu is in a dummy popup menu item */
|
|
|
|
|
HMENU actual = GetSubMenu(loaded, 0);
|
|
|
|
|
|
|
|
|
|
/* Now that we have our submenu, we can destroy the parent menu */
|
|
|
|
|
RemoveMenu(loaded, (UINT_PTR)actual, MF_BYCOMMAND);
|
|
|
|
|
DestroyMenu(loaded);
|
|
|
|
|
|
|
|
|
|
return actual;
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-26 18:44:41 +02:00
|
|
|
static void
|
|
|
|
|
media_menu_set_name_floppy(int drive)
|
|
|
|
|
{
|
2021-03-14 20:35:01 +01:00
|
|
|
wchar_t name[512], temp[512], fn[512];
|
2020-04-26 18:44:41 +02:00
|
|
|
MENUITEMINFO mii = { 0 };
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
mbstoc16s(temp, fdd_getname(fdd_get_type(drive)),
|
2020-04-26 18:44:41 +02:00
|
|
|
strlen(fdd_getname(fdd_get_type(drive))) + 1);
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(floppyfns[drive]) == 0) {
|
2020-04-26 19:22:13 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2108),
|
2020-04-26 18:44:41 +02:00
|
|
|
drive + 1, temp, plat_get_string(IDS_2057));
|
|
|
|
|
} else {
|
2021-03-14 20:35:01 +01:00
|
|
|
mbstoc16s(fn, floppyfns[drive], sizeof_w(fn));
|
2020-04-26 19:22:13 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2108),
|
2021-03-14 20:35:01 +01:00
|
|
|
drive + 1, temp, fn);
|
2020-04-26 18:44:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mii.cbSize = sizeof(mii);
|
|
|
|
|
mii.fMask = MIIM_STRING;
|
|
|
|
|
mii.dwTypeData = name;
|
|
|
|
|
|
|
|
|
|
SetMenuItemInfo(media_menu, (UINT_PTR)menus[FDD_FIRST + drive], FALSE, &mii);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
media_menu_set_name_cdrom(int drive)
|
|
|
|
|
{
|
2021-03-14 20:35:01 +01:00
|
|
|
wchar_t name[512], *temp, fn[512];
|
2020-04-26 18:44:41 +02:00
|
|
|
MENUITEMINFO mii = { 0 };
|
|
|
|
|
|
|
|
|
|
int bus = cdrom[drive].bus_type;
|
|
|
|
|
int id = IDS_5377 + (bus - 1);
|
|
|
|
|
|
|
|
|
|
temp = plat_get_string(id);
|
|
|
|
|
|
|
|
|
|
if (cdrom[drive].host_drive == 200) {
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(cdrom[drive].image_path) == 0) {
|
|
|
|
|
_swprintf(name, plat_get_string(IDS_5120),
|
|
|
|
|
drive+1, temp, plat_get_string(IDS_2057));
|
|
|
|
|
} else {
|
|
|
|
|
mbstoc16s(fn, cdrom[drive].image_path, sizeof_w(fn));
|
|
|
|
|
_swprintf(name, plat_get_string(IDS_5120),
|
|
|
|
|
drive+1, temp, fn);
|
|
|
|
|
}
|
2020-04-26 18:44:41 +02:00
|
|
|
} else
|
|
|
|
|
_swprintf(name, plat_get_string(IDS_5120), drive+1, temp, plat_get_string(IDS_2057));
|
|
|
|
|
|
|
|
|
|
mii.cbSize = sizeof(mii);
|
|
|
|
|
mii.fMask = MIIM_STRING;
|
|
|
|
|
mii.dwTypeData = name;
|
|
|
|
|
|
|
|
|
|
SetMenuItemInfo(media_menu, (UINT_PTR)menus[CDROM_FIRST + drive], FALSE, &mii);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
media_menu_set_name_zip(int drive)
|
|
|
|
|
{
|
2021-03-14 20:35:01 +01:00
|
|
|
wchar_t name[512], *temp, fn[512];
|
2020-04-26 18:44:41 +02:00
|
|
|
MENUITEMINFO mii = { 0 };
|
|
|
|
|
|
|
|
|
|
int bus = zip_drives[drive].bus_type;
|
|
|
|
|
int id = IDS_5377 + (bus - 1);
|
|
|
|
|
|
|
|
|
|
temp = plat_get_string(id);
|
|
|
|
|
|
|
|
|
|
int type = zip_drives[drive].is_250 ? 250 : 100;
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(zip_drives[drive].image_path) == 0) {
|
2020-04-26 18:44:41 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2054),
|
|
|
|
|
type, drive+1, temp, plat_get_string(IDS_2057));
|
|
|
|
|
} else {
|
2021-03-14 20:35:01 +01:00
|
|
|
mbstoc16s(fn, zip_drives[drive].image_path, sizeof_w(fn));
|
2020-04-26 18:44:41 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2054),
|
|
|
|
|
type, drive+1, temp, zip_drives[drive].image_path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mii.cbSize = sizeof(mii);
|
|
|
|
|
mii.fMask = MIIM_STRING;
|
|
|
|
|
mii.dwTypeData = name;
|
|
|
|
|
|
|
|
|
|
SetMenuItemInfo(media_menu, (UINT_PTR)menus[ZIP_FIRST + drive], FALSE, &mii);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
media_menu_set_name_mo(int drive)
|
|
|
|
|
{
|
2021-03-14 20:35:01 +01:00
|
|
|
wchar_t name[512], *temp, fn[512];
|
2020-04-26 18:44:41 +02:00
|
|
|
MENUITEMINFO mii = { 0 };
|
|
|
|
|
|
|
|
|
|
int bus = mo_drives[drive].bus_type;
|
|
|
|
|
int id = IDS_5377 + (bus - 1);
|
|
|
|
|
|
|
|
|
|
temp = plat_get_string(id);
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(mo_drives[drive].image_path) == 0) {
|
2020-04-26 19:22:13 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2115),
|
2020-04-26 18:44:41 +02:00
|
|
|
drive+1, temp, plat_get_string(IDS_2057));
|
|
|
|
|
} else {
|
2021-03-14 20:35:01 +01:00
|
|
|
mbstoc16s(fn, mo_drives[drive].image_path, sizeof_w(fn));
|
2020-04-26 19:22:13 +02:00
|
|
|
_swprintf(name, plat_get_string(IDS_2115),
|
2021-03-14 20:35:01 +01:00
|
|
|
drive+1, temp, fn);
|
2020-04-26 18:44:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mii.cbSize = sizeof(mii);
|
|
|
|
|
mii.fMask = MIIM_STRING;
|
|
|
|
|
mii.dwTypeData = name;
|
|
|
|
|
|
|
|
|
|
SetMenuItemInfo(media_menu, (UINT_PTR)menus[MO_FIRST + drive], FALSE, &mii);
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-26 16:59:16 +02:00
|
|
|
void
|
2020-04-26 00:12:11 +02:00
|
|
|
media_menu_update_floppy(int id)
|
|
|
|
|
{
|
|
|
|
|
int i = FDD_FIRST + id;
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(floppyfns[id]) == 0) {
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_FLOPPY_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
|
|
|
|
|
EnableMenuItem(menus[i], IDM_FLOPPY_EXPORT_TO_86F | id, MF_BYCOMMAND | MF_GRAYED);
|
2020-04-26 17:00:06 +02:00
|
|
|
} else {
|
|
|
|
|
EnableMenuItem(menus[i], IDM_FLOPPY_EJECT | id, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
|
EnableMenuItem(menus[i], IDM_FLOPPY_EXPORT_TO_86F | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
2020-04-26 18:44:41 +02:00
|
|
|
|
|
|
|
|
media_menu_set_name_floppy(id);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
|
|
|
|
|
2020-04-26 16:59:16 +02:00
|
|
|
void
|
2020-04-26 00:12:11 +02:00
|
|
|
media_menu_update_cdrom(int id)
|
|
|
|
|
{
|
|
|
|
|
int i = CDROM_FIRST + id;
|
|
|
|
|
|
|
|
|
|
if (! cdrom[id].sound_on)
|
2020-04-26 17:00:06 +02:00
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_MUTE | id, MF_BYCOMMAND | MF_CHECKED);
|
|
|
|
|
else
|
|
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_MUTE | id, MF_BYCOMMAND | MF_UNCHECKED);
|
2020-04-26 00:12:11 +02:00
|
|
|
|
2020-04-26 17:00:06 +02:00
|
|
|
if (cdrom[id].host_drive == 200) {
|
|
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | MF_CHECKED);
|
|
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_UNCHECKED);
|
|
|
|
|
} else {
|
2020-04-26 00:12:11 +02:00
|
|
|
cdrom[id].host_drive = 0;
|
2020-04-26 17:00:06 +02:00
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | MF_UNCHECKED);
|
|
|
|
|
CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_CHECKED);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
2020-04-26 17:00:06 +02:00
|
|
|
|
|
|
|
|
if(cdrom[id].prev_host_drive == 0)
|
|
|
|
|
EnableMenuItem(menus[i], IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
|
|
|
|
|
else
|
|
|
|
|
EnableMenuItem(menus[i], IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 18:44:41 +02:00
|
|
|
|
|
|
|
|
media_menu_set_name_cdrom(id);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
|
|
|
|
|
2020-04-26 16:59:16 +02:00
|
|
|
void
|
2020-04-26 00:12:11 +02:00
|
|
|
media_menu_update_zip(int id)
|
|
|
|
|
{
|
|
|
|
|
int i = ZIP_FIRST + id;
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(zip_drives[id].image_path) == 0)
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_ZIP_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
|
2020-04-26 17:00:06 +02:00
|
|
|
else
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_ZIP_EJECT | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 17:00:06 +02:00
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if(strlen(zip_drives[id].prev_image_path) == 0)
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_ZIP_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
|
2020-04-26 17:00:06 +02:00
|
|
|
else
|
|
|
|
|
EnableMenuItem(menus[i], IDM_ZIP_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 18:44:41 +02:00
|
|
|
|
|
|
|
|
media_menu_set_name_zip(id);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
|
|
|
|
|
2020-04-26 16:59:16 +02:00
|
|
|
void
|
2020-04-26 00:12:11 +02:00
|
|
|
media_menu_update_mo(int id)
|
|
|
|
|
{
|
|
|
|
|
int i = MO_FIRST + id;
|
|
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if (strlen(mo_drives[id].image_path) == 0)
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_MO_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
|
2020-04-26 17:00:06 +02:00
|
|
|
else
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_MO_EJECT | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 17:00:06 +02:00
|
|
|
|
2021-03-14 20:35:01 +01:00
|
|
|
if(strlen(mo_drives[id].prev_image_path) == 0)
|
2020-04-26 00:12:11 +02:00
|
|
|
EnableMenuItem(menus[i], IDM_MO_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
|
2020-04-26 17:00:06 +02:00
|
|
|
else
|
|
|
|
|
EnableMenuItem(menus[i], IDM_MO_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
|
2020-04-26 18:44:41 +02:00
|
|
|
|
|
|
|
|
media_menu_set_name_mo(id);
|
2020-04-26 00:12:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
media_menu_load_submenus()
|
|
|
|
|
{
|
|
|
|
|
memset(index_map, -1, sizeof(index_map));
|
|
|
|
|
|
|
|
|
|
int curr = 0;
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < FDD_NUM; i++) {
|
|
|
|
|
menus[curr] = media_menu_load_resource(FLOPPY_SUBMENU_NAME);
|
|
|
|
|
media_menu_set_ids(menus[curr++], i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < CDROM_NUM; i++) {
|
|
|
|
|
menus[curr] = media_menu_load_resource(CDROM_SUBMENU_NAME);
|
|
|
|
|
media_menu_set_ids(menus[curr++], i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < ZIP_NUM; i++) {
|
|
|
|
|
menus[curr] = media_menu_load_resource(ZIP_SUBMENU_NAME);
|
|
|
|
|
media_menu_set_ids(menus[curr++], i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < MO_NUM; i++) {
|
|
|
|
|
menus[curr] = media_menu_load_resource(MO_SUBMENU_NAME);
|
|
|
|
|
media_menu_set_ids(menus[curr++], i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
|
is_valid_fdd(int i)
|
|
|
|
|
{
|
|
|
|
|
return fdd_get_type(i) != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
|
is_valid_cdrom(int i)
|
|
|
|
|
{
|
2021-05-26 18:14:52 +05:00
|
|
|
if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && !MACHINE_HAS_IDE && memcmp(hdc_get_internal_name(hdc_current), "ide", 3))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
2021-04-13 23:46:50 +05:00
|
|
|
if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !MACHINE_HAS_SCSI && (scsi_card_current == 0))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
|
|
|
|
return cdrom[i].bus_type != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
|
is_valid_zip(int i)
|
|
|
|
|
{
|
2021-05-26 18:14:52 +05:00
|
|
|
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && !MACHINE_HAS_IDE && memcmp(hdc_get_internal_name(hdc_current), "ide", 3))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
2021-04-13 23:46:50 +05:00
|
|
|
if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !MACHINE_HAS_SCSI && (scsi_card_current == 0))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
|
|
|
|
return zip_drives[i].bus_type != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
|
is_valid_mo(int i)
|
|
|
|
|
{
|
2021-05-26 18:14:52 +05:00
|
|
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && !MACHINE_HAS_IDE && memcmp(hdc_get_internal_name(hdc_current), "ide", 3))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
2021-04-13 23:46:50 +05:00
|
|
|
if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !MACHINE_HAS_SCSI && (scsi_card_current == 0))
|
2020-04-26 00:12:11 +02:00
|
|
|
return 0;
|
|
|
|
|
return mo_drives[i].bus_type != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
media_menu_reset()
|
|
|
|
|
{
|
|
|
|
|
/* Remove existing entries. */
|
|
|
|
|
int c = GetMenuItemCount(media_menu);
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < c; i++)
|
2020-04-26 16:59:16 +02:00
|
|
|
RemoveMenu(media_menu, 0, MF_BYPOSITION);
|
2020-04-26 00:12:11 +02:00
|
|
|
|
|
|
|
|
/* Add new ones. */
|
|
|
|
|
int curr = 0;
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < FDD_NUM; i++) {
|
|
|
|
|
if(is_valid_fdd(i)) {
|
|
|
|
|
AppendMenu(media_menu, MF_POPUP | MF_STRING, (UINT_PTR)menus[curr], L"Test");
|
|
|
|
|
media_menu_update_floppy(i);
|
|
|
|
|
}
|
|
|
|
|
curr++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < CDROM_NUM; i++) {
|
|
|
|
|
if(is_valid_cdrom(i)) {
|
|
|
|
|
AppendMenu(media_menu, MF_POPUP | MF_STRING, (UINT_PTR)menus[curr], L"Test");
|
|
|
|
|
media_menu_update_cdrom(i);
|
|
|
|
|
}
|
|
|
|
|
curr++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < ZIP_NUM; i++) {
|
|
|
|
|
if(is_valid_zip(i)) {
|
|
|
|
|
AppendMenu(media_menu, MF_POPUP | MF_STRING, (UINT_PTR)menus[curr], L"Test");
|
|
|
|
|
media_menu_update_zip(i);
|
|
|
|
|
}
|
|
|
|
|
curr++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < MO_NUM; i++) {
|
|
|
|
|
if(is_valid_mo(i)) {
|
|
|
|
|
AppendMenu(media_menu, MF_POPUP | MF_STRING, (UINT_PTR)menus[curr], L"Test");
|
|
|
|
|
media_menu_update_mo(i);
|
|
|
|
|
}
|
|
|
|
|
curr++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Initializes the Media menu in the main menu bar. */
|
|
|
|
|
static void
|
|
|
|
|
media_menu_main_init()
|
|
|
|
|
{
|
|
|
|
|
HMENU hMenu;
|
|
|
|
|
LPWSTR lpMenuName;
|
|
|
|
|
|
|
|
|
|
hMenu = GetMenu(hwndMain);
|
|
|
|
|
media_menu = CreatePopupMenu();
|
|
|
|
|
|
|
|
|
|
/* Get the menu name */
|
|
|
|
|
int len = GetMenuString(hMenu, IDM_MEDIA, NULL, 0, MF_BYCOMMAND);
|
|
|
|
|
lpMenuName = malloc((len + 1) * sizeof(WCHAR));
|
|
|
|
|
GetMenuString(hMenu, IDM_MEDIA, lpMenuName, len + 1, MF_BYCOMMAND);
|
|
|
|
|
|
|
|
|
|
/* Replace the placeholder menu item */
|
|
|
|
|
ModifyMenu(hMenu, IDM_MEDIA, MF_BYCOMMAND | MF_STRING | MF_POPUP, (UINT_PTR)media_menu, lpMenuName);
|
|
|
|
|
|
|
|
|
|
/* Clean up */
|
|
|
|
|
DrawMenuBar(hwndMain);
|
|
|
|
|
free(lpMenuName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
media_menu_init()
|
|
|
|
|
{
|
|
|
|
|
/* Initialize the main menu bar menu */
|
|
|
|
|
media_menu_main_init();
|
|
|
|
|
|
|
|
|
|
/* Initialize the dummy status bar menu. */
|
|
|
|
|
stbar_menu = CreateMenu();
|
|
|
|
|
AppendMenu(stbar_menu, MF_POPUP, (UINT_PTR)media_menu, NULL);
|
|
|
|
|
|
|
|
|
|
/* Load the submenus for each drive type. */
|
|
|
|
|
media_menu_load_submenus();
|
|
|
|
|
|
|
|
|
|
/* Populate the Media and status bar menus. */
|
|
|
|
|
media_menu_reset();
|
2020-04-26 14:19:58 +02:00
|
|
|
}
|
|
|
|
|
|
2020-04-26 15:43:33 +02:00
|
|
|
int
|
|
|
|
|
media_menu_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
{
|
|
|
|
|
int id = 0, ret = 0, wp = 0;
|
|
|
|
|
|
|
|
|
|
id = LOWORD(wParam) & 0x00ff;
|
|
|
|
|
|
|
|
|
|
switch (LOWORD(wParam) & 0xff00) {
|
|
|
|
|
case IDM_FLOPPY_IMAGE_NEW:
|
|
|
|
|
NewFloppyDialogCreate(hwnd, id, 0);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_FLOPPY_IMAGE_EXISTING_WP:
|
|
|
|
|
wp = 1;
|
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
|
case IDM_FLOPPY_IMAGE_EXISTING:
|
2021-03-14 20:35:01 +01:00
|
|
|
ret = file_dlg_st(hwnd, IDS_2109, floppyfns[id], NULL, 0);
|
2020-04-26 15:43:33 +02:00
|
|
|
if (! ret) {
|
2021-03-14 20:35:01 +01:00
|
|
|
floppy_mount(id, openfilestring, wp);
|
2020-04-26 15:43:33 +02:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_FLOPPY_EJECT:
|
2020-04-26 16:59:16 +02:00
|
|
|
floppy_eject(id);
|
2020-04-26 15:43:33 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_FLOPPY_EXPORT_TO_86F:
|
2021-03-14 20:35:01 +01:00
|
|
|
ret = file_dlg_st(hwnd, IDS_2076, floppyfns[id], NULL, 1);
|
2020-04-26 15:43:33 +02:00
|
|
|
if (! ret) {
|
|
|
|
|
plat_pause(1);
|
2021-03-14 20:35:01 +01:00
|
|
|
ret = d86f_export(id, openfilestring);
|
2020-04-26 15:43:33 +02:00
|
|
|
if (!ret)
|
2020-06-19 00:16:05 -03:00
|
|
|
ui_msgbox_header(MBX_ERROR, (wchar_t *) IDS_4108, (wchar_t *) IDS_4115);
|
2020-04-26 15:43:33 +02:00
|
|
|
plat_pause(0);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_CDROM_MUTE:
|
|
|
|
|
cdrom[id].sound_on ^= 1;
|
|
|
|
|
config_save();
|
|
|
|
|
media_menu_update_cdrom(id);
|
|
|
|
|
sound_cd_thread_reset();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_CDROM_EMPTY:
|
|
|
|
|
cdrom_eject(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_CDROM_RELOAD:
|
|
|
|
|
cdrom_reload(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_CDROM_IMAGE:
|
2021-03-14 20:35:01 +01:00
|
|
|
if (!file_dlg_st(hwnd, IDS_2140, cdrom[id].image_path, NULL, 0)) {
|
|
|
|
|
cdrom_mount(id, openfilestring);
|
2020-04-26 15:43:33 +02:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_ZIP_IMAGE_NEW:
|
|
|
|
|
NewFloppyDialogCreate(hwnd, id | 0x80, 0); /* NewZIPDialogCreate */
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_ZIP_IMAGE_EXISTING_WP:
|
|
|
|
|
wp = 1;
|
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
|
case IDM_ZIP_IMAGE_EXISTING:
|
2021-03-14 20:35:01 +01:00
|
|
|
ret = file_dlg_st(hwnd, IDS_2058, zip_drives[id].image_path, NULL, 0);
|
2020-04-26 15:43:33 +02:00
|
|
|
if (! ret)
|
2021-03-14 20:35:01 +01:00
|
|
|
zip_mount(id, openfilestring, wp);
|
2020-04-26 15:43:33 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_ZIP_EJECT:
|
|
|
|
|
zip_eject(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_ZIP_RELOAD:
|
|
|
|
|
zip_reload(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_MO_IMAGE_NEW:
|
2020-07-19 06:07:58 +02:00
|
|
|
NewFloppyDialogCreate(hwnd, id | 0x100, 0); /* NewZIPDialogCreate */
|
2020-04-26 15:43:33 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_MO_IMAGE_EXISTING_WP:
|
|
|
|
|
wp = 1;
|
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
|
case IDM_MO_IMAGE_EXISTING:
|
2021-03-14 20:35:01 +01:00
|
|
|
ret = file_dlg_st(hwnd, IDS_2116, mo_drives[id].image_path, NULL, 0);
|
2020-04-26 15:43:33 +02:00
|
|
|
if (! ret)
|
2021-03-14 20:35:01 +01:00
|
|
|
mo_mount(id, openfilestring, wp);
|
2020-04-26 15:43:33 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_MO_EJECT:
|
|
|
|
|
mo_eject(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case IDM_MO_RELOAD:
|
|
|
|
|
mo_reload(id);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return(1);
|
2020-04-26 17:59:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HMENU
|
|
|
|
|
media_menu_get_floppy(int id)
|
|
|
|
|
{
|
|
|
|
|
return menus[FDD_FIRST + id];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HMENU
|
|
|
|
|
media_menu_get_cdrom(int id)
|
|
|
|
|
{
|
|
|
|
|
return menus[CDROM_FIRST + id];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HMENU
|
|
|
|
|
media_menu_get_zip(int id)
|
|
|
|
|
{
|
|
|
|
|
return menus[ZIP_FIRST + id];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HMENU
|
|
|
|
|
media_menu_get_mo(int id)
|
|
|
|
|
{
|
|
|
|
|
return menus[MO_FIRST + id];
|
2020-05-13 01:39:57 +08:00
|
|
|
}
|