Separated main code from UI and PLATform support code, plus other generally small fixes here and there.

This commit is contained in:
waltje
2017-10-10 03:07:29 -04:00
parent e88899bb3c
commit bd89e66b7b
47 changed files with 924 additions and 872 deletions

View File

@@ -8,13 +8,16 @@
*
* Main emulator include file.
*
* Version: @(#)86box.h 1.0.2 2017/06/04
* Version: @(#)86box.h 1.0.3 2017/10/09
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016-2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
*/
#ifndef BOX_H
# define BOX_H
#ifndef EMU_86BOX_H
# define EMU_86BOX_H
#if defined(ENABLE_BUSLOGIC_LOG) || \
@@ -38,5 +41,8 @@
#define CONFIG_FILE_W L"86box.cfg"
#define NVR_PATH L"nvr"
#define SCREENSHOT_PATH L"screenshots"
#endif /*BOX_H*/
#endif /*EMU_86BOX_H*/

View File

@@ -8,7 +8,7 @@
#
# Modified Makefile for Win32 (MinGW32) environment.
#
# Version: @(#)Makefile.mingw 1.0.54 2017/10/07
# Version: @(#)Makefile.mingw 1.0.55 2017/10/09
#
# Authors: Miran Grca, <mgrca8@gmail.com>
# Fred N. van Kempen, <decwiz@yahoo.com>
@@ -106,19 +106,18 @@ VPATH := $(EXPATH) . cpu \
sound/munt/srchelper \
sound/resid-fp \
scsi video lzf network network/slirp win
PLAT := win/
ifeq ($(X64), y)
CPP := g++.exe -m64
CC := gcc.exe -m64
CPP := g++ -m64
CC := gcc -m64
else
CPP := g++.exe -m32
CC := gcc.exe -m32
CPP := g++ -m32
CC := gcc -m32
endif
WINDRES := windres.exe
WINDRES := windres
DEPS = -MMD -MF $*.d -c $<
# Set up the correct toolchain flags.
OPTS := -DWIN32 -I$(PLAT) $(EXTRAS) $(STUFF)
OPTS := -DWIN32 $(EXTRAS) $(STUFF)
ifdef EXFLAGS
OPTS += $(EXFLAGS)
endif
@@ -295,9 +294,8 @@ USBOBJ := usb.o
endif
SCSIOBJ := scsi.o \
scsi_bios_command.o scsi_bus.o scsi_device.o scsi_disk.o \
scsi_buslogic.o scsi_aha154x.o \
scsi_ncr5380.o
scsi_bus.o scsi_bios_command.o scsi_device.o scsi_disk.o \
scsi_buslogic.o scsi_aha154x.o scsi_ncr5380.o
NETOBJ := network.o \
net_pcap.o \

View File

@@ -44,7 +44,7 @@
* configuration register (CTRL_SPCFG bit set) but have to
* remember that stuff first...
*
* Version: @(#)bugger.c 1.0.6 2017/10/05
* Version: @(#)bugger.c 1.0.7 2017/10/09
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
* Copyright 1989-2017 Fred N. van Kempen.
@@ -55,7 +55,7 @@
#include <wchar.h>
#include "ibm.h"
#include "io.h"
#include "win/win.h"
#include "ui.h"
#include "bugger.h"
@@ -104,7 +104,7 @@ bug_setui(void)
(bug_ledr&0x02)?'R':'r', (bug_ledr&0x01)?'R':'r');
/* Send formatted string to the UI. */
StatusBarSetText(bug_str);
ui_sb_set_text(bug_str);
}

View File

@@ -9,7 +9,7 @@
* Implementation of the CD-ROM drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage.
*
* Version: @(#)cdrom.c 1.0.13 2017/10/08
* Version: @(#)cdrom.c 1.0.14 2017/10/09
*
* Author: Miran Grca, <mgrca8@gmail.com>
*
@@ -30,9 +30,8 @@
#include "../nvr.h"
#include "../disk/hdc.h"
#include "../disk/hdc_ide.h"
#include "../win/win.h"
#include "../win/win_cdrom_ioctl.h"
#include "../win/plat_iodev.h"
#include "../plat.h"
#include "../ui.h"
#include "cdrom.h"
#include "cdrom_image.h"
#include "cdrom_null.h"
@@ -2017,6 +2016,47 @@ static int cdrom_read_dvd_structure(uint8_t id, int format, const uint8_t *packe
}
}
/*SCSI Get Event Status Notification*/
static uint32_t cdrom_get_event_status(uint8_t id, uint8_t *buffer)
{
uint8_t event_code, media_status = 0;
if (buffer[5])
{
media_status = MS_TRAY_OPEN;
if (cdrom_drives[id].handler->stop)
{
cdrom_drives[id].handler->stop(id);
}
}
else
{
media_status = MS_MEDIA_PRESENT;
}
event_code = MEC_NO_CHANGE;
if (media_status != MS_TRAY_OPEN)
{
if (!buffer[4])
{
event_code = MEC_NEW_MEDIA;
cdrom_drives[id].handler->load(id);
}
else if (buffer[4]==2)
{
event_code = MEC_EJECT_REQUESTED;
cdrom_drives[id].handler->eject(id);
}
}
buffer[4] = event_code;
buffer[5] = media_status;
buffer[6] = 0;
buffer[7] = 0;
return 8;
}
void cdrom_insert(uint8_t id)
{
cdrom[id].unit_attention = 1;
@@ -2120,15 +2160,6 @@ skip_ready_check:
}
/* Next it's time for NOT READY. */
if (!ready)
{
cdrom[id].media_status = MEC_MEDIA_REMOVAL;
}
else
{
cdrom[id].media_status = (cdrom[id].unit_attention) ? MEC_NEW_MEDIA : MEC_NO_CHANGE;
}
if ((cdrom_command_flags[cdb[0]] & CHECK_READY) && !ready)
{
cdrom_log("CD-ROM %i: Not ready (%02X)\n", id, cdb[0]);
@@ -2569,11 +2600,11 @@ cdrom_readtoc_fallback:
cdrom[id].all_blocks_total = cdrom[id].block_total;
if (cdrom[id].packet_status != CDROM_PHASE_COMPLETE)
{
StatusBarUpdateIcon(SB_CDROM | id, 1);
ui_sb_update_icon(SB_CDROM | id, 1);
}
else
{
StatusBarUpdateIcon(SB_CDROM | id, 0);
ui_sb_update_icon(SB_CDROM | id, 0);
}
return;
@@ -2833,12 +2864,7 @@ cdrom_readtoc_fallback:
if (gesn_cdb->class & (1 << GESN_MEDIA))
{
gesn_event_header->notification_class |= GESN_MEDIA;
cdbufferb[4] = cdrom[id].media_status; /* Bits 7-4 = Reserved, Bits 4-1 = Media Status */
cdbufferb[5] = 1; /* Power Status (1 = Active) */
cdbufferb[6] = 0;
cdbufferb[7] = 0;
used_len = 8;
used_len = cdrom_get_event_status(id, cdbufferb);
}
else
{
@@ -2847,8 +2873,6 @@ cdrom_readtoc_fallback:
}
gesn_event_header->len = used_len - sizeof(*gesn_event_header);
memcpy(cdbufferb, gesn_event_header, 4);
if (SCSI_BufferLength == -1)
{
SCSI_BufferLength = used_len;
@@ -3790,7 +3814,7 @@ void cdrom_phase_callback(uint8_t id)
cdrom[id].status = READY_STAT;
cdrom[id].phase = 3;
cdrom[id].packet_status = 0xFF;
StatusBarUpdateIcon(SB_CDROM | id, 0);
ui_sb_update_icon(SB_CDROM | id, 0);
cdrom_irq_raise(id);
return;
case CDROM_PHASE_DATA_OUT:
@@ -3805,7 +3829,7 @@ void cdrom_phase_callback(uint8_t id)
cdrom[id].packet_status = CDROM_PHASE_COMPLETE;
cdrom[id].status = READY_STAT;
cdrom[id].phase = 3;
StatusBarUpdateIcon(SB_CDROM | id, 0);
ui_sb_update_icon(SB_CDROM | id, 0);
cdrom_irq_raise(id);
return;
case CDROM_PHASE_DATA_IN:
@@ -3820,7 +3844,7 @@ void cdrom_phase_callback(uint8_t id)
cdrom[id].packet_status = CDROM_PHASE_COMPLETE;
cdrom[id].status = READY_STAT;
cdrom[id].phase = 3;
StatusBarUpdateIcon(SB_CDROM | id, 0);
ui_sb_update_icon(SB_CDROM | id, 0);
cdrom_irq_raise(id);
return;
case CDROM_PHASE_ERROR:

View File

@@ -9,10 +9,11 @@
* Implementation of the CD-ROM null interface for unmounted
* guest CD-ROM drives.
*
* Version: @(#)cdrom_null.c 1.0.3 2017/09/24
* Version: @(#)cdrom_null.c 1.0.4 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2008-2016 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -22,130 +23,167 @@
#include <wchar.h>
#include "../ibm.h"
#include "cdrom.h"
#include "../win/win_cdrom_ioctl.h"
static CDROM null_cdrom;
static int null_ready(uint8_t id)
static int
null_ready(uint8_t id)
{
return 0;
return(0);
}
/* Always return 0, the contents of a null CD-ROM drive never change. */
static int null_medium_changed(uint8_t id)
static int
null_medium_changed(uint8_t id)
{
return 0;
return(0);
}
static uint8_t null_getcurrentsubchannel(uint8_t id, uint8_t *b, int msf)
static uint8_t
null_getcurrentsubchannel(uint8_t id, uint8_t *b, int msf)
{
return 0x13;
return(0x13);
}
static void null_eject(uint8_t id)
static void
null_eject(uint8_t id)
{
}
static void null_load(uint8_t id)
static void
null_load(uint8_t id)
{
}
static int null_readsector_raw(uint8_t id, uint8_t *buffer, int sector, int ismsf, int cdrom_sector_type, int cdrom_sector_flags, int *len)
static int
null_readsector_raw(uint8_t id, uint8_t *buffer, int sector, int ismsf, int cdrom_sector_type, int cdrom_sector_flags, int *len)
{
*len = 0;
return 0;
*len = 0;
return(0);
}
static int null_readtoc(uint8_t id, unsigned char *b, unsigned char starttrack, int msf, int maxlen, int single)
static int
null_readtoc(uint8_t id, uint8_t *b, uint8_t starttrack, int msf, int maxlen, int single)
{
return 0;
return(0);
}
static int null_readtoc_session(uint8_t id, unsigned char *b, int msf, int maxlen)
static int
null_readtoc_session(uint8_t id, uint8_t *b, int msf, int maxlen)
{
return 0;
return(0);
}
static int null_readtoc_raw(uint8_t id, unsigned char *b, int maxlen)
static int
null_readtoc_raw(uint8_t id, uint8_t *b, int maxlen)
{
return 0;
return(0);
}
static uint32_t null_size(uint8_t id)
static uint32_t
null_size(uint8_t id)
{
return 0;
return(0);
}
static int null_status(uint8_t id)
static int
null_status(uint8_t id)
{
return CD_STATUS_EMPTY;
return(CD_STATUS_EMPTY);
}
void cdrom_null_reset(uint8_t id)
void
cdrom_null_reset(uint8_t id)
{
}
void cdrom_set_null_handler(uint8_t id);
int cdrom_null_open(uint8_t id, char d)
int
cdrom_null_open(uint8_t id, char d)
{
cdrom_set_null_handler(id);
return 0;
cdrom_set_null_handler(id);
return(0);
}
void null_close(uint8_t id)
void
null_close(uint8_t id)
{
}
static void null_exit(uint8_t id)
static
void null_exit(uint8_t id)
{
}
static int null_is_track_audio(uint8_t id, uint32_t pos, int ismsf)
static int
null_is_track_audio(uint8_t id, uint32_t pos, int ismsf)
{
return 0;
return(0);
}
static int null_pass_through(uint8_t id, uint8_t *in_cdb, uint8_t *b, uint32_t *len)
static int
null_pass_through(uint8_t id, uint8_t *in_cdb, uint8_t *b, uint32_t *len)
{
return 0;
return(0);
}
static int null_media_type_id(uint8_t id)
static int
null_media_type_id(uint8_t id)
{
return 0x70;
return(0x70);
}
void cdrom_set_null_handler(uint8_t id)
void
cdrom_set_null_handler(uint8_t id)
{
cdrom_drives[id].handler = &null_cdrom;
cdrom_drives[id].host_drive = 0;
memset(cdrom_image[id].image_path, 0, sizeof(cdrom_image[id].image_path));
cdrom_drives[id].handler = &null_cdrom;
cdrom_drives[id].host_drive = 0;
memset(cdrom_image[id].image_path, 0, sizeof(cdrom_image[id].image_path));
}
static CDROM null_cdrom =
{
null_ready,
null_medium_changed,
null_media_type_id,
NULL,
NULL,
null_readtoc,
null_readtoc_session,
null_readtoc_raw,
null_getcurrentsubchannel,
null_pass_through,
null_readsector_raw,
NULL,
null_load,
null_eject,
NULL,
NULL,
null_size,
null_status,
null_is_track_audio,
NULL,
null_exit
static CDROM null_cdrom = {
null_ready,
null_medium_changed,
null_media_type_id,
NULL,
NULL,
null_readtoc,
null_readtoc_session,
null_readtoc_raw,
null_getcurrentsubchannel,
null_pass_through,
null_readsector_raw,
NULL,
null_load,
null_eject,
NULL,
NULL,
null_size,
null_status,
null_is_track_audio,
NULL,
null_exit
};

View File

@@ -8,7 +8,7 @@
*
* Configuration file handler.
*
* Version: @(#)config.c 1.0.14 2017/10/07
* Version: @(#)config.c 1.0.15 2017/10/09
*
* Authors: Sarah Walker,
* Miran Grca, <mgrca8@gmail.com>
@@ -47,15 +47,15 @@
#include "mouse.h"
#include "network/network.h"
#include "scsi/scsi.h"
#include "win/plat_joystick.h"
#include "win/plat_midi.h"
#include "sound/midi.h"
#include "sound/snd_dbopl.h"
#include "sound/snd_mpu401.h"
#include "sound/snd_opl.h"
#include "sound/sound.h"
#include "video/video.h"
#include "win/win.h"
#include "ui.h"
#include "win/plat_joystick.h"
#include "win/plat_midi.h"
typedef struct _list_ {
@@ -442,13 +442,13 @@ load_general(void)
window_w = window_h = window_x = window_y = 0;
}
#ifndef __unix
#ifdef USE_LANGUAGE
/*
* Currently, 86Box is English (US) only, but in the future
* (version 1.30 at the earliest) other languages will be
* added, therefore it is better to future-proof the code.
*/
dwLanguage = config_get_hex16(cat, "language", 0x0409);
plat_language = config_get_hex16(cat, "language", 0x0409);
#endif
}
@@ -633,9 +633,9 @@ load_network(void)
if (p != NULL) {
if ((network_dev_to_id(p) == -1) || (network_ndev == 1)) {
if ((network_ndev == 1) && strcmp(network_pcap, "none")) {
msgbox_error(hwndMain, IDS_2140);
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_2140);
} else if (network_dev_to_id(p) == -1) {
msgbox_error(hwndMain, IDS_2141);
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_2141);
}
strcpy(network_pcap, "none");
@@ -1110,8 +1110,8 @@ config_load(wchar_t *fn)
if (! config_read(fn)) {
cpu = 0;
#ifndef __unix
dwLanguage = 0x0409;
#ifdef USE_LANGUAGE
plat_language = 0x0409;
#endif
scale = 1;
vid_api = 1;
@@ -1218,11 +1218,11 @@ save_general(void)
config_delete_var(cat, "window_coordinates");
}
#ifndef __unix
if (dwLanguage == 0x0409)
#ifdef USE_LANGUAGE
if (plat_language == 0x0409)
config_delete_var(cat, "language");
else
config_set_hex16(cat, "language", dwLanguage);
config_set_hex16(cat, "language", plat_language);
#endif
delete_section_if_empty(cat);

View File

@@ -8,11 +8,12 @@
*
* Driver for the ESDI controller (WD1007-vse1) for PC/AT.
*
* Version: @(#)hdc_esdi_at.c 1.0.3 2017/10/05
* Version: @(#)hdc_esdi_at.c 1.0.4 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
@@ -32,7 +33,7 @@
#include "../pic.h"
#include "../rom.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdc.h"
#include "hdd.h"
@@ -514,7 +515,7 @@ esdi_callback(void *priv)
esdi->pos = 0;
esdi->status = STAT_DRQ | STAT_READY | STAT_DSC;
irq_raise(esdi);
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
break;
case CMD_WRITE:
@@ -549,7 +550,7 @@ esdi_callback(void *priv)
} else {
esdi->status = STAT_READY | STAT_DSC;
}
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
break;
case CMD_VERIFY:
@@ -575,7 +576,7 @@ esdi_callback(void *priv)
break;
}
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
next_sector(esdi);
esdi->secount = (esdi->secount - 1) & 0xff;
if (esdi->secount)
@@ -609,7 +610,7 @@ esdi_callback(void *priv)
}
esdi->status = STAT_READY | STAT_DSC;
irq_raise(esdi);
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
break;
case CMD_DIAGNOSE:
@@ -737,7 +738,7 @@ esdi_callback(void *priv)
break;
}
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 0);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
}

View File

@@ -52,10 +52,11 @@
* however, are auto-configured by the system software as
* shown above.
*
* Version: @(#)hdc_esdi_mca.c 1.0.5 2017/10/05
* Version: @(#)hdc_esdi_mca.c 1.0.6 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2017 Fred N. van Kempen.
*/
@@ -73,7 +74,7 @@
#include "../pic.h"
#include "../rom.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdc.h"
#include "hdd.h"
@@ -326,7 +327,7 @@ esdi_callback(void *priv)
if (dev->rba >= drive->sectors)
fatal("Read past end of drive\n");
hdd_image_read(drive->hdd_num, dev->rba, 1, (uint8_t *)dev->data);
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
}
while (dev->data_pos < 256) {
@@ -407,11 +408,11 @@ esdi_callback(void *priv)
hdd_image_write(drive->hdd_num, dev->rba, 1, (uint8_t *)dev->data);
dev->rba++;
dev->sector_pos++;
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
dev->data_pos = 0;
}
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 0);
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
dev->status = STATUS_CMD_IN_PROGRESS;
dev->cmd_state = 2;

View File

@@ -9,10 +9,11 @@
* Implementation of the IDE emulation for hard disks and ATAPI
* CD-ROM devices.
*
* Version: @(#)hdc_ide.c 1.0.10 2017/10/05
* Version: @(#)hdc_ide.c 1.0.11 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -30,7 +31,7 @@
#include "../device.h"
#include "../cdrom/cdrom.h"
#include "../scsi/scsi.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdc.h"
#include "hdc_ide.h"
#include "hdd.h"
@@ -1297,7 +1298,7 @@ uint32_t ide_read_data(int ide_board, int length)
}
else
{
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
}
}
}
@@ -1645,7 +1646,7 @@ void callbackide(int ide_board)
ide_irq_raise(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
return;
case WIN_READ_DMA:
@@ -1692,12 +1693,12 @@ void callbackide(int ide_board)
ide_next_sector(ide);
ide->atastat = BUSY_STAT;
idecallback[ide_board]=6LL*IDE_TIME;
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
}
else
{
ide_irq_raise(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
}
}
}
@@ -1750,7 +1751,7 @@ void callbackide(int ide_board)
ide->blockcount = 0;
}
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
return;
case WIN_WRITE:
@@ -1771,12 +1772,12 @@ void callbackide(int ide_board)
ide->atastat = DRQ_STAT | READY_STAT | DSC_STAT;
ide->pos=0;
ide_next_sector(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
}
else
{
ide->atastat = READY_STAT | DSC_STAT;
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
}
return;
@@ -1810,12 +1811,12 @@ void callbackide(int ide_board)
ide_next_sector(ide);
ide->atastat = BUSY_STAT;
idecallback[ide_board]=6LL*IDE_TIME;
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
}
else
{
ide_irq_raise(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
}
}
}
@@ -1844,12 +1845,12 @@ void callbackide(int ide_board)
ide->atastat = DRQ_STAT | READY_STAT | DSC_STAT;
ide->pos=0;
ide_next_sector(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
}
else
{
ide->atastat = READY_STAT | DSC_STAT;
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
}
return;
@@ -1866,7 +1867,7 @@ void callbackide(int ide_board)
ide->pos=0;
ide->atastat = READY_STAT | DSC_STAT;
ide_irq_raise(ide);
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
return;
case WIN_FORMAT:
@@ -1883,7 +1884,7 @@ void callbackide(int ide_board)
ide->atastat = READY_STAT | DSC_STAT;
ide_irq_raise(ide);
/* StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1); */
/* ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1); */
return;
case WIN_DRIVE_DIAGNOSTICS:

