#include "copyright.h" //#include <stdio.h> #include <stdlib.h> #include "db.h" #include "config.h" #include "externs.h" void check_location (dbref i); void check_exits (dbref i) { dbref exit; int count; count = 10000; for (exit = db[i].exits; exit != NOTHING; exit = db[exit].next) { if (exit < 0 || exit >= db_top || Typeof (exit) != TYPE_EXIT) { printf ("%d has bad exit %d\n", i, exit); break; } /* set type of exit to be really strange */ db[exit].flags = 4; /* nonexistent type */ if (count-- < 0) { printf ("%d has looping exits\n", i); break; } } } void check_contents (dbref i) { dbref thing; dbref loc; int count; count = 10000; for (thing = db[i].contents; thing != NOTHING; thing = db[thing].next) { if (thing < 0 || thing >= db_top || Typeof (thing) == TYPE_ROOM) { printf ("%d contains bad object %d\n", i, thing); break; } else if ((loc = db[thing].location) != i) { printf ("%d in %d but location is %d\n", thing, i, loc); } else if (Typeof (thing) == TYPE_EXIT) { db[thing].flags = 4; /* nonexistent type */ } if (count-- < 0) { printf ("%d has looping contents\n", i); break; } } } void check_location (dbref i) { dbref loc; loc = db[i].location; if (loc < 0 || loc >= db_top) { printf ("%d has bad loc %d\n", i, loc); } else if (!member (i, db[loc].contents)) { printf ("%d not in loc %d\n", i, loc); } } void check_pennies (dbref i) { dbref pennies; pennies = db[i].pennies; switch (Typeof (i)) { case TYPE_ROOM: case TYPE_EXIT: break; case TYPE_PLAYER: if (pennies < 0 || pennies > MAX_PENNIES + 100) { printf ("Player %s(%d) has %d pennies\n", db[i].name, i, pennies); } break; case TYPE_THING: if (pennies < 0 || pennies > MAX_OBJECT_ENDOWMENT) { printf ("Object %s(%d) endowed with %d pennies\n", db[i].name, i, pennies); } break; } } int main (int argc, char **argv) { dbref i; if (db_read (stdin) < 0) { puts ("Database load failed!"); exit (1); } puts ("Done loading database"); for (i = 0; i < db_top; i++) { check_pennies (i); switch (Typeof (i)) { case TYPE_PLAYER: check_contents (i); check_location (i); if (Wizard (i)) printf ("Wizard: %s(%d)\n", db[i].name, i); break; case TYPE_THING: check_location (i); break; case TYPE_ROOM: check_contents (i); check_exits (i); break; } } /* scan for unattached exits */ for (i = 0; i < db_top; i++) { if (Typeof (i) == TYPE_EXIT) { printf ("Unattached exit %d\n", i); } } return 0; }