[PENNMUSH-ANNOUNCE] 1.7.6p1-1.7.7p0.patch

dunemush@tala.mede.uic.edu dunemush at tala.mede.uic.edu
Fri Dec 13 03:19:16 2002


This patch upgrades a PennMUSH 1.7.6p1 to 1.7.7p0.  After applying this
patch, you will have version 1.7.7p0. If you are currently running
1.7.6p0, upgrade to 1.7.6p1 first and then apply this patch.

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.6p1-1.7.7p0.patch
	make install

If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1',
not just 'patch -p1'.

Unix (or cygwin) users need not worry about failed hunks in src/switchinc.c,
hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically
rebuilt on compile.

Then @shutdown and restart your MUSH. A full shutdown is recommended.

    - Alan/Javelin

In this patch:

Major Changes:
  * Clients that understand telnet NAWS (See RFC 1073) can tell the mush
    what dimensions a given connection's display is.  Added the
    width() and height() functions, and SCREENWIDTH and SCREENHEIGHT
    psuedo-commands for getting/setting this information from the mush. 
    This changes the reboot.db format and requires a full shutdown. [SW]
  * Two new atoms for locks. "#true" in a lock is always evaluated as true
    (anyone can pass), and "#false" is always evaluated as false (no one
    can pass). Suggested by Vadiv@M*U*S*H.
Internationalization:
  * The pronoun sets are no longer hardcoded. If you're running in a
    locale other than C or en*, you'll see weird looking pronoun descriptions
    for things like %s until a translation team translates them to your
    locale's language. Suggested by Dandy@M*U*S*H.
Attributes:
  * @DESCFORMAT can be used to separate description contents from formatting.
    Suggested by Philip Mak.
  * VEILED attribute flag causes attribute value not to be displayed
    on default examine, but otherwise accessible as usual. Good for spammy
    data attributes. See 'help attribute flags'. Suggested by Cheetah@M*U*S*H.
Commands:
  * examine/all shows contents of veiled attributes. Suggested by
    Intrevis@M*U*S*H.
Flags:
  * The FIXED and ROYALTY flags are no longer optional.
Minor Changes:
  * Object creation times are no longer optional.
  * Warnings are no longer a compile-time option; they're turned on.
    You can stop automatic warnings in mush.cnf, as before.
  * Cleanup of the telnet-option code in general. [SW]
  * Consolidation of much of the code for functions that return information
    about the least-idle connection of a given player. [SW]
  * The tiny_attrs configuration option has been removed.
  * Removed a lot of preprocessor checks for conditionally including header
    files that always succeed because they're standard C headers. [SW]
  * Removed the Size_t typedef in favor of the standard size_t. [SW]
  * Some optimization hints for the GCC and VS.NET compilers. [SW]
  * We try to be more conservative about when we show lines of 
    asterisks around motd-type messages, to avoid showing them when
    there's no message.
  * Continued ansi-C-ification of function declarations.
Prereq: 1.7.6p1
*** 1_7_6.57/Patchlevel Mon, 09 Dec 2002 10:15:18 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.1.1.1 600)
--- 1_7_7.58(w)/Patchlevel Tue, 26 Nov 2002 21:18:21 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.2 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.6p1
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p0
*** 1_7_6.57/CHANGES Sun, 08 Dec 2002 22:35:42 -0600 dunemush (pennmush/g/17_CHANGES 1.10.1.6.1.2.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1 600)
--- 1_7_7.58(w)/CHANGES Mon, 09 Dec 2002 14:25:19 -0600 dunemush (pennmush/g/23_CHANGES 1.18 600)
***************
*** 18,125 ****
  
  ==========================================================================
  
! Version 1.7.6 patchlevel 1                      November 26, 2002
  
! Minor changes:
!    * When using @nuke to destroy a SAFE object when really_safe is "no",
!      provide a warning (but schedule destruction anyway). Suggested by
!      Cerekk@bDV.
! Fixes:
!    * VS.NET project file was defaulting to signed instead of unsigned
!      chars, causing crashes. Fixed by BladedThoth@M*U*S*H.
!      Several places where we should have cast things to unsigned to
!      avoid this kind of thing have been fixed. [SW]
!    * The *emit() functions now set the orator correctly.
!      Reported by Philip Mak.
!    * ccom and cplr are cleared after each command execution so they
!      can't be leaked as easily. Suggested by Philip Mak.
!    * Linting.
!    * If God gives the wrong password to @logwipe, provide some feedback.
!      Suggested by Cerekk@bDv.
!    * mkcmds.sh was needlessly rebuilding several autogenerated files.
!    * The rules for flag characters shown in object headers now allows
!      F_INTERNAL flags to be shown (like GOING), just the same as
!      when you get a full flag list on examine. Report by Philip Mak.
!    * Help fixes by Bird@M*U*S*H, Intrevis@M*U*S*H, Philip Mak.
!    * @search type=something would report an error AND match the entire
!      database when something wasn't object, player, exit or room. [SW]
!    * Cosmetic bug in @malias/list fixed. Report by Philip Mak.
!    * The info_slave now properly obeys the use_dns setting in mush.cnf.
!      This requires a full shutdown to put into effect. Report by
!      BlaZe@M*U*S*H. [SW]
! 
! 
! Version 1.7.6 patchlevel 0                      November 11, 2002
! 
! License:
!  * PennMUSH 1.7.6 and later is now released under the Artistic
!    License. This is an OSI-compliant open source license. See the file
!    COPYRITE for the complete license text.
! 
!    Notable changes from the old license:
!    * No restrictions on commercial use
!    * No requirement to inform developers of improvements or submit
!      modifications, though it's still a nice thing to do. Note, however
!      that if you redistribute a modified version of PennMUSH, you MUST
!      include source code.
! 
!    The PennMUSH devteam thanks the copyright holders of TinyMUD,
!    TinyMUSH 2.0, TinyMUSH 2.2, and TinyMUSH 3.0 for their assistance
!    in making this possible.
! Documentation:
!    * The README file has been split into README, INSTALL, UPGRADING,
!      and I18N files.
  Minor Changes:
!    * Rooms now hear remits and lemits in them, and can be pemitted
!      to. This behavior now matches that of other MUSH servers.
!    * AUDIBLE objects now propagate sound @remit'd into them.
!      Report by [SW].
!    * Added @lock/destroy to limit who can destroy a DESTROY_OK 
!      object. Suggested by Luigi@8bit.
!    * PARANOID nospoof notification now includes the name of the object's
!      owner as well. Suggested by Philip Mak.
!    * room() no longer notifies the executor of permission errors out of
!      band. It now just returns the error instead, like loc(). Suggested by 
!      Philip Mak.
!    * Creation times are now public information via ctime(); permission to
!      examine is no longer required. This allows objects to use, e.g.,
!      %#@[ctime(%#)] as a historically unique identifier of an enactor.
!      Suggested by Philip Mak.
!    * The reboot.db is now versioned. This will make it possible to
!      @shutdown/reboot across patchlevels that change the reboot.db
!      format (in 1.7.7 and later versions).
!    * Rooms on an @forwardlist now receive the message as a remit,
!      rather than a pemit. Suggested by BladedThoth@M*U*S*H.
! Fixes:
!    * More work on the great table() bug. Looks like a fix. [SW]
!    * Improved VS.NET project files by BladedThoth.
!    * Plugged a memory leak in deleting @locks. [SW]
!    * Fixed @lock-related crash bug reported by Philip Mak. [SW]
!    * General linting.
!    * process_expression ignores the [ in ansi escapes. Reported in the
!      context of #$ by Philip Mak. [SW]
!    * Internal changes to compress(), which now returns an allocated
!      string. Under Huffman compression, it should no longer be possible
!      to overflow a buffer with a pathological compression tree. Initial
!      concern voiced by Eyal Sagi.
!    * Table and ansi didn't play well together. Reported by Ellis@M*U*S*H.
!    * Config file reading should be better on Macs. Patch by Philip Mak.
!    * Obsolete checks for OLD_ANSI are removed. [SW]
!    * Crash bug in @function fixed. Report by Dallimar@Hemlock.
!    * Change to message on failed attribute flag set, to make it more
!      generic to cover all the possible failures. Report by Cerekk@bDv.
!    * Translations to some languages were broken. Fixed now. Report by
!      Sbot@M*U*S*H.
!    * QUEUE is now visible if you control an object, as promised in the
!      help. Reported by Luigi@8bit.
!    * Help fixes by Mortimer@M*U*S*H, Bellemore@M*U*S*H, Hyacinth@8bit,
!      [EEH], BladedThoth@M*U*S*H, Moe@M*U*S*H, Viila@M*U*S*H, Walker@M*U*S*H.
!    * Comment in src/Makefile fixed by Vadiv@M*U*S*H.
!    * A weird crash on @shutdown/reboot, probably attributable to a
!      broken library or system call, is now worked-around. Report by
!      Solarius@SWWF.
!    * Audible objects with @forwardlist set are no longer concealed by
!      the DARK flag.
!    * Win32 project files no longer use the win32/ directory as an include
!      directory, which causes problems. Reported by Gepht.
! 
--- 18,63 ----
  
  ==========================================================================
  
! Version 1.7.7 patchlevel 0                      December 8, 2002
  
! Major Changes:
!   * Clients that understand telnet NAWS (See RFC 1073) can tell the mush
!     what dimensions a given connection's display is.  Added the
!     width() and height() functions, and SCREENWIDTH and SCREENHEIGHT
!     psuedo-commands for getting/setting this information from the mush. 
!     This changes the reboot.db format and requires a full shutdown. [SW]
!   * Two new atoms for locks. "#true" in a lock is always evaluated as true
!     (anyone can pass), and "#false" is always evaluated as false (no one
!     can pass). Suggested by Vadiv@M*U*S*H.
! Internationalization:
!   * The pronoun sets are no longer hardcoded. If you're running in a
!     locale other than C or en*, you'll see weird looking pronoun descriptions
!     for things like %s until a translation team translates them to your
!     locale's language. Suggested by Dandy@M*U*S*H.
! Attributes:
!   * @DESCFORMAT can be used to separate description contents from formatting.
!     Suggested by Philip Mak.
!   * VEILED attribute flag causes attribute value not to be displayed
!     on default examine, but otherwise accessible as usual. Good for spammy
!     data attributes. See 'help attribute flags'. Suggested by Cheetah@M*U*S*H.
! Commands:
!   * examine/all shows contents of veiled attributes. Suggested by
!     Intrevis@M*U*S*H.
! Flags:
!   * The FIXED and ROYALTY flags are no longer optional.
  Minor Changes:
!   * Object creation times are no longer optional.
!   * Warnings are no longer a compile-time option; they're turned on.
!     You can stop automatic warnings in mush.cnf, as before.
!   * Cleanup of the telnet-option code in general. [SW]
!   * Consolidation of much of the code for functions that return information
!     about the least-idle connection of a given player. [SW]
!   * The tiny_attrs configuration option has been removed.
!   * Removed a lot of preprocessor checks for conditionally including header
!     files that always succeed because they're standard C headers. [SW]
!   * Removed the Size_t typedef in favor of the standard size_t. [SW]
!   * Some optimization hints for the GCC and VS.NET compilers. [SW]
!   * We try to be more conservative about when we show lines of 
!     asterisks around motd-type messages, to avoid showing them when
!     there's no message.
!   * Continued ansi-C-ification of function declarations.
*** 1_7_6.57/game/txt/hlp/pennvers.hlp Sun, 08 Dec 2002 22:35:42 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1 600)
--- 1_7_7.58(w)/game/txt/hlp/pennvers.hlp Sun, 08 Dec 2002 22:36:01 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.2 600)
***************
*** 1,5 ****
  & changes
! & 1.7.6p1
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
--- 1,5 ----
  & changes
! & 1.7.7p0
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
***************
*** 11,122 ****
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
! Version 1.7.6 patchlevel 1                      November 26, 2002
  
! Minor changes:
!    * When using @nuke to destroy a SAFE object when really_safe is "no",
!      provide a warning (but schedule destruction anyway). Suggested by
!      Cerekk@bDV.
! Fixes:
!    * VS.NET project file was defaulting to signed instead of unsigned
!      chars, causing crashes. Fixed by BladedThoth@M*U*S*H.
!      Several places where we should have cast things to unsigned to
!      avoid this kind of thing have been fixed. [SW]
!    * The *emit() functions now set the orator correctly.
!      Reported by Philip Mak.
!    * ccom and cplr are cleared after each command execution so they
!      can't be leaked as easily. Suggested by Philip Mak.
!    * Linting.
!    * If God gives the wrong password to @logwipe, provide some feedback.
!      Suggested by Cerekk@bDv.
!    * mkcmds.sh was needlessly rebuilding several autogenerated files.
!    * The rules for flag characters shown in object headers now allows
!      F_INTERNAL flags to be shown (like GOING), just the same as
!      when you get a full flag list on examine. Report by Philip Mak.
!    * Help fixes by Bird@M*U*S*H, Intrevis@M*U*S*H, Philip Mak.
!    * @search type=something would report an error AND match the entire
!      database when something wasn't object, player, exit or room. [SW]
!    * Cosmetic bug in @malias/list fixed. Report by Philip Mak.
!    * The info_slave now properly obeys the use_dns setting in mush.cnf.
!      This requires a full shutdown to put into effect. Report by
!      BlaZe@M*U*S*H. [SW]
! 
! 
! & 1.7.6p0
! Version 1.7.6 patchlevel 0                      November 11, 2002
! 
! License:
!  * PennMUSH 1.7.6 and later is now released under the Artistic
!    License. This is an OSI-compliant open source license. See the file
!    COPYRITE for the complete license text.
! 
!    Notable changes from the old license:
!    * No restrictions on commercial use
!    * No requirement to inform developers of improvements or submit
!      modifications, though it's still a nice thing to do. Note, however
!      that if you redistribute a modified version of PennMUSH, you MUST
!      include source code.
! 
!    The PennMUSH devteam thanks the copyright holders of TinyMUD,
!    TinyMUSH 2.0, TinyMUSH 2.2, and TinyMUSH 3.0 for their assistance
!    in making this possible.
! Documentation:
!    * The README file has been split into README, INSTALL, UPGRADING,
!      and I18N files.
  Minor Changes:
