[PENNMUSH-ANNOUNCE] 1.7.7-patch13

dunemush at tala.mede.uic.edu dunemush at tala.mede.uic.edu
Wed Apr 9 15:26:51 CDT 2003


This is patch13 to PennMUSH 1.7.7. After applying this patch, you will
have version 1.7.7p13

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.7-patch13
	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. On the off chance they appear not to be, simply
rm them and re-run make.

Then @shutdown and restart your MUSH.
    - Alan/Javelin

In this patch:

Major changes:
  * Interactions (something like "realms" in mux2). Two functions
    in local.c can now be used to control conditions under which
    objects can see, hear, or match each other. Possibly useful for 
    implementing umbral worlds, etc. Patch by Vadiv at M*U*S*H.
Functions:
  * children(), syntactic sugar for lsearch(all,parent,<dbref>).
    Suggested by Kyieren at M*U*S*H. Patch by BlaZe at M*U*S*H.
  * powers() can now take a second argument to set an @power.
    Suggested by Rob at BtFMUSH.
Minor changes:
  * @config/set can now set null strings. Suggested by Cheetah at M*U*S*H.
  * In restart, set LC_ALL as well as LANG from the given LANG value,
    in case the user's got an LC_ALL in their shell.
  * The channel buffer shifting code has gotten much more efficient.
    Suggested by [TAP].
  * @function/restrict can accept arguments of the form '!<restriction>'
    to clear a restriction. Suggested by Saturn at M3.
  * Most of the asterisk lines between different login message files
    have been removed. Suggested by Vadiv at M*U*S*H most recently.
Fixes:
  * Fixes from 1.7.6p9.
  * Win32 portability fixes. [EEH]
  * deny_silent in access.cnf was ignored in several cases, and no
    longer is. Patch by Cloud at Sci-Fi Chat
  * Help fixes by Cheetah at M*U*S*H and LeeLaLimaLLama at M*U*S*H.


Prereq: 1.7.7p12
rm -rf CHANGES*~ CHANGES*bak
utils/mkvershlp.pl game/txt/hlp CHANGES*
*** 1_7_7.309/Patchlevel Mon, 24 Mar 2003 12:05:49 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.14 600)
--- 1_7_7.365(w)/Patchlevel Wed, 09 Apr 2003 14:16:43 -0500 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.14 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p12
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p13
*** 1_7_7.309/CHANGES.176 Mon, 24 Mar 2003 12:05:49 -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.1.9.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2 600)
--- 1_7_7.365(w)/CHANGES.176 Wed, 09 Apr 2003 13:49:56 -0500 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.1.9.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1 600)
***************
*** 13,18 ****
--- 13,31 ----
  
  ==========================================================================
  
+ Version 1.7.6 patchlevel 9                      April 9, 2003
+ 
+ Fixes:
+    * index-files.pl now produces a sensible warning for duplicate
+      help topics, rather than a perl warning. Suggested by Cheetah at M*U*S*H.
+    * Spellnum cosmetic bug with 'seventeen' fixed. Report by Jules at M*U*S*H.
+    * Another wrap() buglet tracked down and fixed. Probably the one
+      reported by Nymeria at M*U*S*H.
+    * Memory leak in flip() and scramble() fixed.
+    * Configure test for /dev/urandom from 1.7.5 got left out by mistake.
+    * Critical overflow bug in command argument parsing fixed.
+ 
+ 
  Version 1.7.6 patchlevel 8                      March 21, 2003
  
  Minor changes:
*** 1_7_7.309/CHANGES.177 Tue, 25 Mar 2003 16:50:17 -0600 dunemush (pennmush/g/23_CHANGES 1.48.1.42 600)
--- 1_7_7.365(w)/CHANGES.177 Wed, 09 Apr 2003 14:16:57 -0500 dunemush (pennmush/g/23_CHANGES 1.48.1.57 600)
***************
*** 18,23 ****
--- 18,53 ----
  
  ==========================================================================
  
+ Version 1.7.7 patchlevel 13                     April 9, 2003
+ 
+ Major changes:
+   * Interactions (something like "realms" in mux2). Two functions
+     in local.c can now be used to control conditions under which
+     objects can see, hear, or match each other. Possibly useful for 
+     implementing umbral worlds, etc. Patch by Vadiv at M*U*S*H.
+ Functions:
+   * children(), syntactic sugar for lsearch(all,parent,<dbref>).
+     Suggested by Kyieren at M*U*S*H. Patch by BlaZe at M*U*S*H.
+   * powers() can now take a second argument to set an @power.
+     Suggested by Rob at BtFMUSH.
+ Minor changes:
+   * @config/set can now set null strings. Suggested by Cheetah at M*U*S*H.
+   * In restart, set LC_ALL as well as LANG from the given LANG value,
+     in case the user's got an LC_ALL in their shell.
+   * The channel buffer shifting code has gotten much more efficient.
+     Suggested by [TAP].
+   * @function/restrict can accept arguments of the form '!<restriction>'
+     to clear a restriction. Suggested by Saturn at M3.
+   * Most of the asterisk lines between different login message files
+     have been removed. Suggested by Vadiv at M*U*S*H most recently.
+ Fixes:
+   * Fixes from 1.7.6p9.
+   * Win32 portability fixes. [EEH]
+   * deny_silent in access.cnf was ignored in several cases, and no
+     longer is. Patch by Cloud at Sci-Fi Chat
+   * Help fixes by Cheetah at M*U*S*H and LeeLaLimaLLama at M*U*S*H.
+ 
+ 
  Version 1.7.7 patchlevel 12                     March 21, 2003
  
  Commands:
*** 1_7_7.309/game/txt/hlp/pennfunc.hlp Tue, 18 Mar 2003 15:58:51 -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.1.3.1.1.1.1.1.1.1.1.1.2 600)
--- 1_7_7.365(w)/game/txt/hlp/pennfunc.hlp Tue, 08 Apr 2003 17:02:39 -0500 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.1.3.1.1.1.1.1.1.1.1.1.5 600)
***************
*** 108,119 ****
    Dbref functions return a dbref or list of dbrefs related to some value
    on an object.
    
!   con()         entrances()   exit()        followers()   following()   
!   home()        lcon()        lexits()      loc()         locate()      
!   lparent()     lplayers()    lsearch()     lvcon()       lvexits()     
!   lvplayers()   next()        num()         owner()       parent()      
!   pmatch()      rloc()        rnum()        room()        where()       
!   zone()
    
    See also: DBREF
  & Information functions
--- 108,119 ----
    Dbref functions return a dbref or list of dbrefs related to some value
    on an object.
    
!   children()    con()         entrances()   exit()        followers()   
!   following()   home()        lcon()        lexits()      loc()         
!   locate()      lparent()     lplayers()    lsearch()     lvcon()       
!   lvexits()     lvplayers()   next()        num()         owner()       
!   parent()      pmatch()      rloc()        rnum()        room()        
!   where()       zone()
    
    See also: DBREF
  & Information functions
***************
*** 1931,1937 ****
    lpos(<string>, <character>)
  
    This function returns a list of the positions where <character> occupies
!   in <string>, with te first character of the string being 0. Note that
    this differs from the pos() function, but is consistent with other string
    functions like mid() and delete().
  
--- 1931,1937 ----
    lpos(<string>, <character>)
  
    This function returns a list of the positions where <character> occupies
!   in <string>, with the first character of the string being 0. Note that
    this differs from the pos() function, but is consistent with other string
    functions like mid() and delete().
  
***************
*** 1947,1954 ****
--- 1947,1956 ----
  & LSEARCH()
  & SEARCH()
  & LSEARCHR()
+ & CHILDREN()
    lsearch(<player>[, <class>[, <restriction>[, <low>[, <high>]]]])
    lsearchr(<player>[, <class>[, <restriction>[, <low>[, <high>]]]])
+   children(<object>)
   
    This function is similar to the @search command, except it returns
    just a list of dbref numbers. It is computationally expensive, and
***************
*** 1961,1966 ****
--- 1963,1971 ----
  
    The possible <class>es and <restriction>s are the same as those accepted
    by @search. See 'help @search' for information about them.
+ 
+   children() is exactly the same as lsearch(<me|all>,parent,<object>),
+   using "all" for See_All/Search_All players  and "me" for others.
      
    See 'help lsearch2' for more details.
  & LSEARCH2
***************
*** 2572,2580 ****
    Returns <number> to the power of <exponent>.
  & POWERS()
    powers(<object>)
  
-   Returns a space-separate list of powers possessed by the object.
-   If the object does not exist, #-1 will be returned.
  & QUOTA()
    quota(<player>)  
    
--- 2577,2589 ----
    Returns <number> to the power of <exponent>.
  & POWERS()
    powers(<object>)
+   powers(<object>,<power>)
+ 
+   The first form returns a space-separate list of powers possessed by
+   the object.  If the object does not exist, #-1 will be returned.
+ 
+   The second form attempts to set <power> on <object>, as per @power.
  
  & QUOTA()
    quota(<player>)  
    
*** 1_7_7.309/game/txt/hlp/penncmd.hlp Wed, 12 Mar 2003 12:31:02 -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.1.1.1.4 600)
--- 1_7_7.365(w)/game/txt/hlp/penncmd.hlp Sun, 30 Mar 2003 22:07:40 -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.1.1.1.6 600)
***************
*** 2665,2686 ****
    true boolean value will be listed. The token '##' in <restriction>, which
    is a function, is replaced by each dbref sequentially. Classes EPLAYER,
    EROOM, EEXIT, and EOBJECT work like EVAL but are restricted to a single type.
