var Chainsaw = require('chainsaw'); var Lazy = require('lazy'); module.exports = Prompt; function Prompt (stream) { var waiting = []; var lines = []; var lazy = Lazy(stream).lines.map(String) .forEach(function (line) { if (waiting.length) { var w = waiting.shift(); w(line); } else lines.push(line); }) ; var vars = {}; return Chainsaw(function (saw) { this.getline = function (f) { var g = function (line) { saw.nest(f, line, vars); }; if (lines.length) g(lines.shift()); else waiting.push(g); }; this.do = function (cb) { saw.nest(cb, vars); }; }); } var util = require('util'); if (__filename === process.argv[1]) { var stdin = process.openStdin(); Prompt(stdin) .do(function () { util.print('x = '); }) .getline(function (line, vars) { vars.x = parseInt(line, 10); }) .do(function () { util.print('y = '); }) .getline(function (line, vars) { vars.y = parseInt(line, 10); }) .do(function (vars) { if (vars.x + vars.y < 10) { util.print('z = '); this.getline(function (line) { vars.z = parseInt(line, 10); }) } else { vars.z = 0; } }) .do(function (vars) { console.log('x + y + z = ' + (vars.x + vars.y + vars.z)); process.exit(); }) ; }