dbna/clans/
dbna/councils/
dbna/deity/
dbna/gods/
dbna/houses/
dbna/space/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |   \\._.//   *
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 *		       Online Building and Editing Module		    *
 ****************************************************************************/

#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "mud.h"



#define MOB 0
#define OBJ 1
#define ROOM 2
#define CONTROL 3

#define NO_COMMAND "there_is_to_be_no_command_associated_with_this_element"

/*
 * Externals
 */
int get_npc_race( char *type );

/*
 * Locals
 */

void refresh_page( CHAR_DATA * ch );
char *get_ris( MOB_INDEX_DATA * idx, int risFlag );
void fill_in_mob_page( CHAR_DATA * ch, MOB_INDEX_DATA * idx, char page );
void fill_in_obj_page( CHAR_DATA * ch, OBJ_INDEX_DATA * idx, char page );
void fill_in_room_page( CHAR_DATA * ch, ROOM_INDEX_DATA * idx, char page );
void fill_in_control_page( CHAR_DATA * ch, char page );
void send_page_to_char( CHAR_DATA * ch, MOB_INDEX_DATA * idx, char page );
void send_room_page_to_char( CHAR_DATA * ch, ROOM_INDEX_DATA * idx, char page );
void send_control_page_to_char( CHAR_DATA * ch, char page );
void send_obj_page_to_char( CHAR_DATA * ch, OBJ_INDEX_DATA * idx, char page );
int get_affect( OBJ_INDEX_DATA * obj, int type );
int get_bvl( int bitvector );
void format_string( char output[], char *str, int length );
char *get_item_strings( int item_number, int which_string );

static char *const space = " ";
static char *const check = "X";