-   
-   See "help @search3" for more.
- & @search3
-   For the class TYPE=PLAYER, and for  PLAYER=<player-name>, anyone may
-   obtain information on any player.  In all other cases, only wizards may
-   obtain information about other players. This is computationally
-   expensive, costing 100 pennies. It is generally faster than @find.
-   
-   Examples:  
-     @search flags=Wc      <-- search for connected wizards.
-     @search type=room     <-- list all rooms owned by me.
-     @search zone=#50      <-- list all objects belong to zone #50.
-     @search Joe eval=1,100,200   <-- list objects from #100-#200 owned by Joe.
-     @search eval=gt(money(##),10)     <-- list all objects owned by me  
-                                           worth more than 10 coins.
- 
  & @select
    @select[/notify] <string>=<expr1>,<action1>[,<exprN>,<actionN>]...[,<default>]
    This is similar to @switch, except it only executes the action
--- 2665,2670 ----
***************
*** 3655,3667 ****
    square brackets, in front of the message, in a fashion similar to
    the way NOSPOOF flags emits.
  
!   Page takes four switches: /list, /blind, /noeval and /port. 
    The /list and /blind switches provide two different ways of handling
    pages to lists of players. With /list, each paged player sees the
    list of who was paged, and the paging player is notified only once.
    With /blind, it's as if each player was individually paged. 
    The default list behavior is set by the blind_page @config option.
    The /noeval switch prevents the MUSH from evaluating the message.
    The /port switch is admin-only, and will page a port descriptor directly, 
    including connections that have not yet logged into a player.
    
--- 3639,3652 ----
    square brackets, in front of the message, in a fashion similar to
    the way NOSPOOF flags emits.
  
!   Page takes five switches: /list, /blind, /noeval, /override, and /port. 
    The /list and /blind switches provide two different ways of handling
    pages to lists of players. With /list, each paged player sees the
    list of who was paged, and the paging player is notified only once.
    With /blind, it's as if each player was individually paged. 
    The default list behavior is set by the blind_page @config option.
    The /noeval switch prevents the MUSH from evaluating the message.
+   The /override switch is admin-only, and overrides pagelocks and HAVEN.
    The /port switch is admin-only, and will page a port descriptor directly, 
    including connections that have not yet logged into a player.
    
*** 1_7_7.309/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
--- 1_7_7.365(w)/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:28 -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.2.2 660)
***************
*** 11,69 ****
   1.6.0p4                   1.6.0p5                   1.6.1p0                  
   1.6.1p1                   1.6.10p0                  1.6.10p1                 
   1.6.10p2                  1.6.10p3                  1.6.10p4                 
!  1.6.10p5                  1.6.10p6                  1.6.10p6                 
!  1.6.2p0                   1.6.2p1                   1.6.3p0                  
!  1.6.3p1                   1.6.3p2                   1.6.3p3                  
!  1.6.3p4                   1.6.3p5                   1.6.3p6                  
!  1.6.3p7                   1.6.4p0                   1.6.4p1                  
!  1.6.4p2                   1.6.5p0                   1.6.5p1                  
  
  For more, see Entries-2
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-2
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  1.6.5p2                   1.6.5p3                   1.6.5p4                  
!  1.6.6p0                   1.6.7p0                   1.6.7p1                  
!  1.6.7p2                   1.6.7p3                   1.6.7p4                  
!  1.6.7p5                   1.6.7p6                   1.6.8p0                  
!  1.6.8p1                   1.6.9p0                   1.6.9p1                  
!  1.6.9p2                   1.6.9p3                   1.6.9p4                  
!  1.6.9p5                   1.6.9p6                   1.6.9p7                  
!  1.6.9p8                   1.6.9p9                   1.7.0p0                  
!  1.7.0p1                   1.7.0p2                   1.7.0p3                  
!  1.7.0p4                   1.7.0p5                   1.7.0p6                  
!  1.7.0p7                   1.7.0p8                   1.7.0p9                  
!  1.7.0p10                  1.7.0p11                  1.7.0p11                 
!  1.7.1p0                   1.7.1p1                   1.7.1p2                  
!  1.7.1p3                   1.7.2p0                   1.7.2p1                  
!  1.7.2p2                   1.7.2p3                   1.7.2p4                  
!  1.7.2p5                   1.7.2p6                   1.7.2p7                  
  
  For more, see Entries-3
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-3
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  1.7.2p8                   1.7.2p9                   1.7.2p10                 
!  1.7.2p11                  1.7.2p12                  1.7.2p13                 
!  1.7.2p14                  1.7.2p15                  1.7.2p16                 
!  1.7.2p17                  1.7.2p18                  1.7.2p19                 
!  1.7.2p20                  1.7.2p21                  1.7.2p22                 
!  1.7.2p23                  1.7.2p24                  1.7.2p25                 
!  1.7.2p26                  1.7.2p27                  1.7.2p28                 
!  1.7.2p29                  1.7.2p30                  1.7.2p31                 
!  1.7.2p32                  1.7.2p33                  1.7.2p34                 
!  1.7.2p35                  1.7.3p0                   1.7.3p1                  
!  1.7.3p2                   1.7.3p3                   1.7.3p4                  
!  1.7.3p5                   1.7.3p6                   1.7.3p7                  
!  1.7.3p8                   1.7.3p9                   1.7.3p10                 
!  1.7.3p11                  1.7.3p12                  1.7.3p13                 
!  1.7.3p14                  1.7.4p0                   1.7.4p1                  
!  1.7.4p2                   1.7.4p3                   1.7.4p4                  
  
  For more, see Entries-4
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-4
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   1.7.4p5                   1.7.4p6                   1.7.4p7                  
   1.7.4p8                   1.7.4p9                   1.7.4p10                 
   1.7.4p11                  1.7.4p12                  1.7.4p13                 
--- 11,70 ----
   1.6.0p4                   1.6.0p5                   1.6.1p0                  
   1.6.1p1                   1.6.10p0                  1.6.10p1                 
   1.6.10p2                  1.6.10p3                  1.6.10p4                 
!  1.6.10p5                  1.6.10p6                  1.6.2p0                  
!  1.6.2p1                   1.6.3p0                   1.6.3p1                  
!  1.6.3p2                   1.6.3p3                   1.6.3p4                  
!  1.6.3p5                   1.6.3p6                   1.6.3p7                  
!  1.6.4p0                   1.6.4p1                   1.6.4p2                  
!  1.6.5p0                   1.6.5p1                   1.6.5p2                  
  
  For more, see Entries-2
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-2
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  1.6.5p3                   1.6.5p4                   1.6.6p0                  
!  1.6.7p0                   1.6.7p1                   1.6.7p2                  
!  1.6.7p3                   1.6.7p4                   1.6.7p5                  
!  1.6.7p6                   1.6.8p0                   1.6.8p1                  
!  1.6.9p0                   1.6.9p1                   1.6.9p2                  
!  1.6.9p3                   1.6.9p4                   1.6.9p5                  
!  1.6.9p6                   1.6.9p7                   1.6.9p8                  
!  1.6.9p9                   1.7.0p0                   1.7.0p1                  
!  1.7.0p2                   1.7.0p3                   1.7.0p4                  
!  1.7.0p5                   1.7.0p6                   1.7.0p7                  
!  1.7.0p8                   1.7.0p9                   1.7.0p10                 
!  1.7.0p11                  1.7.1p0                   1.7.1p1                  
!  1.7.1p2                   1.7.1p3                   1.7.2p0                  
!  1.7.2p1                   1.7.2p2                   1.7.2p3                  
!  1.7.2p4                   1.7.2p5                   1.7.2p6                  
!  1.7.2p7                   1.7.2p8                   1.7.2p9                  
  
  For more, see Entries-3
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-3
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
!  1.7.2p10                  1.7.2p11                  1.7.2p12                 
!  1.7.2p13                  1.7.2p14                  1.7.2p15                 
!  1.7.2p16                  1.7.2p17                  1.7.2p18                 
!  1.7.2p19                  1.7.2p20                  1.7.2p21                 
!  1.7.2p22                  1.7.2p23                  1.7.2p24                 
!  1.7.2p25                  1.7.2p26                  1.7.2p27                 
!  1.7.2p28                  1.7.2p29                  1.7.2p30                 
!  1.7.2p31                  1.7.2p32                  1.7.2p33                 
!  1.7.2p34                  1.7.2p35                  1.7.3p0                  
!  1.7.3p1                   1.7.3p2                   1.7.3p3                  
!  1.7.3p4                   1.7.3p5                   1.7.3p6                  
!  1.7.3p7                   1.7.3p8                   1.7.3p9                  
!  1.7.3p10                  1.7.3p11                  1.7.3p12                 
!  1.7.3p13                  1.7.3p14                  1.7.4p0                  
!  1.7.4p1                   1.7.4p2                   1.7.4p3                  
!  1.7.4p4                   1.7.4p5                   1.7.4p6                  
  
  For more, see Entries-4
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-4
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   1.7.4p5                   1.7.4p6                   1.7.4p7                  
   1.7.4p8                   1.7.4p9                   1.7.4p10                 
   1.7.4p11                  1.7.4p12                  1.7.4p13                 
***************
*** 80,90 ****
--- 81,110 ----
   1.7.7p3                   1.7.7p4                   1.7.7p5                  
   1.7.7p6                   :                         ;                        
   @-attributes              @-building                @-general                
+ =======
+  1.7.4p7                   1.7.4p8                   1.7.4p9                  
+  1.7.4p10                  1.7.4p11                  1.7.4p12                 
+  1.7.4p13                  1.7.4p14                  1.7.4p15                 
+  1.7.4p16                  1.7.4p17                  1.7.4p18                 
+  1.7.4p19                  1.7.4p20                  1.7.5p0                  
+  1.7.5p1                   1.7.5p2                   1.7.5p3                  
+  1.7.5p4                   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.6p2                  
+  1.7.6p3                   1.7.6p4                   1.7.6p5                  
+  1.7.6p6                   1.7.6p7                   1.7.6p8                  
+  :                         ;                         @-attributes             
+  @-building                @-general                 @-wizard                 
+  @@                        @@()                      @aahear                  
+  @aclone                   @aconnect                 @adeath                  
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-5
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @-wizard                  @@                        @@()                     
   @aahear                   @aclone                   @aconnect                
   @adeath                   @adescribe                @adestroy                
***************
*** 101,111 ****
--- 121,150 ----
   @break                    @cemit                    @channel                 
   @channel2                 @channel3                 @channel4                
   @channel5                 @charges                  @chat                    
+ =======
+  @adescribe                @adestroy                 @adisconnect             
+  @adrop                    @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                  
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-6
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @chown                    @chownall                 @chzone                  
   @chzone2                  @chzoneall                @clock                   
   @clock2                   @clone                    @command                 
***************
*** 122,132 ****
--- 161,190 ----
   @dig                      @dig2                     @disable                 
   @doing                    @dolist                   @drain                   
   @drop                     @dump                     @ealias                  
+ =======
+  @clone                    @command                  @comment                 
+  @config                   @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               @describe                 @destroy                 
+  @destroy2                 @dig                      @dig2                    
+  @disable                  @doing                    @dolist                  
+  @drain                    @drop                     @dump                    
+  @ealias                   @edit                     @efail                   
+  @elock                    @emit                     @enable                  
+  @enter                    @entrances                @eunlock                 
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-7
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @edit                     @efail                    @elock                   
   @emit                     @enable                   @enter                   
   @entrances                @eunlock                  @exitformat              
***************
*** 143,153 ****
--- 201,230 ----
   @leave                    @lemit                    @lfail                   
   @link                     @list                     @listen                  
   @listen2                  @listmotd                 @lock                    
+ =======
+  @exitformat               @failure                  @filter                  
+  @filter2                  @find                     @firstexit               
+  @follow                   @force                    @force2                  
+  @forwardlist              @function                 @function2               
+  @function3                @function4                @gedit                   
+  @give                     @grep2                    @grep                    
+  @halt                     @haven                    @hide                    
+  @hook                     @hook2                    @idescribe               
+  @idle                     @infilter                 @inprefix                
+  @kick                     @lalias                   @leave                   
+  @lemit                    @lfail                    @link                    
+  @list                     @listen                   @listen2                 
+  @listmotd                 @lock                     @lock2                   
+  @lock3                    @lock4                    @lock5                   
+  @lock6                    @lock7                    @lock8                   
+  @lock9                    @log                      @logwipe                 
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-8
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @lock2                    @lock3                    @lock4                   
   @lock5                    @lock6                    @lock7                   
   @lock8                    @lock9                    @log                     
***************
*** 164,174 ****
--- 241,270 ----
   @oleave                   @olfail                   @omove                   
   @opayment                 @open                     @oreceive                
   @osuccess                 @otport                   @oufail                  
+ =======
+  @lset                     @map2                     @mail                    
+  @malias                   @malias2                  @malias3                 
+  @malias4                  @malias5                  @map                     
+  @motd                     @move                     @mvattr                  
+  @name                     @nameaccent               @nameformat              
+  @newpassword              @notify                   @nspemit                 
+  @nuke                     @odeath                   @odescribe               
+  @odrop                    @oefail                   @oemit                   
+  @oenter                   @ofailure                 @ofollow                 
+  @ogive                    @oidescribe               @oleave                  
+  @olfail                   @omove                    @opayment                
+  @open                     @oreceive                 @osuccess                
+  @otport                   @oufail                   @ounfollow               
+  @ouse                     @oxenter                  @oxleave                 
+  @oxmove                   @oxtport                  @ozenter                 
+  @ozleave                  @parent                   @password                
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-9
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @ounfollow                @ouse                     @oxenter                 
   @oxleave                  @oxmove                   @oxtport                 
   @ozenter                  @ozleave                  @parent                  
***************
*** 185,195 ****
--- 281,310 ----
   @sitelock3                @squota                   @startup                 
   @stats                    @success                  @sweep                   
   @switch                   @switch2                  @teleport                
+ =======
+  @payment                  @pcreate                  @pemit                   
+  @pemit2                   @poll                     @poor                    
+  @power                    @prefix                   @ps                      
+  @purge                    @quota                    @readcache               
+  @receive                  @recycle                  @rejectmotd              
+  @remit                    @restart                  @runout                  
+  @rwall                    @rwallemit                @rwallpose               
+  @scan                     @search                   @search2                 
+  @search3                  @select                   @set                     
+  @sex                      @shutdown                 @sitelock                
+  @sitelock2                @sitelock3                @squota                  
+  @startup                  @stats                    @success                 
+  @sweep                    @switch                   @switch2                 
+  @teleport                 @tport                    @trigger                 
+  @trigger2                 @ufail                    @ulock                   
+  @undestroy                @unfollow                 @unlink                  
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-10
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @tport                    @trigger                  @trigger2                
   @ufail                    @ulock                    @undestroy               
   @unfollow                 @unlink                   @unlock                  
***************
*** 198,204 ****
--- 313,328 ----
   @verb2                    @verb3                    @verb4                   
   @version                  @vrml_url                 @wait                    
   @wait2                    @wall                     @warnings                
+ =======
+  @unlock                   @unrecycle                @uptime                  
+  @uptime2                  @use                      @uunlock                 
+  @verb                     @verb2                    @verb3                   
+  @verb4                    @version                  @vrml_url                
+  @wait                     @wait2                    @wall                    
+  @wallemit                 @wallpose                 @warnings                
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   @warnings2                @warnings3                @wcheck                  
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   @whereis                  @wipe                     @wizmotd                 
   @wizwall                  @zemit                    @zenter                  
   @zleave                   \                         ^                        
***************
*** 206,216 ****
--- 330,352 ----
   accent2                   accent3                   accent4                  
   acos()                    action lists              action2                  
   add()                     after()                   ahelp                    
+ =======
+  @whereis                  @wipe                     @wizemit                 
+  @wizmotd                  @wizpose                  @wizwall                 
+  @zemit                    @zenter                   @zleave                  
+  \                         ^                         abode                    
+  abs()                     accent()                  accent2                  
+  accent3                   accent4                   acos()                   
+  action lists              action2                   add()                    
+  after()                   ahelp                     alphamax()               
+  alphamin()                and()                     andflags()               
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-11
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   alphamax()                alphamin()                and()                    
   andflags()                andlflags()               anews                    
   ansi                      ansi()                    aposs()                  
***************
*** 227,237 ****
--- 363,392 ----
   brackets()                brief                     builder                  
   bxor()                    cand()                    capstr()                 
   case()                    caseall()                 cat()                    
+ =======
+  anews                     ansi                      ansi()                   
+  aposs()                   art()                     asin()                   
+  atan()                    atan2()                   atrlock()                
+  attrcnt()                 attrib-ownership          attribute flags          
+  attribute functions       attribute list            attributes               
+  attributes list           attributes2               attributes3              
+  attributes4               audible                   audible2                 
+  band()                    beep()                    before()                 
+  being killed              bitwise functions         bnand()                  
+  bnot()                    boolean functions         boolean values           
+  boolean2                  boolean3                  bor()                    
+  bound()                   brackets()                brief                    
+  builder                   bxor()                    cand()                   
+  capstr()                  case()                    caseall()                
+  cat()                     cd                        ceil()                   
+  cemit()                   center()                  cflags()                 
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-12
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   cd                        ceil()                    cemit()                  
   center()                  cflags()                  ch                       
   changes                   channel functions         channel-list             
***************
*** 248,258 ****
--- 403,432 ----
   credits                   ctime()                   ctitle()                 
   ctu()                     cv                        cwho()                   
   dark                      dark2                     database                 
+ =======
+  ch                        changes                   channel functions        
+  channel-list              channels()                chat                     
+  checkpass()               chown_ok                  chr()                    
+  clients                   clock()                   clone()                  
+  cloudy                    code                      color                    
+  commands                  communication functions   comp()                   
+  comsys                    con()                     config()                 
+  conn()                    connected                 control                  
+  controls()                convsecs()                convtime()               
+  convutcsecs()             copyright                 copyrite                 
+  cor()                     cos()                     costs                    
+  create()                  credits                   ctime()                  
+  ctitle()                  ctu()                     cv                       
+  cwho()                    dark                      dark2                    
+  database                  dbref #                   dbref functions          
+  dbref number              dbref2                    dbrefs                   
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-13
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   dbref #                   dbref functions           dbref number             
   dbref2                    dbrefs                    debug                    
   debug2                    dec()                     decrypt()                
***************
*** 269,279 ****
--- 443,472 ----
   escape()                  etimefmt()                etimefmt2                
   eval()                    evaluation order          evaluation2              
   events                    examine                   executor                 
+ =======
+  debug                     debug2                    dec()                    
+  decrypt()                 default()                 delete()                 
+  desert                    destroy_ok                die()                    
+  dig()                     dismiss                   dist2d()                 
+  dist3d()                  div()                     doing                    
+  doing()                   drop                      drop-tos                 
+  dynhelp()                 e()                       edefault()               
+  edit()                    element()                 elements()               
+  elist()                   elock()                   emit()                   
+  enactor                   encrypt()                 endtag()                 
+  enter                     enter_ok                  entrances()              
+  eq()                      escape()                  etimefmt()               
+  etimefmt2                 eval()                    evaluation order         
+  evaluation2               events                    examine                  
+  executor                  exit()                    exits                    
+  exits2                    exp()                     extract()                
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-14
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   exit()                    exits                     exits2                   
   exp()                     extract()                 failure                  
   fdiv()                    filter()                  filterbool()             
***************
*** 281,286 ****
--- 474,486 ----
   flag list                 flag permissions          flags                    
   flags list                flags()                   flags2                   
   flip()                    floating                  floor()                  
+ =======
+  failure                   fdiv()                    filter()                 
+  filterbool()              findable()                first()                  
+  fixed                     flag list                 flags                    
+  flags list                flags()                   flags2                   
+  flip()                    floating                  floor()                  
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   floordiv()                fmod()                    fold()                   
   fold2                     folderstats()             follow                   
   followers()               following()               foreach()                
***************
*** 290,305 ****
--- 490,516 ----
   get()                     get_eval()                give                     
   global commands           globals                   go                       
   going                     goto                      grab()                   
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
+ =======
+  graball()                 grep()                    grepi()                  
+  gt()                      gte()                     halt                     
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-15
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   graball()                 grep()                    grepi()                  
   gt()                      gte()                     halt                     
   hasattr()                 hasattrp()                hasattrpval()            
   hasattrval()              hasflag()                 haspower()               
   hastype()                 haven                     height()                 
+ =======
+  hasattr()                 hasattrp()                hasattrpval()            
+  hasattrval()              hasflag()                 haspower()               
+  hastype()                 haven                     help                     
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   here                      hidden()                  home                     
   home()                    homes                     html                     
   html functions            html()                    i18n                     
***************
*** 311,328 ****
--- 522,550 ----
   interiors2                internationalization      inum()                   
   inventory                 isdaylight()              isdbref()                
   isint()                   isnum()                   isword()                 
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
+ =======
+  itemize()                 items()                   iter()                   
+  iter2                     itext()                   judge                    
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-16
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   itemize()                 items()                   iter()                   
   iter2                     itext()                   judge                    
   jump_ok                   jury_ok                   kill                     
   last & lastlogout         last()                    lastip                   
+ =======
+  jump_ok                   jury_ok                   kill                     
+  last & lastlogout         last()                    lastip                   
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   lastsite                  lattr()                   lcon()                   
   lcstr()                   ldelete()                 leave                    
   left()                    lemit()                   lexits()                 
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   lflags()                  license                   light                    
   link()                    link_ok                   linking                  
   list functions            list()                    listen_parent            
***************
*** 332,342 ****
--- 554,578 ----
   loc()                     locale                    localize()               
   locate()                  locate2                   lock list                
   lock types                lock types2               lock()                   
+ =======
+  license                   light                     link()                   
+  link_ok                   linking                   list functions           
+  list()                    listen_parent             listening                
+  listening2                listening3                lists                    
+  lit()                     ljust()                   lmath()                  
+  ln()                      lnum()                    loc()                    
+  locale                    localize()                locate()                 
+  locate2                   lock list                 lock types               
+  lock types2               lock()                    locking                  
+  locklist                  locks                     locktypes                
+  locktypes2                log()                     logout                   
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-17
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   locking                   locklist                  locks                    
   locktypes                 locktypes2                log()                    
   logout                    look                      look2                    
***************
*** 353,363 ****
--- 589,618 ----
   mailtime()                map()                     master room              
   match()                   matchall()                matching                 
   math functions            max()                     me                       
+ =======
+  look                      look2                     looping                  
+  lparent()                 lplayers()                lsearch()                
+  lsearch2                  lsearchr()                lstats()                 
+  lt()                      lte()                     lvcon()                  
+  lvexits()                 lvplayers()               lwho()                   
+  macros                    macros2                   mail                     
+  mail functions            mail()                    mail-admin               
+  mail-folders              mail-other                mail-reading             
+  mail-sending              maildstats()              mailfrom()               
+  mailfstats()              mailstats()               mailstatus()             
+  mailsubject()             mailtime()                map()                    
+  master room               match()                   matchall()               
+  matching                  math functions            max()                    
+  me                        mean()                    median()                 
+  member()                  merge()                   mid()                    
+  min()                     mix()                     mix2                     
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-18
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   mean()                    median()                  member()                 
   merge()                   mid()                     min()                    
   mix()                     mix2                      mod()                    
***************
*** 374,389 ****
--- 629,667 ----
   no_tel                    no_warn                   noaccents                
   noleave                   non-standard attributes   nor()                    
   nospoof                   not()                     nowarn                   
+ =======
+  mod()                     modulo()                  modulus()                
+  money                     money()                   monitor                  
+  mortal                    move                      mtime()                  
+  mudname()                 mul()                     munge()                  
+  munge2                    munge3                    mushcode                 
+  mushcode2                 mwho()                    myopic                   
+  name()                    nand()                    nattr()                  
+  nearby()                  neq()                     new locks                
+  newbie                    newbie2                   newbie3                  
+  news                      next()                    no_command               
+  no_leave                  no_tel                    no_warn                  
+  noaccents                 noleave                   non-standard attributes  
+  nor()                     nospoof                   not()                    
+  nowarn                    nspemit()                 null()                   
+  num()                     obj()                     object parents           
+  objeval()                 objmem()                  oemit()                  
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-19
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   nspemit()                 null()                    num()                    
   obj()                     object parents            objeval()                
   objmem()                  oemit()                   on-vacation              
   opaque                    open()                    or()                     
   ord()                     orflags()                 orlflags()               
+ =======
+  on-vacation               opaque                    open()                   
+  or()                      ord()                     orflags()                
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   owner()                   page                      page2                    
   paranoid                  parent                    parent()                 
   parents                   parents2                  parents3                 
***************
*** 395,410 ****
--- 673,699 ----
   poss()                    power()                   powers list              
   powers list2              powers()                  powers2                  
   pueblo                    pueblo features           pueblo()                 
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
+ =======
+  puppet                    puppets                   puppets2                 
+  queue                     quiet                     quit                     
+  quota()                   r()                       r-function               
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-20
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   puppet                    puppets                   puppets2                 
   queue                     quiet                     quit                     
   quota()                   r()                       r-function               
   rand()                    read                      regedit()                
   regeditall()              regeditalli()             regediti()               
+ =======
+  rand()                    read                      regedit()                
+  regeditall()              regeditalli()             regediti()               
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   regexp                    regexp classes            regexp classes2          
   regexp examples           regexp syntax             regexp syntax2           
   regexp syntax3            regexp syntax4            regexp syntax5           
***************
*** 416,432 ****
--- 705,733 ----
   remainder()               remit()                   remove()                 
   repeat()                  replace()                 rest()                   
   restarts()                restarttime()             restrict                 
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
+ =======
+  restrict2                 restrict3                 reverse()                
+  revwords()                right()                   rjust()                  
+  rloc()                    rnum()                    room                     
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-21
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   restrict2                 restrict3                 reverse()                
   revwords()                right()                   rjust()                  
   rloc()                    rnum()                    room                     
   room()                    round()                   royalty                  
   rquota                    rules                     s()                      
+ =======
+  room()                    round()                   royalty                  
+  rquota                    rules                     s()                      
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
   s-function                safe                      say                      
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   score                     scramble()                screenheight             
   screenwidth               search()                  search2                  
   secs()                    secure()                  semaphores               
***************
*** 437,447 ****
--- 738,764 ----
   setq3                     setr()                    setting-attributes       
   setunion()                sex                       sha1()                   
   shared                    shared players            shared players2          
+ =======
+  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                 
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-22
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   shl()                     shr()                     shuffle()                
   sign()                    sin()                     slay                     
   softcode                  sort()                    sortby()                 
***************
*** 458,468 ****
--- 775,804 ----
   substitutions4            success                   suspect                  
   switch wildcards          switch()                  switch2                  
   switchall()               switches                  t()                      
+ =======
+  soundlike()               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()               
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-23
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   table()                   tag()                     tagwrap()                
   take                      tan()                     teach                    
   tel()                     tel_ok                    temple                   
***************
*** 479,489 ****
--- 815,844 ----
   unfollow                  uninspected               unregistered             
   use                       user-defined commands     user-defined2            
   utctime()                 utility functions         v()                      
+ =======
+  think                     time functions            time()                   
+  timefmt()                 timefmt2                  timestring()             
+  topics                    topics2                   translation              
+  transparent               transparent2              trim()                   
+  trunc()                   trust                     trust2                   
+  type()                    types of objects          types2                   
+  u()                       u2                        ucstr()                  
+  udefault()                ufun()                    ufun2                    
+  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                   
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  For more, see Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  & Entries-24
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ <<<<<<< 1_7_7.312(w)/game/txt/hlp/index.hlp Tue, 14 Jan 2003 23:22:31 -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.6 660)
   v-function                vadd()                    val()                    
   valid()                   vdim()                    vdot()                   
   verbose                   verbs                     version()                