!    * Rooms now hear remits and lemits in them, and can be pemitted
!      to. This behavior now matches that of other MUSH servers.
!    * AUDIBLE objects now propagate sound @remit'd into them.
!      Report by [SW].
!    * Added @lock/destroy to limit who can destroy a DESTROY_OK 
!      object. Suggested by Luigi@8bit.
!    * PARANOID nospoof notification now includes the name of the object's
!      owner as well. Suggested by Philip Mak.
!    * room() no longer notifies the executor of permission errors out of
!      band. It now just returns the error instead, like loc(). Suggested by 
!      Philip Mak.
!    * Creation times are now public information via ctime(); permission to
!      examine is no longer required. This allows objects to use, e.g.,
!      %#@[ctime(%#)] as a historically unique identifier of an enactor.
!      Suggested by Philip Mak.
!    * The reboot.db is now versioned. This will make it possible to
!      @shutdown/reboot across patchlevels that change the reboot.db
!      format (in 1.7.7 and later versions).
!    * Rooms on an @forwardlist now receive the message as a remit,
!      rather than a pemit. Suggested by BladedThoth@M*U*S*H.
! Fixes:
!    * More work on the great table() bug. Looks like a fix. [SW]
!    * Improved VS.NET project files by BladedThoth.
!    * Plugged a memory leak in deleting @locks. [SW]
!    * Fixed @lock-related crash bug reported by Philip Mak. [SW]
!    * General linting.
!    * process_expression ignores the [ in ansi escapes. Reported in the
!      context of #$ by Philip Mak. [SW]
!    * Internal changes to compress(), which now returns an allocated
!      string. Under Huffman compression, it should no longer be possible
!      to overflow a buffer with a pathological compression tree. Initial
!      concern voiced by Eyal Sagi.
!    * Table and ansi didn't play well together. Reported by Ellis@M*U*S*H.
!    * Config file reading should be better on Macs. Patch by Philip Mak.
!    * Obsolete checks for OLD_ANSI are removed. [SW]
!    * Crash bug in @function fixed. Report by Dallimar@Hemlock.
!    * Change to message on failed attribute flag set, to make it more
!      generic to cover all the possible failures. Report by Cerekk@bDv.
!    * Translations to some languages were broken. Fixed now. Report by
!      Sbot@M*U*S*H.
!    * QUEUE is now visible if you control an object, as promised in the
!      help. Reported by Luigi@8bit.
!    * Help fixes by Mortimer@M*U*S*H, Bellemore@M*U*S*H, Hyacinth@8bit,
!      [EEH], BladedThoth@M*U*S*H, Moe@M*U*S*H, Viila@M*U*S*H, Walker@M*U*S*H.
!    * Comment in src/Makefile fixed by Vadiv@M*U*S*H.
!    * A weird crash on @shutdown/reboot, probably attributable to a
!      broken library or system call, is now worked-around. Report by
!      Solarius@SWWF.
!    * Audible objects with @forwardlist set are no longer concealed by
!      the DARK flag.
!    * Win32 project files no longer use the win32/ directory as an include
!      directory, which causes problems. Reported by Gepht.
! 
  & 1.7.4p20
  Version 1.7.4 patchlevel 20		       September 19, 2002
  
--- 11,59 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
! Version 1.7.7 patchlevel 0                      November 11, 2002
  
! Major Changes:
!   * Clients that understand telnet NAWS (See RFC 1073) can tell the mush
!     what dimensions a given connection's display is.  Added the
!     width() and height() functions, and SCREENWIDTH and SCREENHEIGHT
!     psuedo-commands for getting/setting this information from the mush. 
!     This changes the reboot.db format and requires a full shutdown. [SW]
!   * Two new atoms for locks. "#true" in a lock is always evaluated as true
!     (anyone can pass), and "#false" is always evaluated as false (no one
!     can pass). Suggested by Vadiv@M*U*S*H.
! Internationalization:
!   * The pronoun sets are no longer hardcoded. If you're running in a
!     locale other than C or en*, you'll see weird looking pronoun descriptions
!     for things like %s until a translation team translates them to your
!     locale's language. Suggested by Dandy@M*U*S*H.
! Attributes:
!   * @DESCFORMAT can be used to separate description contents from formatting.
!     Suggested by Philip Mak.
!   * VEILED attribute flag causes attribute value not to be displayed
!     on default examine, but otherwise accessible as usual. Good for spammy
!     data attributes. See 'help attribute flags'. Suggested by Cheetah@M*U*S*H.
! Commands:
!   * examine/all shows contents of veiled attributes. Suggested by
!     Intrevis@M*U*S*H.
! Flags:
!   * The FIXED and ROYALTY flags are no longer optional.
  Minor Changes:
!   * Object creation times are no longer optional.
!   * Warnings are no longer a compile-time option; they're turned on.
!     You can stop automatic warnings in mush.cnf, as before.
!   * Cleanup of the telnet-option code in general. [SW]
!   * Consolidation of much of the code for functions that return information
!     about the least-idle connection of a given player. [SW]
!   * The tiny_attrs configuration option has been removed.
!   * Removed a lot of preprocessor checks for conditionally including header
!     files that always succeed because they're standard C headers. [SW]
!   * Removed the Size_t typedef in favor of the standard size_t. [SW]
!   * Some optimization hints for the GCC and VS.NET compilers. [SW]
!   * We try to be more conservative about when we show lines of 
!     asterisks around motd-type messages, to avoid showing them when
!     there's no message.
!   * Continued ansi-C-ification of function declarations.
  & 1.7.4p20
  Version 1.7.4 patchlevel 20		       September 19, 2002
  
***************
*** 1314,1319 ****
--- 1251,1363 ----
    * Indentation fixes [SW]
    * Fixes up to 1.7.4p12 merged in.
  
+ & 1.7.6p1
+ Version 1.7.6 patchlevel 1                      November 26, 2002
+ 
+ Minor changes:
+    * When using @nuke to destroy a SAFE object when really_safe is "no",
+      provide a warning (but schedule destruction anyway). Suggested by
+      Cerekk@bDV.
+ Fixes:
+    * VS.NET project file was defaulting to signed instead of unsigned
+      chars, causing crashes. Fixed by BladedThoth@M*U*S*H.
+      Several places where we should have cast things to unsigned to
+      avoid this kind of thing have been fixed. [SW]
+    * The *emit() functions now set the orator correctly.
+      Reported by Philip Mak.
+    * ccom and cplr are cleared after each command execution so they
+      can't be leaked as easily. Suggested by Philip Mak.
+    * Linting.
+    * If God gives the wrong password to @logwipe, provide some feedback.
+      Suggested by Cerekk@bDv.
+    * mkcmds.sh was needlessly rebuilding several autogenerated files.
+    * The rules for flag characters shown in object headers now allows
+      F_INTERNAL flags to be shown (like GOING), just the same as
+      when you get a full flag list on examine. Report by Philip Mak.
+    * Help fixes by Bird@M*U*S*H, Intrevis@M*U*S*H, Philip Mak.
+    * @search type=something would report an error AND match the entire
+      database when something wasn't object, player, exit or room. [SW]
+    * Cosmetic bug in @malias/list fixed. Report by Philip Mak.
+    * The info_slave now properly obeys the use_dns setting in mush.cnf.
+      This requires a full shutdown to put into effect. Report by
+      BlaZe@M*U*S*H. [SW]
+ 
+ 
+ & 1.7.6p0
+ Version 1.7.6 patchlevel 0                      November 11, 2002
+ 
+ License:
+  * PennMUSH 1.7.6 and later is now released under the Artistic
+    License. This is an OSI-compliant open source license. See the file
+    COPYRITE for the complete license text.
+ 
+    Notable changes from the old license:
+    * No restrictions on commercial use
+    * No requirement to inform developers of improvements or submit
+      modifications, though it's still a nice thing to do. Note, however
+      that if you redistribute a modified version of PennMUSH, you MUST
+      include source code.
+ 
+    The PennMUSH devteam thanks the copyright holders of TinyMUD,
+    TinyMUSH 2.0, TinyMUSH 2.2, and TinyMUSH 3.0 for their assistance
+    in making this possible.
+ Documentation:
+    * The README file has been split into README, INSTALL, UPGRADING,
+      and I18N files.
+ Minor Changes:
+    * Rooms now hear remits and lemits in them, and can be pemitted
+      to. This behavior now matches that of other MUSH servers.
+    * AUDIBLE objects now propagate sound @remit'd into them.
+      Report by [SW].
+    * Added @lock/destroy to limit who can destroy a DESTROY_OK 
+      object. Suggested by Luigi@8bit.
+    * PARANOID nospoof notification now includes the name of the object's
+      owner as well. Suggested by Philip Mak.
+    * room() no longer notifies the executor of permission errors out of
+      band. It now just returns the error instead, like loc(). Suggested by 
+      Philip Mak.
+    * Creation times are now public information via ctime(); permission to
+      examine is no longer required. This allows objects to use, e.g.,
+      %#@[ctime(%#)] as a historically unique identifier of an enactor.
+      Suggested by Philip Mak.
+    * The reboot.db is now versioned. This will make it possible to
+      @shutdown/reboot across patchlevels that change the reboot.db
+      format (in 1.7.7 and later versions).
+    * Rooms on an @forwardlist now receive the message as a remit,
+      rather than a pemit. Suggested by BladedThoth@M*U*S*H.
+ Fixes:
+    * More work on the great table() bug. Looks like a fix. [SW]
+    * Improved VS.NET project files by BladedThoth.
+    * Plugged a memory leak in deleting @locks. [SW]
+    * Fixed @lock-related crash bug reported by Philip Mak. [SW]
+    * General linting.
+    * process_expression ignores the [ in ansi escapes. Reported in the
+      context of #$ by Philip Mak. [SW]
+    * Internal changes to compress(), which now returns an allocated
+      string. Under Huffman compression, it should no longer be possible
+      to overflow a buffer with a pathological compression tree. Initial
+      concern voiced by Eyal Sagi.
+    * Table and ansi didn't play well together. Reported by Ellis@M*U*S*H.
+    * Config file reading should be better on Macs. Patch by Philip Mak.
+    * Obsolete checks for OLD_ANSI are removed. [SW]
+    * Crash bug in @function fixed. Report by Dallimar@Hemlock.
+    * Change to message on failed attribute flag set, to make it more
+      generic to cover all the possible failures. Report by Cerekk@bDv.
+    * Translations to some languages were broken. Fixed now. Report by
+      Sbot@M*U*S*H.
+    * QUEUE is now visible if you control an object, as promised in the
+      help. Reported by Luigi@8bit.
+    * Help fixes by Mortimer@M*U*S*H, Bellemore@M*U*S*H, Hyacinth@8bit,
+      [EEH], BladedThoth@M*U*S*H, Moe@M*U*S*H, Viila@M*U*S*H, Walker@M*U*S*H.
+    * Comment in src/Makefile fixed by Vadiv@M*U*S*H.
+    * A weird crash on @shutdown/reboot, probably attributable to a
+      broken library or system call, is now worked-around. Report by
+      Solarius@SWWF.
+    * Audible objects with @forwardlist set are no longer concealed by
+      the DARK flag.
+    * Win32 project files no longer use the win32/ directory as an include
+      directory, which causes problems. Reported by Gepht.
+ 
  & 1.7.3p14
  Version 1.7.3 patchlevel 14                    January 29, 2001
  
***************
*** 5747,5752 ****
--- 5791,5797 ----
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
+ 1.7.7: 0
  1.7.6: 0, 1
  1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
*** 1_7_6.57/game/txt/hlp/pennfunc.hlp Mon, 02 Dec 2002 18:14:17 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.1 600)
--- 1_7_7.58(w)/game/txt/hlp/pennfunc.hlp Mon, 02 Dec 2002 18:14:31 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.2 600)
***************
*** 121,131 ****
    andflags()    config()      
    conn()        controls()    ctime()       doing()       elock()
    findable()    flags()       fullname()    hasattr()     hasattrp()
!   hasflag()     haspower()    hastype()     hidden()      idle()
!   iname()       lock()        lstats()      lwho()        money()
!   mtime()       mwho()        name()        nattr()       nearby()
!   objmem()      orflags()     playermem()   poll()        ports()
!   powers()      quota()       type()        visible()
  
  & Mail functions
    Mail functions work with @mail.