MENU_DATA room_help_page_data[] = {
  {"-", "a", 13, 2, "", NULL, STRING, 0, "rmenu a"},
  {"-", "b", 13, 2, "", NULL, STRING, 0, "rmenu b"},
  {"-", "c", 13, 2, "", NULL, STRING, 0, "rmenu c"},
  {"-", "h", 13, 2, "", NULL, STRING, 0, "rmenu h"},
  {" ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA mob_help_page_data[] = {
  {"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
  {"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
  {"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
  {"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
  {"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
  {"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
  {"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
  {" ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA obj_help_page_data[] = {
  {"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
  {"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
  {"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
  {"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
  {"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
  {"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
  {" ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA control_help_page_data[] = {
  {"-", "a", 13, 2, "", NULL, STRING, 0, "cmenu a"},
  {"-", "h", 13, 2, "", NULL, STRING, 0, "cmenu h"},
  {" ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA room_page_d_data[] = { {"1", "a", 2, 24, "%1.1s", NULL, STRING, 0, "redit default_room hut"},
{"1", "b", 2, 42, "%1.1s", NULL, STRING, 0, "redit default_room tent"},
{"1", "c", 2, 57, "%1.1s", NULL, STRING, 0, "redit default_room hovel"},
{"1", "d", 2, 72, "%1.1s", NULL, STRING, 0, "redit default_room campsite"},
{"1", "e", 3, 24, "%1.1s", NULL, STRING, 0, "redit default_room shack"},
{"1", "f", 3, 42, "%1.1s", NULL, STRING, 0, "redit default_room cabin"},
{"1", "g", 3, 57, "%1.1s", NULL, STRING, 0, "redit default_room homestead"},
{"1", "h", 3, 72, "%1.1s", NULL, STRING, 0, "redit default_room keep"},
{"1", "i", 4, 24, "%1.1s", NULL, STRING, 0, "redit default_room fortress"},
{"1", "j", 4, 42, "%1.1s", NULL, STRING, 0, "redit default_room castle"},
{"1", "k", 4, 57, "%1.1s", NULL, STRING, 0, "redit default_room palace"},
{"1", "l", 4, 72, "%1.1s", NULL, STRING, 0, "redit default_room temple"},
{"1", "m", 5, 24, "%1.1s", NULL, STRING, 0, "redit default_room store"},
{"1", "n", 5, 42, "%1.1s", NULL, STRING, 0, "redit default_room graveyard"},

{
 "1", "q", 6, 24, "%1.1s", NULL, STRING, 0, "redit default_room basement"},
{
 "1", "r", 6, 42, "%1.1s", NULL, STRING, 0, "redit default_room bedroom"},
{
 "1", "s", 6, 57, "%1.1s", NULL, STRING, 0, "redit default_room attic"},
{
 "1", "t", 6, 72, "%1.1s", NULL, STRING, 0, "redit default_room workroom"},

{
 "1", "u", 7, 24, "%1.1s", NULL, STRING, 0, "redit default_room cellar"},
{
 "1", "v", 7, 42, "%1.1s", NULL, STRING, 0, "redit default_room banquetroom"},
{
 "1", "w", 7, 57, "%1.1s", NULL, STRING, 0, "redit default_room tower"},
{
 "1", "x", 7, 72, "%1.1s", NULL, STRING, 0, "redit default_room workshop"},

{
 "1", "y", 8, 24, "%1.1s", NULL, STRING, 0, "redit default_room vault"},
{
 "1", "z", 8, 42, "%1.1s", NULL, STRING, 0, "redit default_room sitting_room"},
{
 "1", "A", 8, 57, "%1.1s", NULL, STRING, 0, "redit default_room turret"},
{
 "1", "B", 8, 72, "%1.1s", NULL, STRING, 0, "redit default_room lab"},

{
 "1", "C", 9, 24, "%1.1s", NULL, STRING, 0, "redit default_room crypt"},
{
 "1", "D", 9, 42, "%1.1s", NULL, STRING, 0, "redit default_room kitchen"},
{
 "1", "E", 9, 57, "%1.1s", NULL, STRING, 0, "redit default_room corridor"},
{
 "1", "F", 9, 72, "%1.1s", NULL, STRING, 0, "redit default_room library"},

{
 "1", "G", 10, 24, "%1.1s", NULL, STRING, 0, "redit default_room storeroom"},
{
 "1", "H", 10, 42, "%1.1s", NULL, STRING, 0, "redit default_room office"},
{
 "1", "I", 10, 57, "%1.1s", NULL, STRING, 0, "redit default_room passage"},
{
 "1", "J", 10, 72, "%1.1s", NULL, STRING, 0, "redit default_room treasury"},

{
 "1", "K", 11, 24, "%1.1s", NULL, STRING, 0, "redit default_room closet"},
{
 "1", "L", 11, 42, "%1.1s", NULL, STRING, 0, "redit default_room drawing_room"},
{
 "1", "M", 11, 57, "%1.1s", NULL, STRING, 0, "redit default_room hallway"},
{
 "1", "N", 11, 72, "%1.1s", NULL, STRING, 0, "redit default_room ladder"},

{
 "1", "O", 12, 24, "%1.1s", NULL, STRING, 0, "redit default_room foyer"},
{
 "1", "P", 12, 42, "%1.1s", NULL, STRING, 0, "redit default_room arboretum"},
{
 "1", "Q", 12, 57, "%1.1s", NULL, STRING, 0, "redit default_room stairway"},
{
 "1", "R", 12, 72, "%1.1s", NULL, STRING, 0, "redit default_room vent"},

{
 "1", "S", 13, 24, "%1.1s", NULL, STRING, 0, "redit default_room entrance"},
{
 "1", "T", 13, 42, "%1.1s", NULL, STRING, 0, "redit default_room larder"},
{
 "1", "U", 13, 57, "%1.1s", NULL, STRING, 0, "redit default_room landing"},
{
 "1", "V", 13, 72, "%1.1s", NULL, STRING, 0, "redit default_room dumbwaiter"},

{
 "1", "W", 14, 24, "%1.1s", NULL, STRING, 0, "redit default_room gate"},
{
 "1", "X", 14, 42, "%1.1s", NULL, STRING, 0, "redit default_room chamber"},
{
 "1", "Y", 14, 57, "%1.1s", NULL, STRING, 0, "redit default_room balcony"},
{
 "1", "Z", 14, 72, "%1.1s", NULL, STRING, 0, "redit default_room shaft"},

{
 "1", "2", 15, 42, "%1.1s", NULL, STRING, 0, "redit default_room conservatory"},
{
 "1", "4", 15, 72, "%1.1s", NULL, STRING, 0, "redit default_room chimney"},

{
 "1", "5", 16, 24, "%1.1s", NULL, STRING, 0, "redit default_room well"},
{"1", "6", 16, 42, "%1.1s", NULL, STRING, 0, "redit default_room garden"}, {"1", "7", 16, 57, "%1.1s", NULL, STRING, 0,
                                                                            "redit default_room cave"},
{"1", "8", 16, 72, "%1.1s", NULL, STRING, 0, "redit default_room mine"},
{"1", "9", 17, 24, "%1.1s", NULL, STRING, 0, "redit default_room grotto"},
{"1", "0", 17, 42, "%1.1s", NULL, STRING, 0, "redit default_room tunnel"}, {"1", "$", 17, 57, "%1.1s", NULL, STRING, 0,
                                                                            "redit default_room maze"},
{"-", "a", 13, 2, "", NULL, STRING, 0, "rmenu a"},
{"-", "b", 13, 2, "", NULL, STRING, 0, "rmenu b"},
{"-", "c", 13, 2, "", NULL, STRING, 0, "rmenu c"},
{"-", "h", 13, 2, "", NULL, STRING, 0, "rmenu h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA room_page_c_data[] = { {
                                  "1", "n", 2, 52, "%1.1s", NULL, STRING, 0, "redit substate north"},
{
 "1", "u", 2, 70, "%1.1s", NULL, STRING, 0, "redit substate up"},
{
 "1", "w", 3, 43, "%1.1s", NULL, STRING, 0, "redit substate east"},
{
 "1", "e", 3, 61, "%1.1s", NULL, STRING, 0, "redit substate west"},
{
 "1", "s", 4, 52, "%1.1s", NULL, STRING, 0, "redit substate south"},
{
 "1", "d", 4, 70, "%1.1s", NULL, STRING, 0, "redit substate down"},
{
 "2", "a", 6, 25, "%1.1s", NULL, STRING, 0, "redit ex_flags isdoor"},
{
 "2", "b", 6, 41, "%1.1s", NULL, STRING, 0, "redit ex_flags secret"},
{
 "2", "c", 7, 25, "%1.1s", NULL, STRING, 0, "redit ex_flags closed"},
{
 "2", "d", 7, 41, "%1.1s", NULL, STRING, 0, "redit ex_flags pickproof"},
{
 "2", "e", 8, 25, "%1.1s", NULL, STRING, 0, "redit ex_flags locked"},
{
 "2", "f", 8, 41, "%1.1s", NULL, STRING, 0, "redit ex_flags nopassdoor"},
{
 "2", "i", 10, 14, "%5.5hd", NULL, SH_INT, 1, "redit ex_to_room %s"},
{
 "2", NO_COMMAND, 10, 22, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{
 "2", "j", 11, 14, "%5.5hd", NULL, SH_INT, 1, "redit ex_key %s"},
{"2", NO_COMMAND, 11, 22, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{"2", "k", 13, 2, "%-70.70s", NULL, STRING, 1, "redit ex_exdesc %s"},
{"-", "a", 13, 2, "", NULL, STRING, 0, "rmenu a"},
{"-", "b", 13, 2, "", NULL, STRING, 0, "rmenu b"},
{"-", "c", 13, 2, "", NULL, STRING, 0, "rmenu c"},
{"-", "h", 13, 2, "", NULL, STRING, 0, "rmenu h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};


MENU_DATA room_page_a_data[] = { {
                                  "1", "a", 5, 2, "%-73.73s", NULL, STRING, 1, "redit name %s"},
{
 "1", "b", 7, 2, "%-73.73s", NULL, STRING, 0, "redit desc"},
{"-", "a", 13, 2, "", NULL, STRING, 0, "rmenu a"},
{"-", "b", 13, 2, "", NULL, STRING, 0, "rmenu b"},
{"-", "c", 13, 2, "", NULL, STRING, 0, "rmenu c"},
{"-", "h", 13, 2, "", NULL, STRING, 0, "rmenu h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA room_page_b_data[] = { {
                                  "1", "a", 2, 26, "%1.1s", NULL, STRING, 1, "redit flags dark"},
{
 "1", "b", 2, 42, "%1.1s", NULL, STRING, 1, "redit flags death"},
{
 "1", "c", 2, 60, "%1.1s", NULL, STRING, 1, "redit flags nomob"},
{
 "1", "d", 3, 26, "%1.1s", NULL, STRING, 1, "redit flags indoors"},
{
 "1", "e", 3, 42, "%1.1s", NULL, STRING, 1, "redit flags lawful"},
{
 "1", "f", 3, 60, "%1.1s", NULL, STRING, 1, "redit flags nomagic"},
{
 "1", "g", 4, 26, "%1.1s", NULL, STRING, 1, "redit flags petshop"},
{
 "1", "h", 4, 42, "%1.1s", NULL, STRING, 1, "redit flags neutral"},
{
 "1", "i", 4, 60, "%1.1s", NULL, STRING, 1, "redit flags nodrop"},
{
 "1", "j", 5, 26, "%1.1s", NULL, STRING, 1, "redit flags safe"},
{
 "1", "k", 5, 42, "%1.1s", NULL, STRING, 1, "redit flags chaotic"},
{
 "1", "l", 5, 60, "%1.1s", NULL, STRING, 1, "redit flags nodropall"},
{
 "1", "m", 6, 26, "%1.1s", NULL, STRING, 1, "redit flags teleport"},
{
 "1", "n", 6, 42, "%1.1s", NULL, STRING, 1, "redit flags donation"},
{
 "1", "o", 6, 60, "%1.1s", NULL, STRING, 1, "redit flags norecall"},
{
 "1", "p", 7, 26, "%1.1s", NULL, STRING, 1, "redit flags private"},
{
 "1", "q", 7, 42, "%1.1s", NULL, STRING, 1, "redit flags solitary"},
{
 "1", "r", 7, 60, "%1.1s", NULL, STRING, 1, "redit flags noastral"},
{
 "1", "r", 7, 60, "%1.1s", NULL, STRING, 1, "redit flags astralshield"},
{
 "1", "s", 8, 26, "%1.1s", NULL, STRING, 1, "redit flags tunnel"},
{
 "1", "t", 8, 42, "%1.1s", NULL, STRING, 1, "redit flags silence"},
{
 "1", "u", 8, 60, "%1.1s", NULL, STRING, 1, "redit flags nosummon"},
{
 "1", "v", 9, 26, "%1.1s", NULL, STRING, 1, "redit flags clanstorage"},
{
 "1", "w", 9, 42, "%1.1s", NULL, STRING, 1, "redit flags logspeech"},
{
 "1", "x", 9, 60, "%1.1s", NULL, STRING, 1, "redit flags nofloor"},
{
 "2", "a", 11, 25, "%1.1s", NULL, STRING, 0, "redit sector 0"}, /* inside */
{
 "2", "b", 11, 44, "%1.1s", NULL, STRING, 0, "redit sector 3"}, /* forest */
{
 "2", "c", 11, 55, "%1.1s", NULL, STRING, 0, "redit sector 1"}, /* city   */
{
 "2", "d", 11, 68, "%1.1s", NULL, STRING, 0, "redit sector 4"}, /* hills  */
{
 "2", "e", 12, 25, "%1.1s", NULL, STRING, 0, "redit sector 5"}, /* mountain */
{
 "2", "f", 12, 44, "%1.1s", NULL, STRING, 0, "redit sector 6"}, /* water_s */
{
 "2", "g", 12, 55, "%1.1s", NULL, STRING, 0, "redit sector 9"}, /* air    */
{
 "2", "h", 12, 68, "%1.1s", NULL, STRING, 0, "redit sector 10"},  /* desert */
{
 "2", "i", 13, 25, "%1.1s", NULL, STRING, 0, "redit sector 11"},  /* dunno  */
{
 "2", "j", 13, 44, "%1.1s", NULL, STRING, 0, "redit sector 7"}, /* water_n */
{
 "2", "l", 13, 68, "%1.1s", NULL, STRING, 0, "redit sector 2"}, /* field  */
{"-", "a", 13, 2, "", NULL, STRING, 0, "rmenu a"},
{"-", "b", 13, 2, "", NULL, STRING, 0, "rmenu b"},
{"-", "c", 13, 2, "", NULL, STRING, 0, "rmenu c"},
{"-", "h", 13, 2, "", NULL, STRING, 0, "rmenu h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};


MENU_DATA obj_page_e_data[] = { {
                                 "1", "a", 2, 26, "%1.1s", NULL, STRING, 1, "oset %s flags evil"},
{
 "1", "b", 2, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antigood"},
{
 "1", "c", 2, 61, "%1.1s", NULL, STRING, 1, "oset %s flags nodrop"},
{
 "1", "d", 3, 26, "%1.1s", NULL, STRING, 1, "oset %s flags invis"},
{
 "1", "e", 3, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antievil"},
{
 "1", "f", 3, 61, "%1.1s", NULL, STRING, 1, "oset %s flags noremove"},
{
 "1", "g", 4, 26, "%1.1s", NULL, STRING, 1, "oset %s flags hidden"},
{
 "1", "h", 4, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antineutral"},
{
 "1", "i", 4, 61, "%1.1s", NULL, STRING, 1, "oset %s flags inventory"},
{
 "1", "j", 5, 12, "%1.1s", NULL, STRING, 1, "oset %s flags glow"},
{
 "1", "k", 5, 26, "%1.1s", NULL, STRING, 1, "oset %s flags bless"},
{
 "1", "l", 5, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antimage"},
{
 "1", "m", 5, 61, "%1.1s", NULL, STRING, 1, "oset %s flags donation"},
{
 "1", "n", 6, 12, "%1.1s", NULL, STRING, 1, "oset %s flags hum"},
{
 "1", "o", 6, 26, "%1.1s", NULL, STRING, 1, "oset %s flags metal"},
{
 "1", "p", 6, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antithief"},
{
 "1", "q", 6, 61, "%1.1s", NULL, STRING, 1, "oset %s flags clanobject"},
{
 "1", "r", 7, 12, "%1.1s", NULL, STRING, 1, "oset %s flags dark"},
{
 "1", "s", 7, 26, "%1.1s", NULL, STRING, 1, "oset %s flags organic"},
{
 "1", "t", 7, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antiwarrior"},
{
 "1", "u", 7, 61, "%1.1s", NULL, STRING, 1, "oset %s flags clancorpse"},
{
 "1", "v", 8, 12, "%1.1s", NULL, STRING, 1, "oset %s flags magic"},
{
 "1", "x", 8, 44, "%1.1s", NULL, STRING, 1, "oset %s flags anticleric"},
{
 "1", "y", 8, 61, "%1.1s", NULL, STRING, 1, "oset %s flags prototype"},
{
 "1", "z", 9, 12, "%1.1s", NULL, STRING, 1, "oset %s flags loyal"},
{
 "1", "B", 9, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antivampire"},
{
 "1", "C", 9, 61, "%1.1s", NULL, STRING, 1, "oset %s flags deathrot"},
{
 "1", "F", 10, 44, "%1.1s", NULL, STRING, 1, "oset %s flags antidruid"},

{
 "2", "a", 12, 24, "%1.1s", NULL, STRING, 1, "oset %s wear take"},
{
 "2", "b", 12, 39, "%1.1s", NULL, STRING, 1, "oset %s wear finger"},
{
 "2", "c", 12, 52, "%1.1s", NULL, STRING, 1, "oset %s wear neck"},
{
 "2", "d", 12, 64, "%1.1s", NULL, STRING, 1, "oset %s wear body"},
{
 "2", "e", 13, 24, "%1.1s", NULL, STRING, 1, "oset %s wear head"},
{
 "2", "f", 13, 39, "%1.1s", NULL, STRING, 1, "oset %s wear legs"},
{
 "2", "g", 13, 52, "%1.1s", NULL, STRING, 1, "oset %s wear feet"},
{
 "2", "h", 13, 64, "%1.1s", NULL, STRING, 1, "oset %s wear hands"},
{
 "2", "e", 14, 24, "%1.1s", NULL, STRING, 1, "oset %s wear arms"},
{
 "2", "f", 14, 39, "%1.1s", NULL, STRING, 1, "oset %s wear shield"},
{
 "2", "g", 14, 52, "%1.1s", NULL, STRING, 1, "oset %s wear about"},
{
 "2", "h", 14, 64, "%1.1s", NULL, STRING, 1, "oset %s wear waist"},
{
 "2", "b", 15, 12, "%1.1s", NULL, STRING, 1, "oset %s wear wrist"},
{
 "2", "c", 15, 24, "%1.1s", NULL, STRING, 1, "oset %s wear wield"},
{
 "2", "d", 15, 39, "%1.1s", NULL, STRING, 1, "oset %s wear hold"},
{
 "2", "d", 15, 52, "%1.1s", NULL, STRING, 1, "oset %s wear _dual_"},
{
 "2", "d", 15, 64, "%1.1s", NULL, STRING, 1, "oset %s wear ears"},
{
 "2", "d", 16, 64, "%1.1s", NULL, STRING, 1, "oset %s wear eyes"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA obj_page_d_data[] = { {
                                 "1", "a", 3, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected blind "},
{
 "1", "b", 3, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected det_invis"},
{
 "1", "c", 3, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected det_evil"},
{
 "1", "d", 4, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected det_magic"},
{
 "1", "e", 4, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected det_hidden"},
{
 "1", "f", 4, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected hold"},
{
 "1", "g", 5, 12, "%1.1s", NULL, STRING, 1, "oset %s affect affected sanctuary"},
{
 "1", "h", 5, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected faerie_fire"},
{
 "1", "i", 5, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected infrared"},
{
 "1", "j", 5, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected curse"},
{
 "1", "k", 6, 12, "%1.1s", NULL, STRING, 1, "oset %s affect affected flaming"},
{
 "1", "l", 6, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected poison"},
{
 "1", "m", 6, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected protect"},
{
 "1", "n", 6, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected paralysis"},
{
 "1", "o", 7, 12, "%1.1s", NULL, STRING, 1, "oset %s affect affected sleep"},
{
 "1", "p", 7, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected hide"},
{
 "1", "q", 7, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected sneak"},
{
 "1", "r", 7, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected charm"},
{
 "1", "s", 8, 12, "%1.1s", NULL, STRING, 1, "oset %s affect affected flying"},
{
 "1", "t", 8, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected passdoor"},
{
 "1", "u", 8, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected truesight"},
{
 "1", "v", 8, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected det_traps"},
{
 "1", "w", 9, 12, "%1.1s", NULL, STRING, 1, "oset %s affect affected scrying"},
{
 "1", "x", 9, 29, "%1.1s", NULL, STRING, 1, "oset %s affect affected fireshield"},
{
 "1", "y", 9, 47, "%1.1s", NULL, STRING, 1, "oset %s affect affected shockshield"},
{
 "1", "z", 9, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected floating"},
{"1", "A", 10, 63, "%1.1s", NULL, STRING, 1, "oset %s affect affected invisible"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
{" ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};




/* the val#'s weren't dereferencing right as short ints *boggle* */
MENU_DATA obj_page_a_data[] = { {
                                 "1", "a", 2, 20, "%-49.49s", NULL, STRING, 2, "oset %s name %s"},
{
 "1", "b", 3, 20, "%-49.49s", NULL, STRING, 2, "oset %s short %s"},
{
 "1", "c", 4, 10, "%-59.69s", NULL, STRING, 2, "oset %s long %s"},
{
 "1", "d", 5, 15, "%-49.59s", NULL, STRING, 2, "oset %s actiondesc %s"},
{
 "2", "a", 9, 13, "%5.5d", NULL, INT, 2, "oset %s value0 %s"},
{
 "2", NO_COMMAND, 9, 23, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{
 "2", "b", 10, 13, "%5.5d", NULL, INT, 2, "oset %s value1 %s"},
{
 "2", NO_COMMAND, 10, 23, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{
 "2", "c", 11, 13, "%5.5d", NULL, INT, 2, "oset %s value2 %s"},
{
 "2", NO_COMMAND, 11, 23, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{
 "2", "d", 12, 13, "%5.5d", NULL, INT, 2, "oset %s value3 %s"},
{
 "2", NO_COMMAND, 12, 23, "%-19.19s", NULL, STRING, 0, NO_COMMAND},
{
 "3", "a", 9, 59, "%5.5hd", NULL, SH_INT, 2, "oset %s weight %s"},
{
 "3", "b", 10, 59, "%5.5hd", NULL, SH_INT, 2, "oset %s cost %s"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA obj_page_b_data[] = { {
                                 "1", "a", 2, 23, "%1.1s", NULL, STRING, 1, "oset %s type none"},
{
 "1", "b", 2, 42, "%1.1s", NULL, STRING, 1, "oset %s type fountain"},
{
 "1", "c", 2, 66, "%1.1s", NULL, STRING, 1, "oset %s type furniture"},
{
 "1", "d", 3, 23, "%1.1s", NULL, STRING, 1, "oset %s type armor"},
{
 "1", "e", 3, 42, "%1.1s", NULL, STRING, 1, "oset %s type food"},
{
 "1", "f", 3, 66, "%1.1s", NULL, STRING, 1, "oset %s type money"},
{
 "1", "g", 4, 23, "%1.1s", NULL, STRING, 1, "oset %s type potion"},
{
 "1", "h", 4, 42, "%1.1s", NULL, STRING, 1, "oset %s type pullchain"},
{
 "1", "i", 4, 66, "%1.1s", NULL, STRING, 1, "oset %s type weapon"},
{
 "1", "j", 5, 9, "%1.1s", NULL, STRING, 1, "oset %s type map"},
{
 "1", "k", 5, 23, "%1.1s", NULL, STRING, 1, "oset %s type light"},
{
 "1", "l", 5, 42, "%1.1s", NULL, STRING, 1, "oset %s type button"},
{
 "1", "m", 5, 66, "%1.1s", NULL, STRING, 1, "oset %s type treasure"},
{
 "1", "n", 6, 9, "%1.1s", NULL, STRING, 1, "oset %s type herb"},
{
 "1", "o", 6, 23, "%1.1s", NULL, STRING, 1, "oset %s type trash"},
{
 "1", "p", 6, 42, "%1.1s", NULL, STRING, 1, "oset %s type switch"},
{
 "1", "q", 6, 66, "%1.1s", NULL, STRING, 1, "oset %s type container"},
{
 "1", "r", 7, 9, "%1.1s", NULL, STRING, 1, "oset %s type wand"},
{
 "1", "s", 7, 23, "%1.1s", NULL, STRING, 1, "oset %s type scroll"},
{
 "1", "t", 7, 42, "%1.1s", NULL, STRING, 1, "oset %s type staff"},
{
 "1", "u", 7, 66, "%1.1s", NULL, STRING, 1, "oset %s type bloodstain"},
{
 "1", "v", 8, 9, "%1.1s", NULL, STRING, 1, "oset %s type pill"},
{
 "1", "w", 8, 23, "%1.1s", NULL, STRING, 1, "oset %s type blood"},
{
 "1", "x", 8, 42, "%1.1s", NULL, STRING, 1, "oset %s type dial"},
{
 "1", "y", 8, 66, "%1.1s", NULL, STRING, 1, "oset %s type portal"},
{
 "1", "z", 9, 9, "%1.1s", NULL, STRING, 1, "oset %s type key"},
{
 "1", "A", 9, 23, "%1.1s", NULL, STRING, 1, "oset %s type incense"},
{
 "1", "B", 9, 42, "%1.1s", NULL, STRING, 1, "oset %s type lever"},
{
 "1", "C", 9, 66, "%1.1s", NULL, STRING, 1, "oset %s type corpse_pc"},
{
 "1", "D", 10, 9, "%1.1s", NULL, STRING, 1, "oset %s type pipe"},
{
 "1", "E", 10, 23, "%1.1s", NULL, STRING, 1, "oset %s type scraps"},
{
 "1", "F", 10, 42, "%1.1s", NULL, STRING, 1, "oset %s type trap"},
{
 "1", "G", 10, 66, "%1.1s", NULL, STRING, 1, "oset %s type corpse"},
{
 "1", "H", 11, 9, "%1.1s", NULL, STRING, 1, "oset %s type book"},
{
 "1", "I", 11, 23, "%1.1s", NULL, STRING, 1, "oset %s type match"},
{
 "1", "J", 11, 42, "%1.1s", NULL, STRING, 1, "oset %s type drinkcon"},
{
 "1", "K", 11, 66, "%1.1s", NULL, STRING, 1, "oset %s type portal"},
{
 "1", "L", 12, 9, "%1.1s", NULL, STRING, 1, "oset %s type pen"},
{
 "1", "M", 12, 23, "%1.1s", NULL, STRING, 1, "oset %s type fire"},
{
 "1", "N", 12, 42, "%1.1s", NULL, STRING, 1, "oset %s type herbcon"},
{
 "1", "O", 12, 66, "%1.1s", NULL, STRING, 1, "oset %s type _fireweapon"},
{
 "1", "P", 13, 9, "%1.1s", NULL, STRING, 1, "oset %s type boat"},
{
 "1", "Q", 13, 23, "%1.1s", NULL, STRING, 1, "oset %s type rune"},
{
 "1", "R", 13, 42, "%1.1s", NULL, STRING, 1, "oset %s type runepouch"},
{
 "1", "S", 13, 66, "%1.1s", NULL, STRING, 1, "oset %s type _missile"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA obj_page_c_data[] = { {
                                 "1", "a", 2, 23, "%1.1s", NULL, STRING, 1, "oset %s affect none"},
{
 "1", "b", 2, 44, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect save_poison %s"},
{
 "1", "c", 2, 65, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect age %s"},
{
 "1", "d", 3, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect strength %s"},
{
 "1", "e", 3, 44, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect save_rod %s"},
{
 "1", "f", 3, 65, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect class %s"},
{
 "1", "g", 4, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect intelligence %s"},
{
 "1", "h", 4, 44, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect save_para %s"},
{
 "1", "i", 4, 65, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect level %s"},
{
 "1", "j", 5, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect wisdom %s"},
{
 "1", "k", 5, 44, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect save_breath %s"},
{
 "1", "l", 5, 65, "%+-1.1hd", NULL, SH_INT, 2, "oset %s affect sex %s"},
{
 "1", "m", 6, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect speed %s"},
{
 "1", "n", 6, 44, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect save_spell %s"},
{
 "1", "o", 6, 65, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect height %s"},
{
 "1", "p", 7, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect constitution %s"},
{
 "1", "r", 7, 65, "%+-3.3hd", NULL, SH_INT, 2, "oset %s affect weight %s"},
{
 "1", "s", 8, 23, "%+-2.2hd", NULL, SH_INT, 2, "oset %s affect charisma %s"},

{
 "1", "v", 9, 12, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect mana %s"},
{
 "1", "w", 9, 41, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect armor %s"},
{
 "1", "y", 10, 12, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect hit %s"},
{
 "1", "z", 10, 41, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect hitroll %s"},
{
 "1", "A", 10, 63, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect gold %s"},
{
 "1", "B", 11, 12, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect move %s"},
{
 "1", "C", 11, 41, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect damroll %s"},
{
 "1", "D", 11, 63, "%+-4.4hd", NULL, SH_INT, 2, "oset %s affect experience %s"},
{
 "2", "a", 13, 22, "%3.3s", NULL, STRING, 2, "oset %s %s fire"},
{
 "2", "b", 13, 34, "%3.3s", NULL, STRING, 2, "oset %s %s cold"},
{
 "2", "c", 13, 46, "%3.3s", NULL, STRING, 2, "oset %s %s electricity"},
{
 "2", "d", 13, 58, "%3.3s", NULL, STRING, 2, "oset %s %s energy"},
{
 "2", "e", 13, 70, "%3.3s", NULL, STRING, 2, "oset %s %s poison"},
{
 "2", "f", 14, 22, "%3.3s", NULL, STRING, 2, "oset %s %s blunt"},
{
 "2", "g", 14, 34, "%3.3s", NULL, STRING, 2, "oset %s %s pierce"},
{
 "2", "h", 14, 46, "%3.3s", NULL, STRING, 2, "oset %s %s slash"},
{
 "2", "i", 14, 58, "%3.3s", NULL, STRING, 2, "oset %s %s acid"},
{
 "2", "j", 14, 70, "%3.3s", NULL, STRING, 2, "oset %s %s nonmagic"},
{
 "2", "k", 15, 22, "%3.3s", NULL, STRING, 2, "oset %s %s drain"},
{
 "2", "l", 15, 34, "%3.3s", NULL, STRING, 2, "oset %s %s sleep"},
{
 "2", "m", 15, 46, "%3.3s", NULL, STRING, 2, "oset %s %s charm"},
{
 "2", "n", 15, 58, "%3.3s", NULL, STRING, 2, "oset %s %s hold"},
{
 "2", "o", 15, 70, "%3.3s", NULL, STRING, 2, "oset %s %s magic"},
{
 "2", "p", 16, 10, "%3.3s", NULL, STRING, 2, "oset %s %s plus1"},
{
 "2", "q", 16, 22, "%3.3s", NULL, STRING, 2, "oset %s %s plus2"},
{
 "2", "r", 16, 34, "%3.3s", NULL, STRING, 2, "oset %s %s plus3"},
{
 "2", "s", 16, 46, "%3.3s", NULL, STRING, 2, "oset %s %s plus4"},
{
 "2", "t", 16, 58, "%3.3s", NULL, STRING, 2, "oset %s %s plus5"},
{
 "2", "u", 16, 70, "%3.3s", NULL, STRING, 2, "oset %s %s plus6"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "omenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "omenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "omenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "omenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "omenu %s e"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "omenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};



MENU_DATA mob_page_a_data[] = { {
                                 "1", "a", 2, 20, "%-59.59s", NULL, STRING, 2, "mset %s name %s"},
{
 "1", "b", 3, 20, "%-59.59s", NULL, STRING, 2, "mset %s short %s"},
{
 "1", "c", 4, 10, "%-69.68s", NULL, STRING, 2, "mset %s long %s"},
{
 "1", "d", 5, 10, "%-69.68s", NULL, STRING, 2, "mset %s description %s"},
{
 "2", "a", 9, 11, "%5.5hd", NULL, SH_INT, 2, "mset %s vnum %s"},
{
 "2", "b", 10, 11, "%3.3hd", NULL, SH_INT, 2, "mset %s level %s"},
{
 "2", "c", 11, 11, "%-10.10s", NULL, STRING, 2, "mset (obsolete) %s class %s"},
{
 "2", "d", 12, 11, "%-10.10s", NULL, STRING, 2, "mset %s race %s"},
{
 "2", "e", 13, 11, "%-6.6s", NULL, STRING, 2, "mset %s sex %s"},
{
 "2", "f", 14, 11, "%d", NULL, INT, 2, "mset %s gold %s"},
{
 "2", "g", 15, 11, "%+-4.4hd", NULL, SH_INT, 2, "mset %s align %s"},
{
 "3", "a", 9, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s str %s"},
{
 "3", "b", 10, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s int %s"},
{
 "3", "c", 11, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s wis %s"},
{
 "3", "d", 12, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s dex %s"},
{
 "3", "e", 13, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s con %s"},
{
 "3", "f", 14, 31, "%2.2hd", NULL, SH_INT, 2, "mset %s cha %s"},
{
 "3", "g", 15, 31, "%4.4hd", NULL, SH_INT, 2, "mset %s armor %s"},
{
 "4", "a", 9, 49, "%1.1s", NULL, STRING, 1, "mset %s class 0"},
{
 "4", "b", 9, 68, "%1.1s", NULL, STRING, 1, "mset %s class 1"},
{
 "4", "c", 10, 49, "%1.1s", NULL, STRING, 1, "mset %s class 2"},
{
 "4", "d", 10, 68, "%1.1s", NULL, STRING, 1, "mset %s class 3"},
{
 "4", "e", 11, 49, "%1.1s", NULL, STRING, 1, "mset %s class 4"},
{
 "4", "f", 11, 68, "%1.1s", NULL, STRING, 1, "mset %s class 5"},
{
 "4", "g", 12, 49, "%1.1s", NULL, STRING, 1, "mset %s class 6"},
{
 "4", "h", 12, 68, "%1.1s", NULL, STRING, 1, "mset %s class 20"},
{
 "4", "i", 13, 49, "%1.1s", NULL, STRING, 1, "mset %s class 21"},
{
 "4", "j", 13, 68, "%1.1s", NULL, STRING, 1, "mset %s class 22"},
{
 "4", "k", 14, 49, "%1.1s", NULL, STRING, 1, "mset %s class 23"},
{
 "4", "l", 14, 68, "%1.1s", NULL, STRING, 1, "mset %s class 24"},
{
 "4", "m", 15, 49, "%1.1s", NULL, STRING, 1, "mset %s class 25"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{" ", " ", 0, 0, " ", NULL, ( int )NULL, 1, NULL}
};

MENU_DATA mob_page_f_data[] = { {"1", "a", 2, 27, "%1.1s", NULL, STRING, 1, "mset %s race human"},
{"1", "b", 2, 42, "%1.1s", NULL, STRING, 1, "mset %s race neanderthal"},
{"1", "c", 2, 57, "%1.1s", NULL, STRING, 1, "mset %s race avis"},
{"1", "d", 2, 72, "%1.1s", NULL, STRING, 1, "mset %s race amphibian"},

{"1", "e", 3, 27, "%1.1s", NULL, STRING, 1, "mset %s race elf"},
{"1", "f", 3, 42, "%1.1s", NULL, STRING, 1, "mset %s race orc"},
{"1", "g", 3, 57, "%1.1s", NULL, STRING, 1, "mset %s race bugbear"},
{"1", "h", 3, 72, "%1.1s", NULL, STRING, 1, "mset %s race bovine"},

{"1", "i", 4, 27, "%1.1s", NULL, STRING, 1, "mset %s race dwarf"},
{"1", "j", 4, 42, "%1.1s", NULL, STRING, 1, "mset %s race skeleton"},
{"1", "k", 4, 57, "%1.1s", NULL, STRING, 1, "mset %s race dragon"},
{"1", "l", 4, 72, "%1.1s", NULL, STRING, 1, "mset %s race canine"},

{"1", "m", 5, 12, "%1.1s", NULL, STRING, 1, "mset %s race ant"},
{"1", "n", 5, 27, "%1.1s", NULL, STRING, 1, "mset %s race halfling"},
{"1", "o", 5, 42, "%1.1s", NULL, STRING, 1, "mset %s race thoul"},
{"1", "p", 5, 57, "%1.1s", NULL, STRING, 1, "mset %s race rustmonster"},
{"1", "q", 5, 72, "%1.1s", NULL, STRING, 1, "mset %s race crustacean"},

{"1", "r", 6, 12, "%1.1s", NULL, STRING, 1, "mset %s race bee"},
{"1", "s", 6, 27, "%1.1s", NULL, STRING, 1, "mset %s race pixie"},
{"1", "t", 6, 42, "%1.1s", NULL, STRING, 1, "mset %s race undead"},
{"1", "u", 6, 57, "%1.1s", NULL, STRING, 1, "mset %s race shadow"},
{"1", "v", 6, 72, "%1.1s", NULL, STRING, 1, "mset %s race feline"},

{"1", "w", 7, 12, "%1.1s", NULL, STRING, 1, "mset %s race beetle"},
{"1", "x", 7, 27, "%1.1s", NULL, STRING, 1, "mset %s race vampire"},
{"1", "y", 7, 42, "%1.1s", NULL, STRING, 1, "mset %s race zombie"},
{"1", "z", 7, 57, "%1.1s", NULL, STRING, 1, "mset %s race shapeshifter"},
{"1", "A", 7, 72, "%1.1s", NULL, STRING, 1, "mset %s race fish"},

{"1", "B", 8, 12, "%1.1s", NULL, STRING, 1, "mset %s race fly"},
{"1", "C", 8, 27, "%1.1s", NULL, STRING, 1, "mset %s race gargoyle"},
{"1", "D", 8, 42, "%1.1s", NULL, STRING, 1, "mset %s race ape"},
{"1", "E", 8, 57, "%1.1s", NULL, STRING, 1, "mset %s race shrieker"},
{"1", "F", 8, 72, "%1.1s", NULL, STRING, 1, "mset %s race insect"},

{"1", "G", 9, 12, "%1.1s", NULL, STRING, 1, "mset %s race locust"},
{"1", "H", 9, 27, "%1.1s", NULL, STRING, 1, "mset %s race ghoul"},
{"1", "I", 9, 42, "%1.1s", NULL, STRING, 1, "mset %s race baboon"},
{"1", "J", 9, 57, "%1.1s", NULL, STRING, 1, "mset %s race stirge"},
{"1", "K", 9, 72, "%1.1s", NULL, STRING, 1, "mset %s race mammal"},

{"1", "L", 10, 12, "%1.1s", NULL, STRING, 1, "mset %s race snake"},
{"1", "M", 10, 27, "%1.1s", NULL, STRING, 1, "mset %s race gnoll"},
{"1", "N", 10, 42, "%1.1s", NULL, STRING, 1, "mset %s race bat"},
{"1", "O", 10, 57, "%1.1s", NULL, STRING, 1, "mset %s race wight"},
{"1", "P", 10, 72, "%1.1s", NULL, STRING, 1, "mset %s race porcine"},

{"1", "Q", 11, 12, "%1.1s", NULL, STRING, 1, "mset %s race spider"},
{"1", "R", 11, 27, "%1.1s", NULL, STRING, 1, "mset %s race gnome"},
{"1", "S", 11, 42, "%1.1s", NULL, STRING, 1, "mset %s race bear"},
{"1", "U", 11, 72, "%1.1s", NULL, STRING, 1, "mset %s race reptile"},

{"1", "V", 12, 12, "%1.1s", NULL, STRING, 1, "mset %s race worm"},
{"1", "W", 12, 27, "%1.1s", NULL, STRING, 1, "mset %s race goblin"},
{"1", "X", 12, 42, "%1.1s", NULL, STRING, 1, "mset %s race boar"},
{"1", "Z", 12, 72, "%1.1s", NULL, STRING, 1, "mset %s race rodent"},

{"1", "1", 13, 27, "%1.1s", NULL, STRING, 1, "mset %s race golem"},
{"1", "2", 13, 42, "%1.1s", NULL, STRING, 1, "mset %s race cat"},
{"1", "4", 13, 72, "%1.1s", NULL, STRING, 1, "mset %s race troglodyte"},

{"1", "5", 14, 12, "%1.1s", NULL, STRING, 1, "mset %s race gelatin"},
{"1", "6", 14, 27, "%1.1s", NULL, STRING, 1, "mset %s race gorgon"},
{"1", "7", 14, 42, "%1.1s", NULL, STRING, 1, "mset %s race dog"},
{"1", "9", 14, 72, "%1.1s", NULL, STRING, 1, "mset %s race spirit"},

{"1", "!", 15, 12, "%1.1s", NULL, STRING, 1, "mset %s race mold"},
{"1", "@", 15, 27, "%1.1s", NULL, STRING, 1, "mset %s race harpy"},
{"1", "#", 15, 42, "%1.1s", NULL, STRING, 1, "mset %s race ferret"},
{"1", "%", 15, 72, "%1.1s", NULL, STRING, 1, "mset %s race magical"},

{"1", "^", 16, 12, "%1.1s", NULL, STRING, 1, "mset %s race ooze"},
{"1", "&", 16, 27, "%1.1s", NULL, STRING, 1, "mset %s race hobgoblin"},
{"1", "*", 16, 42, "%1.1s", NULL, STRING, 1, "mset %s race horse"},

{"1", "-", 17, 12, "%1.1s", NULL, STRING, 1, "mset %s race slime"},
{"1", "_", 17, 27, "%1.1s", NULL, STRING, 1, "mset %s race kobold"},
{"1", "+", 17, 42, "%1.1s", NULL, STRING, 1, "mset %s race mule"},

{"1", "~", 18, 27, "%1.1s", NULL, STRING, 1, "mset %s race lizardman"},
{"1", "`", 18, 42, "%1.1s", NULL, STRING, 1, "mset %s race rat"},

{"1", "]", 19, 27, "%1.1s", NULL, STRING, 1, "mset %s race lycanthrope"},
{"1", ":", 19, 42, "%1.1s", NULL, STRING, 1, "mset %s race shrew"},

{"1", ",", 20, 27, "%1.1s", NULL, STRING, 1, "mset %s race minotaur"},
{"1", ">", 20, 42, "%1.1s", NULL, STRING, 1, "mset %s race wolf"},

{"-", "a", 22, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{" ", " ", 0, 0, " ", NULL, ( int )NULL, 1, NULL}
};

MENU_DATA mob_page_b_data[] = { {
                                 "1", "a", 2, 29, "%1.1s", NULL, STRING, 1, "mset %s flags sentinel"},
{
 "1", "b", 2, 47, "%1.1s", NULL, STRING, 1, "mset %s flags scavenger"},
{
 "1", "c", 2, 63, "%1.1s", NULL, STRING, 1, "mset %s flags aggressive"},
{
 "1", "d", 3, 29, "%1.1s", NULL, STRING, 1, "mset %s flags stayarea"},
{
 "1", "e", 3, 47, "%1.1s", NULL, STRING, 1, "mset %s flags wimpy"},
{
 "1", "f", 3, 63, "%1.1s", NULL, STRING, 1, "mset %s flags pet"},
{
 "1", "g", 4, 12, "%1.1s", NULL, STRING, 1, "mset %s flags train"},
{
 "1", "h", 4, 29, "%1.1s", NULL, STRING, 1, "mset %s flags practice"},
{
 "1", "i", 4, 47, "%1.1s", NULL, STRING, 1, "mset %s flags immortal"},
{
 "1", "j", 4, 63, "%1.1s", NULL, STRING, 1, "mset %s flags deadly"},
{
 "1", "k", 5, 12, "%1.1s", NULL, STRING, 1, "mset %s flags polyself"},
{
 "1", "l", 5, 29, "%1.1s", NULL, STRING, 1, "mset %s flags meta_aggr"},
{
 "1", "m", 5, 47, "%1.1s", NULL, STRING, 1, "mset %s flags guardian"},
{
 "1", "n", 5, 63, "%1.1s", NULL, STRING, 1, "mset %s flags running"},
{
 "1", "o", 6, 12, "%1.1s", NULL, STRING, 1, "mset %s flags nowander"},
{
 "1", "p", 6, 29, "%1.1s", NULL, STRING, 1, "mset %s flags mountable"},
{
 "1", "q", 6, 47, "%1.1s", NULL, STRING, 1, "mset %s flags mounted"},
{
 "2", "a", 8, 29, "%1.1s", NULL, STRING, 1, "mset %s affected blind"},
{
 "2", "b", 8, 47, "%1.1s", NULL, STRING, 1, "mset %s affected detect_invis"},
{
 "2", "c", 8, 63, "%1.1s", NULL, STRING, 1, "mset %s affected detect_evil"},
{
 "2", "d", 9, 29, "%1.1s", NULL, STRING, 1, "mset %s affected detect_magic"},
{
 "2", "e", 9, 47, "%1.1s", NULL, STRING, 1, "mset %s affected detect_hidden"},
{
 "2", "f", 9, 63, "%1.1s", NULL, STRING, 1, "mset %s affected _hold"},
{
 "2", "g", 10, 12, "%1.1s", NULL, STRING, 1, "mset %s affected sanctuary"},
{
 "2", "h", 10, 29, "%1.1s", NULL, STRING, 1, "mset %s affected faerie_fire"},
{
 "2", "i", 10, 47, "%1.1s", NULL, STRING, 1, "mset %s affected infrared"},
{
 "2", "j", 10, 63, "%1.1s", NULL, STRING, 1, "mset %s affected curse"},
{
 "2", "k", 11, 12, "%1.1s", NULL, STRING, 1, "mset %s affected flaming"},
{
 "2", "l", 11, 29, "%1.1s", NULL, STRING, 1, "mset %s affected poison"},
{
 "2", "m", 11, 47, "%1.1s", NULL, STRING, 1, "mset %s affected protect"},
{
 "2", "n", 11, 63, "%1.1s", NULL, STRING, 1, "mset %s affected _paralysis"},
{
 "2", "o", 12, 12, "%1.1s", NULL, STRING, 1, "mset %s affected sleep"},
{
 "2", "p", 12, 29, "%1.1s", NULL, STRING, 1, "mset %s affected hide"},
{
 "2", "q", 12, 47, "%1.1s", NULL, STRING, 1, "mset %s affected sneak"},
{
 "2", "r", 12, 63, "%1.1s", NULL, STRING, 1, "mset %s affected charm"},
{
 "2", "s", 13, 12, "%1.1s", NULL, STRING, 1, "mset %s affected flying"},
{
 "2", "t", 13, 29, "%1.1s", NULL, STRING, 1, "mset %s affected pass_door"},
{
 "2", "u", 13, 47, "%1.1s", NULL, STRING, 1, "mset %s affected truesight"},
{
 "2", "v", 13, 63, "%1.1s", NULL, STRING, 1, "mset %s affected detect_traps"},
{
 "2", "w", 14, 12, "%1.1s", NULL, STRING, 1, "mset %s affected scrying"},
{
 "2", "x", 14, 29, "%1.1s", NULL, STRING, 1, "mset %s affected fireshield"},
{
 "2", "y", 14, 47, "%1.1s", NULL, STRING, 1, "mset %s affected shockshield"},
{
 "2", "z", 14, 63, "%1.1s", NULL, STRING, 1, "mset %s affected floating"},
{
 "2", "A", 15, 12, "%1.1s", NULL, STRING, 1, "mset %s affected invisible"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 1, NULL}
};

MENU_DATA mob_page_c_data[] = { {
                                 "1", "a", 2, 26, "%1.1s", NULL, STRING, 1, "mset %s attack bite"},
{
 "1", "b", 2, 42, "%1.1s", NULL, STRING, 1, "mset %s attack claws"},
{
 "1", "c", 2, 68, "%1.1s", NULL, STRING, 1, "mset %s attack firebreath"},
{
 "1", "d", 3, 26, "%1.1s", NULL, STRING, 1, "mset %s attack bash"},
{
 "1", "e", 3, 42, "%1.1s", NULL, STRING, 1, "mset %s attack stun"},
{
 "1", "f", 3, 68, "%1.1s", NULL, STRING, 1, "mset %s attack acidbreath"},
{
 "1", "g", 4, 11, "%1.1s", NULL, STRING, 1, "mset %s attack drain"},
{
 "1", "h", 4, 26, "%1.1s", NULL, STRING, 1, "mset %s attack kick"},
{
 "1", "i", 4, 42, "%1.1s", NULL, STRING, 1, "mset %s attack feed"},
{
 "1", "j", 4, 68, "%1.1s", NULL, STRING, 1, "mset %s attack gasbreath"},
{
 "1", "k", 5, 11, "%1.1s", NULL, STRING, 1, "mset %s attack poison"},
{
 "1", "l", 5, 26, "%1.1s", NULL, STRING, 1, "mset %s attack gaze"},
{
 "1", "m", 5, 42, "%1.1s", NULL, STRING, 1, "mset %s attack harm"},
{
 "1", "n", 5, 68, "%1.1s", NULL, STRING, 1, "mset %s attack frostbreath"},
{
 "1", "o", 6, 11, "%1.1s", NULL, STRING, 1, "mset %s attack curse"},
{
 "1", "p", 6, 26, "%1.1s", NULL, STRING, 1, "mset %s attack backstab"},
{
 "1", "q", 6, 42, "%1.1s", NULL, STRING, 1, "mset %s attack punch"},
{
 "1", "r", 6, 68, "%1.1s", NULL, STRING, 1, "mset %s attack lightnbreath"},
{
 "1", "s", 7, 11, "%1.1s", NULL, STRING, 1, "mset %s attack weaken"},
{
 "1", "t", 7, 26, "%1.1s", NULL, STRING, 1, "mset %s attack tail"},
{
 "1", "u", 7, 42, "%1.1s", NULL, STRING, 1, "mset %s attack sting"},
{
 "1", "v", 7, 68, "%1.1s", NULL, STRING, 1, "mset %s attack causeserious"},
{
 "1", "w", 8, 11, "%1.1s", NULL, STRING, 1, "mset %s attack trip"},
{
 "1", "x", 8, 26, "%1.1s", NULL, STRING, 1, "mset %s attack fireball"},
{
 "1", "y", 8, 42, "%1.1s", NULL, STRING, 1, "mset %s attack gouge"},
{
 "1", "z", 8, 68, "%1.1s", NULL, STRING, 1, "mset %s attack causecritical"},
{
 "1", "B", 9, 29, "%1.1s", NULL, STRING, 1, "mset %s attack flamestrike"},
{
 "1", "D", 9, 68, "%1.1s", NULL, STRING, 1, "mset %s attack earthquake"},
{
 "1", "F", 10, 29, "%1.1s", NULL, STRING, 1, "mset %s attack colorspray"},
{
 "1", "G", 10, 48, "%1.1s", NULL, STRING, 1, "mset %s attack nasty"},
{
 "1", "H", 10, 68, "%1.1s", NULL, STRING, 1, "mset %s attack blindness"},
{
 "2", "a", 12, 31, "%1.1s", NULL, STRING, 1, "mset %s defense sanctuary"},
{
 "2", "b", 12, 51, "%1.1s", NULL, STRING, 1, "mset %s defense curelight"},
{
 "2", "c", 12, 70, "%1.1s", NULL, STRING, 1, "mset %s defense dispelevil"},
{
 "2", "d", 13, 31, "%1.1s", NULL, STRING, 1, "mset %s defense shield"},
{
 "2", "e", 13, 51, "%1.1s", NULL, STRING, 1, "mset %s defense cureserious"},
{
 "2", "f", 13, 70, "%1.1s", NULL, STRING, 1, "mset %s defense dispelmagic"},
{
 "2", "g", 14, 11, "%1.1s", NULL, STRING, 1, "mset %s defense dodge"},
{
 "2", "h", 14, 31, "%1.1s", NULL, STRING, 1, "mset %s defense fireshield"},
{
 "2", "i", 14, 51, "%1.1s", NULL, STRING, 1, "mset %s defense curecritical"},
{
 "2", "j", 14, 70, "%1.1s", NULL, STRING, 1, "mset %s defense teleport"},
{
 "2", "k", 15, 11, "%1.1s", NULL, STRING, 1, "mset %s defense parry"},
{
 "2", "l", 15, 31, "%1.1s", NULL, STRING, 1, "mset %s defense shockshield"},
{
 "2", "m", 15, 51, "%1.1s", NULL, STRING, 1, "mset %s defense heal"},
{
 "2", "n", 15, 70, "%1.1s", NULL, STRING, 1, "mset %s defense bless"},
{
 "2", "o", 16, 11, "%1.1s", NULL, STRING, 1, "mset %s defense disarm"},
{
 "2", "p", 16, 31, "%1.1s", NULL, STRING, 1, "mset %s defense stoneskin"},
{
 "2", "q", 16, 51, "%1.1s", NULL, STRING, 1, "mset %s defense monsum1"},
{
 "2", "r", 16, 70, "%1.1s", NULL, STRING, 1, "mset %s defense monsum2"},
{
 "2", "u", 17, 51, "%1.1s", NULL, STRING, 1, "mset %s defense monsum3"},
{
 "2", "v", 17, 70, "%1.1s", NULL, STRING, 1, "mset %s defense monsum4"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 1, NULL}
};

MENU_DATA mob_page_d_data[] = { {
                                 "1", "a", 2, 36, "%+-2.2hd", NULL, SH_INT, 2, "mset %s sav1 %s"},
{
 "1", "b", 2, 63, "%+-2.2d", NULL, SH_INT, 2, "mset %s sav2 %s"},
{
 "1", "c", 3, 36, "%+-2.2hd", NULL, SH_INT, 2, "mset %s sav3 %s"},
{
 "1", "d", 3, 63, "%+-2.2hd", NULL, SH_INT, 2, "mset %s sav4 %s"},
{
 "1", "e", 4, 36, "%+-2.2hd", NULL, SH_INT, 2, "mset %s sav5 %s"},
{
 "2", "a", 6, 20, "%1.1s", NULL, STRING, 1, "mset %s part fins"},
{
 "2", "b", 6, 31, "%1.1s", NULL, STRING, 1, "mset %s part ear"},
{
 "2", "c", 6, 42, "%1.1s", NULL, STRING, 1, "mset %s part eye"},
{
 "2", "d", 6, 59, "%1.1s", NULL, STRING, 1, "mset %s part long_tongue"},
{
 "2", "e", 6, 72, "%1.1s", NULL, STRING, 1, "mset %s part scales"},
{
 "2", "f", 7, 20, "%1.1s", NULL, STRING, 1, "mset %s part tail"},
{
 "2", "g", 7, 31, "%1.1s", NULL, STRING, 1, "mset %s part arms"},
{
 "2", "h", 7, 42, "%1.1s", NULL, STRING, 1, "mset %s part legs"},
{
 "2", "i", 7, 59, "%1.1s", NULL, STRING, 1, "mset %s part tentacles"},
{
 "2", "j", 7, 72, "%1.1s", NULL, STRING, 1, "mset %s part brains"},
{
 "2", "k", 8, 20, "%1.1s", NULL, STRING, 1, "mset %s part guts"},
{
 "2", "l", 8, 31, "%1.1s", NULL, STRING, 1, "mset %s part head"},
{
 "2", "m", 8, 42, "%1.1s", NULL, STRING, 1, "mset %s part feet"},
{
 "2", "n", 8, 59, "%1.1s", NULL, STRING, 1, "mset %s part eyestalks"},
{
 "2", "o", 8, 72, "%1.1s", NULL, STRING, 1, "mset %s part fingers"},
{
 "2", "p", 9, 21, "%1.1s", NULL, STRING, 1, "mset %s part wings"},
{
 "2", "q", 9, 32, "%1.1s", NULL, STRING, 1, "mset %s part hands"},
{
 "2", "r", 9, 43, "%1.1s", NULL, STRING, 1, "mset %s part heart"},
{
 "2", "u", 10, 21, "%1.1s", NULL, STRING, 1, "mset %s part claws"},
{
 "2", "v", 10, 32, "%1.1s", NULL, STRING, 1, "mset %s part horns"},
{
 "2", "w", 10, 43, "%1.1s", NULL, STRING, 1, "mset %s part tusks"},
{
 "2", "z", 11, 26, "%1.1s", NULL, STRING, 1, "mset %s part tail-attack"},
{
 "2", "A", 11, 49, "%1.1s", NULL, STRING, 1, "mset %s part sharp-scales"},
{
 "3", "a", 13, 27, "%3.3hd", NULL, SH_INT, 2, "mset %s numattacks %s"},
{
 "3", "b", 13, 48, "%s", NULL, STRING, 2, "mset %s hitdie %s"},
{
 "3", "c", 14, 25, "%5.5hd", NULL, SH_INT, 2, "mset %s hitroll %s"},
{
 "3", "d", 15, 25, "%5.5hd", NULL, SH_INT, 2, "mset %s damroll %s"},
{
 "3", "e", 15, 48, "%s", NULL, STRING, 2, "mset %s damdie %s"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA mob_page_e_data[] = { {
                                 "1", "a", 2, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_fido"},
{
 "1", "b", 2, 42, "%1.1s", NULL, STRING, 1, "mset %s spec spec_cast_adept"},
{
 "1", "c", 2, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_fire"},
{
 "1", "d", 3, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_guard"},
{
 "1", "e", 3, 42, "%1.1s", NULL, STRING, 1, "mset %s spec spec_cast_cleric"},
{
 "1", "f", 3, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_frost"},
{
 "1", "g", 4, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_janitor"},
{
 "1", "h", 4, 42, "%1.1s", NULL, STRING, 1, "mset %s spec spec_cast_mage"},
{
 "1", "i", 4, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_acid"},
{
 "1", "j", 5, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_thief"},
{
 "1", "k", 5, 42, "%1.1s", NULL, STRING, 1, "mset %s spec spec_cast_undead"},
{
 "1", "l", 5, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_gas"},
{
 "1", "m", 6, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_mayor"},
{
 "1", "o", 6, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_lightning"},
{
 "1", "p", 7, 23, "%1.1s", NULL, STRING, 1, "mset %s spec spec_poison"},
{
 "1", "q", 7, 42, "%1.1s", NULL, STRING, 1, "mset %s spec spec_executioner"},
{
 "1", "r", 7, 70, "%1.1s", NULL, STRING, 1, "mset %s spec spec_breath_any"},



{
 "2", "a", 9, 28, "%1.1s", NULL, STRING, 1, "mset %s defpos 0"},
{
 "2", "b", 9, 44, "%1.1s", NULL, STRING, 1, "mset %s defpos 1"},
{
 "2", "c", 9, 66, "%1.1s", NULL, STRING, 1, "mset %s defpos 2"},
{
 "2", "d", 10, 28, "%1.1s", NULL, STRING, 1, "mset %s defpos 3"},
{
 "2", "e", 10, 44, "%1.1s", NULL, STRING, 1, "mset %s defpos 4"},
{
 "2", "f", 10, 66, "%1.1s", NULL, STRING, 1, "mset %s defpos 5"},
{
 "2", "g", 11, 28, "%1.1s", NULL, STRING, 1, "mset %s defpos 6"},
{
 "2", "h", 11, 44, "%1.1s", NULL, STRING, 1, "mset %s defpos 7"},
{
 "2", "i", 11, 66, "%1.1s", NULL, STRING, 1, "mset %s defpos 8"},
{
 "2", "k", 12, 28, "%1.1s", NULL, STRING, 1, "mset %s defpos not_implemented"},

{
 "3", "a", 14, 22, "%3.3s", NULL, STRING, 2, "mset %s %s fire"},
{
 "3", "b", 14, 34, "%3.3s", NULL, STRING, 2, "mset %s %s cold"},
{
 "3", "c", 14, 46, "%3.3s", NULL, STRING, 2, "mset %s %s electricity"},
{
 "3", "d", 14, 58, "%3.3s", NULL, STRING, 2, "mset %s %s energy"},
{
 "3", "e", 14, 70, "%3.3s", NULL, STRING, 2, "mset %s %s poison"},
{
 "3", "f", 15, 22, "%3.3s", NULL, STRING, 2, "mset %s %s blunt"},
{
 "3", "g", 15, 34, "%3.3s", NULL, STRING, 2, "mset %s %s pierce"},
{
 "3", "h", 15, 46, "%3.3s", NULL, STRING, 2, "mset %s %s slash"},
{
 "3", "i", 15, 58, "%3.3s", NULL, STRING, 2, "mset %s %s acid"},
{
 "3", "j", 15, 70, "%3.3s", NULL, STRING, 2, "mset %s %s nonmagic"},
{
 "3", "k", 16, 22, "%3.3s", NULL, STRING, 2, "mset %s %s drain"},
{
 "3", "l", 16, 34, "%3.3s", NULL, STRING, 2, "mset %s %s sleep"},
{
 "3", "m", 16, 46, "%3.3s", NULL, STRING, 2, "mset %s %s charm"},
{
 "3", "n", 16, 58, "%3.3s", NULL, STRING, 2, "mset %s %s hold"},
{
 "3", "o", 16, 70, "%3.3s", NULL, STRING, 2, "mset %s %s magic"},
{
 "3", "p", 17, 10, "%3.3s", NULL, STRING, 2, "mset %s %s plus1"},
{
 "3", "q", 17, 22, "%3.3s", NULL, STRING, 2, "mset %s %s plus2"},
{
 "3", "r", 17, 34, "%3.3s", NULL, STRING, 2, "mset %s %s plus3"},
{
 "3", "s", 17, 46, "%3.3s", NULL, STRING, 2, "mset %s %s plus4"},
{
 "3", "t", 17, 58, "%3.3s", NULL, STRING, 2, "mset %s %s plus5"},
{
 "3", "u", 17, 70, "%3.3s", NULL, STRING, 2, "mset %s %s plus6"},
{"-", "a", 13, 2, "", NULL, STRING, 1, "mmenu %s a"},
{"-", "b", 13, 2, "", NULL, STRING, 1, "mmenu %s b"},
{"-", "c", 13, 2, "", NULL, STRING, 1, "mmenu %s c"},
{"-", "d", 13, 2, "", NULL, STRING, 1, "mmenu %s d"},
{"-", "e", 13, 2, "", NULL, STRING, 1, "mmenu %s e"},
{"-", "f", 13, 2, "", NULL, STRING, 1, "mmenu %s f"},
{"-", "h", 13, 2, "", NULL, STRING, 1, "mmenu %s h"},
{
 " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

MENU_DATA control_page_a_data[] = {
  {
   "1", "a", 4, 16, "%3.3hd", NULL, SH_INT, 1, "cset read_free %s"},
  {
   "1", "b", 5, 16, "%3.3hd", NULL, SH_INT, 1, "cset write_free %s"},
  {
   "1", "c", 6, 16, "%3.3hd", NULL, SH_INT, 1, "cset read_all %s"},
  {
   "1", "d", 7, 16, "%3.3hd", NULL, SH_INT, 1, "cset take_all %s"},
  {
   "2", "a", 4, 30, "%3.3hd", NULL, SH_INT, 1, "cset muse_level %s"},
  {
   "2", "b", 5, 30, "%3.3hd", NULL, SH_INT, 1, "cset think_level %s"},
  {
   "2", "c", 6, 30, "%3.3hd", NULL, SH_INT, 1, "cset log_level %s"},
  {
   "2", "d", 7, 30, "%3.3hd", NULL, SH_INT, 1, "cset build_level %s"},
  {"-", "a", 13, 2, "", NULL, STRING, 0, "cmenu a"},
  {"-", "h", 13, 2, "", NULL, STRING, 0, "cmenu h"},
  {
   " ", " ", 0, 0, " ", NULL, ( int )NULL, 0, NULL}
};

/*
 * from MERC2.2, but i use it to define the scrolling region of the screen
 */
void do_pagelen( CHAR_DATA * ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  char arg[MAX_INPUT_LENGTH];
  int lines;  /* don't wanna muck about with atoi and
               * sh_int */

  one_argument( argument, arg );

  if( arg[0] == '\0' )
    lines = 48;
  else
    lines = atoi( arg );

  if( lines < 1 )
  {
    send_to_char( "Negative or Zero values for a page length is not legal.\n\r", ch );
    return;
  }
  ch->pagelen = lines;
  sprintf( buf, "Page length set to %d lines.\n\r", lines );
  send_to_char( buf, ch );
  return;
}


char *get_ris( MOB_INDEX_DATA * idx, int risFlag )
{
  int num = 0;

  if( IS_SET( idx->resistant, risFlag ) )
    num += 1;
  if( IS_SET( idx->immune, risFlag ) )
    num += 2;
  if( IS_SET( idx->susceptible, risFlag ) )
    num += 4;

  return ( ( char * )ris_strings[num] );  /* see const.c */
}

int get_offset( CHAR_DATA * ch )
{
  switch ( ch->inter_page )
  {
    case MOB_PAGE_A:
      return 18;
    case MOB_PAGE_B:
      return 18;
    case MOB_PAGE_C:
      return 20;
    case MOB_PAGE_D:
      return 18;
    case MOB_PAGE_E:
      return 19;
    case MOB_PAGE_F:
      return 22;
    case MOB_HELP_PAGE:
      return 13;
    case ROOM_PAGE_A:
      return 10;
    case ROOM_PAGE_B:
      return 15;
    case ROOM_PAGE_C:
      return 18;
    case ROOM_HELP_PAGE:
      return 13;
    case OBJ_PAGE_A:
      return 16;
    case OBJ_PAGE_B:
      return 18;
    case OBJ_PAGE_C:
      return 20;
    case OBJ_PAGE_D:
      return 18;
    case OBJ_PAGE_E:
      return 19;
    case OBJ_HELP_PAGE:
      return 13;
    case CONTROL_PAGE_A:
      return 9;
    case CONTROL_HELP_PAGE:
      return 13;
    default:
      return 0;
  }
}


/*
 * Send a room editing screen
 */
void send_room_page_to_char( CHAR_DATA * ch, ROOM_INDEX_DATA * idx, char page )
{
  int offset;
  char menu_picture[60 * 80];
  char buf[MAX_STRING_LENGTH];

  if( !ch )
  {
    bug( "Send_room_page_to_char: NULL *ch", 0 );
    return;
  }
  if( !ch->desc )
  {
    bug( "Send_room_page_to_char: NULL ch->desc", 0 );
    return;
  }
  switch ( page )
  {
#ifdef NEW_MAPS
    case 'd':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, room_page_d, buf );
      ch->inter_page = ROOM_PAGE_D;
      break;
#endif
    case 'h':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, room_help_page, buf );
      ch->inter_page = ROOM_HELP_PAGE;
      break;
    case 'c':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, room_page_c, buf );
      ch->inter_page = ROOM_PAGE_C;
      break;
    case 'b':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, room_page_b, buf );
      ch->inter_page = ROOM_PAGE_B;
      break;
    case 'a':
    default:
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, room_page_a, buf );
      ch->inter_page = ROOM_PAGE_A;
      break;
  }
  offset = get_offset( ch );

  /*
   * clear page & home cursor 
   */
  write_to_buffer( ch->desc, "50\x1B[;H\x1B[2J", strlen( "50\x1B[;H\x1B[2J" ) );

  /*
   * prints the necessary mob_page 
   */
  write_to_buffer( ch->desc, menu_picture, strlen( menu_picture ) );

  /*
   * fill in fields 
   */
  fill_in_room_page( ch, idx, page );
  return;
}

/*
 * Send a control editing screen
 */
void send_control_page_to_char( CHAR_DATA * ch, char page )
{
  int offset;
  char menu_picture[60 * 80];
  char buf[MAX_STRING_LENGTH];

  if( !ch )
  {
    bug( "Send_control_page_to_char: NULL *ch", 0 );
    return;
  }
  if( !ch->desc )
  {
    bug( "Send_control_page_to_char: NULL ch->desc", 0 );
    return;
  }
  switch ( page )
  {
    case 'h':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, control_help_page, buf );
      ch->inter_page = CONTROL_HELP_PAGE;
      break;
    case 'a':
    default:
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, control_page_a, buf );
      ch->inter_page = CONTROL_PAGE_A;
      break;
  }
  offset = get_offset( ch );

  /*
   * clear page & home cursor 
   */
  write_to_buffer( ch->desc, "50\x1B[;H\x1B[2J", strlen( "50\x1B[;H\x1B[2J" ) );

  /*
   * prints the necessary control_page 
   */
  write_to_buffer( ch->desc, menu_picture, strlen( menu_picture ) );

  /*
   * fill in fields 
   */
  fill_in_control_page( ch, page );
  return;
}

void do_clear( CHAR_DATA * ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  if( !ch->desc )
  {
    bug( "No desc in do_clear\n\r", 0 );
  }
  ch->inter_editing = NO_PAGE;
  sprintf( buf, "\x1B[%d;%dr", 1, ch->pagelen );
  write_to_buffer( ch->desc, buf, strlen( buf ) );
  write_to_buffer( ch->desc, "50\x1B[;H\x1B[2J", strlen( "50\x1B[;H\x1B[2J" ) );
  return;
}


/*
 * Doesn't allocate any memory!  Rehack of strip_cr
 */
void format_string( char output[], char *str, int length )
{
  char newstr[MAX_STRING_LENGTH];
  int l, i, j, slen;
  bool elipsis;

  if( ( length < 0 ) || ( length > MAX_STRING_LENGTH ) )
  {
    bug( "format_string: bad length %d\n\r", length );
    l = 72;
  }
  else
  {
    l = length;
  }

  slen = strlen( str );

  if( slen < 1 )
  {
    sprintf( output, "%-s", "(blank)" );
  }
  if( slen > l )
  {
    l = l - 3;
    elipsis = TRUE;
  }
  else
  {
    elipsis = FALSE;
  }

  for( i = j = 0; str[i] != '\0' && i <= l; i++ )
    if( ( str[i] != '\r' ) && ( str[i] != '\n' ) )
    {
      newstr[j++] = str[i];
    }
  if( elipsis )
  {
    newstr[j++] = '.';
    newstr[j++] = '.';
    newstr[j++] = '.';
  }
  newstr[j] = '\0';
  sprintf( output, "%-s", newstr );
  /*
   * return newstr; 
   */

}

/*
 * Send an obj editing screen
 */
void send_obj_page_to_char( CHAR_DATA * ch, OBJ_INDEX_DATA * idx, char page )
{
  int offset;
  char menu_picture[60 * 80], buf[MAX_STRING_LENGTH]; /* maximum menu size */

  if( !ch )
  {
    bug( "Send_page_to_char: NULL *ch", 0 );
    return;
  }
  if( !ch->desc )
  {
    bug( "Send_page_to_char: NULL ch->desc", 0 );
    return;
  }
  switch ( page )
  {
    case 'h':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_help_page, buf );
      ch->inter_page = OBJ_HELP_PAGE;
      break;
    case 'e':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_page_e, buf );
      ch->inter_page = OBJ_PAGE_E;
      break;
    case 'd':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_page_d, buf );
      ch->inter_page = OBJ_PAGE_D;
      break;
    case 'c':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_page_c, buf );
      ch->inter_page = OBJ_PAGE_C;
      break;
    case 'b':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_page_b, buf );
      ch->inter_page = OBJ_PAGE_B;
      break;
    case 'a':
    default:
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, obj_page_a, buf );
      ch->inter_page = OBJ_PAGE_A;
      break;
  }
  offset = get_offset( ch );



  /*
   * clear page & home cursor 
   */
  write_to_buffer( ch->desc, "50\x1B[;H\x1B[2J", strlen( "50\x1B[;H\x1B[2J" ) );

  /*
   * prints the necessary mob_page 
   */
  write_to_buffer( ch->desc, menu_picture, strlen( menu_picture ) );

  /*
   * fill in fields 
   */
  fill_in_obj_page( ch, idx, page );
  return;
}

/*
 * Send a (mob) editing screen
 */
void send_page_to_char( CHAR_DATA * ch, MOB_INDEX_DATA * idx, char page )
{
  int offset;
  char menu_picture[60 * 80], buf[MAX_STRING_LENGTH];

  if( !ch )
  {
    bug( "Send_page_to_char: NULL *ch", 0 );
    return;
  }
  if( !ch->desc )
  {
    bug( "Send_page_to_char: NULL ch->desc", 0 );
    return;
  }
  switch ( page )
  {
    case 'h':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_help_page, buf );
      ch->inter_page = MOB_HELP_PAGE;
      break;
    case 'f':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_f, buf );
      ch->inter_page = MOB_PAGE_F;
      break;
    case 'e':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_e, buf );
      ch->inter_page = MOB_PAGE_E;
      break;
    case 'd':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_d, buf );
      ch->inter_page = MOB_PAGE_D;
      break;
    case 'c':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_c, buf );
      ch->inter_page = MOB_PAGE_C;
      break;
    case 'b':
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_b, buf );
      ch->inter_page = MOB_PAGE_B;
      break;
    case 'a':
    default:
      format_string( buf, ch->inter_editing, 10 );
      sprintf( menu_picture, mob_page_a, buf );
      ch->inter_page = MOB_PAGE_A;
      break;
  }
  offset = get_offset( ch );



  /*
   * clear page & home cursor 
   */
  write_to_buffer( ch->desc, "50\x1B[;H\x1B[2J", strlen( "50\x1B[;H\x1B[2J" ) );

  /*
   * prints the necessary mob_page 
   */
  write_to_buffer( ch->desc, menu_picture, strlen( menu_picture ) );

  /*
   * fill in fields 
   */
  fill_in_mob_page( ch, idx, page );
  return;
}

void do_redraw_page( CHAR_DATA * ch, char *argument )
{
  char page;
  MOB_INDEX_DATA *idx;
  OBJ_INDEX_DATA *oidx;
  ROOM_INDEX_DATA *ridx;

  switch ( ch->inter_page )
  {
    case MOB_PAGE_A:
      page = 'a';
      break;
    case MOB_PAGE_B:
      page = 'b';
      break;
    case MOB_PAGE_C:
      page = 'c';
      break;
    case MOB_PAGE_D:
      page = 'd';
      break;
    case MOB_PAGE_E:
      page = 'e';
      break;
    case MOB_PAGE_F:
      page = 'f';
      break;
    case MOB_HELP_PAGE:
      page = 'h';
      break;
    case OBJ_PAGE_A:
      page = 'a';
      break;
    case OBJ_PAGE_B:
      page = 'b';
      break;
    case OBJ_PAGE_C:
      page = 'c';
      break;
    case OBJ_PAGE_D:
      page = 'd';
      break;
    case OBJ_PAGE_E:
      page = 'e';
      break;
    case OBJ_HELP_PAGE:
      page = 'h';
      break;
    case ROOM_PAGE_A:
      page = 'a';
      break;
    case ROOM_PAGE_B:
      page = 'b';
      break;
    case ROOM_PAGE_C:
      page = 'c';
      break;
    case CONTROL_PAGE_A:
      page = 'a';
      break;
    case CONTROL_HELP_PAGE:
      page = 'h';
      break;
    case NO_PAGE:
    default:
      return;
  }

  if( ch->inter_type == MOB_TYPE )
  {
    idx = get_mob_index( ch->inter_editing_vnum );
    if( idx == NULL )
    {
      bug( "do_redraw_page: Get_mob_index: bad vnum %d.", ch->inter_editing_vnum );
      send_to_char( " do_redraw_page: bizarre bug!  that vnum evaporated \n\r", ch );
    }

    send_page_to_char( ch, idx, page );
    return;
  }

  if( ch->inter_type == ROOM_TYPE )
  {
    ridx = get_room_index( ch->inter_editing_vnum );
    if( ridx == NULL )
    {
      bug( "do_redraw_page: Get_room_index: bad vnum %d.", ch->inter_editing_vnum );
      send_to_char( " do_redraw_page: bizarre bug!  that vnum evaporated \n\r", ch );
    }

    send_room_page_to_char( ch, ridx, page );
    return;
  }


  if( ch->inter_type == OBJ_TYPE )
  {
    oidx = get_obj_index( ch->inter_editing_vnum );
    if( oidx == NULL )
    {
      bug( "do_redraw_page: Get_obj_index: bad vnum %d.", ch->inter_editing_vnum );
      send_to_char( " do_redraw_page: bizarre bug!  that vnum evaporated \n\r", ch );
    }

    send_obj_page_to_char( ch, oidx, page );
    return;
  }

  if( ch->inter_type == CONTROL_TYPE )
  {
    send_control_page_to_char( ch, page );
    return;
  }

  bug( "do_redraw_page: Bad ch->inter_type: vnum %d.", ch->inter_editing_vnum );
}

void do_refresh_page( CHAR_DATA * ch, char *argument )
{

  refresh_page( ch );

  return;
}


void refresh_page( CHAR_DATA * ch )
{
  char page;
  void *idx;
  switch ( ch->inter_type )
  {
    case MOB_TYPE:
      switch ( ch->inter_page )
      {
        case MOB_PAGE_A:
          page = 'a';
          break;
        case MOB_PAGE_B:
          page = 'b';
          break;
        case MOB_PAGE_C:
          page = 'c';
          break;
        case MOB_PAGE_D:
          page = 'd';
          break;
        case MOB_PAGE_E:
          page = 'e';
          break;
        case MOB_PAGE_F:
          page = 'f';
          break;
        case MOB_HELP_PAGE:
        case NO_PAGE:
        default:
          return;
      }
      idx = ( MOB_INDEX_DATA * ) get_mob_index( ch->inter_editing_vnum );
      if( idx == NULL )
      {
        bug( "refresh_page: Get_mob_index: bad vnum %d.", ch->inter_editing_vnum );
        send_to_char( " do_refresh_page: bizarre bug!  that vnum evaporated \n\r", ch );
      }
      fill_in_mob_page( ch, idx, page );
      return;
    case ROOM_TYPE:
      switch ( ch->inter_page )
      {
        case ROOM_PAGE_A:
          page = 'a';
          break;
        case ROOM_PAGE_B:
          page = 'b';
          break;
        case ROOM_PAGE_C:
          page = 'c';
          break;
        case ROOM_HELP_PAGE:
        case NO_PAGE:
        default:
          return;
      }
      idx = ( ROOM_INDEX_DATA * ) get_room_index( ch->inter_editing_vnum );
      if( idx == NULL )
      {
        bug( "refresh_page: Get_room_index: bad vnum %d.", ch->inter_editing_vnum );
        send_to_char( " do_refresh_page: bizarre bug!  that vnum evaporated \n\r", ch );
      }
      fill_in_room_page( ch, idx, page );
      return;
    case OBJ_TYPE:
      switch ( ch->inter_page )
      {
        case OBJ_PAGE_A:
          page = 'a';
          break;
        case OBJ_PAGE_B:
          page = 'b';
          break;
        case OBJ_PAGE_C:
          page = 'c';
          break;
        case OBJ_PAGE_D:
          page = 'd';
          break;
        case OBJ_PAGE_E:
          page = 'e';
          break;
        case OBJ_HELP_PAGE:
        case NO_PAGE:
        default:
          return;
      }
      idx = ( OBJ_INDEX_DATA * ) get_obj_index( ch->inter_editing_vnum );
      if( idx == NULL )
      {
        bug( "refresh_page: Get_obj_index: bad vnum %d.", ch->inter_editing_vnum );
        send_to_char( " do_refresh_page: bizarre bug!  that vnum evaporated \n\r", ch );
      }
      fill_in_obj_page( ch, idx, page );
      return;
    case CONTROL_TYPE:
      switch ( ch->inter_page )
      {
        case CONTROL_PAGE_A:
          page = 'a';
          break;
        case CONTROL_HELP_PAGE:
          page = 'h';
          break;
        case NO_PAGE:
        default:
          return;
      }

    default:
      return;
  }
}


void fill_in_control_page( CHAR_DATA * ch, char page )
{
  MENU_DATA *m_data;
  char buf[MAX_STRING_LENGTH];
  int i, offset;

  if( ( ch->inter_substate < 0 ) || ( ch->inter_substate > 5 ) )
  {
    send_to_char( "Bad interface substate. Can't fill in page.\n\r", ch );
    return;
  }
  switch ( page )
  {
    case 'h':
      return;
    default:
    case 'a':
      m_data = control_page_a_data;
      control_page_a_data[0].data = &( sysdata.read_mail_free );
      control_page_a_data[1].data = &( sysdata.write_mail_free );
      control_page_a_data[2].data = &( sysdata.read_all_mail );
      control_page_a_data[3].data = &( sysdata.take_others_mail );
      control_page_a_data[4].data = &( sysdata.muse_level );
      control_page_a_data[5].data = &( sysdata.think_level );
      control_page_a_data[6].data = &( sysdata.log_level );
      control_page_a_data[7].data = &( sysdata.build_level );


  }

  for( i = 0; m_data[i].ptrType != ( int )NULL; i++ )
  {
    sprintf( buf, "\x1B[%d;%dH", m_data[i].x, m_data[i].y );
    write_to_buffer( ch->desc, buf, strlen( buf ) );
    switch ( m_data[i].ptrType )
    {
      case INT:
        sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
        break;
      case SH_INT:
        sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
        break;
      default:
        sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
#ifdef WRONG_WAY
    if( m_data[i].ptrType == INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
    }
    if( m_data[i].ptrType == SH_INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
    }
    else
    {
      sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
#endif
    write_to_buffer( ch->desc, buf, strlen( buf ) );
  }

  offset = get_offset( ch );

  /*
   * restrict scrolling area of screen 
   */
  sprintf( buf, "\x1B[%d;%dr", offset, ch->pagelen );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  /*
   * goes to pglen,1 
   */
  sprintf( buf, "\x1B[%d;1H", ( ch->pagelen ) );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  send_to_char( "\n\r", ch );
}

void fill_in_room_page( CHAR_DATA * ch, ROOM_INDEX_DATA * idx, char page )
{
  MENU_DATA *m_data;
  char buf[MAX_STRING_LENGTH];
  OBJ_INDEX_DATA *pObjIndex;
  EXIT_DATA *xit;
  char tmp0[MAX_STRING_LENGTH];
  char tmp1[MAX_STRING_LENGTH];
  int i, offset;

  if( ( ch->inter_substate < 0 ) || ( ch->inter_substate > 5 ) )
  {
    send_to_char( "Bad interface substate. Can't fill in page.\n\r", ch );
    return;
  }
  switch ( page )
  {
    case 'h':
      return;
    case 'c':
      m_data = room_page_c_data;
      room_page_c_data[0].data = ( ch->inter_substate == SUB_NORTH ) ? check : space;
      room_page_c_data[1].data = ( ch->inter_substate == SUB_UP ) ? check : space;
      room_page_c_data[2].data = ( ch->inter_substate == SUB_EAST ) ? check : space;
      room_page_c_data[3].data = ( ch->inter_substate == SUB_WEST ) ? check : space;
      room_page_c_data[4].data = ( ch->inter_substate == SUB_SOUTH ) ? check : space;
      room_page_c_data[5].data = ( ch->inter_substate == SUB_DOWN ) ? check : space;
      xit = get_exit( idx, ch->inter_substate );
      if( !xit )
      {
        room_page_c_data[6].data = ( char * )space;
        room_page_c_data[7].data = ( char * )space;
        room_page_c_data[8].data = ( char * )space;
        room_page_c_data[9].data = ( char * )space;
        room_page_c_data[10].data = ( char * )space;
        room_page_c_data[11].data = ( char * )space;
        room_page_c_data[12].data = ( char * )space;
        room_page_c_data[13].data = ( char * )"No Exit This Way";
        room_page_c_data[14].data = ( char * )space;
        room_page_c_data[15].data = ( char * )space;
        room_page_c_data[16].data = ( char * )space;
      }
      else
      {
        room_page_c_data[6].data = IS_SET( xit->exit_info, EX_ISDOOR ) ? check : space;
        /*
         * SIC.!!! 
         */
        room_page_c_data[7].data = IS_SET( xit->exit_info, EX_SECRET ) ? check : space;
        room_page_c_data[8].data = IS_SET( xit->exit_info, EX_CLOSED ) ? check : space;
        room_page_c_data[9].data = IS_SET( xit->exit_info, EX_PICKPROOF ) ? check : space;
        room_page_c_data[10].data = IS_SET( xit->exit_info, EX_LOCKED ) ? check : space;
        room_page_c_data[11].data = IS_SET( xit->exit_info, EX_NOPASSDOOR ) ? check : space;
        room_page_c_data[12].data = &( xit->vnum );
        room_page_c_data[13].data = xit->to_room->name;
        room_page_c_data[14].data = &( xit->key );
        if( ( pObjIndex = get_obj_index( xit->key ) ) == NULL )
        {
          room_page_c_data[15].data = "No (or Unknown) Key";
        }
        else
        {
          room_page_c_data[15].data = pObjIndex->name;
        }
        room_page_c_data[16].data = xit->description;
      }
      break;
    case 'b':
      m_data = room_page_b_data;
      room_page_b_data[0].data = xIS_SET( idx->room_flags, ROOM_DARK ) ? check : space;
      room_page_b_data[1].data = xIS_SET( idx->room_flags, ROOM_DEATH ) ? check : space;
      room_page_b_data[2].data = xIS_SET( idx->room_flags, ROOM_NO_MOB ) ? check : space;
      room_page_b_data[3].data = xIS_SET( idx->room_flags, ROOM_INDOORS ) ? check : space;
      room_page_b_data[4].data = xIS_SET( idx->room_flags, ROOM_LAWFUL ) ? check : space;
      room_page_b_data[5].data = xIS_SET( idx->room_flags, ROOM_NO_MAGIC ) ? check : space;
      room_page_b_data[6].data = xIS_SET( idx->room_flags, ROOM_PET_SHOP ) ? check : space;
      room_page_b_data[7].data = xIS_SET( idx->room_flags, ROOM_NEUTRAL ) ? check : space;
      room_page_b_data[8].data = xIS_SET( idx->room_flags, ROOM_NODROP ) ? check : space;
      room_page_b_data[9].data = xIS_SET( idx->room_flags, ROOM_SAFE ) ? check : space;
      room_page_b_data[10].data = xIS_SET( idx->room_flags, ROOM_CHAOTIC ) ? check : space;
      room_page_b_data[11].data = xIS_SET( idx->room_flags, ROOM_NODROPALL ) ? check : space;
      room_page_b_data[12].data = xIS_SET( idx->room_flags, ROOM_TELEPORT ) ? check : space;
      room_page_b_data[13].data = xIS_SET( idx->room_flags, ROOM_DONATION ) ? check : space;
      room_page_b_data[14].data = xIS_SET( idx->room_flags, ROOM_NO_RECALL ) ? check : space;
      room_page_b_data[15].data = xIS_SET( idx->room_flags, ROOM_PRIVATE ) ? check : space;
      room_page_b_data[16].data = xIS_SET( idx->room_flags, ROOM_SOLITARY ) ? check : space;
      room_page_b_data[17].data = xIS_SET( idx->room_flags, ROOM_NO_ASTRAL ) ? check : space;
      room_page_b_data[17].data = xIS_SET( idx->room_flags, ROOM_ASTRALSHIELD ) ? check : space;
      room_page_b_data[18].data = xIS_SET( idx->room_flags, ROOM_TUNNEL ) ? check : space;
      room_page_b_data[19].data = xIS_SET( idx->room_flags, ROOM_SILENCE ) ? check : space;
      room_page_b_data[20].data = xIS_SET( idx->room_flags, ROOM_NO_SUMMON ) ? check : space;
      room_page_b_data[21].data = xIS_SET( idx->room_flags, ROOM_CLANSTOREROOM ) ? check : space;
      room_page_b_data[22].data = xIS_SET( idx->room_flags, ROOM_LOGSPEECH ) ? check : space;
      room_page_b_data[23].data = xIS_SET( idx->room_flags, ROOM_NOFLOOR ) ? check : space;
      room_page_b_data[24].data = ( idx->sector_type == SECT_INSIDE ) ? check : space;
      room_page_b_data[25].data = ( idx->sector_type == SECT_FOREST ) ? check : space;
      room_page_b_data[26].data = ( idx->sector_type == SECT_CITY ) ? check : space;
      room_page_b_data[27].data = ( idx->sector_type == SECT_HILLS ) ? check : space;
      room_page_b_data[28].data = ( idx->sector_type == SECT_MOUNTAIN ) ? check : space;
      room_page_b_data[29].data = ( idx->sector_type == SECT_WATER_SWIM ) ? check : space;
      room_page_b_data[30].data = ( idx->sector_type == SECT_AIR ) ? check : space;
      room_page_b_data[31].data = ( idx->sector_type == SECT_DESERT ) ? check : space;
      room_page_b_data[32].data = ( idx->sector_type == SECT_DUNNO ) ? check : space;
      room_page_b_data[33].data = ( idx->sector_type == SECT_WATER_NOSWIM ) ? check : space;
      room_page_b_data[34].data = ( idx->sector_type == SECT_FIELD ) ? check : space;
      room_page_b_data[34].data = ( idx->sector_type == SECT_SPACE ) ? check : space;
      break;

    default:
    case 'a':
      m_data = room_page_a_data;
      /*
       * room_page_a_data[0].data = idx->name;
       * room_page_a_data[1].data = idx->description;
       */
      format_string( tmp0, idx->name, 72 );
      format_string( tmp1, idx->description, 72 );
      room_page_a_data[0].data = tmp0;
      room_page_a_data[1].data = tmp1;

  }

  for( i = 0; m_data[i].ptrType != ( int )NULL; i++ )
  {
    sprintf( buf, "\x1B[%d;%dH", m_data[i].x, m_data[i].y );
    write_to_buffer( ch->desc, buf, strlen( buf ) );
    switch ( m_data[i].ptrType )
    {
      case INT:
        sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
        break;
      case SH_INT:
        sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
        break;
      default:
        sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
#ifdef WRONG_WAY
    if( m_data[i].ptrType == INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
    }
    if( m_data[i].ptrType == SH_INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
    }
    else
    {
      sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
#endif
    write_to_buffer( ch->desc, buf, strlen( buf ) );
  }

  offset = get_offset( ch );

  /*
   * restrict scrolling area of screen 
   */
  sprintf( buf, "\x1B[%d;%dr", offset, ch->pagelen );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  /*
   * goes to pglen,1 
   */
  sprintf( buf, "\x1B[%d;1H", ( ch->pagelen ) );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  send_to_char( "\n\r", ch );
}


/*****

Comments & notes:
-----------------
To check a normal apply type:
  total_modstr = get_affect( obj, APPLY_STR );

To check if it affects by flying:
  get_affect( obj, GA_AFFECT | get_bvl(AFF_FLYING) );

To get the RIS for DRAIN:

  get_affect( obj, GA_RIS | get_bvl(RIS_DRAIN) );

******/

void fill_in_obj_page( CHAR_DATA * ch, OBJ_INDEX_DATA * idx, char page )
{
  MENU_DATA *m_data;
  char buf[MAX_STRING_LENGTH];
  int i, offset;
  char tmp0[MAX_STRING_LENGTH];
  char tmp1[MAX_STRING_LENGTH];
  char tmp2[MAX_STRING_LENGTH];
  char tmp3[MAX_STRING_LENGTH];
  sh_int tmp[27];

  switch ( page )
  {
    case 'h':
      return;
    case 'e':
      m_data = obj_page_e_data;
      obj_page_e_data[0].data = IS_OBJ_STAT( idx, ITEM_EVIL ) ? check : space;
      obj_page_e_data[1].data = IS_OBJ_STAT( idx, ITEM_ANTI_GOOD ) ? check : space;
      obj_page_e_data[2].data = IS_OBJ_STAT( idx, ITEM_NODROP ) ? check : space;
      obj_page_e_data[3].data = IS_OBJ_STAT( idx, ITEM_INVIS ) ? check : space;
      obj_page_e_data[4].data = IS_OBJ_STAT( idx, ITEM_ANTI_EVIL ) ? check : space;
      obj_page_e_data[5].data = IS_OBJ_STAT( idx, ITEM_NOREMOVE ) ? check : space;
      obj_page_e_data[6].data = IS_OBJ_STAT( idx, ITEM_HIDDEN ) ? check : space;
      obj_page_e_data[7].data = IS_OBJ_STAT( idx, ITEM_ANTI_NEUTRAL ) ? check : space;
      obj_page_e_data[8].data = IS_OBJ_STAT( idx, ITEM_INVENTORY ) ? check : space;
      obj_page_e_data[9].data = IS_OBJ_STAT( idx, ITEM_GLOW ) ? check : space;
      obj_page_e_data[10].data = IS_OBJ_STAT( idx, ITEM_BLESS ) ? check : space;
      obj_page_e_data[11].data = IS_OBJ_STAT( idx, ITEM_ANTI_SAIYAN ) ? check : space;
      obj_page_e_data[12].data = IS_OBJ_STAT( idx, ITEM_DONATION ) ? check : space;
      obj_page_e_data[13].data = IS_OBJ_STAT( idx, ITEM_HUM ) ? check : space;
      obj_page_e_data[14].data = IS_OBJ_STAT( idx, ITEM_METAL ) ? check : space;
      obj_page_e_data[15].data = IS_OBJ_STAT( idx, ITEM_ANTI_HUMAN ) ? check : space;
      obj_page_e_data[16].data = IS_OBJ_STAT( idx, ITEM_CLANOBJECT ) ? check : space;
      obj_page_e_data[17].data = IS_OBJ_STAT( idx, ITEM_DARK ) ? check : space;
      obj_page_e_data[18].data = IS_OBJ_STAT( idx, ITEM_ORGANIC ) ? check : space;
      obj_page_e_data[19].data = IS_OBJ_STAT( idx, ITEM_ANTI_HALFBREED ) ? check : space;
      obj_page_e_data[20].data = IS_OBJ_STAT( idx, ITEM_CLANCORPSE ) ? check : space;
      obj_page_e_data[21].data = IS_OBJ_STAT( idx, ITEM_MAGIC ) ? check : space;
      obj_page_e_data[22].data = IS_OBJ_STAT( idx, ITEM_ANTI_NAMEK ) ? check : space;
      obj_page_e_data[23].data = IS_OBJ_STAT( idx, ITEM_PROTOTYPE ) ? check : space;
      obj_page_e_data[24].data = IS_OBJ_STAT( idx, ITEM_LOYAL ) ? check : space;
      obj_page_e_data[25].data = IS_OBJ_STAT( idx, ITEM_ANTI_ANDROID ) ? check : space;
      obj_page_e_data[26].data = IS_OBJ_STAT( idx, ITEM_DEATHROT ) ? check : space;
      obj_page_e_data[27].data = IS_OBJ_STAT( idx, ITEM_ANTI_ICER ) ? check : space;
      obj_page_e_data[27].data = IS_OBJ_STAT( idx, ITEM_ANTI_BIO_ANDROID ) ? check : space;
      obj_page_e_data[27].data = IS_OBJ_STAT( idx, ITEM_NOAUCTION ) ? check : space;
      obj_page_e_data[28].data = IS_SET( idx->wear_flags, ITEM_TAKE ) ? check : space;
      obj_page_e_data[29].data = IS_SET( idx->wear_flags, ITEM_WEAR_FINGER ) ? check : space;
      obj_page_e_data[30].data = IS_SET( idx->wear_flags, ITEM_WEAR_NECK ) ? check : space;
      obj_page_e_data[31].data = IS_SET( idx->wear_flags, ITEM_WEAR_BODY ) ? check : space;
      obj_page_e_data[32].data = IS_SET( idx->wear_flags, ITEM_WEAR_HEAD ) ? check : space;
      obj_page_e_data[33].data = IS_SET( idx->wear_flags, ITEM_WEAR_LEGS ) ? check : space;
      obj_page_e_data[34].data = IS_SET( idx->wear_flags, ITEM_WEAR_FEET ) ? check : space;
      obj_page_e_data[35].data = IS_SET( idx->wear_flags, ITEM_WEAR_HANDS ) ? check : space;
      obj_page_e_data[36].data = IS_SET( idx->wear_flags, ITEM_WEAR_ARMS ) ? check : space;
      obj_page_e_data[37].data = IS_SET( idx->wear_flags, ITEM_WEAR_SHIELD ) ? check : space;
      obj_page_e_data[38].data = IS_SET( idx->wear_flags, ITEM_WEAR_ABOUT ) ? check : space;
      obj_page_e_data[39].data = IS_SET( idx->wear_flags, ITEM_WEAR_WAIST ) ? check : space;
      obj_page_e_data[40].data = IS_SET( idx->wear_flags, ITEM_WEAR_WRIST ) ? check : space;
      obj_page_e_data[41].data = IS_SET( idx->wear_flags, ITEM_WIELD ) ? check : space;
      obj_page_e_data[42].data = IS_SET( idx->wear_flags, ITEM_HOLD ) ? check : space;
      obj_page_e_data[43].data = IS_SET( idx->wear_flags, ITEM_DUAL_WIELD ) ? check : space;
      obj_page_e_data[44].data = IS_SET( idx->wear_flags, ITEM_WEAR_EARS ) ? check : space;
      obj_page_e_data[45].data = IS_SET( idx->wear_flags, ITEM_WEAR_EYES ) ? check : space;
      break;
    case 'd':
      m_data = obj_page_d_data;
      obj_page_d_data[0].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_BLIND ) ) ? check : space;
      obj_page_d_data[1].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_DETECT_INVIS ) ) ? check : space;
      obj_page_d_data[2].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_DETECT_EVIL ) ) ? check : space;
      obj_page_d_data[3].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_DETECT_MAGIC ) ) ? check : space;
      obj_page_d_data[4].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_DETECT_HIDDEN ) ) ? check : space;
      obj_page_d_data[5].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_HOLD ) ) ? check : space;
      obj_page_d_data[6].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_SANCTUARY ) ) ? check : space;
      obj_page_d_data[7].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_FAERIE_FIRE ) ) ? check : space;
      obj_page_d_data[8].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_INFRARED ) ) ? check : space;
      obj_page_d_data[9].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_CURSE ) ) ? check : space;
      obj_page_d_data[10].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_FLAMING ) ) ? check : space;
      obj_page_d_data[11].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_POISON ) ) ? check : space;
      obj_page_d_data[12].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_PROTECT ) ) ? check : space;
      obj_page_d_data[13].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_PARALYSIS ) ) ? check : space;
      obj_page_d_data[14].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_SLEEP ) ) ? check : space;
      obj_page_d_data[15].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_HIDE ) ) ? check : space;
      obj_page_d_data[16].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_SNEAK ) ) ? check : space;
      obj_page_d_data[17].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_CHARM ) ) ? check : space;
      obj_page_d_data[18].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_FLYING ) ) ? check : space;
      obj_page_d_data[19].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_PASS_DOOR ) ) ? check : space;
      obj_page_d_data[20].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_TRUESIGHT ) ) ? check : space;
      obj_page_d_data[21].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_DETECTTRAPS ) ) ? check : space;
      obj_page_d_data[22].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_SCRYING ) ) ? check : space;
      obj_page_d_data[23].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_FIRESHIELD ) ) ? check : space;
      obj_page_d_data[24].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_SHOCKSHIELD ) ) ? check : space;
      obj_page_d_data[25].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_FLOATING ) ) ? check : space;
      obj_page_d_data[26].data = get_affect( idx, GA_AFFECTED | get_bvl( AFF_INVISIBLE ) ) ? check : space;
      break;
    case 'c':
      m_data = obj_page_c_data;
      obj_page_c_data[0].data = "\\";
      tmp[1] = get_affect( idx, APPLY_SAVING_POISON );
      tmp[2] = get_affect( idx, APPLY_AGE );
      tmp[3] = get_affect( idx, APPLY_STR );
      tmp[4] = get_affect( idx, APPLY_SAVING_ROD );
      tmp[5] = get_affect( idx, APPLY_CLASS );
      tmp[6] = get_affect( idx, APPLY_INT );
      tmp[7] = get_affect( idx, APPLY_SAVING_PARA );
      tmp[8] = get_affect( idx, APPLY_LEVEL );
      tmp[10] = get_affect( idx, APPLY_SAVING_BREATH );
      tmp[11] = get_affect( idx, APPLY_SEX );
      tmp[12] = get_affect( idx, APPLY_DEX );
      tmp[13] = get_affect( idx, APPLY_SAVING_SPELL );
      tmp[14] = get_affect( idx, APPLY_HEIGHT );
      tmp[15] = get_affect( idx, APPLY_CON );
      tmp[16] = get_affect( idx, APPLY_WEIGHT );
      tmp[18] = get_affect( idx, APPLY_MANA );
      tmp[19] = get_affect( idx, APPLY_AC );
      tmp[20] = get_affect( idx, APPLY_HIT );
      tmp[21] = get_affect( idx, APPLY_HITROLL );
      tmp[22] = get_affect( idx, APPLY_GOLD );
      tmp[23] = get_affect( idx, APPLY_MOVE );
      tmp[24] = get_affect( idx, APPLY_DAMROLL );
      tmp[25] = get_affect( idx, APPLY_EXP );

      obj_page_c_data[1].data = &( tmp[1] );
      obj_page_c_data[2].data = &( tmp[2] );
      obj_page_c_data[3].data = &( tmp[3] );
      obj_page_c_data[4].data = &( tmp[4] );
      obj_page_c_data[5].data = &( tmp[5] );
      obj_page_c_data[6].data = &( tmp[6] );
      obj_page_c_data[7].data = &( tmp[7] );
      obj_page_c_data[8].data = &( tmp[8] );
      obj_page_c_data[9].data = &( tmp[9] );
      obj_page_c_data[10].data = &( tmp[10] );
      obj_page_c_data[11].data = &( tmp[11] );
      obj_page_c_data[12].data = &( tmp[12] );
      obj_page_c_data[13].data = &( tmp[13] );
      obj_page_c_data[14].data = &( tmp[14] );
      obj_page_c_data[15].data = &( tmp[15] );
      obj_page_c_data[16].data = &( tmp[16] );
      obj_page_c_data[17].data = &( tmp[17] );
      obj_page_c_data[18].data = &( tmp[18] );
      obj_page_c_data[19].data = &( tmp[19] );
      obj_page_c_data[20].data = &( tmp[20] );
      obj_page_c_data[21].data = &( tmp[21] );
      obj_page_c_data[22].data = &( tmp[22] );
      obj_page_c_data[23].data = &( tmp[23] );
      obj_page_c_data[24].data = &( tmp[24] );
      obj_page_c_data[25].data = &( tmp[25] );

      obj_page_c_data[26].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_FIRE ) )];
      obj_page_c_data[27].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_COLD ) )];
      obj_page_c_data[28].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_ELECTRICITY ) )];
      obj_page_c_data[29].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_ENERGY ) )];
      obj_page_c_data[30].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_POISON ) )];

      obj_page_c_data[31].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_BLUNT ) )];
      obj_page_c_data[32].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PIERCE ) )];
      obj_page_c_data[33].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_SLASH ) )];
      obj_page_c_data[34].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_ACID ) )];
      obj_page_c_data[35].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_NONMAGIC ) )];

      obj_page_c_data[36].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_DRAIN ) )];
      obj_page_c_data[37].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_SLEEP ) )];
      obj_page_c_data[38].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_CHARM ) )];
      obj_page_c_data[39].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_HOLD ) )];
      obj_page_c_data[40].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_MAGIC ) )];

      obj_page_c_data[41].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS1 ) )];
      obj_page_c_data[42].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS2 ) )];
      obj_page_c_data[43].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS3 ) )];
      obj_page_c_data[44].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS4 ) )];
      obj_page_c_data[45].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS5 ) )];
      obj_page_c_data[46].data = ( char * )ris_strings[get_affect( idx, GA_RIS | get_bvl( RIS_PLUS6 ) )];

      break;
    case 'b':
      m_data = obj_page_b_data;
      obj_page_b_data[0].data = ( ( idx->item_type == 0 ) ? check : space );
      obj_page_b_data[1].data = ( ( idx->item_type == ITEM_FOUNTAIN ) ? check : space );
      obj_page_b_data[2].data = ( ( idx->item_type == ITEM_FURNITURE ) ? check : space );
      obj_page_b_data[3].data = ( ( idx->item_type == ITEM_ARMOR ) ? check : space );
      obj_page_b_data[4].data = ( ( idx->item_type == ITEM_FOOD ) ? check : space );
      obj_page_b_data[5].data = ( ( idx->item_type == ITEM_MONEY ) ? check : space );
      obj_page_b_data[6].data = ( ( idx->item_type == ITEM_POTION ) ? check : space );
      obj_page_b_data[7].data = ( ( idx->item_type == ITEM_PULLCHAIN ) ? check : space );
      obj_page_b_data[8].data = ( ( idx->item_type == ITEM_WEAPON ) ? check : space );
      obj_page_b_data[9].data = ( ( idx->item_type == ITEM_MAP ) ? check : space );
      obj_page_b_data[10].data = ( ( idx->item_type == ITEM_LIGHT ) ? check : space );
      obj_page_b_data[11].data = ( ( idx->item_type == ITEM_BUTTON ) ? check : space );
      obj_page_b_data[12].data = ( ( idx->item_type == ITEM_TREASURE ) ? check : space );
      obj_page_b_data[13].data = ( ( idx->item_type == ITEM_HERB ) ? check : space );
      obj_page_b_data[14].data = ( ( idx->item_type == ITEM_TRASH ) ? check : space );
      obj_page_b_data[15].data = ( ( idx->item_type == ITEM_SWITCH ) ? check : space );
      obj_page_b_data[16].data = ( ( idx->item_type == ITEM_CONTAINER ) ? check : space );
      obj_page_b_data[17].data = ( ( idx->item_type == ITEM_WAND ) ? check : space );
      obj_page_b_data[18].data = ( ( idx->item_type == ITEM_SCROLL ) ? check : space );
      obj_page_b_data[19].data = ( ( idx->item_type == ITEM_STAFF ) ? check : space );
      obj_page_b_data[20].data = ( ( idx->item_type == ITEM_BLOODSTAIN ) ? check : space );
      obj_page_b_data[21].data = ( ( idx->item_type == ITEM_PILL ) ? check : space );
      obj_page_b_data[22].data = ( ( idx->item_type == ITEM_BLOOD ) ? check : space );
      obj_page_b_data[23].data = ( ( idx->item_type == ITEM_DIAL ) ? check : space );
      obj_page_b_data[24].data = ( ( idx->item_type == ITEM_TRAP ) ? check : space );
      obj_page_b_data[25].data = ( ( idx->item_type == ITEM_KEY ) ? check : space );
      obj_page_b_data[26].data = ( ( idx->item_type == ITEM_INCENSE ) ? check : space );
      obj_page_b_data[27].data = ( ( idx->item_type == ITEM_LEVER ) ? check : space );
      obj_page_b_data[28].data = ( ( idx->item_type == ITEM_CORPSE_PC ) ? check : space );
      obj_page_b_data[29].data = ( ( idx->item_type == ITEM_PIPE ) ? check : space );
      obj_page_b_data[30].data = ( ( idx->item_type == ITEM_SCRAPS ) ? check : space );
      obj_page_b_data[31].data = ( ( idx->item_type == ITEM_TRAP ) ? check : space );
      obj_page_b_data[32].data = ( ( idx->item_type == ITEM_CORPSE_NPC ) ? check : space );
      obj_page_b_data[33].data = ( ( idx->item_type == ITEM_BOOK ) ? check : space );
      obj_page_b_data[34].data = ( ( idx->item_type == ITEM_MATCH ) ? check : space );
      obj_page_b_data[35].data = ( ( idx->item_type == ITEM_DRINK_CON ) ? check : space );
      obj_page_b_data[36].data = ( char * )"\\";
      obj_page_b_data[37].data = ( char * )"\\";
      obj_page_b_data[38].data = ( ( idx->item_type == ITEM_FIRE ) ? check : space );
      obj_page_b_data[39].data = ( ( idx->item_type == ITEM_HERB_CON ) ? check : space );
      obj_page_b_data[40].data = ( char * )"\\";
      obj_page_b_data[41].data = ( ( idx->item_type == ITEM_BOAT ) ? check : space );
      obj_page_b_data[42].data = ( ( idx->item_type == ITEM_RUNE ) ? check : space );
      obj_page_b_data[43].data = ( ( idx->item_type == ITEM_RUNEPOUCH ) ? check : space );
      obj_page_b_data[44].data = ( char * )"\\";

      break;

    default:
    case 'a':
      m_data = obj_page_a_data;
      format_string( tmp0, idx->name, 53 );
      format_string( tmp1, idx->short_descr, 53 );
      format_string( tmp2, idx->description, 63 );
      format_string( tmp3, idx->action_desc, 51 );
      obj_page_a_data[0].data = tmp0;
      obj_page_a_data[1].data = tmp1;
      obj_page_a_data[2].data = tmp2;
      obj_page_a_data[3].data = tmp3;
      obj_page_a_data[4].data = &( idx->value[0] );
      obj_page_a_data[5].data = get_item_strings( idx->item_type, 1 );

      obj_page_a_data[6].data = &( idx->value[1] );
      obj_page_a_data[7].data = get_item_strings( idx->item_type, 2 );

      obj_page_a_data[8].data = &( idx->value[2] );
      obj_page_a_data[9].data = get_item_strings( idx->item_type, 3 );

      obj_page_a_data[10].data = &( idx->value[3] );
      obj_page_a_data[11].data = get_item_strings( idx->item_type, 4 );

      obj_page_a_data[12].data = &( idx->weight );
      obj_page_a_data[13].data = &( idx->cost );


  }

  for( i = 0; m_data[i].ptrType != ( int )NULL; i++ )
  {
    sprintf( buf, "\x1B[%d;%dH", m_data[i].x, m_data[i].y );
    write_to_buffer( ch->desc, buf, strlen( buf ) );
    switch ( m_data[i].ptrType )
    {
      case INT:
        sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
        break;
      case SH_INT:
        sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
        break;
      default:
        sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
    write_to_buffer( ch->desc, buf, strlen( buf ) );
  }

  offset = get_offset( ch );

  /*
   * restrict scrolling area of screen 
   */
  sprintf( buf, "\x1B[%d;%dr", offset, ch->pagelen );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  /*
   * goes to pglen,1 
   */
  sprintf( buf, "\x1B[%d;1H", ( ch->pagelen ) );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  send_to_char( "\n\r", ch );
}