***************
*** 506,511 ****
--- 861,881 ----
  & Entries-25
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   zones2                                                                       
+ =======
+  vmag()                    vmax()                    vmin()                   
+  vmul()                    vrml                      vsub()                   
+  vunit()                   warnings                  warnings list            
+  warnings list2            where()                   whisper                  
+  whisper2                  who                       wildcards                
+  wipe()                    with                      wizard                   
+  wordpos()                 words()                   wrap()                   
+  xget()                    xor()                     z_tel                    
+  zemit()                   zfun()                    zmo                      
+  zmp                       zmr                       zone                     
+  zone master objects       zone master rooms         zone masters             
+  zone objects              zone()                    zones                    
+  zones2                                                                       
+ >>>>>>> 1_7_6.134/game/txt/hlp/index.hlp Wed, 26 Mar 2003 09:25:17 -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.2.1 660)
  
  & &Entries
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*** 1_7_7.309/game/txt/index-files.pl Tue, 08 Oct 2002 10:34:26 -0500 dunemush (pennmush/28_index-file 1.7 600)
--- 1_7_7.365(w)/game/txt/index-files.pl Wed, 26 Mar 2003 09:19:00 -0600 dunemush (pennmush/28_index-file 1.8 600)
***************
*** 127,132 ****
    my($lasta, $lastb);
    ($firsta, $lasta) = ($1,$2) if $a =~ /(.+)p(\d+)/o;
    ($firstb, $lastb) = ($1,$2) if $b =~ /(.+)p(\d+)/o;
