[PENNMUSH-ANNOUNCE] 1.7.4-patch09

dunemush@pennmush.org dunemush at pennmush.org
Thu, 6 Sep 2001 17:46:59 -0500


This is patch09 to PennMUSH 1.7.4. After applying this patch, you will
have version 1.7.4p9

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.4-patch09
	make update
	make install

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

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

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

In this patch:

Minor changes:
  * @clone can optionally specify a new name for the clone.
    Patch by Bellemore@M*U*S*H, inspired by mux.
  * die() can take a third argument which, if true, will cause it to
    return the list of individual die rolls rather than the sum.
  * NT_TCP option moved to options.h.dist, and @config/list compile now
    reports whether it's on or not. Suggested by Glonk@GlonkMUSH
  * QUIET flag affects the "Teleported." message as well.
    Suggested by Glonk@GlonkMUSH.
  * pos() and strmatch() strip ansi and html markup before matching. [SW]
  * Slight optimizations for many of the functions that strip markup. [SW] 
  * chat_strip_quote setting now applies to @*wall and say. Suggested by
    Glonk@GlonkMUSH. [SW]
  * @malias/who is now the same as @malias/members. Suggested by
    Oriens@Alexandria.
  * Small code change in do_chat_by_name so that find_channel_partial_on
    can behave as documented. Suggested by Michael Loftis
Fixes:
  * p8 broke regeditall when the replacer was null. Fixed.
    Reported by Nymeria@M*U*S*H.
  * Some unused variables removed, and pcre.h included in parse.c.
    Reported by Sidney@M*U*S*H.
  * index-files.pl produced an uninitialized value warning if a help file
    had only a single entry (or admin entry). Warning removed.
    Reported by Nymeria@M*U*S*H.
  * Fixed to help lstats() to mention stats() as alias. Reported by
    Glonk@GlonkMUSH.
  * Help edit() fix by Sash@SW:Uprising.
  * Improved failure message for @password. Suggested by Mike Wesson. [SW]
  * alphamin()/alphamax() were stripping markup from what they returned. [SW]
  * PARANOID flag is now only visible to owners. Reported by 
    Bellemore@BelleMUSH.
  * Improved error message when trying to rejoin a channel. [SW]
  * In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
    attribute doesn't get corrupted. Patch by Bellemore@BelleMUSH.
  * @chan/describe now works along with @chan/desc. Suggested by 
    Trispis@M*U*S*H
  * 'teach'ing a motion to a follower didn't work right. Reported by
    Cheetah and Viila@M*U*S*H.
  * Security bug in follow fixed. Reported by Walker@M*U*S*H.
  * The &ecirc; and &euml; entities were not correctly returned in
    Pueblo mode. Fixed by [NG].
  * Help for trig functions improved. [SW]
  * Pueblo references no longer give Chaco's (defunct) website.
    By Noltar@Korongil.

Prereq: 1.7.4p8
*** 1_7_4.138/Patchlevel Sat, 28 Jul 2001 09:05:37 -0500 dunemush (pennmush/5_Patchlevel 1.26 600)
--- 1_7_4.157(w)/Patchlevel Tue, 04 Sep 2001 08:10:24 -0500 dunemush (pennmush/5_Patchlevel 1.27 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p8
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p9
*** 1_7_4.138/CHANGES Sat, 28 Jul 2001 09:05:37 -0500 dunemush (pennmush/8_CHANGES 1.219.1.23 600)
--- 1_7_4.157(w)/CHANGES Thu, 06 Sep 2001 10:34:13 -0500 dunemush (pennmush/8_CHANGES 1.219.1.35 600)
***************
*** 17,22 ****
--- 17,70 ----
  
  ==========================================================================
  
+ Version 1.7.4 patchlevel 9		       September 4, 2001
+ 
+ Minor changes:
+   * @clone can optionally specify a new name for the clone.
+     Patch by Bellemore@M*U*S*H, inspired by mux.
+   * die() can take a third argument which, if true, will cause it to
+     return the list of individual die rolls rather than the sum.
+   * NT_TCP option moved to options.h.dist, and @config/list compile now
+     reports whether it's on or not. Suggested by Glonk@GlonkMUSH
+   * QUIET flag affects the "Teleported." message as well.
+     Suggested by Glonk@GlonkMUSH.
+   * pos() and strmatch() strip ansi and html markup before matching. [SW]
+   * Slight optimizations for many of the functions that strip markup. [SW] 
+   * chat_strip_quote setting now applies to @*wall and say. Suggested by
+     Glonk@GlonkMUSH. [SW]
+   * @malias/who is now the same as @malias/members. Suggested by
+     Oriens@Alexandria.
+   * Small code change in do_chat_by_name so that find_channel_partial_on
+     can behave as documented. Suggested by Michael Loftis
+ Fixes:
+   * p8 broke regeditall when the replacer was null. Fixed.
+     Reported by Nymeria@M*U*S*H.
+   * Some unused variables removed, and pcre.h included in parse.c.
+     Reported by Sidney@M*U*S*H.
+   * index-files.pl produced an uninitialized value warning if a help file
+     had only a single entry (or admin entry). Warning removed.
+     Reported by Nymeria@M*U*S*H.
+   * Fixed to help lstats() to mention stats() as alias. Reported by
+     Glonk@GlonkMUSH.
+   * Help edit() fix by Sash@SW:Uprising.
+   * Improved failure message for @password. Suggested by Mike Wesson. [SW]
+   * alphamin()/alphamax() were stripping markup from what they returned. [SW]
+   * PARANOID flag is now only visible to owners. Reported by 
+     Bellemore@BelleMUSH.
+   * Improved error message when trying to rejoin a channel. [SW]
+   * In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
+     attribute doesn't get corrupted. Patch by Bellemore@BelleMUSH.
+   * @chan/describe now works along with @chan/desc. Suggested by 
+     Trispis@M*U*S*H
+   * 'teach'ing a motion to a follower didn't work right. Reported by
+     Cheetah and Viila@M*U*S*H.
+   * Security bug in follow fixed. Reported by Walker@M*U*S*H.
+   * The &ecirc; and &euml; entities were not correctly returned in
+     Pueblo mode. Fixed by [NG].
+   * Help for trig functions improved. [SW]
+   * Pueblo references no longer give Chaco's (defunct) website.
+     By Noltar@Korongil.
+ 
  Version 1.7.4 patchlevel 8		       July 22, 2001
  
  Minor changes:
*** 1_7_4.138/game/txt/hlp/pennvers.hlp Sat, 28 Jul 2001 09:05:37 -0500 dunemush (pennmush/12_pennvers.h 1.169.1.20 600)
--- 1_7_4.157(w)/game/txt/hlp/pennvers.hlp Thu, 06 Sep 2001 10:34:17 -0500 dunemush (pennmush/12_pennvers.h 1.169.1.30 600)
***************
*** 1,5 ****
  & changes
! & 1.7.4p8
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
--- 1,5 ----
  & changes
! & 1.7.4p9
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
***************
*** 11,16 ****
--- 11,65 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
+ Version 1.7.4 patchlevel 9		       September 4, 2001
+ 
+ Minor changes:
+   * @clone can optionally specify a new name for the clone.
+     Patch by Bellemore@M*U*S*H, inspired by mux.
+   * die() can take a third argument which, if true, will cause it to
+     return the list of individual die rolls rather than the sum.
+   * NT_TCP option moved to options.h.dist, and @config/list compile now
+     reports whether it's on or not. Suggested by Glonk@GlonkMUSH
+   * QUIET flag affects the "Teleported." message as well.
+     Suggested by Glonk@GlonkMUSH.
+   * pos() and strmatch() strip ansi and html markup before matching. [SW]
+   * Slight optimizations for many of the functions that strip markup. [SW] 
+   * chat_strip_quote setting now applies to @*wall and say. Suggested by
+     Glonk@GlonkMUSH. [SW]
+   * @malias/who is now the same as @malias/members. Suggested by
+     Oriens@Alexandria.
+   * Small code change in do_chat_by_name so that find_channel_partial_on
+     can behave as documented. Suggested by Michael Loftis
+ Fixes:
+   * p8 broke regeditall when the replacer was null. Fixed.
+     Reported by Nymeria@M*U*S*H.
+   * Some unused variables removed, and pcre.h included in parse.c.
+     Reported by Sidney@M*U*S*H.
+   * index-files.pl produced an uninitialized value warning if a help file
+     had only a single entry (or admin entry). Warning removed.
+     Reported by Nymeria@M*U*S*H.
+   * Fixed to help lstats() to mention stats() as alias. Reported by
+     Glonk@GlonkMUSH.
+   * Help edit() fix by Sash@SW:Uprising.
+   * Improved failure message for @password. Suggested by Mike Wesson. [SW]
+   * alphamin()/alphamax() were stripping markup from what they returned. [SW]
+   * PARANOID flag is now only visible to owners. Reported by 
+     Bellemore@BelleMUSH.
+   * Improved error message when trying to rejoin a channel. [SW]
+   * In Win32 NT_TCP mode, ident lookups are now done and the LASTIP
+     attribute doesn't get corrupted. Patch by Bellemore@BelleMUSH.
+   * @chan/describe now works along with @chan/desc. Suggested by 
+     Trispis@M*U*S*H
+   * 'teach'ing a motion to a follower didn't work right. Reported by
+     Cheetah and Viila@M*U*S*H.
+   * Security bug in follow fixed. Reported by Walker@M*U*S*H.
+   * The &ecirc; and &euml; entities were not correctly returned in
+     Pueblo mode. Fixed by [NG].
+   * Help for trig functions improved. [SW]
+   * Pueblo references no longer give Chaco's (defunct) website.
+     By Noltar@Korongil.
+ 
+ & 1.7.4p8
  Version 1.7.4 patchlevel 8		       July 22, 2001
  
  Minor changes:
***************
*** 4797,4803 ****
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
         19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
--- 4846,4852 ----
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
         19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
*** 1_7_4.138/game/txt/hlp/penntop.hlp Wed, 18 Jul 2001 12:11:07 -0500 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.2 600)
--- 1_7_4.157(w)/game/txt/hlp/penntop.hlp Wed, 05 Sep 2001 15:50:17 -0500 dunemush (pennmush/13_penntop.hl 1.2.1.27.1.3.1.2 600)
***************
*** 310,317 ****
                    SimpleMU    http://simplemu.onlineroleplay.com
    MACINTOSH       MUDDweller  http://www.shareware.com (search for Muddweller)
  
