From 530c24cbb8e467af0d211ee5dd24c0c5b665fe47 Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Thu, 29 Dec 2016 09:58:19 -0800 Subject: [PATCH] Node pdp11 utility can now switch to raw tty input (important for passing console data to/from the virtual serial port) --- modules/pdp11/bin/pdp11 | 45 +++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/modules/pdp11/bin/pdp11 b/modules/pdp11/bin/pdp11 index 12b729b26..26a9d210e 100644 --- a/modules/pdp11/bin/pdp11 +++ b/modules/pdp11/bin/pdp11 @@ -38,6 +38,7 @@ var Defines = require("../../shared/es6/defines"); var Str = require("../../shared/es6/strlib"); var Proc = require("../../shared/es6/proclib"); +var replServer = null; var idAttrs = '@'; var fConsole = false; var fDebug = false; @@ -410,9 +411,41 @@ if (argv['cmd'] !== undefined) { sCmdPrev = ""; } -repl.start({ - prompt: "PDP11> ", - input: process.stdin, - output: process.stdout, - eval: onCommand -}); +/** + * startInput() + */ +function startInput() +{ + var stdin = process.stdin; + console.log("switching to raw input (alt-r to return to REPL, alt-x to exit)"); + stdin.setRawMode(true); + stdin.resume(); + stdin.on('data', function(buf){ + if (buf[0] == 0x1b && (buf[1] == 0x72 || buf[1] == 0x78)) { + stdin.removeAllListeners('data'); + stdin.setRawMode(false); + stdin.pause(); + if (buf[1] == 0x72) startREPL(); + return; + } + // process.stdout.write(buf); + }); +} + +/** + * startREPL() + */ +function startREPL() +{ + replServer = repl.start({ + prompt: "PDP11> ", + input: process.stdin, + output: process.stdout, + eval: onCommand + }); + replServer.on('exit', () => { + startInput(); + }); +} + +startREPL();