@m100/cli 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +5 -0
- package/README.md +5 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +394 -0
- package/dist/main.js.map +1 -0
- package/package.json +24 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright (c) 2025 George M. Rimakis
|
|
2
|
+
|
|
3
|
+
All rights reserved. You may not copy, modify, merge, publish, distribute, sublicense, or sell copies of this software or associated assets unless you have received express written permission from the copyright holder.
|
|
4
|
+
|
|
5
|
+
This software is provided "as-is" without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.
|
package/README.md
ADDED
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { tokenizeDoTextToBaBytes, detokenizeBaToText, removeComments, squashBasicCode, renumberProgram, packProgram, TokenizeError } from '@m100/core';
|
|
6
|
+
/**
|
|
7
|
+
* TRS-80 Model 100 BASIC CLI Tool
|
|
8
|
+
* Headless tools for BASIC program transformation and tokenization.
|
|
9
|
+
*/
|
|
10
|
+
function printUsage() {
|
|
11
|
+
console.log(`
|
|
12
|
+
TRS-80 Model 100 BASIC CLI Tool
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
m100 <command> [input] [options]
|
|
16
|
+
|
|
17
|
+
Commands:
|
|
18
|
+
tokenize [input] Convert .DO to tokenized .BA format
|
|
19
|
+
detokenize [input] Convert .BA to text .DO format
|
|
20
|
+
remove-comments [input] Remove REM and apostrophe comments
|
|
21
|
+
squash [input] Remove unnecessary whitespace
|
|
22
|
+
renumber [input] Renumber program lines
|
|
23
|
+
pack [input] Merge lines together using colons
|
|
24
|
+
|
|
25
|
+
Options:
|
|
26
|
+
--out <file> Output file path
|
|
27
|
+
--base <hex-address> Base memory address (tokenize only, default: 8001)
|
|
28
|
+
--start <number> Starting line number (renumber only, default: 10)
|
|
29
|
+
--increment <number> Line number increment (renumber only, default: 10)
|
|
30
|
+
--max <number> Maximum line length (pack only, default: 255)
|
|
31
|
+
|
|
32
|
+
Input/Output:
|
|
33
|
+
- If [input] provided: read from file
|
|
34
|
+
- If [input] omitted: read from stdin
|
|
35
|
+
- If --out provided: write to file
|
|
36
|
+
- If --out omitted: write to stdout
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
m100 tokenize program.DO --out program.BA
|
|
40
|
+
m100 detokenize program.BA --out program.DO
|
|
41
|
+
m100 tokenize program.DO --out build/program.BA --base A001
|
|
42
|
+
m100 remove-comments program.DO --out clean.DO
|
|
43
|
+
m100 squash program.DO --out compact.DO
|
|
44
|
+
m100 renumber program.DO --start 100 --increment 10 --out renumbered.DO
|
|
45
|
+
cat program.DO | m100 remove-comments > clean.DO
|
|
46
|
+
cat program.DO | m100 squash | m100 remove-comments | m100 tokenize > program.BA
|
|
47
|
+
cat program.DO | m100 renumber --start 10 --increment 5 > renumbered.DO
|
|
48
|
+
m100 detokenize program.BA | m100 squash > optimized.DO
|
|
49
|
+
`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read input from file or stdin.
|
|
53
|
+
*/
|
|
54
|
+
async function readInput(filePath) {
|
|
55
|
+
if (filePath && filePath !== '/dev/stdin') {
|
|
56
|
+
if (!existsSync(filePath)) {
|
|
57
|
+
throw new Error(`File not found: ${filePath}`);
|
|
58
|
+
}
|
|
59
|
+
return await readFile(filePath, 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
// Read from stdin
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
let data = '';
|
|
64
|
+
process.stdin.setEncoding('utf-8');
|
|
65
|
+
process.stdin.on('data', (chunk) => data += chunk);
|
|
66
|
+
process.stdin.on('end', () => resolve(data));
|
|
67
|
+
process.stdin.on('error', reject);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Read binary input from file or stdin.
|
|
72
|
+
*/
|
|
73
|
+
async function readBinaryInput(filePath) {
|
|
74
|
+
if (filePath && filePath !== '/dev/stdin') {
|
|
75
|
+
if (!existsSync(filePath)) {
|
|
76
|
+
throw new Error(`File not found: ${filePath}`);
|
|
77
|
+
}
|
|
78
|
+
const buffer = await readFile(filePath);
|
|
79
|
+
return new Uint8Array(buffer);
|
|
80
|
+
}
|
|
81
|
+
// Read from stdin
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const chunks = [];
|
|
84
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
85
|
+
process.stdin.on('end', () => resolve(new Uint8Array(Buffer.concat(chunks))));
|
|
86
|
+
process.stdin.on('error', reject);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Write output to file or stdout.
|
|
91
|
+
*/
|
|
92
|
+
async function writeOutput(content, outPath) {
|
|
93
|
+
if (outPath) {
|
|
94
|
+
if (typeof content === 'string') {
|
|
95
|
+
await writeFile(outPath, content, 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
await writeFile(outPath, content);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Write to stdout
|
|
103
|
+
if (typeof content === 'string') {
|
|
104
|
+
process.stdout.write(content);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
process.stdout.write(Buffer.from(content));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Handle tokenize command.
|
|
113
|
+
*/
|
|
114
|
+
async function handleTokenize(args) {
|
|
115
|
+
let inputFile;
|
|
116
|
+
let outPath;
|
|
117
|
+
let baseAddress = 0x8001;
|
|
118
|
+
// Parse arguments
|
|
119
|
+
for (let i = 0; i < args.length; i++) {
|
|
120
|
+
const arg = args[i];
|
|
121
|
+
if (arg === '--out') {
|
|
122
|
+
if (i + 1 >= args.length) {
|
|
123
|
+
throw new Error('--out requires a file path');
|
|
124
|
+
}
|
|
125
|
+
outPath = args[++i];
|
|
126
|
+
}
|
|
127
|
+
else if (arg === '--base') {
|
|
128
|
+
if (i + 1 >= args.length) {
|
|
129
|
+
throw new Error('--base requires a hex address');
|
|
130
|
+
}
|
|
131
|
+
const baseHex = args[++i];
|
|
132
|
+
if (!/^[0-9A-Fa-f]+$/.test(baseHex)) {
|
|
133
|
+
throw new Error(`Invalid hex address '${baseHex}'. Use format: 8001 or A001`);
|
|
134
|
+
}
|
|
135
|
+
baseAddress = parseInt(baseHex, 16);
|
|
136
|
+
}
|
|
137
|
+
else if (!arg.startsWith('--')) {
|
|
138
|
+
inputFile = arg;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Read input (file or stdin)
|
|
142
|
+
const doText = await readInput(inputFile);
|
|
143
|
+
// Tokenize to binary
|
|
144
|
+
const baBytes = tokenizeDoTextToBaBytes(doText, baseAddress);
|
|
145
|
+
// Write output (file or stdout)
|
|
146
|
+
await writeOutput(baBytes, outPath);
|
|
147
|
+
// If writing to file, show confirmation
|
|
148
|
+
if (outPath) {
|
|
149
|
+
console.log(`OK: wrote ${outPath} (${baBytes.length} bytes)`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Handle detokenize command.
|
|
154
|
+
*/
|
|
155
|
+
async function handleDetokenize(args) {
|
|
156
|
+
let inputFile;
|
|
157
|
+
let outPath;
|
|
158
|
+
// Parse arguments
|
|
159
|
+
for (let i = 0; i < args.length; i++) {
|
|
160
|
+
const arg = args[i];
|
|
161
|
+
if (arg === '--out') {
|
|
162
|
+
if (i + 1 >= args.length) {
|
|
163
|
+
throw new Error('--out requires a file path');
|
|
164
|
+
}
|
|
165
|
+
outPath = args[++i];
|
|
166
|
+
}
|
|
167
|
+
else if (!arg.startsWith('--')) {
|
|
168
|
+
inputFile = arg;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Read binary input (file or stdin)
|
|
172
|
+
const baBytes = await readBinaryInput(inputFile);
|
|
173
|
+
// Detokenize to text
|
|
174
|
+
const doText = detokenizeBaToText(baBytes);
|
|
175
|
+
// Write output (file or stdout)
|
|
176
|
+
await writeOutput(doText, outPath);
|
|
177
|
+
// If writing to file, show confirmation
|
|
178
|
+
if (outPath) {
|
|
179
|
+
const lines = doText.split('\n').length;
|
|
180
|
+
console.log(`OK: wrote ${outPath} (${lines} lines)`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Handle remove-comments command.
|
|
185
|
+
*/
|
|
186
|
+
async function handleRemoveComments(args) {
|
|
187
|
+
let inputFile;
|
|
188
|
+
let outPath;
|
|
189
|
+
// Parse arguments
|
|
190
|
+
for (let i = 0; i < args.length; i++) {
|
|
191
|
+
const arg = args[i];
|
|
192
|
+
if (arg === '--out') {
|
|
193
|
+
if (i + 1 >= args.length) {
|
|
194
|
+
throw new Error('--out requires a file path');
|
|
195
|
+
}
|
|
196
|
+
outPath = args[++i];
|
|
197
|
+
}
|
|
198
|
+
else if (!arg.startsWith('--')) {
|
|
199
|
+
inputFile = arg;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Read input (file or stdin)
|
|
203
|
+
const input = await readInput(inputFile);
|
|
204
|
+
// Transform
|
|
205
|
+
const result = removeComments(input);
|
|
206
|
+
// Write output (file or stdout)
|
|
207
|
+
await writeOutput(result, outPath);
|
|
208
|
+
// If writing to file, show confirmation
|
|
209
|
+
if (outPath) {
|
|
210
|
+
const lineCount = result.split(/\r?\n/).filter((l) => l.trim()).length;
|
|
211
|
+
console.log(`OK: wrote ${outPath} (${lineCount} lines)`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Handle squash command.
|
|
216
|
+
*/
|
|
217
|
+
async function handleSquash(args) {
|
|
218
|
+
let inputFile;
|
|
219
|
+
let outPath;
|
|
220
|
+
// Parse arguments
|
|
221
|
+
for (let i = 0; i < args.length; i++) {
|
|
222
|
+
const arg = args[i];
|
|
223
|
+
if (arg === '--out') {
|
|
224
|
+
if (i + 1 >= args.length) {
|
|
225
|
+
throw new Error('--out requires a file path');
|
|
226
|
+
}
|
|
227
|
+
outPath = args[++i];
|
|
228
|
+
}
|
|
229
|
+
else if (!arg.startsWith('--')) {
|
|
230
|
+
inputFile = arg;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Read input (file or stdin)
|
|
234
|
+
const input = await readInput(inputFile);
|
|
235
|
+
// Transform
|
|
236
|
+
const result = squashBasicCode(input);
|
|
237
|
+
// Write output (file or stdout)
|
|
238
|
+
await writeOutput(result, outPath);
|
|
239
|
+
// If writing to file, show confirmation
|
|
240
|
+
if (outPath) {
|
|
241
|
+
const lineCount = result.split(/\r?\n/).filter((l) => l.trim()).length;
|
|
242
|
+
console.log(`OK: wrote ${outPath} (${lineCount} lines)`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Handle renumber command.
|
|
247
|
+
*/
|
|
248
|
+
async function handleRenumber(args) {
|
|
249
|
+
let inputFile;
|
|
250
|
+
let outPath;
|
|
251
|
+
let start = 10;
|
|
252
|
+
let increment = 10;
|
|
253
|
+
// Parse arguments
|
|
254
|
+
for (let i = 0; i < args.length; i++) {
|
|
255
|
+
const arg = args[i];
|
|
256
|
+
if (arg === '--out') {
|
|
257
|
+
if (i + 1 >= args.length) {
|
|
258
|
+
throw new Error('--out requires a file path');
|
|
259
|
+
}
|
|
260
|
+
outPath = args[++i];
|
|
261
|
+
}
|
|
262
|
+
else if (arg === '--start') {
|
|
263
|
+
if (i + 1 >= args.length) {
|
|
264
|
+
throw new Error('--start requires a number');
|
|
265
|
+
}
|
|
266
|
+
start = parseInt(args[++i], 10);
|
|
267
|
+
if (isNaN(start) || start < 0 || start > 65529) {
|
|
268
|
+
throw new Error('--start must be a number between 0 and 65529');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (arg === '--increment') {
|
|
272
|
+
if (i + 1 >= args.length) {
|
|
273
|
+
throw new Error('--increment requires a number');
|
|
274
|
+
}
|
|
275
|
+
increment = parseInt(args[++i], 10);
|
|
276
|
+
if (isNaN(increment) || increment <= 0) {
|
|
277
|
+
throw new Error('--increment must be a positive number');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
else if (!arg.startsWith('--')) {
|
|
281
|
+
inputFile = arg;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Read input (file or stdin)
|
|
285
|
+
const input = await readInput(inputFile);
|
|
286
|
+
// Transform
|
|
287
|
+
const result = renumberProgram(input, { start, increment });
|
|
288
|
+
// Write output (file or stdout)
|
|
289
|
+
await writeOutput(result, outPath);
|
|
290
|
+
// If writing to file, show confirmation
|
|
291
|
+
if (outPath) {
|
|
292
|
+
const lineCount = result.split(/\r?\n/).filter((l) => l.trim()).length;
|
|
293
|
+
console.log(`OK: wrote ${outPath} (${lineCount} lines)`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Handle pack command.
|
|
298
|
+
*/
|
|
299
|
+
async function handlePack(args) {
|
|
300
|
+
let inputFile;
|
|
301
|
+
let outPath;
|
|
302
|
+
let maxLength = 255;
|
|
303
|
+
// Parse arguments
|
|
304
|
+
for (let i = 0; i < args.length; i++) {
|
|
305
|
+
const arg = args[i];
|
|
306
|
+
if (arg === '--out') {
|
|
307
|
+
if (i + 1 >= args.length) {
|
|
308
|
+
throw new Error('--out requires a file path');
|
|
309
|
+
}
|
|
310
|
+
outPath = args[++i];
|
|
311
|
+
}
|
|
312
|
+
else if (arg === '--max') {
|
|
313
|
+
if (i + 1 >= args.length) {
|
|
314
|
+
throw new Error('--max requires a number');
|
|
315
|
+
}
|
|
316
|
+
maxLength = parseInt(args[++i], 10);
|
|
317
|
+
if (isNaN(maxLength) || maxLength < 10 || maxLength > 255) {
|
|
318
|
+
throw new Error('--max must be a number between 10 and 255');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else if (!arg.startsWith('--')) {
|
|
322
|
+
inputFile = arg;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// Read input (file or stdin)
|
|
326
|
+
const input = await readInput(inputFile);
|
|
327
|
+
// Transform
|
|
328
|
+
const result = packProgram(input, { maxLength });
|
|
329
|
+
// Write output (file or stdout)
|
|
330
|
+
await writeOutput(result, outPath);
|
|
331
|
+
// If writing to file, show confirmation
|
|
332
|
+
if (outPath) {
|
|
333
|
+
const lineCount = result.split(/\r?\n/).filter((l) => l.trim()).length;
|
|
334
|
+
console.log(`OK: wrote ${outPath} (${lineCount} lines)`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async function main() {
|
|
338
|
+
const argv = process.argv.slice(2); // Remove 'node' and script path
|
|
339
|
+
if (argv.length === 0) {
|
|
340
|
+
printUsage();
|
|
341
|
+
process.exit(2);
|
|
342
|
+
}
|
|
343
|
+
const command = argv[0];
|
|
344
|
+
const commandArgs = argv.slice(1);
|
|
345
|
+
try {
|
|
346
|
+
switch (command) {
|
|
347
|
+
case 'tokenize':
|
|
348
|
+
await handleTokenize(commandArgs);
|
|
349
|
+
break;
|
|
350
|
+
case 'detokenize':
|
|
351
|
+
await handleDetokenize(commandArgs);
|
|
352
|
+
break;
|
|
353
|
+
case 'remove-comments':
|
|
354
|
+
await handleRemoveComments(commandArgs);
|
|
355
|
+
break;
|
|
356
|
+
case 'squash':
|
|
357
|
+
await handleSquash(commandArgs);
|
|
358
|
+
break;
|
|
359
|
+
case 'renumber':
|
|
360
|
+
await handleRenumber(commandArgs);
|
|
361
|
+
break;
|
|
362
|
+
case 'pack':
|
|
363
|
+
await handlePack(commandArgs);
|
|
364
|
+
break;
|
|
365
|
+
default:
|
|
366
|
+
console.error(`Error: Unknown command '${command}'`);
|
|
367
|
+
console.error(`Valid commands: tokenize, detokenize, remove-comments, squash, renumber, pack`);
|
|
368
|
+
printUsage();
|
|
369
|
+
process.exit(2);
|
|
370
|
+
}
|
|
371
|
+
process.exit(0);
|
|
372
|
+
}
|
|
373
|
+
catch (err) {
|
|
374
|
+
// Error handling
|
|
375
|
+
if (err instanceof TokenizeError) {
|
|
376
|
+
console.error(err.formatForCLI());
|
|
377
|
+
}
|
|
378
|
+
else if (err instanceof Error) {
|
|
379
|
+
console.error(`Error: ${err.message}`);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
console.error(`Error: ${String(err)}`);
|
|
383
|
+
}
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
const entryHref = pathToFileURL(process.argv[1] ?? '').href;
|
|
388
|
+
if (import.meta.url === entryHref) {
|
|
389
|
+
main().catch((err) => {
|
|
390
|
+
console.error('Unexpected error:', err);
|
|
391
|
+
process.exit(1);
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@m100/cli",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"m100": "./dist/main.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@m100/core": "^0.8.0"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json",
|
|
19
|
+
"test": "node --test"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^20.19.27"
|
|
23
|
+
}
|
|
24
|
+
}
|