radare2/libr/lang/p/pipe-node.js
2015-03-19 23:23:29 +01:00

59 lines
1.1 KiB
JavaScript

#!/usr/bin/node
// $ r2 -qc '#!pipe node pipe-node.js' -
var isMain = process.argv[1] == __filename;
var fs = require ("fs");
function langPipe () {
var IN = +process.env.R2PIPE_IN;
var OUT = +process.env.R2PIPE_OUT;
var r2io = {
r: fs.createReadStream (null, {fd: IN}),
w: fs.createWriteStream (null, {fd: OUT})
};
var replies = [];
r2io.cmd = function(cmd, cb) {
replies.push (cb);
r2io.w.write (cmd);
}
r2io.r.on ('data', function (foo) {
if (replies.length>0) {
var cb = replies[0];
replies = replies.slice(1);
if (cb) cb (''+foo);
}
});
r2io.repl = function () {
/* r2 repl implemented in pipe-node.js */
r2io.r.pipe (process.stdout);
process.stdin.on ('data', function (chunk) {
if (replies.length>0) {
var cb = replies[0];
replies = replies.slice(1);
var cb = replies.pop ();
if (cb) cb (''+chunk);
}
r2io.w.write (chunk);
});
}
return r2io;
}
// Example:
if (isMain) {
var lp = langPipe ();
lp.cmd ("pd 3", function (x) {
console.log (x);
lp.cmd ("px 64", function (y) {
console.log (y);
lp.repl ();
});
});
} else {
module.exports = langPipe();
}