--- 121,132 ----
    andflags()    config()      
    conn()        controls()    ctime()       doing()       elock()
    findable()    flags()       fullname()    hasattr()     hasattrp()
!   hasflag()     haspower()    hastype()     height()      hidden()
!   idle()        iname()       lock()        lstats()      lwho()
!   money()       mtime()       mwho()        name()        nattr()
!   nearby()      objmem()      orflags()     playermem()   poll()
!   ports()       powers()      quota()       type()        visible()
!   width()
  
  & Mail functions
    Mail functions work with @mail.
***************
*** 3642,3648 ****
    1 0 0
    > think vmul(vunit(5 6 7),vmag(5 6 7))
    5 6 7
!  
  & WHERE()
    where(<object>)
    
--- 3643,3669 ----
    1 0 0
    > think vmul(vunit(5 6 7),vmag(5 6 7))
    5 6 7
! & WIDTH()
! & HEIGHT()
! & SCREENWIDTH
! & SCREENHEIGHT
!   width(<player>)
!   height(<player>)
! 
!   These two functions return the screen width and height for a connected
!   player. If the player's client is capable of doing so, it will let the
!   mush know what the correct sizes are on connection and when the client
!   is resized. The defaults are 78 for width, and 24 for height, the
!   normal minimal values. These can be changed with the special
!   SCREENWIDTH and SCREENHEIGHT commands, both of which take a number as
!   their sole argument, and set the appropriate field.
! 
!   If used on something that's not a player, the functions return the
!   default values.
! 
!   The intent of these functions is allow softcode that does formatting
!   to be able to produce a display that can make full use of any given
!   screen size.
  & WHERE()
    where(<object>)
    
*** 1_7_6.57/game/txt/hlp/penncmd.hlp Mon, 09 Dec 2002 10:15:18 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1 600)
--- 1_7_7.58(w)/game/txt/hlp/penncmd.hlp Mon, 09 Dec 2002 14:23:53 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.2 600)
***************
*** 31,41 ****
  follow the pattern above:
  
    @aahear        @aclone        @aconnect      @adisconnect   @amhear
!   @away          @charges       @cost          @conformat     @ealias        
!   @exitformat    @filter        @forwardlist   @haven         @idle
!   @infilter      @inprefix      @lalias        @listen        @nameformat
!   @oxenter       @oxleave       @oxmove        @oxtport       @prefix
!   @runout        @sex           @startup       
  
  See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
  & @-BUILDING
--- 31,41 ----
  follow the pattern above:
  
    @aahear        @aclone        @aconnect      @adisconnect   @amhear
!   @away          @charges       @cost          @conformat     @descformat
!   @ealias        @exitformat    @filter        @forwardlist   @haven         
!   @idle          @infilter      @inprefix      @lalias        @listen        
!   @nameformat    @oxenter       @oxleave       @oxmove        @oxtport       
!   @prefix        @runout        @sex           @startup       
  
  See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
  & @-BUILDING
***************
*** 575,581 ****
    /set        --   Wizard only, changes parameters from the mush. See
                     help @config parameters for available ones.
  & @conformat
!   @conformat <object> [=<format>].
  
    Replaces the usual "Contents:" or "Carrying:" format when an object
    is looked at, by a player-specified contents format. This is evaluated
--- 575,581 ----
    /set        --   Wizard only, changes parameters from the mush. See
                     help @config parameters for available ones.
  & @conformat
!   @conformat <object> [=<format>]
  
    Replaces the usual "Contents:" or "Carrying:" format when an object
    is looked at, by a player-specified contents format. This is evaluated
***************
*** 587,593 ****
    through '@conformat here = Contents: [iter(%0,name(##))]',
    for example. More complex things are, obviously, possible.
   
!   See also: @exitformat, @nameformat
  & @nameaccent
    @nameaccent <object> [=<accent template>]
  
--- 587,605 ----
    through '@conformat here = Contents: [iter(%0,name(##))]',
    for example. More complex things are, obviously, possible.
   
!   See also: @exitformat, @nameformat, @descformat
! & @descformat
!   @descformat <object> [=<text>]
! 
!   Replaces the usual description of the object when it is looked at
!   by player-specified text. The evaluated DESCRIBE attribute is
!   passed as %0; the unevaluated DESCRIBE can be acquired through
!   v(DESCRIBE).
! 
!   This is useful for things like room parents that enforce a consistent
!   "look" for each room's @desc.
! 
!   See also: @exitformat, @nameformat, @conformat
  & @nameaccent
    @nameaccent <object> [=<accent template>]
  
***************
*** 614,620 ****
    Example: Show the room's zone after its name.
    @nameformat here = [name(%0)] [if(isdbref(zone(%0)),<[name(zone(%0))]>)]
  
!   See also: @exitformat, @conformat
  & @cost
    @cost <object> = <amount> 
  
--- 626,632 ----
    Example: Show the room's zone after its name.
    @nameformat here = [name(%0)] [if(isdbref(zone(%0)),<[name(zone(%0))]>)]
  
!   See also: @exitformat, @conformat, @descformat
  & @cost
    @cost <object> = <amount> 
  
***************
*** 1105,1111 ****
    One could change the format to 'Exits: Exit1 Exit2 Exit3' through
    '@exitformat here = Exits: [iter(%0,name(##))]', for example.
  
!   See also: TRANSPARENT, @conformat, @nameformat
  & @failure
    @failure <object> [=<message>]
  
--- 1117,1123 ----
    One could change the format to 'Exits: Exit1 Exit2 Exit3' through
    '@exitformat here = Exits: [iter(%0,name(##))]', for example.
  
!   See also: TRANSPARENT, @conformat, @nameformat, @descformat
  & @failure
    @failure <object> [=<message>]
  
***************
*** 2626,2631 ****
--- 2638,2645 ----
                      be set by royalty and wizards.  "hidden" is a synonym.
    wizard (w)        Attribute can only be set by wizards. 
                      This flag can only be set by royalty and wizards.
+   veiled (V)        Attribute value will not be shown on default examine,
+                     but is still otherwise accessible (for spammy attribs).
    prefixmatch       When a user attempts to set an attribute using @<attrib>,
                      this attribute will be matched down to its unique
                      prefixes. This flag is primarily used internally.
***************
*** 3311,3321 ****
    example. to see all the attributes that began with a 'v' you could do 
    ex <object>/v*
    
!   Examine takes three switches, "brief"  (equivalent to the "brief" command),
!   "debug", which is a wizard-only switch, and "mortal".  "debug" examine
!   will show the raw values for certain fields in an object. "mortal"
!   examine will show an object as if you were a mortal and not the object's
!   owner. It's primarily useful to admins.
  & follow
    follow <object>
  
--- 3325,3336 ----
    example. to see all the attributes that began with a 'v' you could do 
    ex <object>/v*
    
!   The /brief switch is equivalent to the 'brief' command.
!   The /debug switch is wizard-only and shows raw values for certa
!   in fields in an object. 
!   The /mortal switch shows an object as if you were a mortal other than
!   the object's owner and is primarily useful to admins.
!   The /all switch shows the values of VEILED attributes.
  & follow
    follow <object>
  
*** 1_7_6.57/game/txt/hlp/index.hlp Tue, 12 Nov 2002 22:36:54 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1 660)
--- 1_7_7.58(w)/game/txt/hlp/index.hlp Sat, 07 Dec 2002 10:24:36 -0600 dunemush (pennmush/20_index.hlp 1.1.1.1.1.1.1.1.1.2.1.1.2.2.2.2.1.1.1.4.2.1.1.1 660)
***************
*** 74,119 ****
   1.7.5p5                   1.7.5p6                   1.7.5p7                  
   1.7.5p8                   1.7.5p9                   1.7.5p10                 
   1.7.5p11                  1.7.5p12                  1.7.6p0                  
!  :                         ;                         @-attributes             
!  @-building                @-general                 @-wizard                 
!  @@                        @@()                      @aahear                  
!  @aclone                   @aconnect                 @adeath                  
!  @adescribe                @adestroy                 @adisconnect             
!  @adrop                    @aefail                   @aenter                  
  
  For more, see Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @afailure                 @afollow                  @agive                   
!  @ahear                    @aidescribe               @aleave                  
!  @alfail                   @alias                    @allhalt                 
!  @allquota                 @amhear                   @amove                   
!  @apayment                 @areceive                 @asuccess                
!  @atport                   @atrchown                 @atrlock                 
!  @attribute                @aufail                   @aunfollow               
!  @ause                     @away                     @azenter                 
!  @azleave                  @boot                     @break                   
!  @cemit                    @channel                  @channel2                
!  @channel3                 @channel4                 @channel5                
!  @charges                  @chat                     @chown                   
!  @chownall                 @chzone                   @chzone2                 
!  @chzoneall                @clock                    @clock2                  
!  @clone                    @command                  @comment                 
!  @config                   @config attribs           @config chat             
  
  For more, see Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @config cmds              @config cosmetic          @config cosmetic2        
!  @config costs             @config db                @config dump             
!  @config funcs             @config limits            @config limits2          
!  @config log               @config net               @config parameters       
!  @config tiny              @conformat                @cost                    
!  @cpattr                   @create                   @dbck                    
!  @death                    @decompile                @decompile2              
!  @decompile3               @describe                 @destroy                 
   @destroy2                 @dig                      @dig2                    
   @disable                  @doing                    @dolist                  
   @drain                    @drop                     @dump                    
--- 74,120 ----
   1.7.5p5                   1.7.5p6                   1.7.5p7                  
   1.7.5p8                   1.7.5p9                   1.7.5p10                 
   1.7.5p11                  1.7.5p12                  1.7.6p0                  
!  1.7.6p1                   1.7.7p0                   :                        
!  ;                         @-attributes              @-building               
!  @-general                 @-wizard                  @@                       
!  @@()                      @aahear                   @aclone                  
!  @aconnect                 @adeath                   @adescribe               
!  @adestroy                 @adisconnect              @adrop                   
  
  For more, see Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @aefail                   @aenter                   @afailure                
!  @afollow                  @agive                    @ahear                   
!  @aidescribe               @aleave                   @alfail                  
!  @alias                    @allhalt                  @allquota                
!  @amhear                   @amove                    @apayment                
!  @areceive                 @asuccess                 @atport                  
!  @atrchown                 @atrlock                  @attribute               
!  @aufail                   @aunfollow                @ause                    
!  @away                     @azenter                  @azleave                 
!  @boot                     @break                    @cemit                   
!  @channel                  @channel2                 @channel3                
!  @channel4                 @channel5                 @charges                 
!  @chat                     @chown                    @chownall                
!  @chzone                   @chzone2                  @chzoneall               
!  @clock                    @clock2                   @clone                   
!  @command                  @comment                  @config                  
  
  For more, see Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  @config attribs           @config chat              @config cmds             
!  @config cosmetic          @config cosmetic2         @config costs            
!  @config db                @config dump              @config funcs            
!  @config limits            @config limits2           @config log              
!  @config net               @config parameters        @config tiny             
!  @conformat                @cost                     @cpattr                  
!  @create                   @dbck                     @death                   
!  @decompile                @decompile2               @decompile3              
!  @descformat               @describe                 @destroy                 
   @destroy2                 @dig                      @dig2                    
   @disable                  @doing                    @dolist                  
   @drain                    @drop                     @dump                    
***************
*** 121,132 ****
   @elock                    @emit                     @enable                  
   @enter                    @entrances                @eunlock                 
   @exitformat               @failure                  @filter                  
-  @filter2                  @find                     @firstexit               
  
  For more, see Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   @follow                   @force                    @force2                  
   @forwardlist              @function                 @function2               
   @function3                @function4                @gedit                   
--- 122,133 ----
   @elock                    @emit                     @enable                  
   @enter                    @entrances                @eunlock                 
   @exitformat               @failure                  @filter                  
  
  For more, see Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  @filter2                  @find                     @firstexit               
   @follow                   @force                    @force2                  
   @forwardlist              @function                 @function2               
   @function3                @function4                @gedit                   
***************
*** 142,153 ****
   @lock6                    @lock7                    @lock8                   
   @lock9                    @log                      @logwipe                 
   @lset                     @map2                     @mail                    
-  @malias                   @malias2                  @malias3                 
  
  For more, see Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   @malias4                  @malias5                  @map                     
   @motd                     @move                     @mvattr                  
   @name                     @nameaccent               @nameformat              
--- 143,154 ----
   @lock6                    @lock7                    @lock8                   
   @lock9                    @log                      @logwipe                 
   @lset                     @map2                     @mail                    
  
  For more, see Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  @malias                   @malias2                  @malias3                 
   @malias4                  @malias5                  @map                     
   @motd                     @move                     @mvattr                  
   @name                     @nameaccent               @nameformat              
***************
*** 163,174 ****
   @oxmove                   @oxtport                  @ozenter                 
   @ozleave                  @parent                   @password                
   @payment                  @pcreate                  @pemit                   
-  @pemit2                   @poll                     @poor                    
  
  For more, see Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   @power                    @prefix                   @ps                      
   @purge                    @quota                    @readcache               
   @receive                  @recycle                  @rejectmotd              
--- 164,175 ----
   @oxmove                   @oxtport                  @ozenter                 
   @ozleave                  @parent                   @password                
   @payment                  @pcreate                  @pemit                   
  
  For more, see Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  @pemit2                   @poll                     @poor                    
   @power                    @prefix                   @ps                      
   @purge                    @quota                    @readcache               
   @receive                  @recycle                  @rejectmotd              
