parent $foundation
object $input
var $root child_index 0
var $root fertile 1
var $root manager $input
var $root owners [$input]
var $root writable [$]
var $root readable ['parameters, 'methods, 'code]
var $root trusted []
var $root owned [$input]
var $root inited 1
var $input receiving 0
var $input input 0
var $root dbref 'input
method finish_receiving
var oreceiving, oinput;
// called by $input_parser.parse when one is finished.
.perms(sender(), 'parser);
// we have to reset the parameter before we run it's values.
oreceiving = receiving;
oinput = input;
.reset_input();
(oreceiving[2]).(oreceiving[3])(oinput, @sublist(oreceiving, 4));
.
method start_receiving
arg lines, obj, method, [args];
// called by this().read() or this().read_line()
.perms(sender(), 'this);
receiving = [lines, obj, method, @args];
input = [];
.add_parser($input_parser, 'first);
.
method reset_input
// resets values, for aborting or other emergency reset.
.perms(sender(), 'parser);
receiving = 0;
input = 0;
.del_parser($input_parser);
.
method new_line
arg line;
// called by $input_parser.parse with a new string to be added.
.perms(sender(), 'parser);
input = [@input, line];
.
method lines
// returns how many lines the user wishes to read.
return receiving[1];
.
method read
arg method, [args];
// read input lines from the user.
// returns sender().method(["input", "lines"], @args);
if (receiving)
throw(~wait, "User is currently receiving input.");
if (type(method) != 'symbol)
throw(~type, "Method reference must be given as a symbol.");
// looks ok.
.start_receiving('terminated, sender(), method, @args);
.
method prompt
arg prompt, method, [args];
.read_line(method, @args);
// .tell(prompt);
.non_terminated_tell(prompt);
.
method read_line
arg method, [args];
// read input lines from the user.
// returns sender().method(["input", "lines"], @args);
if (receiving)
throw(~wait, "User is currently receiving input.");
if (type(method) != 'symbol)
throw(~type, "Method reference must be given as a symbol.");
// looks ok.
.start_receiving('one, sender(), method, @args);
.