!   $firsta cmp $firstb || $lasta <=> $lastb;
  }
  
--- 127,138 ----
    my($lasta, $lastb);
    ($firsta, $lasta) = ($1,$2) if $a =~ /(.+)p(\d+)/o;
    ($firstb, $lastb) = ($1,$2) if $b =~ /(.+)p(\d+)/o;
!   my $res = $firsta cmp $firstb;
!   return $res if $res;
!   if (!defined($lasta)) {
!     warn "Possible duplicate help topic: $a\n";
!     return $res;
!   }
!   return $lasta <=> $lastb;
  }
  
*** 1_7_7.309/game/restart Sat, 25 Jan 2003 20:41:21 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.3 700)
--- 1_7_7.365(w)/game/restart Thu, 27 Mar 2003 11:44:51 -0600 dunemush (pennmush/39_restart 1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.2.4 700)
***************
*** 127,130 ****
  DATEMSK="${GAMEDIR}/getdate.template"
  export DATEMSK
  
! LANG=$LANG ./netmush $CONF_FILE $LOG &
--- 127,130 ----
  DATEMSK="${GAMEDIR}/getdate.template"
  export DATEMSK
  
! LC_ALL=$LANG LANG=$LANG ./netmush $CONF_FILE $LOG &
*** 1_7_7.309/config_h.SH Sun, 02 Feb 2003 10:43:44 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.7 660)
--- 1_7_7.365(w)/config_h.SH Tue, 08 Apr 2003 22:03:04 -0500 dunemush (pennmush/b/17_config_h.S 1.17.1.2.1.1.1.8 660)
***************
*** 730,735 ****
--- 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'
*** 1_7_7.309/src/shs.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/18_shs.c 1.7 660)
--- 1_7_7.365(w)/src/shs.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/18_shs.c 1.8 660)
***************
*** 1,32 ****
! /* ------------------------ SHS.C ----------------------------- */
! 
! /* Secure Hash Algorithm */
! 
! /* 
! 
!    Written 2 September 1992. Peter C. Gutmann.
!    This implementation placed in the public domain.
! 
!    Comments to pgutl at cs.aukuni.ac.nz  
! 
!    Keyed in from: "Applied Cryptography by Bruce Schneier"
! 
!    by Nick Gammon.
! 
! 
!    Note: include files below are slightly different from the original source
!    in order to confirm to the MUSH include files standards.
! 
   */
  
- 
  #include "copyrite.h"
  #include "config.h"
- 
  #include <string.h>
- 
  #include "shs.h"
- 
  #include "confmagic.h"
  
  /* The SHS f() functions */
--- 1,25 ----
! /**
!  * \file shs.c
!  *
!  * \brief The secure hash algorithm.
!  *
!  * Written 2 September 1992. Peter C. Gutmann.
!  * This implementation placed in the public domain.
!  *
!  * Comments to pgutl at cs.aukuni.ac.nz  
!  *
!  * Keyed in from: "Applied Cryptography by Bruce Schneier"
!  *
!  * by Nick Gammon.
!  *
!  * Note: include files below are slightly different from the original source
!  * in order to confirm to the MUSH include files standards.
   */
  
  #include "copyrite.h"
  #include "config.h"
  #include <string.h>
  #include "shs.h"
  #include "confmagic.h"
  
  /* The SHS f() functions */
***************
*** 112,123 ****
  
  /* Initialise the SHS values */
  
  void
! shsInit(shsInfo)
!     SHS_INFO *shsInfo;
  {
    /* Set the h-vars to their initial values */
- 
    shsInfo->digest[0] = h0init;
    shsInfo->digest[1] = h1init;
    shsInfo->digest[2] = h2init;
--- 105,117 ----
  
  /* Initialise the SHS values */
  
+ /** Initialize SHS values. 
+  * \param shsInfo pointer to shs data structure.
+  */
  void
! shsInit(SHS_INFO *shsInfo)
  {
    /* Set the h-vars to their initial values */
    shsInfo->digest[0] = h0init;
    shsInfo->digest[1] = h1init;
    shsInfo->digest[2] = h2init;
***************
*** 125,143 ****
    shsInfo->digest[4] = h4init;
  
    /* Initialise bit count */
- 
    shsInfo->countLo = shsInfo->countHi = 0;
  
! }				/* end of shsInit */
  
- /* Perform the SHS transformation. Note that this code, like MD5, seems to break */
- /* some optimizing compilers - it may be necessary to split it into sections, e.g. */
- /* based on the four subrounds */
  
! static void shsTransform(SHS_INFO * shsInfo);
  
  static void
! shsTransform(SHS_INFO * shsInfo)
  {
    LONG W[80], temp;
    int i;
--- 119,137 ----
    shsInfo->digest[4] = h4init;
  
    /* Initialise bit count */
    shsInfo->countLo = shsInfo->countHi = 0;
  
! }
  
  
! static void shsTransform(SHS_INFO *shsInfo);
  
+ /* Perform the SHS transformation. Note that this code, like MD5, seems to
+  * break some optimizing compilers - it may be necessary to split it into 
+  * sections, e.g. based on the four subrounds.
+  */
  static void
! shsTransform(SHS_INFO *shsInfo)
  {
    LONG W[80], temp;
    int i;
***************
*** 331,342 ****
  }				/* end of byteReverse */
  
  
! /* Update SHS for a block of data. This code assumes that the buffer size is a multiple */
! /* of SHS_BLOCKSIZE bytes long, which makes the code a lot more efficient since it does */
! /* away with the need to handle partial blocks between calls to shsUpdate () */
! 
  void
! shsUpdate(SHS_INFO * shsInfo, const BYTE * buffer, int count)
  {
    /* Update bitcount */
  
--- 325,340 ----
  }				/* end of byteReverse */
  
  
! /** Update SHS for a block of data. This code assumes that the buffer
!  * size is a multiple of SHS_BLOCKSIZE bytes long, which makes the
!  * code a lot more efficient since it does away with the need to
!  * handle partial blocks between calls to shsUpdate() 
!  * \param shsInfo pointer to shs data.
!  * \param buffer block of data to update the hash with.
!  * \param count size of buffer in bytes.
!  */
  void
! shsUpdate(SHS_INFO *shsInfo, const BYTE * buffer, int count)
  {
    /* Update bitcount */
  
***************
*** 361,370 ****
  
    memcpy(shsInfo->data, buffer, count);
  
! }				/* end of shsUpdate */
  
  void
! shsFinal(SHS_INFO * shsInfo)
  {
    int count;
    LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi;
--- 359,371 ----
  
    memcpy(shsInfo->data, buffer, count);
  
! }
  
+ /** Finalize the SHS hash.
+  * \param shsInfo pointer to shs data.
+  */
  void
! shsFinal(SHS_INFO *shsInfo)
  {
    int count;
    LONG lowBitcount = shsInfo->countLo, highBitcount = shsInfo->countHi;
***************
*** 411,414 ****
  
    if (shsInfo->reverse_wanted)
      byteReverse(shsInfo->data, SHS_DIGESTSIZE);
! }				/* end of shsFinal */
--- 412,415 ----
  
    if (shsInfo->reverse_wanted)
      byteReverse(shsInfo->data, SHS_DIGESTSIZE);
! }
*** 1_7_7.309/src/local.dst Sun, 22 Dec 2002 01:26:12 -0600 dunemush (pennmush/b/19_local.dst 1.11 660)
--- 1_7_7.365(w)/src/local.dst Wed, 09 Apr 2003 14:19:24 -0500 dunemush (pennmush/b/19_local.dst 1.15 660)
***************
*** 25,31 ****
  /* Called after all MUSH init is done.
   */
  void