void fill_in_mob_page( CHAR_DATA * ch, MOB_INDEX_DATA * idx, char page )
{
  MENU_DATA *m_data;
  char buf[MAX_STRING_LENGTH];
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char tmp0[MAX_STRING_LENGTH];
  char tmp1[MAX_STRING_LENGTH];
  char tmp2[MAX_STRING_LENGTH];
  char tmp3[MAX_STRING_LENGTH];
  char *spec;
  int i, offset;

  switch ( page )
  {
    case 'h':
      return;
    case 'e':
      m_data = mob_page_e_data;
      spec = lookup_spec( idx->spec_fun );
      /*
       * getting a boolean for a special is a royal pain in the
       * butt.... would be easier if specs were global, then could
       * cmp by addr instead of string
       */
      mob_page_e_data[0].data = ( !str_cmp( spec, "spec_fido" ) ) ? check : space;
      mob_page_e_data[1].data = ( !str_cmp( spec, "spec_cast_adept" ) ) ? check : space;
      mob_page_e_data[2].data = ( !str_cmp( spec, "spec_breath_fire" ) ) ? check : space;
      mob_page_e_data[3].data = ( !str_cmp( spec, "spec_guard" ) ) ? check : space;
      mob_page_e_data[4].data = ( !str_cmp( spec, "spec_cast_cleric" ) ) ? check : space;
      mob_page_e_data[5].data = ( !str_cmp( spec, "spec_breath_frost" ) ) ? check : space;
      mob_page_e_data[6].data = ( !str_cmp( spec, "spec_janitor" ) ) ? check : space;
      mob_page_e_data[7].data = ( !str_cmp( spec, "spec_cast_mage" ) ) ? check : space;
      mob_page_e_data[8].data = ( !str_cmp( spec, "spec_breath_acid" ) ) ? check : space;
      mob_page_e_data[9].data = ( !str_cmp( spec, "spec_thief" ) ) ? check : space;
      mob_page_e_data[10].data = ( !str_cmp( spec, "spec_cast_undead" ) ) ? check : space;
      mob_page_e_data[11].data = ( !str_cmp( spec, "spec_breath_gas" ) ) ? check : space;
      mob_page_e_data[12].data = ( !str_cmp( spec, "spec_mayor" ) ) ? check : space;
      mob_page_e_data[13].data = ( !str_cmp( spec, "spec_breath_lightning" ) ) ? check : space;
      mob_page_e_data[14].data = ( !str_cmp( spec, "spec_poison" ) ) ? check : space;
      mob_page_e_data[15].data = ( !str_cmp( spec, "spec_executioner" ) ) ? check : space;
      mob_page_e_data[16].data = ( !str_cmp( spec, "spec_breath_any" ) ) ? check : space;


      mob_page_e_data[17].data = ( idx->defposition == POS_DEAD ) ? check : space;
      mob_page_e_data[18].data = ( idx->defposition == POS_MORTAL ) ? check : space;
      mob_page_e_data[19].data = ( idx->defposition == POS_INCAP ) ? check : space;
      mob_page_e_data[20].data = ( idx->defposition == POS_STUNNED ) ? check : space;
      mob_page_e_data[21].data = ( idx->defposition == POS_SLEEPING ) ? check : space;
      mob_page_e_data[22].data = ( idx->defposition == POS_RESTING ) ? check : space;
      mob_page_e_data[23].data = ( idx->defposition == POS_SITTING ) ? check : space;
      mob_page_e_data[24].data = ( idx->defposition == POS_FIGHTING ) ? check : space;
      mob_page_e_data[25].data = ( idx->defposition == POS_STANDING ) ? check : space;
      mob_page_e_data[26].data = ( idx->defposition == POS_MOUNTED ) ? check : space;

      mob_page_e_data[27].data = ( char * )get_ris( idx, RIS_FIRE );
      mob_page_e_data[28].data = ( char * )get_ris( idx, RIS_COLD );
      mob_page_e_data[29].data = ( char * )get_ris( idx, RIS_ELECTRICITY );
      mob_page_e_data[30].data = ( char * )get_ris( idx, RIS_ENERGY );
      mob_page_e_data[31].data = ( char * )get_ris( idx, RIS_POISON );
      mob_page_e_data[32].data = ( char * )get_ris( idx, RIS_BLUNT );
      mob_page_e_data[33].data = ( char * )get_ris( idx, RIS_PIERCE );
      mob_page_e_data[34].data = ( char * )get_ris( idx, RIS_SLASH );
      mob_page_e_data[35].data = ( char * )get_ris( idx, RIS_ACID );
      mob_page_e_data[36].data = ( char * )get_ris( idx, RIS_NONMAGIC );
      mob_page_e_data[37].data = ( char * )get_ris( idx, RIS_DRAIN );
      mob_page_e_data[38].data = ( char * )get_ris( idx, RIS_SLEEP );
      mob_page_e_data[39].data = ( char * )get_ris( idx, RIS_CHARM );
      mob_page_e_data[40].data = ( char * )get_ris( idx, RIS_HOLD );
      mob_page_e_data[41].data = ( char * )get_ris( idx, RIS_MAGIC );
      mob_page_e_data[42].data = ( char * )get_ris( idx, RIS_PLUS1 );
      mob_page_e_data[43].data = ( char * )get_ris( idx, RIS_PLUS2 );
      mob_page_e_data[44].data = ( char * )get_ris( idx, RIS_PLUS3 );
      mob_page_e_data[45].data = ( char * )get_ris( idx, RIS_PLUS4 );
      mob_page_e_data[46].data = ( char * )get_ris( idx, RIS_PLUS5 );
      mob_page_e_data[47].data = ( char * )get_ris( idx, RIS_PLUS6 );
      break;

    case 'd':
      m_data = mob_page_d_data;
      mob_page_d_data[0].data = &( idx->saving_poison_death );
      mob_page_d_data[1].data = &( idx->saving_wand );
      mob_page_d_data[2].data = &( idx->saving_para_petri );
      mob_page_d_data[3].data = &( idx->saving_breath );
      mob_page_d_data[4].data = &( idx->saving_spell_staff );
      mob_page_d_data[5].data = IS_SET( idx->xflags, PART_FINS ) ? check : space;
      mob_page_d_data[6].data = IS_SET( idx->xflags, PART_EAR ) ? check : space;
      mob_page_d_data[7].data = IS_SET( idx->xflags, PART_EYE ) ? check : space;
      mob_page_d_data[8].data = IS_SET( idx->xflags, PART_LONG_TONGUE ) ? check : space;
      mob_page_d_data[9].data = IS_SET( idx->xflags, PART_SCALES ) ? check : space;
      mob_page_d_data[10].data = IS_SET( idx->xflags, PART_TAIL ) ? check : space;
      mob_page_d_data[11].data = IS_SET( idx->xflags, PART_ARMS ) ? check : space;
      mob_page_d_data[12].data = IS_SET( idx->xflags, PART_LEGS ) ? check : space;
      mob_page_d_data[13].data = IS_SET( idx->xflags, PART_TENTACLES ) ? check : space;
      mob_page_d_data[14].data = IS_SET( idx->xflags, PART_BRAINS ) ? check : space;
      mob_page_d_data[15].data = IS_SET( idx->xflags, PART_GUTS ) ? check : space;
      mob_page_d_data[16].data = IS_SET( idx->xflags, PART_HEAD ) ? check : space;
      mob_page_d_data[17].data = IS_SET( idx->xflags, PART_FEET ) ? check : space;
      mob_page_d_data[18].data = IS_SET( idx->xflags, PART_EYESTALKS ) ? check : space;
      mob_page_d_data[19].data = IS_SET( idx->xflags, PART_FINGERS ) ? check : space;
      mob_page_d_data[20].data = IS_SET( idx->xflags, PART_WINGS ) ? check : space;
      mob_page_d_data[21].data = IS_SET( idx->xflags, PART_HANDS ) ? check : space;
      mob_page_d_data[22].data = IS_SET( idx->xflags, PART_HEART ) ? check : space;
      mob_page_d_data[23].data = IS_SET( idx->xflags, PART_CLAWS ) ? check : space;
      mob_page_d_data[24].data = IS_SET( idx->xflags, PART_HORNS ) ? check : space;
      mob_page_d_data[25].data = IS_SET( idx->xflags, PART_TUSKS ) ? check : space;
      mob_page_d_data[26].data = IS_SET( idx->xflags, PART_TAILATTACK ) ? check : space;
      mob_page_d_data[27].data = IS_SET( idx->xflags, PART_SHARPSCALES ) ? check : space;
      mob_page_d_data[28].data = &( idx->numattacks );
      sprintf( buf1, "[%5.5hd]D[%5.5hd]+[%5.5hd]", idx->hitnodice, idx->hitsizedice, idx->hitplus );
      if( mob_page_d_data[29].data != NULL )
        DISPOSE( mob_page_d_data[29].data );
      mob_page_d_data[29].data = str_dup( buf1 );

      mob_page_d_data[30].data = &( idx->hitroll );
      mob_page_d_data[31].data = &( idx->damroll );
      sprintf( buf2, "[%5.5hd]D[%5.5hd]+[%5.5hd]", idx->damnodice, idx->damsizedice, idx->damplus );
      if( mob_page_d_data[32].data != NULL )
        DISPOSE( mob_page_d_data[32].data );
      mob_page_d_data[32].data = str_dup( buf2 );
      break;
    case 'c':
      m_data = mob_page_c_data;
      mob_page_c_data[0].data = xIS_SET( idx->attacks, ATCK_BITE ) ? check : space;
      mob_page_c_data[1].data = xIS_SET( idx->attacks, ATCK_CLAWS ) ? check : space;
      mob_page_c_data[2].data = xIS_SET( idx->attacks, ATCK_FIREBREATH ) ? check : space;
      mob_page_c_data[3].data = xIS_SET( idx->attacks, ATCK_BASH ) ? check : space;
      mob_page_c_data[4].data = xIS_SET( idx->attacks, ATCK_STUN ) ? check : space;
      mob_page_c_data[5].data = xIS_SET( idx->attacks, ATCK_ACIDBREATH ) ? check : space;
      mob_page_c_data[6].data = xIS_SET( idx->attacks, ATCK_DRAIN ) ? check : space;
      mob_page_c_data[7].data = xIS_SET( idx->attacks, ATCK_KICK ) ? check : space;
      mob_page_c_data[8].data = xIS_SET( idx->attacks, ATCK_FEED ) ? check : space;
      mob_page_c_data[9].data = xIS_SET( idx->attacks, ATCK_GASBREATH ) ? check : space;
      mob_page_c_data[10].data = xIS_SET( idx->attacks, ATCK_POISON ) ? check : space;
      mob_page_c_data[11].data = xIS_SET( idx->attacks, ATCK_GAZE ) ? check : space;
      mob_page_c_data[12].data = xIS_SET( idx->attacks, ATCK_HARM ) ? check : space;
      mob_page_c_data[13].data = xIS_SET( idx->attacks, ATCK_FROSTBREATH ) ? check : space;
      mob_page_c_data[14].data = xIS_SET( idx->attacks, ATCK_CURSE ) ? check : space;
      mob_page_c_data[15].data = xIS_SET( idx->attacks, ATCK_BACKSTAB ) ? check : space;
      mob_page_c_data[16].data = xIS_SET( idx->attacks, ATCK_PUNCH ) ? check : space;
      mob_page_c_data[17].data = xIS_SET( idx->attacks, ATCK_LIGHTNBREATH ) ? check : space;
      mob_page_c_data[18].data = xIS_SET( idx->attacks, ATCK_WEAKEN ) ? check : space;
      mob_page_c_data[19].data = xIS_SET( idx->attacks, ATCK_TAIL ) ? check : space;
      mob_page_c_data[20].data = xIS_SET( idx->attacks, ATCK_STING ) ? check : space;
      mob_page_c_data[21].data = xIS_SET( idx->attacks, ATCK_CAUSESERIOUS ) ? check : space;
      mob_page_c_data[22].data = xIS_SET( idx->attacks, ATCK_TRIP ) ? check : space;
      mob_page_c_data[23].data = xIS_SET( idx->attacks, ATCK_FIREBALL ) ? check : space;
      mob_page_c_data[24].data = xIS_SET( idx->attacks, ATCK_GOUGE ) ? check : space;
      mob_page_c_data[25].data = xIS_SET( idx->attacks, ATCK_CAUSECRITICAL ) ? check : space;
      mob_page_c_data[26].data = xIS_SET( idx->attacks, ATCK_FLAMESTRIKE ) ? check : space;
      mob_page_c_data[27].data = xIS_SET( idx->attacks, ATCK_EARTHQUAKE ) ? check : space;
      mob_page_c_data[28].data = xIS_SET( idx->attacks, ATCK_COLORSPRAY ) ? check : space;
      mob_page_c_data[29].data = xIS_SET( idx->attacks, ATCK_NASTYPOISON ) ? check : space;
      mob_page_c_data[30].data = xIS_SET( idx->attacks, ATCK_BLINDNESS ) ? check : space;
      mob_page_c_data[31].data = xIS_SET( idx->defenses, DFND_SANCTUARY ) ? check : space;
      mob_page_c_data[32].data = xIS_SET( idx->defenses, DFND_CURELIGHT ) ? check : space;
      mob_page_c_data[33].data = xIS_SET( idx->defenses, DFND_DISPELEVIL ) ? check : space;
      mob_page_c_data[34].data = xIS_SET( idx->defenses, DFND_SHIELD ) ? check : space;
      mob_page_c_data[35].data = xIS_SET( idx->defenses, DFND_CURESERIOUS ) ? check : space;
      mob_page_c_data[36].data = xIS_SET( idx->defenses, DFND_DISPELMAGIC ) ? check : space;
      mob_page_c_data[37].data = xIS_SET( idx->defenses, DFND_DODGE ) ? check : space;
      mob_page_c_data[38].data = xIS_SET( idx->defenses, DFND_FIRESHIELD ) ? check : space;
      mob_page_c_data[39].data = xIS_SET( idx->defenses, DFND_CURECRITICAL ) ? check : space;
      mob_page_c_data[40].data = xIS_SET( idx->defenses, DFND_TELEPORT ) ? check : space;
      mob_page_c_data[41].data = xIS_SET( idx->defenses, DFND_PARRY ) ? check : space;
      mob_page_c_data[42].data = xIS_SET( idx->defenses, DFND_SHOCKSHIELD ) ? check : space;
      mob_page_c_data[43].data = xIS_SET( idx->defenses, DFND_HEAL ) ? check : space;
      mob_page_c_data[44].data = xIS_SET( idx->defenses, DFND_BLESS ) ? check : space;
      mob_page_c_data[45].data = xIS_SET( idx->defenses, DFND_DISARM ) ? check : space;
      mob_page_c_data[46].data = xIS_SET( idx->defenses, DFND_STONESKIN ) ? check : space;
      mob_page_c_data[47].data = xIS_SET( idx->defenses, DFND_MONSUM1 ) ? check : space;
      mob_page_c_data[48].data = xIS_SET( idx->defenses, DFND_MONSUM2 ) ? check : space;
      mob_page_c_data[49].data = xIS_SET( idx->defenses, DFND_MONSUM3 ) ? check : space;
      mob_page_c_data[50].data = xIS_SET( idx->defenses, DFND_MONSUM4 ) ? check : space;
      break;
    case 'b':
      m_data = mob_page_b_data;
      mob_page_b_data[0].data = xIS_SET( idx->act, ACT_SENTINEL ) ? check : space;
      mob_page_b_data[1].data = xIS_SET( idx->act, ACT_SCAVENGER ) ? check : space;
      mob_page_b_data[2].data = xIS_SET( idx->act, ACT_AGGRESSIVE ) ? check : space;
      mob_page_b_data[3].data = xIS_SET( idx->act, ACT_STAY_AREA ) ? check : space;
      mob_page_b_data[4].data = xIS_SET( idx->act, ACT_WIMPY ) ? check : space;
      mob_page_b_data[5].data = xIS_SET( idx->act, ACT_PET ) ? check : space;
      mob_page_b_data[6].data = xIS_SET( idx->act, ACT_TRAIN ) ? check : space;
      mob_page_b_data[7].data = xIS_SET( idx->act, ACT_PRACTICE ) ? check : space;
      mob_page_b_data[8].data = xIS_SET( idx->act, ACT_IMMORTAL ) ? check : space;
      mob_page_b_data[9].data = xIS_SET( idx->act, ACT_DEADLY ) ? check : space;
      mob_page_b_data[10].data = xIS_SET( idx->act, ACT_POLYSELF ) ? check : space;
      mob_page_b_data[11].data = xIS_SET( idx->act, ACT_META_AGGR ) ? check : space;
      mob_page_b_data[12].data = xIS_SET( idx->act, ACT_GUARDIAN ) ? check : space;
      mob_page_b_data[13].data = xIS_SET( idx->act, ACT_RUNNING ) ? check : space;
      mob_page_b_data[14].data = xIS_SET( idx->act, ACT_NOWANDER ) ? check : space;
      mob_page_b_data[15].data = xIS_SET( idx->act, ACT_MOUNTABLE ) ? check : space;
      mob_page_b_data[16].data = xIS_SET( idx->act, ACT_MOUNTED ) ? check : space;
      mob_page_b_data[17].data = IS_AFFECTED( idx, AFF_BLIND ) ? check : space;
      mob_page_b_data[18].data = IS_AFFECTED( idx, AFF_DETECT_INVIS ) ? check : space;
      mob_page_b_data[19].data = IS_AFFECTED( idx, AFF_DETECT_EVIL ) ? check : space;
      mob_page_b_data[20].data = IS_AFFECTED( idx, AFF_DETECT_MAGIC ) ? check : space;
      mob_page_b_data[21].data = IS_AFFECTED( idx, AFF_DETECT_HIDDEN ) ? check : space;
      mob_page_b_data[22].data = IS_AFFECTED( idx, AFF_HOLD ) ? check : space;
      mob_page_b_data[23].data = IS_AFFECTED( idx, AFF_SANCTUARY ) ? check : space;
      mob_page_b_data[24].data = IS_AFFECTED( idx, AFF_FAERIE_FIRE ) ? check : space;
      mob_page_b_data[25].data = IS_AFFECTED( idx, AFF_INFRARED ) ? check : space;
      mob_page_b_data[26].data = IS_AFFECTED( idx, AFF_CURSE ) ? check : space;
      mob_page_b_data[27].data = IS_AFFECTED( idx, AFF_FLAMING ) ? check : space;
      mob_page_b_data[28].data = IS_AFFECTED( idx, AFF_POISON ) ? check : space;
      mob_page_b_data[29].data = IS_AFFECTED( idx, AFF_PROTECT ) ? check : space;
      mob_page_b_data[30].data = IS_AFFECTED( idx, AFF_PARALYSIS ) ? check : space;
      mob_page_b_data[31].data = IS_AFFECTED( idx, AFF_SLEEP ) ? check : space;
      mob_page_b_data[32].data = IS_AFFECTED( idx, AFF_HIDE ) ? check : space;
      mob_page_b_data[33].data = IS_AFFECTED( idx, AFF_SNEAK ) ? check : space;
      mob_page_b_data[34].data = IS_AFFECTED( idx, AFF_CHARM ) ? check : space;
      mob_page_b_data[35].data = IS_AFFECTED( idx, AFF_PARALYSIS ) ? check : space;
      mob_page_b_data[36].data = IS_AFFECTED( idx, AFF_FLYING ) ? check : space;
      mob_page_b_data[37].data = IS_AFFECTED( idx, AFF_PASS_DOOR ) ? check : space;
      mob_page_b_data[38].data = IS_AFFECTED( idx, AFF_TRUESIGHT ) ? check : space;
      mob_page_b_data[39].data = IS_AFFECTED( idx, AFF_DETECTTRAPS ) ? check : space;
      mob_page_b_data[40].data = IS_AFFECTED( idx, AFF_SCRYING ) ? check : space;
      mob_page_b_data[41].data = IS_AFFECTED( idx, AFF_FIRESHIELD ) ? check : space;
      mob_page_b_data[42].data = IS_AFFECTED( idx, AFF_SHOCKSHIELD ) ? check : space;
      mob_page_b_data[43].data = IS_AFFECTED( idx, AFF_FLOATING ) ? check : space;
      mob_page_b_data[44].data = IS_AFFECTED( idx, AFF_INVISIBLE ) ? check : space;
      break;
    case 'f':
      m_data = mob_page_f_data;
      mob_page_f_data[0].data = ( idx->race == get_npc_race( "human" ) ) ? check : space;
      mob_page_f_data[1].data = ( idx->race == get_npc_race( "neanderthal" ) ) ? check : space;
      mob_page_f_data[2].data = ( idx->race == get_npc_race( "avis" ) ) ? check : space;
      mob_page_f_data[3].data = ( idx->race == get_npc_race( "amphibian" ) ) ? check : space;
      mob_page_f_data[4].data = ( idx->race == get_npc_race( "elf" ) ) ? check : space;
      mob_page_f_data[5].data = ( idx->race == get_npc_race( "orc" ) ) ? check : space;
      mob_page_f_data[6].data = ( idx->race == get_npc_race( "bugbear" ) ) ? check : space;
      mob_page_f_data[7].data = ( idx->race == get_npc_race( "bovine" ) ) ? check : space;

      mob_page_f_data[8].data = ( idx->race == get_npc_race( "dwarf" ) ) ? check : space;
      mob_page_f_data[9].data = ( idx->race == get_npc_race( "skeleton" ) ) ? check : space;
      mob_page_f_data[10].data = ( idx->race == get_npc_race( "dragon" ) ) ? check : space;
      mob_page_f_data[11].data = ( idx->race == get_npc_race( "canine" ) ) ? check : space;

      mob_page_f_data[12].data = ( idx->race == get_npc_race( "ant" ) ) ? check : space;
      mob_page_f_data[13].data = ( idx->race == get_npc_race( "halfling" ) ) ? check : space;
      mob_page_f_data[14].data = ( idx->race == get_npc_race( "thoul" ) ) ? check : space;
      mob_page_f_data[15].data = ( idx->race == get_npc_race( "rustmonster" ) ) ? check : space;
      mob_page_f_data[16].data = ( idx->race == get_npc_race( "crustacean" ) ) ? check : space;
      mob_page_f_data[17].data = ( idx->race == get_npc_race( "bee" ) ) ? check : space;
      mob_page_f_data[18].data = ( idx->race == get_npc_race( "pixie" ) ) ? check : space;
      mob_page_f_data[19].data = ( idx->race == get_npc_race( "undead" ) ) ? check : space;
      mob_page_f_data[20].data = ( idx->race == get_npc_race( "shadow" ) ) ? check : space;
      mob_page_f_data[21].data = ( idx->race == get_npc_race( "feline" ) ) ? check : space;
      mob_page_f_data[22].data = ( idx->race == get_npc_race( "beetle" ) ) ? check : space;
      mob_page_f_data[23].data = ( idx->race == get_npc_race( "vampire" ) ) ? check : space;
      mob_page_f_data[24].data = ( idx->race == get_npc_race( "zombie" ) ) ? check : space;
      mob_page_f_data[25].data = ( idx->race == get_npc_race( "shapeshifter" ) ) ? check : space;
      mob_page_f_data[26].data = ( idx->race == get_npc_race( "fish" ) ) ? check : space;
      mob_page_f_data[27].data = ( idx->race == get_npc_race( "fly" ) ) ? check : space;
      mob_page_f_data[28].data = ( idx->race == get_npc_race( "gargoyle" ) ) ? check : space;
      /*
       * mob_page_f_data[29].data = (idx->race == get_npc_race("gargoyle")) ? check : space;
       */
      mob_page_f_data[29].data = ( idx->race == get_npc_race( "ape" ) ) ? check : space;
      mob_page_f_data[30].data = ( idx->race == get_npc_race( "shrieker" ) ) ? check : space;
      mob_page_f_data[31].data = ( idx->race == get_npc_race( "insect" ) ) ? check : space;
      mob_page_f_data[32].data = ( idx->race == get_npc_race( "locust" ) ) ? check : space;
      mob_page_f_data[33].data = ( idx->race == get_npc_race( "ghoul" ) ) ? check : space;
      mob_page_f_data[34].data = ( idx->race == get_npc_race( "baboon" ) ) ? check : space;
      mob_page_f_data[35].data = ( idx->race == get_npc_race( "stirge" ) ) ? check : space;
      mob_page_f_data[36].data = ( idx->race == get_npc_race( "mammal" ) ) ? check : space;
      mob_page_f_data[37].data = ( idx->race == get_npc_race( "snake" ) ) ? check : space;
      mob_page_f_data[38].data = ( idx->race == get_npc_race( "gnoll" ) ) ? check : space;
      mob_page_f_data[39].data = ( idx->race == get_npc_race( "bat" ) ) ? check : space;
      mob_page_f_data[40].data = ( idx->race == get_npc_race( "wight" ) ) ? check : space;
      mob_page_f_data[41].data = ( idx->race == get_npc_race( "porcine" ) ) ? check : space;
      mob_page_f_data[42].data = ( idx->race == get_npc_race( "spider" ) ) ? check : space;
      mob_page_f_data[43].data = ( idx->race == get_npc_race( "gnome" ) ) ? check : space;
      mob_page_f_data[44].data = ( idx->race == get_npc_race( "bear" ) ) ? check : space;
      mob_page_f_data[45].data = ( idx->race == get_npc_race( "reptile" ) ) ? check : space;
      mob_page_f_data[46].data = ( idx->race == get_npc_race( "worm" ) ) ? check : space;
      mob_page_f_data[47].data = ( idx->race == get_npc_race( "goblin" ) ) ? check : space;
      mob_page_f_data[48].data = ( idx->race == get_npc_race( "boar" ) ) ? check : space;
      mob_page_f_data[49].data = ( idx->race == get_npc_race( "rodent" ) ) ? check : space;
      mob_page_f_data[50].data = ( idx->race == get_npc_race( "golem" ) ) ? check : space;
      mob_page_f_data[51].data = ( idx->race == get_npc_race( "cat" ) ) ? check : space;
      mob_page_f_data[52].data = ( idx->race == get_npc_race( "troglodyte" ) ) ? check : space;
      mob_page_f_data[53].data = ( idx->race == get_npc_race( "gelatin" ) ) ? check : space;
      mob_page_f_data[54].data = ( idx->race == get_npc_race( "gorgon" ) ) ? check : space;
      mob_page_f_data[55].data = ( idx->race == get_npc_race( "dog" ) ) ? check : space;
      mob_page_f_data[56].data = ( idx->race == get_npc_race( "spirit" ) ) ? check : space;
      mob_page_f_data[57].data = ( idx->race == get_npc_race( "mold" ) ) ? check : space;
      mob_page_f_data[58].data = ( idx->race == get_npc_race( "harpy" ) ) ? check : space;
      mob_page_f_data[59].data = ( idx->race == get_npc_race( "ferret" ) ) ? check : space;
      mob_page_f_data[60].data = ( idx->race == get_npc_race( "magical" ) ) ? check : space;
      mob_page_f_data[61].data = ( idx->race == get_npc_race( "ooze" ) ) ? check : space;
      mob_page_f_data[62].data = ( idx->race == get_npc_race( "hobgoblin" ) ) ? check : space;
      mob_page_f_data[63].data = ( idx->race == get_npc_race( "horse" ) ) ? check : space;
      mob_page_f_data[64].data = ( idx->race == get_npc_race( "slime" ) ) ? check : space;
      mob_page_f_data[65].data = ( idx->race == get_npc_race( "kobold" ) ) ? check : space;
      mob_page_f_data[66].data = ( idx->race == get_npc_race( "mule" ) ) ? check : space;
      mob_page_f_data[67].data = ( idx->race == get_npc_race( "lizardman" ) ) ? check : space;
      mob_page_f_data[68].data = ( idx->race == get_npc_race( "rat" ) ) ? check : space;
      mob_page_f_data[69].data = ( idx->race == get_npc_race( "lycanthrope" ) ) ? check : space;
      mob_page_f_data[79].data = ( idx->race == get_npc_race( "shrew" ) ) ? check : space;
      mob_page_f_data[71].data = ( idx->race == get_npc_race( "minotaur" ) ) ? check : space;
      mob_page_f_data[72].data = ( idx->race == get_npc_race( "wolf" ) ) ? check : space;
      break;
    case 'a':
    default:
      m_data = mob_page_a_data;
      /*
       * mob_page_a_data[0].data    =
       * format_string(idx->player_name,70);
       * mob_page_a_data[1].data    =
       * format_string(idx->short_descr,60);
       * mob_page_a_data[2].data    =
       * format_string(idx->long_descr,60); mob_page_a_data[3].data
       * =  format_string(idx->description,60);
       */
      format_string( tmp0, idx->player_name, 59 );
      format_string( tmp1, idx->short_descr, 59 );
      format_string( tmp2, idx->long_descr, 69 );
      format_string( tmp3, idx->description, 69 );
      mob_page_a_data[0].data = tmp0;
      mob_page_a_data[1].data = tmp1;
      mob_page_a_data[2].data = tmp2;
      mob_page_a_data[3].data = tmp3;

      mob_page_a_data[4].data = &( idx->vnum );
      mob_page_a_data[5].data = &( idx->level );
      mob_page_a_data[6].data = ( char * )"see sect. 4";
      mob_page_a_data[7].data = npc_race[idx->race];
      mob_page_a_data[8].data = ( char * )npc_sex[idx->sex];
      mob_page_a_data[9].data = ( int * )&( idx->gold );
      mob_page_a_data[10].data = &( idx->alignment );
      mob_page_a_data[11].data = &( idx->perm_str );
      mob_page_a_data[12].data = &( idx->perm_int );
      mob_page_a_data[14].data = &( idx->perm_dex );
      mob_page_a_data[15].data = &( idx->perm_con );
      mob_page_a_data[17].data = &( idx->ac );

      mob_page_a_data[18].data = ( idx->class == 0 ) ? check : space;
      mob_page_a_data[19].data = ( idx->class == 1 ) ? check : space;
      mob_page_a_data[20].data = ( idx->class == 2 ) ? check : space;
      mob_page_a_data[21].data = ( idx->class == 3 ) ? check : space;
      mob_page_a_data[22].data = ( idx->class == 4 ) ? check : space;
      mob_page_a_data[23].data = ( idx->class == 5 ) ? check : space;
      mob_page_a_data[24].data = ( idx->class == 6 ) ? check : space;
      mob_page_a_data[25].data = ( idx->class == 20 ) ? check : space;
      mob_page_a_data[26].data = ( idx->class == 21 ) ? check : space;
      mob_page_a_data[27].data = ( idx->class == 22 ) ? check : space;
      mob_page_a_data[28].data = ( idx->class == 23 ) ? check : space;
      mob_page_a_data[29].data = ( idx->class == 24 ) ? check : space;
      mob_page_a_data[30].data = ( idx->class == 25 ) ? check : space;
      break;
  }


  for( i = 0; m_data[i].ptrType != ( int )NULL; i++ )
  {
    sprintf( buf, "\x1B[%d;%dH", m_data[i].x, m_data[i].y );
    write_to_buffer( ch->desc, buf, strlen( buf ) );
    switch ( m_data[i].ptrType )
    {
      case INT:
        sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
        break;
      case SH_INT:
        sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
        break;
      default:
        sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }

#ifdef WRONG_WAY
    if( m_data[i].ptrType == INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( int * )( m_data[i].data ) ) );
    }
    if( m_data[i].ptrType == SH_INT )
    {
      sprintf( buf, m_data[i].outFormat, *( ( sh_int * ) ( m_data[i].data ) ) );
    }
    else
    {
      sprintf( buf, m_data[i].outFormat, m_data[i].data );
    }
