Automatically copy NVR files from old machine names to the new names
This commit is contained in:
101
src/config.c
101
src/config.c
@@ -32,6 +32,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
#include <dirent.h>
|
||||||
#define HAVE_STDARG_H
|
#define HAVE_STDARG_H
|
||||||
#include <86box/86box.h>
|
#include <86box/86box.h>
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
@@ -535,71 +536,117 @@ static void
|
|||||||
load_machine(void)
|
load_machine(void)
|
||||||
{
|
{
|
||||||
char *cat = "Machine";
|
char *cat = "Machine";
|
||||||
char *p;
|
char *p, *migrate_from = NULL;
|
||||||
int c, i, speed, legacy_mfg, legacy_cpu;
|
int c, i, j, speed, legacy_mfg, legacy_cpu;
|
||||||
double multi;
|
double multi;
|
||||||
|
|
||||||
p = config_get_string(cat, "machine", NULL);
|
p = config_get_string(cat, "machine", NULL);
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
if (! strcmp(p, "8500ttc")) /* fix typo */
|
migrate_from = p;
|
||||||
|
if (! strcmp(p, "8500ttc")) /* migrate typo... */
|
||||||
machine = machine_get_machine_from_internal_name("8600ttc");
|
machine = machine_get_machine_from_internal_name("8600ttc");
|
||||||
else if (! strcmp(p, "eagle_pcspirit")) /* migrate legacy name */
|
else if (! strcmp(p, "eagle_pcspirit")) /* ...legacy names... */
|
||||||
machine = machine_get_machine_from_internal_name("pcspirit");
|
machine = machine_get_machine_from_internal_name("pcspirit");
|
||||||
else if (! strcmp(p, "multitech_pc700")) /*migrate legacy name */
|
else if (! strcmp(p, "multitech_pc700"))
|
||||||
machine = machine_get_machine_from_internal_name("pc700");
|
machine = machine_get_machine_from_internal_name("pc700");
|
||||||
else if (! strcmp(p, "ncr_pc4i")) /* migrate legacy name */
|
else if (! strcmp(p, "ncr_pc4i"))
|
||||||
machine = machine_get_machine_from_internal_name("pc4i");
|
machine = machine_get_machine_from_internal_name("pc4i");
|
||||||
else if (! strcmp(p, "olivetti_m19")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m19"))
|
||||||
machine = machine_get_machine_from_internal_name("m19");
|
machine = machine_get_machine_from_internal_name("m19");
|
||||||
else if (! strcmp(p, "open_xt")) /* migrate legacy name */
|
else if (! strcmp(p, "open_xt"))
|
||||||
machine = machine_get_machine_from_internal_name("openxt");
|
machine = machine_get_machine_from_internal_name("openxt");
|
||||||
else if (! strcmp(p, "philips_p3105")) /* migrate legacy name */
|
else if (! strcmp(p, "philips_p3105"))
|
||||||
machine = machine_get_machine_from_internal_name("p3105");
|
machine = machine_get_machine_from_internal_name("p3105");
|
||||||
else if (! strcmp(p, "philips_p3120")) /* migrate legacy name */
|
else if (! strcmp(p, "philips_p3120"))
|
||||||
machine = machine_get_machine_from_internal_name("p3120");
|
machine = machine_get_machine_from_internal_name("p3120");
|
||||||
else if (! strcmp(p, "olivetti_m24")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m24"))
|
||||||
machine = machine_get_machine_from_internal_name("m24");
|
machine = machine_get_machine_from_internal_name("m24");
|
||||||
else if (! strcmp(p, "olivetti_m240")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m240"))
|
||||||
machine = machine_get_machine_from_internal_name("m240");
|
machine = machine_get_machine_from_internal_name("m240");
|
||||||
else if (! strcmp(p, "ncr_pc8")) /* migrate legacy name */
|
else if (! strcmp(p, "ncr_pc8"))
|
||||||
machine = machine_get_machine_from_internal_name("pc8");
|
machine = machine_get_machine_from_internal_name("pc8");
|
||||||
else if (! strcmp(p, "olivetti_m290")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m290"))
|
||||||
machine = machine_get_machine_from_internal_name("m290");
|
machine = machine_get_machine_from_internal_name("m290");
|
||||||
else if (! strcmp(p, "ncr_3302")) /* migrate legacy name */
|
else if (! strcmp(p, "ncr_3302"))
|
||||||
machine = machine_get_machine_from_internal_name("3302");
|
machine = machine_get_machine_from_internal_name("3302");
|
||||||
else if (! strcmp(p, "ncr_pc916sx")) /* migrate legacy name */
|
else if (! strcmp(p, "ncr_pc916sx"))
|
||||||
machine = machine_get_machine_from_internal_name("pc916sx");
|
machine = machine_get_machine_from_internal_name("pc916sx");
|
||||||
else if (! strcmp(p, "cbm_sl386sx16")) /* migrate legacy name */
|
else if (! strcmp(p, "cbm_sl386sx16"))
|
||||||
machine = machine_get_machine_from_internal_name("cmdsl386sx16");
|
machine = machine_get_machine_from_internal_name("cmdsl386sx16");
|
||||||
else if (! strcmp(p, "olivetti_m300_08")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m300_08"))
|
||||||
machine = machine_get_machine_from_internal_name("m30008");
|
machine = machine_get_machine_from_internal_name("m30008");
|
||||||
else if (! strcmp(p, "olivetti_m300_15")) /* migrate legacy name */
|
else if (! strcmp(p, "olivetti_m300_15"))
|
||||||
machine = machine_get_machine_from_internal_name("m30015");
|
machine = machine_get_machine_from_internal_name("m30015");
|
||||||
else if (! strcmp(p, "cbm_sl386sx25")) /* migrate legacy name */
|
else if (! strcmp(p, "cbm_sl386sx25"))
|
||||||
machine = machine_get_machine_from_internal_name("cmdsl386sx25");
|
machine = machine_get_machine_from_internal_name("cmdsl386sx25");
|
||||||
else if (! strcmp(p, "president")) /* migrate removed machine */
|
else if (! strcmp(p, "president")) { /* ...and removed machines */
|
||||||
machine = machine_get_machine_from_internal_name("mb500n");
|
machine = machine_get_machine_from_internal_name("mb500n");
|
||||||
else if (! strcmp(p, "j656vxd")) /* migrate removed machine */
|
migrate_from = NULL;
|
||||||
|
} else if (! strcmp(p, "j656vxd")) {
|
||||||
machine = machine_get_machine_from_internal_name("p55va");
|
machine = machine_get_machine_from_internal_name("p55va");
|
||||||
else
|
migrate_from = NULL;
|
||||||
|
} else {
|
||||||
machine = machine_get_machine_from_internal_name(p);
|
machine = machine_get_machine_from_internal_name(p);
|
||||||
|
migrate_from = NULL;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
machine = 0;
|
machine = 0;
|
||||||
if (machine >= machine_count())
|
|
||||||
machine = machine_count() - 1;
|
|
||||||
|
|
||||||
/* This is for backwards compatibility. */
|
/* This is for backwards compatibility. */
|
||||||
p = config_get_string(cat, "model", NULL);
|
p = config_get_string(cat, "model", NULL);
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
if (! strcmp(p, "p55r2p4")) /* fix typo */
|
migrate_from = p;
|
||||||
|
if (! strcmp(p, "p55r2p4")) /* migrate typo */
|
||||||
machine = machine_get_machine_from_internal_name("p55t2p4");
|
machine = machine_get_machine_from_internal_name("p55t2p4");
|
||||||
else
|
else {
|
||||||
machine = machine_get_machine_from_internal_name(p);
|
machine = machine_get_machine_from_internal_name(p);
|
||||||
|
migrate_from = NULL;
|
||||||
|
}
|
||||||
config_delete_var(cat, "model");
|
config_delete_var(cat, "model");
|
||||||
}
|
}
|
||||||
if (machine >= machine_count())
|
if (machine >= machine_count())
|
||||||
machine = machine_count() - 1;
|
machine = machine_count() - 1;
|
||||||
|
|
||||||
|
/* Copy NVR files when migrating a machine to a new internal name. */
|
||||||
|
if (migrate_from) {
|
||||||
|
char old_fn[256];
|
||||||
|
strcpy(old_fn, migrate_from);
|
||||||
|
strcat(old_fn, ".");
|
||||||
|
c = strlen(old_fn);
|
||||||
|
char new_fn[256];
|
||||||
|
strcpy(new_fn, machines[machine].internal_name);
|
||||||
|
strcat(new_fn, ".");
|
||||||
|
i = strlen(new_fn);
|
||||||
|
|
||||||
|
/* Iterate through NVR files. */
|
||||||
|
DIR *dirp = opendir(nvr_path("."));
|
||||||
|
if (dirp) {
|
||||||
|
struct dirent *entry;
|
||||||
|
while ((entry = readdir(dirp))) {
|
||||||
|
/* Check if this file corresponds to the old name. */
|
||||||
|
if (strncmp(entry->d_name, old_fn, c))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Add extension to the new name. */
|
||||||
|
strcpy(&new_fn[i], &entry->d_name[c]);
|
||||||
|
|
||||||
|
/* Only copy if a file with the new name doesn't already exist. */
|
||||||
|
FILE *g = nvr_fopen(new_fn, "rb");
|
||||||
|
if (!g) {
|
||||||
|
FILE *f = nvr_fopen(entry->d_name, "rb");
|
||||||
|
g = nvr_fopen(new_fn, "wb");
|
||||||
|
|
||||||
|
uint8_t buf[4096];
|
||||||
|
while ((j = fread(buf, 1, sizeof(buf), f)))
|
||||||
|
fwrite(buf, 1, j, g);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
fclose(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cpu_override = config_get_int(cat, "cpu_override", 0);
|
cpu_override = config_get_int(cat, "cpu_override", 0);
|
||||||
cpu_f = NULL;
|
cpu_f = NULL;
|
||||||
p = config_get_string(cat, "cpu_family", NULL);
|
p = config_get_string(cat, "cpu_family", NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user