! local_startup()
  {
  }
  
--- 25,31 ----
  /* Called after all MUSH init is done.
   */
  void
! local_startup(void)
  {
  }
  
***************
*** 47,53 ****
   * back to disk
   */
  void
! local_dump_database()
  {
  }
  
--- 47,53 ----
   * back to disk
   */
  void
! local_dump_database(void)
  {
  }
  
***************
*** 56,62 ****
   * The log files are still open though.
   */
  void
! local_shutdown()
  {
  }
  
--- 56,62 ----
   * The log files are still open though.
   */
  void
! local_shutdown(void)
  {
  }
  
***************
*** 65,71 ****
   * consistency checking you require.
   */
  void
! local_dbck()
  {
  }
  
--- 65,71 ----
   * consistency checking you require.
   */
  void
! local_dbck(void)
  {
  }
  
***************
*** 73,79 ****
   * After the MUSH has done all it's stuff
   */
  void
! local_timer()
  {
  }
  
--- 73,79 ----
   * After the MUSH has done all it's stuff
   */
  void
! local_timer(void)
  {
  }
  
***************
*** 151,153 ****
--- 151,225 ----
  /* Initiation of objects after a reload or dumping to disk should
   * be handled in local_dump_database() and local_startup().
   */
+ 
+ 
+ /* This function is called *before* most standard interaction checks,
+  * and can override them. You probably want to do as little as possible
+  * here and do most of the work in local_can_interact_last instead.
+  * If this returns NOTHING, it means 'go on to more checks'
+  */
+ int
+ local_can_interact_first(dbref from __attribute__ ((__unused__)),
+ 			 dbref to __attribute__ ((__unused__)), int type
+ 			 __attribute__ ((__unused__)))
+ {
+ 
+   return NOTHING;
+ }
+ 
+ /* This one is called *after* most standard interaction checks. */
+ int
+ local_can_interact_last(dbref from __attribute__ ((__unused__)),
+ 			dbref to __attribute__ ((__unused__)), int type
+ 			__attribute__ ((__unused__)))
+ {
+   /* from is where the message is coming from, in theory. It makes sense
+    * for sound, but think of it as light rays for visiblity or matching. 
+    * The rays come *from* someone standing in a room, and go *to* the person
+    * looking around.
+    */
+ 
+ #ifdef NEVER
+   /* Various examples follow */
+ 
+   switch (type) {
+   case INTERACT_SEE:
+     /* Someone standing in a room, or walking into a room, or doing
+      * @verb type stuff that's @bar, @obar, and @abar
+ 
+      /* Probably a good idea */
+     if (See_All(to))
+       return 1;
+ 
+     break;
+ 
+   case INTERACT_HEAR:
+     /* People talking */
+ 
+     /* Telepathy example. Players who can hear telepathy get @set
+      * HEAR_TELEPATHY,  players currently using telepathy should be
+      * @set USE_TELEPATHY. */
+ 
+     if (has_flag_by_name(from, "USE_TELEPATHY", NOTYPE))
+       return has_flag_by_name(to, "HEAR_TELEPATHY", NOTYPE);
+ 
+     break;
+ 
+   case INTERACT_MATCH:
+     /* Matching object names so you can pick them up, go through exits,
+        etc. */
+ 
+     break;
+   }
+ 
+   /* Splits the universe in half, half FOO and half not. */
+   return (has_flag_by_name(to, "FOO", NOTYPE) ==
+ 	  has_flag_by_name(from, "FOO", NOTYPE));
+ 
+ 
+ #endif				/* NEVER */
+ 
+   /* You want to return NOTHING if you haven't made up your mind */
+   return NOTHING;
+ 
+ }
*** 1_7_7.309/src/wiz.c Wed, 12 Mar 2003 12:31: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.1.1.2.1.1.1.2.2.4 660)
--- 1_7_7.365(w)/src/wiz.c Wed, 09 Apr 2003 14:19:27 -0500 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.1.2.1.1.1.2.2.6 660)
***************
*** 1201,1208 ****
      return;
    }
  
!   nresults = raw_search(executor, args[0], args[1], args[2], args[3], args[4],
! 			&results, pe_info);
  
    if (nresults < 0) {
      safe_str("#-1", buff, bp);
--- 1201,1212 ----
      return;
    }
  
!   if (!strcmp(called_as, "CHILDREN"))
!     nresults = raw_search(executor, NULL, "PARENT", args[0], NULL,
! 			  NULL, &results, pe_info);
!   else
!     nresults = raw_search(executor, args[0], args[1], args[2], args[3], args[4],
! 			  &results, pe_info);
  
    if (nresults < 0) {
      safe_str("#-1", buff, bp);
***************
*** 1235,1240 ****
--- 1239,1245 ----
      mush_free(results, "search_results");
  }
  
+ 
  enum search_class { S_OWNER, S_TYPE, S_PARENT, S_ZONE, S_FLAG,
    S_POWER, S_EVAL, S_NAME, S_LFLAG
  };
*** 1_7_7.309/src/wild.c Mon, 06 Jan 2003 10:30:50 -0600 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.8.1.1.1.4.1.2 660)
--- 1_7_7.365(w)/src/wild.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/24_wild.c 1.11.1.1.1.8.1.1.1.4.1.2.1.1 660)
***************
*** 1,7 ****
! /* wild.c - wildcard routines
   *
   * Written by T. Alexander Popiel, 24 June 1993
!  * Last modified by T. Alexander Popiel, 28 July 2000
   *
   * Thanks go to Andrew Molitor for debugging
   * Thanks also go to Rich $alz for code to benchmark against
--- 1,10 ----
! /**
!  * \file wild.c
!  *
!  * \brief Wildcard matching routings for PennMUSH
   *
   * Written by T. Alexander Popiel, 24 June 1993
!  * Last modified by Javelin, 2002-2003
   *
   * Thanks go to Andrew Molitor for debugging
   * Thanks also go to Rich $alz for code to benchmark against
***************
*** 17,22 ****
--- 20,26 ----
   * then please feel free to contact the author at
   * popiel at wolfskeep.com to work out agreeable terms.
   */
+ 
  #include "config.h"
  #include <ctype.h>
  #include <string.h>
***************
*** 50,59 ****
  			  int cs);
  static char *strip_backslashes(const char *str);
  
! /* ---------------------------------------------------------------------------
!  * quick_wild: do a wildcard match, without remembering the wild data.
   *
   * This routine will cause crashes if fed NULLs instead of strings.
   */
  int
  quick_wild(const char *RESTRICT tstr, const char *RESTRICT dstr)
--- 54,67 ----
  			  int cs);
  static char *strip_backslashes(const char *str);
  
! /** Do a wildcard match, without remembering the wild data.
   *
   * This routine will cause crashes if fed NULLs instead of strings.
+  *
+  * \param tstr pattern to match against.
+  * \param dstr string to check.
+  * \retval 1 dstr matches the tstr pattern.
+  * \retval 0 dstr does not match the tstr pattern.
   */
  int
  quick_wild(const char *RESTRICT tstr, const char *RESTRICT dstr)
***************
*** 66,72 ****
    return quick_wild_new(tstr, dstr, 0);
  }
  
! 
  int
  quick_wild_new(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs)
  {
--- 74,89 ----
    return quick_wild_new(tstr, dstr, 0);
  }
  
! /** Do a wildcard match, possibly case-sensitive, without memory.
!  *
!  * This probably crashes if fed NULLs instead of strings, too.
!  *
!  * \param tstr pattern to match against.
!  * \param dstr string to check.
!  * \param cs if 1, case-sensitive; if 0, case-insensitive.
!  * \retval 1 dstr matches the tstr pattern.
!  * \retval 0 dstr does not match the tstr pattern.
!  */
  int
  quick_wild_new(const char *RESTRICT tstr, const char *RESTRICT dstr, int cs)
  {
***************
*** 316,326 ****
    return wild1(s, d, p, wspace, cs);
  }
  
! /* ---------------------------------------------------------------------------
!  * wild_match: do a wildcard
!  * match, remembering the wild data, if wildcard match is done.
   *
   * 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)
--- 333,347 ----
    return wild1(s, d, p, wspace, cs);
  }
  
! /** Wildcard match, possibly case-sensitive, and remember the wild data.
   *
   * This routine will cause crashes if fed NULLs instead of strings.
+  *
+  * \param s pattern to match against.
+  * \param d string to check.
+  * \param cs if 1, case-sensitive; if 0, case-insensitive.
+  * \retval 1 d matches s.
+  * \retval 0 d doesn't match s.
   */
  int
  wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
***************
*** 334,341 ****
    return wild(s, d, 0, cs);
  }
  
! /* ---------------------------------------------------------------------------
!  * regexp_match: do a regexp match, remembering the matched subexpressions
   */
  int
  regexp_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
--- 355,369 ----
    return wild(s, d, 0, cs);
  }
  
! /** Regexp match, possibly case-sensitive, and remember matched subexpressions.
!  *
!  * This routine will cause crashes if fed NULLs instead of strings.
!  *
!  * \param s regexp to match against.
!  * \param d string to check.
!  * \param cs if 1, case-sensitive; if 0, case-insensitive.
!  * \retval 1 d matches s.
!  * \retval 0 d doesn't match s.
   */
  int
  regexp_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
***************
*** 406,414 ****
  }
  
  
! /* ---------------------------------------------------------------------------
!  * quick_regexp_match: do a regexp match, not caring about saving matched
!  * subexpressions.
   */
  int
  quick_regexp_match(const char *RESTRICT s, const char *RESTRICT d, int cs)
--- 434,448 ----
  }
  
  
! /** Regexp match, possibly case-sensitive, and with no memory.
!  *
!  * This routine will cause crashes if fed NULLs instead of strings.
!  *
!  * \param s regexp to match against.
!  * \param d string to check.
!  * \param cs if 1, case-sensitive; if 0, case-insensitive.
!  * \retval 1 d matches s.
!  * \retval 0 d doesn't match s.
   */
  int
  quick_regexp_match(const char *RESTRICT s, const char *RESTRICT d, int cs)
***************
*** 448,458 ****
  }
  
  
! /* ---------------------------------------------------------------------------
!  * local_wild_match: do either an order comparison or a wildcard match.
!  * Ignore match correspondences.
   *
   * 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)
--- 482,496 ----
  }
  
  
! /** Either an order comparison or a wildcard match with no memory.
   *
   * This routine will cause crashes if fed NULLs instead of strings.
+  *
+  * \param s pattern to match against.
+  * \param d string to check.
+  * \param cs if 1, case-sensitive; if 0, case-insensitive.
+  * \retval 1 d matches s.
+  * \retval 0 d doesn't match s.
   */
  int
  local_wild_match_case(const char *RESTRICT s, const char *RESTRICT d, int cs)
***************
*** 475,484 ****
    return quick_wild_new(s, d, cs);
  }
  
! /* ---------------------------------------------------------------------------
!  * wildcard - return 1 if the string has a wildcard character (* or ?)
!  * in it, and 0 otherwise. Not used by the wild matching routines, but
!  * suitable for outside use.
   */
  int
  wildcard(const char *s)
--- 513,523 ----
    return quick_wild_new(s, d, cs);
  }
  
! /** Does a string contain a wildcard character (* or ?)?
!  * Not used by the wild matching routines, but suitable for outside use.
!  * \param s string to check.
!  * \retval 1 s contains a * or ?
!  * \retval 0 s does not contain a * or ?
   */
  int
  wildcard(const char *s)
