#include <creator.h> #define OBJ_LIMIT 50 inherit COMMAND_BASE; string help(); mixed cmd(string str) { int memtotal, limit, i = TP->query_cols() -7 -1, j; string ret, str2, str3; object *objlist; if (!str || str == "") return notify_fail(help()); // Remove excess whitespace while (strlen(str) && str[0] == ' ') str = str[1..]; if (sscanf(str, "-%s%d %s", str3, limit, str2) == 3) { if (str3[0..0] != "l") return notify_fail("Error: Only valid character following '-' is 'l' at " "this time.\n"); str = str2; } seteuid(geteuid(TP)); // Get the list of corresponding objects objlist = WIZ_PRESENT->wiz_present(str, TP); if (!arrayp(objlist) || sizeof(objlist) < 1) { mixed *filelist; str = TP->get_path(str); notify_fail("Unable to find any objects or files corresponding" " to the given name.\n"); if (sizeof(filelist = TP->get_files(str)) > 0) { filelist = filter(filelist, (: (sizeof($1) > 2) && ($1[sizeof($1) - 2..] == ".c") :)); if (sizeof(filelist) < 1) return 0; filelist = filter(filelist, (: find_object($1) :)); objlist = map(filelist, (: find_object($1) :)); } else return 0; } ret = sprintf("%-"+ i +"s %-7s\n", "Object name", "Memory"); ret += sprintf("%-"+ i +"s %-7s\n", "------------", "-------"); if (!limit) limit = OBJ_LIMIT; if (limit > sizeof(objlist)) limit = sizeof(objlist); if (limit == 1) ret += sprintf("%-"+ i +"."+ i +"s %7.7d\n", WIZ_PRESENT->desc_f_object(objlist[sizeof(objlist) - 1]), memory_info(objlist[sizeof(objlist) - 1])); else for (j = 0; j < limit; j++) ret += sprintf("%-"+ i +"."+ i +"s %7.7d\n", WIZ_PRESENT->desc_f_object(objlist[j]), memory_info(objlist[j])); if (sizeof(objlist) > 1) { for (j = 0; j < sizeof(objlist); j++) memtotal += memory_info(objlist[j]); ret += sprintf("%-"+ i +"."+ i +"s %7.7s\n", "", "======="); ret += sprintf("%-"+ i +"."+ i +"s %7.7d\n", "Total memory used for all "+ sizeof(objlist) + " object(s):", memtotal); } TP->more_string(ret); return 1; } string help() { return "Usage: memstat [-l<number>] [<filename(s)>|<wiz_present syntax>]\n\n" "Memstat lists the guestimated amount of memory the specified object(s) use. " "Using the -l option, a maximum amount of objects to be listed may be " "specified otherwise a default limit of "+ OBJ_LIMIT +" objects are listed. " "Paths including wildcards are taken as a way of specifying more than one " "file.\n"; }