Save/load magneto-optical configuration.

This commit is contained in:
2020-03-28 02:39:07 +00:00
parent cea24f350f
commit f66b21b15b

View File

@@ -1560,6 +1560,138 @@ save_iomega(const config_t* cfg, const char* cat)
delete_section_if_empty(cat);
}
/* Load "Magneto-optical Devices" section. */
//FIXME: stuff should be loaded into config_t !
static void
load_mo(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 < MO_NUM; c++) {
sprintf(temp, "mo_%02i_parameters", c + 1);
p = config_get_string(cat, temp, "0, none");
sscanf(p, "%s", s);
mo_drives[c].bus_type = mo_string_to_bus(s);
/* Default values, needed for proper operation of the Settings dialog. */
mo_drives[c].bus_id.ide_channel = mo_drives[c].bus_id.scsi.id = c + 2;
sprintf(temp, "mo_%02i_ide_channel", c + 1);
if (mo_drives[c].bus_type == MO_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;
mo_drives[c].bus_id.ide_channel = (board << 1) + dev;
if (mo_drives[c].bus_id.ide_channel > 7)
mo_drives[c].bus_id.ide_channel = 7;
}
else {
sprintf(temp, "mo_%02i_scsi_location", c + 1);
if (mo_drives[c].bus_type == MO_BUS_SCSI) {
sprintf(tmp2, "%02u:%02u", c + 2, 0);
p = config_get_string(cat, temp, tmp2);
sscanf(p, "%02u:%02u",
(unsigned*)&mo_drives[c].bus_id.scsi.id,
(unsigned*)&mo_drives[c].bus_id.scsi.lun);
if (mo_drives[c].bus_id.scsi.id > 15)
mo_drives[c].bus_id.scsi.id = 15;
if (mo_drives[c].bus_id.scsi.lun > 7)
mo_drives[c].bus_id.scsi.lun = 7;
}
else {
config_delete_var(cat, temp);
}
}
sprintf(temp, "mo_%02i_image_path", c + 1);
wp = config_get_wstring(cat, temp, L"");
/* Try to make relative, and copy to destination. */
pc_path(mo_drives[c].image_path, sizeof_w(mo_drives[c].image_path), wp);
/* If the MO is disabled, delete all its variables. */
if (mo_drives[c].bus_type == MO_BUS_DISABLED) {
sprintf(temp, "mo_%02i_host_drive", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "mo_%02i_parameters", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "mo_%02i_ide_channel", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "mo_%02i_scsi_location", c + 1);
config_delete_var(cat, temp);
sprintf(temp, "mo_%02i_image_path", c + 1);
config_delete_var(cat, temp);
}
sprintf(temp, "mo_%02i_iso_path", c + 1);
config_delete_var(cat, temp);
}
}
/* Save "Magneto-optical Devices" section. */
static void
save_mo(const config_t* cfg, const char* cat)
{
char temp[512], tmp2[512];
int c;
for (c = 0; c < MO_NUM; c++) {
sprintf(temp, "mo_%02i_parameters", c + 1);
if (zip_drives[c].bus_type == 0) {
config_delete_var(cat, temp);
}
else {
sprintf(tmp2, "%s",
mo_bus_to_string(mo_drives[c].bus_type));
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "mo_%02i_ide_channel", c + 1);
if (mo_drives[c].bus_type != MO_BUS_ATAPI) {
config_delete_var(cat, temp);
}
else {
sprintf(tmp2, "%01u:%01u", mo_drives[c].bus_id.ide_channel >> 1,
mo_drives[c].bus_id.ide_channel & 1);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "mo_%02i_scsi_location", c + 1);
if (mo_drives[c].bus_type != MO_BUS_SCSI) {
config_delete_var(cat, temp);
}
else {
sprintf(tmp2, "%02u:%02u", mo_drives[c].bus_id.scsi.id,
mo_drives[c].bus_id.scsi.lun);
config_set_string(cat, temp, tmp2);
}
sprintf(temp, "mo_%02i_image_path", c + 1);
if ((mo_drives[c].bus_type == 0) ||
(wcslen(mo_drives[c].image_path) == 0)) {
config_delete_var(cat, temp);
}
else {
config_set_wstring(cat, temp, mo_drives[c].image_path);
}
}
delete_section_if_empty(cat);
}
static const struct {
const char *name;
@@ -1578,6 +1710,7 @@ static const struct {
{ "Floppy drives", load_floppy, save_floppy },
{ "CD/DVD devices",load_multimedia, save_multimedia },
{ "IOMEGA devices",load_iomega, save_iomega },
{ "Magneto-optical devices",load_mo, save_mo },
{ NULL, NULL, NULL }
};