#endif
    write_to_buffer( ch->desc, buf, strlen( buf ) );
  }

  offset = get_offset( ch );

  /*
   * restrict scrolling area of screen 
   */
  sprintf( buf, "\x1B[%d;%dr", offset, ch->pagelen );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  /*
   * goes to pglen,1 
   */
  sprintf( buf, "\x1B[%d;1H", ( ch->pagelen ) );
  write_to_buffer( ch->desc, buf, strlen( buf ) );

  send_to_char( "\n\r", ch );
}

int get_bvl( int bitvector )
{
  int x;

  for( x = 0; x < 31; x++ )
    if( 1 << x == bitvector )
      return x;
  return 0;
}


int get_affect( OBJ_INDEX_DATA * obj, int type )
{
  AFFECT_DATA *aff;
  bool bitsearch, ris_search;
  int apply = 0, bit = 0, total;

  bitsearch = TRUE;
  total = 0;
  ris_search = FALSE;
  if( type < 1000 )
  {
    apply = type;
    bitsearch = FALSE;
  }
  else if( IS_SET( type, GA_AFFECTED ) )
  {
    REMOVE_BIT( type, GA_AFFECTED );
    bit = 1 << type;
    apply = APPLY_AFFECT;
  }
  else if( IS_SET( type, GA_RIS ) )
  {
    REMOVE_BIT( type, GA_RIS );
    bit = 1 << type;
    apply = -1;
  }
  for( aff = obj->first_affect; aff; aff = aff->next )
  {
    if( aff->location == apply || ( bitsearch && aff->location >= APPLY_AFFECT && aff->location <= APPLY_SUSCEPTIBLE ) )
    {
      if( bitsearch )
      {
        if( IS_SET( aff->modifier, bit ) )
          switch ( aff->location )
          {
            case APPLY_AFFECT:
              total = 1;
              break;
            case APPLY_RESISTANT:
              SET_BIT( total, RIS_R00 );
              break;
            case APPLY_IMMUNE:
              SET_BIT( total, RIS_0I0 );
              break;
            case APPLY_SUSCEPTIBLE:
              SET_BIT( total, RIS_00S );
              break;
          }
      }
      else
        total += aff->modifier;
    }
  }
  return total;
}




