diff -puN normal/act.other.c src/act.other.c
--- normal/act.other.c	2002-11-06 14:33:20.000000000 +0100
+++ src/act.other.c	2002-11-11 15:04:32.000000000 +0100
@@ -67,6 +67,7 @@ ACMD(do_display);
 ACMD(do_gen_write);
 ACMD(do_gen_tog);
 ACMD(do_file);
+ACMD(do_pagelength);
 
 ACMD(do_quit)
 {
@@ -1064,4 +1065,26 @@ ACMD(do_file)
 
    page_string(ch->desc, buf, 1);
 
-}
+}
+
+ACMD(do_pagelength)
+{
+  char arg[MAX_INPUT_LENGTH];
+
+  /* 'page_length' is a player_special. */
+  if (IS_NPC(ch))
+    return;
+
+  one_argument(argument, arg);
+
+  if (!*arg) {
+    send_to_char(ch, "Your current page length is %d lines.\r\n", PAGE_LENGTH(ch));
+  } else if (is_number(arg)) {
+    PAGE_LENGTH(ch)=MIN(MAX(atoi(arg), 5), 255);
+    send_to_char(ch, "Okay, your page length is set to %d lines.\r\n", PAGE_LENGTH(ch));
+  } else
+    send_to_char(ch, "Please specify a number of lines (5-255).\r\n");
+}
+
+
+
diff -puN normal/act.wizard.c src/act.wizard.c
--- normal/act.wizard.c	2002-11-06 14:33:42.000000000 +0100
+++ src/act.wizard.c	2002-11-11 15:07:38.000000000 +0100
@@ -640,10 +640,10 @@ void do_stat_character(struct char_data 
 	    buf1, buf2, k->player.time.played / 3600,
 	    ((k->player.time.played % 3600) / 60), age(k)->year);
 
-    send_to_char(ch, "Hometown: [%d], Speaks: [%d/%d/%d], (STL[%d]/per[%d]/NSTL[%d])",
+    send_to_char(ch, "Hometown: [%d], Speaks: [%d/%d/%d], (STL[%d]/per[%d]/NSTL[%d]), page: [%d]",
 	 k->player.hometown, GET_TALK(k, 0), GET_TALK(k, 1), GET_TALK(k, 2),
 	    GET_PRACTICES(k), int_app[GET_INT(k)].learn,
-	    wis_app[GET_WIS(k)].bonus);
+	    wis_app[GET_WIS(k)].bonus, PAGE_LENGTH(k));
     /*. Display OLC zone for immorts .*/
     if (GET_LEVEL(k) >= LVL_IMMORT)
       send_to_char(ch, ", OLC[%d]", GET_OLC_ZONE(k));
@@ -2241,10 +2241,11 @@ ACMD(do_show)
    { "passwd",		LVL_IMPL, 	PC, 	MISC },    /* 45 */
    { "nodelete", 	LVL_GOD, 	PC, 	BINARY },
    { "sex", 		LVL_GRGOD, 	BOTH, 	MISC },
-   { "age",		LVL_GRGOD,	BOTH,	NUMBER },
+   { "age",			LVL_GRGOD,	BOTH,	NUMBER },
    { "height",		LVL_GOD,	BOTH,	NUMBER },
    { "weight",		LVL_GOD,	BOTH,	NUMBER },  /* 50 */
-   { "olc",		LVL_IMPL,	PC,	NUMBER },
+   { "olc",			LVL_IMPL,	PC,		NUMBER },
+   { "pagelength",	LVL_GOD, 	PC, 	NUMBER },
    { "\n", 0, BOTH, MISC }
   };
 
