/****************************************************************************
 * [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", "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 dexterity %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 = 24;
	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 = IS_SET(idx->room_flags, ROOM_DARK) ? check : space;
		room_page_b_data[1].data = IS_SET(idx->room_flags, ROOM_DEATH) ? check : space;
		room_page_b_data[2].data = IS_SET(idx->room_flags, ROOM_NO_MOB) ? check : space;
		room_page_b_data[3].data = IS_SET(idx->room_flags, ROOM_INDOORS) ? check : space;
		room_page_b_data[4].data = IS_SET(idx->room_flags, ROOM_LAWFUL) ? check : space;
		room_page_b_data[5].data = IS_SET(idx->room_flags, ROOM_NO_MAGIC) ? check : space;
		room_page_b_data[6].data = IS_SET(idx->room_flags, ROOM_PET_SHOP) ? check : space;
		room_page_b_data[7].data = IS_SET(idx->room_flags, ROOM_NEUTRAL) ? check : space;
		room_page_b_data[8].data = IS_SET(idx->room_flags, ROOM_NODROP) ? check : space;
		room_page_b_data[9].data = IS_SET(idx->room_flags, ROOM_SAFE) ? check : space;
		room_page_b_data[10].data = IS_SET(idx->room_flags, ROOM_CHAOTIC) ? check : space;
		room_page_b_data[11].data = IS_SET(idx->room_flags, ROOM_NODROPALL) ? check : space;
		room_page_b_data[12].data = IS_SET(idx->room_flags, ROOM_TELEPORT) ? check : space;
		room_page_b_data[13].data = IS_SET(idx->room_flags, ROOM_DONATION) ? check : space;
		room_page_b_data[14].data = IS_SET(idx->room_flags, ROOM_NO_RECALL) ? check : space;
		room_page_b_data[15].data = IS_SET(idx->room_flags, ROOM_PRIVATE) ? check : space;
		room_page_b_data[16].data = IS_SET(idx->room_flags, ROOM_SOLITARY) ? check : space;
		room_page_b_data[17].data = IS_SET(idx->room_flags, ROOM_NO_ASTRAL) ? check : space;
		room_page_b_data[18].data = IS_SET(idx->room_flags, ROOM_TUNNEL) ? check : space;
		room_page_b_data[19].data = IS_SET(idx->room_flags, ROOM_SILENCE) ? check : space;
		room_page_b_data[20].data = IS_SET(idx->room_flags, ROOM_NO_SUMMON) ? check : space;
		room_page_b_data[21].data = IS_SET(idx->room_flags, ROOM_CLANSTOREROOM) ? check : space;
		room_page_b_data[22].data = IS_SET(idx->room_flags, ROOM_LOGSPEECH) ? check : space;
		room_page_b_data[23].data = IS_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;
		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_MAGE) ? 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_THIEF) ? 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_WARRIOR) ? 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_CLERIC) ? 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_VAMPIRE) ? 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_DRUID) ? 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[9] = get_affect(idx, APPLY_WIS);
		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[17] = get_affect(idx, APPLY_CHA);
		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[13].data = &(idx->perm_wis);
		mob_page_a_data[14].data = &(idx->perm_dex);
		mob_page_a_data[15].data = &(idx->perm_con);
		mob_page_a_data[16].data = &(idx->perm_cha);
		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];
}