***************
*** 184,195 ****
   @trigger2                 @ufail                    @ulock                   
   @undestroy                @unfollow                 @unlink                  
   @unlock                   @unrecycle                @uptime                  
-  @uptime2                  @use                      @uunlock                 
  
  For more, see Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   @verb                     @verb2                    @verb3                   
   @verb4                    @version                  @vrml_url                
   @wait                     @wait2                    @wall                    
--- 185,196 ----
   @trigger2                 @ufail                    @ulock                   
   @undestroy                @unfollow                 @unlink                  
   @unlock                   @unrecycle                @uptime                  
  
  For more, see Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  @uptime2                  @use                      @uunlock                 
   @verb                     @verb2                    @verb3                   
   @verb4                    @version                  @vrml_url                
   @wait                     @wait2                    @wall                    
***************
*** 205,216 ****
   after()                   ahelp                     alphamax()               
   alphamin()                and()                     andflags()               
   anews                     ansi                      ansi()                   
-  aposs()                   art()                     asin()                   
  
  For more, see Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   atan()                    atan2()                   atrlock()                
   attrcnt()                 attrib-ownership          attribute flags          
   attribute functions       attribute list            attributes               
--- 206,217 ----
   after()                   ahelp                     alphamax()               
   alphamin()                and()                     andflags()               
   anews                     ansi                      ansi()                   
  
  For more, see Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  aposs()                   art()                     asin()                   
   atan()                    atan2()                   atrlock()                
   attrcnt()                 attrib-ownership          attribute flags          
   attribute functions       attribute list            attributes               
***************
*** 226,237 ****
   cat()                     cd                        ceil()                   
   cemit()                   center()                  cflags()                 
   ch                        changes                   channel functions        
-  channel-list              channels()                chat                     
  
  For more, see Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   checkpass()               chown_ok                  chr()                    
   clients                   clock()                   clone()                  
   cloudy                    code                      color                    
--- 227,238 ----
   cat()                     cd                        ceil()                   
   cemit()                   center()                  cflags()                 
   ch                        changes                   channel functions        
  
  For more, see Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  channel-list              channels()                chat                     
   checkpass()               chown_ok                  chr()                    
   clients                   clock()                   clone()                  
   cloudy                    code                      color                    
***************
*** 247,258 ****
   database                  dbref #                   dbref functions          
   dbref number              dbref2                    dbrefs                   
   debug                     debug2                    dec()                    
-  decrypt()                 default()                 delete()                 
  
  For more, see Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   desert                    destroy_ok                die()                    
   dig()                     dismiss                   dist2d()                 
   dist3d()                  div()                     doing                    
--- 248,259 ----
   database                  dbref #                   dbref functions          
   dbref number              dbref2                    dbrefs                   
   debug                     debug2                    dec()                    
  
  For more, see Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  decrypt()                 default()                 delete()                 
   desert                    destroy_ok                die()                    
   dig()                     dismiss                   dist2d()                 
   dist3d()                  div()                     doing                    
***************
*** 268,279 ****
   exit()                    exits                     exits2                   
   exp()                     extract()                 failure                  
   fdiv()                    filter()                  filterbool()             
-  findable()                first()                   fixed                    
  
  For more, see Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   flag list                 flags                     flags list               
   flags()                   flags2                    flip()                   
   floating                  floating point functions  floor()                  
--- 269,280 ----
   exit()                    exits                     exits2                   
   exp()                     extract()                 failure                  
   fdiv()                    filter()                  filterbool()             
  
  For more, see Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  findable()                first()                   fixed                    
   flag list                 flags                     flags list               
   flags()                   flags2                    flip()                   
   floating                  floating point functions  floor()                  
***************
*** 289,301 ****
   graball()                 grep()                    grepi()                  
   gt()                      gte()                     halt                     
   hasattr()                 hasattrp()                hasattrpval()            
-  hasattrval()              hasflag()                 haspower()               
  
  For more, see Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  hastype()                 haven                     help                     
   here                      hidden()                  home                     
   home()                    homes                     html                     
   html functions            html()                    i18n                     
--- 290,302 ----
   graball()                 grep()                    grepi()                  
   gt()                      gte()                     halt                     
   hasattr()                 hasattrp()                hasattrpval()            
  
  For more, see Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  hasattrval()              hasflag()                 haspower()               
!  hastype()                 haven                     height()                 
   here                      hidden()                  home                     
   home()                    homes                     html                     
   html functions            html()                    i18n                     
***************
*** 310,321 ****
   itemize()                 items()                   iter()                   
   iter2                     itext()                   judge                    
   jump_ok                   jury_ok                   kill                     
-  last & lastlogout         last()                    lastip                   
  
  For more, see Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   lastsite                  lattr()                   lcon()                   
   lcstr()                   ldelete()                 leave                    
   left()                    lemit()                   lexits()                 
--- 311,322 ----
   itemize()                 items()                   iter()                   
   iter2                     itext()                   judge                    
   jump_ok                   jury_ok                   kill                     
  
  For more, see Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  last & lastlogout         last()                    lastip                   
   lastsite                  lattr()                   lcon()                   
   lcstr()                   ldelete()                 leave                    
   left()                    lemit()                   lexits()                 
***************
*** 331,342 ****
   locklist                  locks                     locktypes                
   locktypes2                log()                     logout                   
   look                      look2                     looping                  
-  lparent()                 lplayers()                lsearch()                
  
  For more, see Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   lsearch2                  lsearchr()                lstats()                 
   lt()                      lte()                     lvcon()                  
   lvexits()                 lvplayers()               lwho()                   
--- 332,343 ----
   locklist                  locks                     locktypes                
   locktypes2                log()                     logout                   
   look                      look2                     looping                  
  
  For more, see Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  lparent()                 lplayers()                lsearch()                
   lsearch2                  lsearchr()                lstats()                 
   lt()                      lte()                     lvcon()                  
   lvexits()                 lvplayers()               lwho()                   
***************
*** 352,363 ****
   member()                  merge()                   mid()                    
   min()                     mix()                     mix2                     
   mod()                     modulo()                  modulus()                
-  money                     money()                   monitor                  
  
  For more, see Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   mortal                    move                      mtime()                  
   mudname()                 mul()                     munge()                  
   munge2                    munge3                    mushcode                 
--- 353,364 ----
   member()                  merge()                   mid()                    
   min()                     mix()                     mix2                     
   mod()                     modulo()                  modulus()                
  
  For more, see Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  money                     money()                   monitor                  
   mortal                    move                      mtime()                  
   mudname()                 mul()                     munge()                  
   munge2                    munge3                    mushcode                 
***************
*** 373,384 ****
   num()                     obj()                     object parents           
   objeval()                 objmem()                  oemit()                  
   on-vacation               opaque                    open()                   
-  or()                      ord()                     orflags()                
  
  For more, see Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   owner()                   page                      page2                    
   paranoid                  parent                    parent()                 
   parents                   parents2                  parents3                 
--- 374,385 ----
   num()                     obj()                     object parents           
   objeval()                 objmem()                  oemit()                  
   on-vacation               opaque                    open()                   
  
  For more, see Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  or()                      ord()                     orflags()                
   owner()                   page                      page2                    
   paranoid                  parent                    parent()                 
   parents                   parents2                  parents3                 
***************
*** 394,405 ****
   queue                     quiet                     quit                     
   quota()                   r()                       r-function               
   rand()                    read                      regedit()                
-  regeditall()              regeditalli()             regediti()               
  
  For more, see Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   regexp                    regexp classes            regexp classes2          
   regexp examples           regexp syntax             regexp syntax2           
   regexp syntax3            regexp syntax4            regexp syntax5           
--- 395,406 ----
   queue                     quiet                     quit                     
   quota()                   r()                       r-function               
   rand()                    read                      regedit()                
  
  For more, see Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  regeditall()              regeditalli()             regediti()               
   regexp                    regexp classes            regexp classes2          
   regexp examples           regexp syntax             regexp syntax2           
   regexp syntax3            regexp syntax4            regexp syntax5           
***************
*** 415,493 ****
   revwords()                right()                   rjust()                  
   rloc()                    rnum()                    room                     
   room()                    round()                   royalty                  
-  rquota                    rules                     s()                      
  
  For more, see Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   s-function                safe                      say                      
!  score                     scramble()                search()                 
!  search2                   secs()                    secure()                 
!  semaphores                semaphores2               semaphores3              
!  semaphores4               semaphores5               semaphores6              
!  semipose                  session                   set()                    
!  setdiff()                 setinter()                setq()                   
!  setq2                     setq3                     setr()                   
!  setting-attributes        setunion()                sex                      
!  sha1()                    shared                    shared players           
!  shared players2           shl()                     shr()                    
!  shuffle()                 sign()                    sin()                    
!  slay                      softcode                  sort()                   
!  sortby()                  soundex()                 soundex2                 
!  soundlike()               soundslike()              space()                  
!  spellnum()                splice()                  spoofing                 
  
  For more, see Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  sqrt()                    squish()                  stack                    
!  starttime()               stats()                   stddev()                 
!  step2                     step()                    sticky                   
!  strcat()                  string functions          strings                  
!  strinsert()               stripaccents()            stripansi()              
!  strlen()                  strmatch()                sub()                    
!  subj()                    substitutions             substitutions2           
!  substitutions3            substitutions4            success                  
!  suspect                   switch wildcards          switch()                 
!  switch2                   switchall()               switches                 
!  t()                       table()                   tag()                    
!  tagwrap()                 take                      tan()                    
!  teach                     tel()                     tel_ok                   
!  temple                    terse                     textfile()               
!  think                     time functions            time()                   
!  timefmt()                 timefmt2                  timestring()             
  
  For more, see Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  topics                    topics2                   translation              
!  transparent               transparent2              trim()                   
!  trunc()                   trust                     trust2                   
!  type()                    types of objects          types2                   
!  u()                       u2                        u3                       
!  ucstr()                   udefault()                ufun()                   
!  ufun2                     ufun3                     uldefault()              
!  ulocal()                  ulocal2                   unfindable               
!  unfollow                  uninspected               unregistered             
!  use                       user-defined commands     user-defined2            
!  utctime()                 utility functions         v()                      
!  v-function                vadd()                    val()                    
!  valid()                   vdim()                    vdot()                   
!  verbose                   verbs                     version()                
!  visible()                 visual                    vmag()                   
!  vmax()                    vmin()                    vmul()                   
  
  For more, see Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  vrml                      vsub()                    vunit()                  
!  warnings                  warnings list             warnings list2           
!  where()                   whisper                   whisper2                 
!  who                       wildcards                 wipe()                   
   with                      wizard                    wordpos()                
   words()                   wrap()                    xget()                   
   xor()                     z_tel                     zemit()                  
--- 416,495 ----
   revwords()                right()                   rjust()                  
   rloc()                    rnum()                    room                     
   room()                    round()                   royalty                  
  
  For more, see Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  rquota                    rules                     s()                      
   s-function                safe                      say                      
!  score                     scramble()                screenheight             
!  screenwidth               search()                  search2                  
!  secs()                    secure()                  semaphores               
!  semaphores2               semaphores3               semaphores4              
!  semaphores5               semaphores6               semipose                 
!  session                   set()                     setdiff()                
!  setinter()                setq()                    setq2                    
!  setq3                     setr()                    setting-attributes       
!  setunion()                sex                       sha1()                   
!  shared                    shared players            shared players2          
!  shl()                     shr()                     shuffle()                
!  sign()                    sin()                     slay                     
!  softcode                  sort()                    sortby()                 
!  soundex()                 soundex2                  soundlike()              
  
  For more, see Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  soundslike()              space()                   spellnum()               
!  splice()                  spoofing                  sqrt()                   
!  squish()                  stack                     starttime()              
!  stats()                   stddev()                  step2                    
!  step()                    sticky                    strcat()                 
!  string functions          strings                   strinsert()              
!  stripaccents()            stripansi()               strlen()                 
!  strmatch()                sub()                     subj()                   
!  substitutions             substitutions2            substitutions3           
!  substitutions4            success                   suspect                  
!  switch wildcards          switch()                  switch2                  
!  switchall()               switches                  t()                      
!  table()                   tag()                     tagwrap()                
!  take                      tan()                     teach                    
!  tel()                     tel_ok                    temple                   
!  terse                     textfile()                think                    
  
  For more, see Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  time functions            time()                    timefmt()                
!  timefmt2                  timestring()              topics                   
!  topics2                   translation               transparent              
!  transparent2              trim()                    trunc()                  
!  trust                     trust2                    type()                   
!  types of objects          types2                    u()                      
!  u2                        u3                        ucstr()                  
!  udefault()                ufun()                    ufun2                    
!  ufun3                     uldefault()               ulocal()                 
!  ulocal2                   unfindable                unfollow                 
!  uninspected               unregistered              use                      
!  user-defined commands     user-defined2             utctime()                
!  utility functions         v()                       v-function               
!  vadd()                    val()                     valid()                  
!  vdim()                    vdot()                    verbose                  
!  verbs                     version()                 visible()                
  
  For more, see Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  visual                    vmag()                    vmax()                   
