// Externalized from /global/last.c - Only for creators // Radix : Jan 21, 1996 // Made it a bit more accurate (now includes seconds) // Radix : Aug 22, 1996 #include <standard.h> #include <cmd.h> inherit CMD_BASE; void setup() { position = 1; } string mtime(int i) { string str; str = ctime(i); return str[0..strlen(str)-6]; } string stime(int i) { return ctime(i)[11..18]; } string ntime(int i) { return sprintf("%02d:%02d", (i/3600), (i/60)%60); } static int cmd(mixed str, object me) { string file, s1, s2, s3, s4, s5, *sarr; int time, t2, i; int lines, fsize; if (!str || str == "") { notify_fail("Usage: last -N <name>\n"); return 0; } me->set_trivial_action(); if (sscanf(str, "-%s %s", s1, str) == 2) sscanf(s1, "%d", lines); if (str == "reboot") { fsize = file_length("/log/REBOOT"); if (lines) file = read_file("/log/REBOOT", fsize-lines, fsize); else file = read_file("/log/REBOOT"); sarr = explode(file, "\n"); for (i=0;i<sizeof(sarr);i++) if (sscanf(sarr[i], "%s[%d]%s", s1, time, s2) == 3) tell_object(me,sprintf("%15-s %s\n", "reboot", mtime(time))); return 1; } fsize = file_length("/log/ENTER"); if (lines) file = read_file("/log/ENTER", fsize-lines, fsize); else file = read_file("/log/ENTER"); str = (string)me->expand_nickname(str); while (sscanf(file, "%sEnter : "+str+"%s[%d]%s",s1, s3, time, s2) == 4) { file = s2; if (sscanf(file, "%sExit : "+str+"%s[%d]%s", s1, s5, t2, s2) != 4) if (!find_player(str)) tell_object(me,sprintf("%15-s %s - Destd (??:??)\n", str, mtime(time))); else tell_object(me,sprintf("%15-s %s - Not logged off\n", str, mtime(time))); else { if (sscanf(file, "%sEnter : "+str+"%s", s3,s4) == 2) if (strlen(s1) > strlen(s3)) { tell_object(me,sprintf("%15-s %s - %s (%s)\n", str, mtime(time), "Destd", "??:??")); continue; } tell_object(me,sprintf("%15-s %s - %s (%s)\n", str, mtime(time), stime(t2), ntime(t2-time))); file = s2; } } tell_object(me,ctime(time())+"\n"); return 1; }