#include "copyright.h"
#include "os.h"
#include "db.h"
#include "externs.h"
#ifndef COMPRESS
#define uncompress(x) (x)
#else
const char *uncompress (const char *s);
#endif /* COMPRESS */
const char *unparse_object (dbref player, dbref loc);
/* in a dump, you can see everything */
int can_link_to (dbref who, object_flag_type what, dbref where)
{
return 1;
}
int controls (dbref who, dbref what)
{
return 1;
}
int main (int argc, char **argv)
{
struct object *o;
dbref owner;
dbref thing;
if (argc < 1) {
fprintf (stderr, "Usage: %s [owner]\n", *argv);
return (1);
}
if (argc >= 2) {
owner = atol (argv[1]);
} else {
owner = NOTHING;
}
if (db_read (stdin) < 0) {
fprintf (stderr, "%s: bad input\n", argv[0]);
return (5);
}
for (o = db; o < db + db_top; o++) {
/* don't show exits separately */
if ((o->flags & TYPE_MASK) == TYPE_EXIT)
continue;
/* don't show it if it isn't owned by the right player */
if (owner != NOTHING && o->owner != owner)
continue;
printf ("#%d: %s [%s] at %s Pennies: %d Type: ",
o - db, o->name, db[o->owner].name,
unparse_object (owner, o->location), o->pennies);
switch (o->flags & TYPE_MASK) {
case TYPE_ROOM:
printf ("Room");
break;
case TYPE_EXIT:
printf ("Exit");
break;
case TYPE_THING:
printf ("Thing");
break;
case TYPE_PLAYER:
printf ("Player");
break;
default:
printf ("***UNKNOWN TYPE***");
break;
}
/* handle flags */
putchar (' ');
if (o->flags & ~TYPE_MASK) {
printf ("Flags: ");
if (o->flags & LINK_OK)
printf ("LINK_OK ");
if (o->flags & DARK)
printf ("DARK ");
if (o->flags & STICKY)
printf ("STICKY ");
if (o->flags & WIZARD)
printf ("WIZARD ");
if (o->flags & TEMPLE)
printf ("TEMPLE ");
#ifdef RESTRICTED_BUILDING
if (o->flags & BUILDER)
printf ("BUILDER ");
#endif /* RESTRICTED_BUILDING */
}
putchar ('\n');
if (o->key != TRUE_BOOLEXP)
printf ("KEY: %s\n", unparse_boolexp (owner, o->key));
if (o->description) {
puts ("Description:");
puts (uncompress (o->description));
}
if (o->succ_message) {
puts ("Success Message:");
puts (uncompress (o->succ_message));
}
if (o->fail_message) {
puts ("Fail Message:");
puts (uncompress (o->fail_message));
}
if (o->ofail) {
puts ("Other Fail Message:");
puts (uncompress (o->ofail));
}
if (o->osuccess) {
puts ("Other Success Message:");
puts (uncompress (o->osuccess));
}
if (o->contents != NOTHING) {
puts ("Contents:");
DOLIST (thing, o->contents) {
/* dump thing description */
putchar (' ');
puts (unparse_object (owner, thing));
}
}
if (o->exits != NOTHING) {
if ((o->flags & TYPE_MASK) == TYPE_ROOM) {
puts ("Exits:");
DOLIST (thing, o->exits) {
printf (" %s", unparse_object (owner, thing));
if (db[thing].key != TRUE_BOOLEXP) {
printf (" KEY: %s", unparse_boolexp (owner, db[thing].key));
}
if (db[thing].location != NOTHING) {
printf (" => %s\n", unparse_object (owner, db[thing].location));
} else {
puts (" ***OPEN***");
}
}
} else {
printf ("Home: %s\n", unparse_object (owner, o->exits));
}
}
putchar ('\n');
}
return (0);
}