/*
 * Constants follow.
 */

const char *npc_sex[3] = {
  "Neuter", "Male", "Female"
};
const char *ris_strings[] = {
  "...",  /* 0 */
  "R..",  /* 1 */
  ".I.",  /* 2 */
  "RI.",  /* 3 */
  "..S",  /* 4 */
  "R.S",  /* 5 */
  ".IS",  /* 6 */
  "RIS"
};  /* 7 */

const char mob_page_a[] = ".----------[mob page a]-----[%10.10s]-------------------------------------.\r\n"
  "|[1]TEXT|  a]Name :                                                          |\r\n"
  "|-------'  b]Short:                                                          |\r\n"
  "|c]Long:                                                                     |\r\n"
  "|d]Desc:                                                                     |\r\n"
  ":---------------------+------------------------------------------------------'\r\n"
  "|[2]ATTRIBUTES |      |[3]STATS |   |[4]CLASS |                        |\r\n"
  "|--------------'      |---------'   |---------'                        |\r\n"
  "| a]Vnum :            | a]Str:      | a]Mage   ( )    b]Cleric    ( )  |\r\n"
  "| b]Level:            | b]Int:      | c]Thief  ( )    d]Warrior   ( )  |\r\n"
  "| c]Class:            | c]Wis:      | e]Vampire( )    f]Druid     ( )  |\r\n"
  "| d]Race :            | d]Dex:      | g]Ranger ( )    h]Baker     ( )  |\r\n"
  "| e]Sex  :            | e]Con:      | i]Butcher( )    j]Blacksmith( )  |\r\n"
  "| f]Gold :            | f]Cha:      | k]Mayor  ( )    l]King      ( )  |\r\n"
  "| g]Align:            | g]AC :      | m]Queen  ( )                     |\r\n"
  ":---------------------+-------------+----------------------------------'\r\n";

