/
CDC-1.2b/
CDC-1.2b/src/
parent $connection_interfaces
object $finger_interface

var $root dbref 'finger_interface
var $root child_index 135
var $root fertile 1
var $root manager $finger_interface
var $root owned [$finger_interface]
var $root owners [$finger_interface]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $has_commands commands [["help", 'help_cmd], ["uptime", 'uptime_cmd], ["all", 'all_cmd], ["who", 'who_cmd], ["*", 'unknown_cmd]]
var $has_commands shortcuts []
var $root inited 1
var $connection_interfaces connection $
var $old_command_environment verb_cache #[]
var $old_command_environment command_cache [["help", 'help_cmd], ["uptime", 'uptime_cmd], ["all", 'all_cmd], ["who", 'who_cmd], ["*", 'unknown_cmd]]
var $old_command_environment shortcuts_cache []

method parse_line
    arg line;
    var cmd;
    
    while (line && ((line[1]) == " "))
        line = substr(line, 2);
    if (!line) {
        .motd();
    } else if ((line[1]) == ".") {
        line = substr(line, 2);
    
        //    if (!line) {
        //        .send("Unknown option, try \".help\".");
        //    } else {
        cmd = .match_command(line);
        if (cmd)
            .(cmd[1])(@cmd[2]);
    
        //    }
    } else {
        .send(.finger_user(line));
    }
    return 'disconnect;
.

method motd
    .perms(sender(), 'this);
    .send($login.build('default));
    .send($string.center("Email: " + ($sys.get_system_email('finger)), 79));
    .send($string.center("For more information, finger .help", 79));
.

method finger_user
    arg str;
    var user, line, lines, idle, desc;
    
    .perms(sender(), 'this);
    user = (| $user_db.find(str) |);
    if (!user)
        return [("Sorry, no user found by the name of \"" + str) + "\", try \".help\"."];
    line = pad(" Name:        " + (user.namef()), 37);
    line = (line + " In real life: ") + (user.data_on('real_name));
    lines = [line];
    line = " Last Login: ";
    if (user.connected()) {
        if ((user.idle_seconds()) > 10) {
            idle = ", " + ($time.dhms(user.idle_seconds(), 'long));
            idle = idle + " idle.";
        } else {
            idle = "";
        }
        line = " On since:    " + ($time.ltime(user.connected_at()));
        line = (line + " (Mountain)") + idle;
    } else {
        line = " Last Login:  " + ctime(user.last_command_at());
    }
    lines = [@lines, line];
    line = user.display_data('real_name, 'affiliation, 'position, 'location);
    lines = [@lines, @line];
    desc = $list.to_string(user.prose('short));
    if (strlen(desc) < 60) {
        lines = [@lines, " Description: " + desc];
    } else {
        lines = [@lines, " Description:"];
        desc = $string.wrap_line(desc, 79, "    ");
        desc = replace(desc, 1, "    " + (desc[1]));
        lines = [@lines, @desc];
    }
    return lines;
.

method help_cmd
    arg cmd;
    
    .send("If you are trying to find a user, do not prepend \".\".");
    .send(["", "Options available:", ""]);
    .send("     .all      Show all users connected.");
    .send("     .uptime   Uptime other server information");
    .send(["", "If there are any problems, please email " + ($sys.email('fingerd)), ""]);
.

method uptime_cmd
    arg cmd;
    var line;
    
    line = $time.elapsed($sys.server_info('up_time), 'long);
    .send("Server has been up for: " + line);
    .send("Currently Connected users: " + tostr(listlen($user_db.connected())));
    .send("Driver: " + ($sys.server_info('driver_version, 'long)));
    .send("Core:   " + ($sys.server_info('core_version, 'long)));
.

method all_cmd
    arg cmd;
    var x, line;
    
    (> .perms(sender(), 'this) <);
    
    // .send($code.generate_listing($user_db.connected()));
    .send(pad("USER", 40) + "TIME  (IDLE)     LOCATION");
    for x in ($user_db.connected()) {
        line = pad(x.namef('titled), 40);
        line = line + pad(x.time_poll(), 17);
        line = line + (x.realm_name());
        .send(line);
    }
.

method unknown_cmd
    arg cmd;
    
    .send(("Unknown command \"" + cmd) + "\", try \".help\".");
.

method who_cmd
    arg cmd;
    
    (> .perms(sender(), 'this) <);
    .send($code.generate_listing($user_db.connected()));
.