This is patch07 to PennMUSH 1.7.2. After applying this patch, you will
have version 1.7.2p7. 

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p0 < 1.7.2-patch07	
	make

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

Then @shutdown and restart your MUSH.

In this patch:
  * Bugfixes for tiny_math and mid()
  * @decompile shows powers

 - Alan/Javelin

Index: Patchlevel
Prereq: 1.7.2p6
*** Patchlevel.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/h/12_Patchlevel 1.7 640) 0.22
--- Patchlevel      Tue, 10 Mar 1998 15:24:26 -0600 dunemush (pennmush/h/12_Patchlevel 1.7 640) 0.22(w)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.2p6
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.2p7
Index: CHANGES
*** CHANGES.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/h/9_CHANGES 1.10.1.1 640) 0.22
--- CHANGES      Tue, 10 Mar 1998 15:24:13 -0600 dunemush (pennmush/h/9_CHANGES 1.10.1.1 640) 0.22(w)
***************
*** 15,20 ****
--- 15,32 ----
  
  ==========================================================================
  
+ Version 1.7.2 patchlevel 7                    March 10, 1998
+ 
+ Fixes:
+       * Typo fixed in pennflag.hlp. Report by Keith Howell.
+       * Bug in mid() that could cause crashes on some OS's when using
+         bad arguments fixed. Report by Yanek@DragonStarMUSH. [TAP]
+       * @wait obj=command fails when tiny_math is defined. Report by Yanek.
+       * With tiny_math defined and tiny_booleans not defined, 
+         strings in booleans weren't being treated as 1. Report by Yanek.
+       * @decompile now shows @powers, too. Report by Jonathan Booth.
+ 
+ 
  Version 1.7.2 patchlevel 6                    March 8, 1998
  
  Fixes:
Index: hdrs/externs.h
*** hdrs/externs.h.orig Mon, 23 Feb 1998 14:31:54 -0600 dunemush (pennmush/e/1_externs.h 1.3 640) 0.22
--- hdrs/externs.h      Tue, 10 Mar 1998 15:09:54 -0600 dunemush (pennmush/e/1_externs.h 1.3 640) 0.22(w)
***************
*** 312,317 ****
--- 312,318 ----
  extern void listadd _((struct dblist * head, dbref ref));
  extern void listfree _((struct dblist * head));
  extern int is_number _((const char *str));
+ extern int is_strict_number _((const char *str));
  extern Malloc_t mush_malloc _((int size, const char *check));
  extern void mush_free _((Malloc_t ptr, const char *check));
  extern int getrandom _((int x));
Index: hdrs/version.h
*** hdrs/version.h.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/e/22_version.h 1.7 640) 0.22
--- hdrs/version.h      Tue, 10 Mar 1998 15:24:22 -0600 dunemush (pennmush/e/22_version.h 1.7 640) 0.22(w)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.2 patchlevel 6 [3/8/98]"
! #define SHORTVN "PennMUSH 1.7.2p6"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.2 patchlevel 7 [3/10/98]"
! #define SHORTVN "PennMUSH 1.7.2p7"
Index: src/cque.c
*** src/cque.c.orig Wed, 04 Mar 1998 10:11:19 -0600 dunemush (pennmush/e/40_cque.c 1.2 640) 0.22
--- src/cque.c      Tue, 10 Mar 1998 15:10:08 -0600 dunemush (pennmush/e/40_cque.c 1.2 640) 0.22(w)
***************
*** 642,648 ****
  
    arg2 = strip_braces(cmd);
  