-   WINDOWS         Pueblo      http://www.chaco.com
- 
  & CONTROL
    Controlling an object basically means that you have the power to change
    the object's characteristics such as flags and attributes. It may also
--- 310,315 ----
***************
*** 697,710 ****
  (continued in help listening3)
  & LISTENING3
    Please note that an object CANNOT trigger its own ^-patterns, so they
!   work like @ahear rather than @aahear or @amhear. Additionally, 
!   unlike $-commands, @listen and ^-patterns are NOT inherited via @parent,
!   unless the LISTEN_PARENT flag is set on the listener.
  
    Listen patterns are checked after the object's normal @listen attribute.
  
  See also: @listen, @ahear, @amhear, @aahear, MONITOR, 
            USER-DEFINED COMMANDS, LISTEN_PARENT
  & LISTS
    The word "list" is used in the help files to refer to a string that
    is a series of smaller strings separated by one or more spaces. A list
--- 695,715 ----
  (continued in help listening3)
  & LISTENING3
    Please note that an object CANNOT trigger its own ^-patterns, so they
!   work like @ahear rather than @aahear or @amhear. (Note that the
!   triggering object is whatever happens to be %#, so, for example, when
!   you @set an object MONITOR, you are %# with regard to the 
!   "Object is now listening" message, and this message can be picked up
!   with an ^pattern.)
! 
!   Additionally, unlike $-commands, @listen and ^-patterns are NOT
!   inherited via @parent, unless the LISTEN_PARENT flag is set on the
!   listener.
  
    Listen patterns are checked after the object's normal @listen attribute.
  
  See also: @listen, @ahear, @amhear, @aahear, MONITOR, 
            USER-DEFINED COMMANDS, LISTEN_PARENT
+ 
  & LISTS
    The word "list" is used in the help files to refer to a string that
    is a series of smaller strings separated by one or more spaces. A list
*** 1_7_4.138/game/txt/hlp/pennpueb.hlp Mon, 17 Apr 2000 11:58:36 -0500 dunemush (pennmush/14_pennpueb.h 1.2 600)
--- 1_7_4.157(w)/game/txt/hlp/pennpueb.hlp Tue, 04 Sep 2001 08:13:19 -0500 dunemush (pennmush/14_pennpueb.h 1.2.1.1 600)
***************
*** 1,9 ****
  & PUEBLO
  & PUEBLO()
! Pueblo is a client made by Chaco (http://www.chaco.com/pueblo).
! It attempts to MIX HTML with MUSH, and does a very good job at it.
! If compiled into the MUSH, PennMUSH offers full support for the
! enhanced features of Pueblo.
  
  PennMUSH will automatically detect a Pueblo client (rather, the 
  client will announce itself and PennMUSH will detect that), and
--- 1,10 ----
  & PUEBLO
  & PUEBLO()
! Pueblo is a client made by Chaco (a now defunct company).
! It attempts to MIX HTML with MUSH, and does a decent job at it.
! There are other clients (notably MUSHclient) that also offer Pueblo 
! features.  If compiled into the MUSH, PennMUSH offers support for
! the enhanced features of Pueblo.
  
  PennMUSH will automatically detect a Pueblo client (rather, the 
  client will announce itself and PennMUSH will detect that), and
***************
*** 19,25 ****
  
  & PUEBLO FEATURES
  PennMUSH makes the following enhancements visible to Pueblo users, if
! Pueblo support has been enabled in the server (check @config).:
  
  - Object/Room names are highlighted
  - Support for VRML graphics
--- 20,26 ----
  
  & PUEBLO FEATURES
  PennMUSH makes the following enhancements visible to Pueblo users, if
! Pueblo support has been enabled in the server (check @config):
  
  - Object/Room names are highlighted
  - Support for VRML graphics
*** 1_7_4.138/game/txt/hlp/pennmail.hlp Fri, 29 Jun 2001 12:34:08 -0500 dunemush (pennmush/15_pennmail.h 1.8 600)
--- 1_7_4.157(w)/game/txt/hlp/pennmail.hlp Tue, 04 Sep 2001 08:19:12 -0500 dunemush (pennmush/15_pennmail.h 1.9 600)
***************
*** 147,154 ****
  and is equivalent to @malias/list
  
  @malias with a single argument (the name of an alias) lists the
! members of that alias, if you're allowed to see them, and is
! equivalent to @malias/members <alias>
  
  See help @malias2 for more
  
--- 147,154 ----
  and is equivalent to @malias/list
  
  @malias with a single argument (the name of an alias) lists the
! members of that alias, if you're allowed to see them. Other forms of
! the same command are @malias/members <alias> or @malias/who <alias>
  
  See help @malias2 for more
  
*** 1_7_4.138/game/txt/hlp/pennfunc.hlp Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.4 600)
--- 1_7_4.157(w)/game/txt/hlp/pennfunc.hlp Tue, 04 Sep 2001 08:09:50 -0500 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2.1.7.1.8 600)
***************
*** 227,235 ****
    Returns the absolute value of a number. i.e. ABS(-4) returns 4;
    ABS(2) returns 2, etc.
  & ACOS()
!   acos(<number>)
   
!   Returns the arc-cosine of <number>, expressed in radians.
  & ADD()
    add(<number>,<number>,...)
  
--- 227,238 ----
    Returns the absolute value of a number. i.e. ABS(-4) returns 4;
    ABS(2) returns 2, etc.
  & ACOS()
!   acos(<cosine>)
   
!   Returns the angle that has the given <cosine> (arc-cosine), with the
!   angle expressed in radians.
! 
!   See HELP COS() for how to convert between radians and degrees.
  & ADD()
    add(<number>,<number>,...)
  
***************
*** 322,334 ****
    This function returns the proper article, "a" or "an", based on whether
    or not <string> begins with a vowel.
  & ASIN()
!   asin(<number>)
   
!   Returns the arc-sine of <number>, expressed in radians.
  & ATAN()
!   atan(<number>)
   
!   Returns the arc-tangent of <number>, expressed in radians.
  & ATRLOCK()
    atrlock(<object>/<attrib>[, <on|off>])
  
--- 325,343 ----
    This function returns the proper article, "a" or "an", based on whether
    or not <string> begins with a vowel.
  & ASIN()
!   asin(<sine>)
   
!   Returns the angle with the given <sine> (arc-sine), with the angle
!   expressed in radians.
! 
!   See HELP COS() for how to convert between radians and degrees.
  & ATAN()
!   atan(<tangent>)
   
!   Returns the angle with the given <tangent> (arc-tangent), with the
!   angle expressed in radians.
! 
!   See HELP COS() for how to convert between radians and degrees.
  & ATRLOCK()
    atrlock(<object>/<attrib>[, <on|off>])
  
***************
*** 572,580 ****
  
  See also: convsecs(), time()
  & COS()
!   cos(<number>)
   
!   Returns the cosine of <number>, which should be expressed in radians.
  & PCREATE()
    pcreate(<name>,<password>)
  
--- 581,595 ----
  
  See also: convsecs(), time()
  & COS()
!   cos(<angle>)
   
!   Returns the cosine of <angle>, which should be expressed in radians.
! 
!   An angle in degrees can be converted to radians with the following:
!    fdiv(mul(DEGREES, pi()), 180)
! 
!   An angle in radians can be converted to degrees with the following:
!    fdiv(mul(RADIANS, 180), pi())
  & PCREATE()
    pcreate(<name>,<password>)
  
***************
*** 666,678 ****
      You say, "abcfgh"
   
  & DIE()
!   die(<number of times to roll die>, <number of sides on die>)
   
    This function simulates rolling dice. It "rolls" a die with a given
    number of sides, a certain number of times, and sums the results.
    For example, DIE(2, 6) would roll "2d6" - two six-sided dice,
    generating a result in the range 2-12. The maximum number of
    dice this function will roll in a single call is 20.
  & DIG()
    dig(<name> [, <exit to> [, <exit from>]])
   
--- 681,702 ----
      You say, "abcfgh"
   
  & DIE()
!   die(<number of times to roll die>, <number of sides on die>[, <show>])
   
    This function simulates rolling dice. It "rolls" a die with a given
    number of sides, a certain number of times, and sums the results.
    For example, DIE(2, 6) would roll "2d6" - two six-sided dice,
    generating a result in the range 2-12. The maximum number of
    dice this function will roll in a single call is 20.