*** 1_7_7.309/src/warnings.c Sun, 22 Dec 2002 01:19:31 -0600 dunemush (pennmush/b/25_warnings.c 1.21.1.2 660)
--- 1_7_7.365(w)/src/warnings.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/25_warnings.c 1.21.1.3 660)
***************
*** 1,6 ****
! 
! /* warnings.c - check to make sure rooms and exits are the way they
!  * should be. */
  
  #include "config.h"
  
--- 1,10 ----
! /**
!  * \file warnings.c
!  *
!  * \brief Check topology and messages on PennMUSH objects and give warnings
!  *
!  *
!  */
  
  #include "config.h"
  
***************
*** 47,56 ****
  
  typedef long int warn_type;
  
  typedef struct a_tcheck tcheck;
  struct a_tcheck {
!   const char *name;
!   warn_type flag;
  };
  
  
--- 51,61 ----
  
  typedef long int warn_type;
  
+ /** A structure representing a topology warning check. */
  typedef struct a_tcheck tcheck;
  struct a_tcheck {
!   const char *name;	/**< Name of warning. */
!   warn_type flag;	/**< Bitmask of warning. */
  };
  
  
***************
*** 307,312 ****
--- 312,320 ----
    }
  }
  
+ /** Set up the default warnings on an object.
+  * \param player object to set warnings on.
+  */
  void
  set_initial_warnings(dbref player)
  {
***************
*** 314,319 ****
--- 322,335 ----
    return;
  }
  
+ /** Set warnings on an object.
+  * \verbatim
+  * This implements @warnings obj=warning list
+  * \endverbatim
+  * \param player the enactor.
+  * \param name name of object to set warnings on.
+  * \param warns list of warnings to set, space-separated.
+  */
  void
  do_warnings(dbref player, const char *name, const char *warns)
  {
***************
*** 386,392 ****
  }
  
  
! /* Given an object, return a string of warnings on it */
  const char *
  unparse_warnings(dbref thing)
  {
--- 402,411 ----
  }
  
  
! /** Given an object, return a string of warnings on it.
!  * \param thing dbref of object.
!  * \return pointer to statically allocated string listing warnings.
!  */
  const char *
  unparse_warnings(dbref thing)
  {
***************
*** 463,471 ****
  }
  
  
! /* Loop through all objects and check their topology */
  void
! run_topology()
  {
    int ndone;
    for (ndone = 0; ndone < db_top; ndone++) {
--- 482,490 ----
  }
  
  
! /** Loop through all objects and check their topology.  */
  void
! run_topology(void)
  {
    int ndone;
    for (ndone = 0; ndone < db_top; ndone++) {
***************
*** 475,480 ****
--- 494,505 ----
    }
  }
  
+ /** Wizard command to check all objects.
+  * \verbatim
+  * This implements @wcheck/all.
+  * \endverbatim
+  * \param player the enactor.
+  */
  void
  do_wcheck_all(dbref player)
  {
***************
*** 487,493 ****
    notify(player, T("Warning checks complete."));
  }
  
! /* wcheck on a specific player, by that player */
  void
  do_wcheck_me(dbref player)
  {
--- 512,520 ----
    notify(player, T("Warning checks complete."));
  }
  
! /** Check warnings on a specific player by themselves.
!  * \param player player checking warnings on their objects.
!  */
  void
  do_wcheck_me(dbref player)
  {
***************
*** 503,510 ****
  }
  
  
! /* Called when a player wants to do a check on something. We check for
!  * ownership or hasprivs before allowing it
   */
  void
  do_wcheck(dbref player, const char *name)
--- 530,539 ----
  }
  
  
! /** Check warnings on a specific object.
!  * We check for ownership or hasprivs before allowing this.
!  * \param player the enactor.
!  * \param name name of object to check.
   */
  void
  do_wcheck(dbref player, const char *name)
*** 1_7_7.309/src/version.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/26_version.c 1.8 660)
--- 1_7_7.365(w)/src/version.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/26_version.c 1.9 660)
***************
*** 1,6 ****
! /* This file defines the @version command. It's all by itself because
   * we want to rebuild this file at every compilation, so that the
   * BUILDDATE is correct
   */
  #include "config.h"
  #include "copyrite.h"
--- 1,13 ----
! /**
!  * \file version.c
!  *
!  * \brief Version.
!  *
!  * \verbatim
!  * This file defines the @version command. It's all by itself because
   * we want to rebuild this file at every compilation, so that the
   * BUILDDATE is correct
+  * \endverbatim
   */
  #include "config.h"
  #include "copyrite.h"
***************
*** 20,28 ****
  extern time_t start_time;	/* from bsd.c */
  void do_version(dbref player);
  
  void
! do_version(player)
!     dbref player;
  {
    char buff[BUFFER_LEN];
  
--- 27,37 ----
  extern time_t start_time;	/* from bsd.c */
  void do_version(dbref player);
  
+ /** The version command.
+  * \param player the enactor.
+  */
  void
! do_version(dbref player)
  {
    char buff[BUFFER_LEN];
  
*** 1_7_7.309/src/utils.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.5 660)
--- 1_7_7.365(w)/src/utils.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/27_utils.c 1.30.1.1.1.9 660)
***************
*** 1,4 ****
! /* utils.c */
  
  #include "copyrite.h"
  #include "config.h"
--- 1,10 ----
! /**
!  * \file utils.c
!  *
!  * \brief Utility functions for PennMUSH.
!  *
!  *
!  */
  
  #include "copyrite.h"
  #include "config.h"
***************
*** 46,56 ****
  
  dbref find_entrance(dbref door);
  void initialize_mt(void);
! unsigned long genrand_int32(void);
! long genrand_int31(void);
! void init_genrand(unsigned long);
! void init_by_array(unsigned long *, int);
! 
  Malloc_t
  mush_malloc(size_t size, const char *check)
  {
--- 52,71 ----
  
  dbref find_entrance(dbref door);
  void initialize_mt(void);
! static unsigned long genrand_int32(void);
! static long genrand_int31(void);
! static void init_genrand(unsigned long);
! static void init_by_array(unsigned long *, int);
! extern int local_can_interact_first(dbref from, dbref to, int type);
! extern int local_can_interact_last(dbref from, dbref to, int type);
! 
! /** A malloc wrapper that tracks type of allocation.
!  * This should be used in preference to malloc() when possible,
!  * to enable memory leak tracing with MEM_CHECK.
!  * \param size bytes to allocate.
!  * \param check string to label allocation with.
!  * \return allocated block of memory or NULL.
!  */
  Malloc_t
  mush_malloc(size_t size, const char *check)
  {
***************
*** 65,70 ****
--- 80,91 ----
    return ptr;
  }
  
+ /** A free wrapper that tracks type of allocation.
+  * If mush_malloc() gets the memory, mush_free() should free it
+  * to enable memory leak tracing with MEM_CHECK.
+  * \param ptr pointer to block of member to free.
+  * \param check string to label allocation with.
+  */
  void
  mush_free(Malloc_t RESTRICT ptr, const char *RESTRICT check
  	  __attribute__ ((__unused__)))
***************
*** 77,91 ****
  }
  
  
  void
  parse_attrib(dbref player, char *str, dbref *thing, ATTR **attrib)
  {
-   /* takes a string which is of the format <obj>/<attr> or <attr>,
-    * and returns the dbref of the object, and a pointer to the attribute.
-    * If no object is specified, then the dbref returned is the player's.
-    * str is destructively modified.
-    */
- 
    char *name;
  
    /* find the object */
--- 98,116 ----
  }
  
  
+ /** Parse object/attribute strings into components.
+  * This function takes a string which is of the format obj/attr or attr,
+  * and returns the dbref of the object, and a pointer to the attribute.
+  * If no object is specified, then the dbref returned is the player's.
+  * str is destructively modified. This function is probably underused.
+  * \param player the default object.
+  * \param str the string to parse.
+  * \param thing pointer to dbref of object parsed out of string.
+  * \param attrib pointer to pointer to attribute structure retrieved.
+  */
  void
  parse_attrib(dbref player, char *str, dbref *thing, ATTR **attrib)
  {
    char *name;
  
    /* find the object */
***************
*** 103,108 ****
--- 128,139 ----
  }
  
  
+ /** Given an exit, find the room that is its source through brute force.
+  * This is used in pathological cases where the exit's own source
+  * element is invalid.
+  * \param door dbref of exit to find source of.
+  * \return dbref of exit's source room, or NOTHING.
+  */
  dbref
  find_entrance(dbref door)
  {
***************
*** 120,126 ****
    return NOTHING;
  }
  
! /* remove the first occurence of what in list headed by first */
  dbref
  remove_first(dbref first, dbref what)
  {
--- 151,162 ----
    return NOTHING;
  }
  
! /** Remove the first occurence of what in chain headed by first.
!  * This works for contents and exit chains.
!  * \param first dbref of first object in chain.
!  * \param what dbref of object to remove from chain.
!  * \return new head of chain.
!  */
  dbref
  remove_first(dbref first, dbref what)
  {
***************
*** 140,145 ****
--- 176,187 ----
    }
  }
  
+ /** Is an object on a chain?
+  * \param thing object to look for.
+  * \param list head of chain to search.
+  * \retval 1 found thing on list.
+  * \retval 0 did not find thing on list.
+  */
  int
  member(dbref thing, dbref list)
  {
***************
*** 152,160 ****
  }
  
  
! /* Return 1 if disallow is inside of from, i.e., if loc(disallow) = from,
!  * or loc(loc(disallow)) = from, etc.
!  * Actually, it's not recursive any more.
   */
  int
  recursive_member(dbref disallow, dbref from, int count)
--- 194,209 ----
  }
  
  
! /** Is an object inside another, at any level of depth?
!  * That is, we check if disallow is inside of from, i.e., if 
!  * loc(disallow) = from, or loc(loc(disallow)) = from, etc., with a 
!  * depth limit of 50.
!  * Despite the name of this function, it's not recursive any more.
!  * \param disallow interior object to check.
!  * \param from check if disallow is inside of this object.
!  * \param count depths of nesting checked so far.
!  * \retval 1 disallow is inside of from.
!  * \retval 0 disallow is not inside of from.
   */
  int
  recursive_member(dbref disallow, dbref from, int count)
***************
*** 174,180 ****
    return 1;
  }
  
! /* Return one if the dbref, or its location, etc. is set unfindable */
  int
  unfindable(dbref thing)
  {
--- 223,233 ----
    return 1;
  }
  
! /** Is an object or its location unfindable?
!  * \param thing object to check.
!  * \retval 1 object or location is unfindable.
!  * \retval 0 neither object nor location is unfindable.
!  */
  int
  unfindable(dbref thing)
  {
***************
*** 193,198 ****
--- 246,255 ----
  }
  
  