View File

@@ -12,10 +12,11 @@
* based design. Most cards were WD1003-WA2 or -WAH, where the
* -WA2 cards had a floppy controller as well (to save space.)
*
* Version: @(#)hdd_mfm_at.c 1.0.5 2017/10/05
* Version: @(#)hdd_mfm_at.c 1.0.6 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2017 Fred N. van Kempen.
*/
@@ -29,7 +30,7 @@
#include "../io.h"
#include "../pic.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdc.h"
#include "hdd.h"
@@ -462,7 +463,7 @@ mfm_readw(uint16_t port, void *priv)
mfm->callback = 6LL*MFM_TIME;
timer_update_outstanding();
} else {
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
}
}
}
@@ -562,7 +563,7 @@ do_callback(void *priv)
mfm->reset = 0;
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
return;
}
@@ -596,7 +597,7 @@ do_callback(void *priv)
mfm->pos = 0;
mfm->status = STAT_DRQ|STAT_READY|STAT_DSC;
irq_raise(mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
break;
case CMD_WRITE:
@@ -621,9 +622,9 @@ do_callback(void *priv)
mfm->status |= STAT_DRQ;
mfm->pos = 0;
next_sector(mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
} else {
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
}
irq_raise(mfm);
break;
@@ -637,7 +638,7 @@ do_callback(void *priv)
mfm->pos = 0;
mfm->status = STAT_READY|STAT_DSC;
irq_raise(mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
break;
case CMD_FORMAT:
@@ -657,7 +658,7 @@ do_callback(void *priv)
mfm->status = STAT_READY|STAT_DSC;
irq_raise(mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
break;
case CMD_DIAGNOSE:
@@ -734,7 +735,7 @@ mfm_init(device_t *info)
timer_add(do_callback, &mfm->callback, &mfm->callback, mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
return(mfm);
}
@@ -754,13 +755,14 @@ mfm_close(void *priv)
free(mfm);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
}
device_t mfm_at_wd1003_device = {
"WD1003 AT MFM/RLL Controller",
DEVICE_ISA | DEVICE_AT, 0,
DEVICE_ISA | DEVICE_AT,
0,
mfm_init, mfm_close, NULL,
NULL, NULL, NULL, NULL, NULL
};

View File

@@ -41,10 +41,11 @@
* Since all controllers (including the ones made by DTC) use
* (mostly) the same API, we keep them all in this module.
*
* Version: @(#)hdd_mfm_xt.c 1.0.7 2017/10/05
* Version: @(#)hdd_mfm_xt.c 1.0.8 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2017 Fred N. van Kempen.
*/
@@ -61,7 +62,7 @@
#include "../pic.h"
#include "../rom.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdc.h"
#include "hdd.h"
@@ -403,7 +404,7 @@ mfm_callback(void *priv)
mfm_complete(mfm);
StatusBarUpdateIcon(SB_HDD | HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
break;
default:
@@ -448,7 +449,7 @@ mfm_callback(void *priv)
hdd_image_read(drive->hdd_num, addr, 1,
(uint8_t *) mfm->sector_buf);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
if (mfm->irq_dma_mask & DMA_ENA)
mfm->callback = MFM_TIME;
@@ -493,7 +494,7 @@ mfm_callback(void *priv)
hdd_image_read(drive->hdd_num, addr, 1,
(uint8_t *) mfm->sector_buf);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
mfm->state = STATE_SEND_DATA;
@@ -505,7 +506,7 @@ mfm_callback(void *priv)
}
} else {
mfm_complete(mfm);
StatusBarUpdateIcon(SB_HDD | HDD_BUS_MFM, 0);
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
}
break;
@@ -566,7 +567,7 @@ mfm_callback(void *priv)
hdd_image_write(drive->hdd_num, addr, 1,
(uint8_t *) mfm->sector_buf);
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
next_sector(mfm);
mfm->data_pos = 0;
@@ -857,7 +858,8 @@ xebec_available(void)
device_t mfm_xt_xebec_device = {
"IBM PC Fixed Disk Adapter",
0, 0,
DEVICE_ISA,
0,
xebec_init, mfm_close, NULL,
xebec_available, NULL, NULL, NULL,
NULL
@@ -908,7 +910,8 @@ dtc5150x_available(void)
device_t mfm_xt_dtc5150x_device = {
"DTC 5150X",
DEVICE_ISA, 0,
DEVICE_ISA,
0,
dtc5150x_init, mfm_close, NULL,
dtc5150x_available, NULL, NULL, NULL,
NULL

View File

@@ -21,11 +21,12 @@
* already on their way out, the newer IDE standard based on the
* PC/AT controller and 16b design became the IDE we now know.
*
* Version: @(#)hdc_xtide.c 1.0.7 2017/10/04
* Version: @(#)hdc_xtide.c 1.0.8 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.

View File

@@ -8,7 +8,7 @@
*
* Common code to handle all sorts of hard disk images.
*
* Version: @(#)hdd.c 1.0.3 2017/10/07
* Version: @(#)hdd.c 1.0.4 2017/10/09
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
@@ -21,10 +21,7 @@
#include <string.h>
#include <wchar.h>
#include "../ibm.h"
#include "../cpu/cpu.h"
#include "../device.h"
#include "../machine/machine.h"
#include "../win/win.h"
#include "../ui.h"
#include "hdd.h"
@@ -50,7 +47,7 @@ hdd_string_to_bus(char *str, int cdrom)
if (! strcmp(str, "mfm")) {
if (cdrom) {
no_cdrom:
msgbox_error(hwndMain, IDS_4114);
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_4114);
return(0);
}
@@ -113,7 +110,7 @@ no_cdrom:
}
if (! strcmp(str, "usb"))
msgbox_error(hwndMain, IDS_4110);
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_4110);
return(0);
}

View File

@@ -9,7 +9,7 @@
* Implementation of the NEC uPD-765 and compatible floppy disk
* controller.
*
* Version: @(#)fdc.c 1.0.4 2017/10/05
* Version: @(#)fdc.c 1.0.5 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -28,7 +28,7 @@
#include "../dma.h"
#include "../pic.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "floppy.h"
#include "fdc.h"
#include "fdd.h"
@@ -678,7 +678,7 @@ void fdc_write(uint16_t addr, uint8_t val, void *priv)
floppytime = 128LL * (1LL << TIMER_SHIFT);
timer_update_outstanding();
floppyint=-1;
StatusBarUpdateIcon(SB_FLOPPY | 0, 0);
ui_sb_update_icon(SB_FLOPPY | 0, 0);
fdc_reset();
}
if (!fdd_get_flags(0))
@@ -715,7 +715,7 @@ void fdc_write(uint16_t addr, uint8_t val, void *priv)
for (i = 0; i < FDD_NUM; i++)
{
StatusBarUpdateIcon(SB_FLOPPY | i, 0);
ui_sb_update_icon(SB_FLOPPY | i, 0);
}
fdc_reset();
@@ -988,7 +988,7 @@ bad_command:
fdc.stat = 0x50;
}
floppytime = 0LL;
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
fdc.inread = 1;
break;
@@ -1033,7 +1033,7 @@ bad_command:
floppy_writesector(fdc.drive, fdc.sector, fdc.params[1], fdc.head, fdc.rate, fdc.params[4]);
floppytime = 0LL;
fdc.written = 0;
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
fdc.pos = 0;
if (fdc.pcjr)
fdc.stat = 0xb0;
@@ -1066,7 +1066,7 @@ bad_command:
floppy_comparesector(fdc.drive, fdc.sector, fdc.params[1], fdc.head, fdc.rate, fdc.params[4]);
floppytime = 0LL;
fdc.written = 0;
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
fdc.pos = 0;
if (fdc.pcjr || !fdc.dma)
{
@@ -1110,7 +1110,7 @@ bad_command:
fdc.stat = 0x50;
}
floppytime = 0LL;
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
fdc.inread = 1;
break;
@@ -1467,7 +1467,7 @@ void fdc_poll_common_finish(int compare, int st5)
fdc.res[9]=fdc.sector;
fdc.res[10]=fdc.params[4];
fdc_log("Read/write finish (%02X %02X %02X %02X %02X %02X %02X)\n" , fdc.res[4], fdc.res[5], fdc.res[6], fdc.res[7], fdc.res[8], fdc.res[9], fdc.res[10]);
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 0);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 0);
paramstogo=7;
}
@@ -1513,7 +1513,7 @@ void fdc_callback(void *priv)
return;
case 2: /*Read track*/
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
fdc.eot[fdc.drive]--;
fdc.read_track_sector.id.r++;
if (!fdc.eot[fdc.drive] || fdc.tc)
@@ -1673,7 +1673,7 @@ void fdc_callback(void *priv)
{
fdc.sector++;
}
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 1);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 1);
switch (floppyint)
{
case 5:
@@ -1912,7 +1912,7 @@ void fdc_error(int st5, int st6)
fdc.res[10]=0;
break;
}
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 0);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 0);
paramstogo=7;
}
@@ -2143,7 +2143,7 @@ void fdc_sectorid(uint8_t track, uint8_t side, uint8_t sector, uint8_t size, uin
fdc.res[8]=side;
fdc.res[9]=sector;
fdc.res[10]=size;
StatusBarUpdateIcon(SB_FLOPPY | fdc.drive, 0);
ui_sb_update_icon(SB_FLOPPY | fdc.drive, 0);
paramstogo=7;
}
@@ -2199,7 +2199,7 @@ void fdc_hard_reset()
for (i = 0; i < FDD_NUM; i++)
{
StatusBarUpdateIcon(SB_FLOPPY | i, 0);
ui_sb_update_icon(SB_FLOPPY | i, 0);
}
}

View File

@@ -9,10 +9,11 @@
* Generic floppy disk interface that communicates with the
* other handlers.
*
* Version: @(#)floppy.c 1.0.5 2017/10/05
* Version: @(#)floppy.c 1.0.6 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -25,7 +26,7 @@
#include "../rom.h"
#include "../config.h"
#include "../timer.h"
#include "../win/win.h"
#include "../ui.h"
#include "floppy.h"
#include "floppy_86f.h"
#include "floppy_fdi.h"
@@ -158,7 +159,7 @@ void floppy_load(int drive, wchar_t *fn)
drive_empty[drive] = 1;
fdd_set_head(real_drive(drive), 0);
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
StatusBarUpdateIconState(drive, 1);
ui_sb_update_icon_state(drive, 1);
}
void floppy_close(int drive)
@@ -177,7 +178,7 @@ void floppy_close(int drive)
drives[drive].format = NULL;
drives[drive].byteperiod = NULL;
drives[drive].stop = NULL;
StatusBarUpdateIconState(drive, 1);
ui_sb_update_icon_state(drive, 1);
}
int floppy_notfound=0;

View File

@@ -10,7 +10,7 @@
* data in the form of FM/MFM-encoded transitions) which also
* forms the core of the emulator's floppy disk emulation.
*
* Version: @(#)floppy_86f.c 1.0.5 2017/10/05
* Version: @(#)floppy_86f.c 1.0.6 2017/10/09
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2016,2017 Miran Grca.
@@ -28,7 +28,7 @@
#include "../dma.h"
#include "../nvr.h"
#include "../random.h"
#include "../win/win.h"
#include "../ui.h"
#include "floppy.h"
#include "fdc.h"
#include "fdd.h"
@@ -3425,7 +3425,7 @@ void d86f_load(int drive, wchar_t *fn)
}
fclose(d86f[drive].f);
d86f[drive].f = NULL;
StatusBarUpdateIconState(drive, 1);
ui_sb_update_icon_state(drive, 1);
return;
}
else

View File