const char mob_page_b[] = ".----------[mob page b]-----[%10.10s]--------------------------.\r\n"
  "|[1]ACT FLAGS| a]Sentinel  ( )  b]Scavenger  ( )  c]Aggressiv( )  |\r\n"
  "|------------' d]StayArea  ( )  e]Wimpy      ( )  f]Pet      ( )  |\r\n"
  "|g]Train  ( )  h]Practice  ( )  i]Immortal   ( )  j]Deadly   ( )  |\r\n"
  "|k]PolySlf( )  l]MetaAggres( )  m]Guardian   ( )  n]Running  ( )  |\r\n"
  "|o]NoWandr( )  p]Mountable ( )  q]Mounted    ( )                  |\r\n"
  ":-----------------------------------------------------------------:\r\n"
  "|[2]AFF FLAGS| a]Blind     ( )  b]DetInvis   ( )  c]DetEvil  ( )  |\r\n"
  "|------------' d]DetMag    ( )  e]DetHiddn   ( )  f]Hold     ( )  |\r\n"
  "|g]Sanct  ( )  h]Faerie    ( )  i]InfraRed   ( )  j]Cursed   ( )  |\r\n"
  "|k]Flaming( )  l]Poison    ( )  m]Protect    ( )  n]Paralysis( )  |\r\n"
  "|o]Sleep  ( )  p]Hide      ( )  q]Sneak      ( )  r]Charm    ( )  |\r\n"
  "|s]Flying ( )  t]PassDoor  ( )  u]TrueSight  ( )  v]DetTraps ( )  |\r\n"
  "|w]Scrying( )  x]FireShield( )  y]ShockShield( )  z]Floating ( )  |\r\n"
  "|A]Invisib( )                                                     |\r\n"
  "`-----------------------------------------------------------------'\r\n";

