You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
'use strict';
var program = require('commander');
var lzma = require('../');
var fs = require('fs');
var path = require('path');
var argv = process.argv.slice(2);
var positionalArgs = [];
var level = undefined;
var threads = undefined;
var compress = true;
for (var i = 0; i < argv.length; ++i) {
if (argv[i][0] !== '-') {
positionalArgs.push(argv[i]);
continue;
}
if (!isNaN(+argv[i][1])) {
level = +argv[i][1];
continue;
}
switch (argv[i]) {
case '-d':
case '--decompress':
compress = false;
break;
case '-z':
case '--compress':
compress = true;
break;
case '-t':
case '--threads':
if (!isNaN(+argv[i+1]))
threads = +argv[++i];
else
threads = 0;
break;
default:
case '-h':
case '--help':
usage();
return;
}
}
function usage() {
process.stdout.write('Usage: \n' +
' ' + path.basename(process.argv[1]) +
' [-d|-z] [-t num] [-1|...|-9] [infile] [outfile]\n' +
'\n' +
' -d, --decompress Decompress infile to outfile\n' +
' -z, --compress Compress infile to outfile\n' +
' -t n, --threads n Use n threads for compressing\n' +
' -1, ..., -9 Specifiy compression level\n' +
' -h, --help Display this text\n' +
'\n' +
' <infile> defaults to stdin and <outfile> defaults to stdout.\n');
return;
}
var input = process.stdin, output = process.stdout;
if (positionalArgs.length > 0) {
input = fs.createReadStream(positionalArgs.shift());
}
if (positionalArgs.length > 0) {
output = fs.createWriteStream(positionalArgs.shift());
}
var opts = {
preset: level || lzma.PRESET_DEFAULT,
threads: threads,
};
var encoder = lzma.createStream(compress ? 'easyEncoder' : 'autoDecoder', opts);
input.pipe(encoder).pipe(output);