+ /** Reverse the order of a dbref chain.
+  * \param list dbref at the head of the chain.
+  * \return dbref at the head of the reversed chain.
+  */
  dbref
  reverse(dbref list)
  {
***************
*** 224,230 ****
   */
  
  
! /* Initializing the array with a seed */
  void
  initialize_mt(void)
  {
--- 281,287 ----
   */
  
  
! /** Wrapper to choose a seed and initialize the Mersenne Twister PRNG. */
  void
  initialize_mt(void)
  {
***************
*** 283,290 ****
  static unsigned long mt[N];	/* the array for the state vector  */
  static int mti = N + 1;		/* mti==N+1 means mt[N] is not initialized */
  
! /* initializes mt[N] with a seed */
! void
  init_genrand(unsigned long s)
  {
    mt[0] = s & 0xffffffffUL;
--- 340,349 ----
  static unsigned long mt[N];	/* the array for the state vector  */
  static int mti = N + 1;		/* mti==N+1 means mt[N] is not initialized */
  
! /** initializes mt[N] with a seed.
!  * \param a seed value.
!  */
! static void
  init_genrand(unsigned long s)
  {
    mt[0] = s & 0xffffffffUL;
***************
*** 299,308 ****
    }
  }
  
! /* initialize by an array with array-length */
! /* init_key is the array for initializing keys */
! /* key_length is its length */
! void
  init_by_array(unsigned long init_key[], int key_length)
  {
    int i, j, k;
--- 358,368 ----
    }
  }
  
! /** initialize by an array with array-length
!  * \param init_key the array for initializing keys 
!  * \param key_length the array's length 
!  */
! static void
  init_by_array(unsigned long init_key[], int key_length)
  {
    int i, j, k;
***************
*** 338,344 ****
  }
  
  /* generates a random number on [0,0xffffffff]-interval */
! unsigned long
  genrand_int32(void)
  {
    unsigned long y;
--- 398,404 ----
  }
  
  /* generates a random number on [0,0xffffffff]-interval */
! static unsigned long
  genrand_int32(void)
  {
    unsigned long y;
***************
*** 377,389 ****
  }
  
  /* generates a random number on [0,0x7fffffff]-interval */
! long
  genrand_int31(void)
  {
    return (long) (genrand_int32() >> 1);
  }
  
! /* Based on MUX's RandomINT32() */
  long
  get_random_long(long low, long high)
  {
--- 437,454 ----
  }
  
  /* generates a random number on [0,0x7fffffff]-interval */
! static long
  genrand_int31(void)
  {
    return (long) (genrand_int32() >> 1);
  }
  
! /** Get a uniform random long between low and high values, inclusive.
!  * Based on MUX's RandomINT32()
!  * \param low lower bound for random number.
!  * \param high upper bound for random number.
!  * \return random number between low and high, or 0 or -1 for error.
!  */
  long
  get_random_long(long low, long high)
  {
***************
*** 430,435 ****
--- 495,502 ----
  
  /* Return an object's name, but for exits, return just the first
   * component. We expect a valid object.
+  * \param it dbref of object.
+  * \return object's short name.
   */
  char *
  shortname(dbref it)
***************
*** 446,454 ****
    return n;
  }
  
! /* Return the absolute room (outermost container) of an object 
!  * or NOTHING if it's in an invalid object or in an invalid
!  * location or AMBIGUOUS if there are too many containers
   */
  dbref
  absolute_room(dbref it)
--- 513,523 ----
    return n;
  }
  
! /** Return the absolute room (outermost container) of an object.
!  * Return  NOTHING if it's in an invalid object or in an invalid
!  * location or AMBIGUOUS if there are too many containers.
!  * \param it dbref of object.
!  * \return absolute room of object, NOTHING, or AMBIGUOUS.
   */
  dbref
  absolute_room(dbref it)
***************
*** 468,470 ****
--- 537,588 ----
    }
    return room;
  }
+ 
+ 
+ /** Can one object interact with/perceive another in a given way?
+  * This funtion checks to see if 'to' can perceive something from
+  * 'from'. The types of interactions currently supported include:
+  * INTERACT_SEE (will light rays from from reach to?), INTERACT_HEAR
+  * (will sound from from reach to?), and INTERACT_MATCH (can 'to'
+  * match the name of 'from').
+  * \param from object of interaction.
+  * \param to subject of interaction, attempting to interact with from.
+  * \param type type of interaction.
+  * \retval 1 to can interact with from in this way.
+  * \retval 0 to can not interact with from in this way.
+  */
+ int
+ can_interact(dbref from, dbref to, int type)
+ {
+   int lci;
+ 
+   /* This shouldn't even be checked for rooms and garbage, but we're
+    * paranoid. Trying to stop interaction with yourself will not work 99%
+    * of the time, so we don't allow it anyway. */
+   if (IsGarbage(from) || IsGarbage(to))
+     return 0;
+ 
+   if ((from == to) || IsRoom(from) || IsRoom(to))
+     return 1;
+ 
+   /* This function can override standard checks! */
+   lci = local_can_interact_first(from, to, type);
+   if (lci != NOTHING)
+     return lci;
+ 
+   /* Standard checks */
+ 
+   /* You can interact with the object you are in or any objects
+    * you're holding.
+    * You can interact with objects you control, but not
+    * specifically the other way around
+    */
+   if ((from == Location(to)) || (to == Location(from)) || controls(to, from))
+     return 1;
+ 
+   lci = local_can_interact_last(from, to, type);
+   if (lci != NOTHING)
+     return lci;
+ 
+   return 1;
+ }
*** 1_7_7.309/src/timer.c Sat, 25 Jan 2003 23:35:07 -0600 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.4 660)
--- 1_7_7.365(w)/src/timer.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/29_timer.c 1.29.1.7.1.5 660)
***************
*** 1,6 ****
! /* timer.c */
! 
! /* Subroutines for timed events */
  #include "copyrite.h"
  #include "config.h"
  
--- 1,10 ----
! /**
!  * \file timer.c
!  *
!  * \brief Timed events in PennMUSH.
!  *
!  *
!  */
  #include "copyrite.h"
  #include "config.h"
  
***************
*** 59,64 ****
--- 63,72 ----
  
  #ifndef WIN32
  
+ /** Handler for HUP signal.
+  * Do the minimal work here - set a global variable and reload the handler.
+  * \param x unused.
+  */
  void
  hup_handler(int x __attribute__ ((__unused__)))
  {
***************
*** 66,71 ****
--- 74,83 ----
    reload_sig_handler(SIGHUP, hup_handler);
  }
  