const char mob_page_c[] = ".----------.----------[mob page c]-----[%10.10s]-------------------.\r\n"
  "|[1]ATTACKS|  a]bite    ( )      b]claws( )         c]firebreath  ( ) |\r\n"
  "|----------'  d]bash    ( )      e]stun ( )         f]acidBreath  ( ) |\r\n"
  "|g]drain ( )  h]kick    ( )      i]feed ( )         j]gasBreath   ( ) |\r\n"
  "|k]poison( )  l]gaze    ( )      m]harm ( )         n]frostBreath ( ) |\r\n"
  "|o]curse ( )  p]backstab( )      q]punch( )         r]lightBreath ( ) |\r\n"
  "|s]weaken( )  t]tail    ( )      u]sting( )         v]causeSerious( ) |\r\n"
  "|w]trip  ( )  x]fireBall( )      y]gouge( )         z]causeCritica( ) |\r\n"
  "|             B]flameStrike( )                      D]earthQuake  ( ) |\r\n"
  "|             F]colorSpray ( )   G]nastyPoison( )   H]blindness   ( ) |\r\n"
  ":-----------.---------------------------------------------------------+-.\r\n"
  "|[2]DEFENSES|   a]sanctuary  ( )   b]cureLight   ( )   c]dispelEvil ( ) |\r\n"
  "|-----------'   d]shield     ( )   e]cureSerious ( )   f]dispelMagic( ) |\r\n"
  "|g]dodge ( )    h]fireShield ( )   i]cureCritical( )   j]teleport   ( ) |\r\n"
  "|k]parry ( )    l]shockShield( )   m]heal        ( )   n]bless      ( ) |\r\n"
  "|o]disarm( )    p]stoneSkin  ( )   q]mobSummon1  ( )   r]mobSummon2 ( ) |\r\n"
  "|                                  u]mobSummon3  ( )   v]mobSummon4 ( ) |\r\n"
  ":-----------------------------------------------------------------------'\r\n";


const char mob_page_d[] = ".----------------.----------[mob page d]-----[%10.10s]----------.\r\n"
  "|[1]SAVING THROWS| a]Poison/Death     %%   c]Paralysis/Petrify    %% |\r\n"
  "|----------------' c]Wand             %%   d]Breath               %% |\r\n"
  "|                  e]Spell/Staff      %%                            |\r\n"
  ":------------------------------------------------------------------^-----.\r\n"
  "|[2]BODY  | a]Fins( )  b]Ear ( )  c]Eye ( )  d]LongTongue( ) e]Scales ( )|\r\n"
  "|   PARTS | f]Tail( )  g]Arms( )  h]Legs( )  i]Tentacles ( ) j]Brains ( )|\r\n"
  "|---------' k]Guts( )  l]Head( )  m]Feet( )  n]EyeStalks ( ) o]Fingers( )|\r\n"
  "|           p]Wings( ) q]Hands( ) r]Heart( )                             |\r\n"
  "|ATTACKING: u]Claws( ) v]Horns( ) w]Tusks( )                             |\r\n"
  "|           z]TailAttack( )       A]SharpScales( )                       |\r\n"
  ":---------.--------------------------------------------------------------:\r\n"
  "|[3]FIGHT |  a]Attacks:  [   ]       b]HitDice:[     ]D[     ]+[     ]   |\r\n"
  "|   STATS |  c]HitRoll:[     ]                                           |\r\n"
  "|---------'  d]DamRoll:[     ]       e]DamDice:[     ]D[     ]+[     ]   |\r\n"
  "`------------------------------------------------------------------------'\r\n";


const char mob_page_e[] = ".---------.----------[mob page e]-----[%10.10s]----------------------.\r\n"
  "|[1]SPEC'L| a]fido   ( )    b]castAdept ( )        c]breathFire     ( ) |\r\n"
  "|   FUNCTS| d]guard  ( )    e]castCleric( )        f]breathFrost    ( ) |\r\n"
  "|---------' g]janitor( )    h]castMage  ( )        i]breathAcid     ( ) |\r\n"
  "|           j]thief  ( )    k]castUndead( )        l]breathGas      ( ) |\r\n"
  "|           m]mayor  ( )                           o]breathLightning( ) |\r\n"
  "|           p]poison ( )    q]executionr( )        r]breathAny      ( ) |\r\n"
  ":-----------.-------------------------------------------------------.---+\r\n"
  "|[2]DEFAULT |    a]Dead   ( )   b]Mortally( )    c]Incapacitated( ) |\r\n"
  "|   POSITION|    d]Stunned( )   e]Sleeping( )    f]Resting      ( ) |\r\n"
  "|-----------'    g]Sitting( )   h]Fighting( )    i]Standing     ( ) |\r\n"
  "|                k]Mounted( )                                       |\r\n"
  ":--------.----------------------------------------------------------^----.\r\n"
  "|[3]RIS  |   a]fire  ... b]cold  ... c]elect ... d]energ ... e]poison ...|\r\n"
  "|PROFILE |   f]blunt ... g]pierce... h]slash ... i]acid  ... j]nonMag ...|\r\n"
  "|--------'   k]drain ... l]sleep ... m]charm ... n]hold  ... o]magic  ...|\r\n"
  "|p]plus1 ... q]plus2 ... r]plus3 ... s]plus4 ... t]plus5 ... u]plus6  ...|\r\n"
  ":------------------------------------------------------------------------'\r\n";





const char room_page_a[] = ".---------.--[rmenu page a]-------[%10.10s]-----------------------------.\r\n"
  "||[1]TEXT|                                                                  |\r\n"
  "|--------'                                                                  |\r\n"
  "|a]Name:                                                                    |\r\n"
  "|                                                                           |\r\n"
  "|b]Description:                                                             |\r\n"
  "|                                                                           |\r\n"
  "|                                                                           |\r\n"
  ":---------------------+-----------------------------------------------------'\r\n";