+   If a third argument is given and it's a true value, the result will
+   be a space-seperated list of the individual rolls rather than their
+   sum.
+ 
+   Example:
+   > think die(3, 6)
+   6
+   > think die(3, 6, 1)
+   5 2 1  
  & DIG()
    dig(<name> [, <exit to> [, <exit from>]])
   
***************
*** 756,762 ****
    If <search> is a dollar sign ($), <replace> is appended.
  
    Example:
!   > say "[edit(this is a test,^,I think,$,.,a test,an exam)]
    You say "I think this is an exam." 
    
    See also @edit, regedit().
--- 780,786 ----
    If <search> is a dollar sign ($), <replace> is appended.
  
    Example:
!   > say [edit(this is a test,^,I think%b,$,.,a test,an exam)]
    You say "I think this is an exam." 
    
    See also @edit, regedit().
***************
*** 1707,1712 ****
--- 1731,1737 ----
  & LSTATS()
  & STATS()
    lstats(<player>)
+   stats(<player>)
   
    This function returns the breakdown of objects in the database, in
    a format similar to "@stats". If <player> is "all", a breakdown is
***************
*** 1714,1719 ****
--- 1739,1746 ----
    for that particular player. Only wizards can LSTATS() other players.
    The list returned is in the format:
    <Total objects> <Rooms> <Exits> <Things> <Players> <Garbage>
+ 
+   stats() is an alias for lstats().
  & LT()
    lt(<num>,<num>)
  
***************
*** 2592,2600 ****
    1 if the number is positive, and -1 if the number is negative.
    Thus, SIGN(-4) is -1, SIGN(2) is 1, and SIGN(0) is 0.
  & SIN()
!   sin(<number>)  
   
!   Returns the sine of <number>, which should be expressed in radians.
  & SORT()
    sort(<word1> <word2> ...[,<sort type>][,<delimiter>][,<output sep>])
    
--- 2619,2629 ----
    1 if the number is positive, and -1 if the number is negative.
    Thus, SIGN(-4) is -1, SIGN(2) is 1, and SIGN(0) is 0.
  & SIN()
!   sin(<angle>)  
   
!   Returns the sine of <angle>, which should be expressed in radians.
! 
!   See HELP COS() for how to convert between radians and degrees.
  & SORT()
    sort(<word1> <word2> ...[,<sort type>][,<delimiter>][,<output sep>])
    
***************
*** 2885,2893 ****
    brown     |fox
      
  & TAN()
!   tan(<number>)
   
!   Returns the tangent of <number>, which should be expressed in radians.
  & TEL()
    tel(<object>,<destination>)
  
--- 2914,2924 ----
    brown     |fox
      
  & TAN()
!   tan(<angle>)
   
!   Returns the tangent of <angle>, which should be expressed in radians.
! 
!   See HELP COS() for how to convert between radians and degrees.
  & TEL()
    tel(<object>,<destination>)
  
*** 1_7_4.138/game/txt/hlp/pennflag.hlp Wed, 28 Mar 2001 14:27:36 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1 600)
--- 1_7_4.157(w)/game/txt/hlp/pennflag.hlp Fri, 03 Aug 2001 11:00:20 -0500 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1.2.1.2.1 600)
***************
*** 516,523 ****
    Flag:  QUIET  (all types)
  
    This flag when set on yourself prevents you from hearing 
!   the 'set' or 'triggered' messages from any objects you own.  When 
!   set on an object, only that object will not relay its messages.
  & ROOM
    Flag:  ROOM  (rooms)
  
--- 516,524 ----
    Flag:  QUIET  (all types)
  
    This flag when set on yourself prevents you from hearing 
!   the 'set', 'triggered', or 'Teleported.' messages from any objects
!   you own.  When set on an object, only that object will not relay
!   its messages.
  & ROOM
    Flag:  ROOM  (rooms)
  
*** 1_7_4.138/game/txt/index-files.pl Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/28_index-file 1.3 600)
--- 1_7_4.157(w)/game/txt/index-files.pl Mon, 30 Jul 2001 13:12:39 -0500 dunemush (pennmush/28_index-file 1.4 600)
***************
*** 31,38 ****
  @aentries = map { lc $_ } @aentries;
  
  sub withnumchecking;
! my @sorted = sort withnumchecking @entries;
! my @asorted = sort withnumchecking @aentries;
  
  my $maxlines = 14;
  my $maxlen = 25;
--- 31,38 ----
  @aentries = map { lc $_ } @aentries;
  
  sub withnumchecking;
! my @sorted = ($#entries > 0) ? (sort withnumchecking @entries) : @entries;
! my @asorted = ($#entries > 0) ? (sort withnumchecking @aentries) : @aentries;
  
  my $maxlines = 14;
  my $maxlen = 25;
*** 1_7_4.138/game/mushcnf.dst Sat, 07 Jul 2001 21:06:09 -0500 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.1 600)
--- 1_7_4.157(w)/game/mushcnf.dst Mon, 13 Aug 2001 19:50:07 -0500 dunemush (pennmush/41_mushcnf.ds 1.1.1.19.1.1.1.2 600)
***************
*** 551,557 ****
  page_aliases no
  
  # Should +whatever "hi! strip the intiial quote and produce <whatever> X says,
! # "hi!", or not (producing <whatever> X says, ""hi!").
  chat_strip_quote yes
  
  
--- 551,558 ----
  page_aliases no
  
  # Should +whatever "hi! strip the intiial quote and produce <whatever> X says,
! # "hi!", or not (producing <whatever> X says, ""hi!"). This also affects
! # the @*wall and say commands.
  chat_strip_quote yes
  
  
*** 1_7_4.138/src/SWITCHES Tue, 24 Apr 2001 12:38:03 -0500 dunemush (pennmush/b/22_SWITCHES 1.10 600)
--- 1_7_4.157(w)/src/SWITCHES Tue, 04 Sep 2001 08:18:01 -0500 dunemush (pennmush/b/22_SWITCHES 1.12 600)
***************
*** 24,30 ****
  DEFAULTS
  DELETE
  DELIM
! DESC
  DESTROY
  DISABLE
  DOWN
--- 24,30 ----
  DEFAULTS
  DELETE
  DELIM
! DESCRIBE
  DESTROY
  DISABLE
  DOWN
***************
*** 121,126 ****
--- 121,127 ----
  URGENT
  USEFLAG
  WHAT
+ WHO
  WIPE
  WIZ
  WIZARD
*** 1_7_4.138/src/wiz.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.5 660)
--- 1_7_4.157(w)/src/wiz.c Thu, 06 Sep 2001 10:40:59 -0500 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7 660)
***************
*** 423,429 ****
        /* Put it into its new room */
        Source(victim) = destination;
        PUSH(victim, Exits(destination));
!       notify(player, T("Teleported."));
        return;
      }
      loc = Location(victim);
--- 423,430 ----
        /* Put it into its new room */
        Source(victim) = destination;
        PUSH(victim, Exits(destination));
!       if (!Quiet(player) && !(Quiet(victim) && (Owner(victim) == player)))
! 	notify(player, T("Teleported."));
        return;
      }
      loc = Location(victim);
***************
*** 517,524 ****
  	  did_it(victim, victim, "TPORT", NULL, "OTPORT", NULL, "ATPORT",
  		 destination);
  	if ((victim != player) && !(Puppet(victim) &&
! 				    (Owner(victim) == Owner(player))))
! 	  notify(player, T("Teleported."));
  	return;
        }
        /* we can't do it */
--- 518,527 ----
  	  did_it(victim, victim, "TPORT", NULL, "OTPORT", NULL, "ATPORT",
  		 destination);
  	if ((victim != player) && !(Puppet(victim) &&
! 				    (Owner(victim) == Owner(player)))) {
! 	  if (!Quiet(player) && !(Quiet(victim) && (Owner(victim) == player)))
! 	    notify(player, T("Teleported."));
! 	}
  	return;
        }
        /* we can't do it */
*** 1_7_4.138/src/strutil.c Mon, 18 Jun 2001 10:36:58 -0500 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.6 660)
--- 1_7_4.157(w)/src/strutil.c Thu, 06 Sep 2001 10:40:59 -0500 dunemush (pennmush/b/33_strutil.c 1.28.1.3.1.3.1.7 660)
***************
*** 732,743 ****
  
  /* Strip all ansi and html markup from a string */
  char *
! remove_markup(orig)
      const char *orig;
  {
    static char buff[BUFFER_LEN];
    char *bp = buff;
    char *q;
  
    if (!orig)
      return NULL;
--- 732,745 ----
  
  /* Strip all ansi and html markup from a string */
  char *
! remove_markup(orig, s_len)
      const char *orig;
+     Size_t *s_len;
  {
    static char buff[BUFFER_LEN];
    char *bp = buff;
    char *q;
+   Size_t len = 0;
  
    if (!orig)
      return NULL;
***************
*** 754,762 ****
--- 756,767 ----
        break;
      default:
        safe_chr(*q++, buff, &bp);
+       len++;
      }
    }
    *bp = '\0';
+   if (s_len)
+     *s_len = len + 1;
    return buff;
  }
  
*** 1_7_4.138/src/speech.c Mon, 18 Jun 2001 10:36:58 -0500 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.1 660)
--- 1_7_4.157(w)/src/speech.c Thu, 06 Sep 2001 10:40:59 -0500 dunemush (pennmush/b/35_speech.c 1.21.1.2.1.3.1.5.1.1.1.7.1.3.1.1.1.3 660)
***************
*** 150,155 ****
--- 150,158 ----
      return;
    }
  
