-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrainfuck.js
46 lines (42 loc) · 1.32 KB
/
brainfuck.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env node
'use strict';
var fs = require('fs');
var path = require('path');
var argp = require('argp');
var brainfuck = require('../lib');
var argv = argp.createParser({ once: true })
.allowUndefinedArguments()
.readPackage(__dirname + '/../package.json')
.usages(['brainfuck [options] <input_file>'])
.on('argument', function (argv, argument, ignore) {
if (argv.file) this.fail('Too many arguments.');
argv.file = argument;
ignore();
})
.on('end', function (argv) {
if (!argv.file) this.fail('An input file is required');
})
.body()
.option({ short: 'i', long: 'input', metavar: 'STRING',
description: 'STRING to read during the program execution' })
.help()
.argv();
fs.readFile(argv.file, { encoding: 'utf8' }, function (err, data) {
if (err) {
if (path.extname(argv.file) === '') {
fs.readFile(argv.file + '.bf', { encoding: 'utf8' },
function (errBf, data) {
if (errBf) {
// If <file>.bf doesn't exist, show <file>'s error
return console.error('Error: ' +
(errBf.code !== 'ENOENT' ? errBf : err).message);
}
brainfuck(data, argv.input);
});
} else {
console.error('Error: ' + err.message);
}
return;
}
brainfuck(data, argv.input);
});