!   if (is_number(arg1)) {
      /* normal wait */
      wait_que(player, atoi(arg1), arg2, cause, NOTHING);
      mush_free(arg2, "strip_braces.buff");
--- 642,648 ----
  
    arg2 = strip_braces(cmd);
  
!   if (is_strict_number(arg1)) {
      /* normal wait */
      wait_que(player, atoi(arg1), arg2, cause, NOTHING);
      mush_free(arg2, "strip_braces.buff");
Index: src/flags.c
*** src/flags.c.orig Mon, 23 Feb 1998 14:31:54 -0600 dunemush (pennmush/e/48_flags.c 1.2 640) 0.22
--- src/flags.c      Tue, 10 Mar 1998 15:21:09 -0600 dunemush (pennmush/e/48_flags.c 1.2 640) 0.22(w)
***************
*** 887,892 ****
--- 887,912 ----
        notify(player, tprintf("@set %s = %s", name, f->name));
  }
  
+ 
+ void
+ decompile_powers(player, thing, name)
+     dbref player;
+     dbref thing;
+     const char *name;
+ {
+   /* print out the powers for a decompile */
+ 
+   POWER *p;
+ 
+   for (p = power_table; p->name; p++) {
+     /* Special case for immortal, which we don't show any more */
+     if (!strcasecmp(p->name, "immortal"))
+       continue;
+     if (Powers(thing) & p->flag)
+       notify(player, tprintf("@power %s = %s", name, p->name));
+   }
+ }
+ 
  int
  convert_flags(player, s, p_mask, p_toggle, p_type)
      dbref player;
Index: src/funlist.c
*** src/funlist.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/f/0_funlist.c 1.1 640) 0.22
--- src/funlist.c      Tue, 10 Mar 1998 15:11:19 -0600 dunemush (pennmush/f/0_funlist.c 1.1 640) 0.22(w)
***************
*** 490,496 ****
    for (i = 0; i < nptrs; i++) {
      switch (sort_type) {
      case NUMERIC_LIST:
!       if (!is_number(ptrs[i])) {
  	/* If we get something non-numeric, switch to an
  	 * alphanumeric guess, unless this is the first
  	 * element and we have a dbref.
--- 490,496 ----
    for (i = 0; i < nptrs; i++) {
      switch (sort_type) {
      case NUMERIC_LIST:
!       if (!is_strict_number(ptrs[i])) {
  	/* If we get something non-numeric, switch to an
  	 * alphanumeric guess, unless this is the first
  	 * element and we have a dbref.
***************
*** 499,505 ****
  	  p = ptrs[i];
  	  if (*p++ != NUMBER_TOKEN)
  	    return ALPHANUM_LIST;
! 	  else if (is_number(p))
  	    sort_type = DBREF_LIST;
  	  else
  	    return ALPHANUM_LIST;
--- 499,505 ----
  	  p = ptrs[i];
  	  if (*p++ != NUMBER_TOKEN)
  	    return ALPHANUM_LIST;
! 	  else if (is_strict_number(p))
  	    sort_type = DBREF_LIST;
  	  else
  	    return ALPHANUM_LIST;
***************
*** 511,517 ****
        break;
  #ifdef FLOATING_POINTS
      case FLOAT_LIST:
!       if (!is_number(ptrs[i]))
  	return ALPHANUM_LIST;
        break;
  #endif
--- 511,517 ----
        break;
  #ifdef FLOATING_POINTS
      case FLOAT_LIST:
!       if (!is_strict_number(ptrs[i]))
  	return ALPHANUM_LIST;
        break;
  #endif
***************
*** 522,528 ****
        p = ptrs[i];
        if (*p++ != NUMBER_TOKEN)
  	return ALPHANUM_LIST;
!       if (!is_number(p))
  	return ALPHANUM_LIST;
        break;
      default:
--- 522,528 ----
        p = ptrs[i];
        if (*p++ != NUMBER_TOKEN)
  	return ALPHANUM_LIST;
!       if (!is_strict_number(p))
  	return ALPHANUM_LIST;
        break;
      default:
Index: src/funstr.c
*** src/funstr.c.orig Sat, 14 Feb 1998 09:54:48 -0600 dunemush (pennmush/f/3_funstr.c 1.2 640) 0.22
--- src/funstr.c      Tue, 10 Mar 1998 15:06:50 -0600 dunemush (pennmush/f/3_funstr.c 1.2 640) 0.22(w)
***************
*** 203,209 ****
      safe_str("#-1 OUT OF RANGE", buff, bp);
      return;
    }
!   if ((pos + len) < BUFFER_LEN)
      args[0][pos + len] = '\0';
    if ((Size_t) pos < strlen(args[0]))
      safe_str(args[0] + pos, buff, bp);
--- 203,209 ----
      safe_str("#-1 OUT OF RANGE", buff, bp);
      return;
    }
!   if (((pos + len) < BUFFER_LEN) && ((pos + len) >= 0))
      args[0][pos + len] = '\0';
    if ((Size_t) pos < strlen(args[0]))
      safe_str(args[0] + pos, buff, bp);
Index: src/look.c
*** src/look.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/f/12_look.c 1.1 640) 0.22
--- src/look.c      Tue, 10 Mar 1998 15:17:50 -0600 dunemush (pennmush/f/12_look.c 1.1 640) 0.22(w)
***************
*** 24,29 ****
--- 24,30 ----
  #include "confmagic.h"
  
  extern void decompile_flags _((dbref player, dbref thing, const char *name));	/* from flags.c */
+ extern void decompile_powers _((dbref player, dbref thing, const char *name));	/* from flags.c */
  
  static void look_exits _((dbref player, dbref loc, const char *exit_name));
  static void look_contents _((dbref player, dbref loc, const char *contents_name));
***************
*** 1348,1353 ****
--- 1349,1355 ----
  
      decompile_locks(player, thing, object);
      decompile_flags(player, thing, object);
+     decompile_powers(player, thing, object);
    }
    if (dbflag != 3) {
      decompile_atrs(player, thing, object, "*", "");
Index: src/parse.c
*** src/parse.c.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/f/22_parse.c 1.2 640) 0.22
--- src/parse.c      Tue, 10 Mar 1998 15:12:18 -0600 dunemush (pennmush/f/22_parse.c 1.2 640) 0.22(w)
***************
*** 92,98 ****
        return 0;
      if (str[0] == '#' && str[1] == '-')		/* check like this so error msgs */
        return 0;			/* are false */
!     if (is_number(str))
        return parse_number(str) != 0;	/* avoid rounding problems */
      while (*str == ' ')
        str++;
--- 92,98 ----
        return 0;
      if (str[0] == '#' && str[1] == '-')		/* check like this so error msgs */
        return 0;			/* are false */
!     if (is_strict_number(str))
        return parse_number(str) != 0;	/* avoid rounding problems */
      while (*str == ' ')
        str++;
***************
*** 154,167 ****
  }
  
  int
! is_number(str)
!     char const *str;
  {
    char const *p = str;
    NVAL val;
!   /* If we're emulating Tiny, anything is a number */
!   if (options.tiny_math)
!     return 1;
    if (!str)
      return 0;
    while (isspace(*str))
--- 154,165 ----
  }
  
  int
! is_strict_number(str)
! char const *str;
  {
    char const *p = str;
    NVAL val;
! 
    if (!str)
      return 0;
    while (isspace(*str))
***************
*** 184,189 ****
--- 182,197 ----
    if ((val > HUGE_NVAL) || (-val > HUGE_NVAL))
      return 0;
    return 1;
+ }
+ 
+ int
+ is_number(str)
+     char const *str;
+ {
+   /* If we're emulating Tiny, anything is a number */
+   if (options.tiny_math)
+     return 1;
+   return is_strict_number(str);
  }
  
  /* Table of interesting characters for process_expression() */
Index: src/plyrlist.c
*** src/plyrlist.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/f/24_plyrlist.c 1.1 640) 0.22
--- src/plyrlist.c      Tue, 10 Mar 1998 15:13:09 -0600 dunemush (pennmush/f/24_plyrlist.c 1.1 640) 0.22(w)
***************
*** 66,72 ****
  
    if (*name == NUMBER_TOKEN) {
      name++;
!     if (!is_number(name))
        return NOTHING;
      p = atoi(name);
      if (!GoodObject(p))
--- 66,72 ----
  
    if (*name == NUMBER_TOKEN) {
      name++;
!     if (!is_strict_number(name))
        return NOTHING;
      p = atoi(name);
      if (!GoodObject(p))
Index: src/wiz.c
*** src/wiz.c.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/f/46_wiz.c 1.5 640) 0.22
--- src/wiz.c      Tue, 10 Mar 1998 15:13:15 -0600 dunemush (pennmush/f/46_wiz.c 1.5 640) 0.22(w)
***************
*** 1116,1122 ****
      notify(player, "You must specify a value.");
      return;
    }