@@ -8,10 +8,11 @@
*
* Host to guest keyboard interface and keyboard scan code sets.
*
* Version: @(#)keyboard.c 1.0.2 2017/09/24
* Version: @(#)keyboard.c 1.0.3 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -20,7 +21,7 @@
#include <string.h>
#include <wchar.h>
#include "ibm.h"
#include "plat_keyboard.h"
#include "win/plat_keyboard.h"
#include "keyboard.h"

View File

@@ -809,7 +809,10 @@ machine_ps2_common_init(machine_t *model)
machine_common_init(model);
#if 0
/* Already done in pc.c. */
mem_add_bios();
#endif
dma16_init();
ps2_dma_init();
keyboard_at_init();

View File

@@ -8,12 +8,13 @@
*
* Common driver module for MOUSE devices.
*
* Version: @(#)mouse.c 1.0.8 2017/09/24
* Version: @(#)mouse.c 1.0.9 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* TheCollector1995,
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2008-2017 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -22,7 +23,6 @@
#include <string.h>
#include <wchar.h>
#include "ibm.h"
#include "cpu/cpu.h"
#include "device.h"
#include "mouse.h"
#include "machine/machine.h"

View File

@@ -6,7 +6,7 @@
#include "ibm.h"
#include "keyboard_at.h"
#include "mouse.h"
#include "plat_mouse.h"
#include "win/plat_mouse.h"
int mouse_scan = 0;

View File

@@ -10,7 +10,7 @@
*
* NOTE: The file will also implement an NE1000 for 8-bit ISA systems.
*
* Version: @(#)net_ne2000.c 1.0.17 2017/10/07
* Version: @(#)net_ne2000.c 1.0.18 2017/10/09
*
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Peter Grehan, grehan@iprg.nokia.com>
@@ -18,6 +18,7 @@
*
* Based on @(#)ne2k.cc v1.56.2.1 2004/02/02 22:37:22 cbothamy
* Portions Copyright (C) 2002 MandrakeSoft S.A.
* Copyright 2017 Fred N. van Kempen.
*/
#include <stdio.h>
#include <stdint.h>
@@ -35,18 +36,14 @@
#include "../pic.h"
#include "../random.h"
#include "../device.h"
#include "../win/win.h"
#include "../ui.h"
#include "network.h"
#include "net_ne2000.h"
#include "bswap.h"
/* ROM BIOS file paths. */
#ifdef DEV_BRANCH
#ifdef USE_NE1000
#define ROM_PATH_NE1000 L"roms/network/ne1000/ne1000.rom"
#endif
#endif
#define ROM_PATH_NE2000 L"roms/network/ne2000/ne2000.rom"
#define ROM_PATH_RTL8029 L"roms/network/rtl8029as/rtl8029as.rom"
@@ -1675,7 +1672,7 @@ mcast_index(const void *dst)
static void
nic_tx(nic_t *dev, uint32_t val)
{
StatusBarUpdateIcon(SB_NETWORK, 1);
ui_sb_update_icon(SB_NETWORK, 1);
dev->CR.tx_packet = 0;
dev->TSR.tx_ok = 1;
@@ -1686,7 +1683,7 @@ nic_tx(nic_t *dev, uint32_t val)
nic_interrupt(dev, 1);
dev->tx_timer_active = 0;
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
}
@@ -1707,7 +1704,7 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
int idx, nextpage;
int endbytes;
StatusBarUpdateIcon(SB_NETWORK, 1);
ui_sb_update_icon(SB_NETWORK, 1);
if (io_len != 60)
nelog(2, "%s: rx_frame with length %d\n", dev->name, io_len);
@@ -1738,14 +1735,14 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
) {
nelog(1, "%s: no space\n", dev->name);
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
return;
}
if ((io_len < 40/*60*/) && !dev->RCR.runts_ok) {
nelog(1, "%s: rejected small packet, length %d\n", dev->name, io_len);
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
return;
}
@@ -1767,7 +1764,7 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
if (! dev->RCR.broadcast) {
nelog(2, "%s: RX BC disabled\n", dev->name);
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
return;
}
}
@@ -1780,7 +1777,7 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
nelog(2, "%s: RX MC disabled\n", dev->name);
#endif
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
return;
}
@@ -1789,7 +1786,7 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
if (! (dev->mchash[idx>>3] & (1<<(idx&0x7)))) {
nelog(2, "%s: RX MC not listed\n", dev->name);
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
return;
}
}
@@ -1835,7 +1832,7 @@ nic_rx(void *priv, uint8_t *buf, int io_len)
if (dev->IMR.rx_inte)
nic_interrupt(dev, 1);
StatusBarUpdateIcon(SB_NETWORK, 0);
ui_sb_update_icon(SB_NETWORK, 0);
}
@@ -1894,8 +1891,7 @@ nic_init(device_t *info)
dev->board = info->local;
rom = NULL;
switch(dev->board) {
#ifdef DEV_BRANCH
#ifdef USE_NE1000
#if defined(DEV_BRANCH) && defined(USE_NE1000)
case NE2K_NE1000:
strcpy(dev->name, "NE1000");
dev->maclocal[0] = 0x00; /* 00:00:D8 (NE1000 ISA OID) */
@@ -1903,7 +1899,6 @@ nic_init(device_t *info)
dev->maclocal[2] = 0xD8;
rom = ROM_PATH_NE1000;
break;
#endif
#endif
case NE2K_NE2000:
@@ -2051,6 +2046,8 @@ nic_init(device_t *info)
nelog(1, "%s: %s attached IO=0x%X IRQ=%d\n", dev->name,
dev->is_pci?"PCI":"ISA", dev->base_address, dev->base_irq);
ui_sb_update_icon(SB_NETWORK, 0);
return(dev);
}
@@ -2071,8 +2068,7 @@ nic_close(void *priv)
}
#ifdef DEV_BRANCH
#ifdef USE_NE1000
#if defined(DEV_BRANCH) && defined(USE_NE1000)
static device_config_t ne1000_config[] =
{
{
@@ -2146,7 +2142,6 @@ static device_config_t ne1000_config[] =
}
};
#endif
#endif
static device_config_t ne2000_config[] =
{
@@ -2241,22 +2236,20 @@ static device_config_t rtl8029as_config[] =
};
#ifdef DEV_BRANCH
#ifdef USE_NE1000
#if defined(DEV_BRANCH) && defined(USE_NE1000)
device_t ne1000_device = {
"Novell NE1000",
DEVICE_ISA,
0,
NE2K_NE1000,
nic_init, nic_close, NULL,
NULL, NULL, NULL, NULL,
ne1000_config
};
#endif
#endif
device_t ne2000_device = {
"Novell NE2000",
DEVICE_ISA | DEVICE_AT,
DEVICE_AT,
NE2K_NE2000,
nic_init, nic_close, NULL,
NULL, NULL, NULL, NULL,

View File

@@ -8,7 +8,7 @@
*
* Handle WinPcap library processing.
*
* Version: @(#)net_pcap.c 1.0.6 2017/09/24
* Version: @(#)net_pcap.c 1.0.7 2017/10/09
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
*/
@@ -21,9 +21,9 @@
#include "../ibm.h"
#include "../config.h"
#include "../device.h"
#include "network.h"
#include "../win/plat_dynld.h"
#include "../win/plat_thread.h"
#include "network.h"
static void *pcap_handle; /* handle to WinPcap DLL */

View File

@@ -8,7 +8,7 @@
*
* Handle SLiRP library processing.
*
* Version: @(#)net_slirp.c 1.0.5 2017/09/24
* Version: @(#)net_slirp.c 1.0.6 2017/10/09
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
*/
@@ -22,8 +22,8 @@
#include "../ibm.h"
#include "../config.h"
#include "../device.h"
#include "network.h"
#include "../win/plat_thread.h"
#include "network.h"
static queueADT slirpq; /* SLiRP library handle */

View File

@@ -12,9 +12,11 @@
* it should be malloc'ed and then linked to the NETCARD def.
* Will be done later.
*
* Version: @(#)network.c 1.0.12 2017/10/04
* Version: @(#)network.c 1.0.13 2017/10/09
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2017 Fred N. van Kempen.
*/
#include <stdio.h>
#include <stdint.h>
@@ -23,7 +25,7 @@
#include <wchar.h>
#include "../ibm.h"
#include "../device.h"
#include "../win/plat_ui.h"
#include "../ui.h"
#include "network.h"
#include "net_ne2000.h"
@@ -31,15 +33,13 @@
static netcard_t net_cards[] = {
{ "None", "none", NULL,
NULL, NULL },
#ifdef DEV_BRANCH
#ifdef USE_NE1000
{ "[ISA] Novell NE1000", "ne1k", &ne1000_device,
#if defined(DEV_BRANCH) && defined(USE_NE1000)
{ "Novell NE1000", "ne1k", &ne1000_device,
NULL, NULL },
#endif
#endif
{ "[ISA] Novell NE2000", "ne2k", &ne2000_device,
{ "Novell NE2000", "ne2k", &ne2000_device,
NULL, NULL },
{ "[PCI] Realtek RTL8029AS","ne2kpci", &rtl8029as_device,
{ "Realtek RTL8029AS", "ne2kpci", &rtl8029as_device,
NULL, NULL },
{ "", "", NULL,
NULL, NULL }
@@ -115,7 +115,7 @@ network_attach(void *dev, uint8_t *mac, NETRXCB rx)
case NET_TYPE_PCAP:
ret = network_pcap_setup(mac, rx, dev);
if (ret < 0) {
plat_msgbox_error(IDS_2139);
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_2139);
network_type = NET_TYPE_NONE;
}
break;

View File

@@ -10,16 +10,18 @@
*
* Based on the "libpcap" examples.
*
* Version: @(#)pcap_if.c 1.0.3 2017/06/04
* Version: @(#)pcap_if.c 1.0.4 2017/10/09
*
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2017 Fred N. van Kempen.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
#include <pcap.h>
#include "plat_dynld.h"
#include "../win/plat_dynld.h"
static void *pcap_handle; /* handle to WinPcap DLL */

View File

@@ -186,7 +186,7 @@
* (DS12887A) which implemented a "century" register to be
* compatible with Y2K.
*
* Version: @(#)nvr.c 1.0.5 2017/10/02
* Version: @(#)nvr.c 1.0.6 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -203,19 +203,17 @@
#include <stdlib.h>
#include <time.h>
#include <wchar.h>
#include "86Box.h"
#include "ibm.h"
#include "cpu/cpu.h"
#include "pic.h"
#include "timer.h"
#include "device.h"
#include "machine/machine.h"
#include "win/win.h"
#include "plat.h"
#include "nvr.h"
#define NVR_FOLDER_PATH L"NVR"
int64_t enable_sync; /* configuration variable: enable time sync */
int64_t nvr_dosave; /* NVR is dirty, needs saved */
@@ -755,16 +753,18 @@ nvr_path(wchar_t *str)
/* Get the full prefix in place. */
memset(temp, 0x00, sizeof(temp));
wcscpy(temp, cfg_path);
wcscat(temp, NVR_FOLDER_PATH);
wcscat(temp, NVR_PATH);
#ifndef __unix
/* Create the directory if needed. */
if (! DirectoryExists(temp))
CreateDirectory(temp, NULL);
#endif
if (! dir_check_exist(temp))
dir_create(temp);
/* Now append the actual filename. */
#ifdef WIN32
wcscat(temp, L"\\");
#else
wcscat(temp, L"/");
#endif
wcscat(temp, str);
return(temp);

View File

@@ -8,7 +8,7 @@
*
* Emulation core dispatcher.
*
* Version: @(#)pc.c 1.0.19 2017/10/08
* Version: @(#)pc.c 1.0.20 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -73,13 +73,12 @@
# include "win/plat_dir.h"
# undef UNICODE
#endif
#include "ui.h"
#include "plat.h"
#include "win/plat_joystick.h"
#include "win/plat_keyboard.h"
#include "win/plat_midi.h"
#include "win/plat_mouse.h"
#include "win/plat_iodev.h"
#include "win/plat_ui.h"
#include "win/win.h"
int window_w, window_h, window_x, window_y, window_remember;
@@ -146,9 +145,7 @@ fatal(const char *format, ...)
/* Make sure the message does not have a trailing newline. */
if ((sp = strchr(msg, '\n')) != NULL) *sp = '\0';
#ifndef __unix
plat_msgbox_fatal(msg);
#endif
ui_msgbox(MBX_ERROR|MBX_FATAL|MBX_ANSI, msg);
fflush(stdout);
@@ -169,14 +166,16 @@ pc_concat(wchar_t *str)
memset(temp, 0x00, sizeof(temp));
wcscpy(temp, cfg_path);
#ifndef __unix
/* Create the directory if needed. */
if (! DirectoryExists(temp))
CreateDirectory(temp, NULL);
#endif
if (! dir_check_exist(temp))
dir_create(temp);
/* Now append the actual filename. */
#ifdef WIN32
wcscat(temp, L"\\");
#else
wcscat(temp, L"/");
#endif
wcscat(temp, str);
return(temp);
@@ -380,7 +379,7 @@ again:
if (! rom_load_bios(romset)) {
/* Whoops, ROMs not found. */
if (romset != -1)
msgbox_info(hwndMain, IDS_2063);
ui_msgbox(MBX_INFO, (wchar_t *)IDS_2063);
/* Select another machine to use. */
for (c=0; c<ROM_MAX; c++) {
@@ -401,7 +400,7 @@ again:
again2:
if (! video_card_available(video_old_to_new(gfxcard))) {
if (romset != -1) {
msgbox_info(hwndMain, IDS_2064);
ui_msgbox(MBX_INFO, (wchar_t *)IDS_2064);
}
for (c=GFX_MAX-1; c>=0; c--) {
if (gfx_present[c]) {

69
src/plat.h Normal file
View File

@@ -0,0 +1,69 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Define the various platform support functions.
*
* Version: @(#)plat.h 1.0.2 2017/10/09
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
*/
#ifndef EMU_PLAT_H
# define EMU_PLAT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Global variables residing in the platform module. */
/* System-related functions. */
extern void get_executable_name(wchar_t *s, int size);
extern void set_window_title(wchar_t *s);
extern int dir_check_exist(wchar_t *path);
extern int dir_create(wchar_t *path);
extern void leave_fullscreen(void);
/* Resource management. */
extern wchar_t *plat_get_string(int id);
extern wchar_t *plat_get_string_from_string(char *str);
/* Platform-specific device support. */
extern uint8_t host_cdrom_drive_available[26];
extern uint8_t host_cdrom_drive_available_num;
extern uint32_t cdrom_capacity;
extern void cdrom_init_host_drives(void);
extern void cdrom_close(uint8_t id);
extern void cdrom_eject(uint8_t id);
extern void cdrom_reload(uint8_t id);
extern void removable_disk_unload(uint8_t id);
extern void removable_disk_eject(uint8_t id);
extern void removable_disk_reload(uint8_t id);
extern int ioctl_open(uint8_t id, char d);
extern void ioctl_reset(uint8_t id);
extern void ioctl_close(uint8_t id);
/* Other stuff. */
extern void startblit(void);
extern void endblit(void);
#ifdef __cplusplus
}
#endif
#endif /*EMU_PLAT_H*/

View File

@@ -13,8 +13,8 @@
#include <wchar.h>
#include "ibm.h"
#include "pit.h"
#include "plat_keyboard.h"
#include "plat_mouse.h"
#include "win/plat_keyboard.h"
#include "win/plat_mouse.h"
PPI ppi;

View File

@@ -12,10 +12,11 @@
*
* NOTE: THIS IS CURRENTLY A MESS, but will be cleaned up as I go.
*
* Version: @(#)scsi_aha154x.c 1.0.23 2017/10/08
* Version: @(#)scsi_aha154x.c 1.0.24 2017/10/09
*
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Original Buslogic version by SA1988 and Miran Grca.
*
* Copyright 2017 Fred N. van Kempen.
*/
#include <stdio.h>
@@ -552,7 +553,7 @@ aha154x_eeprom(aha_t *dev, uint8_t cmd,uint8_t arg,uint8_t len,uint8_t off,uint8
}
/* Mess with the AHA-154xCF's Shadow RAM. */
/* Map either the main or utility (Select) ROM into the memory space. */
static uint8_t
aha154x_mmap(aha_t *dev, uint8_t cmd)
{
@@ -575,7 +576,7 @@ aha154x_mmap(aha_t *dev, uint8_t cmd)
static void
RaiseIntr(aha_t *dev, int suppress, uint8_t Interrupt)
raise_irq(aha_t *dev, int suppress, uint8_t Interrupt)
{
if (Interrupt & (INTR_MBIF | INTR_MBOA)) {
if (! (dev->Interrupt & INTR_HACC)) {
@@ -601,7 +602,7 @@ RaiseIntr(aha_t *dev, int suppress, uint8_t Interrupt)
static void
ClearIntr(aha_t *dev)
clear_irq(aha_t *dev)
{
dev->Interrupt = 0;
aha_log("%s: lowering IRQ %i (stat 0x%02x)\n",
@@ -611,7 +612,7 @@ ClearIntr(aha_t *dev)
aha_log("%s: Raising Interrupt 0x%02X (Pending)\n",
dev->name, dev->Interrupt);
if (dev->MailboxOutInterrupts || !(dev->Interrupt & INTR_MBOA)) {
RaiseIntr(dev, 0, dev->PendingInterrupt);
raise_irq(dev, 0, dev->PendingInterrupt);
}
dev->PendingInterrupt = 0;
}
@@ -646,7 +647,7 @@ aha_reset(aha_t *dev)
dev->shram_mode = 0;
dev->last_mb = 0;
ClearIntr(dev);
clear_irq(dev);
}
@@ -691,7 +692,7 @@ aha_cmd_done(aha_t *dev, int suppress)
if ((dev->Command != CMD_START_SCSI) && (dev->Command != CMD_BIOS_SCSI)) {
dev->Status &= ~STAT_DFULL;
aha_log("%s: Raising IRQ %i\n", dev->name, dev->Irq);
RaiseIntr(dev, suppress, INTR_HACC);
raise_irq(dev, suppress, INTR_HACC);
}
dev->Command = 0xff;
@@ -1292,7 +1293,7 @@ aha_do_mail(aha_t *dev)
aha_log("aha_do_mail(): Writing %i bytes at %08X\n", sizeof(CmdStatus), Outgoing + CodeOffset);
DMAPageWrite(Outgoing + CodeOffset, (char *)&CmdStatus, sizeof(CmdStatus));
RaiseIntr(dev, 0, dev->ToRaise);
raise_irq(dev, 0, dev->ToRaise);
while (dev->Interrupt) {
}
@@ -1397,7 +1398,7 @@ aha_write(uint16_t port, uint8_t val, void *priv)
}
if (val & CTRL_IRST) {
ClearIntr(dev);
clear_irq(dev);
}
break;
@@ -2277,13 +2278,8 @@ device_t aha1540b_device = {
"Adaptec AHA-1540B",
DEVICE_ISA | DEVICE_AT,
AHA_154xB,
aha_init,
aha_close,
NULL,
NULL,
NULL,
NULL,
NULL,
aha_init, aha_close, NULL,
NULL, NULL, NULL, NULL,
aha_154x_config
};
@@ -2291,13 +2287,8 @@ device_t aha1542c_device = {
"Adaptec AHA-1542C",
DEVICE_ISA | DEVICE_AT,
AHA_154xC,
aha_init,
aha_close,
NULL,
NULL,
NULL,
NULL,
NULL,
aha_init, aha_close, NULL,
NULL, NULL, NULL, NULL,
aha_154x_config
};
@@ -2305,13 +2296,8 @@ device_t aha1542cf_device = {
"Adaptec AHA-1542CF",
DEVICE_ISA | DEVICE_AT,
AHA_154xCF,
aha_init,
aha_close,
NULL,
NULL,
NULL,
NULL,
NULL,
aha_init, aha_close, NULL,
NULL, NULL, NULL, NULL,
aha_154x_config
};
@@ -2319,11 +2305,7 @@ device_t aha1640_device = {
"Adaptec AHA-1640",
DEVICE_MCA,
AHA_1640,
aha_init,
aha_close,
NULL,
NULL,
NULL,
NULL,
aha_init, aha_close, NULL,
NULL, NULL, NULL, NULL,
NULL
};

View File

@@ -10,11 +10,12 @@
* 0 - BT-545C ISA;
* 1 - BT-958D PCI (but BT-545C ISA on non-PCI machines)
*
* Version: @(#)scsi_buslogic.c 1.0.18 2017/10/08
* Version: @(#)scsi_buslogic.c 1.0.19 2017/10/09
*
* Authors: TheCollector1995, <mariogplayer@gmail.com>
* Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
*/
@@ -3154,13 +3155,8 @@ device_t buslogic_device = {
"Buslogic BT-545C ISA",
DEVICE_ISA | DEVICE_AT,
CHIP_BUSLOGIC_ISA,
Buslogic_Init,
BuslogicClose,
NULL,
NULL,
NULL,
NULL,
NULL,
Buslogic_Init, BuslogicClose, NULL,
NULL, NULL, NULL, NULL,
BT545C_Config
};
@@ -3168,12 +3164,7 @@ device_t buslogic_pci_device = {
"Buslogic BT-958D PCI",
DEVICE_PCI,
CHIP_BUSLOGIC_PCI,
Buslogic_Init,
BuslogicClose,
NULL,
NULL,
NULL,
NULL,
NULL,
Buslogic_Init, BuslogicClose, NULL,
NULL, NULL, NULL, NULL,
BT958D_Config
};

View File

@@ -6,7 +6,7 @@
*
* Emulation of SCSI fixed and removable disks.
*
* Version: @(#)scsi_disk.c 1.0.11 2017/10/07
* Version: @(#)scsi_disk.c 1.0.12 2017/10/09
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Copyright 2017 Miran Grca.
@@ -27,8 +27,8 @@
#include "../disk/hdd.h"
#include "../disk/hdc.h"
#include "../disk/hdc_ide.h"
#include "../win/win.h"
#include "../win/plat_iodev.h"
#include "../plat.h"
#include "../ui.h"
#include "scsi.h"
#include "scsi_disk.h"
@@ -1566,11 +1566,11 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb)
shdc[id].all_blocks_total = shdc[id].block_total;
if (shdc[id].packet_status != CDROM_PHASE_COMPLETE)
{
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 1);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 1);
}
else
{
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
}
return;
@@ -1736,7 +1736,7 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb)
scsi_hd_data_command_finish(id, alloc_length, alloc_length, alloc_length, 1);
}
shdc[id].all_blocks_total = shdc[id].block_total;
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 1);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 1);
return;
case GPCMD_START_STOP_UNIT:
@@ -2014,7 +2014,7 @@ void scsi_hd_phase_data_out(uint8_t id)
SCSIPhase = SCSI_PHASE_STATUS;
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
break;
default:
fatal("SCSI HDD %i: Bad Command for phase 2 (%02X)\n", shdc[id].current_cdb[0]);
@@ -2038,7 +2038,7 @@ void scsi_hd_callback(uint8_t id)
shdc[id].status = READY_STAT;
shdc[id].phase = 3;
shdc[id].packet_status = 0xFF;
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
return;
case CDROM_PHASE_DATA_OUT:
scsi_hd_log("SCSI HD %i: PHASE_DATA_OUT\n", id);
@@ -2051,7 +2051,7 @@ void scsi_hd_callback(uint8_t id)
shdc[id].packet_status = CDROM_PHASE_COMPLETE;
shdc[id].status = READY_STAT;
shdc[id].phase = 3;
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
return;
case CDROM_PHASE_DATA_IN:
scsi_hd_log("SCSI HD %i: PHASE_DATA_IN\n", id);
@@ -2063,7 +2063,7 @@ void scsi_hd_callback(uint8_t id)
shdc[id].packet_status = CDROM_PHASE_COMPLETE;
shdc[id].status = READY_STAT;
shdc[id].phase = 3;
StatusBarUpdateIcon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
ui_sb_update_icon((hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? (SB_RDISK | id) : (SB_HDD | HDD_BUS_SCSI), 0);
return;
case CDROM_PHASE_ERROR:
scsi_hd_log("SCSI HD %i: PHASE_ERROR\n", id);

69
src/ui.h Normal file
View File

@@ -0,0 +1,69 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Define the various UI functions.
*
* Version: @(#)ui.h 1.0.2 2017/10/09
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2016,2017 Miran Grca.
* Copyright 2017 Fred N. van Kempen.
*/
#ifndef EMU_UI_H
# define EMU_UI_H
#ifdef __cplusplus
extern "C" {
#endif
/* Strings. Those are defined within the platform. */
#ifdef WIN32
# include "win/resource.h"
#else
# ... dunno yet ...
#endif
/* Message Box functions. */
#define MBX_INFO 1
#define MBX_ERROR 2
#define MBX_QUESTION 3
#define MBX_FATAL 0x20
#define MBX_ANSI 0x80
extern int ui_msgbox(int type, void *arg);
/* Status Bar functions. */
#define SB_ICON_WIDTH 24
#define SB_FLOPPY 0x00
#define SB_CDROM 0x10
#define SB_RDISK 0x20
#define SB_HDD 0x40
#define SB_NETWORK 0x50
#define SB_TEXT 0x60
extern int ui_sb_find_part(int tag);
extern void ui_sb_update_panes(void);
extern void ui_sb_update_tip(int meaning);
extern void ui_sb_check_menu_item(int tag, int id, int chk);
extern void ui_sb_enable_menu_item(int tag, int id, int val);
extern void ui_sb_update_icon(int tag, int val);
extern void ui_sb_update_icon_state(int tag, int active);
extern void ui_sb_set_text_w(wchar_t *wstr);
extern void ui_sb_set_text(char *str);
#ifdef __cplusplus
}
#endif
#endif /*EMU_UI_H*/

View File

@@ -8,6 +8,7 @@
#include <wchar.h>
#include <math.h>
#include <time.h>
#include "../86box.h"
#include "../ibm.h"
#include "../cpu/cpu.h"
#include "../io.h"
@@ -17,10 +18,10 @@
#include "../device.h"
#include "../timer.h"
#include "../win/plat_thread.h"
#include "../plat.h"
#include "video.h"
#include "vid_svga.h"
#ifndef __unix
# include "../win/win.h" /*YUCK*/
# include "../win/win_cgapal.h" /*YUCK*/
#endif
@@ -30,10 +31,10 @@
#include "vid_ati_mach64.h"
#include "vid_cga.h"
#ifdef DEV_BRANCH
#ifdef USE_CIRRUS
#include "vid_cl_ramdac.h" /* vid_cl_gd.c needs this */
#include "vid_cl_gd.h"
#endif
# ifdef USE_CIRRUS
# include "vid_cl_ramdac.h" /* vid_cl_gd.c needs this */
# include "vid_cl_gd.h"
# endif
#endif
#include "vid_ega.h"
#include "vid_et4000.h"
@@ -45,9 +46,9 @@
#include "vid_colorplus.h"
#include "vid_mda.h"
#ifdef DEV_BRANCH
#ifdef USE_RIVA
#include "vid_nv_riva128.h"
#endif
# ifdef USE_RIVA
# include "vid_nv_riva128.h"
# endif
#endif
#include "vid_olivetti_m24.h"
#include "vid_oti067.h"
@@ -120,12 +121,10 @@ static VIDEO_CARD video_cards[] =
{"[PCI] Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000_pci", &s3_virge_pci_device, GFX_VIRGE_PCI},
{"[PCI] Diamond Stealth 3D 3000 (S3 ViRGE/VX)", "stealth3d_3000_pci", &s3_virge_988_pci_device, GFX_VIRGEVX_PCI},
{"[PCI] Diamond Stealth 64 DRAM (S3 Trio64)", "stealth64d_pci", &s3_diamond_stealth64_pci_device, GFX_STEALTH64_PCI},
#ifdef DEV_BRANCH
#ifdef USE_RIVA
#if defined(DEV_BRANCH) && defined(USE_RIVA)
{"[PCI] nVidia RIVA 128", "riva128", &riva128_device, GFX_RIVA128},
{"[PCI] nVidia RIVA TNT", "rivatnt", &rivatnt_device, GFX_RIVATNT},
{"[PCI] nVidia RIVA TNT2", "rivatnt2", &rivatnt2_device, GFX_RIVATNT2},
#endif
#endif
{"[PCI] Number Nine 9FX (S3 Trio64)", "n9_9fx_pci", &s3_9fx_pci_device, GFX_N9_9FX_PCI},
{"[PCI] Paradise Bahamas 64 (S3 Vision864)", "bahamas64_pci", &s3_bahamas64_pci_device, GFX_BAHAMAS64_PCI},
@@ -703,59 +702,49 @@ void video_blit_memtoscreen_8(int x, int y, int w, int h)
thread_set_event(blit_data.wake_blit_thread);
}
time_t now;
struct tm *info;
wchar_t screenshot_fn_partial[2048];
wchar_t screenshot_fn[4096];
wchar_t screenshot_path[4096];
BOOL DirectoryExists(LPCTSTR szPath)
void
take_screenshot(void)
{
DWORD dwAttrib = GetFileAttributes(szPath);
wchar_t path[1024], fn[128];
struct tm *info;
time_t now;
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
pclog("Screenshot: video API is: %i\n", vid_api);
if ((vid_api < 0) || (vid_api > 1)) return;
void take_screenshot(void)
{
if ((vid_api < 0) || (vid_api > 1)) return;
time(&now);
info = localtime(&now);
memset(screenshot_fn, 0, 8192);
memset(screenshot_fn_partial, 0, 4096);
memset(screenshot_path, 0, 8192);
pclog("Video API is: %i\n", vid_api);
append_filename_w(screenshot_path, cfg_path, L"screenshots", 4095);
if (!DirectoryExists(screenshot_path))
{
CreateDirectory(screenshot_path, NULL);
}
if (vid_api == 1)
{
wcsftime(screenshot_fn_partial, 2048, L"screenshots\\%Y%m%d_%H%M%S.png", info);
append_filename_w(screenshot_fn, cfg_path, screenshot_fn_partial, 4095);
if (video_fullscreen)
{
d3d_fs_take_screenshot(screenshot_fn);
}
else
{
pclog("Direct 3D...\n");
d3d_take_screenshot(screenshot_fn);
}
}
else if (vid_api == 0)
{
wcsftime(screenshot_fn_partial, 2048, L"screenshots\\%Y%m%d_%H%M%S.bmp", info);
append_filename_w(screenshot_fn, cfg_path, screenshot_fn_partial, 4095);
if (video_fullscreen)
{
ddraw_fs_take_screenshot(screenshot_fn);
}
else
{
ddraw_take_screenshot(screenshot_fn);
}
}
memset(fn, 0, sizeof(fn));
memset(path, 0, sizeof(path));
(void)time(&now);
info = localtime(&now);
append_filename_w(path, cfg_path, SCREENSHOT_PATH, sizeof(path)-2);
if (! dir_check_exist(path))
dir_create(path);
#ifdef WIN32
wcscat(path, L"\\");
#else
wcscat(path, L"/");
#endif
if (vid_api == 1) {
wcsftime(fn, 128, L"%Y%m%d_%H%M%S.png", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
d3d_fs_take_screenshot(path);
else
d3d_take_screenshot(path);
} else if (vid_api == 0) {
wcsftime(path, 128, L"%Y%m%d_%H%M%S.bmp", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
ddraw_fs_take_screenshot(path);
else
ddraw_take_screenshot(path);
}
pclog("Screenshot: fn='%ws'\n", path);
}

View File

@@ -1,11 +0,0 @@
extern uint8_t host_cdrom_drive_available[26];
extern uint8_t host_cdrom_drive_available_num;
extern void cdrom_init_host_drives(void);
extern void cdrom_close(uint8_t id);
extern void cdrom_eject(uint8_t id);
extern void cdrom_reload(uint8_t id);
extern void removable_disk_unload(uint8_t id);
extern void removable_disk_eject(uint8_t id);
extern void removable_disk_reload(uint8_t id);

View File

@@ -1,35 +0,0 @@
#ifndef __unix
extern void plat_msgbox_error(int i);
extern wchar_t *plat_get_string(int i);
//#ifndef IDS_2077
//#define IDS_2077 2077
//#endif
//#ifndef IDS_2078
//#define IDS_2078 2078
//#endif
//#ifndef IDS_2079
//#define IDS_2079 2079
//#endif
#ifndef IDS_2139
# define IDS_2139 2139 /* network/network.c */
#endif
#ifndef IDS_2171
#define IDS_2171 2171 /* sound/midi_fluidsynth.c */
#endif
//#ifndef IDS_2219
//#define IDS_2219 2219
//#endif
#endif
extern void plat_msgbox_fatal(char *string);
extern void get_executable_name(wchar_t *s, int size);
extern void set_window_title(wchar_t *s);
extern void startblit(void);
extern void endblit(void);

View File

@@ -8,7 +8,7 @@
*
* The Emulator's Windows core.
*
* Version: @(#)win.c 1.0.18 2017/10/08
* Version: @(#)win.c 1.0.19 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -52,15 +52,14 @@
#include "../video/vid_ega.h"
#include "../sound/sound.h"
#include "../sound/snd_dbopl.h"
#include "../plat.h"
#include "../ui.h"
#include "plat_keyboard.h"
#include "plat_iodev.h"
#include "plat_mouse.h"
#include "plat_midi.h"
#include "plat_thread.h"
#include "plat_ticks.h"
#include "plat_ui.h"
#include "win.h"
#include "win_cdrom_ioctl.h"
#include "win_cgapal.h"
#include "win_ddraw.h"
#include "win_d3d.h"
@@ -165,16 +164,15 @@ LoadIconEx(PCTSTR pszIconName)
static void
win_menu_update(void)
{
#if 0
menu = LoadMenu(hThisInstance, TEXT("MainMenu"));
menuMain = LoadMenu(hinstance, L"MainMenu"));
smenu = LoadMenu(hThisInstance, TEXT("StatusBarMenu"));
initmenu();
menuSBAR = LoadMenu(hinstance, L"StatusBarMenu");
SetMenu(hwndMain, menu);
initmenu();
win_title_update = 1;
#endif
SetMenu(hwndMain, menu);
win_title_update = 1;
}
#endif
@@ -545,7 +543,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
if (video_fullscreen_first) {
video_fullscreen_first = 0;
msgbox_info(hwndMain, IDS_2074);
ui_msgbox(MBX_INFO, (wchar_t *)IDS_2074);
}
startblit();
@@ -693,7 +691,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDM_CONFIG_LOAD:
pause = 1;
if (! file_dlg_st(hwnd, IDS_2160, "", 0)) {
if (msgbox_reset_yn(hwndMain) == IDYES) {
if (ui_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051) == IDYES) {
config_write(config_file_default);
for (i = 0; i < FDD_NUM; i++)
{
@@ -747,7 +745,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
rom_load_bios(romset);
network_init();
ResetAllMenus();
StatusBarUpdatePanes();
ui_sb_update_panes();
pc_reset_hard_init();
}
}
@@ -1184,8 +1182,8 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
haccel = LoadAccelerators(hInst, ACCEL_NAME);
if (haccel == NULL) {
MessageBox(hwndMain,
win_get_string(IDS_2053),
win_get_string(IDS_2050),
plat_get_string(IDS_2053),
plat_get_string(IDS_2050),
MB_OK | MB_ICONERROR);
return(3);
}
@@ -1198,8 +1196,8 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
device.hwndTarget = hwnd;
if (! RegisterRawInputDevices(&device, 1, sizeof(device))) {
MessageBox(hwndMain,
win_get_string(IDS_2054),
win_get_string(IDS_2050),
plat_get_string(IDS_2054),
plat_get_string(IDS_2050),
MB_OK | MB_ICONERROR);
return(4);
}
@@ -1224,8 +1222,8 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
vid_api ^= 1;
if (! vid_apis[0][vid_api].init(hwndRender)) {
MessageBox(hwnd,
win_get_string(IDS_2095),
win_get_string(IDS_2050),
plat_get_string(IDS_2095),
plat_get_string(IDS_2050),
MB_OK | MB_ICONERROR);
return(5);
}
@@ -1254,8 +1252,8 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
if (! pc_init_modules()) {
/* Dang, no ROMs found at all! */
MessageBox(hwnd,
win_get_string(IDS_2056),
win_get_string(IDS_2050),
plat_get_string(IDS_2056),
plat_get_string(IDS_2050),
MB_OK | MB_ICONERROR);
return(6);
}
@@ -1360,6 +1358,23 @@ set_window_title(wchar_t *s)
}
int
dir_check_exist(wchar_t *path)
{
DWORD dwAttrib = GetFileAttributes(path);
return(((dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY))) ? 1 : 0);
}
int
dir_create(wchar_t *path)
{
return((int)CreateDirectory(path, NULL));
}
uint64_t
timer_read(void)
{
@@ -1418,8 +1433,8 @@ win_language_check(void)
}
LPTSTR
win_get_string(int i)
wchar_t *
plat_get_string(int i)
{
LPTSTR str;
@@ -1443,21 +1458,14 @@ win_get_string(int i)
str = lpRCstr6144[i-6144].str;
}
return(str);
}
LPTSTR
win_get_string_from_string(char *str)
{
return(win_get_string(atoi(str)));
return((wchar_t *)str);
}
wchar_t *
plat_get_string(int i)
plat_get_string_from_string(char *str)
{
return((wchar_t *)win_get_string(i));
return(plat_get_string(atoi(str)));
}

View File

@@ -6,13 +6,11 @@
*
* This file is part of the 86Box distribution.
*
* The Emulator's Windows core.
* This file should contain things only used by the platform
* support modules for Windows. Generic definitions for UI and
* platform go into ../plat*.h.
*
* NOTE This should be named 'plat.h' and then include any
* Windows-specific header files needed, to keep them
* out of the main code.
*
* Version: @(#)win.h 1.0.4 2017/10/07
* Version: @(#)win.h 1.0.4 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -55,41 +53,29 @@
#define WM_SAVESETTINGS 0x8888
extern HINSTANCE hinstance;
extern HWND hwndMain;
extern HICON hIcon[512];
extern int pause;
extern int status_is_open;
extern int mousecapture;
extern LCID dwLanguage;
extern HINSTANCE hinstance;
extern HWND hwndMain;
extern HICON hIcon[512];
extern char openfilestring[260];
extern WCHAR wopenfilestring[260];
extern int pause;
#ifdef __cplusplus
extern "C" {
#endif
extern HICON LoadIconEx(PCTSTR pszIconName);
extern BOOL DirectoryExists(LPCTSTR szPath);
extern void leave_fullscreen(void);
extern void get_executable_name(wchar_t *s, int size);
extern void set_window_title(wchar_t *s);
extern void win_language_set(void);
extern void win_language_update(void);
extern void win_language_check(void);
extern LPTSTR win_get_string(int i);
extern LPTSTR win_get_string_from_string(char *str);
extern void startblit(void);
extern void endblit(void);
#ifdef EMU_DEVICE_H
extern void deviceconfig_open(HWND hwnd, device_t *device);
#endif
@@ -106,8 +92,7 @@ extern int hard_disk_was_added(void);
extern void get_registry_key_map(void);
extern void process_raw_input(LPARAM lParam, int infocus);
extern void cdrom_init_host_drives(void);
extern void cdrom_close(uint8_t id);
extern int fdd_type_to_icon(int type);
/* Functions in win_about.c: */
@@ -120,39 +105,11 @@ extern void StatusWindowCreate(HWND hwnd);
/* Functions in win_stbar.c: */
#define SB_ICON_WIDTH 24
#define SB_FLOPPY 0x00
#define SB_CDROM 0x10
#define SB_RDISK 0x20
#define SB_HDD 0x40
#define SB_NETWORK 0x50
#define SB_TEXT 0x60
extern HWND hwndSBAR;
extern void StatusBarCreate(HWND hwndParent, int idStatus, HINSTANCE hInst);
extern int fdd_type_to_icon(int type);
extern int StatusBarFindPart(int tag);
extern void StatusBarUpdatePanes(void);
extern void StatusBarUpdateTip(int meaning);
extern void StatusBarUpdateIcon(int tag, int val);
extern void StatusBarUpdateIconState(int tag, int active);
extern void StatusBarCheckMenuItem(int tag, int id, int chk);
extern void StatusBarEnableMenuItem(int tag, int id, int val);
extern void StatusBarSetTextW(wchar_t *wstr);
extern void StatusBarSetText(char *str);
/* Functions in win_dialog.c: */
extern int msgbox_reset(HWND hwndParent);
extern int msgbox_reset_yn(HWND hwndParent);
extern int msgbox_question(HWND hwndParent, int i);
extern void msgbox_info(HWND hwndParent, int i);
extern void msgbox_info_wstr(HWND hwndParent, WCHAR *wstr);
extern void msgbox_error(HWND hwndParent, int i);
extern void msgbox_error_wstr(HWND hwndParent, WCHAR *wstr);
extern void msgbox_fatal(HWND hwndParent, char *string);
extern void msgbox_critical(HWND hwndParent, int i);
extern int file_dlg_w(HWND hwnd, WCHAR *f, WCHAR *fn, int save);
extern int file_dlg(HWND hwnd, WCHAR *f, char *fn, int save);
extern int file_dlg_mb(HWND hwnd, char *f, char *fn, int save);

View File

@@ -8,7 +8,7 @@
*
* Handle the About dialog.
*
* Version: @(#)win_about.c 1.0.1 2017/10/07
* Version: @(#)win_about.c 1.0.2 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <wchar.h>
#include "../86box.h"
#include "../ibm.h"
#include "win.h"

View File

@@ -8,7 +8,7 @@
*
* Handle the platform-side of CDROM drives.
*
* Version: @(#)win_cdrom.c 1.0.2 2017/10/07
* Version: @(#)win_cdrom.c 1.0.3 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -34,9 +34,9 @@
#include "../disk/hdd.h"
#include "../scsi/scsi.h"
#include "../scsi/scsi_disk.h"
#include "plat_ui.h"
#include "../plat.h"
#include "../ui.h"
#include "win.h"
#include "win_cdrom_ioctl.h"
uint8_t host_cdrom_drive_available[26];
@@ -93,7 +93,7 @@ cdrom_eject(uint8_t id)
if ((cdrom_drives[id].host_drive >= 'A') &&
(cdrom_drives[id].host_drive <= 'Z')) {
StatusBarCheckMenuItem(SB_CDROM|id,
ui_sb_check_menu_item(SB_CDROM|id,
IDM_CDROM_HOST_DRIVE | id | ((cdrom_drives[id].host_drive - 'A') << 3), MF_UNCHECKED);
}
@@ -109,12 +109,12 @@ cdrom_eject(uint8_t id)
cdrom_insert(id);
}
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_UNCHECKED);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_UNCHECKED);
cdrom_drives[id].host_drive=0;
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_CHECKED);
StatusBarUpdateIconState(SB_CDROM|id, 1);
StatusBarEnableMenuItem(SB_CDROM|id, IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
StatusBarUpdateTip(SB_CDROM|id);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_CHECKED);
ui_sb_update_icon_state(SB_CDROM|id, 1);
ui_sb_enable_menu_item(SB_CDROM|id, IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
ui_sb_update_tip(SB_CDROM|id);
config_save();
}
@@ -140,15 +140,15 @@ cdrom_reload(uint8_t id)
cdrom_insert(id);
}
if (wcslen(cdrom_image[id].image_path) == 0) {
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_CHECKED);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_CHECKED);
cdrom_drives[id].host_drive = 0;
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_UNCHECKED);
StatusBarUpdateIconState(SB_CDROM|id, 1);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_UNCHECKED);
ui_sb_update_icon_state(SB_CDROM|id, 1);
} else {
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_UNCHECKED);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_UNCHECKED);
cdrom_drives[id].host_drive = 200;
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_CHECKED);
StatusBarUpdateIconState(SB_CDROM|id, 0);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_IMAGE | id, MF_CHECKED);
ui_sb_update_icon_state(SB_CDROM|id, 0);
}
} else {
new_cdrom_drive = cdrom_drives[id].prev_host_drive;
@@ -157,14 +157,14 @@ cdrom_reload(uint8_t id)
/* Signal disc change to the emulated machine. */
cdrom_insert(id);
}
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_UNCHECKED);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_EMPTY | id, MF_UNCHECKED);
cdrom_drives[id].host_drive = new_cdrom_drive;
StatusBarCheckMenuItem(SB_CDROM|id, IDM_CDROM_HOST_DRIVE | id | ((cdrom_drives[id].host_drive - 'A') << 3), MF_CHECKED);
StatusBarUpdateIconState(SB_CDROM|id, 0);
ui_sb_check_menu_item(SB_CDROM|id, IDM_CDROM_HOST_DRIVE | id | ((cdrom_drives[id].host_drive - 'A') << 3), MF_CHECKED);
ui_sb_update_icon_state(SB_CDROM|id, 0);
}
StatusBarEnableMenuItem(SB_CDROM|id, IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarUpdateTip(SB_CDROM|id);
ui_sb_enable_menu_item(SB_CDROM|id, IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
ui_sb_update_tip(SB_CDROM|id);
config_save();
}
@@ -187,12 +187,12 @@ void
removable_disk_eject(uint8_t id)
{
removable_disk_unload(id);
StatusBarUpdateIconState(SB_RDISK|id, 1);
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | MF_GRAYED);
ui_sb_update_icon_state(SB_RDISK|id, 1);
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_ENABLED);
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarUpdateTip(SB_RDISK|id);
ui_sb_update_tip(SB_RDISK|id);
config_save();
}
@@ -211,13 +211,13 @@ removable_disk_reload(uint8_t id)
scsi_disk_insert(id);
#endif
StatusBarUpdateIconState(SB_RDISK|id, wcslen(hdd[id].fn) ? 0 : 1);
ui_sb_update_icon_state(SB_RDISK|id, wcslen(hdd[id].fn) ? 0 : 1);
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_EJECT | id, MF_BYCOMMAND | (wcslen(hdd[id].fn) ? MF_ENABLED : MF_GRAYED));
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarEnableMenuItem(SB_RDISK|id, IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | (wcslen(hdd[id].fn) ? MF_ENABLED : MF_GRAYED));
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_EJECT | id, MF_BYCOMMAND | (wcslen(hdd[id].fn) ? MF_ENABLED : MF_GRAYED));
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
ui_sb_enable_menu_item(SB_RDISK|id, IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | (wcslen(hdd[id].fn) ? MF_ENABLED : MF_GRAYED));
StatusBarUpdateTip(SB_RDISK|id);
ui_sb_update_tip(SB_RDISK|id);
config_save();
}

View File

@@ -9,10 +9,11 @@
* Implementation of the CD-ROM host drive IOCTL interface for
* Windows using SCSI Passthrough Direct.
*
* Version: @(#)cdrom_ioctl.c 1.0.5 2017/10/04
* Version: @(#)cdrom_ioctl.c 1.0.6 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2008-2016 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
@@ -29,7 +30,7 @@
#include "../device.h"
#include "../scsi/scsi.h"
#include "../cdrom/cdrom.h"
#include "win_cdrom_ioctl.h"
#include "../plat.h"
#define MSFtoLBA(m,s,f) ((((m*60)+s)*75)+f)

View File

@@ -1,35 +0,0 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Implementation of the CD-ROM host drive IOCTL interface for
* Windows using SCSI Passthrough Direct.
*
* This file lists the functions provided by various platform-
* specific cdrom-ioctl files.
*
* Version: @(#)cdrom_ioctl.h 1.0.3 2017/09/03
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Copyright 2008-2016 Sarah Walker.
* Copyright 2016,2017 Miran Grca.
*/
#ifndef EMU_CDROM_IOCTL_H
#define EMU_CDROM_IOCTL_H
extern uint32_t cdrom_capacity;
extern int ioctl_open(uint8_t id, char d);
extern void ioctl_reset(uint8_t id);
extern void ioctl_close(uint8_t id);
#endif /*EMU_CDROM_IOCTL_H */

View File

@@ -8,6 +8,8 @@
#include <windows.h>
#undef BITMAP
#include "../video/video.h"
#include "../plat.h"
#include "../ui.h"
#include "win_ddraw.h"
#include "win_cgapal.h"
#include "win.h"
@@ -106,8 +108,8 @@ SaveBitmap(wchar_t *szFilename, HBITMAP hBitmap)
if ((fp = _wfopen(szFilename, L"wb")) == NULL) {
_swprintf(szMessage,
win_get_string(IDS_2088), szFilename);
msgbox_error_wstr(hwndMain, szMessage);
plat_get_string(IDS_2088), szFilename);
ui_msgbox(MBX_ERROR, szMessage);
break;
}

View File

@@ -8,7 +8,7 @@
*
* Windows device configuration dialog implementation.
*
* Version: @(#)win_deviceconfig.c 1.0.4 2017/10/07
* Version: @(#)win_deviceconfig.c 1.0.5 2017/10/09
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -23,6 +23,8 @@
#include "../ibm.h"
#include "../config.h"
#include "../device.h"
#include "../plat.h"
#include "../ui.h"
#include "plat_midi.h"
#define NO_UNICODE /*FIXME: not Unicode? */
#include "win.h"
@@ -271,13 +273,13 @@ deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
return TRUE;
}
ret = msgbox_reset(hwndMain);
ret = ui_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051);
switch(ret)
{
case IDNO:
case 1:
EndDialog(hdlg, 0);
return TRUE;
case IDCANCEL:
case -1:
return FALSE;
default:
break;

View File

@@ -8,7 +8,7 @@
*
* Several dialogs for the application.
*
* Version: @(#)win_dialog.c 1.0.1 2017/10/07
* Version: @(#)win_dialog.c 1.0.2 2017/10/09
*
* Author: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
@@ -29,7 +29,8 @@
#include <wchar.h>
#include "../ibm.h"
#include "../device.h"
#include "plat_ui.h"
#include "../plat.h"
#include "../ui.h"
#include "win.h"
@@ -78,97 +79,80 @@ BrowseFolder(wchar_t *saved_path, wchar_t *title)
int
msgbox_reset(HWND hwnd)
ui_msgbox(int flags, void *arg)
{
return(MessageBox(hwnd, win_get_string(IDS_2051),
win_get_string(IDS_STRINGS),
MB_YESNOCANCEL | MB_ICONQUESTION));
WCHAR temp[512];
DWORD fl = 0;
WCHAR *str = NULL;
WCHAR *cap = NULL;
switch(flags & 0x1f) {
case MBX_INFO: /* just an informational message */
fl = (MB_OK | MB_ICONINFORMATION);
cap = plat_get_string(IDS_STRINGS); /* "86Box" */
break;
case MBX_ERROR: /* error message */
if (flags & MBX_FATAL) {
fl = (MB_OK | MB_ICONERROR);
cap = plat_get_string(IDS_2050); /* "Fatal Error"*/
} else {
fl = (MB_OK | MB_ICONWARNING);
cap = plat_get_string(IDS_2049); /* "Error" */
}
break;
case MBX_QUESTION: /* question */
fl = (MB_YESNOCANCEL | MB_ICONQUESTION);
cap = plat_get_string(IDS_STRINGS); /* "86Box" */
break;
}
/* If ANSI string, convert it. */
str = (WCHAR *)arg;
if (flags & MBX_ANSI) {
mbstowcs(temp, (char *)arg, strlen((char *)arg)+1);
str = temp;
} else {
/*
* It's a Unicode string.
*
* Well, no, maybe not. It could also be one of the
* strings stored in the Resources. Those are wide,
* but referenced by a numeric ID.
*
* The good news is, that strings are usually stored
* in the executable near the end of the code/rodata
* segment. This means, that *real* string pointers
* usually have a pretty high (numeric) value, much
* higher than the numeric ID's. So, we guesswork
* that if the value of 'arg' is low, its an ID..
*/
if (((int64_t)arg) < ((int64_t)65636))
str = plat_get_string((int)arg);
}
/* At any rate, we do have a valid (wide) string now. */
fl = MessageBox(hwndMain, /* our main window */
str, /* error message etc */
cap, /* window caption */
fl);
/* Convert return values to generic ones. */
if (fl == IDNO) fl = 1;
else if (fl == IDCANCEL) fl = -1;
else fl = 0;
return(fl);
}
#if 0
int
msgbox_reset_yn(HWND hwnd)
{
return(MessageBox(hwnd, win_get_string(IDS_2051),
win_get_string(IDS_STRINGS),
MB_YESNO | MB_ICONQUESTION));
}
int
msgbox_question(HWND hwnd, int i)
{
return(MessageBox(hwnd, win_get_string(i),
win_get_string(IDS_STRINGS),
MB_YESNO | MB_ICONQUESTION));
}
void
msgbox_info(HWND hwnd, int i)
{
MessageBox(hwnd, win_get_string(i), win_get_string(IDS_STRINGS),
MB_OK | MB_ICONINFORMATION);
}
void
msgbox_info_wstr(HWND hwnd, WCHAR *wstr)
{
MessageBox(hwnd, wstr, win_get_string(IDS_STRINGS),
MB_OK | MB_ICONINFORMATION);
}
void
msgbox_error(HWND hwnd, int i)
{
MessageBox(hwnd, win_get_string(i), win_get_string(IDS_2049),
MB_OK | MB_ICONWARNING);
}
void
plat_msgbox_error(int i)
{
msgbox_error(hwndMain, i);
}
void
msgbox_error_wstr(HWND hwnd, WCHAR *wstr)
{
MessageBox(hwnd, wstr, win_get_string(IDS_2049), MB_OK | MB_ICONWARNING);
}
void
msgbox_critical(HWND hwnd, int i)
{
MessageBox(hwnd, win_get_string(i), win_get_string(IDS_2050),
MB_OK | MB_ICONERROR);
}
void
msgbox_fatal(HWND hwnd, char *string)
{
LPTSTR temp;
temp = (LPTSTR)malloc(512);
mbstowcs(temp, string, strlen(string)+1);
MessageBox(hwnd, temp, win_get_string(IDS_2050), MB_OK | MB_ICONERROR);
free(temp);
}
void
plat_msgbox_fatal(char *string)
{
msgbox_fatal(hwndMain, string);
}
return(MessageBox(hwnd, plat_get_string(IDS_2051),
#endif
int
@@ -249,12 +233,12 @@ file_dlg_mb(HWND hwnd, char *f, char *fn, int save)
int
file_dlg_w_st(HWND hwnd, int id, WCHAR *fn, int save)
{
return(file_dlg_w(hwnd, win_get_string(id), fn, save));
return(file_dlg_w(hwnd, plat_get_string(id), fn, save));
}
int
file_dlg_st(HWND hwnd, int id, char *fn, int save)
{
return(file_dlg(hwnd, win_get_string(id), fn, save));
return(file_dlg(hwnd, plat_get_string(id), fn, save));
}

View File

@@ -8,7 +8,7 @@
*
* Windows 86Box Settings dialog handler.
*
* Version: @(#)win_settings.c 1.0.18 2017/10/07
* Version: @(#)win_settings.c 1.0.19 2017/10/09
*
* Author: Miran Grca, <mgrca8@gmail.com>
*
@@ -50,6 +50,8 @@
#include "../sound/snd_mpu401.h"
#include "../video/video.h"
#include "../video/vid_voodoo.h"
#include "../plat.h"
#include "../ui.h"
#include "plat_midi.h"
#include "win.h"
@@ -103,6 +105,25 @@ static int settings_scsi_to_list[20], settings_list_to_scsi[20];
static int settings_network_to_list[20], settings_list_to_network[20];
/* Show a MessageBox dialog. This is nasty, I know. --FvK */
static int
settings_msgbox(int type, void *arg)
{
HWND h;
int i;
h = hwndMain;
hwndMain = hwndParentDialog;
i = ui_msgbox(type, arg);
hwndMain = h;
return(i);
}
/* This does the initial read of global variables into the temporary ones. */
static void win_settings_init(void)
{
@@ -252,24 +273,15 @@ static int settings_msgbox_reset(void)
if (changed)
{
i = msgbox_reset(hwndParentDialog);
i = settings_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051);
if (i == IDNO)
{
return 1;
}
else if (i == IDCANCEL)
{
return 0;
}
else
{
return 2;
}
}
else
{
return 1;
if (i == 1) return(1); /* no */
if (i < 0) return(0); /* cancel */
return(2); /* yes */
} else {
return(1);
}
}
@@ -348,7 +360,7 @@ static void win_settings_save(void)
mem_resize();
rom_load_bios(romset);
StatusBarUpdatePanes();
ui_sb_update_panes();
sound_realloc_buffers();
@@ -522,13 +534,13 @@ static void win_settings_machine_recalc_machine(HWND hdlg)
{
SendMessage(h, UDM_SETPOS, 0, temp_mem_size);
h = GetDlgItem(hdlg, IDC_TEXT_MB);
SendMessage(h, WM_SETTEXT, 0, (LPARAM) win_get_string(IDS_2094));
SendMessage(h, WM_SETTEXT, 0, (LPARAM) plat_get_string(IDS_2094));
}
else
{
SendMessage(h, UDM_SETPOS, 0, temp_mem_size / 1024);
h = GetDlgItem(hdlg, IDC_TEXT_MB);
SendMessage(h, WM_SETTEXT, 0, (LPARAM) win_get_string(IDS_2087));
SendMessage(h, WM_SETTEXT, 0, (LPARAM) plat_get_string(IDS_2087));
}
free(lptsTemp);
@@ -572,11 +584,11 @@ static BOOL CALLBACK win_settings_machine_proc(HWND hdlg, UINT message, WPARAM w
SendMessage(h, CB_SETCURSEL, machinetolist[temp_machine], 0);
h = GetDlgItem(hdlg, IDC_COMBO_WS);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(IDS_2131));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(IDS_2131));
for (c = 0; c < 8; c++)
{
wsprintf(lptsTemp, win_get_string(2132), c);
wsprintf(lptsTemp, plat_get_string(2132), c);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
@@ -745,12 +757,12 @@ static BOOL CALLBACK win_settings_video_proc(HWND hdlg, UINT message, WPARAM wPa
recalc_vid_list(hdlg);
h = GetDlgItem(hdlg, IDC_COMBO_VIDEO_SPEED);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2133));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2134));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2135));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2136));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2137));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_2138));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2133));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2134));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2135));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2136));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2137));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_2138));
SendMessage(h, CB_SETCURSEL, temp_video_speed, 0);
h=GetDlgItem(hdlg, IDC_CHECK_VOODOO);
@@ -895,7 +907,7 @@ static BOOL CALLBACK win_settings_input_proc(HWND hdlg, UINT message, WPARAM wPa
{
str_id = IDS_3072 + c;
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(str_id));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(str_id));
settings_list_to_mouse[d] = c;
d++;
@@ -908,7 +920,7 @@ static BOOL CALLBACK win_settings_input_proc(HWND hdlg, UINT message, WPARAM wPa
c = 0;
while (joystick_get_name(c))
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(2144 + c));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(2144 + c));
c++;
}
EnableWindow(h, TRUE);
@@ -1061,7 +1073,7 @@ static BOOL CALLBACK win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wPa
{
if (c == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(IDS_2152));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(IDS_2152));
}
else
{
@@ -1110,7 +1122,7 @@ static BOOL CALLBACK win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wPa
{
if (c == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(IDS_2152));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(IDS_2152));
}
else
{
@@ -1295,7 +1307,7 @@ static BOOL CALLBACK win_settings_ports_proc(HWND hdlg, UINT message, WPARAM wPa
if (c == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(IDS_2152));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(IDS_2152));
}
else
{
@@ -1475,11 +1487,12 @@ static BOOL CALLBACK win_settings_peripherals_proc(HWND hdlg, UINT message, WPAR
{
scsi_dev = scsi_card_getdevice(c);
if (device_is_valid(scsi_dev, machines[temp_machine].flags))
{
if (c == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(IDS_2152));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(IDS_2152));
}
else
{
@@ -1510,11 +1523,11 @@ static BOOL CALLBACK win_settings_peripherals_proc(HWND hdlg, UINT message, WPAR
recalc_hdc_list(hdlg, temp_machine, 0);
h=GetDlgItem(hdlg, IDC_COMBO_IDE_TER);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_5376));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_5376));
for (c = 0; c < 11; c++)
{
wsprintf(lptsTemp, win_get_string(IDS_2155), valid_ide_irqs[c]);
wsprintf(lptsTemp, plat_get_string(IDS_2155), valid_ide_irqs[c]);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
@@ -1528,11 +1541,11 @@ static BOOL CALLBACK win_settings_peripherals_proc(HWND hdlg, UINT message, WPAR
}
h=GetDlgItem(hdlg, IDC_COMBO_IDE_QUA);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_5376));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_5376));
for (c = 0; c < 11; c++)
{
wsprintf(lptsTemp, win_get_string(IDS_2155), valid_ide_irqs[c]);
wsprintf(lptsTemp, plat_get_string(IDS_2155), valid_ide_irqs[c]);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
@@ -1727,7 +1740,7 @@ static BOOL CALLBACK win_settings_network_proc(HWND hdlg, UINT message, WPARAM w
{
if (c == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) win_get_string(2152));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) plat_get_string(2152));
}
else
{
@@ -1907,34 +1920,34 @@ static void add_locations(HWND hdlg)
h = GetDlgItem(hdlg, IDC_COMBO_HD_BUS);
for (i = 0; i < 7; i++)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_4352 + i));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_4352 + i));
}
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL);
for (i = 0; i < 8; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4097), i >> 1, i & 1);
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
h = GetDlgItem(hdlg, IDC_COMBO_HD_ID);
for (i = 0; i < 16; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4098), i);
wsprintf(lptsTemp, plat_get_string(IDS_4098), i);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
h = GetDlgItem(hdlg, IDC_COMBO_HD_LUN);
for (i = 0; i < 8; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4098), i);
wsprintf(lptsTemp, plat_get_string(IDS_4098), i);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
h = GetDlgItem(hdlg, IDC_COMBO_HD_CHANNEL_IDE);
for (i = 0; i < 8; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4097), i >> 1, i & 1);
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
@@ -2176,25 +2189,25 @@ static void win_settings_hard_disks_update_item(HWND hwndList, int i, int column
switch(temp_hdd[i].bus)
{
case HDD_BUS_MFM:
wsprintf(szText, win_get_string(IDS_4608), temp_hdd[i].mfm_channel >> 1, temp_hdd[i].mfm_channel & 1);
wsprintf(szText, plat_get_string(IDS_4608), temp_hdd[i].mfm_channel >> 1, temp_hdd[i].mfm_channel & 1);
break;
case HDD_BUS_XTIDE:
wsprintf(szText, win_get_string(IDS_4609), temp_hdd[i].xtide_channel >> 1, temp_hdd[i].xtide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4609), temp_hdd[i].xtide_channel >> 1, temp_hdd[i].xtide_channel & 1);
break;
case HDD_BUS_ESDI:
wsprintf(szText, win_get_string(IDS_4610), temp_hdd[i].esdi_channel >> 1, temp_hdd[i].esdi_channel & 1);
wsprintf(szText, plat_get_string(IDS_4610), temp_hdd[i].esdi_channel >> 1, temp_hdd[i].esdi_channel & 1);
break;
case HDD_BUS_IDE_PIO_ONLY:
wsprintf(szText, win_get_string(IDS_4611), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4611), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
break;
case HDD_BUS_IDE_PIO_AND_DMA:
wsprintf(szText, win_get_string(IDS_4612), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4612), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
break;
case HDD_BUS_SCSI:
wsprintf(szText, win_get_string(IDS_4613), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
wsprintf(szText, plat_get_string(IDS_4613), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
break;
case HDD_BUS_SCSI_REMOVABLE:
wsprintf(szText, win_get_string(IDS_4614), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
wsprintf(szText, plat_get_string(IDS_4614), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
break;
}
lvI.pszText = szText;
@@ -2207,25 +2220,25 @@ static void win_settings_hard_disks_update_item(HWND hwndList, int i, int column
}
else if (column == 2)
{
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].tracks);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].tracks);
lvI.pszText = szText;
lvI.iImage = 0;
}
else if (column == 3)
{
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].hpc);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].hpc);
lvI.pszText = szText;
lvI.iImage = 0;
}
else if (column == 4)
{
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].spt);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].spt);
lvI.pszText = szText;
lvI.iImage = 0;
}
else if (column == 5)
{
wsprintf(szText, win_get_string(IDS_4098), (temp_hdd[i].tracks * temp_hdd[i].hpc * temp_hdd[i].spt) >> 11);
wsprintf(szText, plat_get_string(IDS_4098), (temp_hdd[i].tracks * temp_hdd[i].hpc * temp_hdd[i].spt) >> 11);
lvI.pszText = szText;
lvI.iImage = 0;
}
@@ -2260,25 +2273,25 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
switch(temp_hdd[i].bus)
{
case HDD_BUS_MFM:
wsprintf(szText, win_get_string(IDS_4608), temp_hdd[i].mfm_channel >> 1, temp_hdd[i].mfm_channel & 1);
wsprintf(szText, plat_get_string(IDS_4608), temp_hdd[i].mfm_channel >> 1, temp_hdd[i].mfm_channel & 1);
break;
case HDD_BUS_XTIDE:
wsprintf(szText, win_get_string(IDS_4609), temp_hdd[i].xtide_channel >> 1, temp_hdd[i].xtide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4609), temp_hdd[i].xtide_channel >> 1, temp_hdd[i].xtide_channel & 1);
break;
case HDD_BUS_ESDI:
wsprintf(szText, win_get_string(IDS_4610), temp_hdd[i].esdi_channel >> 1, temp_hdd[i].esdi_channel & 1);
wsprintf(szText, plat_get_string(IDS_4610), temp_hdd[i].esdi_channel >> 1, temp_hdd[i].esdi_channel & 1);
break;
case HDD_BUS_IDE_PIO_ONLY:
wsprintf(szText, win_get_string(IDS_4611), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4611), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
break;
case HDD_BUS_IDE_PIO_AND_DMA:
wsprintf(szText, win_get_string(IDS_4612), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
wsprintf(szText, plat_get_string(IDS_4612), temp_hdd[i].ide_channel >> 1, temp_hdd[i].ide_channel & 1);
break;
case HDD_BUS_SCSI:
wsprintf(szText, win_get_string(IDS_4613), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
wsprintf(szText, plat_get_string(IDS_4613), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
break;
case HDD_BUS_SCSI_REMOVABLE:
wsprintf(szText, win_get_string(IDS_4614), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
wsprintf(szText, plat_get_string(IDS_4614), temp_hdd[i].scsi_id, temp_hdd[i].scsi_lun);
break;
}
lvI.pszText = szText;
@@ -2301,7 +2314,7 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
}
lvI.iSubItem = 2;
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].tracks);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].tracks);
lvI.pszText = szText;
lvI.iItem = j;
lvI.iImage = 0;
@@ -2312,7 +2325,7 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
}
lvI.iSubItem = 3;
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].hpc);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].hpc);
lvI.pszText = szText;
lvI.iItem = j;
lvI.iImage = 0;
@@ -2323,7 +2336,7 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
}
lvI.iSubItem = 4;
wsprintf(szText, win_get_string(IDS_4098), temp_hdd[i].spt);
wsprintf(szText, plat_get_string(IDS_4098), temp_hdd[i].spt);
lvI.pszText = szText;
lvI.iItem = j;
lvI.iImage = 0;
@@ -2334,7 +2347,7 @@ static BOOL win_settings_hard_disks_recalc_list(HWND hwndList)
}
lvI.iSubItem = 5;
wsprintf(szText, win_get_string(IDS_4098), (temp_hdd[i].tracks * temp_hdd[i].hpc * temp_hdd[i].spt) >> 11);
wsprintf(szText, plat_get_string(IDS_4098), (temp_hdd[i].tracks * temp_hdd[i].hpc * temp_hdd[i].spt) >> 11);
lvI.pszText = szText;
lvI.iItem = j;
lvI.iImage = 0;
@@ -2370,7 +2383,7 @@ static BOOL win_settings_hard_disks_init_columns(HWND hwndList)
for (iCol = 0; iCol < C_COLUMNS_HARD_DISKS; iCol++)
{
lvc.iSubItem = iCol;
lvc.pszText = win_get_string(2082 + iCol);
lvc.pszText = plat_get_string(2082 + iCol);
switch(iCol)
{
@@ -2433,7 +2446,7 @@ static void set_edit_box_contents(HWND hdlg, int id, uint64_t val)
WCHAR szText[256];
h = GetDlgItem(hdlg, id);
wsprintf(szText, win_get_string(IDS_2156), val);
wsprintf(szText, plat_get_string(IDS_2156), val);
SendMessage(h, WM_SETTEXT, (WPARAM) wcslen(szText), (LPARAM) szText);
}
@@ -2467,15 +2480,15 @@ static int hdconf_initialize_hdt_combo(HWND hdlg)
{
temp_size = hdd_table[i][0] * hdd_table[i][1] * hdd_table[i][2];
size_mb = temp_size >> 11;
wsprintf(szText, win_get_string(IDS_2157), size_mb, hdd_table[i][0], hdd_table[i][1], hdd_table[i][2]);
wsprintf(szText, plat_get_string(IDS_2157), size_mb, hdd_table[i][0], hdd_table[i][1], hdd_table[i][2]);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) szText);
if ((tracks == hdd_table[i][0]) && (hpc == hdd_table[i][1]) && (spt == hdd_table[i][2]))
{
selection = i;
}
}
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_4100));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_4101));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_4100));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_4101));
SendMessage(h, CB_SETCURSEL, selection, 0);
return selection;
}
@@ -2533,7 +2546,7 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
hdd_ptr = &(temp_hdd[next_free_id]);
}
SetWindowText(hdlg, win_get_string((existing & 1) ? IDS_4103 : IDS_4102));
SetWindowText(hdlg, plat_get_string((existing & 1) ? IDS_4103 : IDS_4102));
no_update = 1;
spt = (existing & 1) ? 0 : 17;
@@ -2634,7 +2647,7 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
if ((wcslen(hd_file_name) == 0) && (hdd_ptr->bus != HDD_BUS_SCSI_REMOVABLE))
{
hdd_ptr->bus = HDD_BUS_DISABLED;
msgbox_error(hwndParentDialog, IDS_4112);
settings_msgbox(MBX_ERROR, (wchar_t *)IDS_4112);
return TRUE;
}
else if ((wcslen(hd_file_name) == 0) && (hdd_ptr->bus == HDD_BUS_SCSI_REMOVABLE))
@@ -2706,7 +2719,7 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
if (size >= 0x100000000ll)
{
fclose(f);
msgbox_error(hwndParentDialog, IDS_4104);
settings_msgbox(MBX_ERROR, (wchar_t *)IDS_4104);
return TRUE;
}
@@ -2729,7 +2742,7 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
if (size > 0xffffffffffffffffll)
{
fclose(f);
msgbox_error(hwndParentDialog, IDS_4105);
settings_msgbox(MBX_ERROR, (wchar_t *)IDS_4105);
return TRUE;
}
@@ -2769,7 +2782,7 @@ static BOOL CALLBACK win_settings_hard_disks_add_proc(HWND hdlg, UINT message, W
}
fclose(f);
msgbox_info(hwndParentDialog, IDS_4113);
settings_msgbox(MBX_INFO, (wchar_t *)IDS_4113);
}
hd_add_ok_common:
@@ -2787,7 +2800,7 @@ hd_add_ok_common:
return TRUE;
case IDC_CFILE:
if (!file_dlg_w(hdlg, win_get_string(IDS_4106), L"", !(existing & 1)))
if (!file_dlg_w(hdlg, plat_get_string(IDS_4106), L"", !(existing & 1)))
{
if (!(existing & 1))
{
@@ -2795,7 +2808,7 @@ hd_add_ok_common:
if (f != NULL)
{
fclose(f);
if (msgbox_question(hwndMain, IDS_4111) != IDYES)
if (settings_msgbox(MBX_QUESTION, (wchar_t *)IDS_4111) != 0) /* yes */
{
return FALSE;
}
@@ -2806,7 +2819,7 @@ hd_add_ok_common:
if (f == NULL)
{
hdd_add_file_open_error:
msgbox_error(hwndParentDialog, (existing & 1) ? IDS_4107 : IDS_4108);
settings_msgbox(MBX_ERROR, (existing & 1) ? (wchar_t *)IDS_4107 : (wchar_t *)IDS_4108);
return TRUE;
}
if (existing & 1)
@@ -2817,7 +2830,7 @@ hdd_add_file_open_error:
fread(&sector_size, 1, 4, f);
if (sector_size != 512)
{
msgbox_error(hwndParentDialog, IDS_4109);
settings_msgbox(MBX_ERROR, (wchar_t *)IDS_4109);
fclose(f);
return TRUE;
}
@@ -3523,7 +3536,7 @@ static BOOL win_settings_floppy_drives_recalc_list(HWND hwndList)
}
else
{
lvI.pszText = win_get_string(IDS_5376);
lvI.pszText = plat_get_string(IDS_5376);
}
lvI.iItem = i;
lvI.iImage = temp_fdd_types[i];
@@ -3532,7 +3545,7 @@ static BOOL win_settings_floppy_drives_recalc_list(HWND hwndList)
return FALSE;
lvI.iSubItem = 1;
lvI.pszText = win_get_string(temp_fdd_turbo[i] ? IDS_2060 : IDS_2061);
lvI.pszText = plat_get_string(temp_fdd_turbo[i] ? IDS_2060 : IDS_2061);
lvI.iItem = i;
lvI.iImage = 0;
@@ -3542,7 +3555,7 @@ static BOOL win_settings_floppy_drives_recalc_list(HWND hwndList)
}
lvI.iSubItem = 2;
lvI.pszText = win_get_string(temp_fdd_check_bpb[i] ? IDS_2060 : IDS_2061);
lvI.pszText = plat_get_string(temp_fdd_check_bpb[i] ? IDS_2060 : IDS_2061);
lvI.iItem = i;
lvI.iImage = 0;
@@ -3573,21 +3586,21 @@ static BOOL win_settings_cdrom_drives_recalc_list(HWND hwndList)
{
case CDROM_BUS_DISABLED:
default:
lvI.pszText = win_get_string(fsid);
lvI.pszText = plat_get_string(fsid);
lvI.iImage = 0;
break;
case CDROM_BUS_ATAPI_PIO_ONLY:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
lvI.pszText = szText;
lvI.iImage = 1;
break;
case CDROM_BUS_ATAPI_PIO_AND_DMA:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
lvI.pszText = szText;
lvI.iImage = 1;
break;
case CDROM_BUS_SCSI:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].scsi_device_id, temp_cdrom_drives[i].scsi_device_lun);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].scsi_device_id, temp_cdrom_drives[i].scsi_device_lun);
lvI.pszText = szText;
lvI.iImage = 1;
break;
@@ -3609,7 +3622,7 @@ static BOOL win_settings_floppy_drives_init_columns(HWND hwndList)
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.iSubItem = 0;
lvc.pszText = win_get_string(IDS_2143);
lvc.pszText = plat_get_string(IDS_2143);
lvc.cx = 292;
lvc.fmt = LVCFMT_LEFT;
@@ -3620,7 +3633,7 @@ static BOOL win_settings_floppy_drives_init_columns(HWND hwndList)
}
lvc.iSubItem = 1;
lvc.pszText = win_get_string(IDS_2059);
lvc.pszText = plat_get_string(IDS_2059);
lvc.cx = 50;
lvc.fmt = LVCFMT_LEFT;
@@ -3631,7 +3644,7 @@ static BOOL win_settings_floppy_drives_init_columns(HWND hwndList)
}
lvc.iSubItem = 2;
lvc.pszText = win_get_string(IDS_2170);
lvc.pszText = plat_get_string(IDS_2170);
lvc.cx = 75;
lvc.fmt = LVCFMT_LEFT;
@@ -3650,7 +3663,7 @@ static BOOL win_settings_cdrom_drives_init_columns(HWND hwndList)
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.iSubItem = 0;
lvc.pszText = win_get_string(IDS_2082);
lvc.pszText = plat_get_string(IDS_2082);
lvc.cx = 392;
lvc.fmt = LVCFMT_LEFT;
@@ -3721,7 +3734,7 @@ static void win_settings_floppy_drives_update_item(HWND hwndList, int i)
}
else
{
lvI.pszText = win_get_string(IDS_5376);
lvI.pszText = plat_get_string(IDS_5376);
}
lvI.iImage = temp_fdd_types[i];
@@ -3731,7 +3744,7 @@ static void win_settings_floppy_drives_update_item(HWND hwndList, int i)
}
lvI.iSubItem = 1;
lvI.pszText = win_get_string(temp_fdd_turbo[i] ? IDS_2060 : IDS_2061);
lvI.pszText = plat_get_string(temp_fdd_turbo[i] ? IDS_2060 : IDS_2061);
lvI.iItem = i;
lvI.iImage = 0;
@@ -3741,7 +3754,7 @@ static void win_settings_floppy_drives_update_item(HWND hwndList, int i)
}
lvI.iSubItem = 2;
lvI.pszText = win_get_string(temp_fdd_check_bpb[i] ? IDS_2060 : IDS_2061);
lvI.pszText = plat_get_string(temp_fdd_check_bpb[i] ? IDS_2060 : IDS_2061);
lvI.iItem = i;
lvI.iImage = 0;
@@ -3769,21 +3782,21 @@ static void win_settings_cdrom_drives_update_item(HWND hwndList, int i)
{
case CDROM_BUS_DISABLED:
default:
lvI.pszText = win_get_string(fsid);
lvI.pszText = plat_get_string(fsid);
lvI.iImage = 0;
break;
case CDROM_BUS_ATAPI_PIO_ONLY:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
lvI.pszText = szText;
lvI.iImage = 1;
break;
case CDROM_BUS_ATAPI_PIO_AND_DMA:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].ide_channel >> 1, temp_cdrom_drives[i].ide_channel & 1);
lvI.pszText = szText;
lvI.iImage = 1;
break;
case CDROM_BUS_SCSI:
wsprintf(szText, win_get_string(fsid), temp_cdrom_drives[i].scsi_device_id, temp_cdrom_drives[i].scsi_device_lun);
wsprintf(szText, plat_get_string(fsid), temp_cdrom_drives[i].scsi_device_id, temp_cdrom_drives[i].scsi_device_lun);
lvI.pszText = szText;
lvI.iImage = 1;
break;
@@ -3808,28 +3821,28 @@ static void cdrom_add_locations(HWND hdlg)
{
if ((i == CDROM_BUS_DISABLED) || (i >= CDROM_BUS_ATAPI_PIO_ONLY))
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(combo_id_to_string_id(i)));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(combo_id_to_string_id(i)));
}
}
h = GetDlgItem(hdlg, IDC_COMBO_CD_ID);
for (i = 0; i < 16; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4098), i);
wsprintf(lptsTemp, plat_get_string(IDS_4098), i);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
h = GetDlgItem(hdlg, IDC_COMBO_CD_LUN);
for (i = 0; i < 8; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4098), i);
wsprintf(lptsTemp, plat_get_string(IDS_4098), i);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
h = GetDlgItem(hdlg, IDC_COMBO_CD_CHANNEL_IDE);
for (i = 0; i < 8; i++)
{
wsprintf(lptsTemp, win_get_string(IDS_4097), i >> 1, i & 1);
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
SendMessage(h, CB_ADDSTRING, 0, (LPARAM) lptsTemp);
}
@@ -3923,7 +3936,7 @@ static BOOL CALLBACK win_settings_removable_devices_proc(HWND hdlg, UINT message
{
if (i == 0)
{
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)win_get_string(IDS_5376));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)plat_get_string(IDS_5376));
}
else
{
@@ -4274,7 +4287,7 @@ static BOOL win_settings_main_insert_categories(HWND hwndList)
for (i = 0; i < 9; i++)
{
lvI.pszText = win_get_string(IDS_2065+i);
lvI.pszText = plat_get_string(IDS_2065+i);
lvI.iItem = i;
lvI.iImage = i;

View File

@@ -8,7 +8,7 @@
*
* Implement the application's Status Bar.
*
* Version: @(#)win_stbar.c 1.0.2 2017/10/07
* Version: @(#)win_stbar.c 1.0.3 2017/10/09
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
@@ -45,16 +45,15 @@
#include "../network/network.h"
#include "../video/video.h"
#include "../sound/sound.h"
#include "plat_iodev.h"
#include "plat_ui.h"
#include "../plat.h"
#include "../ui.h"
#include "win.h"
#include "win_cdrom_ioctl.h"
HWND hwndSBAR;
static LONG_PTR OriginalStatusBarProcedure;
static LONG_PTR OriginalProcedure;
static HMENU *sb_menu_handles;
static HMENU menuSBAR;
static WCHAR **sbTips;
@@ -132,15 +131,15 @@ static void
StatusBarCreateFloppySubmenu(HMENU m, int id)
{
AppendMenu(m, MF_STRING, IDM_FLOPPY_IMAGE_NEW | id,
win_get_string(IDS_2161));
plat_get_string(IDS_2161));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_FLOPPY_IMAGE_EXISTING | id,
win_get_string(IDS_2162));
plat_get_string(IDS_2162));
AppendMenu(m, MF_STRING, IDM_FLOPPY_IMAGE_EXISTING_WP | id,
win_get_string(IDS_2163));
plat_get_string(IDS_2163));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_FLOPPY_EJECT | id,
win_get_string(IDS_2164));
plat_get_string(IDS_2164));
}
@@ -151,15 +150,15 @@ StatusBarCreateCdromSubmenu(HMENU m, int id)
int i;
AppendMenu(m, MF_STRING, IDM_CDROM_MUTE | id,
win_get_string(IDS_2165));
plat_get_string(IDS_2165));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_CDROM_EMPTY | id,
win_get_string(IDS_2166));
plat_get_string(IDS_2166));
AppendMenu(m, MF_STRING, IDM_CDROM_RELOAD | id,
win_get_string(IDS_2167));
plat_get_string(IDS_2167));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_CDROM_IMAGE | id,
win_get_string(IDS_2168));
plat_get_string(IDS_2168));
if (host_cdrom_drive_available_num == 0) {
if ((cdrom_drives[id].host_drive >= 'A') &&
@@ -206,23 +205,23 @@ static void
StatusBarCreateRemovableDiskSubmenu(HMENU m, int id)
{
AppendMenu(m, MF_STRING, IDM_RDISK_EJECT | id,
win_get_string(IDS_2166));
plat_get_string(IDS_2166));
AppendMenu(m, MF_STRING, IDM_RDISK_RELOAD | id,
win_get_string(IDS_2167));
plat_get_string(IDS_2167));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_RDISK_SEND_CHANGE | id,
win_get_string(IDS_2142));
plat_get_string(IDS_2142));
AppendMenu(m, MF_SEPARATOR, 0, 0);
AppendMenu(m, MF_STRING, IDM_RDISK_IMAGE | id,
win_get_string(IDS_2168));
plat_get_string(IDS_2168));
AppendMenu(m, MF_STRING, IDM_RDISK_IMAGE_WP | id,
win_get_string(IDS_2169));
plat_get_string(IDS_2169));
}
/* API */
int
StatusBarFindPart(int tag)
ui_sb_find_part(int tag)
{
int found = -1;
int i;
@@ -244,7 +243,7 @@ StatusBarFindPart(int tag)
/* API: update one of the icons after activity. */
void
StatusBarUpdateIcon(int tag, int active)
ui_sb_update_icon(int tag, int active)
{
int temp_flags = 0;
int found;
@@ -255,7 +254,7 @@ StatusBarUpdateIcon(int tag, int active)
temp_flags |= active;
found = StatusBarFindPart(tag);
found = ui_sb_find_part(tag);
if (found != -1) {
if (temp_flags != (sb_icon_flags[found] & 1)) {
sb_icon_flags[found] &= ~1;
@@ -273,7 +272,7 @@ StatusBarUpdateIcon(int tag, int active)
/* API: This is for the drive state indicator. */
void
StatusBarUpdateIconState(int tag, int state)
ui_sb_update_icon_state(int tag, int state)
{
int found = -1;
@@ -281,7 +280,7 @@ StatusBarUpdateIconState(int tag, int state)
return;
}
found = StatusBarFindPart(tag);
found = ui_sb_find_part(tag);
if (found != -1) {
sb_icon_flags[found] &= ~256;
sb_icon_flags[found] |= state ? 256 : 0;
@@ -306,10 +305,10 @@ StatusBarCreateFloppyTip(int part)
mbstowcs(wtext, fdd_getname(fdd_get_type(drive)),
strlen(fdd_getname(fdd_get_type(drive))) + 1);
if (wcslen(floppyfns[drive]) == 0) {
_swprintf(tempTip, win_get_string(IDS_2158),
drive+1, wtext, win_get_string(IDS_2057));
_swprintf(tempTip, plat_get_string(IDS_2158),
drive+1, wtext, plat_get_string(IDS_2057));
} else {
_swprintf(tempTip, win_get_string(IDS_2158),
_swprintf(tempTip, plat_get_string(IDS_2158),
drive+1, wtext, floppyfns[drive]);
}
@@ -317,7 +316,7 @@ StatusBarCreateFloppyTip(int part)
free(sbTips[part]);
sbTips[part] = NULL;
}
sbTips[part] = (WCHAR *) malloc((wcslen(tempTip) << 1) + 2);
sbTips[part] = (WCHAR *)malloc((wcslen(tempTip) << 1) + 2);
wcscpy(sbTips[part], tempTip);
}
@@ -333,19 +332,19 @@ StatusBarCreateCdromTip(int part)
int bus = cdrom_drives[drive].bus_type;
id = IDS_4352 + (bus - 1);
szText = (WCHAR *)win_get_string(id);
szText = plat_get_string(id);
if (cdrom_drives[drive].host_drive == 200) {
if (wcslen(cdrom_image[drive].image_path) == 0) {
_swprintf(tempTip, win_get_string(IDS_5120), drive + 1, szText, win_get_string(IDS_2057));
_swprintf(tempTip, plat_get_string(IDS_5120), drive+1, szText, plat_get_string(IDS_2057));
} else {
_swprintf(tempTip, win_get_string(IDS_5120), drive + 1, szText, cdrom_image[drive].image_path);
_swprintf(tempTip, plat_get_string(IDS_5120), drive+1, szText, cdrom_image[drive].image_path);
}
} else if ((cdrom_drives[drive].host_drive >= 'A') && (cdrom_drives[drive].host_drive <= 'Z')) {
_swprintf(wtext, win_get_string(IDS_2058), cdrom_drives[drive].host_drive & ~0x20);
_swprintf(tempTip, win_get_string(IDS_5120), drive + 1, szText, wtext);
_swprintf(wtext, plat_get_string(IDS_2058), cdrom_drives[drive].host_drive & ~0x20);
_swprintf(tempTip, plat_get_string(IDS_5120), drive+1, szText, wtext);
} else {
_swprintf(tempTip, win_get_string(IDS_5120), drive + 1, szText, win_get_string(IDS_2057));
_swprintf(tempTip, plat_get_string(IDS_5120), drive+1, szText, plat_get_string(IDS_2057));
}
if (sbTips[part] != NULL) {
@@ -364,9 +363,9 @@ StatusBarCreateRemovableDiskTip(int part)
int drive = sb_part_meanings[part] & 0x1f;
if (wcslen(hdd[drive].fn) == 0) {
_swprintf(tempTip, win_get_string(IDS_4115), drive, win_get_string(IDS_2057));
_swprintf(tempTip, plat_get_string(IDS_4115), drive, plat_get_string(IDS_2057));
} else {
_swprintf(tempTip, win_get_string(IDS_4115), drive, hdd[drive].fn);
_swprintf(tempTip, plat_get_string(IDS_4115), drive, hdd[drive].fn);
}
if (sbTips[part] != NULL) {
@@ -387,9 +386,9 @@ StatusBarCreateDiskTip(int part)
int bus = sb_part_meanings[part] & 0xf;
id = IDS_4352 + (bus - 1);
szText = (WCHAR *)win_get_string(id);
szText = plat_get_string(id);
_swprintf(tempTip, win_get_string(IDS_4096), szText);
_swprintf(tempTip, plat_get_string(IDS_4096), szText);
if (sbTips[part] != NULL)
free(sbTips[part]);
sbTips[part] = (WCHAR *)malloc((wcslen(tempTip) << 1) + 2);
@@ -402,7 +401,7 @@ StatusBarCreateNetworkTip(int part)
{
WCHAR tempTip[512];
_swprintf(tempTip, win_get_string(IDS_2069));
_swprintf(tempTip, plat_get_string(IDS_2069));
if (sbTips[part] != NULL)
free(sbTips[part]);
@@ -413,7 +412,7 @@ StatusBarCreateNetworkTip(int part)
/* API */
void
StatusBarUpdateTip(int meaning)
ui_sb_update_tip(int meaning)
{
int part = -1;
int i;
@@ -513,7 +512,7 @@ StatusBarCreatePopupMenu(int part)
/* API: update the status bar panes. */
void
StatusBarUpdatePanes(void)
ui_sb_update_panes(void)
{
int i, id, hdint;
int edge = 0;
@@ -556,8 +555,8 @@ StatusBarUpdatePanes(void)
StatusBarDestroyMenus();
StatusBarDestroyTips();
}
sb_parts = 0;
sb_parts = 0;
for (i=0; i<FDD_NUM; i++) {
if (fdd_get_type(i) != 0)
sb_parts++;
@@ -802,7 +801,7 @@ StatusBarPopupMenu(HWND hwnd, POINT pt, int id)
static LRESULT CALLBACK
StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
WCHAR temp_image_path[1024];
WCHAR temp_path[1024];
RECT rc;
POINT pt;
int new_cdrom_drive;
@@ -822,7 +821,7 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDM_FLOPPY_IMAGE_EXISTING:
case IDM_FLOPPY_IMAGE_EXISTING_WP:
id = item_params & 0x0003;
part = StatusBarFindPart(SB_FLOPPY | id);
part = ui_sb_find_part(SB_FLOPPY | id);
if ((part == -1) || (sb_menu_handles == NULL))
break;
@@ -831,29 +830,29 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
floppy_close(id);
ui_writeprot[id] = (item_id == IDM_FLOPPY_IMAGE_EXISTING_WP) ? 1 : 0;
floppy_load(id, wopenfilestring);
StatusBarUpdateIconState(SB_FLOPPY | id, wcslen(floppyfns[id]) ? 0 : 1);
ui_sb_update_icon_state(SB_FLOPPY | id, wcslen(floppyfns[id]) ? 0 : 1);
EnableMenuItem(sb_menu_handles[part], IDM_FLOPPY_EJECT | id, MF_BYCOMMAND | (wcslen(floppyfns[id]) ? MF_ENABLED : MF_GRAYED));
StatusBarUpdateTip(SB_FLOPPY | id);
ui_sb_update_tip(SB_FLOPPY | id);
config_save();
}
break;
case IDM_FLOPPY_EJECT:
id = item_params & 0x0003;
part = StatusBarFindPart(SB_FLOPPY | id);
part = ui_sb_find_part(SB_FLOPPY | id);
if ((part == -1) || (sb_menu_handles == NULL))
break;
floppy_close(id);
StatusBarUpdateIconState(SB_FLOPPY | id, 1);
ui_sb_update_icon_state(SB_FLOPPY | id, 1);
EnableMenuItem(sb_menu_handles[part], IDM_FLOPPY_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarUpdateTip(SB_FLOPPY | id);
ui_sb_update_tip(SB_FLOPPY | id);
config_save();
break;
case IDM_CDROM_MUTE:
id = item_params & 0x0007;
part = StatusBarFindPart(SB_CDROM | id);
part = ui_sb_find_part(SB_CDROM | id);
if ((part == -1) || (sb_menu_handles == NULL))
break;
@@ -875,21 +874,21 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDM_CDROM_IMAGE:
id = item_params & 0x0007;
part = StatusBarFindPart(SB_CDROM | id);
part = ui_sb_find_part(SB_CDROM | id);
if ((part == -1) || (sb_menu_handles == NULL))
break;
if (!file_dlg_w_st(hwnd, IDS_2075, cdrom_image[id].image_path, 0)) {
cdrom_drives[id].prev_host_drive = cdrom_drives[id].host_drive;
wcscpy(temp_image_path, wopenfilestring);
if ((wcscmp(cdrom_image[id].image_path, temp_image_path) == 0) && (cdrom_drives[id].host_drive == 200)) {
wcscpy(temp_path, wopenfilestring);
if ((wcscmp(cdrom_image[id].image_path, temp_path) == 0) && (cdrom_drives[id].host_drive == 200)) {
/* Switching from image to the same image. Do nothing. */
break;
}
wcscpy(cdrom_image[id].prev_image_path, cdrom_image[id].image_path);
cdrom_drives[id].handler->exit(id);
cdrom_close(id);
image_open(id, temp_image_path);
image_open(id, temp_path);
/* Signal media change to the emulated machine. */
cdrom_insert(id);
CheckMenuItem(sb_menu_handles[part], IDM_CDROM_EMPTY | id, MF_UNCHECKED);
@@ -899,14 +898,14 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
cdrom_drives[id].host_drive = (wcslen(cdrom_image[id].image_path) == 0) ? 0 : 200;
if (cdrom_drives[id].host_drive == 200) {
CheckMenuItem(sb_menu_handles[part], IDM_CDROM_IMAGE | id, MF_CHECKED);
StatusBarUpdateIconState(SB_CDROM | id, 0);
ui_sb_update_icon_state(SB_CDROM | id, 0);
} else {
CheckMenuItem(sb_menu_handles[part], IDM_CDROM_IMAGE | id, MF_UNCHECKED);
CheckMenuItem(sb_menu_handles[part], IDM_CDROM_EMPTY | id, MF_UNCHECKED);
StatusBarUpdateIconState(SB_CDROM | id, 1);
ui_sb_update_icon_state(SB_CDROM | id, 1);
}
EnableMenuItem(sb_menu_handles[part], IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarUpdateTip(SB_CDROM | id);
ui_sb_update_tip(SB_CDROM | id);
config_save();
}
break;
@@ -914,7 +913,7 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDM_CDROM_HOST_DRIVE:
id = item_params & 0x0007;
letter = ((item_params >> 3) & 0x001f) + 'A';
part = StatusBarFindPart(SB_CDROM | id);
part = ui_sb_find_part(SB_CDROM | id);
if ((part == -1) || (sb_menu_handles == NULL))
{
break;
@@ -941,8 +940,8 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
cdrom_drives[id].host_drive = new_cdrom_drive;
CheckMenuItem(sb_menu_handles[part], IDM_CDROM_HOST_DRIVE | id | ((cdrom_drives[id].host_drive - 'A') << 3), MF_CHECKED);
EnableMenuItem(sb_menu_handles[part], IDM_CDROM_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
StatusBarUpdateIconState(SB_CDROM | id, 0);
StatusBarUpdateTip(SB_CDROM | id);
ui_sb_update_icon_state(SB_CDROM | id, 0);
ui_sb_update_tip(SB_CDROM | id);
config_save();
break;
@@ -973,18 +972,18 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
scsi_loadhd(hdd[id].scsi_id, hdd[id].scsi_lun, id);
scsi_disk_insert(id);
if (wcslen(hdd[id].fn) > 0) {
StatusBarUpdateIconState(SB_RDISK | id, 0);
ui_sb_update_icon_state(SB_RDISK | id, 0);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_EJECT | id, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | MF_ENABLED);
}
else {
StatusBarUpdateIconState(SB_RDISK | id, 1);
ui_sb_update_icon_state(SB_RDISK | id, 1);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_EJECT | id, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_RELOAD | id, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(sb_menu_handles[part], IDM_RDISK_SEND_CHANGE | id, MF_BYCOMMAND | MF_GRAYED);
}
StatusBarUpdateTip(SB_RDISK | id);
ui_sb_update_tip(SB_RDISK | id);
config_save();
}
break;
@@ -1004,7 +1003,7 @@ StatusBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
default:
return(CallWindowProc((WNDPROC)OriginalStatusBarProcedure,
return(CallWindowProc((WNDPROC)OriginalProcedure,
hwnd, message, wParam, lParam));
}
@@ -1058,7 +1057,7 @@ StatusBarCreate(HWND hwndParent, int idStatus, HINSTANCE hInst)
(HMENU)idStatus, hInst, NULL);
/* Replace the original procedure with ours. */
OriginalStatusBarProcedure = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC);
OriginalProcedure = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC);
SetWindowLongPtr(hwndSBAR, GWL_WNDPROC, (LONG_PTR)&StatusBarProcedure);
SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)17, (LPARAM)0);
@@ -1077,17 +1076,17 @@ StatusBarCreate(HWND hwndParent, int idStatus, HINSTANCE hInst)
/* Initialize the status bar and populate the icons and menus. */
sb_parts = 0;
StatusBarUpdatePanes();
ui_sb_update_panes();
}
/* API */
/* API (Settings) */
void
StatusBarCheckMenuItem(int tag, int id, int chk)
ui_sb_check_menu_item(int tag, int id, int chk)
{
int part;
part = StatusBarFindPart(tag);
part = ui_sb_find_part(tag);
if ((part == -1) || (sb_menu_handles == NULL))
return;
@@ -1095,13 +1094,13 @@ StatusBarCheckMenuItem(int tag, int id, int chk)
}
/* API */
/* API (Settings) */
void
StatusBarEnableMenuItem(int tag, int id, int flg)
ui_sb_enable_menu_item(int tag, int id, int flg)
{
int part;
part = StatusBarFindPart(tag);
part = ui_sb_find_part(tag);
if ((part == -1) || (sb_menu_handles == NULL))
return;
@@ -1111,12 +1110,11 @@ StatusBarEnableMenuItem(int tag, int id, int flg)
/* API */
void
StatusBarSetTextW(wchar_t *wstr)
ui_sb_set_text_w(wchar_t *wstr)
{
int part = -1;
int i;
pclog("SB_settext(%ws)", wstr);
if (!sb_ready || (sb_parts == 0) || (sb_part_meanings == NULL)) return;
for (i=0; i<sb_parts; i++) {
@@ -1124,22 +1122,20 @@ pclog("SB_settext(%ws)", wstr);
part = i;
}
}
pclog(" part=%d", part);
if (part != -1)
SendMessage(hwndSBAR, SB_SETTEXT, part | SBT_NOBORDERS, (LPARAM)wstr);
pclog(" done\n");
}
/* API */
void
StatusBarSetText(char *str)
ui_sb_set_text(char *str)
{
static wchar_t cwstr[512];
static wchar_t wstr[512];
memset(cwstr, 0, 1024);
mbstowcs(cwstr, str, strlen(str) + 1);
StatusBarSetTextW(cwstr);
memset(wstr, 0x00, 1024);
mbstowcs(wstr, str, strlen(str) + 1);
ui_sb_set_text_w(wstr);
}