/* dump.c */
#include "os.h"
#include "copyright.h"
#include "config.h"
#include "db.h"
#include "externs.h"
/* The following are needed so that modules that contain required code can
* be linked in.. However the following routines do not NEED to do anything.
*/
/*****************************************************************************/
void report (void)
{
}
dbref free_get (void)
{
return NOTHING;
}
void fix_free_list (void)
{
}
void parse_que (dbref player, char *command, dbref cause)
{
}
int
eval_boolexp (dbref player, struct boolexp *b, dbref privs, int nrecurs,
int locktype)
{
return 1;
}
int wild_match (char *s, char *d)
{
return 1;
}
void notify (dbref player, const char *msg)
{
}
void init_match (dbref player, const char *arg, int type)
{
}
void match_everything (void)
{
}
dbref noisy_match_result (void)
{
return 1;
}
char *tprintf (char *format, ...)
{
return (char *) "";
}
void panic (const char *message)
{
fprintf (stderr, "PANIC: %s\n", message);
exit (-1);
}
/*****************************************************************************/
/* in a dump, you can see everything */
int can_link_to (dbref who, 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 it if it isn't owned by the right player */
if (owner != NOTHING && o->owner != owner)
continue;
printf
("OBJECT #%d: %s [OWNER: %s(#%d)]\nLOC: %s(%d)\nPENNIES: %d\nTYPE: ",
o - db, o->name, db[o->owner].name, o->owner, unparse_object (owner,
o->location), o->location, o->penn);
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 ('\n');
if (o->flags & ~TYPE_MASK) {
printf ("TYPE FLAGS: ");
switch (o->flags & TYPE_MASK) {
case TYPE_PLAYER:
if (o->flags & PLAYER_DARK)
printf ("Unfind ");
#ifdef RESTRICTED_BUILDING
if (o->flags & PLAYER_BUILD)
printf ("Builder ");
#endif
if (o->flags & PLAYER_GAGGED)
printf ("Gagged ");
if (o->flags & PLAYER_SUSPECT)
printf ("Suspect ");
break;
case TYPE_THING:
if (o->flags & THING_PUPPET)
printf ("Puppet ");
if (o->flags & THING_KEY)
printf ("Key ");
if (o->flags & THING_SAFE)
printf ("Safe ");
if (o->flags & THING_IMMORTAL)
printf ("Immortal ");
if (o->flags & THING_VERBOSE)
printf ("Verbose ");
#ifdef DESTROY
if (o->flags & THING_DEST_OK)
printf ("Destroy_ok ");
#endif /* DESTROY */
break;
case TYPE_ROOM:
if (o->flags & LINK_OK)
printf ("Link_Ok ");
if (o->flags & ROOM_TEMPLE)
printf ("Temple ");
if (o->flags & ROOM_ABODE)
printf ("Abode ");
if (o->flags & ROOM_JUMP_OK)
printf ("Jump_Ok ");
if (o->flags & ROOM_FLOATING)
printf ("Floating ");
if (o->flags & ROOM_NO_TEL)
printf ("No_Tel ");
break;
case TYPE_EXIT:
if (o->flags & EXIT_TRANSPARENT)
printf ("Transparent ");
if (o->flags & EXIT_KEY)
printf ("Key ");
break;
}
printf ("\nGENERAL FLAGS: ");
if (o->flags & WIZARD)
printf ("Wizard ");
if (o->flags & DARK)
printf ("Dark ");
if (o->flags & STICKY)
printf ("Sticky ");
if (o->flags & HAVEN)
printf ("Haven ");
if (o->flags & HALT)
printf ("Halt ");
if (o->flags & QUIET)
printf ("Quiet ");
if (o->flags & TERSE)
printf ("Terse ");
#ifdef DESTROY
if (o->flags & GOING)
printf ("Destroyed ");
#endif /* DESTROY */
if (o->flags & CHOWN_OK)
printf ("Chown_Ok ");
if (o->flags & ENTER_OK)
printf ("Enter_Ok ");
if (o->flags & VISUAL)
printf ("Visual ");
if (o->flags & OPAQUE)
printf ("Opaque ");
if (o->flags & NOSPOOF)
printf ("Nospoof ");
#ifdef INHERIT_FLAG
if (o->flags & INHERIT)
printf ("Inherit ");
#endif
#ifdef ROYALTY_FLAG
if (o->flags & ROYALTY)
printf ("Royalty ");
#endif
}
putchar ('\n');
if (o->key != TRUE_BOOLEXP)
printf ("KEY: %s\n", unparse_boolexp (owner, o->key, 0));
if (((o->flags & TYPE_MASK) == TYPE_PLAYER)
&& (o->usekey != TRUE_BOOLEXP))
printf ("USEKEY: %s\n", unparse_boolexp (owner, o->usekey, 0));
if (o->enterkey != TRUE_BOOLEXP)
printf ("ENTERKEY: %s\n", unparse_boolexp (owner, o->enterkey, 0));
if (o->list) {
ALIST *list;
ATTR *my_attr;
printf ("ATTRIBUTES:\n");
for (list = o->list; list; list = AL_NEXT (list)) {
if (!AL_BAD (list)) {
my_attr = AL_ATTR (list);
if (!string_compare ("XYXXY", my_attr->name))
printf ("\tPassword: %s\n", uncompress (AL_STR (list)));
else
printf ("\t%s: %s\n", my_attr->name, uncompress (AL_STR (list)));
}
}
}
if (o->contents != NOTHING) {
printf ("CONTENTS:\n");
DOLIST (thing, o->contents) {
/* dump thing description */
printf ("\t%s(%d) [OWNER: %s(%d)]\n", unparse_object (owner, thing),
thing, db[owner].name, owner);
}
}
if (o->exits != NOTHING) {
if ((o->flags & TYPE_MASK) == TYPE_ROOM) {
puts ("EXITS:\n");
DOLIST (thing, o->exits) {
printf ("\t%s ", unparse_object (owner, thing));
if (db[thing].location != NOTHING) {
printf (" => %s\n", unparse_object (owner, db[thing].location));
} else {
printf (" ***OPEN***\n");
}
if (db[thing].key != TRUE_BOOLEXP) {
printf ("\tKEY: %s\n", unparse_boolexp (owner, db[thing].key, 0));
}
}
} else {
printf ("HOME: %s\n", unparse_object (owner, o->exits));
}
}
putchar ('\n');
}
return (0);
}