+   if (*tbuf1 == SAY_TOKEN && CHAT_STRIP_QUOTE)
+     tbuf1++;
+ 
    /* notify everybody */
    notify(player, tprintf(T("You say, \"%s\""), tbuf1));
    notify_except(Contents(loc), player,
***************
*** 415,420 ****
--- 418,424 ----
      safe_str(arg2, tbuf2, &bp2);
      safe_str("\" to ", tbuf2, &bp2);
      safe_str(tbuf, tbuf2, &bp2);
+     safe_chr('.', tbuf2, &bp2);
      break;
    }
    *bp2 = '\0';
***************
*** 649,655 ****
    switch (*message) {
    case SAY_TOKEN:
      key = 1;
!     message = message + 1;
      break;
    case SEMI_POSE_TOKEN:
      gap = "";
--- 653,660 ----
    switch (*message) {
    case SAY_TOKEN:
      key = 1;
!     if (CHAT_STRIP_QUOTE)
!       message = message + 1;
      break;
    case SEMI_POSE_TOKEN:
      gap = "";
*** 1_7_4.138/src/player.c Sat, 23 Jun 2001 14:54:26 -0500 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.3 660)
--- 1_7_4.157(w)/src/player.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/b/47_player.c 1.15.1.1.1.1.1.4 660)
***************
*** 440,446 ****
      return;
    }
    if (!password_check(player, old)) {
!     notify(player, "Sorry");
    } else if (!ok_password(newobj)) {
      notify(player, T("Bad new password."));
    } else {
--- 440,446 ----
      return;
    }
    if (!password_check(player, old)) {
!     notify(player, T("Suffering from memory loss? See a wizard!"));
    } else if (!ok_password(newobj)) {
      notify(player, T("Bad new password."));
    } else {
*** 1_7_4.138/src/parse.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/b/48_parse.c 1.23.1.9 660)
--- 1_7_4.157(w)/src/parse.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/b/48_parse.c 1.23.1.10 660)
***************
*** 28,33 ****
--- 28,34 ----
  #include "mushdb.h"
  #include "parse.h"
  #include "attrib.h"
+ #include "pcre.h"
  #include "flags.h"
  #include "log.h"
  #ifdef MEM_CHECK
***************
*** 462,468 ****
        } else {
  	char obuf[BUFFER_LEN];
  	int p = 0;
- 	char *o;
  
  	(*str)++;
  	/* Check the first two characters after the $ for a number */
--- 463,468 ----
*** 1_7_4.138/src/move.c Tue, 10 Jul 2001 14:23:59 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.5 660)
--- 1_7_4.157(w)/src/move.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3.1.9.1.1 660)
***************
*** 22,27 ****
--- 22,28 ----
  #include "lock.h"
  #include "log.h"
  #include "command.h"
+ #include "cmds.h"
  #include "game.h"
  #include "confmagic.h"
  
***************
*** 297,304 ****
      return 1;
  
    /* otherwise match on exits */
!   return (last_match_result
! 	  (player, direction, TYPE_EXIT, MAT_EXIT | MAT_ABSOLUTE) != NOTHING);
  }
  
  static dbref
--- 298,304 ----
      return 1;
  
    /* otherwise match on exits */
!   return (last_match_result(player, direction, TYPE_EXIT, MAT_EXIT) != NOTHING);
  }
  
  static dbref
***************
*** 342,348 ****
  do_move(player, direction, type)
      dbref player;
      const char *direction;
!     int type;			/* type 0 is normal, type 1 is global */
  {
    dbref exit_m, loc, var_dest;
  
--- 342,348 ----
  do_move(player, direction, type)
      dbref player;
      const char *direction;
!     int type;			/* type 0 is normal, type 1 is global, type 2 is zone */
  {
    dbref exit_m, loc, var_dest;
  
***************
*** 370,387 ****
      if (DO_GLOBALS && (type == 1))
        exit_m =
  	match_result(player, direction, TYPE_EXIT,
! 		     MAT_EXIT | MAT_GLOBAL | MAT_CHECK_KEYS | MAT_ABSOLUTE);
      else if (DO_GLOBALS && (type == 2))
        exit_m =
  	match_result(player, direction, TYPE_EXIT,
! 		     MAT_EXIT | MAT_REMOTES | MAT_CHECK_KEYS | MAT_ABSOLUTE);
      else
        exit_m =
! 	match_result(player, direction, TYPE_EXIT,
! 		     MAT_EXIT | MAT_CHECK_KEYS | MAT_ABSOLUTE);
!     if (!Hasprivs(player) && GoodObject(exit_m) && is_dbref(direction)
! 	&& (Source(exit_m) != Location(player)))
!       exit_m = NOTHING;
      switch (exit_m) {
      case NOTHING:
        /* try to force the object */
--- 370,383 ----
      if (DO_GLOBALS && (type == 1))
        exit_m =
  	match_result(player, direction, TYPE_EXIT,
! 		     MAT_EXIT | MAT_GLOBAL | MAT_CHECK_KEYS);
      else if (DO_GLOBALS && (type == 2))
        exit_m =
  	match_result(player, direction, TYPE_EXIT,
! 		     MAT_EXIT | MAT_REMOTES | MAT_CHECK_KEYS);
      else
        exit_m =
! 	match_result(player, direction, TYPE_EXIT, MAT_EXIT | MAT_CHECK_KEYS);
      switch (exit_m) {
      case NOTHING:
        /* try to force the object */
***************
*** 432,438 ****
  	  enter_room(player, var_dest, 0);
  	  /* Move the followers if the leader is elsewhere */
  	  if (Location(player) != loc)
! 	    follower_command(player, loc, ccom);
  	  break;
  
  	case TYPE_PLAYER:
--- 428,434 ----
  	  enter_room(player, var_dest, 0);
  	  /* Move the followers if the leader is elsewhere */
  	  if (Location(player) != loc)
! 	    follower_command(player, loc, tprintf("%s #%d", "move", exit_m));
  	  break;
  
  	case TYPE_PLAYER:
***************
*** 449,455 ****
  	  safe_tel(player, var_dest, 0);
  	  /* Move the followers if the leader is elsewhere */
  	  if (Location(player) != loc)
! 	    follower_command(player, loc, ccom);
  	  break;
  	case TYPE_EXIT:
  	  notify(player, T("This feature coming soon."));
--- 445,451 ----
  	  safe_tel(player, var_dest, 0);
  	  /* Move the followers if the leader is elsewhere */
  	  if (Location(player) != loc)
! 	    follower_command(player, loc, tprintf("%s #%d", "move", exit_m));
  	  break;
  	case TYPE_EXIT:
  	  notify(player, T("This feature coming soon."));
***************
*** 663,683 ****
  {
    dbref thing;
    dbref loc;
!   long match_flags = MAT_CHECK_KEYS | MAT_NEIGHBOR | MAT_EXIT | MAT_ENGLISH;
!   if (is_alias || Hasprivs(player))
!     match_flags |= MAT_ABSOLUTE;	/* necessary for enter aliases to work */
  
    if ((thing = noisy_match_result(player, what, TYPE_THING, match_flags))
!       == NOTHING) {
!     /* notify(player,T ("I don't see that here."));   */
      return;
!   }
    switch (Typeof(thing)) {
    case TYPE_ROOM:
    case TYPE_EXIT:
      notify(player, T("Permission denied."));
      break;
    default:
      /* the object must pass the lock. Also, the thing being entered */
      /* has to be controlled, or must be enter_ok */
      if (!(((Flags(thing) & ENTER_OK) || controls(player, thing)) &&
--- 659,684 ----
  {
    dbref thing;
    dbref loc;
!   long match_flags =
!     MAT_CHECK_KEYS | MAT_NEIGHBOR | MAT_EXIT | MAT_ENGLISH | MAT_ABSOLUTE;
  
    if ((thing = noisy_match_result(player, what, TYPE_THING, match_flags))
!       == NOTHING)
      return;
! 
    switch (Typeof(thing)) {
    case TYPE_ROOM:
    case TYPE_EXIT:
      notify(player, T("Permission denied."));
      break;
    default:
+     /* Remember the current room */
+     loc = Location(player);
+     /* Only privileged players may enter something remotely */
+     if ((Location(thing) != loc) && !Hasprivs(player)) {
+       notify(player, T("I don't see that here."));
+       return;
+     }
      /* the object must pass the lock. Also, the thing being entered */
      /* has to be controlled, or must be enter_ok */
      if (!(((Flags(thing) & ENTER_OK) || controls(player, thing)) &&
***************
*** 691,703 ****
        notify(player, T("Sorry, you must remain beside yourself!"));
        return;
      }
-     /* Remember the current room */
-     loc = Location(player);
      /* Move the leader */
      safe_tel(player, thing, 0);
      /* Move the followers if the leader is elsewhere */
      if (Location(player) != loc)
!       follower_command(player, loc, ccom);
      break;
    }
  }
--- 692,702 ----
        notify(player, T("Sorry, you must remain beside yourself!"));
        return;
      }
      /* Move the leader */
      safe_tel(player, thing, 0);
      /* Move the followers if the leader is elsewhere */
      if (Location(player) != loc)
!       follower_command(player, loc, tprintf("%s #%d", "enter", thing));
      break;
    }
  }
***************
*** 717,723 ****
    }
    enter_room(player, Location(loc), 0);
    if (Location(player) != loc)
!     follower_command(player, loc, ccom);
  }
  
  dbref
--- 716,722 ----
    }
    enter_room(player, Location(loc), 0);
    if (Location(player) != loc)
!     follower_command(player, loc, (char *) "leave");
  }
  
  dbref
***************
*** 1192,1198 ****
--- 1191,1201 ----
    ATTR *a;
    char *s, *sp;
    char tbuf1[BUFFER_LEN];
+   char combuf[BUFFER_LEN];
  
+   if (!com || !*com)
+     return;
+   strcpy(combuf, com);
    a = atr_get_noparent(leader, "FOLLOWERS");
    if (!a)
      return;			/* No followers */
***************
*** 1207,1213 ****
  	 See_All(follower))) {
        /* This is a follower who was in the room with the leader. Follow. */
        notify_format(follower, T("You follow %s."), Name(leader));
!       process_command(follower, com, follower, 0);
      }
    }
  }