!  vmin()                    vmul()                    vrml                     
!  vsub()                    vunit()                   warnings                 
!  warnings list             warnings list2            where()                  
!  whisper                   whisper2                  who                      
!  width()                   wildcards                 wipe()                   
   with                      wizard                    wordpos()                
   words()                   wrap()                    xget()                   
   xor()                     z_tel                     zemit()                  
*** 1_7_6.57/game/mushcnf.dst Sun, 08 Dec 2002 22:35:42 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.1 600)
--- 1_7_7.58(w)/game/mushcnf.dst Sun, 08 Dec 2002 22:35:56 -0600 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2.1.1.1.8.1.2 600)
***************
*** 484,493 ****
  # Should we emulate TinyMUSH? [+ for new MUSHes]
  tiny_trim_fun yes
  
- # show attributes in TinyMUSH format (FOO(#4v): test) rather than
- # PennMUSH format (FOO [#4v]: test)?
- tiny_attrs no
- 
  # In Tiny, strings used in math expressions evaluate to 0,
  # so eq(asdfa,0) = 1, gt(asdf,0) = 0, etc.
  # In Penn, using strings where numbers should be is traditionally an
--- 484,489 ----
*** 1_7_6.57/config_h.SH Thu, 05 Sep 2002 18:45:47 -0500 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.5 660)
--- 1_7_7.58(w)/config_h.SH Fri, 06 Dec 2002 22:50:50 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.6 660)
***************
*** 599,604 ****
--- 599,609 ----
   */
  #$d_newstyle CAN_NEWSTYLE /**/
  
+ /* HAS_OPENSSL:
+  *	Defined if openssl 0.9.6+ is available.
+  */
+ #$d_openssl HAS_OPENSSL /**/
+ 
  /* HAS_RANDOM:
   *	Have we got random(), our first choice for number generation?
   */
***************
*** 730,740 ****
  #$d_uptime HAS_UPTIME	/**/
  #define UPTIME_PATH "$uptime"
  
- /* HAS_DEV_URANDOM:
-  *	This symbol is defined if /dev/urandom is available.
-  */
- #$d_urandom HAS_DEV_URANDOM	/**/
- 
  /* UNION_WAIT:
   *	This symbol if defined indicates to the C program that the argument
   *	for the wait() system call should be declared as 'union wait status'
--- 735,740 ----
*** 1_7_6.57/src/shs.c Sat, 12 Oct 2002 16:53:23 -0500 dunemush (pennmush/b/18_shs.c 1.6 660)
--- 1_7_7.58(w)/src/shs.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/18_shs.c 1.7 660)
***************
*** 23,33 ****
  #include "copyrite.h"
  #include "config.h"
  
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #include "shs.h"
  
--- 23,29 ----
*** 1_7_6.57/src/local.dst Tue, 25 Sep 2001 16:27:49 -0500 dunemush (pennmush/b/19_local.dst 1.8 660)
--- 1_7_7.58(w)/src/local.dst Thu, 12 Dec 2002 21:11:56 -0600 dunemush (pennmush/b/19_local.dst 1.9 660)
***************
*** 9,22 ****
   */
  #include "copyrite.h"
  #include "config.h"
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
- #ifdef I_SETJMP
  #include <setjmp.h>
- #endif
  #include "externs.h"
  #include "parse.h"
  #include "htab.h"
--- 9,16 ----
***************
*** 25,36 ****
  
  extern HASHTAB htab_reserved_aliases;
  
- #ifdef I_SETJMP
  extern jmp_buf db_err;
  #define OUTPUT(fun) do { if ((fun) < 0) longjmp(db_err, 1); } while (0)
- #else
- #define OUTPUT(fun) fun
- #endif
  
  /* Called after all MUSH init is done.
   */
--- 19,26 ----
*** 1_7_6.57/src/funlocal.dst Fri, 05 Jul 2002 12:57:10 -0500 dunemush (pennmush/b/20_funlocal.d 1.4 660)
--- 1_7_7.58(w)/src/funlocal.dst Thu, 12 Dec 2002 21:11:56 -0600 dunemush (pennmush/b/20_funlocal.d 1.5 660)
***************
*** 14,24 ****
   */
  #include "copyrite.h"
  #include "config.h"
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include "externs.h"
  #include "parse.h"
  #include "confmagic.h"
--- 14,20 ----
*** 1_7_6.57/src/cmdlocal.dst Tue, 29 Oct 2002 14:47:59 -0600 dunemush (pennmush/b/21_cmdlocal.d 1.9 660)
--- 1_7_7.58(w)/src/cmdlocal.dst Thu, 12 Dec 2002 21:11:56 -0600 dunemush (pennmush/b/21_cmdlocal.d 1.10 660)
***************
*** 9,19 ****
   */
  #include "copyrite.h"
  #include "config.h"
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include "externs.h"
  #include "parse.h"
  #include "htab.h"
--- 9,15 ----
*** 1_7_6.57/src/wiz.c Fri, 06 Dec 2002 21:20:38 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1 660)
--- 1_7_7.58(w)/src/wiz.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.2 660)
***************
*** 1296,1303 ****
  	   const char *restriction, const char *start, const char *stop,
  	   dbref **result, PE_Info * pe_info)
  {
!   Size_t result_size;
!   Size_t nresults = 0;
    enum search_class sclass = S_OWNER;
    int n;
    int restrict_type = NOTYPE;
--- 1296,1303 ----
  	   const char *restriction, const char *start, const char *stop,
  	   dbref **result, PE_Info * pe_info)
  {
!   size_t result_size;
!   size_t nresults = 0;
    enum search_class sclass = S_OWNER;
    int n;
    int restrict_type = NOTYPE;
***************
*** 1310,1316 ****
  
    /* Range limits */
    if (start && *start) {
!     Size_t offset = 0;
      if (start[0] == '#')
        offset = 1;
      low = parse_integer(start + offset);
--- 1310,1316 ----
  
    /* Range limits */
    if (start && *start) {
!     size_t offset = 0;
      if (start[0] == '#')
        offset = 1;
      low = parse_integer(start + offset);
***************
*** 1320,1326 ****
      }
    }
    if (stop && *stop) {
!     Size_t offset = 0;
      if (stop[0] == '#')
        offset = 1;
      high = parse_integer(stop + offset);
--- 1320,1326 ----
      }
    }
    if (stop && *stop) {
!     size_t offset = 0;
      if (stop[0] == '#')
        offset = 1;
      high = parse_integer(stop + offset);
*** 1_7_6.57/src/wild.c Tue, 20 Aug 2002 09:48:05 -0500 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.8 660)
--- 1_7_7.58(w)/src/wild.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.9 660)
***************
*** 19,32 ****
   */
  #include "config.h"
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  
  #include "copyrite.h"
  #include "conf.h"
--- 19,26 ----
***************
*** 49,57 ****
  						/* big to match tprintf */
  
  static int wild1
!   (const char *tstr, const char *dstr, int arg, char *wbuf, int cs);
! static int wild(const char *s, const char *d, int p, int cs);
! static int check_literals(const char *tstr, const char *dstr, int cs);
  
  /* ---------------------------------------------------------------------------
   * quick_wild: do a wildcard match, without remembering the wild data.
--- 43,53 ----
  						/* big to match tprintf */
  
  static int wild1
!   (const char *RESTRICT tstr, const char *RESTRICT dstr, int arg,
!    char *RESTRICT wbuf, int cs);
! static int wild(const char *RESTRICT s, const char *RESTRICT d, int p, int cs);
! static int check_literals(const char *RESTRICT tstr, const char *RESTRICT dstr,
! 			  int cs);
  
  /* ---------------------------------------------------------------------------
   * quick_wild: do a wildcard match, without remembering the wild data.
***************
*** 59,65 ****
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! quick_wild(const char *tstr, const char *dstr)
  {
    /* quick_wild_new does the real work, but before we call it, 
     * we do some sanity checking. 
--- 55,61 ----
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! quick_wild(const char *RESTRICT tstr, const char *RESTRICT dstr)
  {
    /* quick_wild_new does the real work, but before we call it, 
     * we do some sanity checking. 
***************
*** 71,77 ****
  
  
  int
! quick_wild_new(const char *tstr, const char *dstr, int cs)
  {
    while (*tstr != '*') {
      switch (*tstr) {
--- 67,73 ----
  
  
  int
! quick_wild_new(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs)
  {
    while (*tstr != '*') {
      switch (*tstr) {
***************
*** 145,156 ****
   * and what it points to.
   */
  static int