diff -puN normal/comm.c src/comm.c
--- normal/comm.c	2002-11-06 14:33:42.000000000 +0100
+++ src/comm.c	2002-11-11 15:54:20.000000000 +0100
@@ -1001,7 +1001,7 @@ char *make_prompt(struct descriptor_data
 
   if (d->showstr_count) {
     snprintf(prompt, sizeof(prompt),
-	    "\r\n[ Return to continue, (q)uit, (r)efresh, (b)ack, or page number (%d/%d) ]",
+	    "[ Return to continue, (q)uit, (r)efresh, (b)ack, or page number (%d/%d) ]",
 	    d->showstr_page, d->showstr_count);
   } else if (d->str)
     strcpy(prompt, "] ");
diff -puN normal/comm.h src/comm.h
--- normal/comm.h	2002-11-06 14:33:20.000000000 +0100
+++ src/comm.h	2002-11-11 15:29:40.000000000 +0100
@@ -38,7 +38,6 @@ size_t	vwrite_to_output(struct descripto
 void	string_add(struct descriptor_data *d, char *str);
 void	string_write(struct descriptor_data *d, char **txt, size_t len, long mailto, void *data);
 
-#define PAGE_LENGTH	22
 #define PAGE_WIDTH	80
 void	page_string(struct descriptor_data *d, char *str, int keep_internal);
 
diff -puN normal/constants.c src/constants.c
--- normal/constants.c	2002-11-06 14:33:20.000000000 +0100
+++ src/constants.c	2002-11-11 15:09:56.000000000 +0100
@@ -256,7 +256,8 @@ const char *connected_types[] = {
   "Mobile edit",
   "Shop edit",
   "Text edit",
-  "Trigger Edit",
+  "Trigger Edit",
+  "Set Pager",
   "\n"
 };
 
diff -puN normal/db.c src/db.c
--- normal/db.c	2002-11-06 14:33:42.000000000 +0100
+++ src/db.c	2002-11-11 15:12:48.000000000 +0100
@@ -2404,7 +2404,8 @@ int load_char(char *name, struct char_da
     GET_COND(ch, FULL) = PFDEF_HUNGER;
     GET_COND(ch, THIRST) = PFDEF_THIRST;
     GET_COND(ch, DRUNK) = PFDEF_DRUNK;
-    GET_BAD_PWS(ch) = PFDEF_BADPWS;
+    GET_BAD_PWS(ch) = PFDEF_BADPWS;
+	PAGE_LENGTH(ch) = PFDEF_PLENGTH;
     PRF_FLAGS(ch) = PFDEF_PREFFLAGS;
     GET_PRACTICES(ch) = PFDEF_PRACTICES;
     GET_GOLD(ch) = PFDEF_GOLD;
@@ -2454,7 +2455,8 @@ int load_char(char *name, struct char_da
 	case 'B':
 	  if(!strcmp(tag, "Badp")) GET_BAD_PWS(ch) = num;
 	  else if(!strcmp(tag, "Bank")) GET_BANK_GOLD(ch) = num;
-	  else if(!strcmp(tag, "Brth")) ch->player.time.birth = num;
+	  else if(!strcmp(tag, "Brth")) ch->player.time.birth = num;
+	  else if(!strcmp(tag, "PLen")) PAGE_LENGTH(ch) = num;
 	  break;
 	case 'C':
 	  if(!strcmp(tag, "Cha ")) ch->real_abils.cha = num;
@@ -2699,7 +2701,9 @@ void save_char(struct char_data * ch)
     if(PRF_FLAGS(ch) != PFDEF_PREFFLAGS) {
       sprintbits(PRF_FLAGS(ch), bits);
       fbprintf(fl, "Pref: %s\n", bits);
-    }
+    }
+    if(PAGE_LENGTH(ch) != PFDEF_PLENGTH)
+      fbprintf(fl, "PLen: %d\n", PAGE_LENGTH(ch));
     if(GET_BAD_PWS(ch) != PFDEF_BADPWS)
       fbprintf(fl, "Badp: %d\n", GET_BAD_PWS(ch));
     if(GET_COND(ch, FULL) != PFDEF_HUNGER && GET_LEVEL(ch) < LVL_IMMORT)
diff -puN normal/index src/index
--- normal/index	2002-11-06 14:33:20.000000000 +0100
+++ src/index	1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-0.trg
-$
diff -puN normal/index.mini src/index.mini
--- normal/index.mini	2002-11-06 14:33:20.000000000 +0100
+++ src/index.mini	1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-0.trg
-$
diff -puN normal/interpreter.c src/interpreter.c
--- normal/interpreter.c	2002-11-06 14:33:42.000000000 +0100
+++ src/interpreter.c	2002-11-11 16:00:26.000000000 +0100
@@ -134,7 +134,8 @@ ACMD(do_oasis);
 //ACMD(do_offer);
 ACMD(do_olc);
 ACMD(do_order);
-ACMD(do_page);
+ACMD(do_page);
+ACMD(do_pagelength);
 ACMD(do_poofset);
 ACMD(do_pour);
 ACMD(do_practice);
@@ -434,6 +435,7 @@ cpp_extern const struct command_info cmd
   { "pat"      , POS_RESTING , do_action   , 0, 0 },
   { "page"     , POS_DEAD    , do_page     , LVL_GOD, 0 },
   { "pardon"   , POS_DEAD    , do_wizutil  , LVL_GOD, SCMD_PARDON },
+  { "pagelength",POS_DEAD    , do_pagelength, 0, 0 },
   { "peer"     , POS_RESTING , do_action   , 0, 0 },
   { "pick"     , POS_STANDING, do_gen_door , 1, SCMD_PICK },
   { "point"    , POS_RESTING , do_action   , 0, 0 },
@@ -1648,18 +1650,48 @@ void nanny(struct descriptor_data *d, ch
       return;
     } else
       GET_CLASS(d->character) = load_result;
-
-    if (GET_PFILEPOS(d->character) < 0)
-      GET_PFILEPOS(d->character) = create_entry(GET_PC_NAME(d->character));
-    /* Now GET_NAME() will work properly. */
-    init_char(d->character);
-    save_char(d->character);
-    save_player_index();
-    write_to_output(d, "%s\r\n*** PRESS RETURN: ", motd);
-    STATE(d) = CON_RMOTD;
-
-    mudlog(NRM, LVL_IMMORT, TRUE, "%s [%s] new player.", GET_NAME(d->character), d->host);
-    break;
+
+	clear_screen(d);
+    write_to_output(d, 
+		"99\r\n98\r\n97\r\n96\r\n95\r\n94\r\n93\r\n92\r\n91\r\n90\r\n89\r\n88\r\n"
+		"87\r\n86\r\n85\r\n84\r\n83\r\n82\r\n81\r\n80\r\n79\r\n78\r\n77\r\n76\r\n"
+		"75\r\n74\r\n73\r\n72\r\n71\r\n70\r\n69\r\n68\r\n67\r\n66\r\n65\r\n64\r\n"
+		"63\r\n62\r\n61\r\n60\r\n59\r\n58\r\n57\r\n56\r\n55\r\n54\r\n53\r\n52\r\n"
+		"51\r\n50\r\n49\r\n48\r\n47\r\n46\r\n45\r\n44\r\n43\r\n42\r\n41\r\n40\r\n"
+		"39\r\n38\r\n37\r\n36\r\n35\r\n34\r\n33\r\n32\r\n31\r\n30\r\n29\r\n28\r\n"
+		"27\r\n26\r\n25\r\n24\r\n23\r\n22\r\n21\r\n20\r\n19\r\n18\r\n17\r\n16\r\n"
+		"15\r\n14\r\n13\r\n12\r\n11\r\n10\r\n9\r\n8\r\n7\r\n6\r\n5\r\n4\r\n3\r\n\r\n"
+		"What is the highest number you see?");
+	STATE(d) = CON_QLENGTH;
+	break;
+
+  case CON_QLENGTH:		/* query page length             */
+    if (!is_number(arg)) {
+       write_to_output(d, 
+		"99\r\n98\r\n97\r\n96\r\n95\r\n94\r\n93\r\n92\r\n91\r\n90\r\n89\r\n88\r\n"
+		"87\r\n86\r\n85\r\n84\r\n83\r\n82\r\n81\r\n80\r\n79\r\n78\r\n77\r\n76\r\n"
+		"75\r\n74\r\n73\r\n72\r\n71\r\n70\r\n69\r\n68\r\n67\r\n66\r\n65\r\n64\r\n"
+		"63\r\n62\r\n61\r\n60\r\n59\r\n58\r\n57\r\n56\r\n55\r\n54\r\n53\r\n52\r\n"
+		"51\r\n50\r\n49\r\n48\r\n47\r\n46\r\n45\r\n44\r\n43\r\n42\r\n41\r\n40\r\n"
+		"39\r\n38\r\n37\r\n36\r\n35\r\n34\r\n33\r\n32\r\n31\r\n30\r\n29\r\n28\r\n"
+		"27\r\n26\r\n25\r\n24\r\n23\r\n22\r\n21\r\n20\r\n19\r\n18\r\n17\r\n16\r\n"
+		"15\r\n14\r\n13\r\n12\r\n11\r\n10\r\n9\r\n8\r\n7\r\n6\r\n5\r\n4\r\n3\r\n\r\n"
+		"What is the highest number you see?");
+	  return;
+    } else 
+      PAGE_LENGTH(d->character)=MIN(MAX(atoi(arg), 5), 99);
+	  
+	if (GET_PFILEPOS(d->character) < 0)
+      GET_PFILEPOS(d->character) = create_entry(GET_PC_NAME(d->character));
+    /* Now GET_NAME() will work properly. */
+    init_char(d->character);
+    save_char(d->character);
+    save_player_index();
+    write_to_output(d, "%s\r\n*** PRESS RETURN: ", motd);
+    STATE(d) = CON_RMOTD;
+
+    mudlog(NRM, LVL_IMMORT, TRUE, "%s [%s] new player.", GET_NAME(d->character), d->host);
+    break;
 
   case CON_RMOTD:		/* read CR after printing motd   */
     write_to_output(d, "%s", MENU);
diff -puN normal/modify.c src/modify.c
--- normal/modify.c	2002-11-06 14:33:20.000000000 +0100
+++ src/modify.c	2002-11-11 15:31:52.000000000 +0100
@@ -34,8 +34,8 @@ extern const char *unused_spellname;	/* 
 /* local functions */
 void smash_tilde(char *str);
 ACMD(do_skillset);
-char *next_page(char *str);
-int count_pages(char *str);
+char *next_page(char *str, struct char_data *ch);
+int count_pages(char *str, struct char_data *ch);
 void paginate_string(char *str, struct descriptor_data *d);
 void playing_string_cleanup(struct descriptor_data *d, int action);
 void exdesc_string_cleanup(struct descriptor_data *d, int action);
@@ -356,7 +356,7 @@ ACMD(do_skillset)
 /* Traverse down the string until the begining of the next page has been
  * reached.  Return NULL if this is the last page of the string.
  */
-char *next_page(char *str)
+char *next_page(char *str, struct char_data *ch)
 {
   int col = 1, line = 1, spec_code = FALSE;
 
@@ -366,7 +366,7 @@ char *next_page(char *str)
       return (NULL);
 
     /* If we're at the start of the next page, return this fact. */
-    else if (line > PAGE_LENGTH)
+    else if (line > (PAGE_LENGTH(ch) - (PRF_FLAGGED(ch, PRF_COMPACT) ? 1 : 2)))
       return (str);
 
     /* Check for the begining of an ANSI color code block. */
@@ -399,11 +399,11 @@ char *next_page(char *str)
 
 
 /* Function that returns the number of pages in the string. */
-int count_pages(char *str)
+int count_pages(char *str, struct char_data *ch)
 {
   int pages;
 
-  for (pages = 1; (str = next_page(str)); pages++);
+  for (pages = 1; (str = next_page(str, ch)); pages++);
   return (pages);
 }
 
@@ -420,7 +420,7 @@ void paginate_string(char *str, struct d
     *(d->showstr_vector) = str;
 
   for (i = 1; i < d->showstr_count && str; i++)
-    str = d->showstr_vector[i] = next_page(str);
+    str = d->showstr_vector[i] = next_page(str, d->character);
 
   d->showstr_page = 0;
 }
@@ -437,7 +437,7 @@ void page_string(struct descriptor_data 
   if (!str || !*str)
     return;
 
-  d->showstr_count = count_pages(str);
+  d->showstr_count = count_pages(str, d->character);
   CREATE(d->showstr_vector, char *, d->showstr_count);
 
   if (keep_internal) {
diff -puN normal/pfdefaults.h src/pfdefaults.h
--- normal/pfdefaults.h	2002-11-06 14:33:42.000000000 +0100
+++ src/pfdefaults.h	2002-11-11 15:30:40.000000000 +0100
@@ -48,6 +48,7 @@
 #define PFDEF_MAXMOVE		0
 #define PFDEF_HUNGER		0
 #define PFDEF_THIRST		0
-#define PFDEF_DRUNK		0
+#define PFDEF_DRUNK		0
+#define PFDEF_PLENGTH   24
 
 #endif
diff -puN normal/shop.c src/shop.c
--- normal/shop.c	2002-10-04 06:38:04.000000000 +0200
+++ src/shop.c	2002-11-11 15:17:34.000000000 +0100
@@ -1306,7 +1306,7 @@ void list_all_shops(struct char_data *ch
   *buf = '\0';
   for (shop_nr = 0; shop_nr <= top_shop && len < sizeof(buf); shop_nr++) {
     /* New page in page_string() mechanism, print the header again. */
-    if (!(shop_nr % (PAGE_LENGTH - 2))) {
+    if (!(shop_nr % (PAGE_LENGTH(ch) - 4))) {
       /*
        * If we don't have enough room for the header, or all we have room left
        * for is the header, then don't add it and just quit now.
diff -puN normal/structs.h src/structs.h
--- normal/structs.h	2002-11-06 14:33:42.000000000 +0100
+++ src/structs.h	2002-11-11 15:47:56.000000000 +0100
@@ -271,6 +271,7 @@
 #define CON_SEDIT	 22	/* OLC mode - shop editor		*/
 #define CON_TEDIT	 23	/* OLC mode - text editor		*/
 #define CON_TRIGEDIT     24	/* OLC mode - trigger edit              */
+#define CON_QLENGTH      25
 
 /* Character equipment positions: used as index for char_data.equipment[] */
 /* NOTE: Don't confuse these constants with the ITEM_ bitvectors
@@ -861,7 +862,7 @@ struct player_special_data_saved {
    ubyte spare2;
    ubyte spare3;
    ubyte spare4;
-   ubyte spare5;
+   ubyte page_length;
    int spells_to_learn;		/* How many can you learn yet this level*/
    int olc_zone;
    int spare8;
diff -puN normal/utils.h src/utils.h
--- normal/utils.h	2002-11-06 14:33:20.000000000 +0100
+++ src/utils.h	2002-11-11 15:28:58.000000000 +0100
@@ -319,7 +319,8 @@ void	update_pos(struct char_data *victim
 #define GET_WIMP_LEV(ch)	CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.wimp_level))
 #define GET_FREEZE_LEV(ch)	CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.freeze_level))
 #define GET_BAD_PWS(ch)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.bad_pws))
-#define GET_TALK(ch, i)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.talks[i]))
+#define GET_TALK(ch, i)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.talks[i]))
+#define PAGE_LENGTH(ch)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->saved.page_length))
 #define POOFIN(ch)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->poofin))
 #define POOFOUT(ch)		CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->poofout))
 #define GET_LAST_OLC_TARG(ch)	CHECK_PLAYER_SPECIAL((ch), ((ch)->player_specials->last_olc_targ))

