// _cleanup.c
// global mud cleanup command
// by Emeradii@EarthMud 4/15/94
//
// Leto@Earth 2/18/95 Added verbose flag (defaults to quiet now), 
//                    prevented self-wipe and prevented max_eval error
#include <mudlib.h>
inherit DAEMON;
int clean_up(){ return 1;} // Don't wipe ourselves ;)
int cmd_cleanup(string arg) {
  object *contents;
  string results;
  object ply;
  int i, number, flag, verbose;
  int force_write;
   reset_eval_cost(); // Leto
  if (arg == "-r") {
    write("reclaim_objects gives "+reclaim_objects()+"\n");
    return 1;
  }
	if (arg == "-v") verbose = 1;
  if (arg == "-f") force_write = 1;
  else force_write = 0;
  ply = this_player();
  number = 0;
  contents = objects();
  if (arg == "-l") flag = 1;
  else flag = 0;
  write("cleanup in "+(flag ? "list" : "wipe")+" mode.\n");
  results = "";
write("size of cleanup is "+sizeof(contents)+"\n");
  for (i = 0; i < sizeof(contents); i++) {
	if(verbose) {
    results += "file: "+(objectp(contents[i])?file_name(contents[i]):"nothing"); }
    if (force_write) write("file: "+(objectp(contents[i])?file_name(contents[i]):"nothing"));
    if (!flag) {
    if (!contents[i]) {
      results += "\n\ndangling object encountered!\n\n";
    } else if (function_exists("clean_up",contents[i])) {
      contents[i]->clean_up();
			reset_eval_cost();
    }
      if  (objectp(contents[i])) {
				 if (verbose) results += " was not wiped.\n"; }
      else {
        if (verbose) results += " was wiped.\n";
        number++;
      }
    } else results += "\n";
  }
  results += number+((number == 1) ? " object was" : " objects were")+" wiped.\n";
  results += "There "+((i==1)?"was ":"were ")+i+((i==1)?" object":" objects")+".\n";
  write(results);
  rm("/log/CleanUpList");
  write_file("/log/CleanUpList",results);
  return 1;
}
string help() {
  return(wrap("syntax:  cleanup [-v|r|l|f]\n\n"+
             "  This command with the -r options will attempt to reclaim "+
             "any loose objects in the mud.  With the -l option it will "+
             "print out a list of all the objects on the mud to the screen, "+
             "use -v for a very verbose wipe. The -f flag will force a write"+
             "to your screen, handy for finding crashers :)\nAll flags, except"+
             " the l flag will call clean_up() in every object on the mud."
       ));
}