+ /** Handler for USR1 signal.
+  * Do the minimal work here - set a global variable and reload the handler.
+  * \param x unused.
+  */
  void
  usr1_handler(int x __attribute__ ((__unused__)))
  {
***************
*** 75,82 ****
  
  #endif				/* WIN32 */
  
  void
! init_timer()
  {
  #ifndef WIN32
    install_sig_handler(SIGHUP, hup_handler);
--- 87,96 ----
  
  #endif				/* WIN32 */
  
+ /** Set up signal handlers.
+  */
  void
! init_timer(void)
  {
  #ifndef WIN32
    install_sig_handler(SIGHUP, hup_handler);
***************
*** 88,99 ****
  }
  
  
  void
! dispatch()
  {
    static int idle_counter = 0;
  
!   /* this routine can be used to poll from intrface.c */
    if (hup_triggered) {
      do_rawlog(LT_ERR, T("SIGHUP received: reloading .txt and .cnf files"));
      config_file_startup(NULL, 0);
--- 102,120 ----
  }
  
  
+ /** Handle events that may need handling.
+  * This routine is polled from bsd.c. At any call, it can handle
+  * the HUP and USR1 signals. At calls that are 'on the second',
+  * it goes on to perform regular every-second processing and to
+  * check whether it's time to do other periodic processes like
+  * purge, dump, or inactivity checks.
+  */
  void
! dispatch(void)
  {
    static int idle_counter = 0;
  
!   /* A HUP reloads configuration and reopens logs */
    if (hup_triggered) {
      do_rawlog(LT_ERR, T("SIGHUP received: reloading .txt and .cnf files"));
      config_file_startup(NULL, 0);
***************
*** 104,109 ****
--- 125,131 ----
      reopen_logs();
      hup_triggered = 0;
    }
+   /* A USR1 does a shutdown/reboot */
    if (usr1_triggered) {
      do_reboot(NOTHING, 0);	/* We don't return from this */
      usr1_triggered = 0;		/* But just in case */
***************
*** 173,178 ****
--- 195,204 ----
  int cpu_limit_warning_sent = 0;
  
  #if defined(HAS_ITIMER)
+ /** Handler for PROF signal.
+  * Do the minimal work here - set a global variable and reload the handler.
+  * \param signo unused.
+  */
  void
  signal_cpu_limit(int signo __attribute__ ((__unused__)))
  {
***************
*** 189,194 ****
--- 215,222 ----
  #endif
  int timer_set = 0;
  
+ /** Start the cpu timer (before running a command).
+  */
  void
  start_cpu_timer(void)
  {
***************
*** 222,227 ****
--- 250,257 ----
  #endif
  }
  
+ /** Reset the cpu timer (after running a command).
+  */
  void
  reset_cpu_timer(void)
  {
*** 1_7_7.309/src/privtab.c Sun, 01 Dec 2002 21:14:41 -0600 dunemush (pennmush/b/31_privtab.c 1.6 660)
--- 1_7_7.365(w)/src/privtab.c Wed, 09 Apr 2003 14:19:27 -0500 dunemush (pennmush/b/31_privtab.c 1.7 660)
***************
*** 1,5 ****
! /* privtab.c */
! /* Functions to work with privilege tables */
  
  #include "copyrite.h"
  #include "config.h"
--- 1,12 ----
! /**
!  * \file privtab.c
!  *
!  * \brief Privilege tables for PennMUSH.
!  *
!  * A privilege table is a respresentation of different privilege
!  * flags with associated names, characters, and bitmasks.
!  *
!  */
  
  #include "copyrite.h"
  #include "config.h"
***************
*** 12,26 ****
  #include "confmagic.h"
  
  
! /* Given a privs table, a string, and an original set of privileges,
   * return a modified set of privileges by applying the privs in the
!  * string to the original set of privileges
   */
  int
! string_to_privs(table, str, origprivs)
!     PRIV *table;
!     const char *str;
!     long int origprivs;
  {
    PRIV *c;
    long int yes = 0;
--- 19,35 ----
  #include "confmagic.h"
  
  
! /** Convert a string to a set of privilege bits, masked by an original set.
!  * Given a privs table, a string, and an original set of privileges,
   * return a modified set of privileges by applying the privs in the
!  * string to the original set of privileges.
!  * \param table pointer to a privtab.
!  * \param str a space-separated string of privilege names to apply.
!  * \param origprivs the original privileges.
!  * \return a privilege bitmask.
   */
  int
! string_to_privs(PRIV *table, const char *str, long int origprivs)
  {
    PRIV *c;
    long int yes = 0;
***************
*** 59,73 ****
    return ((origprivs | yes) & ~no);
  }
  
! /* Given a privs table, a string of letters, and an original set of privileges,
   * return a modified set of privileges by applying the privs in the
!  * letters to the original set of privileges
   */
  int
! letter_to_privs(table, str, origprivs)
!     PRIV *table;
!     const char *str;
!     long int origprivs;
  {
    PRIV *c;
    long int yes = 0, no = 0;
--- 68,84 ----
    return ((origprivs | yes) & ~no);
  }
  
! /** Convert a letter string to a set of privilege bits, masked by an original set.
!  * Given a privs table, a letter string, and an original set of privileges,
   * return a modified set of privileges by applying the privs in the
!  * string to the original set of privileges.
!  * \param table pointer to a privtab.
!  * \param str a string of privilege letters to apply.
!  * \param origprivs the original privileges.
!  * \return a privilege bitmask.
   */
  int
! letter_to_privs(PRIV *table, const char *str, long int origprivs)
  {
    PRIV *c;
    long int yes = 0, no = 0;
***************
*** 97,107 ****
    return ((origprivs | yes) & ~no);
  }
  
! /* Given a table and a bitmask, return a privs string (static allocation) */
  const char *
! privs_to_string(table, privs)
!     PRIV *table;
!     int privs;
  {
    PRIV *c;
    static char buf[BUFFER_LEN];
--- 108,120 ----
    return ((origprivs | yes) & ~no);
  }
  
! /** Given a table and a bitmask, return a privs string (static allocation).
!  * \param table pointer to a privtab.
!  * \param privs bitmask of privileges.
!  * \return statically allocated space-separated string of priv names.
!  */
  const char *
! privs_to_string(PRIV *table, int privs)
  {
    PRIV *c;
    static char buf[BUFFER_LEN];
***************
*** 121,132 ****
  }
  
  
! /* Given a table and a bitmask, return a privs letter string 
!  * (static allocation) */
  const char *
! privs_to_letters(table, privs)
!     PRIV *table;
!     int privs;
  {
    PRIV *c;
    static char buf[BUFFER_LEN];
--- 134,146 ----
  }
  
  
! /** Given a table and a bitmask, return a privs letter string (static allocation).
!  * \param table pointer to a privtab.
!  * \param privs bitmask of privileges.
!  * \return statically allocated string of priv letters.
!  */
  const char *
! privs_to_letters(PRIV *table, int privs)
  {
    PRIV *c;
    static char buf[BUFFER_LEN];
*** 1_7_7.309/src/strutil.c Wed, 12 Feb 2003 17:02:38 -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.1.4 660)
--- 1_7_7.365(w)/src/strutil.c Wed, 09 Apr 2003 14:19:27 -0500 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.1.2.1.2.1.2 660)
***************
*** 1,7 ****
  
- /* strutil.c */
- 
- /* String utilities */
  #include "config.h"
  
  #include <ctype.h>
--- 1,11 ----
+ /**
+  * \file strutil.c
+  *
+  * \brief String utilities for PennMUSH.
+  *
+  *
+  */
  
  #include "config.h"
  
  #include <ctype.h>
***************
*** 20,37 ****
  #include "memcheck.h"
  #endif
  #include "mymalloc.h"
- #include "confmagic.h"
- 
  #include "log.h"
  
  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);
--- 24,40 ----
  #include "memcheck.h"
  #endif
  #include "mymalloc.h"
  #include "log.h"
+ #include "confmagic.h"
  
  char *next_token(char *str, char sep);
  static int format_long(long val, char *buff, char **bp, int maxlen);
! static char *
  mush_strndup(const char *src, size_t len, const char *check)
    __attribute_malloc__;
  
  /* Duplicate the first len characters of s */
!     static char *mush_strndup(const char *src, size_t len, const char *check)
  {
    char *copy;
    size_t rlen = strlen(src);
***************
*** 48,53 ****
--- 51,63 ----
    return copy;
  }
  
+ /** Our version of strdup, with memory leak checking.
+  * This should be used in preference to strdup, and in assocation
+  * with mush_free().
+  * \param s string to duplicate.
+  * \param check label for memory checking.
+  * \return newly allocated copy of s.
+  */
  char *
  mush_strdup(const char *s, const char *check __attribute__ ((__unused__)))
  {
***************
*** 69,75 ****
    return x;
  }
  
! /* Return the string chopped at lim characters */
  char *
  chopstr(const char *str, size_t lim)
  {
--- 79,89 ----
    return x;
  }
  
! /** Return the string chopped at lim characters.
!  * \param str string to chop.
!  * \param lim character at which to chop the string.
!  * \return statically allocated buffer with chopped string.
!  */
  char *
  chopstr(const char *str, size_t lim)
  {
***************
*** 84,89 ****
--- 98,110 ----
  
  #ifndef HAS_STRCASECMP
  #ifndef WIN32
+ /** strcasecmp for systems without it.
+  * \param s1 one string to compare.
+  * \param s2 another string to compare.
+  * \retval -1 s1 is less than s2.
+  * \retval 0 s1 equals s2
+  * \retval 1 s1 is greater than s2.
+  */
  int
  strcasecmp(const char *s1, const char *s2)
  {
***************
*** 93,98 ****
--- 114,127 ----
    return (DOWNCASE(*s1) - DOWNCASE(*s2));
  }
  
+ /** strncasecmp for systems without it.
+  * \param s1 one string to compare.
+  * \param s2 another string to compare.
+  * \param n number of characters to compare.
+  * \retval -1 s1 is less than s2.
+  * \retval 0 s1 equals s2
+  * \retval 1 s1 is greater than s2.
+  */
  int
  strncasecmp(const char *s1, const char *s2, size_t n)
  {
***************
*** 107,112 ****
--- 136,148 ----
  #endif				/* !WIN32 */
  #endif				/* !HAS_STRCASECMP */
  
+ /** Does string begin with prefix? 
+  * This comparison is case-insensitive.
+  * \param string to check.
+  * \param prefix to check against.
+  * \retval 1 string begins with prefix.
+  * \retval 0 string does not begin with prefix.
+  */
  int
  string_prefix(const char *RESTRICT string, const char *RESTRICT prefix)
  {
***************
*** 117,123 ****
    return *prefix == '\0';
  }
  
! /* accepts only nonempty matches starting at the beginning of a word */
  const char *
  string_match(const char *src, const char *sub)
  {
--- 153,163 ----
    return *prefix == '\0';
  }
  
! /** Match a substring at the start of a word in a string, case-insensitively.
!  * \param src a string of words to match against.
!  * \param sub a prefix to match against the start of a word in string.
!  * \return pointer into src at the matched word, or NULL.
!  */
  const char *
  string_match(const char *src, const char *sub)
  {
***************
*** 137,145 ****
  	src++;
      }
    }
!   return 0;
  }
  
  char *
  strupper(const char *s)
  {
--- 177,189 ----
  	src++;
      }
    }
!   return NULL;
  }
  
+ /** Return an uppercased version of a string in a static buffer.
+  * \param s string to uppercase.
+  * \return pointer to a static buffer containing the uppercased version.
+  */
  char *
  strupper(const char *s)
  {
***************
*** 156,161 ****
--- 200,209 ----
    return buf1;
  }
  
+ /** Return a lowercased version of a string in a static buffer.
+  * \param s string to lowercase.
+  * \return pointer to a static buffer containing the lowercased version.
+  */
  char *
  strlower(const char *s)
  {
***************
*** 172,187 ****
    return buf1;
  }
  
  char *
  upcasestr(char *s)
  {
-   /* modifies a string in-place to be upper-case */
    char *p;
    for (p = s; p && *p; p++)
      *p = UPCASE(*p);
    return s;
  }
  
  int
  safe_accent(const char *RESTRICT base, const char *RESTRICT tmplate, size_t len,
  	    char *buff, char **bp)
--- 220,247 ----
    return buf1;
  }
  
+ /** Modify a string in-place to uppercase.
+  * \param s string to uppercase.
+  * \return s, now modified to be all uppercase.
+  */
  char *
  upcasestr(char *s)
  {
    char *p;
    for (p = s; p && *p; p++)
      *p = UPCASE(*p);
    return s;
  }
  
+ /** Safely add an accented string to a buffer.
+  * \param base base string to which accents are applied.
+  * \param tmplate accent template string.
+  * \param len length of base (and tmplate).
+  * \param buff pointer to buffer to store accented string.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \retval 1 failed to store entire string.
+  * \retval 0 success.
+  */
  int
  safe_accent(const char *RESTRICT base, const char *RESTRICT tmplate, size_t len,
  	    char *buff, char **bp)
***************
*** 518,523 ****
--- 578,590 ----
    return len - clen
  
  
+ /** Safely store a formatted string into a buffer.
+  * This is a better way to do safe_str(tprintf(fmt,...),buff,bp)
+  * \param buff buffer to store formatted string.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \param fmt format string.
+  * \return number of characters left over, or 0 for success.
+  */
  int
  safe_format(char *buff, char **bp, const char *RESTRICT fmt, ...)
  {
***************
*** 542,573 ****
    APPEND_TO_BUF;
  }
  
  int
  safe_integer(int i, char *buff, char **bp)
  {
-   /* Adds a int to a string, being careful not to overflow buffer */
    return format_long(i, buff, bp, BUFFER_LEN);
  }
  
  int
  safe_uinteger(unsigned int i, char *buff, char **bp)
  {
-   /* Adds an unsigned int to a string */
    return safe_str(unparse_uinteger(i), buff, bp);
  }
  
  int
  safe_integer_sbuf(int i, char *buff, char **bp)
  {
-   /* Adds a int to a string, being careful not to overflow buffer */
    return format_long(i, buff, bp, SBUF_LEN);
  }
  
  int
  safe_dbref(dbref d, char *buff, char **bp)
  {
-   /* Adds a dbref to a string, being careful not to overflow buffer and 
-      avoiding writing partial dbrefs */
    char *saved = *bp;
    if (safe_chr('#', buff, bp)) {
      *bp = saved;
--- 609,661 ----
    APPEND_TO_BUF;
  }
  
+ /** Safely store an integer into a buffer.
+  * \param i integer to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \return 0 on success, non-zero on failure.
+  */
  int
  safe_integer(int i, char *buff, char **bp)
  {
    return format_long(i, buff, bp, BUFFER_LEN);
  }
  
+ /** Safely store an unsigned integer into a buffer.
+  * \param i integer to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \return 0 on success, non-zero on failure.
+  */
  int
  safe_uinteger(unsigned int i, char *buff, char **bp)
  {
    return safe_str(unparse_uinteger(i), buff, bp);
  }
  
+ /** Safely store an unsigned integer into a short buffer.
+  * \param i integer to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \return 0 on success, non-zero on failure.
+  */
  int
  safe_integer_sbuf(int i, char *buff, char **bp)
  {
    return format_long(i, buff, bp, SBUF_LEN);
  }
  
+ /** Safely store a dbref into a buffer.
+  * Don't store partial dbrefs.
+  * \param d dbref to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \retval 0 success.
+  * \retval 1 failure.
+  */
  int
  safe_dbref(dbref d, char *buff, char **bp)
  {
    char *saved = *bp;
    if (safe_chr('#', buff, bp)) {
      *bp = saved;
***************
*** 581,615 ****
  }
  
  
  int
  safe_number(NVAL n, char *buff, char **bp)
  {
-   /* Adds a number to a string, being careful not to overflow buffer */
    const char *c;
    APPEND_ARGS;
- 
    c = unparse_number(n);
    APPEND_TO_BUF;
  }
  
  int
  safe_str(const char *c, char *buff, char **bp)
  {
-   /* copies a string into a buffer, making sure there's no overflow. */
    APPEND_ARGS;
- 
    if (!c || !*c)
      return 0;
- 
    APPEND_TO_BUF;
- 
  }
  
  int
  safe_str_space(const char *c, char *buff, char **bp)
  {
-   /* copies a string into a buffer, making sure there's no overflow.
-    * puts it in quotes if there's space in it. */
    APPEND_ARGS;
    char *saved = *bp;
  
--- 669,716 ----
  }
  
  
+ /** Safely store a number into a buffer.
+  * \param n number to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \retval 0 success.
+  * \retval 1 failure.
+  */
  int
  safe_number(NVAL n, char *buff, char **bp)
  {
    const char *c;
    APPEND_ARGS;
    c = unparse_number(n);
    APPEND_TO_BUF;
  }
  
+ /** Safely store a string into a buffer.
+  * \param c string to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \retval 0 success.
+  * \retval 1 failure.
+  */
  int
  safe_str(const char *c, char *buff, char **bp)
  {
    APPEND_ARGS;
    if (!c || !*c)
      return 0;
    APPEND_TO_BUF;
  }
  
+ /** Safely store a string into a buffer, quoting it if it contains a space.
+  * \param c string to store.
+  * \param buff buffer to store into.
+  * \param bp pointer to pointer to insertion point in buff.
+  * \retval 0 success.
+  * \retval 1 failure.
+  */
  int
  safe_str_space(const char *c, char *buff, char **bp)
  {
    APPEND_ARGS;
    char *saved = *bp;
  
***************
*** 629,634 ****
--- 730,744 ----
  }
  
  
+ /** Saf