--- 1210,1216 ----
  	 See_All(follower))) {
        /* This is a follower who was in the room with the leader. Follow. */
        notify_format(follower, T("You follow %s."), Name(leader));
!       process_command(follower, combuf, follower, 0);
      }
    }
  }
*** 1_7_4.138/src/match.c Tue, 03 Jul 2001 13:25:37 -0500 dunemush (pennmush/c/2_match.c 1.22 660)
--- 1_7_4.157(w)/src/match.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/c/2_match.c 1.24 660)
***************
*** 463,471 ****
    if (!IsRoom(loc))
      return NOTHING;
    absolute = match_absolute(match_name);
-   if (!controls(match_who, absolute)) {
-     absolute = NOTHING;
-   }
    DOLIST(exit_tmp, Exits(loc)) {
      if (exit_tmp == absolute) {
        the_match = exit_tmp;
--- 463,468 ----
*** 1_7_4.138/src/ident.c Sat, 28 Jul 2001 09:05:37 -0500 dunemush (pennmush/c/8_ident.c 1.19.1.3 660)
--- 1_7_4.157(w)/src/ident.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/c/8_ident.c 1.19.1.4 660)
***************
*** 251,264 ****
  #endif
  {
    ident_t *id;
-   int res;
  #ifndef WIN32
    int tmperrno;
  #endif
-   fd_set rs, ws, es;
    char host[NI_MAXHOST];
    union sockaddr_u myinterface;
-   struct timeval to;
  
    if ((id = (ident_t *) malloc(sizeof(*id))) == 0)
      return 0;
--- 251,261 ----
*** 1_7_4.138/src/game.c Sat, 07 Jul 2001 15:24:04 -0500 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.3 660)
--- 1_7_4.157(w)/src/game.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1.2.1.1.1.2.1.1.4 660)
***************
*** 110,119 ****
  static FILE *db_open_write _((const char *filename));
  static void db_close _((FILE * f));
  void do_readcache _((dbref player));
- void set_interp _((dbref player, dbref cause, char const *obj,
- 		   char const *attrib, char const *val, int from_port));
- int test_set _((dbref player, dbref cause, char const *command,
- 		char *arg1, char *arg2, int from_port));
  char **argv_hack _((dbref player, dbref cause, char const *arg,
  		    char *fargs[], int eflags));
  int check_alias _((const char *command, const char *list));
--- 110,115 ----
*** 1_7_4.138/src/funstr.c Mon, 18 Jun 2001 10:36:58 -0500 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.5 660)
--- 1_7_4.157(w)/src/funstr.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2.1.4.1.6 660)
***************
*** 179,194 ****
  {
    char amax[BUFFER_LEN];
    char *c;
!   int j;
! 
  
!   strcpy(amax, remove_markup(args[0]));
    for (j = 1; j < nargs; j++) {
!     c = remove_markup(args[j]);
!     if (strcmp(amax, c) < 0)
!       strcpy(amax, c);
    }
!   safe_str(amax, buff, bp);
  }
  
  /* ARGSUSED */
--- 179,197 ----
  {
    char amax[BUFFER_LEN];
    char *c;
!   int j, m = 0;
!   Size_t len;
  
!   c = remove_markup(args[0], &len);
!   memcpy(amax, c, len);
    for (j = 1; j < nargs; j++) {
!     c = remove_markup(args[j], &len);
!     if (strcmp(amax, c) < 0) {
!       memcpy(amax, c, len);
!       m = j;
!     }
    }
!   safe_str(args[m], buff, bp);
  }
  
  /* ARGSUSED */
***************
*** 196,210 ****
  {
    char amin[BUFFER_LEN];
    char *c;
!   int j;
  
!   strcpy(amin, remove_markup(args[0]));
    for (j = 1; j < nargs; j++) {
!     c = remove_markup(args[j]);
!     if (strcmp(amin, c) > 0)
!       strcpy(amin, c);
    }
!   safe_str(amin, buff, bp);
  }
  
  /* ARGSUSED */
--- 199,217 ----
  {
    char amin[BUFFER_LEN];
    char *c;
!   int j, m = 0;
!   Size_t len;
  
!   c = remove_markup(args[0], &len);
!   memcpy(amin, c, len);
    for (j = 1; j < nargs; j++) {
!     c = remove_markup(args[j], &len);
!     if (strcmp(amin, c) > 0) {
!       memcpy(amin, c, len);
!       m = j;
!     }
    }
!   safe_str(args[m], buff, bp);
  }
  
  /* ARGSUSED */
***************
*** 354,363 ****
  FUNCTION(fun_comp)
  {
    int x;
!   char left[BUFFER_LEN];
  
!   strcpy(left, remove_markup(args[0]));
!   x = strcmp(left, remove_markup(args[1]));
    if (x > 0)
      safe_chr('1', buff, bp);
    else if (x < 0)
--- 361,372 ----
  FUNCTION(fun_comp)
  {
    int x;
!   char left[BUFFER_LEN], *t;
!   int len;
  
!   t = remove_markup(args[0], &len);
!   memcpy(left, t, len);
!   x = strcmp(left, remove_markup(args[1], NULL));
    if (x > 0)
      safe_chr('1', buff, bp);
    else if (x < 0)
***************
*** 369,378 ****
  /* ARGSUSED */
  FUNCTION(fun_pos)
  {
    char *pos;
!   pos = strstr(args[1], args[0]);
    if (pos)
!     safe_integer(pos - args[1] + 1, buff, bp);
    else
      safe_str("#-1", buff, bp);
  }
--- 378,392 ----
  /* ARGSUSED */
  FUNCTION(fun_pos)
  {
+   char tbuf[BUFFER_LEN];
    char *pos;
!   Size_t len;
! 
!   pos = remove_markup(args[1], &len);
!   memcpy(tbuf, pos, len);
!   pos = strstr(tbuf, remove_markup(args[0], NULL));
    if (pos)
!     safe_integer(pos - tbuf + 1, buff, bp);
    else
      safe_str("#-1", buff, bp);
  }
***************
*** 380,387 ****
  /* ARGSUSED */
  FUNCTION(fun_strmatch)
  {
    /* matches a wildcard pattern for an _entire_ string */
!   safe_boolean(quick_wild(args[1], args[0]), buff, bp);
  }
  
  /* ARGSUSED */
--- 394,407 ----
  /* ARGSUSED */
  FUNCTION(fun_strmatch)
  {
+   char tbuf[BUFFER_LEN];
+   char *t;
+   Size_t len;
    /* matches a wildcard pattern for an _entire_ string */
! 
!   t = remove_markup(args[0], &len);
!   memcpy(tbuf, t, len);
!   safe_boolean(quick_wild(remove_markup(args[1], NULL), tbuf), buff, bp);
  }
  
  /* ARGSUSED */
***************
*** 653,658 ****
--- 673,679 ----
    char *oldbp;
    char start, end;
    char letters[BUFFER_LEN];
+   Size_t len;
  
    if (nargs >= 3) {
      if (!delim_check(buff, bp, nargs, args, 3, &start))
***************
*** 679,685 ****
    tptr[1] = wenv[1];
    wenv[1] = place;
  
!   strcpy(letters, remove_markup(args[1]));
  
    lp = trim_space_sep(letters, ' ');
    if (nargs >= 3) {
--- 700,707 ----
    tptr[1] = wenv[1];
    wenv[1] = place;
  
!   ap = remove_markup(args[1], &len);
!   memcpy(letters, ap, len);
  
    lp = trim_space_sep(letters, ' ');
    if (nargs >= 3) {
***************
*** 1187,1193 ****
  
    char *cp;
  
!   cp = remove_markup(args[0]);
    safe_str(cp, buff, bp);
  }
  
--- 1209,1215 ----
  
    char *cp;
  
!   cp = remove_markup(args[0], NULL);
    safe_str(cp, buff, bp);
  }
  
*** 1_7_4.138/src/funmisc.c Sat, 07 Jul 2001 21:06:09 -0500 dunemush (pennmush/c/14_funmisc.c 1.28 660)
--- 1_7_4.157(w)/src/funmisc.c Thu, 06 Sep 2001 10:40:58 -0500 dunemush (pennmush/c/14_funmisc.c 1.30 660)
***************
*** 206,211 ****
--- 206,212 ----
    unsigned int die;
    unsigned int count;
    unsigned int total = 0;
+   int show_all = 0, first = 1;
  
    if (!is_uinteger(args[0]) || !is_uinteger(args[1])) {
      safe_str(T(e_uints), buff, bp);
***************
*** 213,230 ****
    }
    n = parse_uinteger(args[0]);
    die = parse_uinteger(args[1]);
  
    if (n == 0 || n > 20) {
      safe_str(T("#-1 NUMBER OUT OF RANGE"), buff, bp);
      return;
    }
!   for (count = 0; count < n; count++)
!     total += get_random_long(1, die);
  
!   safe_str(unparse_uinteger(total), buff, bp);
  }
  
- 
  /* ARGSUSED */
  FUNCTION(fun_switch)
  {
--- 214,242 ----
    }
    n = parse_uinteger(args[0]);
    die = parse_uinteger(args[1]);
+   if (nargs == 3)
+     show_all = parse_boolean(args[2]);
  
    if (n == 0 || n > 20) {
      safe_str(T("#-1 NUMBER OUT OF RANGE"), buff, bp);
      return;
    }
!   if (show_all) {
!     for (count = 0; count < n; count++) {
!       if (first)
! 	first = 0;
!       else
! 	safe_chr(' ', buff, bp);
!       safe_str(unparse_uinteger(get_random_long(1, die)), buff, bp);
!     }
!   } else {
!     for (count = 0; count < n; count++)
!       total += get_random_long(1, die);
  
!     safe_str(unparse_uinteger(total), buff, bp);
!   }
  }
  
  /* ARGSUSED */
  FUNCTION(fun_switch)
  {
***************
*** 378,384 ****
    tbuf1[2] = '\0';
    tbuf1[3] = '\0';
    p = tbuf1;
!   q = upcasestr(remove_markup(str));
    /* First character is just copied */
    *p = *q++;
    /* Special case for PH->F */
--- 390,396 ----
    tbuf1[2] = '\0';
    tbuf1[3] = '\0';
    p = tbuf1;
!   q = upcasestr(remove_markup(str, NULL));
    /* First character is just copied */
    *p = *q++;
    /* Special case for PH->F */
*** 1_7_4.138/src/funlist.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.2.1.3 660)
--- 1_7_4.157(w)/src/funlist.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.2.1.5 660)
***************
*** 2471,2477 ****
      re_subpatterns = subpatterns;
      process_expression(buff, bp, &obp, executor, caller, enactor,
  		       PE_DEFAULT | PE_DOLLAR, PT_DEFAULT, pe_info);
!     if (*bp == oldbp && pe_info->fun_invocations == funccount)
        break;
      oldbp = *bp;
      funccount = pe_info->fun_invocations;
--- 2471,2478 ----
      re_subpatterns = subpatterns;
      process_expression(buff, bp, &obp, executor, caller, enactor,
  		       PE_DEFAULT | PE_DOLLAR, PT_DEFAULT, pe_info);
!     if ((*bp == (buff + BUFFER_LEN - 1))
! 	&& (pe_info->fun_invocations == funccount))
        break;
      oldbp = *bp;
      funccount = pe_info->fun_invocations;
*** 1_7_4.138/src/fundb.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1.2.1.2.1.1.1.1.3 660)
--- 1_7_4.157(w)/src/fundb.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1.2.1.2.1.1.1.1.4 660)
***************
*** 1484,1490 ****
      safe_str(T(e_perm), buff, bp);
      return;
    }
!   safe_dbref(do_clone(executor, args[0], 0), buff, bp);
  }
  
  
--- 1484,1490 ----
      safe_str(T(e_perm), buff, bp);
      return;
    }
!   safe_dbref(do_clone(executor, args[0], NULL, 0), buff, bp);
  }
  
  
*** 1_7_4.138/src/function.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/c/18_function.c 1.29.1.14.1.3.1.5 660)
--- 1_7_4.157(w)/src/function.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/18_function.c 1.29.1.14.1.3.1.6 660)
***************
*** 210,216 ****
    {"DECRYPT", fun_decrypt, 2, 2, FN_REG},
    {"DEFAULT", fun_default, 2, 2, FN_NOPARSE},
    {"DELETE", fun_delete, 3, 3, FN_REG},
!   {"DIE", fun_die, 2, 2, FN_REG},
    {"DIG", fun_dig, 1, 3, FN_REG},
    {"DIST2D", fun_dist2d, 4, 4, FN_REG},
    {"DIST3D", fun_dist3d, 6, 6, FN_REG},
--- 210,216 ----
    {"DECRYPT", fun_decrypt, 2, 2, FN_REG},
    {"DEFAULT", fun_default, 2, 2, FN_NOPARSE},
    {"DELETE", fun_delete, 3, 3, FN_REG},
!   {"DIE", fun_die, 2, 3, FN_REG},
    {"DIG", fun_dig, 1, 3, FN_REG},
    {"DIST2D", fun_dist2d, 4, 4, FN_REG},
    {"DIST3D", fun_dist3d, 6, 6, FN_REG},
*** 1_7_4.138/src/flags.c Thu, 19 Jul 2001 14:15:24 -0500 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.2 660)
--- 1_7_4.157(w)/src/flags.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/20_flags.c 1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.2.1.1.1.1.1.2.2.2.2.1.2.1.1.3 660)
***************
*** 142,148 ****
  #endif
    {"SUSPECT", 's', TYPE_PLAYER, PLAYER_SUSPECT, F_WIZARD | F_MDARK,
     F_WIZARD | F_MDARK},
!   {"PARANOID", 'p', TYPE_PLAYER, PLAYER_PARANOID, F_ANY, F_ANY},
  
    {"MONITOR", 'M', TYPE_THING, THING_LISTEN, F_ANY, F_ANY},
    {"DESTROY_OK", 'd', TYPE_THING, THING_DEST_OK, F_ANY, F_ANY},
--- 142,149 ----
  #endif
    {"SUSPECT", 's', TYPE_PLAYER, PLAYER_SUSPECT, F_WIZARD | F_MDARK,
     F_WIZARD | F_MDARK},
!   {"PARANOID", 'p', TYPE_PLAYER, PLAYER_PARANOID, F_ANY | F_ODARK,
!    F_ANY | F_ODARK},
  
    {"MONITOR", 'M', TYPE_THING, THING_LISTEN, F_ANY, F_ANY},
    {"DESTROY_OK", 'd', TYPE_THING, THING_DEST_OK, F_ANY, F_ANY},
*** 1_7_4.138/src/extchat.c Sat, 07 Jul 2001 15:24:04 -0500 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.7 660)
--- 1_7_4.157(w)/src/extchat.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.9.1.2 660)
***************
*** 718,731 ****
    if (!name || !*name)
      return CMATCH_NONE;
    for (p = channels; p; p = p->next) {
!     if (!strcasecmp(name, ChanName(p))) {
!       *chan = p;
!       return CMATCH_EXACT;
!     }
!     if (string_prefix(ChanName(p), name) && onchannel(player, p)) {
!       if (!*chan)
  	*chan = p;
!       count++;
      }
    }
    switch (count) {
--- 718,733 ----
    if (!name || !*name)
      return CMATCH_NONE;
    for (p = channels; p; p = p->next) {
!     if (onchannel(player, p)) {
!       if (!strcasecmp(name, ChanName(p))) {
  	*chan = p;
! 	return CMATCH_EXACT;
!       }
!       if (string_prefix(ChanName(p), name) && onchannel(player, p)) {
! 	if (!*chan)
! 	  *chan = p;
! 	count++;
!       }
      }
    }
    switch (count) {
***************
*** 944,952 ****
      notify(player, T("Guests are not allowed to join channels."));
      return;
    }
    switch (find_channel_partial_off(name, &chan, player)) {
    case CMATCH_NONE:
!     notify(player, T("CHAT: I don't recognize that channel."));
      return;
    case CMATCH_AMBIG:
      notify(player, T("CHAT: I don't know which channel you mean."));
--- 946,960 ----
      notify(player, T("Guests are not allowed to join channels."));
      return;
    }
+ 
+ 
    switch (find_channel_partial_off(name, &chan, player)) {
    case CMATCH_NONE:
!     if (find_channel_partial_on(name, &chan, player))
!       notify_format(player, T("CHAT: You are already on channel <%s>"),
! 		    ChanName(chan));
!     else
!       notify(player, T("CHAT: I don't recognize that channel."));
      return;
    case CMATCH_AMBIG:
      notify(player, T("CHAT: I don't know which channel you mean."));
***************
*** 999,1005 ****
    }
    switch (find_channel_partial_on(name, &chan, player)) {
    case CMATCH_NONE:
!     notify(player, T("CHAT: I don't recognize that channel."));
      return;
    case CMATCH_AMBIG:
      notify(player, T("CHAT: I don't know which channel you mean."));
--- 1007,1018 ----
    }
    switch (find_channel_partial_on(name, &chan, player)) {
    case CMATCH_NONE:
!     if (find_channel_partial_off(name, &chan, player)
! 	&& Chan_Can_See(chan, player))
!       notify_format(player, T("CHAT: You are not on channel <%s>"),
! 		    ChanName(chan));
!     else
!       notify(player, T("CHAT: I don't recognize that channel."));
      return;
    case CMATCH_AMBIG:
      notify(player, T("CHAT: I don't know which channel you mean."));
***************
*** 1035,1044 ****
        notify(player, T("Don't you have anything to say?"));
      return 0;
    }
    if (find_channel_partial_on(name, &c, player) == CMATCH_NONE) {
!     if (source)
!       notify(player, T("No such channel."));
!     return 0;
    }
    do_chat(player, c, msg);
    return 1;
--- 1048,1062 ----
        notify(player, T("Don't you have anything to say?"));
      return 0;
    }
+   /* First try to find a channel that the player's on. If that fails,
+    * look for one that the player's not on.
+    */
    if (find_channel_partial_on(name, &c, player) == CMATCH_NONE) {
!     if (find_channel(name, &c) == CMATCH_NONE) {
!       if (source)
! 	notify(player, T("No such channel."));
!       return 0;
!     }
    }
    do_chat(player, c, msg);
    return 1;
*** 1_7_4.138/src/create.c Mon, 18 Jun 2001 10:36:58 -0500 dunemush (pennmush/c/27_create.c 1.27.1.2 660)
--- 1_7_4.157(w)/src/create.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/27_create.c 1.27.1.3 660)
***************
*** 480,488 ****
  }
  
  dbref
! do_clone(player, name, preserve)
      dbref player;
      char *name;
      int preserve;
  {
    dbref clone, thing;
--- 480,489 ----
  }
  
  dbref
! do_clone(player, name, newname, preserve)
      dbref player;
      char *name;
+     char *newname;
      int preserve;
  {
    dbref clone, thing;
***************
*** 492,497 ****
--- 493,502 ----
      notify(player, T("Guests are not allowed to build."));
      return NOTHING;
    }
+   if (*newname && !ok_name(newname)) {
+     notify(player, T("That is not a reasonable name."));
+     return NOTHING;
+   }
    thing = noisy_match_result(player, name, NOTYPE, MAT_EVERYTHING);
    if ((thing == NOTHING))
      return NOTHING;
***************
*** 524,530 ****
        Chanlist(clone) = NULL;
  #endif
        Name(clone) = NULL;
!       set_name(clone, Name(thing));
        s_Pennies(clone, Pennies(thing));
        atr_cpy(clone, thing);
        {
--- 529,538 ----
        Chanlist(clone) = NULL;
  #endif
        Name(clone) = NULL;
!       if (*newname)
! 	set_name(clone, newname);
!       else
! 	set_name(clone, Name(thing));
        s_Pennies(clone, Pennies(thing));
        atr_cpy(clone, thing);
        {
***************
*** 589,595 ****
        clone = new_object();
        memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
        Name(clone) = NULL;
!       set_name(clone, Name(thing));
        atr_cpy(clone, thing);
        {
  	struct lock_list *ll;
--- 597,606 ----
        clone = new_object();
        memcpy(REFDB(clone), REFDB(thing), sizeof(struct object));
        Name(clone) = NULL;
!       if (*newname)
! 	set_name(clone, newname);
!       else
! 	set_name(clone, Name(thing));
        atr_cpy(clone, thing);
        {
  	struct lock_list *ll;
***************
*** 646,652 ****
        return NOTHING;
      }
      strcpy(dbnum, unparse_dbref(Location(thing)));
!     clone = do_real_open(player, Name(thing), dbnum, NOTHING);
      if (!GoodObject(clone))
        return NOTHING;
      else {
--- 657,666 ----
        return NOTHING;
      }
      strcpy(dbnum, unparse_dbref(Location(thing)));
!     if (*newname)
!       clone = do_real_open(player, newname, dbnum, NOTHING);
!     else
!       clone = do_real_open(player, Name(thing), dbnum, NOTHING);
      if (!GoodObject(clone))
        return NOTHING;
      else {
*** 1_7_4.138/src/conf.c Sat, 07 Jul 2001 21:06:09 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.2 660)
--- 1_7_4.157(w)/src/conf.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3 660)
***************
*** 1208,1213 ****
--- 1208,1219 ----
    notify(player, T(" DNS and ident lookups are handled by the MUSH process."));
  #endif
  
+ #ifdef NT_TCP
+   notify(player, T(" Windows NT native TCP/IP networking functions in use."));
+ #else
+   notify(player, T(" BSD sockets networking in use."));
+ #endif
+ 
    notify(player, T(" Floating point functions are enabled."));
  
  #ifdef FUNCTION_SIDE_EFFECTS
*** 1_7_4.138/src/command.c Mon, 09 Jul 2001 09:04:12 -0500 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.1 660)
--- 1_7_4.157(w)/src/command.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5 660)
***************
*** 40,46 ****
  HASHTAB htab_command;
  HASHTAB htab_reserved_aliases;
  
- void test_command _((dbref player, switch_mask *sw, char *args));
  static char *command_isattr _((char *command));
  static int command_check _((dbref player, COMMAND_INFO *cmd));
  static int switch_find _((COMMAND_INFO *cmd, char *sw));
--- 40,45 ----
***************
*** 68,74 ****
    {"@CEMIT", "NOEVAL NOISY", cmd_cemit,
     CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
    {"@CHANNEL",
!    "LIST ADD DELETE RENAME NAME PRIVS QUIET NOISY DECOMPILE DESC CHOWN WIPE MUTE UNMUTE GAG UNGAG HIDE UNHIDE WHAT TITLE BRIEF",
     cmd_channel,
     CMD_T_ANY | CMD_T_SWITCHES | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
    {"@CHAT", NULL, cmd_chat, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0,
--- 67,73 ----
    {"@CEMIT", "NOEVAL NOISY", cmd_cemit,
     CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
    {"@CHANNEL",
!    "LIST ADD DELETE RENAME NAME PRIVS QUIET NOISY DECOMPILE DESCRIBE CHOWN WIPE MUTE UNMUTE GAG UNGAG HIDE UNHIDE WHAT TITLE BRIEF",
     cmd_channel,
     CMD_T_ANY | CMD_T_SWITCHES | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
    {"@CHAT", NULL, cmd_chat, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0,
***************
*** 89,95 ****
     0, 0, 0},
    {"@CREATE", NULL, cmd_create, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
     0, 0, 0},
!   {"@CLONE", "PRESERVE", cmd_clone, CMD_T_ANY | CMD_T_NOGAGGED, 0, 0, 0},
  #ifdef CHAT_SYSTEM
  
    {"@CLOCK", "JOIN SPEAK MOD SEE HIDE", cmd_clock,
--- 88,95 ----
     0, 0, 0},
    {"@CREATE", NULL, cmd_create, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED,
     0, 0, 0},
!   {"@CLONE", "PRESERVE", cmd_clone, CMD_T_ANY | CMD_T_NOGAGGED | CMD_T_EQSPLIT,
!    0, 0, 0},
  #ifdef CHAT_SYSTEM
  
    {"@CLOCK", "JOIN SPEAK MOD SEE HIDE", cmd_clock,
***************
*** 160,166 ****
  #ifdef MAIL_ALIASES
  
    {"@MALIAS",
!    "SET CREATE DESTROY DESC RENAME STATS CHOWN NUKE ADD REMOVE LIST ALL MEMBERS USEFLAG SEEFLAG",
     cmd_malias, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
  #endif
  #endif
--- 160,166 ----
  #ifdef MAIL_ALIASES
  
    {"@MALIAS",
!    "SET CREATE DESTROY DESCRIBE RENAME STATS CHOWN NUKE ADD REMOVE LIST ALL WHO MEMBERS USEFLAG SEEFLAG",
     cmd_malias, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, 0, 0, 0},
  #endif
  #endif
*** 1_7_4.138/src/cmds.c Fri, 11 May 2001 15:40:56 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2 660)
--- 1_7_4.157(w)/src/cmds.c Thu, 06 Sep 2001 10:40:57 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3 660)
***************
*** 125,131 ****
      do_chan_admin(player, arg_left, "n", 4);
    else if (SW_ISSET(sw, SWITCH_DECOMPILE))
      do_chan_decompile(player, arg_left, SW_ISSET(sw, SWITCH_BRIEF));
!   else if (SW_ISSET(sw, SWITCH_DESC))
      do_chan_desc(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_TITLE))
      do_chan_title(player, arg_left, arg_right);
--- 125,131 ----
      do_chan_admin(player, arg_left, "n", 4);
    else if (SW_ISSET(sw, SWITCH_DECOMPILE))
      do_chan_decompile(player, arg_left, SW_ISSET(sw, SWITCH_BRIEF));
!   else if (SW_ISSET(sw, SWITCH_DESCRIBE))
      do_chan_desc(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_TITLE))
      do_chan_title(player, arg_left, arg_right);
***************
*** 224,232 ****
  
  COMMAND (cmd_clone) {
    if (SW_ISSET(sw, SWITCH_PRESERVE))
!     do_clone(player, arg_left, SWITCH_PRESERVE);
    else
!     do_clone(player, arg_left, SWITCH_NONE);
  }
  
  #ifdef CHAT_SYSTEM
--- 224,232 ----
  
  COMMAND (cmd_clone) {
    if (SW_ISSET(sw, SWITCH_PRESERVE))
!     do_clone(player, arg_left, arg_right, SWITCH_PRESERVE);
    else
!     do_clone(player, arg_left, arg_right, SWITCH_NONE);
  }
  
  #ifdef CHAT_SYSTEM
***************
*** 520,526 ****
      do_malias_list(player);
    else if (SW_ISSET(sw, SWITCH_ALL))
      do_malias_all(player);
!   else if (SW_ISSET(sw, SWITCH_MEMBERS))
      do_malias_members(player, arg_left);
    else if (SW_ISSET(sw, SWITCH_CREATE))
      do_malias_create(player, arg_left, arg_right);
--- 520,526 ----
      do_malias_list(player);
    else if (SW_ISSET(sw, SWITCH_ALL))
      do_malias_all(player);
!   else if (SW_ISSET(sw, SWITCH_MEMBERS) || SW_ISSET(sw, SWITCH_WHO))
      do_malias_members(player, arg_left);
    else if (SW_ISSET(sw, SWITCH_CREATE))
      do_malias_create(player, arg_left, arg_right);
***************
*** 532,538 ****
      do_malias_add(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_REMOVE))
      do_malias_remove(player, arg_left, arg_right);
!   else if (SW_ISSET(sw, SWITCH_DESC))
      do_malias_desc(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_RENAME))
      do_malias_rename(player, arg_left, arg_right);
--- 532,538 ----
      do_malias_add(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_REMOVE))
      do_malias_remove(player, arg_left, arg_right);
