diff --git a/src/config.c b/src/config.c index f5a72f1..4da2767 100644 --- a/src/config.c +++ b/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, * Miran Grca, @@ -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 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>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; - for (c=0; c 'Z') && (cdrom_drives[c].host_drive != 200))) { @@ -1909,7 +1755,7 @@ save_other_removable_devices(void) } } - for (c=0; cdata); } 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) diff --git a/src/config.h b/src/config.h index c4398bb..8440651 100644 --- a/src/config.h +++ b/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, * Miran Grca, @@ -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 } diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 2556a26..8e8974e 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/disk/hdc.h b/src/disk/hdc.h index 95be275..6dca973 100644 --- a/src/disk/hdc.h +++ b/src/disk/hdc.h @@ -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, * Miran Grca, @@ -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 } diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index cd4b34b..36c9613 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -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, * Miran Grca, @@ -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) diff --git a/src/floppy/fdd.h b/src/floppy/fdd.h index 9cf7fda..7dca458 100644 --- a/src/floppy/fdd.h +++ b/src/floppy/fdd.h @@ -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, * Miran Grca, @@ -103,24 +103,23 @@ 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); extern void fdd_poll(int drive); -extern void fdd_poll_0(void* priv); -extern void fdd_poll_1(void* priv); -extern void fdd_poll_2(void* priv); -extern void fdd_poll_3(void* priv); +extern void fdd_poll_0(void *priv); +extern void fdd_poll_1(void *priv); +extern void fdd_poll_2(void *priv); +extern void fdd_poll_3(void *priv); extern void fdd_seek(int drive, int track); extern void fdd_readsector(int drive, int sector, int track, int side, int density, int sector_size); @@ -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); diff --git a/src/floppy/fdd_86f.c b/src/floppy/fdd_86f.c index 2b2d309..34c1f01 100644 --- a/src/floppy/fdd_86f.c +++ b/src/floppy/fdd_86f.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/floppy/fdd_86f.h b/src/floppy/fdd_86f.h index 8242f5b..9505810 100644 --- a/src/floppy/fdd_86f.h +++ b/src/floppy/fdd_86f.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/floppy/fdd_fdi.c b/src/floppy/fdd_fdi.c index d0e00ff..8e3cb4b 100644 --- a/src/floppy/fdd_fdi.c +++ b/src/floppy/fdd_fdi.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/floppy/fdd_fdi.h b/src/floppy/fdd_fdi.h index 4808ecb..e6badbe 100644 --- a/src/floppy/fdd_fdi.h +++ b/src/floppy/fdd_fdi.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/floppy/fdd_imd.c b/src/floppy/fdd_imd.c index 1453995..0a8d7e3 100644 --- a/src/floppy/fdd_imd.c +++ b/src/floppy/fdd_imd.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/floppy/fdd_imd.h b/src/floppy/fdd_imd.h index 4e16bd0..4d26edb 100644 --- a/src/floppy/fdd_imd.h +++ b/src/floppy/fdd_imd.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/floppy/fdd_img.c b/src/floppy/fdd_img.c index 741befb..5ec0cee 100644 --- a/src/floppy/fdd_img.c +++ b/src/floppy/fdd_img.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/floppy/fdd_img.h b/src/floppy/fdd_img.h index b5bddb4..836efc6 100644 --- a/src/floppy/fdd_img.h +++ b/src/floppy/fdd_img.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/floppy/fdd_json.c b/src/floppy/fdd_json.c index 550aed9..a7ee3b6 100644 --- a/src/floppy/fdd_json.c +++ b/src/floppy/fdd_json.c @@ -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, * @@ -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); } diff --git a/src/floppy/fdd_json.h b/src/floppy/fdd_json.h index 0df9dab..72fe288 100644 --- a/src/floppy/fdd_json.h +++ b/src/floppy/fdd_json.h @@ -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, * @@ -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); diff --git a/src/floppy/fdd_td0.c b/src/floppy/fdd_td0.c index d4e3d66..5e2eb47 100644 --- a/src/floppy/fdd_td0.c +++ b/src/floppy/fdd_td0.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/floppy/fdd_td0.h b/src/floppy/fdd_td0.h index 8c35932..97d3e42 100644 --- a/src/floppy/fdd_td0.h +++ b/src/floppy/fdd_td0.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/machine/machine.h b/src/machine/machine.h index 5b0ff79..dd9f3c8 100644 --- a/src/machine/machine.h +++ b/src/machine/machine.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 84a3148..4f19856 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -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); } diff --git a/src/mem.c b/src/mem.c index b34cb05..0c260da 100644 --- a/src/mem.c +++ b/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, * Miran Grca, @@ -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(); } diff --git a/src/mouse.c b/src/mouse.c index 5e0a78e..2392005 100644 --- a/src/mouse.c +++ b/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, * Miran Grca, @@ -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); } diff --git a/src/mouse.h b/src/mouse.h index e5c824b..a7671e4 100644 --- a/src/mouse.h +++ b/src/mouse.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/network/network.c b/src/network/network.c index 16295ff..e68ddf9 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -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, * @@ -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 * @@ -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 diff --git a/src/parallel_dev.c b/src/parallel_dev.c index 661d9d4..394221b 100644 --- a/src/parallel_dev.c +++ b/src/parallel_dev.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/parallel_dev.h b/src/parallel_dev.h index a347839..e56301b 100644 --- a/src/parallel_dev.h +++ b/src/parallel_dev.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/pc.c b/src/pc.c index 2e48a60..5e30bf6 100644 --- a/src/pc.c +++ b/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, * Miran Grca, @@ -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)); diff --git a/src/plat.h b/src/plat.h index a70d073..8a6a740 100644 --- a/src/plat.h +++ b/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, * @@ -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); @@ -171,8 +171,8 @@ extern void ioctl_close(uint8_t id); extern void plat_midi_init(void); extern void plat_midi_close(void); -extern void plat_midi_play_msg(uint8_t* val); -extern void plat_midi_play_sysex(uint8_t* data, unsigned int len); +extern void plat_midi_play_msg(uint8_t *val); +extern void plat_midi_play_sysex(uint8_t *data, unsigned int len); extern int plat_midi_write(uint8_t val); extern int plat_midi_get_num_devs(); extern void plat_midi_get_dev_name(int num, char *s); @@ -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); diff --git a/src/rom.c b/src/rom.c index 0cb023e..f3e49f4 100644 --- a/src/rom.c +++ b/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, * Miran Grca, @@ -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); diff --git a/src/rom.h b/src/rom.h index 9da5672..9a73ed7 100644 --- a/src/rom.h +++ b/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, * @@ -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*/ diff --git a/src/rom_load.c b/src/rom_load.c index d1b85f6..23c9ec6 100644 --- a/src/rom_load.c +++ b/src/rom_load.c @@ -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, * @@ -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]; diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index c5e47b6..77bfb0f 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/scsi/scsi.h b/src/scsi/scsi.h index 54168d2..ae146b2 100644 --- a/src/scsi/scsi.h +++ b/src/scsi/scsi.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/sound/midi.c b/src/sound/midi.c index 3d4aae2..cd2afae 100644 --- a/src/sound/midi.c +++ b/src/sound/midi.c @@ -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, * Miran Grca, @@ -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,25 +150,26 @@ 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; while (devices[c].internal_name != NULL) { - if (!strcmp(devices[c].internal_name, s)) + if (! strcmp(devices[c].internal_name, s)) return(c); 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)); diff --git a/src/sound/midi.h b/src/sound/midi.h index 6df1a32..34ff678 100644 --- a/src/sound/midi.h +++ b/src/sound/midi.h @@ -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, * Miran Grca, @@ -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*/ diff --git a/src/sound/openal.c b/src/sound/openal.c index b778b9f..c9cae6d 100644 --- a/src/sound/openal.c +++ b/src/sound/openal.c @@ -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, * Miran Grca, @@ -234,7 +234,7 @@ inital(void) int c; #endif int init_midi = 0; - char *str; + const char *str; pclog("SOUND: inital()\n"); /* diff --git a/src/sound/snd_mpu401.c b/src/sound/snd_mpu401.c index fcfadfa..f8860ab 100644 --- a/src/sound/snd_mpu401.c +++ b/src/sound/snd_mpu401.c @@ -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, * Miran Grca, @@ -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; diff --git a/src/sound/sound.h b/src/sound/sound.h index 6f4fad1..f4ed05b 100644 --- a/src/sound/sound.h +++ b/src/sound/sound.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/sound/sound_dev.c b/src/sound/sound_dev.c index 733ed10..f6be033 100644 --- a/src/sound/sound_dev.c +++ b/src/sound/sound_dev.c @@ -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, * Miran Grca, @@ -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); } diff --git a/src/video/video.c b/src/video/video.c index adfd228..0e8240f 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -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, * Miran Grca, @@ -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; diff --git a/src/video/video.h b/src/video/video.h index 2848072..bb7551a 100644 --- a/src/video/video.h +++ b/src/video/video.h @@ -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, * Miran Grca, @@ -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); diff --git a/src/video/video_dev.c b/src/video/video_dev.c index cd2fdb9..9eddc88 100644 --- a/src/video/video_dev.c +++ b/src/video/video_dev.c @@ -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, * Miran Grca, @@ -51,7 +51,6 @@ #include "../timer.h" #include "../plat.h" #include "video.h" -//#include "vid_svga.h" #define VIDEO_FLAG_TYPE_CGA 0x00 @@ -317,7 +316,7 @@ video_detect(void) /* Make sure we have a usable video card. */ c = 0; - for (i=0; i * Miran Grca, diff --git a/src/win/win.c b/src/win/win.c index cf8328e..0e6ea6a 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -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, * Miran Grca, @@ -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"; diff --git a/src/win/win_settings_input.h b/src/win/win_settings_input.h index 4dfb2c6..a0ad01e 100644 --- a/src/win/win_settings_input.h +++ b/src/win/win_settings_input.h @@ -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, * Miran Grca, @@ -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; diff --git a/src/win/win_settings_network.h b/src/win/win_settings_network.h index 7729fa3..3cc6bec 100644 --- a/src/win/win_settings_network.h +++ b/src/win/win_settings_network.h @@ -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, * Miran Grca, @@ -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; diff --git a/src/win/win_settings_periph.h b/src/win/win_settings_periph.h index f1c58c9..a24809f 100644 --- a/src/win/win_settings_periph.h +++ b/src/win/win_settings_periph.h @@ -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, * Miran Grca, @@ -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; diff --git a/src/win/win_settings_sound.h b/src/win/win_settings_sound.h index 859a46b..88e7193 100644 --- a/src/win/win_settings_sound.h +++ b/src/win/win_settings_sound.h @@ -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, * Miran Grca, @@ -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; diff --git a/src/win/win_thread.c b/src/win/win_thread.c index 6e464a8..c93cee3 100644 --- a/src/win/win_thread.c +++ b/src/win/win_thread.c @@ -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, * Sarah Walker, @@ -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)); }