mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-19 03:33:56 +00:00
119 lines
2.4 KiB
TypeScript
119 lines
2.4 KiB
TypeScript
import { parse } from "shell-quote";
|
|
|
|
export interface Settings {
|
|
logging: "verbose" | "silent" | "concise" | string;
|
|
bufferStdout: boolean;
|
|
persist: boolean;
|
|
execAccess: boolean;
|
|
foreignAccess: boolean;
|
|
wasm64: boolean;
|
|
instructionSummary: boolean;
|
|
ignoredFunctions: string[];
|
|
interestingModules: string[];
|
|
commandLine: string;
|
|
}
|
|
|
|
export interface TranslatedSettings {
|
|
emulatorOptions: string[];
|
|
applicationOptions: string[];
|
|
}
|
|
|
|
export function createDefaultSettings(): Settings {
|
|
return {
|
|
logging: "regular",
|
|
bufferStdout: true,
|
|
persist: false,
|
|
execAccess: false,
|
|
foreignAccess: false,
|
|
wasm64: false,
|
|
instructionSummary: false,
|
|
ignoredFunctions: [],
|
|
interestingModules: [],
|
|
commandLine: "",
|
|
};
|
|
}
|
|
|
|
export function loadSettings(): Settings {
|
|
const defaultSettings = createDefaultSettings();
|
|
|
|
const settingsStr = localStorage.getItem("settings");
|
|
if (!settingsStr) {
|
|
return defaultSettings;
|
|
}
|
|
|
|
try {
|
|
const userSettings = JSON.parse(settingsStr);
|
|
const keys = Object.keys(defaultSettings);
|
|
|
|
keys.forEach((k) => {
|
|
if (k in userSettings) {
|
|
(defaultSettings as any)[k] = userSettings[k];
|
|
}
|
|
});
|
|
} catch (e) {}
|
|
|
|
return defaultSettings;
|
|
}
|
|
|
|
export function saveSettings(settings: Settings) {
|
|
localStorage.setItem("settings", JSON.stringify(settings));
|
|
}
|
|
|
|
export function translateSettings(settings: Settings): TranslatedSettings {
|
|
const switches: string[] = [];
|
|
const options: string[] = [];
|
|
|
|
switch (settings.logging) {
|
|
case "verbose":
|
|
switches.push("-v");
|
|
break;
|
|
case "silent":
|
|
switches.push("-s");
|
|
break;
|
|
case "concise":
|
|
switches.push("-c");
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (settings.bufferStdout) {
|
|
switches.push("-b");
|
|
}
|
|
|
|
if (settings.execAccess) {
|
|
switches.push("-x");
|
|
}
|
|
|
|
if (settings.foreignAccess) {
|
|
switches.push("-f");
|
|
}
|
|
|
|
if (settings.instructionSummary) {
|
|
switches.push("-is");
|
|
}
|
|
|
|
settings.ignoredFunctions.forEach((f) => {
|
|
switches.push("-i");
|
|
switches.push(f);
|
|
});
|
|
|
|
settings.interestingModules.forEach((m) => {
|
|
switches.push("-m");
|
|
switches.push(m);
|
|
});
|
|
|
|
try {
|
|
const argv = parse(settings.commandLine) as string[];
|
|
options.push(...argv);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
|
|
return {
|
|
applicationOptions: options,
|
|
emulatorOptions: switches,
|
|
};
|
|
}
|