!   if (!is_number(val)) {
      notify(player, "The value must be an integer.");
      return;
    }
--- 1116,1122 ----
      notify(player, "You must specify a value.");
      return;
    }
!   if (!is_strict_number(val)) {
      notify(player, "The value must be an integer.");
      return;
    }
Index: game/txt/hlp/pennflag.hlp
*** game/txt/hlp/pennflag.hlp.orig Fri, 13 Feb 1998 14:34:10 -0600 dunemush (pennmush/h/0_pennflag.h 1.1 640) 0.22
--- game/txt/hlp/pennflag.hlp      Mon, 09 Mar 1998 12:44:26 -0600 dunemush (pennmush/h/0_pennflag.h 1.1 640) 0.22(w)
***************
*** 293,299 ****
    actions, listen, be triggered, evaluate functions or substitutions,
    etc.
  
! See als: @halt, @restart
  & HAVEN
    Flag:  HAVEN (players, rooms)
  
--- 293,299 ----
    actions, listen, be triggered, evaluate functions or substitutions,
    etc.
  
! See also: @halt, @restart
  & HAVEN
    Flag:  HAVEN (players, rooms)
  
Index: game/txt/hlp/pennvers.hlp
*** game/txt/hlp/pennvers.hlp.orig Sun, 08 Mar 1998 11:37:13 -0600 dunemush (pennmush/h/5_pennvers.h 1.7 640) 0.22
--- game/txt/hlp/pennvers.hlp      Tue, 10 Mar 1998 15:25:10 -0600 dunemush (pennmush/h/5_pennvers.h 1.7 640) 0.22(w)
***************
*** 30,35 ****
--- 30,46 ----
  1.50p11, 1.50p12, 1.50p13, 1.50p14, 1.50p15, 1.6.0, 1.6.1, 1.6.2,
  1.6.3, 1.6.4, 1.6.5, 1.6.6, 1.6.7, 1.6.8, 1.6.9, 1.6.10, 1.7.0, 1.7.1
  
+ Version 1.7.2 patchlevel 7                    March 10, 1998
+ 
+ Fixes:
+       * Typo fixed in pennflag.hlp. Report by Keith Howell.
+       * Bug in mid() that could cause crashes on some OS's when using
+         bad arguments fixed. Report by Yanek@DragonStarMUSH. [TAP]
+       * @wait obj=command fails when tiny_math is defined. Report by Yanek.
+       * With tiny_math defined and tiny_booleans not defined, 
+         strings in booleans weren't being treated as 1. Report by Yanek.
+       * @decompile now shows @powers, too. Report by Jonathan Booth.
+ 
  Version 1.7.2 patchlevel 6                    March 8, 1998
  
  Fixes: