Change to not allow configured memory size to go over machine's limit (fixes #25.)
Lots of cleanup changes all over to fix the constness of strings [again]. Some cleanups in config.c to remove old stuff.
This commit is contained in:
352
src/config.c
352
src/config.c
@@ -12,7 +12,7 @@
|
||||
* it on Windows XP, and possibly also Vista. Use the
|
||||
* -DANSI_CFG for use on these systems.
|
||||
*
|
||||
* Version: @(#)config.c 1.0.12 2018/04/08
|
||||
* Version: @(#)config.c 1.0.13 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -123,10 +123,10 @@ static list_t config_head;
|
||||
|
||||
|
||||
static section_t *
|
||||
find_section(char *name)
|
||||
find_section(const char *name)
|
||||
{
|
||||
const char *blank = "";
|
||||
section_t *sec;
|
||||
char blank[] = "";
|
||||
|
||||
sec = (section_t *)config_head.next;
|
||||
if (name == NULL)
|
||||
@@ -144,7 +144,7 @@ find_section(char *name)
|
||||
|
||||
|
||||
static entry_t *
|
||||
find_entry(section_t *section, char *name)
|
||||
find_entry(section_t *section, const char *name)
|
||||
{
|
||||
entry_t *ent;
|
||||
|
||||
@@ -180,11 +180,11 @@ entries_num(section_t *section)
|
||||
|
||||
|
||||
static void
|
||||
delete_section_if_empty(char *head)
|
||||
delete_section_if_empty(const char *cat)
|
||||
{
|
||||
section_t *section;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL) return;
|
||||
|
||||
if (entries_num(section) == 0) {
|
||||
@@ -195,7 +195,7 @@ delete_section_if_empty(char *head)
|
||||
|
||||
|
||||
static section_t *
|
||||
create_section(char *name)
|
||||
create_section(const char *name)
|
||||
{
|
||||
section_t *ns = malloc(sizeof(section_t));
|
||||
|
||||
@@ -208,7 +208,7 @@ create_section(char *name)
|
||||
|
||||
|
||||
static entry_t *
|
||||
create_entry(section_t *section, char *name)
|
||||
create_entry(section_t *section, const char *name)
|
||||
{
|
||||
entry_t *ne = malloc(sizeof(entry_t));
|
||||
|
||||
@@ -248,7 +248,7 @@ config_free(void)
|
||||
|
||||
/* Read and parse the configuration file into memory. */
|
||||
static int
|
||||
config_read(wchar_t *fn)
|
||||
config_read(const wchar_t *fn)
|
||||
{
|
||||
char sname[128], ename[128];
|
||||
wchar_t buff[1024];
|
||||
@@ -333,7 +333,7 @@ config_read(wchar_t *fn)
|
||||
ne = malloc(sizeof(entry_t));
|
||||
memset(ne, 0x00, sizeof(entry_t));
|
||||
strncpy(ne->name, ename, sizeof(ne->name));
|
||||
wcsncpy(ne->wdata, &buff[d], sizeof_w(ne->wdata)-1);
|
||||
wcsncpy(ne->wdata, &buff[d], sizeof_w(ne->wdata));
|
||||
ne->wdata[sizeof_w(ne->wdata)-1] = L'\0';
|
||||
wcstombs(ne->data, ne->wdata, sizeof(ne->data));
|
||||
ne->data[sizeof(ne->data)-1] = '\0';
|
||||
@@ -358,7 +358,7 @@ config_read(wchar_t *fn)
|
||||
* has changed it.
|
||||
*/
|
||||
void
|
||||
config_write(wchar_t *fn)
|
||||
config_write(const wchar_t *fn)
|
||||
{
|
||||
wchar_t wtemp[512];
|
||||
section_t *sec;
|
||||
@@ -426,16 +426,13 @@ config_new(void)
|
||||
static void
|
||||
load_general(void)
|
||||
{
|
||||
char *cat = "General";
|
||||
char temp[512];
|
||||
const char *cat = "General";
|
||||
char *p;
|
||||
|
||||
vid_resize = !!config_get_int(cat, "vid_resize", 0);
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
p = config_get_string(cat, "vid_renderer", "default");
|
||||
vid_api = plat_vidapi(p);
|
||||
config_delete_var(cat, "vid_api");
|
||||
|
||||
video_fullscreen_scale = config_get_int(cat, "video_fullscreen_scale", 0);
|
||||
|
||||
@@ -484,16 +481,14 @@ load_general(void)
|
||||
static void
|
||||
load_machine(void)
|
||||
{
|
||||
char *cat = "Machine";
|
||||
const char *cat = "Machine";
|
||||
char *p;
|
||||
|
||||
p = config_get_string(cat, "machine", NULL);
|
||||
if (p != NULL)
|
||||
machine = machine_get_machine_from_internal_name(p);
|
||||
else
|
||||
machine = 0;
|
||||
if (machine >= machine_count())
|
||||
machine = machine_count() - 1;
|
||||
machine = -1;
|
||||
|
||||
romset = machine_getromset();
|
||||
cpu_manufacturer = config_get_int(cat, "cpu_manufacturer", 0);
|
||||
@@ -519,7 +514,7 @@ load_machine(void)
|
||||
static void
|
||||
load_video(void)
|
||||
{
|
||||
char *cat = "Video";
|
||||
const char *cat = "Video";
|
||||
char *p;
|
||||
|
||||
if (machines[machine].fixed_vidcard) {
|
||||
@@ -536,13 +531,10 @@ load_video(void)
|
||||
config_delete_var(cat, "gfxcard");
|
||||
}
|
||||
if (p == NULL) {
|
||||
if (machines[machine].flags & MACHINE_VIDEO) {
|
||||
p = (char *)malloc((strlen("internal")+1)*sizeof(char));
|
||||
strcpy(p, "internal");
|
||||
} else {
|
||||
p = (char *)malloc((strlen("none")+1)*sizeof(char));
|
||||
strcpy(p, "none");
|
||||
}
|
||||
if (machines[machine].flags & MACHINE_VIDEO)
|
||||
p = "internal";
|
||||
else
|
||||
p = "none";
|
||||
}
|
||||
vid_card = video_get_video_from_internal_name(p);
|
||||
|
||||
@@ -557,7 +549,7 @@ load_video(void)
|
||||
static void
|
||||
load_input_devices(void)
|
||||
{
|
||||
char *cat = "Input devices";
|
||||
const char *cat = "Input devices";
|
||||
char temp[512];
|
||||
int c, d;
|
||||
char *p;
|
||||
@@ -598,8 +590,7 @@ load_input_devices(void)
|
||||
static void
|
||||
load_sound(void)
|
||||
{
|
||||
char *cat = "Sound";
|
||||
char temp[512];
|
||||
const char *cat = "Sound";
|
||||
char *p;
|
||||
|
||||
p = config_get_string(cat, "sound_card", NULL);
|
||||
@@ -624,18 +615,14 @@ load_sound(void)
|
||||
|
||||
mpu401_standalone_enable = !!config_get_int(cat, "mpu401_standalone", 0);
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
p = config_get_string(cat, "opl3_type", "dbopl");
|
||||
strcpy(temp, p);
|
||||
if (!strcmp(temp, "nukedopl") || !strcmp(temp, "1"))
|
||||
if (!strcmp(p, "nukedopl") || !strcmp(p, "1"))
|
||||
opl3_type = 1;
|
||||
else
|
||||
opl3_type = 0;
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
p = config_get_string(cat, "sound_type", "float");
|
||||
strcpy(temp, p);
|
||||
if (!strcmp(temp, "float") || !strcmp(temp, "1"))
|
||||
if (!strcmp(p, "float") || !strcmp(p, "1"))
|
||||
sound_is_float = 1;
|
||||
else
|
||||
sound_is_float = 0;
|
||||
@@ -646,7 +633,7 @@ load_sound(void)
|
||||
static void
|
||||
load_network(void)
|
||||
{
|
||||
char *cat = "Network";
|
||||
const char *cat = "Network";
|
||||
char *p;
|
||||
|
||||
p = config_get_string(cat, "net_type", NULL);
|
||||
@@ -695,7 +682,7 @@ load_network(void)
|
||||
static void
|
||||
load_ports(void)
|
||||
{
|
||||
char *cat = "Ports (COM & LPT)";
|
||||
const char *cat = "Ports (COM & LPT)";
|
||||
char temp[128];
|
||||
char *p;
|
||||
int i;
|
||||
@@ -721,7 +708,7 @@ load_ports(void)
|
||||
static void
|
||||
load_other_peripherals(void)
|
||||
{
|
||||
char *cat = "Other peripherals";
|
||||
const char *cat = "Other peripherals";
|
||||
char temp[512], *p;
|
||||
int c;
|
||||
|
||||
@@ -748,7 +735,6 @@ load_other_peripherals(void)
|
||||
}
|
||||
hdc_type = hdc_get_from_internal_name(p);
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
for (c=2; c<4; c++) {
|
||||
sprintf(temp, "ide_%02i", c + 1);
|
||||
p = config_get_string(cat, temp, NULL);
|
||||
@@ -766,7 +752,7 @@ load_other_peripherals(void)
|
||||
|
||||
|
||||
static int
|
||||
tally_char(char *str, char c)
|
||||
tally_char(const char *str, char c)
|
||||
{
|
||||
int tally;
|
||||
|
||||
@@ -784,7 +770,7 @@ tally_char(char *str, char c)
|
||||
static void
|
||||
load_hard_disks(void)
|
||||
{
|
||||
char *cat = "Hard disks";
|
||||
const char *cat = "Hard disks";
|
||||
char temp[512], tmp2[512];
|
||||
char s[512];
|
||||
int c;
|
||||
@@ -793,17 +779,21 @@ load_hard_disks(void)
|
||||
int max_spt, max_hpc, max_tracks;
|
||||
int board = 0, dev = 0;
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
for (c = 0; c < HDD_NUM; c++) {
|
||||
sprintf(temp, "hdd_%02i_parameters", c+1);
|
||||
p = config_get_string(cat, temp, "0, 0, 0, 0, none");
|
||||
if (tally_char(p, ',') == 3) {
|
||||
sscanf(p, "%u, %u, %u, %s",
|
||||
(int *)&hdd[c].spt, (int *)&hdd[c].hpc, (int *)&hdd[c].tracks, s);
|
||||
(int *)&hdd[c].spt,
|
||||
(int *)&hdd[c].hpc,
|
||||
(int *)&hdd[c].tracks, s);
|
||||
hdd[c].wp = 0;
|
||||
} else {
|
||||
sscanf(p, "%u, %u, %u, %d, %s",
|
||||
(int *)&hdd[c].spt, (int *)&hdd[c].hpc, (int *)&hdd[c].tracks, (int *)&hdd[c].wp, s);
|
||||
(int *)&hdd[c].spt,
|
||||
(int *)&hdd[c].hpc,
|
||||
(int *)&hdd[c].tracks,
|
||||
(int *)&hdd[c].wp, s);
|
||||
}
|
||||
|
||||
hdd[c].bus = hdd_string_to_bus(s, 0);
|
||||
@@ -945,152 +935,11 @@ load_hard_disks(void)
|
||||
}
|
||||
|
||||
|
||||
/* Load old "Removable Devices" section. */
|
||||
static void
|
||||
load_removable_devices(void)
|
||||
{
|
||||
char *cat = "Removable devices";
|
||||
char temp[512], tmp2[512], *p;
|
||||
char s[512];
|
||||
unsigned int board = 0, dev = 0;
|
||||
wchar_t *wp;
|
||||
int c;
|
||||
|
||||
if (find_section(cat) == NULL)
|
||||
return;
|
||||
|
||||
for (c=0; c<FDD_NUM; c++) {
|
||||
sprintf(temp, "fdd_%02i_type", c+1);
|
||||
p = config_get_string(cat, temp, (c < 2) ? "525_2dd" : "none");
|
||||
fdd_set_type(c, fdd_get_from_internal_name(p));
|
||||
if (fdd_get_type(c) > 13)
|
||||
fdd_set_type(c, 13);
|
||||
|
||||
sprintf(temp, "fdd_%02i_fn", c + 1);
|
||||
wp = config_get_wstring(cat, temp, L"");
|
||||
|
||||
/* Try to make relative, and copy to destination. */
|
||||
pc_path(floppyfns[c], sizeof_w(floppyfns[c]), wp);
|
||||
|
||||
sprintf(temp, "fdd_%02i_writeprot", c+1);
|
||||
ui_writeprot[c] = !!config_get_int(cat, temp, 0);
|
||||
sprintf(temp, "fdd_%02i_turbo", c + 1);
|
||||
fdd_set_turbo(c, !!config_get_int(cat, temp, 0));
|
||||
sprintf(temp, "fdd_%02i_check_bpb", c+1);
|
||||
fdd_set_check_bpb(c, !!config_get_int(cat, temp, 1));
|
||||
|
||||
/* Check whether each value is default, if yes, delete it so that only non-default values will later be saved. */
|
||||
sprintf(temp, "fdd_%02i_type", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "fdd_%02i_fn", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "fdd_%02i_writeprot", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "fdd_%02i_turbo", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "fdd_%02i_check_bpb", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
|
||||
memset(temp, 0x00, sizeof(temp));
|
||||
for (c=0; c<CDROM_NUM; c++) {
|
||||
sprintf(temp, "cdrom_%02i_host_drive", c+1);
|
||||
cdrom_drives[c].host_drive = config_get_int(cat, temp, 0);
|
||||
cdrom_drives[c].prev_host_drive = cdrom_drives[c].host_drive;
|
||||
|
||||
sprintf(temp, "cdrom_%02i_parameters", c+1);
|
||||
p = config_get_string(cat, temp, NULL);
|
||||
if (p != NULL)
|
||||
sscanf(p, "%01u, %s", &cdrom_drives[c].sound_on, s);
|
||||
else
|
||||
sscanf("0, none", "%01u, %s", &cdrom_drives[c].sound_on, s);
|
||||
cdrom_drives[c].bus_type = hdd_string_to_bus(s, 1);
|
||||
|
||||
/* Default values, needed for proper operation of the Settings dialog. */
|
||||
cdrom_drives[c].ide_channel = cdrom_drives[c].scsi_device_id = c + 2;
|
||||
|
||||
sprintf(temp, "cdrom_%02i_ide_channel", c+1);
|
||||
if ((cdrom_drives[c].bus_type == CDROM_BUS_ATAPI_PIO_ONLY) ||
|
||||
(cdrom_drives[c].bus_type == CDROM_BUS_ATAPI_PIO_AND_DMA)) {
|
||||
sprintf(tmp2, "%01u:%01u", (c+2)>>1, (c+2)&1);
|
||||
p = config_get_string(cat, temp, tmp2);
|
||||
if (! strstr(p, ":")) {
|
||||
sscanf(p, "%i", (int *)&cdrom_drives[c].ide_channel);
|
||||
cdrom_drives[c].ide_channel &= 7;
|
||||
} else {
|
||||
sscanf(p, "%01u:%01u", &board, &dev);
|
||||
|
||||
board &= 3;
|
||||
dev &= 1;
|
||||
cdrom_drives[c].ide_channel = (board<<1)+dev;
|
||||
}
|
||||
|
||||
if (cdrom_drives[c].ide_channel > 7)
|
||||
cdrom_drives[c].ide_channel = 7;
|
||||
} else {
|
||||
sprintf(temp, "cdrom_%02i_scsi_location", c+1);
|
||||
if (cdrom_drives[c].bus_type == CDROM_BUS_SCSI) {
|
||||
sprintf(tmp2, "%02u:%02u", c+2, 0);
|
||||
p = config_get_string(cat, temp, tmp2);
|
||||
sscanf(p, "%02u:%02u",
|
||||
&cdrom_drives[c].scsi_device_id,
|
||||
&cdrom_drives[c].scsi_device_lun);
|
||||
|
||||
if (cdrom_drives[c].scsi_device_id > 15)
|
||||
cdrom_drives[c].scsi_device_id = 15;
|
||||
if (cdrom_drives[c].scsi_device_lun > 7)
|
||||
cdrom_drives[c].scsi_device_lun = 7;
|
||||
} else {
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(temp, "cdrom_%02i_image_path", c+1);
|
||||
wp = config_get_wstring(cat, temp, L"");
|
||||
|
||||
/* Try to make relative, and copy to destination. */
|
||||
pc_path(cdrom_image[c].image_path, sizeof_w(cdrom_image[c].image_path), wp);
|
||||
|
||||
if (cdrom_drives[c].host_drive < 'A')
|
||||
cdrom_drives[c].host_drive = 0;
|
||||
|
||||
if ((cdrom_drives[c].host_drive == 0x200) &&
|
||||
(wcslen(cdrom_image[c].image_path) == 0))
|
||||
cdrom_drives[c].host_drive = 0;
|
||||
|
||||
/* If the CD-ROM is disabled, delete all its variables. */
|
||||
sprintf(temp, "cdrom_%02i_host_drive", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "cdrom_%02i_parameters", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "cdrom_%02i_ide_channel", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "cdrom_%02i_scsi_location", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "cdrom_%02i_image_path", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "cdrom_%02i_iso_path", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
|
||||
delete_section_if_empty(cat);
|
||||
}
|
||||
|
||||
|
||||
/* Load "Floppy Drives" section. */
|
||||
static void
|
||||
load_floppy_drives(void)
|
||||
{
|
||||
char *cat = "Floppy drives";
|
||||
const char *cat = "Floppy drives";
|
||||
char temp[512], *p;
|
||||
wchar_t *wp;
|
||||
int c;
|
||||
@@ -1124,15 +973,15 @@ load_floppy_drives(void)
|
||||
sprintf(temp, "fdd_%02i_fn", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
if (ui_writeprot[c] == 0) {
|
||||
if (! ui_writeprot[c]) {
|
||||
sprintf(temp, "fdd_%02i_writeprot", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
if (fdd_get_turbo(c) == 0) {
|
||||
if (! fdd_get_turbo(c)) {
|
||||
sprintf(temp, "fdd_%02i_turbo", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
if (fdd_get_check_bpb(c) == 1) {
|
||||
if (! fdd_get_check_bpb(c)) {
|
||||
sprintf(temp, "fdd_%02i_check_bpb", c+1);
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
@@ -1140,18 +989,17 @@ load_floppy_drives(void)
|
||||
}
|
||||
|
||||
|
||||
/* Load "Other Removable Devices" section. */
|
||||
/* Load "Removable Devices" section. */
|
||||
static void
|
||||
load_other_removable_devices(void)
|
||||
load_removable_devices(void)
|
||||
{
|
||||
char *cat = "Other removable devices";
|
||||
const char *cat = "Other removable devices";
|
||||
char temp[512], tmp2[512], *p;
|
||||
char s[512];
|
||||
unsigned int board = 0, dev = 0;
|
||||
wchar_t *wp;
|
||||
int c;
|
||||
|
||||
memset(temp, 0x00, sizeof(temp));
|
||||
for (c = 0; c < CDROM_NUM; c++) {
|
||||
sprintf(temp, "cdrom_%02i_host_drive", c+1);
|
||||
cdrom_drives[c].host_drive = config_get_int(cat, temp, 0);
|
||||
@@ -1242,7 +1090,6 @@ load_other_removable_devices(void)
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
|
||||
memset(temp, 0x00, sizeof(temp));
|
||||
for (c = 0; c < ZIP_NUM; c++) {
|
||||
sprintf(temp, "zip_%02i_parameters", c+1);
|
||||
p = config_get_string(cat, temp, NULL);
|
||||
@@ -1363,8 +1210,7 @@ config_load(void)
|
||||
load_other_peripherals(); /* Other peripherals */
|
||||
load_hard_disks(); /* Hard disks */
|
||||
load_floppy_drives(); /* Floppy drives */
|
||||
load_other_removable_devices(); /* Other removable devices */
|
||||
load_removable_devices(); /* Removable devices (legacy) */
|
||||
load_removable_devices(); /* Other removable devices */
|
||||
|
||||
/* Mark the configuration as changed. */
|
||||
config_changed = 1;
|
||||
@@ -1377,19 +1223,19 @@ config_load(void)
|
||||
static void
|
||||
save_general(void)
|
||||
{
|
||||
char *cat = "General";
|
||||
const char *cat = "General";
|
||||
char temp[512];
|
||||
char *va_name;
|
||||
const char *str;
|
||||
|
||||
config_set_int(cat, "vid_resize", vid_resize);
|
||||
if (vid_resize == 0)
|
||||
config_delete_var(cat, "vid_resize");
|
||||
|
||||
va_name = plat_vidapi_name(vid_api);
|
||||
if (!strcmp(va_name, "default")) {
|
||||
str = plat_vidapi_name(vid_api);
|
||||
if (! strcmp(str, "default")) {
|
||||
config_delete_var(cat, "vid_renderer");
|
||||
} else {
|
||||
config_set_string(cat, "vid_renderer", va_name);
|
||||
config_set_string(cat, "vid_renderer", str);
|
||||
}
|
||||
|
||||
if (video_fullscreen_scale == 0)
|
||||
@@ -1472,7 +1318,7 @@ save_general(void)
|
||||
static void
|
||||
save_machine(void)
|
||||
{
|
||||
char *cat = "Machine";
|
||||
const char *cat = "Machine";
|
||||
|
||||
config_set_string(cat, "machine", machine_get_internal_name());
|
||||
|
||||
@@ -1516,7 +1362,7 @@ save_machine(void)
|
||||
static void
|
||||
save_video(void)
|
||||
{
|
||||
char *cat = "Video";
|
||||
const char *cat = "Video";
|
||||
|
||||
config_set_string(cat, "video_card",
|
||||
video_get_internal_name(video_old_to_new(vid_card)));
|
||||
@@ -1539,7 +1385,7 @@ save_video(void)
|
||||
static void
|
||||
save_input_devices(void)
|
||||
{
|
||||
char *cat = "Input devices";
|
||||
const char *cat = "Input devices";
|
||||
char temp[512], tmp2[512];
|
||||
int c, d;
|
||||
|
||||
@@ -1598,17 +1444,19 @@ save_input_devices(void)
|
||||
static void
|
||||
save_sound(void)
|
||||
{
|
||||
char *cat = "Sound";
|
||||
const char *cat = "Sound";
|
||||
|
||||
if (sound_card_current == 0)
|
||||
config_delete_var(cat, "sound_card");
|
||||
else
|
||||
config_set_string(cat, "sound_card", sound_card_get_internal_name(sound_card_current));
|
||||
config_set_string(cat, "sound_card",
|
||||
sound_card_get_internal_name(sound_card_current));
|
||||
|
||||
if (!strcmp(midi_device_get_internal_name(midi_device_current), "none"))
|
||||
config_delete_var(cat, "midi_device");
|
||||
else
|
||||
config_set_string(cat, "midi_device", midi_device_get_internal_name(midi_device_current));
|
||||
config_set_string(cat, "midi_device",
|
||||
midi_device_get_internal_name(midi_device_current));
|
||||
|
||||
if (mpu401_standalone_enable == 0)
|
||||
config_delete_var(cat, "mpu401_standalone");
|
||||
@@ -1633,7 +1481,7 @@ save_sound(void)
|
||||
static void
|
||||
save_network(void)
|
||||
{
|
||||
char *cat = "Network";
|
||||
const char *cat = "Network";
|
||||
|
||||
if (network_type == NET_TYPE_NONE)
|
||||
config_delete_var(cat, "net_type");
|
||||
@@ -1664,7 +1512,7 @@ save_network(void)
|
||||
static void
|
||||
save_ports(void)
|
||||
{
|
||||
char *cat = "Ports (COM & LPT)";
|
||||
const char *cat = "Ports (COM & LPT)";
|
||||
char temp[128];
|
||||
int i;
|
||||
|
||||
@@ -1686,7 +1534,7 @@ save_ports(void)
|
||||
sprintf(temp, "parallel%i_device", i);
|
||||
if (parallel_device[i] != 0)
|
||||
config_set_string(cat, temp,
|
||||
(char *)parallel_device_get_internal_name(parallel_device[i]));
|
||||
parallel_device_get_internal_name(parallel_device[i]));
|
||||
else
|
||||
config_delete_var(cat, temp);
|
||||
}
|
||||
@@ -1699,7 +1547,7 @@ save_ports(void)
|
||||
static void
|
||||
save_other_peripherals(void)
|
||||
{
|
||||
char *cat = "Other peripherals";
|
||||
const char *cat = "Other peripherals";
|
||||
char temp[512], tmp2[512];
|
||||
int c;
|
||||
|
||||
@@ -1711,7 +1559,6 @@ save_other_peripherals(void)
|
||||
|
||||
config_set_string(cat, "hdc", hdc_get_internal_name(hdc_type));
|
||||
|
||||
memset(temp, '\0', sizeof(temp));
|
||||
for (c = 2; c < 4; c++) {
|
||||
sprintf(temp, "ide_%02i", c+1);
|
||||
sprintf(tmp2, "%i, %02i", !!ide_enable[c], ide_irq[c]);
|
||||
@@ -1734,12 +1581,11 @@ save_other_peripherals(void)
|
||||
static void
|
||||
save_hard_disks(void)
|
||||
{
|
||||
char *cat = "Hard disks";
|
||||
const char *cat = "Hard disks";
|
||||
char temp[24], tmp2[64];
|
||||
char *p;
|
||||
int c;
|
||||
|
||||
memset(temp, 0x00, sizeof(temp));
|
||||
for (c = 0; c < HDD_NUM; c++) {
|
||||
sprintf(temp, "hdd_%02i_parameters", c+1);
|
||||
if (hdd_is_valid(c)) {
|
||||
@@ -1800,7 +1646,7 @@ save_hard_disks(void)
|
||||
static void
|
||||
save_floppy_drives(void)
|
||||
{
|
||||
char *cat = "Floppy drives";
|
||||
const char *cat = "Floppy drives";
|
||||
char temp[512];
|
||||
int c;
|
||||
|
||||
@@ -1851,7 +1697,7 @@ save_floppy_drives(void)
|
||||
static void
|
||||
save_other_removable_devices(void)
|
||||
{
|
||||
char *cat = "Other removable devices";
|
||||
const char *cat = "Other removable devices";
|
||||
char temp[512], tmp2[512];
|
||||
int c;
|
||||
|
||||
@@ -1997,12 +1843,12 @@ config_dump(void)
|
||||
|
||||
|
||||
void
|
||||
config_delete_var(char *head, char *name)
|
||||
config_delete_var(const char *cat, const char *name)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL) return;
|
||||
|
||||
entry = find_entry(section, name);
|
||||
@@ -2014,13 +1860,13 @@ config_delete_var(char *head, char *name)
|
||||
|
||||
|
||||
int
|
||||
config_get_int(char *head, char *name, int def)
|
||||
config_get_int(const char *cat, const char *name, int def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
int value;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
|
||||
@@ -2035,13 +1881,13 @@ config_get_int(char *head, char *name, int def)
|
||||
|
||||
|
||||
int
|
||||
config_get_hex16(char *head, char *name, int def)
|
||||
config_get_hex16(const char *cat, const char *name, int def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
int value;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
|
||||
@@ -2056,13 +1902,13 @@ config_get_hex16(char *head, char *name, int def)
|
||||
|
||||
|
||||
int
|
||||
config_get_hex20(char *head, char *name, int def)
|
||||
config_get_hex20(const char *cat, const char *name, int def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
int value;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
|
||||
@@ -2077,13 +1923,13 @@ config_get_hex20(char *head, char *name, int def)
|
||||
|
||||
|
||||
int
|
||||
config_get_mac(char *head, char *name, int def)
|
||||
config_get_mac(const char *cat, const char *name, int def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
int val0 = 0, val1 = 0, val2 = 0;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
|
||||
@@ -2098,50 +1944,50 @@ config_get_mac(char *head, char *name, int def)
|
||||
|
||||
|
||||
char *
|
||||
config_get_string(char *head, char *name, char *def)
|
||||
config_get_string(const char *cat, const char *name, const char *def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
return((char *)def);
|
||||
|
||||
entry = find_entry(section, name);
|
||||
if (entry == NULL)
|
||||
return(def);
|
||||
return((char *)def);
|
||||
|
||||
return(entry->data);
|
||||
}
|
||||
|
||||
|
||||
wchar_t *
|
||||
config_get_wstring(char *head, char *name, wchar_t *def)
|
||||
config_get_wstring(const char *cat, const char *name, const wchar_t *def)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *entry;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
return(def);
|
||||
return((wchar_t *)def);
|
||||
|
||||
entry = find_entry(section, name);
|
||||
if (entry == NULL)
|
||||
return(def);
|
||||
return((wchar_t *)def);
|
||||
|
||||
return(entry->wdata);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
config_set_int(char *head, char *name, int val)
|
||||
config_set_int(const char *cat, const char *name, int val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
@@ -2153,14 +1999,14 @@ config_set_int(char *head, char *name, int val)
|
||||
|
||||
|
||||
void
|
||||
config_set_hex16(char *head, char *name, int val)
|
||||
config_set_hex16(const char *cat, const char *name, int val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
@@ -2172,14 +2018,14 @@ config_set_hex16(char *head, char *name, int val)
|
||||
|
||||
|
||||
void
|
||||
config_set_hex20(char *head, char *name, int val)
|
||||
config_set_hex20(const char *cat, const char *name, int val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
@@ -2191,14 +2037,14 @@ config_set_hex20(char *head, char *name, int val)
|
||||
|
||||
|
||||
void
|
||||
config_set_mac(char *head, char *name, int val)
|
||||
config_set_mac(const char *cat, const char *name, int val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
@@ -2211,14 +2057,14 @@ config_set_mac(char *head, char *name, int val)
|
||||
|
||||
|
||||
void
|
||||
config_set_string(char *head, char *name, char *val)
|
||||
config_set_string(const char *cat, const char *name, const char *val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
@@ -2230,14 +2076,14 @@ config_set_string(char *head, char *name, char *val)
|
||||
|
||||
|
||||
void
|
||||
config_set_wstring(char *head, char *name, wchar_t *val)
|
||||
config_set_wstring(const char *cat, const char *name, const wchar_t *val)
|
||||
{
|
||||
section_t *section;
|
||||
entry_t *ent;
|
||||
|
||||
section = find_section(head);
|
||||
section = find_section(cat);
|
||||
if (section == NULL)
|
||||
section = create_section(head);
|
||||
section = create_section(cat);
|
||||
|
||||
ent = find_entry(section, name);
|
||||
if (ent == NULL)
|
||||
|
||||
30
src/config.h
30
src/config.h
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Configuration file handler header.
|
||||
*
|
||||
* Version: @(#)config.h 1.0.1 2018/02/14
|
||||
* Version: @(#)config.h 1.0.2 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -46,22 +46,22 @@ extern "C" {
|
||||
|
||||
extern void config_load(void);
|
||||
extern void config_save(void);
|
||||
extern void config_write(wchar_t *fn);
|
||||
extern void config_write(const wchar_t *fn);
|
||||
extern void config_dump(void);
|
||||
|
||||
extern void config_delete_var(char *head, char *name);
|
||||
extern int config_get_int(char *head, char *name, int def);
|
||||
extern int config_get_hex16(char *head, char *name, int def);
|
||||
extern int config_get_hex20(char *head, char *name, int def);
|
||||
extern int config_get_mac(char *head, char *name, int def);
|
||||
extern char *config_get_string(char *head, char *name, char *def);
|
||||
extern wchar_t *config_get_wstring(char *head, char *name, wchar_t *def);
|
||||
extern void config_set_int(char *head, char *name, int val);
|
||||
extern void config_set_hex16(char *head, char *name, int val);
|
||||
extern void config_set_hex20(char *head, char *name, int val);
|
||||
extern void config_set_mac(char *head, char *name, int val);
|
||||
extern void config_set_string(char *head, char *name, char *val);
|
||||
extern void config_set_wstring(char *head, char *name, wchar_t *val);
|
||||
extern void config_delete_var(const char *cat, const char *name);
|
||||
extern int config_get_int(const char *cat, const char *name, int def);
|
||||
extern int config_get_hex16(const char *cat, const char *name, int def);
|
||||
extern int config_get_hex20(const char *cat, const char *name, int def);
|
||||
extern int config_get_mac(const char *cat, const char *name, int def);
|
||||
extern char *config_get_string(const char *cat, const char *name, const char *def);
|
||||
extern wchar_t *config_get_wstring(const char *cat, const char *name, const wchar_t *def);
|
||||
extern void config_set_int(const char *cat, const char *name, int val);
|
||||
extern void config_set_hex16(const char *cat, const char *name, int val);
|
||||
extern void config_set_hex20(const char *cat, const char *name, int val);
|
||||
extern void config_set_mac(const char *cat, const char *name, int val);
|
||||
extern void config_set_string(const char *cat, const char *name, const char *val);
|
||||
extern void config_set_wstring(const char *cat, const char *name, const wchar_t *val);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Common code to handle all sorts of disk controllers.
|
||||
*
|
||||
* Version: @(#)hdc.c 1.0.5 2018/04/05
|
||||
* Version: @(#)hdc.c 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -191,17 +191,17 @@ hdc_reset(void)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
hdc_get_name(int hdc)
|
||||
{
|
||||
return((char *)controllers[hdc].name);
|
||||
return(controllers[hdc].name);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
hdc_get_internal_name(int hdc)
|
||||
{
|
||||
return((char *)controllers[hdc].internal_name);
|
||||
return(controllers[hdc].internal_name);
|
||||
}
|
||||
|
||||
|
||||
@@ -227,15 +227,16 @@ hdc_available(int hdc)
|
||||
|
||||
|
||||
int
|
||||
hdc_get_from_internal_name(char *s)
|
||||
hdc_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (controllers[c].internal_name != NULL) {
|
||||
if (! strcmp((char *)controllers[c].internal_name, s))
|
||||
if (! strcmp(controllers[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the common disk controller handler.
|
||||
*
|
||||
* Version: @(#)hdc.h 1.0.5 2018/04/08
|
||||
* Version: @(#)hdc.h 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -77,12 +77,12 @@ extern void hdc_log(const char *fmt, ...);
|
||||
extern void hdc_init(char *name);
|
||||
extern void hdc_reset(void);
|
||||
|
||||
extern char *hdc_get_name(int hdc);
|
||||
extern char *hdc_get_internal_name(int hdc);
|
||||
extern const char *hdc_get_name(int hdc);
|
||||
extern const char *hdc_get_internal_name(int hdc);
|
||||
extern const device_t *hdc_get_device(int hdc);
|
||||
extern int hdc_get_flags(int hdc);
|
||||
extern int hdc_available(int hdc);
|
||||
extern int hdc_get_from_internal_name(char *s);
|
||||
extern int hdc_get_from_internal_name(const char *s);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the floppy drive emulation.
|
||||
*
|
||||
* Version: @(#)fdd.c 1.0.7 2018/04/09
|
||||
* Version: @(#)fdd.c 1.0.8 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -79,8 +79,8 @@ static fdc_t *fdd_fdc;
|
||||
|
||||
|
||||
static const struct {
|
||||
wchar_t *ext;
|
||||
void (*load)(int drive, wchar_t *fn);
|
||||
const wchar_t *ext;
|
||||
int (*load)(int drive, const wchar_t *fn);
|
||||
void (*close)(int drive);
|
||||
int size;
|
||||
} loaders[]= {
|
||||
@@ -163,8 +163,8 @@ static const struct
|
||||
{
|
||||
int max_track;
|
||||
int flags;
|
||||
char name[64];
|
||||
char internal_name[24];
|
||||
const char *name;
|
||||
const char *internal_name;
|
||||
} drive_types[] =
|
||||
{
|
||||
{ /*None*/
|
||||
@@ -210,34 +210,37 @@ static const struct
|
||||
86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed"
|
||||
},
|
||||
{ /*End of list*/
|
||||
-1, -1, "", ""
|
||||
-1, -1, NULL, NULL
|
||||
}
|
||||
};
|
||||
|
||||
char *fdd_getname(int type)
|
||||
|
||||
const char *fdd_getname(int type)
|
||||
{
|
||||
return (char *)drive_types[type].name;
|
||||
return drive_types[type].name;
|
||||
}
|
||||
|
||||
char *fdd_get_internal_name(int type)
|
||||
const char *fdd_get_internal_name(int type)
|
||||
{
|
||||
return (char *)drive_types[type].internal_name;
|
||||
return drive_types[type].internal_name;
|
||||
}
|
||||
|
||||
int fdd_get_from_internal_name(char *s)
|
||||
int fdd_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (strlen(drive_types[c].internal_name))
|
||||
while (drive_types[c].internal_name != NULL)
|
||||
{
|
||||
if (!strcmp((char *)drive_types[c].internal_name, s))
|
||||
if (! strcmp(drive_types[c].internal_name, s))
|
||||
return c;
|
||||
c++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* Not found. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* This is needed for the dump as 86F feature. */
|
||||
void fdd_do_seek(int drive, int track)
|
||||
{
|
||||
@@ -437,19 +440,20 @@ int fdd_get_densel(int drive)
|
||||
}
|
||||
}
|
||||
|
||||
void fdd_load(int drive, wchar_t *fn)
|
||||
int fdd_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
int c = 0, size;
|
||||
int ok;
|
||||
wchar_t *p;
|
||||
FILE *f;
|
||||
|
||||
pclog("FDD: loading drive %d with '%ls'\n", drive, fn);
|
||||
|
||||
if (!fn) return;
|
||||
if (!fn) return(0);
|
||||
p = plat_get_extension(fn);
|
||||
if (!p) return;
|
||||
if (!p) return(0);
|
||||
f = plat_fopen(fn, L"rb");
|
||||
if (!f) return;
|
||||
if (!f) return(0);
|
||||
fseek(f, -1, SEEK_END);
|
||||
size = ftell(f) + 1;
|
||||
fclose(f);
|
||||
@@ -458,21 +462,27 @@ void fdd_load(int drive, wchar_t *fn)
|
||||
if (!wcscasecmp(p, loaders[c].ext) && (size == loaders[c].size || loaders[c].size == -1))
|
||||
{
|
||||
driveloaders[drive] = c;
|
||||
memcpy(floppyfns[drive], fn, (wcslen(fn) << 1) + 2);
|
||||
wcsncpy(floppyfns[drive], fn, sizeof_w(floppyfns[drive]));
|
||||
d86f_setup(drive);
|
||||
loaders[c].load(drive, floppyfns[drive]);
|
||||
ok = loaders[c].load(drive, floppyfns[drive]);
|
||||
if (! ok)
|
||||
goto no_load;
|
||||
|
||||
drive_empty[drive] = 0;
|
||||
fdd_forced_seek(drive, 0);
|
||||
fdd_changed[drive] = 1;
|
||||
return;
|
||||
return(1);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
no_load:
|
||||
pclog("FDD: could not load '%ls' %s\n",fn,p);
|
||||
drive_empty[drive] = 1;
|
||||
fdd_set_head(drive, 0);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
ui_sb_update_icon_state(drive, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fdd_close(int drive)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the floppy drive emulation.
|
||||
*
|
||||
* Version: @(#)fdd.h 1.0.4 2018/03/19
|
||||
* Version: @(#)fdd.h 1.0.5 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -103,16 +103,15 @@ extern int fdd_get_type(int drive);
|
||||
extern int fdd_get_flags(int drive);
|
||||
extern int fdd_get_densel(int drive);
|
||||
|
||||
extern char *fdd_getname(int type);
|
||||
|
||||
extern char *fdd_get_internal_name(int type);
|
||||
extern int fdd_get_from_internal_name(char *s);
|
||||
extern const char *fdd_getname(int type);
|
||||
extern const char *fdd_get_internal_name(int type);
|
||||
extern int fdd_get_from_internal_name(const char *s);
|
||||
|
||||
extern int fdd_current_track(int drive);
|
||||
|
||||
|
||||
extern void fdd_load(int drive, wchar_t *fn);
|
||||
extern void fdd_new(int drive, char *fn);
|
||||
extern int fdd_load(int drive, const wchar_t *fn);
|
||||
extern void fdd_new(int drive, const char *fn);
|
||||
extern void fdd_close(int drive);
|
||||
extern void fdd_init(void);
|
||||
extern void fdd_reset(void);
|
||||
@@ -185,7 +184,7 @@ extern d86f_handler_t d86f_handler[FDD_NUM];
|
||||
|
||||
extern void d86f_setup(int drive);
|
||||
extern void d86f_destroy(int drive);
|
||||
extern int d86f_export(int drive, wchar_t *fn);
|
||||
extern int d86f_export(int drive, const wchar_t *fn);
|
||||
extern void d86f_unregister(int drive);
|
||||
extern void d86f_common_handlers(int drive);
|
||||
extern void d86f_set_version(int drive, uint16_t version);
|
||||
|
||||
@@ -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: @(#)fdd_86f.c 1.0.6 2018/03/16
|
||||
* Version: @(#)fdd_86f.c 1.0.7 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -3387,7 +3387,7 @@ d86f_common_handlers(int drive)
|
||||
|
||||
|
||||
int
|
||||
d86f_export(int drive, wchar_t *fn)
|
||||
d86f_export(int drive, const wchar_t *fn)
|
||||
{
|
||||
uint32_t tt[512];
|
||||
d86f_t *dev = d86f[drive];
|
||||
@@ -3449,8 +3449,8 @@ d86f_export(int drive, wchar_t *fn)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
d86f_load(int drive, wchar_t *fn)
|
||||
int
|
||||
d86f_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
wchar_t temp_file_name[2048];
|
||||
d86f_t *dev = d86f[drive];
|
||||
@@ -3468,9 +3468,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
if (! dev->f) {
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (! dev->f) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
writeprot[drive] = 1;
|
||||
}
|
||||
@@ -3490,18 +3489,16 @@ d86f_load(int drive, wchar_t *fn)
|
||||
/* File is WAY too small, abort. */
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
if ((magic != 0x46423638) && (magic != 0x66623638)) {
|
||||
/* File is not of the valid format, abort. */
|
||||
d86f_log("86F: Unrecognized magic bytes: %08X\n", magic);
|
||||
fclose(dev->f);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
fread(&(dev->version), 2, 1, dev->f);
|
||||
@@ -3516,9 +3513,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
}
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
d86f_log("86F: Recognized file version: %i.%02i\n", dev->version >> 8, dev->version & 0xff);
|
||||
}
|
||||
@@ -3529,9 +3525,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
/* File too small, abort. */
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
#ifdef DO_CRC64
|
||||
@@ -3552,9 +3547,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
d86f_log("86F: CRC64 error\n");
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -3568,9 +3562,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
dev->f = plat_fopen(temp_file_name, L"wb");
|
||||
if (! dev->f) {
|
||||
d86f_log("86F: Unable to create temporary decompressed file\n");
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
tf = plat_fopen(fn, L"rb");
|
||||
@@ -3597,9 +3590,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
if (! temp) {
|
||||
d86f_log("86F: Error decompressing file\n");
|
||||
plat_remove(temp_file_name);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
dev->f = plat_fopen(temp_file_name, L"rb+");
|
||||
@@ -3613,9 +3605,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
if (dev->is_compressed) {
|
||||
plat_remove(temp_file_name);
|
||||
}
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (dev->disk_flags & 0x600) {
|
||||
@@ -3625,9 +3616,8 @@ d86f_load(int drive, wchar_t *fn)
|
||||
dev->f = NULL;
|
||||
if (dev->is_compressed)
|
||||
plat_remove(temp_file_name);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (!writeprot[drive]) {
|
||||
@@ -3657,10 +3647,9 @@ d86f_load(int drive, wchar_t *fn)
|
||||
d86f_log("86F: No Track 0 side 0\n");
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
d86f[drive] = NULL;
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
if ((d86f_get_sides(drive) == 2) && !(dev->track_offset[1])) {
|
||||
@@ -3668,10 +3657,9 @@ d86f_load(int drive, wchar_t *fn)
|
||||
d86f_log("86F: No Track 0 side 1\n");
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
free(dev);
|
||||
d86f[drive] = NULL;
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Load track 0 flags as default. */
|
||||
@@ -3729,6 +3717,9 @@ d86f_load(int drive, wchar_t *fn)
|
||||
d86f_log("86F: Disk is %scompressed and does%s have surface description data\n",
|
||||
dev->is_compressed ? "" : "not ",
|
||||
d86f_has_surface_desc(drive) ? "" : " not");
|
||||
|
||||
/* All good. */
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the 86F floppy image format.
|
||||
*
|
||||
* Version: @(#)floppy_86f.h 1.0.4 2018/03/17
|
||||
* Version: @(#)floppy_86f.h 1.0.5 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
extern void d86f_init(void);
|
||||
extern void d86f_load(int drive, wchar_t *fn);
|
||||
extern int d86f_load(int drive, const wchar_t *fn);
|
||||
extern void d86f_close(int drive);
|
||||
extern void d86f_seek(int drive, int track);
|
||||
extern int d86f_hole(int drive);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Implementation of the FDI floppy stream image format
|
||||
* interface to the FDI2RAW module.
|
||||
*
|
||||
* Version: @(#)fdd_fdi.c 1.0.2 2018/03/17
|
||||
* Version: @(#)fdd_fdi.c 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -313,8 +313,8 @@ fdi_seek(int drive, int track)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdi_load(int drive, wchar_t *fn)
|
||||
int
|
||||
fdi_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
char header[26];
|
||||
fdi_t *dev;
|
||||
@@ -328,8 +328,7 @@ fdi_load(int drive, wchar_t *fn)
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (dev == NULL) {
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
d86f_unregister(drive);
|
||||
@@ -342,8 +341,7 @@ fdi_load(int drive, wchar_t *fn)
|
||||
pclog("fdi_load(): Japanese FDI file detected, redirecting to IMG loader\n");
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
img_load(drive, fn);
|
||||
return;
|
||||
return(img_load(drive, fn));
|
||||
}
|
||||
|
||||
/* Set up the drive unit. */
|
||||
@@ -373,6 +371,8 @@ fdi_load(int drive, wchar_t *fn)
|
||||
drives[drive].seek = fdi_seek;
|
||||
|
||||
pclog("Loaded as FDI\n");
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Implementation of the FDI floppy stream image format
|
||||
* interface to the FDI2RAW module.
|
||||
*
|
||||
* Version: @(#)floppy_fdi.h 1.0.2 2018/03/17
|
||||
* Version: @(#)floppy_fdi.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
extern void fdi_seek(int drive, int track);
|
||||
extern void fdi_load(int drive, wchar_t *fn);
|
||||
extern int fdi_load(int drive, const wchar_t *fn);
|
||||
extern void fdi_close(int drive);
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the IMD floppy image format.
|
||||
*
|
||||
* Version: @(#)fdd_imd.c 1.0.6 2018/03/18
|
||||
* Version: @(#)fdd_imd.c 1.0.7 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -568,8 +568,8 @@ imd_init(void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
imd_load(int drive, wchar_t *fn)
|
||||
int
|
||||
imd_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
uint32_t magic = 0;
|
||||
uint32_t fsize = 0;
|
||||
@@ -604,8 +604,7 @@ imd_load(int drive, wchar_t *fn)
|
||||
if (dev->f == NULL) {
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (dev->f == NULL) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
writeprot[drive] = 1;
|
||||
}
|
||||
@@ -620,8 +619,7 @@ imd_load(int drive, wchar_t *fn)
|
||||
pclog("IMD: Not a valid ImageDisk image\n");
|
||||
fclose(dev->f);
|
||||
free(dev);;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
pclog("IMD: Valid ImageDisk image\n");
|
||||
}
|
||||
@@ -638,8 +636,7 @@ imd_load(int drive, wchar_t *fn)
|
||||
pclog("IMD: No ASCII EOF character\n");
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
pclog("IMD: ASCII EOF character found at offset %08X\n", buffer2 - buffer);
|
||||
}
|
||||
@@ -649,8 +646,7 @@ imd_load(int drive, wchar_t *fn)
|
||||
pclog("IMD: File ends after ASCII EOF character\n");
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
pclog("IMD: File continues after ASCII EOF character\n");
|
||||
}
|
||||
@@ -768,8 +764,7 @@ imd_load(int drive, wchar_t *fn)
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
imd[drive] = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,6 +807,8 @@ imd_load(int drive, wchar_t *fn)
|
||||
drives[drive].seek = imd_seek;
|
||||
|
||||
d86f_common_handlers(drive);
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the IMD floppy image format.
|
||||
*
|
||||
* Version: @(#)floppy_imd.h 1.0.2 2018/03/17
|
||||
* Version: @(#)floppy_imd.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
extern void imd_init(void);
|
||||
extern void imd_load(int drive, wchar_t *fn);
|
||||
extern int imd_load(int drive, const wchar_t *fn);
|
||||
extern void imd_close(int drive);
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* re-merged with the other files. Much of it is generic to
|
||||
* all formats.
|
||||
*
|
||||
* Version: @(#)fdd_img.c 1.0.5 2018/03/17
|
||||
* Version: @(#)fdd_img.c 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -597,8 +597,8 @@ img_init(void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
img_load(int drive, wchar_t *fn)
|
||||
int
|
||||
img_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
uint16_t bpb_bps;
|
||||
uint16_t bpb_total;
|
||||
@@ -636,8 +636,7 @@ img_load(int drive, wchar_t *fn)
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (dev->f == NULL) {
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
writeprot[drive] = 1;
|
||||
}
|
||||
@@ -1059,8 +1058,7 @@ jump_if_fdf:
|
||||
pclog("Image is bigger than can fit on an ED floppy, ejecting...\n");
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
bpb_sides = dev->sides;
|
||||
@@ -1115,8 +1113,7 @@ jump_if_fdf:
|
||||
pclog("Image is bigger than can fit on an ED floppy, ejecting...\n");
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
dev->gap2_size = (temp_rate == 3) ? 41 : 22;
|
||||
@@ -1128,8 +1125,7 @@ jump_if_fdf:
|
||||
pclog("ERROR: Floppy image of unknown format was inserted into drive %c:!\n", drive + 0x41);
|
||||
fclose(dev->f);
|
||||
free(dev);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
dev->track_width = 0;
|
||||
@@ -1174,6 +1170,8 @@ jump_if_fdf:
|
||||
drives[drive].seek = img_seek;
|
||||
|
||||
d86f_common_handlers(drive);
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Implementation of the raw sector-based floppy image format,
|
||||
* as well as the Japanese FDI, CopyQM, and FDF formats.
|
||||
*
|
||||
* Version: @(#)floppy_img.h 1.0.2 2018/03/17
|
||||
* Version: @(#)floppy_img.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
extern void img_init(void);
|
||||
extern void img_load(int drive, wchar_t *fn);
|
||||
extern int img_load(int drive, const wchar_t *fn);
|
||||
extern void img_close(int drive);
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the PCjs JSON floppy image format.
|
||||
*
|
||||
* Version: @(#)fdd_json.c 1.0.4 2018/03/17
|
||||
* Version: @(#)fdd_json.c 1.0.5 2018/04/10
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -504,8 +504,8 @@ json_init(void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
json_load(int drive, wchar_t *fn)
|
||||
int
|
||||
json_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
double bit_rate;
|
||||
int temp_rate;
|
||||
@@ -524,8 +524,7 @@ json_load(int drive, wchar_t *fn)
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (dev->f == NULL) {
|
||||
free(dev);
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Our images are always RO. */
|
||||
@@ -540,8 +539,7 @@ json_load(int drive, wchar_t *fn)
|
||||
(void)fclose(dev->f);
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
pclog("JSON(%d): %ls (%i tracks, %i sides, %i sectors)\n",
|
||||
@@ -606,8 +604,7 @@ json_load(int drive, wchar_t *fn)
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (dev->interleave == 2) {
|
||||
@@ -628,8 +625,7 @@ json_load(int drive, wchar_t *fn)
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(wchar_t));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
dev->track_flags |= (temp_rate & 0x03); /* data rate */
|
||||
@@ -660,6 +656,9 @@ json_load(int drive, wchar_t *fn)
|
||||
d86f_common_handlers(drive);
|
||||
|
||||
drives[drive].seek = json_seek;
|
||||
|
||||
/* All good. */
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the PCjs JSON floppy image format.
|
||||
*
|
||||
* Version: @(#)floppy_json.h 1.0.2 2018/03/17
|
||||
* Version: @(#)floppy_json.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
|
||||
extern void json_init(void);
|
||||
extern void json_load(int drive, wchar_t *fn);
|
||||
extern int json_load(int drive, const wchar_t *fn);
|
||||
extern void json_close(int drive);
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the Teledisk floppy image format.
|
||||
*
|
||||
* Version: @(#)fdd_td0.c 1.0.5 2018/03/18
|
||||
* Version: @(#)fdd_td0.c 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -1113,8 +1113,8 @@ td0_init(void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
td0_load(int drive, wchar_t *fn)
|
||||
int
|
||||
td0_load(int drive, const wchar_t *fn)
|
||||
{
|
||||
td0_t *dev;
|
||||
uint32_t i;
|
||||
@@ -1129,8 +1129,7 @@ td0_load(int drive, wchar_t *fn)
|
||||
|
||||
dev->f = plat_fopen(fn, L"rb");
|
||||
if (dev->f == NULL) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
}
|
||||
|
||||
fwriteprot[drive] = writeprot[drive];
|
||||
@@ -1139,8 +1138,7 @@ td0_load(int drive, wchar_t *fn)
|
||||
pclog("TD0: Not a valid Teledisk image\n");
|
||||
fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
pclog("TD0: Valid Teledisk image\n");
|
||||
}
|
||||
@@ -1157,8 +1155,7 @@ td0_load(int drive, wchar_t *fn)
|
||||
fclose(dev->f);
|
||||
free(dev->imagebuf);
|
||||
free(dev->processed_buf);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
return;
|
||||
return(0);
|
||||
} else {
|
||||
pclog("TD0: Initialized successfully\n");
|
||||
}
|
||||
@@ -1182,6 +1179,8 @@ td0_load(int drive, wchar_t *fn)
|
||||
drives[drive].seek = td0_seek;
|
||||
|
||||
d86f_common_handlers(drive);
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the Teledisk floppy image format.
|
||||
*
|
||||
* Version: @(#)floppy_td0.h 1.0.2 2018/03/17
|
||||
* Version: @(#)floppy_td0.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
extern void td0_init(void);
|
||||
extern void td0_load(int drive, wchar_t *fn);
|
||||
extern int td0_load(int drive, const wchar_t *fn);
|
||||
extern void td0_close(int drive);
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of the emulated machines.
|
||||
*
|
||||
* Version: @(#)machine.h 1.0.14 2018/04/03
|
||||
* Version: @(#)machine.h 1.0.15 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -236,9 +236,9 @@ extern int romspresent[ROM_MAX];
|
||||
extern int machine_count(void);
|
||||
extern int machine_getromset(void);
|
||||
extern int machine_getmachine(int romset);
|
||||
extern char *machine_getname(void);
|
||||
extern char *machine_get_internal_name(void);
|
||||
extern int machine_get_machine_from_internal_name(char *s);
|
||||
extern const char *machine_getname(void);
|
||||
extern const char *machine_get_internal_name(void);
|
||||
extern int machine_get_machine_from_internal_name(const char *s);
|
||||
extern int machine_available(int id);
|
||||
extern int machine_detect(void);
|
||||
extern void machine_init(void);
|
||||
@@ -247,8 +247,7 @@ extern void machine_close(void);
|
||||
extern const device_t *machine_getdevice(int machine);
|
||||
#endif
|
||||
extern int machine_getromset_ex(int m);
|
||||
extern char *machine_get_internal_name_ex(int m);
|
||||
//extern int machine_get_nvrmask(int m);
|
||||
extern const char *machine_get_internal_name_ex(int m);
|
||||
extern void machine_close(void);
|
||||
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ const machine_t machines[] = {
|
||||
{ "[Socket 8 FX] Tyan Titan-Pro AT", ROM_440FX, "tyan_440fx", L"tyan/440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 128, machine_at_i440fx_init, NULL, NULL },
|
||||
{ "[Socket 8 FX] Tyan Titan-Pro ATX", ROM_S1668, "tyan_tpatx", L"tyan/tpatx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 128, machine_at_s1668_init, NULL, NULL },
|
||||
#endif
|
||||
{ "", -1, "", NULL, {{"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
|
||||
{ NULL, -1, NULL, NULL, {{"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
@@ -222,14 +222,15 @@ machine_getmachine(int romset)
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
machine_getname(void)
|
||||
{
|
||||
return((char *)machines[machine].name);
|
||||
return(machines[machine].name);
|
||||
}
|
||||
|
||||
|
||||
@@ -240,30 +241,31 @@ machine_getdevice(int machine)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
machine_get_internal_name(void)
|
||||
{
|
||||
return((char *)machines[machine].internal_name);
|
||||
return(machines[machine].internal_name);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
machine_get_internal_name_ex(int m)
|
||||
{
|
||||
return((char *)machines[m].internal_name);
|
||||
return(machines[m].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
machine_get_machine_from_internal_name(char *s)
|
||||
machine_get_machine_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (machines[c].id != -1) {
|
||||
if (!strcmp(machines[c].internal_name, (const char *)s))
|
||||
if (!strcmp(machines[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
20
src/mem.c
20
src/mem.c
@@ -12,7 +12,7 @@
|
||||
* the DYNAMIC_TABLES=1 enables this. Will eventually go
|
||||
* away, either way...
|
||||
*
|
||||
* Version: @(#)mem.c 1.0.12 2018/04/03
|
||||
* Version: @(#)mem.c 1.0.13 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -1564,6 +1564,20 @@ mem_reset(void)
|
||||
}
|
||||
biosmask = 0xffff;
|
||||
|
||||
/*
|
||||
* Make sure the configured amount of RAM does not
|
||||
* exceed the physical limit of the machine to avoid
|
||||
* nasty crashes all over the place.
|
||||
*/
|
||||
c = machines[machine].max_ram;
|
||||
if (AT)
|
||||
c <<= 10; /* make KB */
|
||||
if (mem_size > c) {
|
||||
pclog("MEM: %luKB exceeds machine limit (%luKB), adjusted!\n",
|
||||
mem_size, c);
|
||||
mem_size = c;
|
||||
}
|
||||
|
||||
/*
|
||||
* Always allocate the full 16 MB memory space if memory size
|
||||
* is smaller, we'll need this for stupid things like the PS/2
|
||||
@@ -1715,6 +1729,7 @@ pclog("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz);
|
||||
}
|
||||
|
||||
|
||||
/* Perform a one-time memory initialization. */
|
||||
void
|
||||
mem_init(void)
|
||||
{
|
||||
@@ -1737,9 +1752,6 @@ mem_init(void)
|
||||
#endif
|
||||
|
||||
memset(ram_mapped_addr, 0x00, 64 * sizeof(uint32_t));
|
||||
|
||||
/* Reset the memory state. */
|
||||
mem_reset();
|
||||
}
|
||||
|
||||
|
||||
|
||||
17
src/mouse.c
17
src/mouse.c
@@ -11,7 +11,7 @@
|
||||
* TODO: Add the Genius bus- and serial mouse.
|
||||
* Remove the '3-button' flag from mouse types.
|
||||
*
|
||||
* Version: @(#)mouse.c 1.0.5 2018/04/05
|
||||
* Version: @(#)mouse.c 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -191,32 +191,33 @@ mouse_set_poll(int (*func)(int,int,int,int,void *), void *arg)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
mouse_get_name(int mouse)
|
||||
{
|
||||
return((char *)mouse_devices[mouse].device->name);
|
||||
return(mouse_devices[mouse].device->name);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
mouse_get_internal_name(int mouse)
|
||||
{
|
||||
return((char *)mouse_devices[mouse].internal_name);
|
||||
return(mouse_devices[mouse].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
mouse_get_from_internal_name(char *s)
|
||||
mouse_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (mouse_devices[c].internal_name != NULL) {
|
||||
if (! strcmp((char *)mouse_devices[c].internal_name, s))
|
||||
if (! strcmp(mouse_devices[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the mouse driver.
|
||||
*
|
||||
* Version: @(#)mouse.h 1.0.2 2018/03/15
|
||||
* Version: @(#)mouse.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -95,9 +95,9 @@ extern void mouse_process(void);
|
||||
extern void mouse_set_poll(int (*f)(int,int,int,int,void *), void *);
|
||||
extern void mouse_poll(void);
|
||||
|
||||
extern char *mouse_get_name(int mouse);
|
||||
extern char *mouse_get_internal_name(int mouse);
|
||||
extern int mouse_get_from_internal_name(char *s);
|
||||
extern const char *mouse_get_name(int mouse);
|
||||
extern const char *mouse_get_internal_name(int mouse);
|
||||
extern int mouse_get_from_internal_name(const char *s);
|
||||
extern int mouse_has_config(int mouse);
|
||||
extern int mouse_get_type(int mouse);
|
||||
extern int mouse_get_ndev(void);
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
* it should be malloc'ed and then linked to the NETCARD def.
|
||||
* Will be done later.
|
||||
*
|
||||
* Version: @(#)network.c 1.0.4 2018/04/05
|
||||
* Version: @(#)network.c 1.0.5 2018/04/10
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -406,18 +406,18 @@ network_tx(uint8_t *bufp, int len)
|
||||
|
||||
|
||||
int
|
||||
network_dev_to_id(char *devname)
|
||||
network_dev_to_id(const char *devname)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
for (i=0; i<network_ndev; i++) {
|
||||
if (! strcmp((char *)network_devs[i].device, devname)) {
|
||||
if (! strcmp(network_devs[i].device, devname)) {
|
||||
return(i);
|
||||
}
|
||||
}
|
||||
|
||||
/* If no match found, assume "none". */
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -443,10 +443,10 @@ network_card_available(int card)
|
||||
|
||||
|
||||
/* UI */
|
||||
char *
|
||||
const char *
|
||||
network_card_getname(int card)
|
||||
{
|
||||
return((char *)net_cards[card].name);
|
||||
return(net_cards[card].name);
|
||||
}
|
||||
|
||||
|
||||
@@ -469,24 +469,25 @@ network_card_has_config(int card)
|
||||
|
||||
|
||||
/* UI */
|
||||
char *
|
||||
const char *
|
||||
network_card_get_internal_name(int card)
|
||||
{
|
||||
return((char *)net_cards[card].internal_name);
|
||||
return(net_cards[card].internal_name);
|
||||
}
|
||||
|
||||
|
||||
/* UI */
|
||||
int
|
||||
network_card_get_from_internal_name(char *s)
|
||||
network_card_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (net_cards[c].internal_name != NULL) {
|
||||
if (! strcmp((char *)net_cards[c].internal_name, s))
|
||||
if (! strcmp(net_cards[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the network module.
|
||||
*
|
||||
* Version: @(#)network.h 1.0.2 2018/03/15
|
||||
* Version: @(#)network.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -116,12 +116,12 @@ extern int net_slirp_reset(const netcard_t *, uint8_t *);
|
||||
extern void net_slirp_close(void);
|
||||
extern void net_slirp_in(uint8_t *, int);
|
||||
|
||||
extern int network_dev_to_id(char *);
|
||||
extern int network_dev_to_id(const char *);
|
||||
extern int network_card_available(int);
|
||||
extern char *network_card_getname(int);
|
||||
extern const char *network_card_getname(int);
|
||||
extern int network_card_has_config(int);
|
||||
extern char *network_card_get_internal_name(int);
|
||||
extern int network_card_get_from_internal_name(char *);
|
||||
extern const char *network_card_get_internal_name(int);
|
||||
extern int network_card_get_from_internal_name(const char *);
|
||||
extern const device_t *network_card_getdevice(int);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the parallel-port-attached devices.
|
||||
*
|
||||
* Version: @(#)parallel_dev.c 1.0.1 2018/04/07
|
||||
* Version: @(#)parallel_dev.c 1.0.2 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -89,15 +89,16 @@ parallel_device_get_device(int id)
|
||||
|
||||
|
||||
int
|
||||
parallel_device_get_from_internal_name(char *s)
|
||||
parallel_device_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (devices[c].internal_name != NULL) {
|
||||
if (! strcmp((char *)devices[c].internal_name, s))
|
||||
if (! strcmp(devices[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the parallel port-attached devices.
|
||||
*
|
||||
* Version: @(#)parallel_dev.h 1.0.2 2018/04/08
|
||||
* Version: @(#)parallel_dev.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -54,7 +54,7 @@ typedef struct _lpt_device_ {
|
||||
extern const char *parallel_device_get_name(int id);
|
||||
extern const char *parallel_device_get_internal_name(int id);
|
||||
extern const lpt_device_t *parallel_device_get_device(int id);
|
||||
extern int parallel_device_get_from_internal_name(char *s);
|
||||
extern int parallel_device_get_from_internal_name(const char *s);
|
||||
extern void parallel_devices_init(void);
|
||||
extern void parallel_devices_close(void);
|
||||
|
||||
|
||||
6
src/pc.c
6
src/pc.c
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Main emulator module where most things are controlled.
|
||||
*
|
||||
* Version: @(#)pc.c 1.0.23 2018/04/09
|
||||
* Version: @(#)pc.c 1.0.24 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -699,7 +699,7 @@ pc_init_modules(void)
|
||||
wchar_t *str;
|
||||
|
||||
/* Load the ROMs for the selected machine. */
|
||||
if (! machine_available(machine)) {
|
||||
if ((machine < 0) || !machine_available(machine)) {
|
||||
/* Whoops, selected machine not available. */
|
||||
str = plat_get_string(IDS_2063);
|
||||
mbstowcs(name, machine_getname(), sizeof_w(name));
|
||||
@@ -712,7 +712,7 @@ pc_init_modules(void)
|
||||
return(2);
|
||||
}
|
||||
|
||||
if (! video_card_available(video_old_to_new(vid_card))) {
|
||||
if ((vid_card < 0) || !video_card_available(video_old_to_new(vid_card))) {
|
||||
/* Whoops, selected video not available. */
|
||||
str = plat_get_string(IDS_2064);
|
||||
mbstowcs(name, machine_getname(), sizeof_w(name));
|
||||
|
||||
30
src/plat.h
30
src/plat.h
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Define the various platform support functions.
|
||||
*
|
||||
* Version: @(#)plat.h 1.0.8 2018/04/01
|
||||
* Version: @(#)plat.h 1.0.9 2018/04/10
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -105,27 +105,27 @@ GLOBAL int infocus;
|
||||
#ifdef _WIN32
|
||||
extern void plat_console(int on);
|
||||
#endif
|
||||
extern wchar_t *fix_emu_path(wchar_t *str);
|
||||
extern FILE *plat_fopen(wchar_t *path, wchar_t *mode);
|
||||
extern void plat_remove(wchar_t *path);
|
||||
extern wchar_t *fix_emu_path(const wchar_t *str);
|
||||
extern FILE *plat_fopen(const wchar_t *path, wchar_t *mode);
|
||||
extern void plat_remove(const wchar_t *path);
|
||||
extern int plat_getcwd(wchar_t *bufp, int max);
|
||||
extern int plat_chdir(wchar_t *path);
|
||||
extern int plat_chdir(const wchar_t *path);
|
||||
extern void plat_get_exe_name(wchar_t *path, int size);
|
||||
extern wchar_t *plat_get_basename(wchar_t *path);
|
||||
extern wchar_t *plat_get_filename(wchar_t *path);
|
||||
extern wchar_t *plat_get_extension(wchar_t *path);
|
||||
extern void plat_append_filename(wchar_t *dest, wchar_t *s1, wchar_t *s2);
|
||||
extern wchar_t *plat_get_basename(const wchar_t *path);
|
||||
extern wchar_t *plat_get_filename(const wchar_t *path);
|
||||
extern wchar_t *plat_get_extension(const wchar_t *path);
|
||||
extern void plat_append_filename(wchar_t *dest, const wchar_t *s1, const wchar_t *s2);
|
||||
extern void plat_append_slash(wchar_t *path);
|
||||
extern int plat_path_abs(wchar_t *path);
|
||||
extern int plat_dir_check(wchar_t *path);
|
||||
extern int plat_dir_create(wchar_t *path);
|
||||
extern int plat_path_abs(const wchar_t *path);
|
||||
extern int plat_dir_check(const wchar_t *path);
|
||||
extern int plat_dir_create(const wchar_t *path);
|
||||
extern uint64_t plat_timer_read(void);
|
||||
extern uint32_t plat_get_ticks(void);
|
||||
extern void plat_delay_ms(uint32_t count);
|
||||
extern void plat_pause(int p);
|
||||
extern void plat_mouse_capture(int on);
|
||||
extern int plat_vidapi(char *name);
|
||||
extern char *plat_vidapi_name(int api);
|
||||
extern int plat_vidapi(const char *name);
|
||||
extern const char *plat_vidapi_name(int api);
|
||||
extern int plat_setvid(int api);
|
||||
extern void plat_vidsize(int x, int y);
|
||||
extern void plat_setfullscreen(int on);
|
||||
@@ -192,7 +192,7 @@ extern void thread_reset_event(event_t *arg);
|
||||
extern int thread_wait_event(event_t *arg, int timeout);
|
||||
extern void thread_destroy_event(event_t *arg);
|
||||
|
||||
extern mutex_t *thread_create_mutex(wchar_t *name);
|
||||
extern mutex_t *thread_create_mutex(const wchar_t *name);
|
||||
extern void thread_close_mutex(mutex_t *arg);
|
||||
extern int thread_wait_mutex(mutex_t *arg);
|
||||
extern int thread_release_mutex(mutex_t *mutex);
|
||||
|
||||
16
src/rom.c
16
src/rom.c
@@ -12,7 +12,7 @@
|
||||
* - pc2386 video BIOS is underdumped (16k instead of 24k)
|
||||
* - c386sx16 BIOS fails checksum
|
||||
*
|
||||
* Version: @(#)rom.c 1.0.11 2018/04/09
|
||||
* Version: @(#)rom.c 1.0.12 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/* Return the base path for ROM images. */
|
||||
wchar_t *
|
||||
rom_path(wchar_t *str)
|
||||
rom_path(const wchar_t *str)
|
||||
{
|
||||
static wchar_t temp[1024];
|
||||
|
||||
@@ -74,7 +74,7 @@ rom_path(wchar_t *str)
|
||||
|
||||
/* Used by the available() functions to check if a file exists. */
|
||||
int
|
||||
rom_present(wchar_t *fn)
|
||||
rom_present(const wchar_t *fn)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
@@ -136,7 +136,7 @@ rom_readl(uint32_t addr, void *priv)
|
||||
|
||||
/* Load a ROM BIOS from its chips, interleaved mode. */
|
||||
int
|
||||
rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
rom_load_linear(const wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
@@ -162,7 +162,7 @@ rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
|
||||
/* Load a ROM BIOS from its chips, linear mode with high bit flipped. */
|
||||
int
|
||||
rom_load_linear_inverted(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
rom_load_linear_inverted(const wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
@@ -195,7 +195,7 @@ rom_load_linear_inverted(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *p
|
||||
|
||||
/* Load a ROM BIOS from its chips, interleaved mode. */
|
||||
int
|
||||
rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
rom_load_interleaved(const wchar_t *fnl, const wchar_t *fnh, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
{
|
||||
FILE *fl = plat_fopen(rom_path(fnl), L"rb");
|
||||
FILE *fh = plat_fopen(rom_path(fnh), L"rb");
|
||||
@@ -231,7 +231,7 @@ rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int off,
|
||||
|
||||
/* Read and initialize an option ROM. */
|
||||
int
|
||||
rom_init(rom_t *rom, wchar_t *fn, uint32_t addr, int sz, int mask, int off, uint32_t flags)
|
||||
rom_init(rom_t *rom, const wchar_t *fn, uint32_t addr, int sz, int mask, int off, uint32_t flags)
|
||||
{
|
||||
/* Allocate a buffer for the image. */
|
||||
rom->rom = malloc(sz);
|
||||
@@ -258,7 +258,7 @@ rom_init(rom_t *rom, wchar_t *fn, uint32_t addr, int sz, int mask, int off, uint
|
||||
|
||||
|
||||
int
|
||||
rom_init_interleaved(rom_t *rom, wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int mask, int off, uint32_t flags)
|
||||
rom_init_interleaved(rom_t *rom, const wchar_t *fnl, const wchar_t *fnh, uint32_t addr, int sz, int mask, int off, uint32_t flags)
|
||||
{
|
||||
/* Allocate a buffer for the image. */
|
||||
rom->rom = malloc(sz);
|
||||
|
||||
23
src/rom.h
23
src/rom.h
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the ROM image handler.
|
||||
*
|
||||
* Version: @(#)rom.h 1.0.9 2018/03/31
|
||||
* Version: @(#)rom.h 1.0.10 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -80,22 +80,23 @@ extern uint8_t rom_read(uint32_t addr, void *p);
|
||||
extern uint16_t rom_readw(uint32_t addr, void *p);
|
||||
extern uint32_t rom_readl(uint32_t addr, void *p);
|
||||
|
||||
extern wchar_t *rom_path(wchar_t *fn);
|
||||
extern int rom_present(wchar_t *fn);
|
||||
extern wchar_t *rom_path(const wchar_t *fn);
|
||||
extern int rom_present(const wchar_t *fn);
|
||||
|
||||
extern int rom_load_linear(wchar_t *fn, uint32_t addr, int sz,
|
||||
extern int rom_load_linear(const wchar_t *fn, uint32_t addr, int sz,
|
||||
int off, uint8_t *ptr);
|
||||
extern int rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr,
|
||||
int sz, int off, uint8_t *ptr);
|
||||
extern int rom_load_interleaved(const wchar_t *fnl, const wchar_t *fnh,
|
||||
uint32_t addr, int sz, int off,
|
||||
uint8_t *ptr);
|
||||
|
||||
extern int rom_init(rom_t *rom, wchar_t *fn, uint32_t address, int size,
|
||||
int mask, int file_offset, uint32_t flags);
|
||||
extern int rom_init_interleaved(rom_t *rom, wchar_t *fn_low,
|
||||
wchar_t *fn_high, uint32_t address,
|
||||
extern int rom_init(rom_t *rom, const wchar_t *fn, uint32_t address,
|
||||
int size, int mask, int file_offset, uint32_t flags);
|
||||
extern int rom_init_interleaved(rom_t *rom, const wchar_t *fn_low,
|
||||
const wchar_t *fn_high, uint32_t address,
|
||||
int size, int mask, int file_offset,
|
||||
uint32_t flags);
|
||||
|
||||
extern int rom_load_bios(romdef_t *r, wchar_t *fn, int test_only);
|
||||
extern int rom_load_bios(romdef_t *r, const wchar_t *fn, int test_only);
|
||||
|
||||
|
||||
#endif /*EMU_ROM_H*/
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* or to use a generic handler, and then pass it a pointer
|
||||
* to a command table. For now, we don't.
|
||||
*
|
||||
* Version: @(#)rom_load.c 1.0.6 2018/03/31
|
||||
* Version: @(#)rom_load.c 1.0.7 2018/04/01
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -351,7 +351,7 @@ parser(FILE *fp, romdef_t *r)
|
||||
|
||||
/* Load a BIOS ROM image into memory. */
|
||||
int
|
||||
rom_load_bios(romdef_t *r, wchar_t *fn, int test_only)
|
||||
rom_load_bios(romdef_t *r, const wchar_t *fn, int test_only)
|
||||
{
|
||||
wchar_t path[1024];
|
||||
wchar_t temp[1024];
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of the SCSI controllers.
|
||||
*
|
||||
* Version: @(#)scsi.c 1.0.6 2018/04/07
|
||||
* Version: @(#)scsi.c 1.0.7 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -86,10 +86,10 @@ typedef struct {
|
||||
const char *internal_name;
|
||||
const device_t *device;
|
||||
void (*reset)(void *p);
|
||||
} SCSI_CARD;
|
||||
} scsidev_t;
|
||||
|
||||
|
||||
static SCSI_CARD scsi_cards[] = {
|
||||
static const scsidev_t scsi_cards[] = {
|
||||
{ "None", "none", NULL, NULL },
|
||||
{ "[ISA] Adaptec AHA-1540B","aha1540b", &aha1540b_device, x54x_device_reset },
|
||||
{ "[ISA] Adaptec AHA-1542C","aha1542c", &aha1542c_device, x54x_device_reset },
|
||||
@@ -108,7 +108,7 @@ static SCSI_CARD scsi_cards[] = {
|
||||
{ "[PCI] BusLogic BT-958D", "bt958d", &buslogic_pci_device, BuslogicDeviceReset },
|
||||
{ "[PCI] NCR 53C810", "ncr53c810", &ncr53c810_pci_device,NULL },
|
||||
{ "[VLB] BusLogic BT-445S", "bt445s", &buslogic_445s_device,BuslogicDeviceReset },
|
||||
{ "", "", NULL, NULL },
|
||||
{ NULL, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
||||
@@ -137,10 +137,10 @@ scsi_card_available(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
scsi_card_getname(int card)
|
||||
{
|
||||
return((char *)scsi_cards[card].name);
|
||||
return(scsi_cards[card].name);
|
||||
}
|
||||
|
||||
|
||||
@@ -160,25 +160,26 @@ scsi_card_has_config(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
scsi_card_get_internal_name(int card)
|
||||
{
|
||||
return((char *)scsi_cards[card].internal_name);
|
||||
return(scsi_cards[card].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
scsi_card_get_from_internal_name(char *s)
|
||||
scsi_card_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (strlen((char *)scsi_cards[c].internal_name)) {
|
||||
if (! strcmp((char *)scsi_cards[c].internal_name, s))
|
||||
while (scsi_cards[c].internal_name != NULL) {
|
||||
if (! strcmp(scsi_cards[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* SCSI controller handler header.
|
||||
*
|
||||
* Version: @(#)scsi.h 1.0.5 2018/04/02
|
||||
* Version: @(#)scsi.h 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -313,13 +313,13 @@ extern uint8_t scsi_disks[16][8];
|
||||
extern void scsi_dev_log(const char *fmt, ...);
|
||||
|
||||
extern int scsi_card_available(int card);
|
||||
extern char *scsi_card_getname(int card);
|
||||
extern const char *scsi_card_getname(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *scsi_card_getdevice(int card);
|
||||
#endif
|
||||
extern int scsi_card_has_config(int card);
|
||||
extern char *scsi_card_get_internal_name(int card);
|
||||
extern int scsi_card_get_from_internal_name(char *s);
|
||||
extern const char *scsi_card_get_internal_name(int card);
|
||||
extern int scsi_card_get_from_internal_name(const char *s);
|
||||
extern void scsi_mutex(uint8_t start);
|
||||
extern void scsi_mutex_wait(uint8_t wait);
|
||||
extern void scsi_card_init(void);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* MIDI support module, main file.
|
||||
*
|
||||
* Version: @(#)midi.c 1.0.4 2018/04/05
|
||||
* Version: @(#)midi.c 1.0.5 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -82,7 +82,7 @@ static const midi_t devices[] = {
|
||||
};
|
||||
|
||||
|
||||
static midi_device_t *m_device = NULL;
|
||||
static const midi_device_t *m_device = NULL;
|
||||
static int midi_device_last = 0;
|
||||
static uint8_t midi_rt_buf[1024];
|
||||
static uint8_t midi_cmd_buf[1024];
|
||||
@@ -127,10 +127,10 @@ midi_device_available(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
midi_device_getname(int card)
|
||||
{
|
||||
return((char *)devices[card].name);
|
||||
return(devices[card].name);
|
||||
}
|
||||
|
||||
|
||||
@@ -150,15 +150,15 @@ midi_device_has_config(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
midi_device_get_internal_name(int card)
|
||||
{
|
||||
return((char *)devices[card].internal_name);
|
||||
return(devices[card].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
midi_device_get_from_internal_name(char *s)
|
||||
midi_device_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
@@ -168,7 +168,8 @@ midi_device_get_from_internal_name(char *s)
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -183,7 +184,7 @@ midi_device_init(void)
|
||||
|
||||
|
||||
void
|
||||
midi_init(midi_device_t* device)
|
||||
midi_init(const midi_device_t *device)
|
||||
{
|
||||
memset(midi_rt_buf, 0, sizeof(midi_rt_buf));
|
||||
memset(midi_cmd_buf, 0, sizeof(midi_cmd_buf));
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the MIDI module.
|
||||
*
|
||||
* Version: @(#)midi.h 1.0.3 2018/04/05
|
||||
* Version: @(#)midi.h 1.0.4 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -40,32 +40,6 @@
|
||||
# define EMU_SOUND_MIDI_H
|
||||
|
||||
|
||||
extern int midi_device_current;
|
||||
|
||||
|
||||
int midi_device_available(int card);
|
||||
char *midi_device_getname(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
const device_t *midi_device_getdevice(int card);
|
||||
#endif
|
||||
int midi_device_has_config(int card);
|
||||
char *midi_device_get_internal_name(int card);
|
||||
int midi_device_get_from_internal_name(char *s);
|
||||
void midi_device_init();
|
||||
|
||||
typedef struct midi_device_t
|
||||
{
|
||||
void (*play_sysex)(uint8_t *sysex, unsigned int len);
|
||||
void (*play_msg)(uint8_t *msg);
|
||||
void (*poll)();
|
||||
int (*write)(uint8_t val);
|
||||
} midi_device_t;
|
||||
|
||||
void midi_init(midi_device_t* device);
|
||||
void midi_close();
|
||||
void midi_write(uint8_t val);
|
||||
void midi_poll();
|
||||
|
||||
#ifdef _WIN32
|
||||
# define SYSTEM_MIDI_NAME "Windows MIDI"
|
||||
# define SYSTEM_MIDI_INT "system_midi"
|
||||
@@ -75,4 +49,31 @@ void midi_poll();
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
void (*play_sysex)(uint8_t *sysex, unsigned int len);
|
||||
void (*play_msg)(uint8_t *msg);
|
||||
void (*poll)(void);
|
||||
int (*write)(uint8_t val);
|
||||
} midi_device_t;
|
||||
|
||||
|
||||
extern int midi_device_current;
|
||||
|
||||
|
||||
extern int midi_device_available(int card);
|
||||
extern const char *midi_device_getname(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *midi_device_getdevice(int card);
|
||||
#endif
|
||||
extern int midi_device_has_config(int card);
|
||||
extern const char *midi_device_get_internal_name(int card);
|
||||
extern int midi_device_get_from_internal_name(const char *s);
|
||||
extern void midi_device_init(void);
|
||||
|
||||
extern void midi_init(const midi_device_t *device);
|
||||
extern void midi_close(void);
|
||||
extern void midi_write(uint8_t val);
|
||||
extern void midi_poll(void);
|
||||
|
||||
|
||||
#endif /*EMU_SOUND_MIDI_H*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Interface to the OpenAL sound processing library.
|
||||
*
|
||||
* Version: @(#)openal.c 1.0.7 2018/04/07
|
||||
* Version: @(#)openal.c 1.0.8 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -234,7 +234,7 @@ inital(void)
|
||||
int c;
|
||||
#endif
|
||||
int init_midi = 0;
|
||||
char *str;
|
||||
const char *str;
|
||||
|
||||
pclog("SOUND: inital()\n");
|
||||
/*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Roland MPU-401 emulation.
|
||||
*
|
||||
* Version: @(#)snd_mpu401.c 1.0.5 2018/04/08
|
||||
* Version: @(#)snd_mpu401.c 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -897,7 +897,7 @@ mpu401_init(mpu_t *mpu, uint16_t addr, int irq, int mode)
|
||||
void
|
||||
mpu401_device_add(void)
|
||||
{
|
||||
char *n;
|
||||
const char *n;
|
||||
|
||||
if (!mpu401_standalone_enable) return;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the Sound Emulation core.
|
||||
*
|
||||
* Version: @(#)sound.h 1.0.5 2018/04/08
|
||||
* Version: @(#)sound.h 1.0.6 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -71,13 +71,13 @@ extern void sound_add_process_handler(void (*get_buffer)(int32_t *buffer, \
|
||||
|
||||
extern void snddev_reset(void);
|
||||
extern int sound_card_available(int card);
|
||||
extern char *sound_card_getname(int card);
|
||||
extern const char *sound_card_getname(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *sound_card_getdevice(int card);
|
||||
#endif
|
||||
extern int sound_card_has_config(int card);
|
||||
extern char *sound_card_get_internal_name(int card);
|
||||
extern int sound_card_get_from_internal_name(char *s);
|
||||
extern const char *sound_card_get_internal_name(int card);
|
||||
extern int sound_card_get_from_internal_name(const char *s);
|
||||
extern void sound_card_init(void);
|
||||
|
||||
extern void sound_speed_changed(void);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Sound devices support module.
|
||||
*
|
||||
* Version: @(#)sound_dev.c 1.0.2 2018/04/08
|
||||
* Version: @(#)sound_dev.c 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -145,14 +145,15 @@ sound_card_available(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
sound_card_getname(int card)
|
||||
{
|
||||
return((char *)sound_cards[card].name);
|
||||
return(sound_cards[card].name);
|
||||
}
|
||||
|
||||
|
||||
const device_t *sound_card_getdevice(int card)
|
||||
const device_t *
|
||||
sound_card_getdevice(int card)
|
||||
{
|
||||
return(sound_cards[card].device);
|
||||
}
|
||||
@@ -167,23 +168,24 @@ sound_card_has_config(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
sound_card_get_internal_name(int card)
|
||||
{
|
||||
return((char *)sound_cards[card].internal_name);
|
||||
return(sound_cards[card].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
sound_card_get_from_internal_name(char *s)
|
||||
sound_card_get_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (sound_cards[c].internal_name != NULL) {
|
||||
if (! strcmp((char *)sound_cards[c].internal_name, s))
|
||||
if (! strcmp(sound_cards[c].internal_name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
* W = 3 bus clocks
|
||||
* L = 4 bus clocks
|
||||
*
|
||||
* Version: @(#)video.c 1.0.12 2018/04/09
|
||||
* Version: @(#)video.c 1.0.13 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -709,7 +709,7 @@ video_force_resize_set(uint8_t res)
|
||||
|
||||
|
||||
void
|
||||
loadfont(wchar_t *s, int format)
|
||||
loadfont(const wchar_t *s, int format)
|
||||
{
|
||||
FILE *f;
|
||||
int c,d;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the video controller module.
|
||||
*
|
||||
* Version: @(#)video.h 1.0.14 2018/04/09
|
||||
* Version: @(#)video.h 1.0.15 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -232,17 +232,17 @@ extern void (*video_recalctimings)(void);
|
||||
/* Table functions. */
|
||||
extern int video_card_available(int card);
|
||||
extern int video_detect(void);
|
||||
extern char *video_card_getname(int card);
|
||||
extern const char *video_card_getname(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *video_card_getdevice(int card);
|
||||
#endif
|
||||
extern int video_card_has_config(int card);
|
||||
extern const video_timings_t *video_card_gettiming(int card);
|
||||
extern int video_card_getid(char *s);
|
||||
extern int video_card_getid(const char *s);
|
||||
extern int video_old_to_new(int card);
|
||||
extern int video_new_to_old(int card);
|
||||
extern char *video_get_internal_name(int card);
|
||||
extern int video_get_video_from_internal_name(char *s);
|
||||
extern const char *video_get_internal_name(int card);
|
||||
extern int video_get_video_from_internal_name(const char *s);
|
||||
extern int video_is_mda(void);
|
||||
extern int video_is_cga(void);
|
||||
extern int video_is_ega_vga(void);
|
||||
@@ -268,7 +268,7 @@ extern uint8_t video_force_resize_get(void);
|
||||
extern void video_force_resize_set(uint8_t res);
|
||||
extern void video_update_timing(void);
|
||||
|
||||
extern void loadfont(wchar_t *s, int format);
|
||||
extern void loadfont(const wchar_t *s, int format);
|
||||
|
||||
extern int get_actual_size_x(void);
|
||||
extern int get_actual_size_y(void);
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
* an "extern" reference to its device into this file, and
|
||||
* add an entry for it into the table.
|
||||
*
|
||||
* Version: @(#)video_dev.c 1.0.15 2018/04/09
|
||||
* Version: @(#)video_dev.c 1.0.16 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -51,7 +51,6 @@
|
||||
#include "../timer.h"
|
||||
#include "../plat.h"
|
||||
#include "video.h"
|
||||
//#include "vid_svga.h"
|
||||
|
||||
|
||||
#define VIDEO_FLAG_TYPE_CGA 0x00
|
||||
@@ -369,10 +368,10 @@ video_card_available(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
video_card_getname(int card)
|
||||
{
|
||||
return((char *)video_cards[card].name);
|
||||
return(video_cards[card].name);
|
||||
}
|
||||
|
||||
|
||||
@@ -400,17 +399,18 @@ video_card_gettiming(int card)
|
||||
|
||||
|
||||
int
|
||||
video_card_getid(char *s)
|
||||
video_card_getid(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (video_cards[c].legacy_id != -1) {
|
||||
if (! strcmp((char *)video_cards[c].name, s))
|
||||
if (! strcmp(video_cards[c].name, s))
|
||||
return(c);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -436,25 +436,26 @@ video_new_to_old(int card)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
video_get_internal_name(int card)
|
||||
{
|
||||
return((char *)video_cards[card].internal_name);
|
||||
return(video_cards[card].internal_name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
video_get_video_from_internal_name(char *s)
|
||||
video_get_video_from_internal_name(const char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (video_cards[c].legacy_id != -1) {
|
||||
if (! strcmp((char *)video_cards[c].internal_name, s))
|
||||
if (! strcmp(video_cards[c].internal_name, s))
|
||||
return(video_cards[c].legacy_id);
|
||||
c++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
/* Not found. */
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
*
|
||||
* Application resource script for Windows.
|
||||
*
|
||||
* Version: @(#)VARCem.rc 1.0.18 2018/04/09
|
||||
* NOTE: maybe have to add CBS_HASSTRINGS to all dropdowns for VC.
|
||||
*
|
||||
* Version: @(#)VARCem.rc 1.0.19 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Platform main support module for Windows.
|
||||
*
|
||||
* Version: @(#)win.c 1.0.11 2018/04/03
|
||||
* Version: @(#)win.c 1.0.12 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -99,7 +99,7 @@ static rc_str_t *lpRCstr2048,
|
||||
*lpRCstr7168;
|
||||
|
||||
|
||||
static struct {
|
||||
static const struct {
|
||||
char *name;
|
||||
int local;
|
||||
int (*init)(void *);
|
||||
@@ -465,21 +465,21 @@ plat_getcwd(wchar_t *bufp, int max)
|
||||
|
||||
|
||||
int
|
||||
plat_chdir(wchar_t *path)
|
||||
plat_chdir(const wchar_t *path)
|
||||
{
|
||||
return(_wchdir(path));
|
||||
}
|
||||
|
||||
|
||||
FILE *
|
||||
plat_fopen(wchar_t *path, wchar_t *mode)
|
||||
plat_fopen(const wchar_t *path, wchar_t *mode)
|
||||
{
|
||||
return(_wfopen(path, mode));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
plat_remove(wchar_t *path)
|
||||
plat_remove(const wchar_t *path)
|
||||
{
|
||||
_wremove(path);
|
||||
}
|
||||
@@ -498,7 +498,7 @@ plat_append_slash(wchar_t *path)
|
||||
|
||||
/* Check if the given path is absolute or not. */
|
||||
int
|
||||
plat_path_abs(wchar_t *path)
|
||||
plat_path_abs(const wchar_t *path)
|
||||
{
|
||||
if ((path[1] == L':') || (path[0] == L'\\') || (path[0] == L'/'))
|
||||
return(1);
|
||||
@@ -509,55 +509,55 @@ plat_path_abs(wchar_t *path)
|
||||
|
||||
/* Return the last element of a pathname. */
|
||||
wchar_t *
|
||||
plat_get_basename(wchar_t *path)
|
||||
plat_get_basename(const wchar_t *path)
|
||||
{
|
||||
int c = wcslen(path);
|
||||
|
||||
while (c > 0) {
|
||||
if (path[c] == L'/' || path[c] == L'\\')
|
||||
return(&path[c]);
|
||||
return((wchar_t *)&path[c]);
|
||||
c--;
|
||||
}
|
||||
|
||||
return(path);
|
||||
return((wchar_t *)path);
|
||||
}
|
||||
|
||||
|
||||
wchar_t *
|
||||
plat_get_filename(wchar_t *path)
|
||||
plat_get_filename(const wchar_t *path)
|
||||
{
|
||||
int c = wcslen(path) - 1;
|
||||
|
||||
while (c > 0) {
|
||||
if (path[c] == L'/' || path[c] == L'\\')
|
||||
return(&path[c+1]);
|
||||
return((wchar_t *)&path[c+1]);
|
||||
c--;
|
||||
}
|
||||
|
||||
return(path);
|
||||
return((wchar_t *)path);
|
||||
}
|
||||
|
||||
|
||||
wchar_t *
|
||||
plat_get_extension(wchar_t *path)
|
||||
plat_get_extension(const wchar_t *path)
|
||||
{
|
||||
int c = wcslen(path) - 1;
|
||||
|
||||
if (c <= 0)
|
||||
return(path);
|
||||
return((wchar_t *)path);
|
||||
|
||||
while (c && path[c] != L'.')
|
||||
c--;
|
||||
|
||||
if (!c)
|
||||
return(&path[wcslen(path)]);
|
||||
return((wchar_t *)&path[wcslen(path)]);
|
||||
|
||||
return(&path[c+1]);
|
||||
return((wchar_t *)&path[c+1]);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
plat_append_filename(wchar_t *dest, wchar_t *s1, wchar_t *s2)
|
||||
plat_append_filename(wchar_t *dest, const wchar_t *s1, const wchar_t *s2)
|
||||
{
|
||||
wcscat(dest, s1);
|
||||
wcscat(dest, s2);
|
||||
@@ -565,7 +565,7 @@ plat_append_filename(wchar_t *dest, wchar_t *s1, wchar_t *s2)
|
||||
|
||||
|
||||
int
|
||||
plat_dir_check(wchar_t *path)
|
||||
plat_dir_check(const wchar_t *path)
|
||||
{
|
||||
DWORD dwAttrib = GetFileAttributes(path);
|
||||
|
||||
@@ -575,7 +575,7 @@ plat_dir_check(wchar_t *path)
|
||||
|
||||
|
||||
int
|
||||
plat_dir_create(wchar_t *path)
|
||||
plat_dir_create(const wchar_t *path)
|
||||
{
|
||||
return((int)CreateDirectory(path, NULL));
|
||||
}
|
||||
@@ -608,7 +608,7 @@ plat_delay_ms(uint32_t count)
|
||||
|
||||
/* Return the VIDAPI number for the given name. */
|
||||
int
|
||||
plat_vidapi(char *name)
|
||||
plat_vidapi(const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -625,7 +625,7 @@ plat_vidapi(char *name)
|
||||
|
||||
|
||||
/* Return the VIDAPI name for the given number. */
|
||||
char *
|
||||
const char *
|
||||
plat_vidapi_name(int api)
|
||||
{
|
||||
char *name = "default";
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the Settings dialog.
|
||||
*
|
||||
* Version: @(#)win_settings_input.h 1.0.2 2018/04/07
|
||||
* Version: @(#)win_settings_input.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -68,7 +68,7 @@ static BOOL CALLBACK
|
||||
input_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WCHAR temp[128];
|
||||
char *stransi;
|
||||
const char *stransi;
|
||||
HWND h;
|
||||
int c;
|
||||
int d = 0;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the Settings dialog.
|
||||
*
|
||||
* Version: @(#)win_settings_network.h 1.0.2 2018/04/07
|
||||
* Version: @(#)win_settings_network.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -92,7 +92,7 @@ static BOOL CALLBACK
|
||||
network_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WCHAR temp[128];
|
||||
char *stransi;
|
||||
const char *stransi;
|
||||
HWND h;
|
||||
int c, d;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the Settings dialog.
|
||||
*
|
||||
* Version: @(#)win_settings_periph.h 1.0.2 2018/04/07
|
||||
* Version: @(#)win_settings_periph.h 1.0.3 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
static int scsi_to_list[20],
|
||||
list_to_scsi[20];
|
||||
static char *hdc_names[16];
|
||||
static const char *hdc_names[16];
|
||||
static const int valid_ide_irqs[11] = { 2, 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 };
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ recalc_hdc_list(HWND hdlg, int machine, int use_selected_hdc)
|
||||
{
|
||||
WCHAR temp[128];
|
||||
char old_name[32];
|
||||
char *stransi;
|
||||
const char *stransi;
|
||||
HWND h;
|
||||
int valid;
|
||||
int c, d;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the Settings dialog.
|
||||
*
|
||||
* Version: @(#)win_settings_sound.h 1.0.4 2018/04/08
|
||||
* Version: @(#)win_settings_sound.h 1.0.5 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@ static int midi_to_list[20], list_to_midi[20];
|
||||
static int
|
||||
mpu401_present(void)
|
||||
{
|
||||
char *stransi;
|
||||
const char *stransi;
|
||||
|
||||
stransi = sound_card_get_internal_name(temp_sound_card);
|
||||
if (stransi != NULL) {
|
||||
@@ -64,7 +64,7 @@ mpu401_present(void)
|
||||
static int
|
||||
mpu401_standalone_allow(void)
|
||||
{
|
||||
char *n, *md;
|
||||
const char *n, *md;
|
||||
|
||||
n = sound_card_get_internal_name(temp_sound_card);
|
||||
md = midi_device_get_internal_name(temp_midi_device);
|
||||
@@ -90,7 +90,7 @@ static BOOL CALLBACK
|
||||
sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WCHAR temp[128];
|
||||
char *stransi;
|
||||
const char *stransi;
|
||||
const device_t *dev;
|
||||
HWND h;
|
||||
int c, d;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implement threads and mutexes for the Win32 platform.
|
||||
*
|
||||
* Version: @(#)win_thread.c 1.0.3 2018/03/07
|
||||
* Version: @(#)win_thread.c 1.0.4 2018/04/10
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Sarah Walker, <tommowalker@tommowalker.co.uk>
|
||||
@@ -147,7 +147,7 @@ thread_destroy_event(event_t *arg)
|
||||
|
||||
|
||||
mutex_t *
|
||||
thread_create_mutex(wchar_t *name)
|
||||
thread_create_mutex(const wchar_t *name)
|
||||
{
|
||||
return((mutex_t*)CreateMutex(NULL, FALSE, name));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user