! wild1(tstr, dstr, arg, wbuf, cs)
!     const char *tstr;
!     const char *dstr;
!     int arg;
!     char *wbuf;
!     int cs;			/* Case sensitive? */
  {
    const char *datapos;
    char *wnext;
--- 141,148 ----
   * and what it points to.
   */
  static int
! wild1(const char *RESTRICT tstr, const char *RESTRICT dstr, int arg,
!       char *RESTRICT wbuf, int cs)
  {
    const char *datapos;
    char *wnext;
***************
*** 301,311 ****
   * Side Effect: this routine modifies the 'wnxt' global variable.
   */
  static int
! wild(s, d, p, cs)
!     const char *s;
!     const char *d;
!     int p;
!     int cs;			/* Case sensitive? */
  {
    /* Do fast match. */
    while ((*s != '*') && (*s != '?')) {
--- 293,299 ----
   * Side Effect: this routine modifies the 'wnxt' global variable.
   */
  static int
! wild(const char *RESTRICT s, const char *RESTRICT d, int p, int cs)
  {
    /* Do fast match. */
    while ((*s != '*') && (*s != '?')) {
***************
*** 334,343 ****
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! wild_match_case(s, d, cs)
!     const char *s;
!     const char *d;
!     int cs;			/* Case sensitive match? */
  {
    int j;
    /* Clear %0-%9 and r(0) - r(9) */
--- 322,328 ----
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
  {
    int j;
    /* Clear %0-%9 and r(0) - r(9) */
***************
*** 352,361 ****
   * regexp_match: do a regexp match, remembering the matched subexpressions
   */
  int
! regexp_match_case(s, d, cs)
!     const char *s;
!     const char *d;
!     int cs;			/* Case sensitive? */
  {
    int j;
    pcre *re;
--- 337,343 ----
   * regexp_match: do a regexp match, remembering the matched subexpressions
   */
  int
! regexp_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
  {
    int j;
    pcre *re;
***************
*** 428,437 ****
   * subexpressions.
   */
  int
! quick_regexp_match(s, d, cs)
!     const char *s;
!     const char *d;
!     int cs;			/* Case sensitive? */
  {
    pcre *re;
    const char *errptr;
--- 410,416 ----
   * subexpressions.
   */
  int
! quick_regexp_match(const char *RESTRICT s, const char *RESTRICT d, int cs)
  {
    pcre *re;
    const char *errptr;
***************
*** 475,484 ****
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! local_wild_match_case(s, d, cs)
!     const char *s;
!     const char *d;
!     int cs;
  {
    switch (*s) {
    case '>':
--- 454,460 ----
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
! local_wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
  {
    switch (*s) {
    case '>':
***************
*** 504,511 ****
   * suitable for outside use.
   */
  int
! wildcard(s)
!     const char *s;
  {
    if (strchr(s, '*') || strchr(s, '?'))
      return 1;
--- 480,486 ----
   * suitable for outside use.
   */
  int
! wildcard(const char *s)
  {
    if (strchr(s, '*') || strchr(s, '?'))
      return 1;
***************
*** 513,519 ****
  }
  
  static int
! check_literals(const char *tstr, const char *dstr, int cs)
  {
    /* Every literal string in tstr must appear, in order, in dstr,
     * or no match can happen. That is, tstr is the pattern and dstr
--- 488,494 ----
  }
  
  static int
! check_literals(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs)
  {
    /* Every literal string in tstr must appear, in order, in dstr,
     * or no match can happen. That is, tstr is the pattern and dstr
*** 1_7_6.57/src/warnings.c Fri, 05 Jul 2002 09:26:45 -0500 dunemush (pennmush/b/25_warnings.c 1.21 660)
--- 1_7_7.58(w)/src/warnings.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/25_warnings.c 1.22 660)
***************
*** 19,25 ****
  #include "attrib.h"
  #include "confmagic.h"
  
- #ifdef USE_WARNINGS
  
  #define W_UNLOCKED      0x1
  #define W_LOCKED        0x2
--- 19,24 ----
***************
*** 535,540 ****
    notify(player, T("@wcheck complete."));
    return;
  }
- 
- 
- #endif				/* USE_WARNINGS */
--- 534,536 ----
*** 1_7_6.57/src/version.c Fri, 05 Jul 2002 12:57:10 -0500 dunemush (pennmush/b/26_version.c 1.7 660)
--- 1_7_7.58(w)/src/version.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/26_version.c 1.8 660)
***************
*** 5,15 ****
  #include "config.h"
  #include "copyrite.h"
  
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include <time.h>
  #include "conf.h"
  
--- 5,11 ----
*** 1_7_6.57/src/utils.c Fri, 05 Jul 2002 09:26:45 -0500 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.4 660)
--- 1_7_7.58(w)/src/utils.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.5 660)
***************
*** 52,58 ****
  void init_by_array(unsigned long *, int);
  
  Malloc_t
! mush_malloc(Size_t size, const char *check)
  {
    Malloc_t ptr;
  #ifdef MEM_CHECK
--- 52,58 ----
  void init_by_array(unsigned long *, int);
  
  Malloc_t
! mush_malloc(size_t size, const char *check)
  {
    Malloc_t ptr;
  #ifdef MEM_CHECK
***************
*** 66,72 ****
  }
  
  void
! mush_free(Malloc_t ptr, const char *check __attribute__ ((__unused__)))
  {
  #ifdef MEM_CHECK
    del_check(check);
--- 66,73 ----
  }
  
  void
! mush_free(Malloc_t RESTRICT ptr, const char *RESTRICT check
! 	  __attribute__ ((__unused__)))
  {
  #ifdef MEM_CHECK
    del_check(check);
*** 1_7_6.57/src/unparse.c Sun, 10 Nov 2002 14:27:19 -0600 dunemush (pennmush/b/28_unparse.c 1.16.1.7 660)
--- 1_7_7.58(w)/src/unparse.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/28_unparse.c 1.16.1.8 660)
***************
*** 2,12 ****
  #include "copyrite.h"
  #include "config.h"
  
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include "conf.h"
  #include "mushdb.h"
  #include "dbdefs.h"
--- 2,8 ----
*** 1_7_6.57/src/timer.c Thu, 05 Sep 2002 09:29:20 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.7 660)
--- 1_7_7.58(w)/src/timer.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.8 660)
***************
*** 159,171 ****
  	     *options.dump_warning_5min) {
      flag_broadcast(0, 0, "%s", options.dump_warning_5min);
    }
- #ifdef USE_WARNINGS
    if (options.warn_interval && (options.warn_counter <= mudtime)) {
      options.warn_counter = options.warn_interval + mudtime;
      strcpy(ccom, "warnings");
      run_topology();
    }
- #endif
  
    local_timer();
  }
--- 159,169 ----
*** 1_7_6.57/src/help.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2.1.2.1.3.1.6 660)
--- 1_7_7.58(w)/src/help.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/f/32_help.c 1.4.1.2.1.1.1.3.2.2.1.1.2.1.1.2.1.2.1.2.1.3.1.7 660)
***************
*** 1,12 ****
  #include "config.h"
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include <ctype.h>
  #include <stdio.h>
  #include "externs.h"
--- 1,6 ----
***************
*** 152,158 ****
    FILE *fp;
    char *p, line[LINE_SIZE + 1];
    char the_topic[LINE_SIZE + 2];
!   Size_t n;
  
    if (*arg1 == '\0')
      arg1 = (char *) "help";
--- 146,152 ----
    FILE *fp;
    char *p, line[LINE_SIZE + 1];
    char the_topic[LINE_SIZE + 2];
!   size_t n;
  
    if (*arg1 == '\0')
      arg1 = (char *) "help";
***************
*** 444,450 ****
    FILE *fp;
    char line[LINE_SIZE + 1];
    char the_topic[LINE_SIZE + 2];
!   Size_t n;
    static char buff[BUFFER_LEN];
    char *bp;
  
--- 438,444 ----
    FILE *fp;
    char line[LINE_SIZE + 1];
    char the_topic[LINE_SIZE + 2];
!   size_t n;
    static char buff[BUFFER_LEN];
    char *bp;
  
*** 1_7_6.57/src/htab.c Tue, 20 Nov 2001 17:08:09 -0600 dunemush (pennmush/b/30_htab.c 1.8.1.5 660)
--- 1_7_7.58(w)/src/htab.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/b/30_htab.c 1.8.1.6 660)
***************
*** 262,273 ****
  }
  
  HASHENT *
! hash_new(htab, key)
!     HASHTAB *htab;
!     const char *key;
  {
    int hval;
!   Size_t keylen;
    HASHENT *hptr, *curr, *old;
  
    hptr = hash_find(htab, key);
--- 262,271 ----
  }
  
  HASHENT *
! hash_new(HASHTAB *htab, const char *key)
  {
    int hval;
!   size_t keylen;
    HASHENT *hptr, *curr, *old;
  
    hptr = hash_find(htab, key);
*** 1_7_6.57/src/privtab.c Thu, 04 Jul 2002 14:34:07 -0500 dunemush (pennmush/b/31_privtab.c 1.5 660)
--- 1_7_7.58(w)/src/privtab.c Thu, 12 Dec 2002 21:11:59 -0600 dunemush (pennmush/b/31_privtab.c 1.6 660)
***************
*** 4,17 ****
  #include "copyrite.h"
  #include "config.h"
  #include <ctype.h>
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include "conf.h"
  #include "privtab.h"
  #include "externs.h"
--- 4,11 ----
*** 1_7_6.57/src/switchinc.c Mon, 09 Dec 2002 14:23:00 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.4.1.1 660)
--- 1_7_7.58(w)/src/switchinc.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/32_switchinc. 1.3.1.2.1.6.1.18.1.2.1.2.2.5.1.4.2.4.1.1.1.2.1.5.1.2.1.5.2.1.1.31.3.7 660)
***************
*** 132,136 ****
    {"WIZARD", SWITCH_WIZARD},
    {"YES", SWITCH_YES},
    {"ZONE", SWITCH_ZONE},
! {NULL, 0}
  };
--- 132,136 ----
    {"WIZARD", SWITCH_WIZARD},
    {"YES", SWITCH_YES},
    {"ZONE", SWITCH_ZONE},
!   {NULL, 0}
  };
*** 1_7_6.57/src/strutil.c Sun, 01 Dec 2002 13:45:45 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.21 660)
--- 1_7_7.58(w)/src/strutil.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7.2.1.1.2.1.1.1.1.1.1.1.22 660)
***************
*** 26,36 ****
  
  char *next_token(char *str, char sep);
  static int format_long(long val, char *buff, char **bp, int maxlen);
- char *mush_strndup(const char *src, size_t len, const char *check);
- 
- /* Duplicate the first len characters of s */
  char *
  mush_strndup(const char *src, size_t len, const char *check)
  {
    char *copy;
    size_t rlen = strlen(src);
--- 26,37 ----
  
  char *next_token(char *str, char sep);
  static int format_long(long val, char *buff, char **bp, int maxlen);
  char *
  mush_strndup(const char *src, size_t len, const char *check)
+   __attribute_malloc__;
+ 
+ /* Duplicate the first len characters of s */
+     char *mush_strndup(const char *src, size_t len, const char *check)
  {
    char *copy;
    size_t rlen = strlen(src);
***************
*** 60,66 ****
  #endif
  #else
  
!   Size_t len = strlen(s) + 1;
    x = mush_malloc(len, check);
    if (x)
      memcpy(x, s, len);
--- 61,67 ----
  #endif
  #else
  
!   size_t len = strlen(s) + 1;
    x = mush_malloc(len, check);
    if (x)
      memcpy(x, s, len);
***************
*** 93,99 ****
  }
  
  int
! strncasecmp(const char *s1, const char *s2, Size_t n)
  {
    for (; 0 < n; ++s1, ++s2, --n)
      if (DOWNCASE(*s1) != DOWNCASE(*s2))
--- 94,100 ----
  }
  
  int
! strncasecmp(const char *s1, const char *s2, size_t n)
  {
    for (; 0 < n; ++s1, ++s2, --n)
      if (DOWNCASE(*s1) != DOWNCASE(*s2))
***************
*** 107,113 ****
  #endif				/* !HAS_STRCASECMP */
  
  int
! string_prefix(const char *string, const char *prefix)
  {
    if (!string || !prefix)
      return 0;
--- 108,114 ----
  #endif				/* !HAS_STRCASECMP */
  
  int
! string_prefix(const char *RESTRICT string, const char *RESTRICT prefix)
  {
    if (!string || !prefix)
      return 0;
***************
*** 182,189 ****
  }
  
  int
! safe_accent(const char *base, const char *tmplate, size_t len, char *buff,
! 	    char **bp)
  {
    /* base and tmplate must be the same length */
    size_t n;
--- 183,190 ----
  }
  
  int
! safe_accent(const char *RESTRICT base, const char *RESTRICT tmplate, size_t len,
! 	    char *buff, char **bp)
  {
    /* base and tmplate must be the same length */
    size_t n;
***************
*** 518,524 ****
  
  
  int
! safe_format(char *buff, char **bp, const char *fmt, ...)
  {
    APPEND_ARGS;
  #ifdef HAS_VSNPRINTF
--- 519,525 ----
  
  
  int
! safe_format(char *buff, char **bp, const char *RESTRICT fmt, ...)
  {
    APPEND_ARGS;
  #ifdef HAS_VSNPRINTF
***************
*** 720,729 ****
  }
  
  char *
! replace_string(const char *old, const char *newbit, const char *string)
  {
    char *result, *r;
!   Size_t len, newlen;
  
    r = result = mush_malloc(BUFFER_LEN, "replace_string.buff");
    if (!result)
--- 721,731 ----
  }
  
  char *
! replace_string(const char *RESTRICT old, const char *RESTRICT newbit,
! 	       const char *RESTRICT string)
  {
    char *result, *r;
!   size_t len, newlen;
  
    r = result = mush_malloc(BUFFER_LEN, "replace_string.buff");
    if (!result)
***************
*** 753,763 ****
   * replace_string() twice
   */
  char *
! replace_string2(const char *old[2], const char *newbits[2], const char *string)
  {
    char *result, *rp;
    char firsts[3] = { '\0', '\0', '\0' };
!   Size_t oldlens[2], newlens[2];
  
    if (!string)
      return NULL;
--- 755,766 ----
   * replace_string() twice
   */
  char *
! replace_string2(const char *old[2], const char *newbits[2],
! 		const char *RESTRICT string)
  {
    char *result, *rp;
    char firsts[3] = { '\0', '\0', '\0' };
!   size_t oldlens[2], newlens[2];
  
    if (!string)
      return NULL;
***************
*** 775,781 ****
    newlens[1] = strlen(newbits[1]);
  
    while (*string) {
!     Size_t skip = strcspn(string, firsts);
      if (skip) {
        safe_strl(string, skip, result, &rp);
        string += skip;
--- 778,784 ----
    newlens[1] = strlen(newbits[1]);
  
    while (*string) {
!     size_t skip = strcspn(string, firsts);
      if (skip) {
        safe_strl(string, skip, result, &rp);
        string += skip;
***************
*** 1238,1244 ****
  {
    ansi_string *data;
    char *y, *current = NULL;
!   Size_t p = 0;
  
    if (!src)
      return NULL;
--- 1241,1247 ----
  {
    ansi_string *data;
    char *y, *current = NULL;
!   size_t p = 0;
  
    if (!src)
      return NULL;
*** 1_7_6.57/src/strdup.c Fri, 05 Jul 2002 12:57:10 -0500 dunemush (pennmush/b/34_strdup.c 1.2 660)
--- 1_7_7.58(w)/src/strdup.c Thu, 12 Dec 2002 21:12:02 -0600 dunemush (pennmush/b/34_strdup.c 1.3 660)
***************
*** 5,21 ****
  #include "config.h"
  
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
- #ifdef I_MEMORY
- #include <memory.h>
- #endif
  #include "conf.h"
  #include "copyrite.h"
  #include "mymalloc.h"
--- 5,12 ----
*** 1_7_6.57/src/set.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.1.1.1.1.11 660)
--- 1_7_7.58(w)/src/set.c Thu, 12 Dec 2002 21:11:59 -0600 dunemush (pennmush/b/38_set.c 1.26.1.5.1.1.2.1.1.1.1.1.1.12 660)
***************
*** 718,724 ****
    } else {
      /* find and replace */
      char *p, *start = s;
!     Size_t vlen;
      int too_long = 0;
  
      /* This will have problems if val is ever "", but do_gedit makes sure
--- 718,724 ----
    } else {
      /* find and replace */
      char *p, *start = s;
!     size_t vlen;
      int too_long = 0;
  
      /* This will have problems if val is ever "", but do_gedit makes sure
*** 1_7_6.57/src/services.c Fri, 05 Jul 2002 12:57:10 -0500 dunemush (pennmush/b/39_services.c 1.13 660)
--- 1_7_7.58(w)/src/services.c Thu, 12 Dec 2002 21:11:59 -0600 dunemush (pennmush/b/39_services.c 1.14 660)
***************
*** 9,17 ****
  
  #include <windows.h>		/* for service and thread routines */
  
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  #include <process.h>
  #include <direct.h>
  
--- 9,15 ----
*** 1_7_6.57/src/player.c Wed, 16 Oct 2002 18:01:52 -0500 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.6 660)
--- 1_7_7.58(w)/src/player.c Thu, 12 Dec 2002 21:11:59 -0600 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4.1.9 660)
***************
*** 6,19 ****
  #ifdef I_UNISTD
  #include <unistd.h>
  #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #ifdef I_SYS_TIME
  #include <sys/time.h>
  #else
--- 6,13 ----
***************
*** 153,162 ****
    /* validate password */
    if (!Guest(player))
      if (!password_check(player, password)) {
- #ifdef CREATION_TIMES
        /* Increment count of login failures */
        ModTime(player)++;
- #endif
        check_lastfailed(player, host);
        return NOTHING;
      }
--- 147,154 ----
***************
*** 380,392 ****
    Toggles(player) |= options.player_toggles;
    if (Suspect_Site(host, player) || Suspect_Site(ip, player))
      Toggles(player) |= PLAYER_SUSPECT;
- #ifdef USE_WARNINGS
    set_initial_warnings(player);
- #endif
- #ifdef CREATION_TIMES
    /* Modtime tracks login failures */
    ModTime(player) = (time_t) 0;
- #endif
    (void) atr_add(player, "XYXXY", mush_crypt(password), GOD, NOTHING);
    giveto(player, START_BONUS);	/* starting bonus */
    (void) atr_add(player, "LAST", s, GOD, NOTHING);
--- 372,380 ----
***************
*** 397,403 ****
    sprintf(temp, "%d", START_QUOTA);
    (void) atr_add(player, "RQUOTA", temp, GOD, NOTHING);
  #endif				/* QUOTA */
- #ifdef FIXED_FLAG
  #ifndef EMPTY_ATTRS
  
    (void) atr_add(player, "ICLOC", " ", GOD,
--- 385,390 ----
***************
*** 407,413 ****
    (void) atr_add(player, "ICLOC", "", GOD,
  		 AF_MDARK | AF_PRIVATE | AF_WIZARD | AF_NOCOPY);
  #endif
- #endif
  #ifdef USE_MAILER
    (void) atr_add(player, "MAILCURF", "0", GOD,
  		 AF_LOCKED | AF_NOPROG | AF_WIZARD);
--- 394,399 ----
*** 1_7_6.57/src/mycrypt.c Wed, 16 Oct 2002 18:01:52 -0500 dunemush (pennmush/b/50_mycrypt.c 1.8 660)
--- 1_7_7.58(w)/src/mycrypt.c Thu, 12 Dec 2002 21:11:59 -0600 dunemush (pennmush/b/50_mycrypt.c 1.9 660)
***************
*** 4,14 ****
  
  #include "config.h"
  #include <stdio.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  #include "conf.h"
  #if (CRYPT_SYSTEM > 0)
  #include "shs.h"
--- 4,10 ----
*** 1_7_6.57/src/memcheck.c Fri, 26 Oct 2001 19:24:45 -0500 dunemush (pennmush/c/1_memcheck.c 1.8.1.3 660)
--- 1_7_7.58(w)/src/memcheck.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/1_memcheck.c 1.8.1.4 660)
***************
*** 2,16 ****
  #include "conf.h"
  #include "copyrite.h"
  
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
- 
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #ifdef MEM_CHECK
  
--- 2,9 ----
***************
*** 40,46 ****
      const char *ref;
  {
    MEM *loop, *newcheck, *prev = NULL;
!   Size_t reflen;
    int cmp;
  
    for (loop = my_check; loop; loop = loop->next) {
--- 33,39 ----
      const char *ref;
  {
    MEM *loop, *newcheck, *prev = NULL;
!   size_t reflen;
    int cmp;
  
    for (loop = my_check; loop; loop = loop->next) {
*** 1_7_6.57/src/match.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.4 660)
--- 1_7_7.58(w)/src/match.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/2_match.c 1.24.1.1.1.5 660)
***************
*** 48,61 ****
  #include "copyrite.h"
  #include "config.h"
  #include <ctype.h>
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
- #ifdef I_STDLIB
  #include <stdlib.h>
- #endif
  #include "conf.h"
  #include "mushdb.h"
  #include "externs.h"
--- 48,55 ----
*** 1_7_6.57/src/malias.c Sun, 08 Dec 2002 22:10:26 -0600 dunemush (pennmush/c/3_malias.c 1.36.1.1 660)
--- 1_7_7.58(w)/src/malias.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/3_malias.c 1.36.1.2 660)
***************
*** 40,50 ****
  #ifdef I_SYS_TYPES
  #include <sys/types.h>
  #endif
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #include "conf.h"
  #include "mushdb.h"
--- 40,46 ----
*** 1_7_6.57/src/look.c Mon, 07 Oct 2002 20:48:39 -0500 dunemush (pennmush/c/4_look.c 1.21.1.2.1.9 660)
--- 1_7_7.58(w)/src/look.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/4_look.c 1.21.1.2.1.19 660)
***************
*** 4,14 ****
  #include "copyrite.h"
  
  /* commands which look at things */
- #ifdef I_STRING
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #include "conf.h"
  #include "mushdb.h"
--- 4,10 ----
***************
*** 36,47 ****
  
  static void look_exits(dbref player, dbref loc, const char *exit_name);
  static void look_contents(dbref player, dbref loc, const char *contents_name);
! static void look_atrs(dbref player, dbref thing, const char *mstr);
  static void look_simple(dbref player, dbref thing);
  static int decompile_helper
    (dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
  static int look_helper
    (dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
  #ifdef CHAT_SYSTEM
  static const char *channel_description(dbref player);
  #endif
--- 32,46 ----
  
  static void look_exits(dbref player, dbref loc, const char *exit_name);
  static void look_contents(dbref player, dbref loc, const char *contents_name);
! static void look_atrs(dbref player, dbref thing, const char *mstr, int all);
  static void look_simple(dbref player, dbref thing);
+ static void look_description(dbref player, dbref thing, char *def);
  static int decompile_helper
    (dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
  static int look_helper
    (dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
+ static int look_helper_veiled
+   (dbref player, dbref thing, char const *pattern, ATTR *atr, void *args);
  #ifdef CHAT_SYSTEM
  static const char *channel_description(dbref player);
  #endif
***************
*** 319,330 ****
  }
  
  static int
! look_helper(player, thing, pattern, atr, args)
!     dbref player;
!     dbref thing;
!     char const *pattern;
!     ATTR *atr;
!     void *args __attribute__ ((__unused__));
  {
    char fbuf[BUFFER_LEN];
    char *r;
--- 318,326 ----
  }
  
  static int
! look_helper_veiled(dbref player, dbref thing __attribute__ ((__unused__)),
! 		   char const *pattern, ATTR *atr, void *args
! 		   __attribute__ ((__unused__)))
  {
    char fbuf[BUFFER_LEN];
    char *r;
***************
*** 332,384 ****
    if (EX_PUBLIC_ATTRIBS &&
        !strcmp(AL_NAME(atr), "DESCRIBE") && !strcmp(pattern, "*"))
      return 0;
- 
-   r = safe_uncompress(AL_STR(atr));
    strcpy(fbuf, privs_to_letters(attr_privs, AL_FLAGS(atr)));
!   if (TINY_ATTRS) {
!     if (ShowAnsi(player)) {
!       if (Owner(AL_CREATOR(atr)) != Owner(thing))
! 	notify_format(player,
! 		      "%s%s(#%d%s):%s%s", ANSI_HILITE, AL_NAME(atr),
! 		      Owner(AL_CREATOR(atr)), fbuf, ANSI_NORMAL, r);
!       else if (*fbuf != '\0')
! 	notify_format(player, "%s%s(%s):%s%s", ANSI_HILITE, AL_NAME(atr),
! 		      fbuf, ANSI_NORMAL, r);
!       else
! 	notify_format(player, "%s%s:%s%s", ANSI_HILITE, AL_NAME(atr),
! 		      ANSI_NORMAL, r);
!     } else {
!       if (Owner(AL_CREATOR(atr)) != Owner(thing))
! 	notify_format(player, "%s(#%d%s):%s", AL_NAME(atr),
! 		      Owner(AL_CREATOR(atr)), fbuf, r);
!       else if (*fbuf != '\0')
! 	notify_format(player, "%s(%s):%s", AL_NAME(atr), fbuf, r);
!       else
! 	notify_format(player, "%s:%s", AL_NAME(atr), r);
!     }
    } else {
!     if (ShowAnsi(player)) {
        notify_format(player,
  		    "%s%s [#%d%s]:%s %s", ANSI_HILITE, AL_NAME(atr),
  		    Owner(AL_CREATOR(atr)), fbuf, ANSI_NORMAL, r);
!     } else {
        notify_format(player, "%s [#%d%s]: %s", AL_NAME(atr),
  		    Owner(AL_CREATOR(atr)), fbuf, r);
!     }
    }
!   free((Malloc_t) r);
  
    return 1;
  }
  
  static void
! look_atrs(player, thing, mstr)
!     dbref player;
!     dbref thing;
!     const char *mstr;
  {
!   if (!atr_iter_get(player, thing, mstr, look_helper, NULL) && mstr)
!     notify(player, T("No matching attributes."));
  }
  
  static void
--- 328,391 ----
    if (EX_PUBLIC_ATTRIBS &&
        !strcmp(AL_NAME(atr), "DESCRIBE") && !strcmp(pattern, "*"))
      return 0;
    strcpy(fbuf, privs_to_letters(attr_privs, AL_FLAGS(atr)));
!   if (AL_FLAGS(atr) & AF_VEILED) {
!     if (ShowAnsi(player))
!       notify_format(player,
! 		    "%s%s [#%d%s]%s is veiled", ANSI_HILITE, AL_NAME(atr),
! 		    Owner(AL_CREATOR(atr)), fbuf, ANSI_NORMAL);
!     else
!       notify_format(player,
! 		    "%s [#%d%s] is veiled", AL_NAME(atr),
! 		    Owner(AL_CREATOR(atr)), fbuf);
    } else {
!     r = safe_uncompress(AL_STR(atr));
!     if (ShowAnsi(player))
        notify_format(player,
  		    "%s%s [#%d%s]:%s %s", ANSI_HILITE, AL_NAME(atr),
  		    Owner(AL_CREATOR(atr)), fbuf, ANSI_NORMAL, r);
!     else
        notify_format(player, "%s [#%d%s]: %s", AL_NAME(atr),
  		    Owner(AL_CREATOR(atr)), fbuf, r);
!     free((Malloc_t) r);
    }
!   return 1;
! }
  
+ static int
+ look_helper(dbref player, dbref thing __attribute__ ((__unused__)),
+ 	    char const *pattern, ATTR *atr, void *args
+ 	    __attribute__ ((__unused__)))
+ {
+   char fbuf[BUFFER_LEN];
+   char *r;
+ 
+   if (EX_PUBLIC_ATTRIBS &&
+       !strcmp(AL_NAME(atr), "DESCRIBE") && !strcmp(pattern, "*"))
+     return 0;
+   strcpy(fbuf, privs_to_letters(attr_privs, AL_FLAGS(atr)));
+   r = safe_uncompress(AL_STR(atr));
+   if (ShowAnsi(player))
+     notify_format(player,
+ 		  "%s%s [#%d%s]:%s %s", ANSI_HILITE, AL_NAME(atr),
+ 		  Owner(AL_CREATOR(atr)), fbuf, ANSI_NORMAL, r);
+   else
+     notify_format(player, "%s [#%d%s]: %s", AL_NAME(atr),
+ 		  Owner(AL_CREATOR(atr)), fbuf, r);
+   free((Malloc_t) r);
    return 1;
  }
  
  static void
! look_atrs(dbref player, dbref thing, const char *mstr, int all)
  {
!   if (all) {
!     if (!atr_iter_get(player, thing, mstr, look_helper, NULL) && mstr)
!       notify(player, T("No matching attributes."));
!   } else {
!     if (!atr_iter_get(player, thing, mstr, look_helper_veiled, NULL) && mstr)
!       notify(player, T("No matching attributes."));
!   }
  }
  
  static void
***************
*** 393,400 ****
    tag_wrap("FONT", "SIZE=+2", unparse_object_myopic(player, thing));
    PEND;
    notify(player, pbuff);
!   did_it(player, thing, "DESCRIBE", T("You see nothing special."),
! 	 "ODESCRIBE", NULL, "ADESCRIBE", NOTHING);
    if (IsExit(thing) && Transparented(thing)) {
      if (Cloudy(thing))
        flag = 3;
--- 400,407 ----
    tag_wrap("FONT", "SIZE=+2", unparse_object_myopic(player, thing));
    PEND;
    notify(player, pbuff);
!   look_description(player, thing, T("You see nothing special."));
!   did_it(player, thing, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE", NOTHING);
    if (IsExit(thing) && Transparented(thing)) {
      if (Cloudy(thing))
        flag = 3;
***************
*** 453,472 ****
  	did_it(player, loc, "IDESCRIBE", NULL, "OIDESCRIBE", NULL,
  	       "AIDESCRIBE", NOTHING);
        else
! 	did_it(player, loc, "DESCRIBE", NULL, NULL, NULL, NULL, NOTHING);
      }
    }
    /* tell him the description */
    else {
      if ((flag == 0) || (flag == 2)) {
!       if ((flag == 0) || !Terse(player))
! 	did_it(player, loc, "DESCRIBE", NULL, "ODESCRIBE", NULL,
  	       "ADESCRIBE", NOTHING);
!       else
  	did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE",
  	       NOTHING);
      } else if (flag != 4)
!       did_it(player, loc, "DESCRIBE", NULL, NULL, NULL, NULL, NOTHING);
    }
    /* tell him the appropriate messages if he has the key */
    if (IsRoom(loc) && ((flag == 0) || (flag == 2))) {
--- 460,480 ----
  	did_it(player, loc, "IDESCRIBE", NULL, "OIDESCRIBE", NULL,
  	       "AIDESCRIBE", NOTHING);
        else
! 	look_description(player, loc, NULL);
      }
    }
    /* tell him the description */
    else {
      if ((flag == 0) || (flag == 2)) {
!       if ((flag == 0) || !Terse(player)) {
! 	look_description(player, loc, NULL);
! 	did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL,
  	       "ADESCRIBE", NOTHING);
!       } else
  	did_it(player, loc, NULL, NULL, "ODESCRIBE", NULL, "ADESCRIBE",
  	       NOTHING);
      } else if (flag != 4)
!       look_description(player, loc, NULL);
    }
    /* tell him the appropriate messages if he has the key */
    if (IsRoom(loc) && ((flag == 0) || (flag == 2))) {
***************
*** 490,495 ****
--- 498,553 ----
    }
  }
  
+ static void
+ look_description(dbref player, dbref thing, char *def)
+ {
+   /* Show thing's description to player, obeying DESCFORMAT if set */
+   ATTR *a, *f;
+   char *preserveq[NUMQ];
+   char *preserves[10];
+   char buff[BUFFER_LEN], fbuff[BUFFER_LEN];
+   char *bp, *fbp, *asave;
+   char const *ap;
+ 
+   if (!GoodObject(player) || !GoodObject(thing))
+     return;
+   save_global_regs("look_desc_save", preserveq);
+   save_global_env("look_desc_save", preserves);
+   a = atr_get(thing, "DESCRIBE");
+   if (a) {
+     /* We have a DESCRIBE, evaluate it into buff */
+     asave = safe_uncompress(a->value);
+     ap = asave;
+     bp = buff;
+     process_expression(buff, &bp, &ap, thing, player, player,
+ 		       PE_DEFAULT, PT_DEFAULT, NULL);
+     *bp = '\0';
+     free((Malloc_t) asave);
+   }
+   f = atr_get(thing, "DESCFORMAT");
+   if (f) {
+     /* We have a DESCFORMAT, evaluate it into fbuff and use it */
+     /* If we have a DESCRIBE, pass the evaluated version as %0 */
+     wenv[0] = a ? buff : NULL;
+     asave = safe_uncompress(f->value);
+     ap = asave;
+     fbp = fbuff;
+     process_expression(fbuff, &fbp, &ap, thing, player, player,
+ 		       PE_DEFAULT, PT_DEFAULT, NULL);
+     *fbp = '\0';
+     free((Malloc_t) asave);
+     notify_by(thing, player, fbuff);
+   } else if (a) {
+     /* DESCRIBE only */
+     notify_by(thing, player, buff);
+   } else if (def) {
+     /* Nothing, go with the default message */
+     notify_by(thing, player, def);
+   }
+   restore_global_regs("look_desc_save", preserveq);
+   restore_global_env("look_desc_save", preserves);
+ }
+ 
  void
  do_look_around(player)
      dbref player;
***************
*** 576,593 ****
    switch (Typeof(thing)) {
    case TYPE_ROOM:
      look_room(player, thing, 0);
-     /* look_atrs(player, thing); */
      break;
    case TYPE_THING:
    case TYPE_PLAYER:
      look_simple(player, thing);
-     /* look_atrs(player,thing); */
      if (!(Opaque(thing)))
        look_contents(player, thing, "Carrying:");
      break;
    default:
      look_simple(player, thing);
-     /* look_atrs(player,thing); */
      break;
    }
  }
--- 634,648 ----
***************
*** 612,621 ****
  #endif
  
  void
! do_examine(player, name, brief)
      dbref player;
      const char *name;
      int brief;
  {
    dbref thing;
    ATTR *a;
--- 667,677 ----
  #endif
  
  void
! do_examine(player, name, brief, all)
      dbref player;
      const char *name;
      int brief;
+     int all;
  {
    dbref thing;
    ATTR *a;
***************
*** 654,660 ****
    }
    /*  only look at some of the attributes */
    if (attrib_name && *attrib_name) {
!     look_atrs(player, thing, attrib_name);
      return;
    }
    if (brief == 2) {
--- 710,716 ----
    }
    /*  only look at some of the attributes */
    if (attrib_name && *attrib_name) {
!     look_atrs(player, thing, attrib_name, all);
      return;
    }
    if (brief == 2) {
***************
*** 715,725 ****
        notify(player, channel_description(thing));
  #endif				/* CHAT_SYSTEM */
  
- #ifdef USE_WARNINGS
      notify_format(player, T("Warnings checked: %s"), unparse_warnings(thing));
- #endif
  
- #ifdef CREATION_TIMES
      tp = (char *) ctime(&CreTime(thing));
      tp[strlen(tp) - 1] = '\0';
      notify_format(player, T("Created: %s"), tp);
--- 771,778 ----
***************
*** 728,737 ****
        tp[strlen(tp) - 1] = '\0';
        notify_format(player, T("Last Modification: %s"), tp);
      }
- #endif
    }
    if ((brief != 1) && (EX_PUBLIC_ATTRIBS || ok)) {
!     look_atrs(player, thing, NULL);
    }
    /* show contents */
    if ((Contents(thing) != NOTHING) &&
--- 781,789 ----
        tp[strlen(tp) - 1] = '\0';
        notify_format(player, T("Last Modification: %s"), tp);
      }
    }
    if ((brief != 1) && (EX_PUBLIC_ATTRIBS || ok)) {
!     look_atrs(player, thing, NULL, all);
    }
    /* show contents */
    if ((Contents(thing) != NOTHING) &&
***************
*** 876,882 ****
    }
    /* determinte range */
    if (argv[1] && *argv[1]) {
!     Size_t offset = 0;
      if (argv[1][0] == '#')
        offset = 1;
      bot = parse_integer(argv[1] + offset);
--- 928,934 ----
    }
    /* determinte range */
    if (argv[1] && *argv[1]) {
!     size_t offset = 0;
      if (argv[1][0] == '#')
        offset = 1;
      bot = parse_integer(argv[1] + offset);
***************
*** 886,892 ****
      }
    }
    if (argv[2] && *argv[2]) {
!     Size_t offset = 0;
      if (argv[2][0] == '#')
        offset = 1;
      top = parse_integer(argv[2] + offset);
--- 938,944 ----
      }
    }
    if (argv[2] && *argv[2]) {
!     size_t offset = 0;
      if (argv[2][0] == '#')
        offset = 1;
      top = parse_integer(argv[2] + offset);
*** 1_7_6.57/src/lock.c Wed, 20 Nov 2002 09:43:49 -0600 dunemush (pennmush/c/6_lock.c 1.17.1.13 660)
--- 1_7_7.58(w)/src/lock.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/6_lock.c 1.17.1.14 660)
***************
*** 181,187 ****
    lock_list *ll;
  
    if (!free_list) {
!     Size_t n;
  
      ll = mush_malloc(sizeof(lock_list) * LOCKS_PER_PAGE, "lock_page");
  
--- 181,187 ----
    lock_list *ll;
  
    if (!free_list) {
!     size_t n;
  
      ll = mush_malloc(sizeof(lock_list) * LOCKS_PER_PAGE, "lock_page");
  
*** 1_7_6.57/src/info_slave.c Sun, 08 Dec 2002 22:35:42 -0600 dunemush (pennmush/c/7_info_slave 1.9.1.4.1.1 660)
--- 1_7_7.58(w)/src/info_slave.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/7_info_slave 1.9.1.4.1.2 660)
***************
*** 8,16 ****
  
  #include <stdio.h>
  #include <stdlib.h>
- #ifdef I_MEMORY
- #include <memory.h>
- #endif
  #ifdef I_SYS_TYPES
  #include <sys/types.h>
  #endif
--- 8,13 ----
*** 1_7_6.57/src/ident.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/8_ident.c 1.19.1.4.1.11 660)
--- 1_7_7.58(w)/src/ident.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/8_ident.c 1.19.1.4.1.12 660)
***************
*** 346,352 ****
     ** Fiddling: Pär Emanuelsson <pell@lysator.liu.se> */
  
  static char *
! xstrtok(char *cp, const char *cs, char *dc)
  {
    static char *bp = 0;
  
--- 346,352 ----
     ** Fiddling: Pär Emanuelsson <pell@lysator.liu.se> */
  
  static char *
! xstrtok(char *RESTRICT cp, const char *RESTRICT cs, char *RESTRICT dc)
  {
    static char *bp = 0;
  
***************
*** 395,401 ****
    char c, *cp, *tmp_charset;
    fd_set rs;
    int res = 0, lp, fp;
!   Size_t pos;
    struct timeval to;
  
  #ifndef WIN32
--- 395,401 ----
    char c, *cp, *tmp_charset;
    fd_set rs;
    int res = 0, lp, fp;
!   size_t pos;
    struct timeval to;
  
  #ifndef WIN32
*** 1_7_6.57/src/gmalloc.c Tue, 15 May 2001 15:59:50 -0500 dunemush (pennmush/c/9_gmalloc.c 1.20 660)
--- 1_7_7.58(w)/src/gmalloc.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/9_gmalloc.c 1.21 660)
***************
*** 36,46 ****
  #include <config.h>
  #endif
  
- #ifdef I_STRING			/* For bzero and bcopy */
  #include <string.h>
- #else
- #include <strings.h>
- #endif
  
  #ifndef memset
  #define memset(s, zero, n)      bzero ((s), (n))
--- 36,42 ----
*** 1_7_6.57/src/game.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.2 660)
--- 1_7_7.58(w)/src/game.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.5.1.3.1.2.1.5 660)
***************
*** 31,39 ****
  #ifdef I_UNISTD
  #include <unistd.h>
  #endif
- #ifdef I_SETJMP
  #include <setjmp.h>
- #endif
  
  #ifdef macintosh
  extern void PMSSetupDatabases(void);
--- 31,37 ----
***************
*** 315,323 ****
    }
  }
  
- #ifdef I_SETJMP
  jmp_buf db_err;
- #endif
  
  static void
  dump_database_internal()
--- 313,319 ----
***************
*** 327,333 ****
    char tmpfl[2048];
    FILE *f = NULL;
  
- #ifdef I_SETJMP
    if (setjmp(db_err)) {
      /* The dump failed. Disk might be full or something went bad with the
         compression slave. Boo! */
--- 323,328 ----
***************
*** 335,341 ****
      flag_broadcast(WIZARD | ROYALTY, 0,
  		   T("GAME: ERROR! Database save failed!"));
    } else {
- #endif
      local_dump_database();
  
  #ifdef ALWAYS_PARANOID
--- 330,335 ----
***************
*** 405,413 ****
      } else
        perror(realtmpfl);
  #endif				/* CHAT_SYSTEM */
- #ifdef I_SETJMP
    }
- #endif
  
  }
  
--- 399,405 ----
***************
*** 429,441 ****
    emergency_shutdown();
  
    /* dump panic file */
- #ifdef I_SETJMP
    if (setjmp(db_err)) {
      /* Dump failed. We're in deep doo-doo */
      do_rawlog(LT_ERR, T("CANNOT DUMP PANIC DB. OOPS."));
      _exit(134);
    } else {
- #endif
  #ifdef macintosh
      if ((f = fopen(panicfile, "wb")) == NULL) {
  #else
--- 421,431 ----
***************
*** 456,464 ****
        do_rawlog(LT_ERR, T("DUMPING: %s (done)"), panicfile);
        _exit(136);
      }
- #ifdef I_SETJMP
    }
- #endif
  }
  
  void
--- 446,452 ----
***************
*** 622,627 ****
--- 610,616 ----
    init_atr_name_tree();
    init_locks();
    init_names();
+   init_pronouns();
  
    memset(&current_state, 0, sizeof current_state);
  
***************
*** 1452,1464 ****
  		T("        Time until next purge: %ld minutes %ld seconds."),
  		(options.purge_counter - mudtime) / 60,
  		(options.purge_counter - mudtime) % 60);
- #ifdef USE_WARNINGS
    if (options.warn_interval)
      notify_format(player,
  		  T("    Time until next @warnings: %ld minutes %ld seconds."),
  		  (options.warn_counter - mudtime) / 60,
  		  (options.warn_counter - mudtime) % 60);
- #endif
  
    /* Mortals, go no further! */
    if (!Wizard(player) || mortal)
--- 1441,1451 ----
***************
*** 1578,1584 ****
      int n;
  
      for (n = 0; fields[n]; n++) {
!       Size_t len = strlen(fields[n]);
        if (strncmp(line, fields[n], len) == 0) {
  	if ((nl = strchr(line, '\n')) != NULL)
  	  *nl = '\0';
--- 1565,1571 ----
      int n;
  
      for (n = 0; fields[n]; n++) {
!       size_t len = strlen(fields[n]);
        if (strncmp(line, fields[n], len) == 0) {
  	if ((nl = strchr(line, '\n')) != NULL)
  	  *nl = '\0';
***************
*** 1689,1698 ****
      f = fopen(filename, "w");
  #endif
    }
- #ifdef I_SETJMP
    if (!f)
      longjmp(db_err, 1);
- #endif
    return f;
  }
  
--- 1676,1683 ----
*** 1_7_6.57/src/funstr.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.6.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.3.1.5.1.3.1.2 660)
--- 1_7_7.58(w)/src/funstr.c Thu, 12 Dec 2002 21:11:58 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.6.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.3.1.5.1.3.1.6 660)
***************
*** 27,68 ****
  
  static int wraplen(char *str, int maxlen);
  void init_tag_hashtab(void);
  
  int
  get_gender(dbref player)
  {
!   /* 0 for error, 1 for neuter, 2 for female, 3 for male, 4 for plural */
  
    ATTR *a;
  
    a = atr_get(player, "SEX");
  
    if (!a)
!     return 1;
  
    switch (*uncompress(a->value)) {
    c