!   else if (SW_ISSET(sw, SWITCH_DESCRIBE))
      do_malias_desc(player, arg_left, arg_right);
    else if (SW_ISSET(sw, SWITCH_RENAME))
      do_malias_rename(player, arg_left, arg_right);
*** 1_7_4.138/src/bsd.c Fri, 20 Jul 2001 11:11:16 -0500 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.9 660)
--- 1_7_4.157(w)/src/bsd.c Thu, 06 Sep 2001 10:40:56 -0500 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13 660)
***************
*** 1,11 ****
  /* bsd.c */
  
- /* Windows NT users may uncomment this define to get the native network i/o
-  * thread model instead of the bsd socket layer, for vastly better
-  * performance. Doesn't work on Win 95/98. By Nick Gammon
-  */
- /* #define NT_TCP */
- 
  #include "copyrite.h"
  #include "config.h"
  
--- 1,5 ----
***************
*** 1027,1034 ****
    {203, "&Euml;"},
    {232, "&egrave;"},
    {233, "&eacute;"},
!   {224, "&ecirc;"},
!   {225, "&euml;"},
  
  
    /* Accented i's */
--- 1021,1028 ----
    {203, "&Euml;"},
    {232, "&egrave;"},
    {233, "&eacute;"},
!   {234, "&ecirc;"},
!   {235, "&euml;"},
  
  
    /* Accented i's */
***************
*** 4528,4534 ****
      notify(player, T("Why would you want to do that?"));
      return;
    }
!   strncpy(buf, remove_markup(message), DOING_LEN - 1);
  
    /* now smash undesirable characters and truncate */
    for (i = 0; i < DOING_LEN; i++) {
--- 4522,4528 ----
      notify(player, T("Why would you want to do that?"));
      return;
    }
!   strncpy(buf, remove_markup(message, NULL), DOING_LEN - 1);
  
    /* now smash undesirable characters and truncate */
    for (i = 0; i < DOING_LEN; i++) {
***************
*** 4562,4568 ****
      notify(player, T("Who do you think you are, Gallup?"));
      return;
    }
!   strncpy(poll_msg, remove_markup(message), DOING_LEN - 1);
    for (i = 0; i < DOING_LEN; i++) {
      if ((poll_msg[i] == '\r') || (poll_msg[i] == '\n') ||
  	(poll_msg[i] == '\t') || (poll_msg[i] == BEEP_CHAR))
--- 4556,4562 ----
      notify(player, T("Who do you think you are, Gallup?"));
      return;
    }
!   strncpy(poll_msg, remove_markup(message, NULL), DOING_LEN - 1);
    for (i = 0; i < DOING_LEN; i++) {
      if ((poll_msg[i] == '\r') || (poll_msg[i] == '\n') ||
  	(poll_msg[i] == '\t') || (poll_msg[i] == BEEP_CHAR))
***************
*** 5377,5382 ****
--- 5371,5378 ----
    union sockaddr_u addr;
    int nLen, addr_len;
    struct hostname_info *hi;
+   char *socket_ident;
+   char *chp;
  /*  int     i; */
    BOOL b;
  
***************
*** 5403,5411 ****
      /*  */
  
      bp = tbuf2;
!     safe_str((const char *) ip_convert(&addr.addr, nLen), tbuf2, &bp);
      *bp = '\0';
      bp = tbuf1;
      addr_len = sizeof(addr);
      hi = hostname_convert(&addr.addr, addr_len);
      safe_str(hi ? hi->hostname : "", tbuf1, &bp);
--- 5399,5421 ----
      /*  */
  
      bp = tbuf2;
!     hi = ip_convert(&addr.addr, addr_len);
!     safe_str(hi ? hi->hostname : "", tbuf2, &bp);
      *bp = '\0';
      bp = tbuf1;
+     if (USE_IDENT) {
+       int timeout = IDENT_TIMEOUT;
+       socket_ident = ident_id(socketClient, &timeout);
+       if (socket_ident) {
+ 	/* Truncate at first non-printable character */
+ 	for (chp = socket_ident; *chp && isprint(*chp); chp++) ;
+ 	*chp = '\0';
+ 	safe_str(socket_ident, tbuf1, &bp);
+ 	safe_chr('@', tbuf1, &bp);
+ 	free(socket_ident);
+       }
+     }
+ 
      addr_len = sizeof(addr);
      hi = hostname_convert(&addr.addr, addr_len);
      safe_str(hi ? hi->hostname : "", tbuf1, &bp);
*** 1_7_4.138/hdrs/version.h Sat, 28 Jul 2001 09:05:37 -0500 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.7 660)
--- 1_7_4.157(w)/hdrs/version.h Thu, 06 Sep 2001 10:41:01 -0500 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9 660)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.4 patchlevel 8 [07/22/2001]"
! #define SHORTVN "PennMUSH 1.7.4p8"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.4 patchlevel 9 [09/04/2001]"
! #define SHORTVN "PennMUSH 1.7.4p9"
*** 1_7_4.138/hdrs/externs.h Tue, 03 Jul 2001 13:25:37 -0500 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.6 660)
--- 1_7_4.157(w)/hdrs/externs.h Thu, 06 Sep 2001 10:40:59 -0500 dunemush (pennmush/d/16_externs.h 1.1.1.53.1.2.1.8 660)
***************
*** 161,167 ****
  extern void do_open _((dbref player, const char *direction, char **links));
  extern void do_link _((dbref player, const char *name, const char *room_name));
  extern void do_unlink _((dbref player, const char *name));
! extern dbref do_clone _((dbref player, char *name, int preserve));
  
  /* From game.c */
  extern void report _((void));
--- 161,168 ----
  extern void do_open _((dbref player, const char *direction, char **links));
  extern void do_link _((dbref player, const char *name, const char *room_name));
  extern void do_unlink _((dbref player, const char *name));
! extern dbref do_clone
! _((dbref player, char *name, char *newname, int preserve));
  
  /* From game.c */
  extern void report _((void));
***************
*** 289,295 ****
  #define vsnprintf _vsnprintf
  #endif
  #endif
! extern char *remove_markup _((const char *orig));
  extern char *skip_leading_ansi _((const char *s));
  typedef struct {
    char text[BUFFER_LEN];
--- 290,296 ----
  #define vsnprintf _vsnprintf
  #endif
  #endif
! extern char *remove_markup _((const char *orig, Size_t * stripped_len));
  extern char *skip_leading_ansi _((const char *s));
  typedef struct {
    char text[BUFFER_LEN];
*** 1_7_4.138/hdrs/conf.h Sat, 07 Jul 2001 21:06:09 -0500 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.1 660)
--- 1_7_4.157(w)/hdrs/conf.h Thu, 06 Sep 2001 10:40:59 -0500 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.2 660)
***************
*** 52,58 ****
  
  /* These CAN be modified, but it's heavily NOT suggested */
  #define PUEBLO_SEND "</xch_mudtext><img xch_mode=purehtml><xch_page clear=text><body bgcolor=#000000 fgcolor=#C0C0C0>\n"
! #define PUEBLO_HELLO "This world is Pueblo 1.10 Enhanced.  See http://www.chaco.com/pueblo/\r\n"
  
  /*----- intrface.c stuff -----*/
  
--- 52,58 ----
  
  /* These CAN be modified, but it's heavily NOT suggested */
  #define PUEBLO_SEND "</xch_mudtext><img xch_mode=purehtml><xch_page clear=text><body bgcolor=#000000 fgcolor=#C0C0C0>\n"
! #define PUEBLO_HELLO "This world is Pueblo 1.10 Enhanced.\r\n"
  
  /*----- intrface.c stuff -----*/
  
*** 1_7_4.138/options.h.dist Sat, 30 Jun 2001 08:59:12 -0500 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.2 600)
--- 1_7_4.157(w)/options.h.dist Tue, 31 Jul 2001 16:23:22 -0500 dunemush (pennmush/d/33_options.h. 1.10.1.1.1.1.1.2.1.1.1.1.1.1.1.3 600)
***************
*** 133,138 ****
--- 133,144 ----
   */
  /* #define INFO_SLAVE /* */
  
+ /* Windows NT users may uncomment this define to get the native network i/o
+  * thread model instead of the bsd socket layer, for vastly better
+  * performance. Doesn't work on Win 95/98. By Nick Gammon
+  */
+ /* #define NT_TCP */
+ 
  /*------------------------- MUSH Features ----------------------*/
  
  /* This option is to control whether functions may have side effects