muse1.7b4/
muse1.7b4/config/
muse1.7b4/doc/
muse1.7b4/run/
muse1.7b4/run/db/
muse1.7b4/src/
muse1.7b4/src/db/
muse1.7b4/src/files/
muse1.7b4/src/io/
muse1.7b4/src/prog/
muse1.7b4/src/util/
/* 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;
    }
  }
}