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

72 lines
1.7 KiB

6 years ago
#!/usr/bin/env node
var program = require('commander');
var Bunzip = require('../');
var fs = require('fs');
program
.version(Bunzip.version)
.usage('[infile]')
.option('-m, --multistream',
'Read a multistream bzip2 file');
program.on('--help', function() {
console.log(' If <infile> is omitted, reads from stdin.');
});
program.parse(process.argv);
var makeInStream = function(in_fd) {
var stat = fs.fstatSync(in_fd);
var stream = {
buffer: new Buffer(4096),
totalPos: 0,
pos: 0,
end: 0,
_fillBuffer: function() {
this.end = fs.readSync(in_fd, this.buffer, 0, this.buffer.length);
this.pos = 0;
},
readByte: function() {
if (this.pos >= this.end) { this._fillBuffer(); }
if (this.pos < this.end) {
this.totalPos++;
return this.buffer[this.pos++];
}
return -1;
},
read: function(buffer, bufOffset, length) {
if (this.pos >= this.end) { this._fillBuffer(); }
var bytesRead = 0;
while (bytesRead < length && this.pos < this.end) {
buffer[bufOffset++] = this.buffer[this.pos++];
bytesRead++;
}
this.totalPos += bytesRead;
return bytesRead;
},
eof: function() {
if (this.pos >= this.end) { this._fillBuffer(); }
return !(this.pos < this.end);
}
};
if (stat.size) {
stream.size = stat.size;
}
return stream;
};
var in_fd = 0, close_in = function(){};
if (program.args.length > 0) {
in_fd = fs.openSync(program.args.shift(), 'r');
close_in = function() { fs.closeSync(in_fd); };
}
var inStream = makeInStream(in_fd);
var report = function(position, blocksize) {
console.log(position+'\t'+blocksize);
};
Bunzip.table(inStream, report, program.multistream);
close_in();
return 0;