// File : /cmds/adm/_what.c
#include <mudlib.h>
#include <writef.h>
#include <daemons.h>
inherit DAEMON ;
void divider() {
write(@ENDTEXT
------------------------------------------------------------------------------
ENDTEXT
);
}
int cmd_what(string arg) {
object *list;
string line;
int i, s;
object link ;
if (!adminp(geteuid(this_player()))) {
return 0;
}
divider();
list = users();
if (!(s = sizeof(list))) {
write("\tWow, no one is logged on. How'd you manage that? ;)\n");
divider();
return 1;
}
if (s > 1)
write("\t\t There are "+ sizeof(list) +" users connected.\n");
else
write("\t\tHow lonely! You're the only one here.\n");
divider();
printf("%-14s%-6s%-58s",
"Name","Idle", "What\n");
divider();
for (i=0; i<s; i++) {
string field;
mixed val;
field = (string) list[i] -> link_data("name");
if (!field)
field = "(null)";
else
field = capitalize(field);
if(list[i]->query("invisible")) field = "(" + field + ")";
if ((int)list[i]->query("npc")) field += " [M]";
if (!list[i]->query("inactive") &&
(in_edit(list[i]) || in_input(list[i])))
field = "*" + field;
line = sprintf("%-14s", field);
link = (object) list[i]->query_link();
val = query_idle(list[i]);
if (list[i]->query("inactive")) field = "Inact";
else if ( val <= 0 ) field = "";
else if( val >= 3600 ) field = val/3600 + "h";
else if( val >= 60 ) field = val/60 + "m";
else field = "";
line += sprintf("%-6s", field);
field = adminp(geteuid(list[i])) ? "*" :
list[i]->query_last_command();
if (!field) field = "-";
if (strlen(field) > 58) field = field[0..51] + " [...]";
line += sprintf("%-58s\n", field);
write( line );
}
divider();
return 1;
}
string help() {
return( @ENDHELP
Usage: what
This command lists the users currently logged on, their idle time, and
what their last command was. Consider this a less intrusive method of
snooping for nosy admins.
ENDHELP
);
}