/
CDC-1.2b/
CDC-1.2b/src/
parent $frob_class
object $read_parser

var $root dbref 'read_parser
var $root child_index 0
var $root fertile 0
var $root manager $read_parser
var $root owned [$read_parser]
var $root owners [$]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1

method parse_line
    arg dict, line;
    var cmd;
    
    if (!line) {
        // we have to do this as such, because of logic (shrug)
        dict = dict.add('status, 'not_done);
        return dict.add_elem('lines, line);
    } else if ((line[1]) == ".") {
        if ((strlen(line) > 1) && ((line[2]) == "."))
            line = substr(line, 2);
        else if (strlen(line) == 1)
            return dict.add('status, 'done);
    } else if ((line[1]) == ">") {
        if ((strlen(line) > 1) && ((line[2]) == ">")) {
            line = substr(line, 2);
        } else {
            dict = dict.add('command, substr(line, 2));
            return dict.add('status, 'pass_command);
        }
    } else if (line == "@abort") {
        return dict.add('status, 'abort);
    }
    dict = dict.add('status, 'not_done);
    return dict.add_elem('lines, line);
.

method new
    arg task_id, count;
    
    return <this(), #[['lines, []], ['status, 'not_done], ['count, count], ['task_id, task_id]]>;
.

method parse
    arg dict, line;
    var line, result;
    
    // checks the incoming line to see if its a keeper, or a command.
    if ((dict['count]) == 'one) {
        dict = dict.add_elem('lines, line);
        return <this(), dict_add(dict, 'status, 'done)>;
    } else {
        return <this(), .parse_line(dict, line)>;
    }
.

method status
    arg dict;
    
    return dict['status];
.

method task_id
    arg dict;
    
    return dict['task_id];
.

method lines
    arg dict;
    
    return dict['lines];
.

method command
    arg dict;
    
    return (| dict['command] |) || "";
.

method add
    arg dict, [args];
    
    return <this(), (> dict.add(@args) <)>;
.