Skip to content

Commit 7ba3e90

Browse files
committed
Create retroload-convert CLI script
1 parent 7db2c68 commit 7ba3e90

File tree

7 files changed

+77
-9
lines changed

7 files changed

+77
-9
lines changed

retroload/bin/retroload-convert.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env node
2+
3+
import('../dist/esm/retroload-convert.js');
4+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env node
2+
3+
import('../dist/esm/retroload-tokenize.js');
4+

retroload/bin/retroload-tokenizer.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

retroload/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@
3838
},
3939
"bin": {
4040
"retroload": "./bin/retroload.js",
41-
"retroload-tokenizer": "./bin/retroload-tokenizer.js",
42-
"retroload-decode": "./bin/retroload-decode.js"
41+
"retroload-convert": "./bin/retroload-convert.js",
42+
"retroload-decode": "./bin/retroload-decode.js",
43+
"retroload-tokenize": "./bin/retroload-tokenize.js"
4344
},
4445
"dependencies": {
4546
"commander": "^11.1.0",

retroload/src/retroload-convert.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env node
2+
3+
import {ConverterManager, Exception, Logger, version as libVersion} from 'retroload-lib';
4+
import {Command} from 'commander';
5+
import {version as cliVersion} from './version.js';
6+
import {readFile, writeFile} from './Utils.js';
7+
8+
main()
9+
.catch((err) => {
10+
Logger.error(err as string);
11+
});
12+
13+
async function main() {
14+
// const formatNames = AdapterManager.getAllAdapters().map((a) => a.internalName);
15+
// formatNames.sort();
16+
const program = (new Command())
17+
.name('retroload-convert')
18+
.description('Convert raw data into tape archive formats. (EXPERIMENTAL!)')
19+
.argument('infile', 'Path to file to convert')
20+
.allowExcessArguments(false)
21+
.option('-o <outfile>', 'Path to file to write')
22+
.option('-f <format>', 'Name of format to create')
23+
.option('-l, --loglevel <loglevel>', 'Verbosity of log output', '1')
24+
.version(`retroload: ${cliVersion}\nretroload-lib: ${libVersion}`)
25+
.showHelpAfterError();
26+
// Options defined in adapters/encoders
27+
28+
/*
29+
const allOptions = AdapterManager.getAllOptions();
30+
allOptions.sort((a, b) => a.common && !b.common ? -1 : 0);
31+
for (const option of allOptions) {
32+
program.addOption(new Option(getCommanderFlagsString(option), option.description).hideHelp());
33+
}
34+
*/
35+
program.parse();
36+
37+
const options = program.opts();
38+
const infile = program.args[0];
39+
const outfile = options['o'] as string; // TODO: fix type stuff; let converter propose new filename ((input.bin).cas)?
40+
Logger.setVerbosity(parseInt(typeof options['loglevel'] === 'string' ? options['loglevel'] : '1', 10));
41+
const inputBa = readFile(infile);
42+
const format: string = options['f'] as string; // TODO: fix type stuff
43+
44+
Logger.debug(`Processing ${infile}...`);
45+
46+
try {
47+
const outputBa = ConverterManager.convert(inputBa, format, options);
48+
writeFile(outfile, outputBa);
49+
} catch (e) {
50+
if (e instanceof Exception.UsageError) {
51+
Logger.error(e.message);
52+
process.exit(1);
53+
} else {
54+
throw e; // show full stack trace for unexpected errors
55+
}
56+
}
57+
}
58+
59+
/*
60+
function getCommanderFlagsString(optionDefinition: PublicOptionDefinition) {
61+
return optionDefinition.type !== 'text' || optionDefinition.argument === undefined ? `--${optionDefinition.name}` : `--${optionDefinition.name} <${optionDefinition.argument}>`;
62+
}
63+
*/

retroload/src/retroload-decode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ async function main() {
1919
// - visualize WAVE samples of section around error as ASCII graph when --on-error was set to 'stop'
2020
const program = (new Command())
2121
.name('retroload-decode')
22-
.description('Decode WAVE files of historical computers.')
22+
.description('Decode WAVE files of historical computers. (EXPERIMENTAL)')
2323
.argument('<infile>', 'Path to WAVE file to decode')
2424
.allowExcessArguments(false)
2525
.option('-o <outpath>', 'Prefix (filename or complete path) for files to write', './')
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import {BasicTokenizers} from 'retroload-lib';
66

77
function main() {
88
const program = (new Command())
9-
.name('retroload-tokenizer')
10-
.description('Convert plain text BASIC files into tokenized BASIC files for loading.')
9+
.name('retroload-tokenize')
10+
.description('Convert plain text BASIC files into tokenized BASIC files for loading. (EXPERIMENTAL)')
1111
.argument('<infile>', 'Path to source file to tokenize')
1212
.option('-d, --dialect <basic dialect>', 'BASIC dialect to use')
1313
.option('-o, --outfile <output file>', 'Where to write to binary output to. By default the input filename with a dialect specific extension is used as output filename.');

0 commit comments

Comments
 (0)