const char room_page_b[] = ".---------.--[rmenu page b]-------[%10.10s]----------------.\r\n"
  "|[1]ROOM  | a]Dark      ( )  b]Death    ( )    c]NoMobs   ( ) |\r\n"
  "|   FLAGS | d]Indoors   ( )  e]Lawful   ( )    f]NoMagic  ( ) |\r\n"
  "|---------' g]PetShop   ( )  h]Neutral  ( )    i]NoDrop   ( ) |\r\n"
  "|           j]Safe      ( )  k]Chaotic  ( )    l]NoDropAll( ) |\r\n"
  "|           m]Teleport  ( )  n]Donation ( )    o]NoRecall ( ) |\r\n"
  "|           p]Private   ( )  q]Solitary ( )    r]NoAstral ( ) |\r\n"
  "|           s]Tunnel    ( )  t]Silence  ( )    u]NoSummon ( ) |\r\n"
  "|           v]ClanStorge( )  w]LogSpeech( )    x]NoFloor  ( ) |\r\n"
  ":-------------------------------------------------------------+--------.\r\n"
  "|[2]SECTOR | a]Inside  ( )  b]Forest      ( )  c]City( )  d]Hills ( )  |\r\n"
  "|   TYPE   | e]Mountain( )  f]Water_Swim  ( )  g]Air ( )  h]Desert( )  |\r\n"
  "|----------' i]Dunno   ( )  j]Water_NoSwim( )             l]Field ( )  |\r\n"
  "`----------------------------------------------------------------------'\r\n";


const char room_page_c[] = ".----------.-[rmenu page c]-------[%10.10s]--------------------------.\r\n"
  "|[1] EXIT  | Section [2] now    :           n]orth( )            u]p( ) |\r\n"
  "|DIRECTION | shows info about   :   w]est( )          e]ast( )          |\r\n"
  "| SUBMENU  |   the exit to      :           s]outh( )          d]own( ) |\r\n"
  ":-----------------------------------------------------------------------:\r\n"
  "|[2] EXIT  | a]IsDoor  ( )  b]Secret   ( )  KeyWords:                   |\r\n"
  "|PROPERTIES| c]Closed  ( )  d]PickProof( )  m:[#######################] |\r\n"
  "|----------' e]Locked  ( )  f]PassProof( )  n:[#######################] |\r\n"
  "|                                           o:[#######################] |\r\n"
  "|i]To Room: [     ] [                   ]   p:[#######################] |\r\n"
  "|j]    Key: [     ] [                   ]   q:[#######################] |\r\n"
  "|k]:ExitDescr:                                                          |\r\n"
  "|                                                                       |\r\n"
  "`-----------------------------------------------------------------------'\r\n";


const char room_page_d[] = ".---------.--[rmenu page d]-------[%10.10s]---------------------------.\r\n"
  "|[1] STD  |   a]Hut      ( )  b]Tent    ( )  c]Hovel   ( )  d]Campsite( ) |\r\n"
  "|   ROOMS |   e]Shack    ( )  f]Cabin   ( )  g]Homested( )  h]Keep    ( ) |\r\n"
  "|---------'   i]Fortress ( )  j]Castle  ( )  k]GuardHse( )  l]Temple  ( ) |\r\n"
  "|m]Store  ( ) n]Graveyard( )  o]Monastry( )  p]Stable  ( )  q]Tavern  ( ) |\r\n"
  "|r]Basemnt( ) s]Bedroom  ( )  t]BnquetRm( )  u]Corridor( )  v]Attic   ( ) |\r\n"
  "|w]Vault  ( ) x]SittingRm( )  y]Study   ( )  z]Passage ( )  A]Tower   ( ) |\r\n"
  "|B]Crypt  ( ) C]WorkRoom ( )  D]Lab     ( )  E]Hallway ( )  F]Turret  ( ) |\r\n"
  "|G]StorRm ( ) H]Kitchen  ( )  I]Larder  ( )  J]Stairway( )  K]Rooftop ( ) |\r\n"
  "|L]Closet ( ) M]Office   ( )  N]Treasury( )  O]Landing ( )  P]Balcony ( ) |\r\n"
  "|Q]Foyer  ( ) R]DrawingRm( )  S]Den     ( )  T]Ladder  ( )  U]Catwalk ( ) |\r\n"
  "|V]Entrnce( ) W]Arboretum( )  X]Library ( )  Y]Vent    ( )  Z]Shaft   ( ) |\r\n"
  "|0]Gate   ( ) 1]AudiencRm( )  2]Consrvty( )  3]DumbWatr( )  4]Chimney ( ) |\r\n"
  "|5]Porch  ( ) 6]ClassRoom( )  7]CloakRm ( )  8]Lawn    ( )  9]Garden  ( ) |\r\n"
  "|!]Lake   ( ) @]Forest  ( )   #]Swamp   ( )  $]Well    ( )  %%]Street  ( ) |\r\n"
  "|^]River  ( ) &]Canyon  ( )   *]Beach   ( )  (]Mine    ( )  )]Road    ( ) |\r\n"
  "|-]Stream ( ) _]Clearing( )   +]SnakePit( )  =]Tunnel  ( )  |]Path    ( ) |\r\n"
  "|\\]Rapids ( ) ~]Desert  ( )   `]SandStrm( )  {]Rope    ( )  []Cliff   ( ) |\r\n"
  "|}]CaveRiv( ) ]]Jungle  ( )   :]Sandbar ( )  \"]RopeBrdg( )  ']Bridge  ( ) |\r\n"
  "|<]CaveLak( ) ,]Cave    ( )   >]None    ( )  .]RopeLadr( )  ?]NatlBrdg( ) |\r\n"
  "`-------------------------------------------------------------------------'\r\n";



const char mob_page_f[] = ".---------.--[mmenu page f]-------[%10.10s]---------------------------.\r\n"
  "|[1] STD  |   a]Human    ( )  b]Neandrtl( )  c]Avis    ( )  d]Amphib  ( ) |\r\n"
  "|   ROOMS |   e]Elf      ( )  f]Orc     ( )  g]Bugbear ( )  h]Bovine  ( ) |\r\n"
  "|---------'   i]Dwarf    ( )  j]Skeleton( )  k]Dragon  ( )  l]Canine  ( ) |\r\n"
  "|m]Ant    ( ) n]Halfling ( )  o]Thoul   ( )  p]RustMnst( )  q]Crustacn( ) |\r\n"
  "|r]Bee    ( ) s]Pixie    ( )  t]Undead  ( )  u]Shadow  ( )  v]Feline  ( ) |\r\n"
  "|w]Beetle ( ) x]Vampire  ( )  y]Zombie  ( )  z]ShapShft( )  A]Fish    ( ) |\r\n"
  "|B]Fly    ( ) C]Gargoyle ( )  D]Ape     ( )  E]Shrieker( )  F]Insect  ( ) |\r\n"
  "|G]Locust ( ) H]Ghoul    ( )  I]Baboon  ( )  J]Stirge  ( )  K]Mammal  ( ) |\r\n"
  "|L]Snake  ( ) M]Gnoll    ( )  N]Bat     ( )  O]Wight   ( )  P]Porcine ( ) |\r\n"
  "|Q]Spider ( ) R]Gnome    ( )  S]Bear    ( )                 U]Reptile ( ) |\r\n"
  "|V]Worm   ( ) W]Goblin   ( )  X]Boar    ( )                 Z]Rodent  ( ) |\r\n"
  "|             1]Golem    ( )  2]Cat     ( )                 4]Trogldte( ) |\r\n"
  "|5]Gelatin( ) 6]Gorgon   ( )  7]Dog     ( )                 9]Spirit  ( ) |\r\n"
  "|!]Mold   ( ) @]Harpy    ( )  #]Ferret  ( )                 %%]Magical ( ) |\r\n"
  "|^]Ooze   ( ) &]Hobgoblin( )  *]Horse   ( )                               |\r\n"
  "|-]Slime  ( ) _]Kobold   ( )  +]Mule    ( )                               |\r\n"
  "|             ~]Lizardman( )  `]Rat     ( )                               |\r\n"
  "|             ]]Lycanthrp( )  :]Shrew   ( )                               |\r\n"
  "|             ,]Minotaur ( )  >]Wolf    ( )                               |\r\n"
  "`-------------------------------------------------------------------------'\r\n";



const char obj_page_a[] = ".-------.----[omenu page a]-------[%10.10s]----------------------------.\r\n"
  "|[1]TEXT|  a]Name :                                                       |\r\n"
  "|-------'  b]Short:                                                       |\r\n"
  "|c]Long:                                                                  |\r\n"
  "|d]ActionDesc:                                                            | \r\n"
  ":---------------------------------------------+---------------------------'\r\n"
  "|[2]VALUES|         Value Meaning             |[3]STATS |             |\r\n"
  "|---------'         ---------------           |---------'             |\r\n"
  "| a]Value0:[      ] (                      )  | a]Weight:[      ]     |\r\n"
  "| b]Value1:[      ] (                      )  | b]Cost:  [      ]     |\r\n"
  "| c]Value2:[      ] (                      )  |                       |\r\n"
  "| d]Value3:[      ] (                      )  |                       |\r\n"
  "`---------------------------------------------+-----------------------'\r\n";


const char obj_page_b[] = ".---------.--[omenu page b]-------[%10.10s]----------------------.\r\n"
  "|[1]OBJECT| a]none   ( )    b]fountain  ( )    c]furniture      ( ) |\r\n"
  "|   TYPES | d]armor  ( )    e]food      ( )    f]money          ( ) |\r\n"
  "|---------' g]potion ( )    h]pullchain ( )    i]weapon         ( ) |\r\n"
  "|j]map ( )  k]light  ( )    l]button    ( )    m]treasure       ( ) |\r\n"
  "|n]herb( )  o]trash  ( )    p]switch    ( )    q]container      ( ) |\r\n"
  "|r]wand( )  s]scroll ( )    t]staff     ( )    u]bloodstain     ( ) |\r\n"
  "|v]pill( )  w]blood  ( )    x]dial      ( )    y]_oldtrap       ( ) |\r\n"
  "|z]key ( )  A]incense( )    B]lever     ( )    C]corpse_pc      ( ) |\r\n"
  "|D]pipe( )  E]scraps ( )    F]trap      ( )    G]corpse         ( ) |\r\n"
  "|H]book( )  I]match  ( )    J]drinkcon  ( )    K]portal         ( ) |\r\n"
  "|L]_pen( )  M]fire   ( )    N]herbcon   ( )    O]_fireweapon    ( ) |\r\n"
  "|P]boat( )  Q]rune   ( )    R]runepouch ( )    S]_missile       ( ) |\r\n"
  "`-------------------------------------------------------------------'\r\n";


const char obj_page_c[] = ".----------.-[omenu page c]-------[%10.10s]--------------------------.\r\n"
  "|[1] BASIC |  a]none:( )    b]save_poi   :[    ]%%     c]age   :[    ]   |\r\n"
  "|  AFFECTS |  d]STR :[   ]  e]save_rod   :[    ]%%     f]class :[    ]   |\r\n"
  "|----------'  g]INT :[   ]  h]save_para  :[    ]%%     i]level :[    ]   |\r\n"
  "|             j]WIS :[   ]  k]save_breath:[    ]%%     l]sex   :[    ]   | \r\n"
  "|             m]DEX :[   ]  n]save_spell :[    ]%%     o]height:[    ]   |\r\n"
  "|             p]CON :[   ]                            r]weight:[    ]   |\r\n"
  "|             s]CHA :[   ]                                              |\r\n"
  "|  v]Mana:[     ]            w]AC     :[     ]                          |\r\n"
  "|  y]HP  :[     ]            z]HitRoll:[     ]        A]Gold:[     ]    |\r\n"
  "|  B]Move:[     ]            C]DamRoll:[     ]        D]Exp :[     ]    |\r\n"
  ":--------.---------------------------------------------------------------.\r\n"
  "|[2] RIS |   a]fire  ... b]cold  ... c]elect ... d]energ ... e]poison ...|\r\n"
  "|AFFECTS |   f]blunt ... g]pierce... h]slash ... i]acid  ... j]nonMag ...|\r\n"
  "|--------'   k]drain ... l]sleep ... m]charm ... n]hold  ... o]magic  ...|\r\n"
  "|p]plus1 ... q]plus2 ... r]plus3 ... s]plus4 ... t]plus5 ... u]plus6  ...|\r\n"
  "`------------------------------------------------------------------------'\r\n";


const char obj_page_d[] = ".-----------.[omenu page d]-------[%10.10s]--------------------.\r\n"
  ":[1]ADVANCED|                                                     |\r\n"
  "|    AFFECTS|  a]Blind     ( )  b]DetInvis   ( )  c]DetEvil  ( )  |\r\n"
  "|-----------'  d]DetMag    ( )  e]DetHiddn   ( )  f]Hold     ( )  |\r\n"
  "|g]Sanct  ( )  h]Faerie    ( )  i]InfraRed   ( )  j]Cursed   ( )  |\r\n"
  "|k]Flaming( )  l]Poison    ( )  m]Protection ( )  n]Paralysis( )  |\r\n"
  "|o]Sleep  ( )  p]Hide      ( )  q]Sneak      ( )  r]Charm    ( )  |\r\n"
  "|s]Flying ( )  t]PassDoor  ( )  u]TrueSight  ( )  v]DetTraps ( )  |\r\n"
  "|w]Scrying( )  x]FireShield( )  y]ShockShield( )  z]Floating ( )  |\r\n"
  "|A]Invisib( )                                                     |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char obj_page_e[] = ".----------.-[omenu page e]-------[%10.10s]--------------------.\r\n"
  "|[1] OBJECT|   a]Evil   ( )  b]AntiGood   ( )  c]NoDrop    ( )    |\r\n"
  "|    FLAGS |   d]Invis  ( )  e]AntiEvil   ( )  f]NoRemove  ( )    |\r\n"
  "|----------'   g]Hidden ( )  h]AntiNeut   ( )  i]Inventory ( )    |\r\n"
  "|j]Glow   ( )  k]Bless  ( )  l]AntiMage   ( )  m]Donation  ( )    |\r\n"
  "|n]Hum    ( )  o]Metal  ( )  p]AntiThief  ( )  q]ClanObject( )    |\r\n"
  "|r]Dark   ( )  s]Organic( )  t]AntiWarrior( )  u]ClanCorpse( )    |\r\n"
  "|v]Magic  ( )                x]AntiCleric ( )  y]Prototype ( )    |\r\n"
  "|z]Loyal  ( )                B]AntiVampire( )  C]Deathrot  ( )    |\r\n"
  "|                            F]AntiDruid  ( )                     |\r\n"
  ":-----------------------------------------------------------------.\r\n"
  "|[2] WEAR  |   a]Take ( )  b]Finger  ( )  c]Neck  ( )  d]Body ( ) |\r\n"
  "|    FLAGS |   e]Head ( )  f]Legs    ( )  g]Feet  ( )  h]Hands( ) |\r\n"
  "|----------'   i]Arms ( )  j]Shield  ( )  k]About ( )  l]Waist( ) |\r\n"
  "|m]Wrist  ( )  n]Wield( )  o]Hold    ( )  p]_dual_( )  q]Ears ( ) |\r\n"
  "|r]Eyes   ( )                                                     |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char mob_help_page[] = "\r\n"
  ".------------[mmenu help pg]------[%10.10s]--------------------.\r\n"
  "|    Page contents                         |                      |\r\n"
  "|                                          | MISC COMMANDS.       |\r\n"
  "| PAGE     CONTENTS                        | --------------       |\r\n"
  "|------|-----------------------------------| clear:  clear screen |\r\n"
  "|  a   | strings, attrs, stats, class      | redraw: redraw menu  |\r\n"
  "|  b   | act & affected                    | refresh:redraw data  |\r\n"
  "|  c   | attacks & defenses                | pagelen:set page     |\r\n"
  "|  d   | saves, bodyparts, and fight stats |           length     |\r\n"
  "|  e   | specials, position, and RIS       |                      |\r\n"
  "|  f   | race                              |                      |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char room_help_page[] = "\r\n"
  ".------------[rmenu help pg]------[%10.10s]--------------------.\r\n"
  "|    Page contents                         |                      |\r\n"
  "|                                          | MISC COMMANDS.       |\r\n"
  "| PAGE     CONTENTS                        | --------------       |\r\n"
  "|------|-----------------------------------| clear:  clear screen |\r\n"
  "|  a   | name & description                | redraw: redraw menu  |\r\n"
  "|  b   | room flags & sector type          | refresh:redraw data  |\r\n"
  "|  c   | exit stuff                        | pagelen:set page     |\r\n"
  "| (d)  | (map codes)                       |           length     |\r\n"
  "|      |                                   |                      |\r\n"
  "|      |                                   |                      |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char obj_help_page[] = "\r\n"
  ".------------[omenu help pg]------[%10.10s]--------------------.\r\n"
  "|    Page contents                         |                      |\r\n"
  "|                                          | MISC COMMANDS.       |\r\n"
  "| PAGE     CONTENTS                        | --------------       |\r\n"
  "|------|-----------------------------------| clear:  clear screen |\r\n"
  "|  a   | strings, values, weight/cost      | redraw: redraw menu  |\r\n"
  "|  b   | object type                       | refresh:redraw data  |\r\n"
  "|  c   | affects & affect RIS              | pagelen:set page     |\r\n"
  "|  d   | affect affecteds                  |           length     |\r\n"
  "|  e   | oflags & wear flags               |                      |\r\n"
  "|      |                                   |                      |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char control_page_a[] = ".--------.---[cmenu page a]-----.[%10.10s]-------------------------------.\r\n"
  "||[1]MAIL|         ||[2]CHANNELS|                                           |\r\n"
  "|--------'         |------------'            	                            |\r\n"
  "|a]Read free:      |a]Muse:                                                 |\r\n"
  "|b]Write free:     |b]Think:                                                |\r\n"
  "|c]Read all:       |c]Log:                                                  |\r\n"
  "|d]Take all:       |d]Build:                                                |\r\n"
  "`---------------------------------------------------------------------------'\r\n";


const char control_help_page[] = "\r\n"
  ".------------[cmenu help pg]------[%10.10s]--------------------.\r\n"
  "|    Page contents                         |                      |\r\n"
  "|                                          | MISC COMMANDS.       |\r\n"
  "| PAGE     CONTENTS                        | --------------       |\r\n"
  "|------|-----------------------------------| clear:  clear screen |\r\n"
  "|  a   | main control panel                | redraw: redraw menu  |\r\n"
  "|      |                                   | refresh:redraw data  |\r\n"
  "|      |                                   | pagelen:set page     |\r\n"
  "|      |                                   |           length     |\r\n"
  "|      |                                   |                      |\r\n"
  "|      |                                   |                      |\r\n"
  "`-----------------------------------------------------------------'\r\n";


const char *item_lookup[46][5] = { {"bad type", "bad type", "bad type", "bad type", "bad type"},  /* 0 */
{"light", "unused", "unused", "unused", "unused"},  /* 1 */
{"scroll", "level", "sn1", "sn2", "sn3"}, /* 2 */
{"wand", "level", "max charges", "current charges", "sn"},  /* 3 */
{"staff", "level", "max charges", "current charges", "sn"}, /* 4 */
{"weapon", "unused", "unused", "unused", "hit string"}, /* 5 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 6 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 7 */
{"treasure", "type", "condition", "unused", "unused"},  /*  8 */
{"armor", "condition", "original ac", "unused", "unused"},  /*  9 */
{"potion", "level", "sn1", "sn2", "sn3"}, /* 10 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 11 */
{"furniture", "unused", "unused", "unused", "unused"},  /* 12 */
{"trash", "unused", "unused", "unused", "unused"},  /* 13 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 14 */
{"container", "max weight", "flags", "key vnum", "condition"},  /* 15 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 16 */
{"drink con", "capacity", "how full", "liquid number", "is poisoned?"}, /* 17 */
{"key", "unused", "unused", "unused", "unused"},  /* 18 */
{"food", "food_hours", "condition", "unused", "is poisoned?"},  /* 19 */
{"money", "amt gold", "unused", "unused", "unused"},  /* 20 */
{"undefined", "unused", "unused", "unused", "undefined"}, /* 21 */
{"boat", "unused", "unused", "unused", "unused"}, /* 22 */
{"npc corpse", "unused", "unused", "unused", "unused"}, /* 23 */
{"pc corpse", "unused", "unused", "unused", "unused"},  /* 24 */
{"fountain", "unused", "unused", "unused", "unused"}, /* 25 */
{"pill", "level", "sn1", "sn2", "sn3"}, /* 26 */
{"blood", "?", "?", "?", "?"},  /* 26 */
{"bloodstain", "?", "?", "?", "?"}, /* 26 */
{"scraps", "?", "?", "?", "?"}, /* 26 */
{"pipe", "?", "?", "?", "?"}, /* 30 */
{"herb con", "?", "?", "?", "?"}, /* 31 */
{"herb", "?", "?", "?", "?"}, /* 32 */
{"incense", "?", "?", "?", "?"},  /* 33 */
{"fire", "?", "?", "?", "?"}, /* 34 */
{"book", "?", "?", "?", "?"}, /* 35 */
{"switch", "?", "?", "?", "?"}, /* 36 */
{"lever", "?", "?", "?", "?"},  /* 37 */
{"pullchain", "?", "?", "?", "?"},  /* 38 */
{"button", "?", "?", "?", "?"}, /* 39 */
{"dial", "?", "?", "?", "?"}, /* 40 */
{"rune", "?", "?", "?", "?"}, /* 41 */
{"runepouch", "?", "?", "?", "?"},  /* 42 */
{"match", "?", "?", "?", "?"},  /* 43 */
{"trap", "charges", "type", "level", "flags"},  /*44 */
{"map", "?", "?", "?", "?"} /* 45 */
};

char *get_item_strings( int item_number, int which_string )
{

  if( ( which_string < 0 ) || ( which_string > 4 ) )
    return ( "get_item_strings bug" );

  if( ( which_string < 0 ) || ( which_string > 45 ) )
    return ( "get_item_strings bug" );

  return ( char * )item_lookup[item_number][which_string];
}