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.
		
		
		
		
		
			
		
			
				
					68 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					68 lines
				
				1.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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();
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								    ;
							 | 
						||
| 
								 | 
							
								}
							 |