More cleanups, and a bugfix in config.c (harddisk id and lun were not saved.)

This commit is contained in:
waltje
2017-10-13 18:26:25 -04:00
parent c95c2d5534
commit ae3d0d8b22
3 changed files with 196 additions and 173 deletions

View File

@@ -8,7 +8,7 @@
*
* Configuration file handler.
*
* Version: @(#)config.c 1.0.19 2017/10/12
* Version: @(#)config.c 1.0.20 2017/10/13
*
* Authors: Sarah Walker,
* Miran Grca, <mgrca8@gmail.com>
@@ -64,19 +64,19 @@ typedef struct _list_ {
} list_t;
typedef struct {
list_t list;
list_t list;
char name[256];
char name[128];
list_t entry_head;
list_t entry_head;
} section_t;
typedef struct {
list_t list;
list_t list;
char name[256];
char data[256];
wchar_t wdata[256];
char name[128];
char data[256];
wchar_t wdata[512];
} entry_t;
#define list_add(new, head) { \
@@ -116,7 +116,7 @@ find_section(char *name)
name = blank;
while (sec != NULL) {
if (! strncmp(sec->name, name, 256))
if (! strncmp(sec->name, name, sizeof(sec->name)))
return(sec);
sec = (section_t *)sec->list.next;
@@ -134,7 +134,7 @@ find_entry(section_t *section, char *name)
ent = (entry_t *)section->entry_head.next;
while (ent != NULL) {
if (! strncmp(ent->name, name, 256))
if (! strncmp(ent->name, name, sizeof(ent->name)))
return(ent);
ent = (entry_t *)ent->list.next;
@@ -183,7 +183,7 @@ create_section(char *name)
section_t *ns = malloc(sizeof(section_t));
memset(ns, 0x00, sizeof(section_t));
strncpy(ns->name, name, 256);
strncpy(ns->name, name, sizeof(ns->name));
list_add(&ns->list, &config_head);
return(ns);
@@ -196,7 +196,7 @@ create_entry(section_t *section, char *name)
entry_t *ne = malloc(sizeof(entry_t));
memset(ne, 0x00, sizeof(entry_t));
strncpy(ne->name, name, 256);
strncpy(ne->name, name, sizeof(ne->name));
list_add(&ne->list, &section->entry_head);
return(ne);
@@ -233,15 +233,14 @@ config_free(void)
static int
config_read(wchar_t *fn)
{
char sname[256], ename[256];
char sname[128], ename[128];
wchar_t buff[1024];
section_t *sec, *ns;
int sd = 0, ed = 0;
int c, data_pos;
entry_t *ne;
int c, d;
FILE *f;
#ifdef ANSI_CFG
#if defined(ANSI_CFG) || !defined(WIN32)
f = plat_fopen(fn, L"rt");
#else
f = plat_fopen(fn, L"rt, ccs=UNICODE");
@@ -255,72 +254,75 @@ config_read(wchar_t *fn)
while (1) {
memset(buff, 0x00, sizeof(buff));
fgetws(buff, sizeof(buff)-1, f);
fgetws(buff, sizeof_w(buff), f);
if (feof(f)) break;
#if 0
/* Make sure there are no stray newlines or hard-returns in there. */
if (buff[wcslen(buff)-1] == L'\n') buff[wcslen(buff)-1] = L'\0';
if (buff[wcslen(buff)-1] == L'\r') buff[wcslen(buff)-1] = L'\0';
#endif
/* Skip any leading whitespace. */
c = 0;
while (buff[c] == L' ')
while ((buff[c] == L' ') || (buff[c] == L'\t'))
c++;
/* Skip empty lines. */
if (buff[c] == L'\0') continue;
if ((buff[c] == L'#') || (buff[c] == L';')) {
/*Comment*/
continue;
}
/* Skip lines that (only) have a comment. */
if ((buff[c] == L'#') || (buff[c] == L';')) continue;
if (buff[c] == L'[') { /*Section*/
sd = 0;
c++;
d = 0;
while (buff[c] != L']' && buff[c])
wctomb(&(sname[sd++]), buff[c++]);
wctomb(&(sname[d++]), buff[c++]);
sname[d] = L'\0';
/* Is the section name properly terminated? */
if (buff[c] != L']') continue;
sname[sd] = 0;
/* Create a new section and insert it. */
ns = malloc(sizeof(section_t));
memset(ns, 0x00, sizeof(section_t));
strncpy(ns->name, sname, sizeof(ns->name));
list_add(&ns->list, &config_head);
/* New section is now the current one. */
sec = ns;
} else {
ed = 0;
while (buff[c] != L'=' && buff[c] != L' ' && buff[c])
wctomb(&(ename[ed++]), buff[c++]);
if (buff[c] == L'\0') continue;
ename[ed] = 0;
while ((buff[c] == L'=' || buff[c] == L' ') && buff[c])
c++;
if (! buff[c]) continue;
data_pos = c;
while (buff[c]) {
if (buff[c] == L'\n')
buff[c] = L'\0';
c++;
}
ne = malloc(sizeof(entry_t));
memset(ne, 0x00, sizeof(entry_t));
strncpy(ne->name, ename, 256);
memcpy(ne->wdata, &buff[data_pos], 512);
ne->wdata[255] = L'\0';
wcstombs(ne->data, ne->wdata, sizeof(ne->data));
ne->data[255] = '\0';
list_add(&ne->list, &sec->entry_head);
continue;
}
/* Get the variable name. */
d = 0;
while ((buff[c] != L'=') && (buff[c] != L' ') && buff[c])
wctomb(&(ename[d++]), buff[c++]);
ename[d] = L'\0';
/* Skip incomplete lines. */
if (buff[c] == L'\0') continue;
/* Look for =, skip whitespace. */
while ((buff[c] == L'=' || buff[c] == L' ') && buff[c])
c++;
/* Skip incomplete lines. */
if (buff[c] == L'\0') continue;
/* This is where the value part starts. */
d = c;
/* Allocate a new variable entry.. */
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);
ne->wdata[sizeof_w(ne->wdata)-1] = L'\0';
wcstombs(ne->data, ne->wdata, sizeof(ne->data));
ne->data[sizeof(ne->data)-1] = '\0';
/* .. and insert it. */
list_add(&ne->list, &sec->entry_head);
}
(void)fclose(f);
@@ -340,12 +342,12 @@ config_read(wchar_t *fn)
void
config_write(wchar_t *fn)
{
wchar_t wname[512];
wchar_t wtemp[512];
section_t *sec;
FILE *f;
int fl = 0;
#ifdef ANSI_CFG
#if defined(ANSI_CFG) || !defined(WIN32)
f = plat_fopen(fn, L"wt");
#else
f = plat_fopen(fn, L"wt, ccs=UNICODE");
@@ -357,22 +359,22 @@ config_write(wchar_t *fn)
entry_t *ent;
if (sec->name[0]) {
mbstowcs(wname, sec->name, strlen(sec->name)+1);
mbstowcs(wtemp, sec->name, strlen(sec->name)+1);
if (fl)
fwprintf(f, L"\n[%ls]\n", wname);
fwprintf(f, L"\n[%ls]\n", wtemp);
else
fwprintf(f, L"[%ls]\n", wname);
fwprintf(f, L"[%ls]\n", wtemp);
fl++;
}
ent = (entry_t *)sec->entry_head.next;
while (ent != NULL) {
if (ent->name[0]) {
mbstowcs(wname, ent->name, strlen(ent->name)+1);
if (ent->name[0] != '\0') {
mbstowcs(wtemp, ent->name, sizeof_w(wtemp));
if (ent->wdata[0] == L'\0')
fwprintf(f, L"%ls = \n", wname);
fwprintf(f, L"%ls = \n", wtemp);
else
fwprintf(f, L"%ls = %ls\n", wname, ent->wdata);
fwprintf(f, L"%ls = %ls\n", wtemp, ent->wdata);
fl++;
}
@@ -390,7 +392,7 @@ config_write(wchar_t *fn)
static void
config_new(void)
{
#ifdef ANSI_CFG
#if defined(ANSI_CFG) || !defined(WIN32)
FILE *f = _wfopen(config_file, L"wt");
#else
FILE *f = _wfopen(config_file, L"wt, ccs=UNICODE");
@@ -418,8 +420,16 @@ load_general(void)
strcpy(temp, p);
if (! strcmp(temp, "ddraw"))
vid_api = 0;
else
else if (! strcmp(temp, "d3d9"))
vid_api = 1;
else if (! strcmp(temp, "vnc"))
vid_api = 2;
#if 0
else if (! strcmp(temp, "rdp"))
vid_api = 3;
#endif
else
vid_api = 1; /* default to d3d9 on invalid values */
config_delete_var(cat, "vid_api");
video_fullscreen_scale = config_get_int(cat, "video_fullscreen_scale", 0);
@@ -455,7 +465,7 @@ load_general(void)
* (version 1.30 at the earliest) other languages will be
* added, therefore it is better to future-proof the code.
*/
plat_language = config_get_hex16(cat, "language", 0x0409);
plat_langid = config_get_hex16(cat, "language", 0x0409);
#endif
}
@@ -750,8 +760,7 @@ static void
load_hard_disks(void)
{
char *cat = "Hard disks";
char temp[512];
char temp2[512];
char temp[512], tmp2[512];
char s[512];
int c;
char *p;
@@ -761,10 +770,8 @@ load_hard_disks(void)
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, NULL);
if (p == NULL)
p = "0, 0, 0, 0, none";
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, "%" PRIu64 ", %" PRIu64", %" PRIu64 ", %s",
&hdd[c].spt, &hdd[c].hpc, &hdd[c].tracks, s);
@@ -841,8 +848,8 @@ load_hard_disks(void)
sprintf(temp, "hdd_%02i_ide_channel", c+1);
if ((hdd[c].bus == HDD_BUS_IDE_PIO_ONLY) ||
(hdd[c].bus == HDD_BUS_IDE_PIO_AND_DMA)) {
sprintf(temp2, "%01u:%01u", c>>1, c&1);
p = config_get_string(cat, temp, temp2);
sprintf(tmp2, "%01u:%01u", c>>1, c&1);
p = config_get_string(cat, temp, tmp2);
if (! strstr(p, ":")) {
sscanf(p, "%i", (int *)&hdd[c].ide_channel);
hdd[c].ide_channel &= 7;
@@ -861,11 +868,11 @@ load_hard_disks(void)
}
/* SCSI */
sprintf(temp, "hdd_%02i_scsi_location", c + 1);
sprintf(temp, "hdd_%02i_scsi_location", c+1);
if ((hdd[c].bus == HDD_BUS_SCSI) ||
(hdd[c].bus == HDD_BUS_SCSI_REMOVABLE)) {
sprintf(temp, "%02u:%02u", c, 0);
p = config_get_string(cat, temp, temp2);
sprintf(tmp2, "%02u:%02u", c, 0);
p = config_get_string(cat, temp, tmp2);
sscanf(p, "%02u:%02u",
(int *)&hdd[c].scsi_id, (int *)&hdd[c].scsi_lun);
@@ -880,7 +887,7 @@ load_hard_disks(void)
memset(hdd[c].fn, 0x00, sizeof(hdd[c].fn));
memset(hdd[c].prev_fn, 0x00, sizeof(hdd[c].prev_fn));
sprintf(temp, "hdd_%02i_fn", c + 1);
sprintf(temp, "hdd_%02i_fn", c+1);
wp = config_get_wstring(cat, temp, L"");
#if 0
@@ -897,10 +904,10 @@ load_hard_disks(void)
* with the CFG path. Just strip
* that off for now...
*/
wcscpy((wchar_t *)hdd[c].fn, &wp[wcslen(cfg_path)]);
wcsncpy(hdd[c].fn, &wp[wcslen(cfg_path)], sizeof_w(hdd[c].fn));
} else
#endif
memcpy(hdd[c].fn, wp, (wcslen(wp) << 1) + 2);
wcsncpy(hdd[c].fn, wp, sizeof_w(hdd[c].fn));
/* If disk is empty or invalid, mark it for deletion. */
if (! hdd_is_valid(c)) {
@@ -934,7 +941,7 @@ static void
load_removable_devices(void)
{
char *cat = "Removable devices";
char temp[512], temp2[512], *p;
char temp[512], tmp2[512], *p;
char s[512];
unsigned int board = 0, dev = 0;
wchar_t *wp;
@@ -964,10 +971,10 @@ load_removable_devices(void)
* with the EXE path. Just strip
* that off for now...
*/
wcscpy((wchar_t *)floppyfns[c], &wp[wcslen(cfg_path)]);
wcsncpy(floppyfns[c], &wp[wcslen(cfg_path)], sizeof_w(floppyfns[c]));
} else
#endif
memcpy(floppyfns[c], wp, (wcslen(wp) << 1) + 2);
wcsncpy(floppyfns[c], wp, sizeof_w(floppyfns[c]));
if (*wp != L'\0')
printf("Floppy%d: %ls\n", c, floppyfns[c]);
@@ -978,7 +985,7 @@ load_removable_devices(void)
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. */
/* Check whether each value is default, if yes, delete it so that only non-default values will later be saved. */
if (fdd_get_type(c) == ((c < 2) ? 2 : 0)) {
sprintf(temp, "fdd_%02i_type", c+1);
config_delete_var(cat, temp);
@@ -1018,8 +1025,8 @@ load_removable_devices(void)
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(temp2, "%01u:%01u", (c+2)>>1, (c+2)&1);
p = config_get_string(cat, temp, temp2);
sprintf(tmp2, "%01u:%01u", (c+2)>>1, (c+2)&1);
p = config_get_string(cat, temp, tmp2);
if (! strstr(p, ":")) {
sscanf(p, "%i", (int *)&hdd[c].ide_channel);
cdrom_drives[c].ide_channel &= 7;
@@ -1038,8 +1045,8 @@ load_removable_devices(void)
} else {
sprintf(temp, "cdrom_%02i_scsi_location", c+1);
if (cdrom_drives[c].bus_type == CDROM_BUS_SCSI) {
sprintf(temp2, "%02u:%02u", c+2, 0);
p = config_get_string(cat, temp, temp2);
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);
@@ -1070,10 +1077,10 @@ load_removable_devices(void)
* with the EXE path. Just strip
* that off for now...
*/
wcscpy(cdrom_image[c].image_path,&wp[wcslen(cfg_path)]);
wcsncpy(cdrom_image[c].image_path, &wp[wcslen(cfg_path)], sizeof_w(cdrom_image[c].image_path));
} else
#endif
memcpy(cdrom_image[c].image_path, wp, (wcslen(wp) << 1) + 2);
wcsncpy(cdrom_image[c].image_path, wp, sizeof_w(cdrom_image[c].image_path));
wcscpy(cdrom_image[c].prev_image_path, cdrom_image[c].image_path);
if (cdrom_drives[c].host_drive < 'A')
@@ -1118,7 +1125,7 @@ config_load(wchar_t *fn)
if (! config_read(fn)) {
cpu = 0;
#ifdef USE_LANGUAGE
plat_language = 0x0409;
plat_langid = 0x0409;
#endif
scale = 1;
vid_api = 1;
@@ -1147,7 +1154,7 @@ config_load(wchar_t *fn)
load_hard_disks(); /* Hard disks */
load_removable_devices(); /* Removable devices */
pclog("Config loaded.\n");
pclog("Config loaded.\n\n");
}
@@ -1173,6 +1180,16 @@ save_general(void)
default:
config_set_string(cat, "vid_renderer", "d3d9");
break;
case 2:
config_set_string(cat, "vid_renderer", "vnc");
break;
#if 0
case 3:
config_set_string(cat, "vid_renderer", "rdp");
break;
#endif
}
if (video_fullscreen_scale == 0)
@@ -1226,10 +1243,10 @@ save_general(void)
}
#ifdef USE_LANGUAGE
if (plat_language == 0x0409)
if (plat_langid == 0x0409)
config_delete_var(cat, "language");
else
config_set_hex16(cat, "language", plat_language);
config_set_hex16(cat, "language", plat_langid);
#endif
delete_section_if_empty(cat);
@@ -1308,7 +1325,7 @@ static void
save_input_devices(void)
{
char *cat = "Input devices";
char temp[512], temp2[512];
char temp[512], tmp2[512];
int c, d;
config_set_string(cat, "mouse_type", mouse_get_internal_name(mouse_type));
@@ -1320,42 +1337,42 @@ save_input_devices(void)
config_set_int(cat, "joystick_type", joystick_type);
for (c=0; c<16; c++) {
sprintf(temp2, "joystick_%i_nr", c);
config_delete_var(cat, temp2);
sprintf(tmp2, "joystick_%i_nr", c);
config_delete_var(cat, tmp2);
for (d=0; d<16; d++) {
sprintf(temp2, "joystick_%i_axis_%i", c, d);
config_delete_var(cat, temp2);
sprintf(tmp2, "joystick_%i_axis_%i", c, d);
config_delete_var(cat, tmp2);
}
for (d=0; d<16; d++) {
sprintf(temp2, "joystick_%i_button_%i", c, d);
config_delete_var(cat, temp2);
sprintf(tmp2, "joystick_%i_button_%i", c, d);
config_delete_var(cat, tmp2);
}
for (d=0; d<16; d++) {
sprintf(temp2, "joystick_%i_pov_%i", c, d);
config_delete_var(cat, temp2);
sprintf(tmp2, "joystick_%i_pov_%i", c, d);
config_delete_var(cat, tmp2);
}
}
} else {
config_set_int(cat, "joystick_type", joystick_type);
for (c=0; c<joystick_get_max_joysticks(joystick_type); c++) {
sprintf(temp2, "joystick_%i_nr", c);
config_set_int(cat, temp2, joystick_state[c].plat_joystick_nr);
sprintf(tmp2, "joystick_%i_nr", c);
config_set_int(cat, tmp2, joystick_state[c].plat_joystick_nr);
if (joystick_state[c].plat_joystick_nr) {
for (d=0; d<joystick_get_axis_count(joystick_type); d++) {
sprintf(temp2, "joystick_%i_axis_%i", c, d);
config_set_int(cat, temp2, joystick_state[c].axis_mapping[d]);
sprintf(tmp2, "joystick_%i_axis_%i", c, d);
config_set_int(cat, tmp2, joystick_state[c].axis_mapping[d]);
}
for (d=0; d<joystick_get_button_count(joystick_type); d++) {
sprintf(temp2, "joystick_%i_button_%i", c, d);
config_set_int(cat, temp2, joystick_state[c].button_mapping[d]);
sprintf(tmp2, "joystick_%i_button_%i", c, d);
config_set_int(cat, tmp2, joystick_state[c].button_mapping[d]);
}
for (d=0; d<joystick_get_pov_count(joystick_type); d++) {
sprintf(temp2, "joystick_%i_pov_%i", c, d);
sprintf(tmp2, "joystick_%i_pov_%i", c, d);
sprintf(temp, "%i, %i", joystick_state[c].pov_mapping[d][0], joystick_state[c].pov_mapping[d][1]);
config_set_string(cat, temp2, temp);
config_set_string(cat, tmp2, temp);
}
}
}
@@ -1430,7 +1447,7 @@ save_network(void)
if (network_pcap[0] != '\0') {
if (! strcmp(network_pcap, "none"))
config_delete_var(cat, "net_pcap_device");
else
else
config_set_string(cat, "net_pcap_device", network_pcap);
} else {
/* config_set_string(cat, "net_pcap_device", "none"); */
@@ -1439,7 +1456,7 @@ save_network(void)
if (network_card == 0)
config_delete_var(cat, "net_card");
else
else
config_set_string(cat, "net_card",
network_card_get_internal_name(network_card));
@@ -1482,7 +1499,7 @@ static void
save_other_peripherals(void)
{
char *cat = "Other peripherals";
char temp[512], temp2[512];
char temp[512], tmp2[512];
int c;
if (scsi_card_current == 0)
@@ -1496,11 +1513,11 @@ save_other_peripherals(void)
memset(temp, '\0', sizeof(temp));
for (c=2; c<4; c++) {
sprintf(temp, "ide_%02i", c + 1);
sprintf(temp2, "%i, %02i", !!ide_enable[c], ide_irq[c]);
sprintf(tmp2, "%i, %02i", !!ide_enable[c], ide_irq[c]);
if (ide_enable[c] == 0)
config_delete_var(cat, temp);
else
config_set_string(cat, temp, temp2);
config_set_string(cat, temp, tmp2);
}
if (bugger_enabled == 0)
@@ -1517,7 +1534,7 @@ static void
save_hard_disks(void)
{
char *cat = "Hard disks";
char temp[24], temp2[64];
char temp[24], tmp2[64];
char *p;
int c;
@@ -1526,9 +1543,9 @@ save_hard_disks(void)
sprintf(temp, "hdd_%02i_parameters", c+1);
if (hdd_is_valid(c)) {
p = hdd_bus_to_string(hdd[c].bus, 0);
sprintf(temp2, "%" PRIu64 ", %" PRIu64", %" PRIu64 ", %i, %s",
sprintf(tmp2, "%" PRIu64 ", %" PRIu64", %" PRIu64 ", %i, %s",
hdd[c].spt, hdd[c].hpc, hdd[c].tracks, hdd[c].wp, p);
config_set_string(cat, temp, temp2);
config_set_string(cat, temp, tmp2);
} else {
config_delete_var(cat, temp);
}
@@ -1555,16 +1572,16 @@ save_hard_disks(void)
if (! hdd_is_valid(c) || ((hdd[c].bus != HDD_BUS_IDE_PIO_ONLY) && (hdd[c].bus != HDD_BUS_IDE_PIO_AND_DMA))) {
config_delete_var(cat, temp);
} else {
sprintf(temp2, "%01u:%01u", hdd[c].ide_channel >> 1, hdd[c].ide_channel & 1);
config_set_string(cat, temp, temp2);
sprintf(tmp2, "%01u:%01u", hdd[c].ide_channel >> 1, hdd[c].ide_channel & 1);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "hdd_%02i_scsi_location", c+1);
if (! hdd_is_valid(c) || ((hdd[c].bus != HDD_BUS_SCSI) && (hdd[c].bus != HDD_BUS_SCSI_REMOVABLE))) {
config_delete_var(cat, temp);
} else {
sprintf(temp2, "%02u:%02u", hdd[c].scsi_id, hdd[c].scsi_lun);
config_set_string(cat, temp, temp2);
sprintf(tmp2, "%02u:%02u", hdd[c].scsi_id, hdd[c].scsi_lun);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "hdd_%02i_fn", c+1);
@@ -1583,7 +1600,7 @@ static void
save_removable_devices(void)
{
char *cat = "Removable devices";
char temp[512], temp2[512];
char temp[512], tmp2[512];
int c;
for (c=0; c<FDD_NUM; c++) {
@@ -1638,9 +1655,9 @@ save_removable_devices(void)
if (cdrom_drives[c].bus_type == 0) {
config_delete_var(cat, temp);
} else {
sprintf(temp2, "%u, %s", cdrom_drives[c].sound_on,
sprintf(tmp2, "%u, %s", cdrom_drives[c].sound_on,
hdd_bus_to_string(cdrom_drives[c].bus_type, 1));
config_set_string(cat, temp, temp2);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "cdrom_%02i_ide_channel", c+1);
@@ -1648,18 +1665,18 @@ save_removable_devices(void)
(cdrom_drives[c].bus_type != CDROM_BUS_ATAPI_PIO_AND_DMA)) {
config_delete_var(cat, temp);
} else {
sprintf(temp2, "%01u:%01u", cdrom_drives[c].ide_channel>>1,
sprintf(tmp2, "%01u:%01u", cdrom_drives[c].ide_channel>>1,
cdrom_drives[c].ide_channel & 1);
config_set_string(cat, temp, temp2);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "cdrom_%02i_scsi_location", c + 1);
if (cdrom_drives[c].bus_type != CDROM_BUS_SCSI) {
config_delete_var(cat, temp);
} else {
sprintf(temp2, "%02u:%02u", cdrom_drives[c].scsi_device_id,
sprintf(tmp2, "%02u:%02u", cdrom_drives[c].scsi_device_id,
cdrom_drives[c].scsi_device_lun);
config_set_string(cat, temp, temp2);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "cdrom_%02i_image_path", c + 1);
@@ -1707,7 +1724,7 @@ config_dump(void)
ent = (entry_t *)sec->entry_head.next;
while (ent != NULL) {
pclog("%s = %s\n", ent->name, ent->data);
pclog("%s = %ls\n", ent->name, ent->wdata);
ent = (entry_t *)ent->list.next;
}
@@ -1858,18 +1875,18 @@ void
config_set_int(char *head, char *name, int val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
sprintf(entry->data, "%i", val);
mbstowcs(entry->wdata, entry->data, 512);
sprintf(ent->data, "%i", val);
mbstowcs(ent->wdata, ent->data, sizeof_w(ent->wdata));
}
@@ -1877,18 +1894,18 @@ void
config_set_hex16(char *head, char *name, int val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
sprintf(entry->data, "%04X", val);
mbstowcs(entry->wdata, entry->data, 512);
sprintf(ent->data, "%04X", val);
mbstowcs(ent->wdata, ent->data, sizeof_w(ent->wdata));
}
@@ -1896,18 +1913,18 @@ void
config_set_hex20(char *head, char *name, int val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
sprintf(entry->data, "%05X", val);
mbstowcs(entry->wdata, entry->data, 512);
sprintf(ent->data, "%05X", val);
mbstowcs(ent->wdata, ent->data, sizeof_w(ent->wdata));
}
@@ -1915,19 +1932,19 @@ void
config_set_mac(char *head, char *name, int val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
sprintf(entry->data, "%02x:%02x:%02x",
sprintf(ent->data, "%02x:%02x:%02x",
(val>>16)&0xff, (val>>8)&0xff, val&0xff);
mbstowcs(entry->wdata, entry->data, 512);
mbstowcs(ent->wdata, ent->data, sizeof_w(ent->wdata));
}
@@ -1935,18 +1952,18 @@ void
config_set_string(char *head, char *name, char *val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
strncpy(entry->data, val, 256);
mbstowcs(entry->wdata, entry->data, 256);
strncpy(ent->data, val, sizeof(ent->data));
mbstowcs(ent->wdata, ent->data, sizeof_w(ent->wdata));
}
@@ -1954,18 +1971,18 @@ void
config_set_wstring(char *head, char *name, wchar_t *val)
{
section_t *section;
entry_t *entry;
entry_t *ent;
section = find_section(head);
if (section == NULL)
section = create_section(head);
entry = find_entry(section, name);
if (entry == NULL)
entry = create_entry(section, name);
ent = find_entry(section, name);
if (ent == NULL)
ent = create_entry(section, name);
memcpy(entry->wdata, val, 512);
wcstombs(entry->data, entry->wdata, 256);
memcpy(ent->wdata, val, sizeof_w(ent->wdata));
wcstombs(ent->data, ent->wdata, sizeof(ent->data));
}
@@ -2046,6 +2063,7 @@ put_backslash_w(wchar_t *s)
}
#if 0
/* FIXME: should be moved elsewhere. --FvK */
char *
get_extension(char *s)
@@ -2063,6 +2081,7 @@ get_extension(char *s)
return(&s[c+1]);
}
#endif
/* FIXME: should be moved elsewhere. --FvK */

View File

@@ -8,7 +8,7 @@
*
* Handling of hard disk image files.
*
* Version: @(#)hdd_image.c 1.0.4 2017/11/12
* Version: @(#)hdd_image.c 1.0.5 2017/11/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>

View File

@@ -8,7 +8,7 @@
*
* Define the various platform support functions.
*
* Version: @(#)plat.h 1.0.5 2017/10/12
* Version: @(#)plat.h 1.0.6 2017/10/13
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
@@ -38,6 +38,10 @@ extern int dir_check_exist(wchar_t *path);
extern int dir_create(wchar_t *path);
extern void leave_fullscreen(void);
/* Return the size (in wchar's) of a wchar_t array. */
#define sizeof_w(x) (sizeof((x)) / sizeof(wchar_t))
/* The Win32 API uses _wcsicmp. */
#ifdef WIN32
# define wcscasecmp _wcsicmp
#endif