melville/
melville/cmds/
melville/cmds/admin/
melville/data/
melville/data/mail/
melville/data/player/
melville/data/system/
melville/data/user/
melville/doc/functions/
melville/doc/help/
melville/inherit/
melville/log/
melville/obj/
melville/system/auto/
melville/system/player/
melville/system/user/
melville/users/
melville/users/mobydick/
melville/world/
/* A command to call the status() kfun and print the results.
   Similar to a command in the 2.4.5 lib but the code is all my own.
   Mobydick, 8-1-94.
*/

#include <status.h>

string convert_time (int i) {

    int weeks, days, hours, minutes, seconds ;
    string val ;

    weeks = i/604800 ;
    i = i%604800 ;
    days = i/86400 ;
    i = i%86400 ;
    hours = i/3600 ;
    i = i%3600 ;
    minutes = i/60 ;
    seconds = i%60 ;
    val = "" ;
    if (weeks) val += weeks+" weeks, " ;
    if (weeks || days) val += days+" days, " ;
    if (weeks || days || hours) val += hours+" hours, " ;
    if (weeks || days || hours || minutes) {
	if (weeks || days || hours) val += minutes+" minutes, and " ;
	else val += minutes+" minutes and " ;
    }
    val += seconds+" seconds." ;
    return val ;
}

int do_command(string str) {

    mixed *stats ;
    object obj ;

    if (!str) {
        stats = status() ;
        write ("Driver version:     "+stats[ST_VERSION]+"\n") ; 
        write ("Started at:         "+ctime(stats[ST_STARTTIME])+"\n") ;
        write ("Boot time:          "+ctime(stats[ST_BOOTTIME])+"\n") ;
	write ("Uptime:             "+convert_time(stats[ST_UPTIME])+"\n") ;
        write ("Swap size:          "+stats[ST_SWAPSIZE]+"\n") ;
        write ("Swap space used:    "+stats[ST_SWAPUSED]+"\n") ;
        write ("Swap rate:          "+stats[ST_SWAPRATE1]+"\n") ;
        write ("Static memory:      "+stats[ST_SMEMSIZE]+"\n") ;
        write ("Static mem used:    "+stats[ST_SMEMUSED]+"\n") ;
        write ("Dynamic memory:     "+stats[ST_DMEMSIZE]+"\n") ;
        write ("Dynamic mem used:   "+stats[ST_DMEMUSED]+"\n") ;
        write ("Object table size:  "+stats[ST_OTABSIZE]+"\n") ;
        write ("Objects loaded:     "+stats[ST_NOBJECTS]+"\n") ;
        write ("Callout table size: "+stats[ST_COTABSIZE]+"\n") ;
        write ("Short callouts:     "+stats[ST_NCOSHORT]+"\n") ;
        write ("Long callouts:      "+stats[ST_NCOLONG]+"\n") ;
        write ("User table size:    "+stats[ST_UTABSIZE]+"\n") ;
        write ("Editor table size:  "+stats[ST_ETABSIZE]+"\n") ;
        return 1 ;
    }
    obj = find_object(str) ;
    if (!obj) {
        write ("No such object as "+str+"\n") ;
	return 1 ;
    }
    stats = status(obj) ;
    write ("Compiled at:      "+ctime(stats[O_COMPILETIME])+"\n") ;
    write ("Program size:     "+stats[O_PROGSIZE]+"\n") ;
    write ("Data size:        "+stats[O_DATASIZE]+"\n") ;
    write ("Sectors used:     "+stats[O_NSECTORS]+"\n") ;
    write ("Callouts pending: "+sizeof(stats[O_CALLOUTS])+"\n") ;
    return 1 ;
}