/* unparse.c */
/* $Id: unparse.c,v 1.7 1993/09/18 19:04:14 nils Exp $ */
#include "db.h"
#include "externs.h"
#include "config.h"
#include "interface.h"
#include "nalloc.h"
extern NALLOC *glurp;
char *unparse_flags(thing)
dbref thing;
{
int c;
static char buf[BUFFER_LEN];
char *p;
char *type_codes = "R-E-----PPPPPPPP";
p = buf;
c = type_codes[Typeof(thing)];
if ( c != '-' )
*p++ = c;
if(db[thing].flags & ~TYPE_MASK) {
/* print flags */
#ifdef DESTROY
if(db[thing].flags & GOING) *p++ = 'G';
#endif /* DESTROY */
if(db[thing].flags & PUPPET) *p++ = 'p';
if(db[thing].flags & STICKY) *p++ = 'S';
if(db[thing].flags & DARK) *p++ = 'D';
if(db[thing].flags & LINK_OK) *p++ = 'L';
if(db[thing].flags & HAVEN) *p++ = 'H';
if(db[thing].flags & CHOWN_OK) *p++='C';
if(db[thing].flags & ENTER_OK) *p++='e';
if(db[thing].flags & SEE_OK) *p++='v';
/* if(db[thing].flags & UNIVERSAL) *p++='U';*/
if(db[thing].flags & OPAQUE)
if (Typeof(thing) == TYPE_EXIT) *p++ = 'T';
else *p++='o';
if(db[thing].flags & INHERIT_POWERS) *p++='I';
if(db[thing].flags & QUIET) *p++='q';
if(db[thing].flags & BEARING) *p++='b';
switch(Typeof(thing)) {
case TYPE_PLAYER:
if (db[thing].flags & PLAYER_SLAVE)
*p++='s';
if (db[thing].flags & PLAYER_CONNECT)
*p++='c';
if (db[thing].flags & PLAYER_TERSE)
*p++='t';
if (db[thing].flags & PLAYER_MORTAL)
*p++='m';
if (db[thing].flags & PLAYER_NEWBIE)
*p++='n';
if (db[thing].flags & PLAYER_NO_WALLS)
*p++='N';
break;
case TYPE_EXIT:
if(db[thing].flags & EXIT_LIGHT)
*p++='l';
break;
case TYPE_THING:
if (db[thing].flags & THING_KEY)
*p++='K';
if (db[thing].flags & THING_DEST_OK)
*p++='d';
/* if (db[thing].flags & THING_ROBOT)
*p++='r'; */
if (db[thing].flags & THING_SACROK)
*p++='X';
if (db[thing].flags & THING_LIGHT)
*p++='l';
break;
case TYPE_ROOM:
if (db[thing].flags & ROOM_TEMPLE)
*p++='T';
if (db[thing].flags & ROOM_JUMP_OK)
*p++='J';
if (db[thing].flags & ROOM_AUDITORIUM)
*p++='A';
if (db[thing].flags & ROOM_FLOATING)
*p++='f';
#ifdef USE_SPACE /* Flag added by Eric Wallace */
if (db[thing].flags & ROOM_ZEROG)
*p++='Z';
#endif
break;
}
}
*p = '\0';
return buf;
}
char *unparse_object_a(player,loc)
dbref player;
dbref loc;
{
char *xx;
char *zz=unparse_object(player,loc);
xx=na_alloc(glurp,strlen(zz)+1);
strcpy(xx,zz);
return xx;
}
char *unparse_object(player,loc)
dbref player;
dbref loc;
{
static char buf[BUFFER_LEN];
Access(loc);
switch(loc) {
case NOTHING:
return "*NOTHING*";
case HOME:
return "*HOME*";
default:
if((IS(player,TYPE_PLAYER,PLAYER_NEWBIE))
?(db[loc].owner == player)
:(controls(player, loc, POW_BACKSTAGE) ||
can_link_to(player, loc, POW_BACKSTAGE) ||
(IS(loc, TYPE_ROOM, ROOM_JUMP_OK)) ||
(db[loc].flags & CHOWN_OK) ||
(db[loc].flags & SEE_OK) ||
power(player,POW_BACKSTAGE))) {
/* show everything */
sprintf(buf, "%s(#%d%s)", db[loc].name, loc, unparse_flags(loc));
return buf;
} else {
/* show only the name */
return db[loc].name;
}
}
}