Split cdrom and zip settings.

This commit is contained in:
2020-03-28 02:18:56 +00:00
parent a4228ca204
commit 39a9cb482e

View File

@@ -70,6 +70,7 @@
#include "devices/scsi/scsi_device.h" #include "devices/scsi/scsi_device.h"
#include "devices/cdrom/cdrom.h" #include "devices/cdrom/cdrom.h"
#include "devices/disk/zip.h" #include "devices/disk/zip.h"
#include "devices/disk/mo.h"
#include "devices/network/network.h" #include "devices/network/network.h"
#include "devices/sound/sound.h" #include "devices/sound/sound.h"
#include "devices/sound/midi.h" #include "devices/sound/midi.h"
@@ -1270,225 +1271,254 @@ save_floppy(const config_t *cfg, const char *cat)
} }
/* Load "Removable Devices" section. */ /* Load "Multimedia Devices" section. */
//FIXME: stuff should be loaded into config_t ! //FIXME: stuff should be loaded into config_t !
static void static void
load_removable(config_t *cfg, const char *cat) load_multimedia(config_t* cfg, const char* cat)
{ {
char temp[512], tmp2[512], *p; char temp[512], tmp2[512], * p;
char s[512]; char s[512];
unsigned int board = 0, dev = 0; unsigned int board = 0, dev = 0;
wchar_t *wp; wchar_t* wp;
int c; int c;
for (c = 0; c < CDROM_NUM; c++) { for (c = 0; c < CDROM_NUM; c++) {
sprintf(temp, "cdrom_%02i_host_drive", c+1); sprintf(temp, "cdrom_%02i_host_drive", c + 1);
cdrom[c].host_drive = config_get_int(cat, temp, 0); cdrom[c].host_drive = config_get_int(cat, temp, 0);
cdrom[c].prev_host_drive = cdrom[c].host_drive; cdrom[c].prev_host_drive = cdrom[c].host_drive;
sprintf(temp, "cdrom_%02i_parameters", c+1); sprintf(temp, "cdrom_%02i_parameters", c + 1);
p = config_get_string(cat, temp, "0, none"); p = config_get_string(cat, temp, "0, none");
sscanf(p, "%01u, %s", (int *)&cdrom[c].sound_on, s); sscanf(p, "%01u, %s", (int*)&cdrom[c].sound_on, s);
cdrom[c].bus_type = cdrom_string_to_bus(s); cdrom[c].bus_type = cdrom_string_to_bus(s);
sprintf(temp, "cdrom_%02i_speed", c+1); sprintf(temp, "cdrom_%02i_speed", c + 1);
cdrom[c].speed_idx = config_get_int(cat, temp, cdrom_speed_idx(CDROM_SPEED_DEFAULT)); cdrom[c].speed_idx = config_get_int(cat, temp, cdrom_speed_idx(CDROM_SPEED_DEFAULT));
/* Default values, needed for proper operation of the Settings dialog. */ /* Default values, needed for proper operation of the Settings dialog. */
cdrom[c].bus_id.ide_channel = cdrom[c].bus_id.scsi.id = c + 2; cdrom[c].bus_id.ide_channel = cdrom[c].bus_id.scsi.id = c + 2;
sprintf(temp, "cdrom_%02i_ide_channel", c+1); sprintf(temp, "cdrom_%02i_ide_channel", c + 1);
if (cdrom[c].bus_type == CDROM_BUS_ATAPI) { if (cdrom[c].bus_type == CDROM_BUS_ATAPI) {
sprintf(tmp2, "%01u:%01u", (c+2)>>1, (c+2)&1); sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1);
p = config_get_string(cat, temp, tmp2); p = config_get_string(cat, temp, tmp2);
sscanf(p, "%01u:%01u", &board, &dev); sscanf(p, "%01u:%01u", &board, &dev);
board &= 3; board &= 3;
dev &= 1; dev &= 1;
cdrom[c].bus_id.ide_channel = (board<<1)+dev; cdrom[c].bus_id.ide_channel = (board << 1) + dev;
if (cdrom[c].bus_id.ide_channel > 7) if (cdrom[c].bus_id.ide_channel > 7)
cdrom[c].bus_id.ide_channel = 7; cdrom[c].bus_id.ide_channel = 7;
} else { }
sprintf(temp, "cdrom_%02i_scsi_location", c+1); else {
if (cdrom[c].bus_type == CDROM_BUS_SCSI) { sprintf(temp, "cdrom_%02i_scsi_location", c + 1);
sprintf(tmp2, "%02u:%02u", c+2, 0); if (cdrom[c].bus_type == CDROM_BUS_SCSI) {
p = config_get_string(cat, temp, tmp2); sprintf(tmp2, "%02u:%02u", c + 2, 0);
sscanf(p, "%02u:%02u", p = config_get_string(cat, temp, tmp2);
(int *)&cdrom[c].bus_id.scsi.id, sscanf(p, "%02u:%02u",
(int *)&cdrom[c].bus_id.scsi.lun); (int*)&cdrom[c].bus_id.scsi.id,
(int*)&cdrom[c].bus_id.scsi.lun);
if (cdrom[c].bus_id.scsi.id > 15)
cdrom[c].bus_id.scsi.id = 15; if (cdrom[c].bus_id.scsi.id > 15)
if (cdrom[c].bus_id.scsi.lun > 7) cdrom[c].bus_id.scsi.id = 15;
cdrom[c].bus_id.scsi.lun = 7; if (cdrom[c].bus_id.scsi.lun > 7)
} else { cdrom[c].bus_id.scsi.lun = 7;
config_delete_var(cat, temp); }
} else {
config_delete_var(cat, temp);
}
} }
sprintf(temp, "cdrom_%02i_image_path", c+1); sprintf(temp, "cdrom_%02i_image_path", c + 1);
wp = config_get_wstring(cat, temp, L""); wp = config_get_wstring(cat, temp, L"");
/* Try to make relative, and copy to destination. */ /* Try to make relative, and copy to destination. */
pc_path(cdrom[c].image_path, sizeof_w(cdrom[c].image_path), wp); pc_path(cdrom[c].image_path, sizeof_w(cdrom[c].image_path), wp);
if (cdrom[c].host_drive < 'A') if (cdrom[c].host_drive < 'A')
cdrom[c].host_drive = 0; cdrom[c].host_drive = 0;
if ((cdrom[c].host_drive == 0x200) && if ((cdrom[c].host_drive == 0x200) &&
(wcslen(cdrom[c].image_path) == 0)) (wcslen(cdrom[c].image_path) == 0))
cdrom[c].host_drive = 0; cdrom[c].host_drive = 0;
/* If the CD-ROM is disabled, delete all its variables. */ /* If the CD-ROM is disabled, delete all its variables. */
if (cdrom[c].bus_type == CDROM_BUS_DISABLED) { if (cdrom[c].bus_type == CDROM_BUS_DISABLED) {
sprintf(temp, "cdrom_%02i_host_drive", c+1); sprintf(temp, "cdrom_%02i_host_drive", c + 1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
sprintf(temp, "cdrom_%02i_parameters", c+1); sprintf(temp, "cdrom_%02i_parameters", c + 1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
sprintf(temp, "cdrom_%02i_ide_channel", c+1); sprintf(temp, "cdrom_%02i_ide_channel", c + 1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
sprintf(temp, "cdrom_%02i_scsi_location", c+1); sprintf(temp, "cdrom_%02i_scsi_location", c + 1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
sprintf(temp, "cdrom_%02i_image_path", c+1); sprintf(temp, "cdrom_%02i_image_path", c + 1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
} }
sprintf(temp, "cdrom_%02i_iso_path", c+1); sprintf(temp, "cdrom_%02i_iso_path", c + 1);
config_delete_var(cat, temp);
}
for (c = 0; c < ZIP_NUM; c++) {
sprintf(temp, "zip_%02i_parameters", c+1);
p = config_get_string(cat, temp, "0, none");
sscanf(p, "%01u, %s", (unsigned *)&zip_drives[c].is_250, s);
zip_drives[c].bus_type = zip_string_to_bus(s);
/* Default values, needed for proper operation of the Settings dialog. */
zip_drives[c].bus_id.ide_channel = zip_drives[c].bus_id.scsi.id = c + 2;
sprintf(temp, "zip_%02i_ide_channel", c+1);
if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) {
sprintf(tmp2, "%01u:%01u", (c+2)>>1, (c+2)&1);
p = config_get_string(cat, temp, tmp2);
sscanf(p, "%01u:%01u", &board, &dev);
board &= 3;
dev &= 1;
zip_drives[c].bus_id.ide_channel = (board<<1)+dev;
if (zip_drives[c].bus_id.ide_channel > 7)
zip_drives[c].bus_id.ide_channel = 7;
} else {
sprintf(temp, "zip_%02i_scsi_location", c+1);
if (zip_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",
(unsigned *)&zip_drives[c].bus_id.scsi.id,
(unsigned *)&zip_drives[c].bus_id.scsi.lun);
if (zip_drives[c].bus_id.scsi.id > 15)
zip_drives[c].bus_id.scsi.id = 15;
if (zip_drives[c].bus_id.scsi.lun > 7)
zip_drives[c].bus_id.scsi.lun = 7;
} else {
config_delete_var(cat, temp);
}
}
sprintf(temp, "zip_%02i_image_path", c+1);
wp = config_get_wstring(cat, temp, L"");
/* Try to make relative, and copy to destination. */
pc_path(zip_drives[c].image_path, sizeof_w(zip_drives[c].image_path), wp);
/* If the CD-ROM is disabled, delete all its variables. */
if (zip_drives[c].bus_type == ZIP_BUS_DISABLED) {
sprintf(temp, "zip_%02i_host_drive", c+1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_parameters", c+1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_ide_channel", c+1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_scsi_location", c+1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_image_path", c+1);
config_delete_var(cat, temp);
}
sprintf(temp, "zip_%02i_iso_path", c+1);
config_delete_var(cat, temp); config_delete_var(cat, temp);
} }
} }
/* Save "Multimedia Devices" section. */
/* Save "Other Removable Devices" section. */
static void static void
save_removable(const config_t *cfg, const char *cat) save_multimedia(const config_t* cfg, const char* cat)
{ {
char temp[512], tmp2[512]; char temp[512], tmp2[512];
int c; int c;
for (c = 0; c < CDROM_NUM; c++) { for (c = 0; c < CDROM_NUM; c++) {
sprintf(temp, "cdrom_%02i_host_drive", c+1); sprintf(temp, "cdrom_%02i_host_drive", c + 1);
if ((cdrom[c].bus_type == 0) || if ((cdrom[c].bus_type == 0) ||
(cdrom[c].host_drive < 'A') || ((cdrom[c].host_drive > 'Z') && (cdrom[c].host_drive != 200))) { (cdrom[c].host_drive < 'A') || ((cdrom[c].host_drive > 'Z') && (cdrom[c].host_drive != 200))) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
config_set_int(cat, temp, cdrom[c].host_drive); else {
config_set_int(cat, temp, cdrom[c].host_drive);
} }
sprintf(temp, "cdrom_%02i_speed", c+1); sprintf(temp, "cdrom_%02i_speed", c + 1);
if ((cdrom[c].bus_type == 0) || if ((cdrom[c].bus_type == 0) ||
(cdrom_speeds[cdrom[c].speed_idx].speed == cdrom_speed_idx(CDROM_SPEED_DEFAULT))) { (cdrom_speeds[cdrom[c].speed_idx].speed == cdrom_speed_idx(CDROM_SPEED_DEFAULT))) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
config_set_int(cat, temp, cdrom[c].speed_idx); else {
config_set_int(cat, temp, cdrom[c].speed_idx);
} }
sprintf(temp, "cdrom_%02i_parameters", c+1); sprintf(temp, "cdrom_%02i_parameters", c + 1);
if (cdrom[c].bus_type == 0) { if (cdrom[c].bus_type == 0) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
sprintf(tmp2, "%u, %s", cdrom[c].sound_on, else {
cdrom_bus_to_string(cdrom[c].bus_type)); sprintf(tmp2, "%u, %s", cdrom[c].sound_on,
config_set_string(cat, temp, tmp2); cdrom_bus_to_string(cdrom[c].bus_type));
config_set_string(cat, temp, tmp2);
} }
sprintf(temp, "cdrom_%02i_ide_channel", c+1); sprintf(temp, "cdrom_%02i_ide_channel", c + 1);
if (cdrom[c].bus_type != CDROM_BUS_ATAPI) { if (cdrom[c].bus_type != CDROM_BUS_ATAPI) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
sprintf(tmp2, "%01u:%01u", cdrom[c].bus_id.ide_channel>>1, else {
cdrom[c].bus_id.ide_channel & 1); sprintf(tmp2, "%01u:%01u", cdrom[c].bus_id.ide_channel >> 1,
config_set_string(cat, temp, tmp2); cdrom[c].bus_id.ide_channel & 1);
config_set_string(cat, temp, tmp2);
} }
sprintf(temp, "cdrom_%02i_scsi_location", c + 1); sprintf(temp, "cdrom_%02i_scsi_location", c + 1);
if (cdrom[c].bus_type != CDROM_BUS_SCSI) { if (cdrom[c].bus_type != CDROM_BUS_SCSI) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
sprintf(tmp2, "%02u:%02u", else {
cdrom[c].bus_id.scsi.id, cdrom[c].bus_id.scsi.lun); sprintf(tmp2, "%02u:%02u",
config_set_string(cat, temp, tmp2); cdrom[c].bus_id.scsi.id, cdrom[c].bus_id.scsi.lun);
config_set_string(cat, temp, tmp2);
} }
sprintf(temp, "cdrom_%02i_image_path", c + 1); sprintf(temp, "cdrom_%02i_image_path", c + 1);
if ((cdrom[c].bus_type == 0) || if ((cdrom[c].bus_type == 0) ||
(wcslen(cdrom[c].image_path) == 0)) { (wcslen(cdrom[c].image_path) == 0)) {
config_delete_var(cat, temp); config_delete_var(cat, temp);
} else { }
config_set_wstring(cat, temp, cdrom[c].image_path); else {
config_set_wstring(cat, temp, cdrom[c].image_path);
} }
} }
}
/* Load "IOMEGA Devices" section. */
//FIXME: stuff should be loaded into config_t !
static void
load_iomega(config_t* cfg, const char* cat)
{
char temp[512], tmp2[512], * p;
char s[512];
unsigned int board = 0, dev = 0;
wchar_t* wp;
int c;
for (c = 0; c < ZIP_NUM; c++) {
sprintf(temp, "zip_%02i_parameters", c + 1);
p = config_get_string(cat, temp, "0, none");
sscanf(p, "%01u, %s", (unsigned*)&zip_drives[c].is_250, s);
zip_drives[c].bus_type = zip_string_to_bus(s);
/* Default values, needed for proper operation of the Settings dialog. */
zip_drives[c].bus_id.ide_channel = zip_drives[c].bus_id.scsi.id = c + 2;
sprintf(temp, "zip_%02i_ide_channel", c + 1);
if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) {
sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1);
p = config_get_string(cat, temp, tmp2);
sscanf(p, "%01u:%01u", &board, &dev);
board &= 3;
dev &= 1;
zip_drives[c].bus_id.ide_channel = (board << 1) + dev;
if (zip_drives[c].bus_id.ide_channel > 7)
zip_drives[c].bus_id.ide_channel = 7;
}
else {
sprintf(temp, "zip_%02i_scsi_location", c + 1);
if (zip_drives[c].bus_type == ZIP_BUS_SCSI) {
sprintf(tmp2, "%02u:%02u", c + 2, 0);
p = config_get_string(cat, temp, tmp2);
sscanf(p, "%02u:%02u",
(unsigned*)&zip_drives[c].bus_id.scsi.id,
(unsigned*)&zip_drives[c].bus_id.scsi.lun);
if (zip_drives[c].bus_id.scsi.id > 15)
zip_drives[c].bus_id.scsi.id = 15;
if (zip_drives[c].bus_id.scsi.lun > 7)
zip_drives[c].bus_id.scsi.lun = 7;
}
else {
config_delete_var(cat, temp);
}
}
sprintf(temp, "zip_%02i_image_path", c + 1);
wp = config_get_wstring(cat, temp, L"");
/* Try to make relative, and copy to destination. */
pc_path(zip_drives[c].image_path, sizeof_w(zip_drives[c].image_path), wp);
/* If the ZIP is disabled, delete all its variables. */
if (zip_drives[c].bus_type == ZIP_BUS_DISABLED) {
sprintf(temp, "zip_%02i_host_drive", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_parameters", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_ide_channel", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_scsi_location", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "zip_%02i_image_path", c + 1);
config_delete_var(cat, temp);
}
sprintf(temp, "zip_%02i_iso_path", c + 1);
config_delete_var(cat, temp);
}
}
/* Save "IOMEGA Devices" section. */
static void
save_iomega(const config_t* cfg, const char* cat)
{
char temp[512], tmp2[512];
int c;
for (c = 0; c < ZIP_NUM; c++) { for (c = 0; c < ZIP_NUM; c++) {
sprintf(temp, "zip_%02i_parameters", c+1); sprintf(temp, "zip_%02i_parameters", c+1);
@@ -1546,7 +1576,8 @@ static const struct {
{ "Other peripherals",load_other, save_other }, { "Other peripherals",load_other, save_other },
{ "Hard disks", load_disks, save_disks }, { "Hard disks", load_disks, save_disks },
{ "Floppy drives", load_floppy, save_floppy }, { "Floppy drives", load_floppy, save_floppy },
{ "Other removable devices",load_removable, save_removable }, { "CD/DVD devices",load_multimedia, save_multimedia },
{ "IOMEGA devices",load_iomega, save_iomega },
{ NULL, NULL, NULL } { NULL, NULL, NULL }
}; };