home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
games
/
tinymud2.zip
/
SANITY-C.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-09-02
|
4KB
|
181 lines
#include "copyright.h"
#include <stdio.h>
#include "db.h"
#include "config.h"
# define HAS_ENTRANCES 0x40000000
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");
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(Typeof(thing) == TYPE_EXIT) {
db[thing].flags = 4; /* nonexistent type */
} else if((loc = db[thing].location) != i) {
printf("%d in %d but location is %d\n", thing, i, loc);
}
if(count-- < 0) {
printf("%d has looping contents\n");
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_owner(dbref i)
{
dbref owner;
owner = db[i].owner;
if(owner < 0 || owner >= db_top || Typeof(owner) != TYPE_PLAYER) {
printf("Object %s(%d) has bad owner %d\n",
db[i].name, i, owner);
}
}
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;
}
}
void 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);
check_owner(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);
if(Dark(i)) printf("Dark: %s(%d)\n", db[i].name, i);
if(Robot(i)) printf("Robot: %s(%d)\n", db[i].name, i);
if(db[i].password == NULL)
{ printf ("Null password: %s(%d)\n", db[i].name, i); }
break;
case TYPE_THING:
check_location(i);
break;
case TYPE_ROOM:
if(Robot(i)) printf("UnRobot: %s(%d)\n", db[i].name, i);
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);
}
}
/* scan for unattached exits */
for(i = 0; i < db_top; i++) {
if(Typeof(i) == TYPE_EXIT) {
printf("Unattached exit %d\n", i);
}
}
/*---- scan for unattached rooms ----*/
/* Clear entry flags */
for(i = 0; i < db_top; i++) db[i].flags &= ~HAS_ENTRANCES;
/* For each exit, set its destination entry bit */
for(i = 0; i < db_top; i++) {
if(Typeof(i) == TYPE_EXIT || Typeof(i) == 4) {
if(db[i].location >= 0) db[db[i].location].flags |= HAS_ENTRANCES;
}
}
/* Now print every room with no entrances */
for(i = 0; i < db_top; i++) {
if(Typeof(i) == TYPE_ROOM &&
(db[i].flags & HAS_ENTRANCES) == 0) {
if (db[i].exits == NOTHING && db[i].contents == NOTHING) {
printf ("Room %d has no entrances, exits, or contents\n", i);
} else {
printf ("Room %d has no entrances\n", i);
}
}
}
exit(0);
}