parent help_node
object help_root

var root name 'help_root
var help_root last_user 0

method subnodes
    var l, e;

    if (sender() != this())
        last_user = sender();
    l = [];
    for e in (last_user.help_dict())
        l = [@l, e[2]];
    return [@setremove(l, this())];
.

method text
    if (sender() != this())
        last_user = sender();
    return (> pass() <);
.

method match_menu
    arg [args];

    if (sender() != this())
        last_user = sender();
    .invalidate_menu();
    return (> pass(@args) <);
.

eval
    .initialize();
    .set_brief("The top of the help hierarchy");
    .set_text(["If you keep typing 2 question marks on each line of input (as `??'), you will read the entire help database sequentially.  Conveniently, it will start by telling you how to get around the database more efficiently.","","You have access to the following topics in the help system:"]);
.

parent help_node
object user_help

var root name 'user_help

eval
    .initialize();
    .set_brief("Help for users");
    .set_text(["Sorry, no help yet."]);
.

parent help_node
object builder_help

var root name 'builder_help

eval
    .initialize();
    .set_brief("Help for builders");
    .set_text(["Sorry, no help yet."]);
.

parent help_node
object programmer_help

var root name 'programmer_help

eval
    .initialize();
    .set_brief("Help for programmers");
    .set_text(["Sorry, no help yet."]);
.