This is patch05 to PennMUSH 1.7.2. After applying this patch, you will
have version 1.7.2p5. 

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p0 < 1.7.2-patch05	
	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:
  * Fixed a password encryption problem with SHS.
  * Fixed a potential crash with @cloning objects on channels
  * More bugfixes, mostly cosmetic or relatively minor.

 - Alan/Javelin

Prereq: 1.7.2p4
Index: Patchlevel
*** Patchlevel.orig Tue, 24 Feb 1998 09:39:51 -0600 dunemush (pennmush/h/12_Patchlevel 1.5 640) 0.20
--- Patchlevel      Mon, 02 Mar 1998 10:50:32 -0600 dunemush (pennmush/h/12_Patchlevel 1.5 640) 0.20(w)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.2p4
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.2p5
Index: CHANGES
*** CHANGES.orig Tue, 24 Feb 1998 09:39:51 -0600 dunemush (pennmush/h/9_CHANGES 1.9 640) 0.20
--- CHANGES      Wed, 04 Mar 1998 09:49:31 -0600 dunemush (pennmush/h/9_CHANGES 1.9 640) 0.20(w)
***************
*** 15,20 ****
--- 15,46 ----
  
  ==========================================================================
  
+ Version 1.7.2 patchlevel 5                    March 2, 1998
+ 
+ Fixes:
+       * @cloning an object on a channel could crash the MUSH. Report by
+         Mordak@ATS.
+       * You couldn't add 2 objects with the same name to a channel.
+         Report by Mordak@ATS.
+       * Help for inc() fixed. Brian@M*U*S*H
+       * On Win32, the text file indexes are now properly sorted,
+         and things work ok if you don't have a text file defined. [NJG]
+       * Wiz objects couldn't add players to channels. Report by Mike@M*U*S*H
+       * Compile problem with fork and win32 fixed. [TAP]
+       * You shouldn't get nospoof notification from your own emits. [TN]
+       * You no longer get nospoof notification from every @chat, only
+         from @cemit.
+       * @lock obj=here or @lock obj=exit failed. Report by Luke@M*U*S*H
+       * The MUSH announces where it's sending stderr when it starts up. [NJG]
+       * If there was nothing on the queue, and no user activity,
+         the MUSH could wait as long as 999 seconds before checking to
+         see if it should do anything (like a dump, a shutdown, idling
+         someone out, etc.) This has been changed to 5 seconds.
+         Report by NJG.
+       * Encryption buffer for SHS encryption was too small, could cause
+         password problems. [NJG]
+ 
+ 
  Version 1.7.2 patchlevel 4                    February 24, 1998
  
  Fixes:
Index: options.h.dist
*** options.h.dist.orig Fri, 13 Feb 1998 14:31:28 -0600 dunemush (pennmush/d/36_options.h. 1.1 640) 0.20
--- options.h.dist      Mon, 02 Mar 1998 12:06:32 -0600 dunemush (pennmush/d/36_options.h. 1.1 640) 0.20(w)
***************
*** 115,121 ****
  
  /* If defined, use the info_slave to get information from identd and DNS,
   * instead of having the MUSH do it directly.  This may help reduce lag
!  * from new logins.
   */
  /* #define INFO_SLAVE /* */
  
--- 115,121 ----
  
  /* If defined, use the info_slave to get information from identd and DNS,
   * instead of having the MUSH do it directly.  This may help reduce lag
!  * from new logins.  This does _not_ work under Win32.
   */
  /* #define INFO_SLAVE /* */
  
Index: hdrs/extchat.h
*** hdrs/extchat.h.orig Wed, 18 Feb 1998 10:48:44 -0600 dunemush (pennmush/e/0_extchat.h 1.3 640) 0.20
--- hdrs/extchat.h      Mon, 02 Mar 1998 11:16:11 -0600 dunemush (pennmush/e/0_extchat.h 1.3 640) 0.20(w)
***************
*** 174,180 ****
  
       /* Some globals */
  extern int num_channels;
! extern void channel_broadcast _((CHAN *channel, int checkquiet, const char *fmt,...));
  extern CHANUSER *onchannel _((dbref who, CHAN *c));
  extern void init_chatdb _((void));
  extern int load_chatdb _((FILE * fp));
--- 174,180 ----
  
       /* Some globals */
  extern int num_channels;
! extern void channel_broadcast _((CHAN *channel, int flags, const char *fmt,...));
  extern CHANUSER *onchannel _((dbref who, CHAN *c));
  extern void init_chatdb _((void));
  extern int load_chatdb _((FILE * fp));
Index: hdrs/version.h
*** hdrs/version.h.orig Tue, 24 Feb 1998 09:39:51 -0600 dunemush (pennmush/e/22_version.h 1.5 640) 0.20
--- hdrs/version.h      Mon, 02 Mar 1998 10:50:44 -0600 dunemush (pennmush/e/22_version.h 1.5 640) 0.20(w)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.2 patchlevel 4 [2/24/98]"
! #define SHORTVN "PennMUSH 1.7.2p4"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.2 patchlevel 5 [3/2/98]"
! #define SHORTVN "PennMUSH 1.7.2p5"
Index: src/boolexp.c
*** src/boolexp.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/e/29_boolexp.c 1.1 640) 0.20
--- src/boolexp.c      Mon, 02 Mar 1998 10:17:06 -0600 dunemush (pennmush/e/29_boolexp.c 1.1 640) 0.20(w)
***************
*** 233,239 ****
      b->type = BOOLEXP_CONST;
  
      /* do the match */
!     b->thing = match_result(parse_player, tbuf1, TYPE_THING, MAT_OBJECTS);
  
      if (b->thing == NOTHING) {
        notify(parse_player,
--- 233,239 ----
      b->type = BOOLEXP_CONST;
  
      /* do the match */
!     b->thing = match_result(parse_player, tbuf1, TYPE_THING, MAT_EVERYTHING);
  
      if (b->thing == NOTHING) {
        notify(parse_player,
Index: src/bsd.c
*** src/bsd.c.orig Tue, 24 Feb 1998 09:39:51 -0600 dunemush (pennmush/e/30_bsd.c 1.5 640) 0.20
--- src/bsd.c      Mon, 02 Mar 1998 12:07:27 -0600 dunemush (pennmush/e/30_bsd.c 1.5 640) 0.20(w)
***************
*** 24,29 ****
--- 24,32 ----
  #define EWOULDBLOCK WSAEWOULDBLOCK
  #define MAXHOSTNAMELEN 32
  void shutdown_checkpoint _((void));
+ #ifdef INFO_SLAVE
+ #undef INFO_SLAVE
+ #endif
  #else				/* WIN32 */
  #include <sys/file.h>
  #ifdef I_SYS_TIME
***************
*** 410,415 ****
--- 413,419 ----
    if (!newerr) {
      fprintf(stderr, "Unable to open %s. Error output to stderr.\n", errlog);
    } else {
+     fprintf(stderr, "Redirecting output to: %s\n", errlog);
      if (!freopen(errlog, "a", stderr)) {
        printf("Ack!  Failed reopening stderr!");
        exit(1);
***************
*** 887,899 ****
  	  }
  	  i = 0;
  	  if (
!              (newstate[TA_BOLD] && (newstate[TA_BOLD] != state[TA_BOLD]))  ||
! 	     (newstate[TA_REV] && (newstate[TA_REV] != state[TA_REV]))  ||
! 	     (newstate[TA_BLINK] && (newstate[TA_BLINK] != state[TA_BLINK]))  ||
! 	     (newstate[TA_ULINE] && (newstate[TA_ULINE] != state[TA_ULINE]))  ||
! 	     (color && newstate[TA_FGC] && (newstate[TA_FGC] != state[TA_FGC]))  ||
! 	     (color && newstate[TA_BGC] && (newstate[TA_BGC] != state[TA_BGC]))
!          ) { 
  	    safe_chr(ESC_CHAR, t, &o);
  	    safe_chr('[', t, &o);
  	    i = 0;
--- 891,903 ----
  	  }
  	  i = 0;
  	  if (
! 	  (newstate[TA_BOLD] && (newstate[TA_BOLD] != state[TA_BOLD])) ||
! 	     (newstate[TA_REV] && (newstate[TA_REV] != state[TA_REV])) ||
! 	       (newstate[TA_BLINK] && (newstate[TA_BLINK] != state[TA_BLINK])) ||
! 	       (newstate[TA_ULINE] && (newstate[TA_ULINE] != state[TA_ULINE])) ||
! 	       (color && newstate[TA_FGC] && (newstate[TA_FGC] != state[TA_FGC])) ||
! 	       (color && newstate[TA_BGC] && (newstate[TA_BGC] != state[TA_BGC]))
! 	    ) {
  	    safe_chr(ESC_CHAR, t, &o);
  	    safe_chr('[', t, &o);
  	    i = 0;
***************
*** 922,928 ****
      }
      if (state[TA_BOLD] || state[TA_REV] ||
  	state[TA_BLINK] || state[TA_ULINE] ||
!        (color && (state[TA_FGC] || state[TA_BGC])))
        safe_str(ANSI_NORMAL, t, &o);
      break;
    }
--- 926,932 ----
      }
      if (state[TA_BOLD] || state[TA_REV] ||
  	state[TA_BLINK] || state[TA_ULINE] ||
! 	(color && (state[TA_FGC] || state[TA_BGC])))
        safe_str(ANSI_NORMAL, t, &o);
      break;
    }
***************
*** 1088,1094 ****
  	  if ((flags & NA_PONLY) && (poutput != NA_PUEBLO))
  	    continue;
  
! 	  if (nsfunc && Nospoof(target)) {
  	    if (!havespoof) {
  	      nsfunc(nospoof, speaker, func, fdata);
  	      havespoof = 1;
--- 1092,1098 ----
  	  if ((flags & NA_PONLY) && (poutput != NA_PUEBLO))
  	    continue;
  
! 	  if (nsfunc && Nospoof(target) && (target != speaker)) {
  	    if (!havespoof) {
  	      nsfunc(nospoof, speaker, func, fdata);
  	      havespoof = 1;
***************
*** 4119,4130 ****
  
  #ifdef I_STDARG
  void
! channel_broadcast(CHAN *channel, int checkquiet, const char *fmt,...)
  #else
  void
! channel_broadcast(channel, checkquiet, va_alist)
      CHAN *channel;
!     int checkquiet;
      va_dcl
  #endif
  {
--- 4123,4134 ----
  
  #ifdef I_STDARG
  void
! channel_broadcast(CHAN *channel, int flags, const char *fmt,...)
  #else
  void
! channel_broadcast(channel, flags, va_alist)
      CHAN *channel;
!     int flags;			/* 0x1 = checkquiet, 0x2 = nospoof */
      va_dcl
  #endif
  {
***************
*** 4150,4157 ****
    va_end(args);
  
    nac.u = ChanUsers(channel);
!   nac.checkquiet = checkquiet;
!   notify_anything(orator, na_channel, &nac, ns_esnotify, 0, tbuf1);
  }
  
  void
--- 4154,4161 ----
    va_end(args);
  
    nac.u = ChanUsers(channel);
!   nac.checkquiet = (flags & 0x1) ? 1 : 0;
!   notify_anything(orator, na_channel, &nac, (flags & 0x2) ? ns_esnotify : NULL, 0, tbuf1);
  }
  
  void
Index: src/cque.c
*** src/cque.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/e/40_cque.c 1.1 640) 0.20
--- src/cque.c      Tue, 03 Mar 1998 15:23:48 -0600 dunemush (pennmush/e/40_cque.c 1.1 640) 0.20(w)
***************
*** 485,491 ****
     * queue when they have one second to go.
     */
  
!   min = 1000;
  
    for (point = qwait; point; point = point->next) {
      curr = point->left - mudtime;
--- 485,491 ----
     * queue when they have one second to go.
     */
  
!   min = 5;
  
    for (point = qwait; point; point = point->next) {
      curr = point->left - mudtime;
Index: src/create.c
*** src/create.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/e/41_create.c 1.1 640) 0.20
--- src/create.c      Wed, 04 Mar 1998 09:37:43 -0600 dunemush (pennmush/e/41_create.c 1.1 640) 0.20(w)
***************
*** 510,515 ****
--- 510,518 ----
      if (can_pay_fees(player, OBJECT_DEPOSIT(Pennies(thing)))) {
        clone = new_object();
        memcpy(&db[clone], &db[thing], sizeof(struct object));
+ #ifdef CHAT_SYSTEM
+       Chanlist(clone) = NULL;
+ #endif
        db[clone].name = NULL;
        SET(db[clone].name, Name(thing));
        s_Pennies(clone, Pennies(thing));
***************
*** 521,531 ****
  	  add_lock(clone, ll->type, dup_bool(ll->key));
  	}
        }
!       db[clone].zone = db[thing].zone;
!       db[clone].parent = db[thing].parent;
!       db[clone].flags &= ~WIZARD;
  #ifdef ROYALTY_FLAG
!       db[clone].flags &= ~ROYALTY;
  #endif
  #ifdef USE_WARNINGS
        db[clone].warnings = 0;	/* zap warnings */
--- 524,534 ----
  	  add_lock(clone, ll->type, dup_bool(ll->key));
  	}
        }
!       Zone(clone) = Zone(thing);
!       Parent(clone) = Parent(thing);
!       Flags(clone) &= ~WIZARD;
  #ifdef ROYALTY_FLAG
!       Flags(clone) &= ~ROYALTY;
  #endif
  #ifdef USE_WARNINGS
        db[clone].warnings = 0;	/* zap warnings */
***************
*** 535,543 ****
         * other clone has, but update the creation time */
        db[clone].creation_time = time((time_t *) 0);
  #endif
!       db[clone].powers = 0;	/* zap powers */
  
!       db[clone].contents = db[clone].location = db[clone].next = NOTHING;
        notify(player, tprintf("Cloned: Object #%d.", clone));
        moveto(clone, Location(player));
  #ifdef LOCAL_DATA
--- 538,546 ----
         * other clone has, but update the creation time */
        db[clone].creation_time = time((time_t *) 0);
  #endif
!       Powers(clone) = 0;	/* zap powers */
  
!       Contents(clone) = Location(clone) = Next(clone) = NOTHING;
        notify(player, tprintf("Cloned: Object #%d.", clone));
        moveto(clone, Location(player));
  #ifdef LOCAL_DATA
***************
*** 566,573 ****
  	  add_lock(clone, ll->type, dup_bool(ll->key));
  	}
        }
!       db[clone].zone = Zone(thing);
!       db[clone].parent = Parent(thing);
        Flags(clone) = Flags(thing);
        Flags(clone) &= ~WIZARD;
  #ifdef ROYALTY_FLAG
--- 569,576 ----
  	  add_lock(clone, ll->type, dup_bool(ll->key));
  	}
        }
!       Zone(clone) = Zone(thing);
!       Parent(clone) = Parent(thing);
        Flags(clone) = Flags(thing);
        Flags(clone) &= ~WIZARD;
  #ifdef ROYALTY_FLAG
***************
*** 576,582 ****
  #ifdef USE_WARNINGS
        db[clone].warnings = 0;	/* zap warnings */
  #endif
!       db[clone].powers = 0;	/* zap powers */
        notify(player, "Exit cloned.");
  #ifdef LOCAL_DATA
        db[clone].local_data = NULL;
--- 579,585 ----
  #ifdef USE_WARNINGS
        db[clone].warnings = 0;	/* zap warnings */
  #endif
!       Powers(clone) = 0;	/* zap powers */
        notify(player, "Exit cloned.");
  #ifdef LOCAL_DATA
        db[clone].local_data = NULL;
Index: src/extchat.c
*** src/extchat.c.orig Wed, 18 Feb 1998 10:48:44 -0600 dunemush (pennmush/e/45_extchat.c 1.4 640) 0.20
--- src/extchat.c      Wed, 04 Mar 1998 09:49:08 -0600 dunemush (pennmush/e/45_extchat.c 1.4 640) 0.20(w)
***************
*** 496,502 ****
      for (;
  	 p->next && (strcasecmp(Name(CUdbref(p->next)), Name(CUdbref(user))) <= 0);
  	 p = p->next) ;
!     if (!strcasecmp(Name(CUdbref(p)), Name(CUdbref(user)))) {
        /* Don't add the same user twice! */
        mush_free((Malloc_t) user, "CHANUSER");
        return 0;
--- 496,502 ----
      for (;
  	 p->next && (strcasecmp(Name(CUdbref(p->next)), Name(CUdbref(user))) <= 0);
  	 p = p->next) ;
!     if (CUdbref(p) == CUdbref(user)) {
        /* Don't add the same user twice! */
        mush_free((Malloc_t) user, "CHANUSER");
        return 0;
***************
*** 722,731 ****
        notify(player, "I don't recognize that channel.");
      return;
    }
-   if (!Chan_Ok_Type(chan, player)) {
-     notify(player, "Sorry, you're the wrong type of thing.");
-     return;
-   }
    if (!strcasecmp(com, "who")) {
      do_channel_who(player, chan);
      return;
--- 722,727 ----
***************
*** 748,753 ****
--- 744,753 ----
      notify(player, "Invalid target.");
      return;
    }
+   if (!Chan_Ok_Type(chan, victim)) {
+     notify(player, "Sorry, wrong type of thing for that channel.");
+     return;
+   }
    if (!strcasecmp("on", com)) {
      if (Guest(player)) {
        notify(player, "Guests are not allowed to join channels.");
***************
*** 928,934 ****
      notify(player, "What do you want to emit?");
      return;
    }
!   channel_broadcast(chan, 0, "%s", msg);
    if (!onchannel(player, chan))
      notify(player, tprintf("Cemit to channel %s: %s",
  			   ChanName(chan), msg));
--- 928,934 ----
      notify(player, "What do you want to emit?");
      return;
    }
!   channel_broadcast(chan, 2, "%s", msg);
    if (!onchannel(player, chan))
      notify(player, tprintf("Cemit to channel %s: %s",
  			   ChanName(chan), msg));
***************
*** 1254,1260 ****
        if (SUPPORT_PUEBLO)
  	sprintf(numusers, "%cA XCH_CMD=\"@channel/who %s\" XCH_HINT=\"See who's on this channel now\"%c%5ld%c/A%c", TAG_START, ChanName(c), TAG_END, ChanNumUsers(c), TAG_START, TAG_END);
        else
! 	sprintf(numusers, "%5d", ChanNumUsers(c));
        notify(player,
  	  tprintf("%-30s %s %8d [%c%c%c%c%c%c %c%c%c%c%c%c] [%-3s %c%c]",
  		  ChanName(c),
--- 1254,1260 ----
        if (SUPPORT_PUEBLO)
  	sprintf(numusers, "%cA XCH_CMD=\"@channel/who %s\" XCH_HINT=\"See who's on this channel now\"%c%5ld%c/A%c", TAG_START, ChanName(c), TAG_END, ChanNumUsers(c), TAG_START, TAG_END);
        else
! 	sprintf(numusers, "%5ld", ChanNumUsers(c));
        notify(player,
  	  tprintf("%-30s %s %8d [%c%c%c%c%c%c %c%c%c%c%c%c] [%-3s %c%c]",
  		  ChanName(c),
Index: src/filecopy.c
*** src/filecopy.c.orig Mon, 16 Feb 1998 14:44:40 -0600 dunemush (pennmush/e/47_filecopy.c 1.2 640) 0.20
--- src/filecopy.c      Tue, 03 Mar 1998 11:10:29 -0600 dunemush (pennmush/e/47_filecopy.c 1.2 640) 0.20(w)
***************
*** 49,54 ****
--- 49,58 ----
  
    char *p;
  
+   /* If outputfile is an empty string, forget it. */
+   if (!outputfile || !*outputfile)
+     return FALSE;
+ 
  // extract the directory from the path name
  
    strcpy(directory, path);
***************
*** 237,254 ****
  
    long indb_size, outdb_size, panicdb_size;
  
!   ConcatenateFiles("txt\\hlp\\*.hlp", options.help_file);
!   ConcatenateFiles("txt\\nws\\*.nws", options.news_file);
!   ConcatenateFiles("txt\\evt\\*.evt", options.events_file);
! #ifdef RULES
    ConcatenateFiles("txt\\rul\\*.rul", RULES_FILE);
! #endif
!   makeindex(options.help_file, options.help_index);
!   makeindex(options.news_file, options.news_index);
!   makeindex(options.events_file, options.events_index);
! #ifdef RULES
    makeindex(RULES_FILE, RULESINDX);
! #endif
  
    indb_OK = CheckDatabase(options.input_db, &indb_time, &indb_size);
    outdb_OK = CheckDatabase(options.output_db, &outdb_time, &outdb_size);
--- 241,256 ----
  
    long indb_size, outdb_size, panicdb_size;
  
!   ConcatenateFiles("txt\\hlp\\*.hlp", HELPTEXT);
!   ConcatenateFiles("txt\\nws\\*.nws", NEWS_FILE);
!   ConcatenateFiles("txt\\evt\\*.evt", EVENT_FILE);
    ConcatenateFiles("txt\\rul\\*.rul", RULES_FILE);
!   ConcatenateFiles("txt\\idx\\*.idx", INDEX_FILE);
!   makeindex(HELPTEXT, HELPINDX);
!   makeindex(NEWS_FILE, NEWSINDX);
!   makeindex(EVENT_FILE, EVENTINDX);
    makeindex(RULES_FILE, RULESINDX);
!   makeindex(INDEX_FILE, INDEXINDX);
  
    indb_OK = CheckDatabase(options.input_db, &indb_time, &indb_size);
    outdb_OK = CheckDatabase(options.output_db, &outdb_time, &outdb_size);
Index: src/game.c
*** src/game.c.orig Mon, 23 Feb 1998 14:31:54 -0600 dunemush (pennmush/f/6_game.c 1.4 640) 0.20
--- src/game.c      Mon, 02 Mar 1998 12:07:27 -0600 dunemush (pennmush/f/6_game.c 1.4 640) 0.20(w)
***************
*** 473,479 ****
--- 473,483 ----
      nofork = 1;
    else
      nofork = !forking || (paranoid_dump == 2);	/* Don't fork for dump/debug */
+ #ifdef WIN32
+   nofork = 1;
+ #endif
    if (!nofork) {
+ #ifndef WIN32
      child = fork();
      if (child < 0) {
        /* Oops, fork failed. Let's do a nofork dump */
***************
*** 492,497 ****
--- 496,502 ----
        setpriority(PRIO_PROCESS, child, 8);
  #endif
      }
+ #endif
  #endif
    } else {
      if (DUMP_NOFORK_MESSAGE && *DUMP_NOFORK_MESSAGE)
Index: src/mkindx.c
*** src/mkindx.c.orig Mon, 23 Feb 1998 14:31:54 -0600 dunemush (pennmush/f/17_mkindx.c 1.2 640) 0.20
--- src/mkindx.c      Tue, 03 Mar 1998 11:13:05 -0600 dunemush (pennmush/f/17_mkindx.c 1.2 640) 0.20(w)
***************
*** 1,16 ****
  /* mkindx.c */
  
! /* order the entries alphabetically - define this unless you
!  * have memory problems This code by Pavel Kankovsky (PeaK)
!  */
! #ifndef EMBEDDED_MKINDX
! #define ORDERED_INDEXFILE
! #endif
  
  #ifdef EMBEDDED_MKINDX
  #include "conf.h"
  #endif
- #include "config.h"
  
  #include  <stdio.h>
  #include  <stdlib.h>
--- 1,11 ----
  /* mkindx.c */
  
! #include "config.h"
! #include "copyrite.h"
  
  #ifdef EMBEDDED_MKINDX
  #include "conf.h"
  #endif
  
  #include  <stdio.h>
  #include  <stdlib.h>
***************
*** 33,43 ****
  } tlist;
  tlist *top = NULL;
  
- #ifdef ORDERED_INDEXFILE
  help_indx *topics = NULL;
  unsigned num_topics = 0;
  unsigned top_topics = 0;
- #endif
  
  void write_topic _((FILE * out, long int p, int l));
  void flush_topics _((FILE * out));
--- 28,36 ----
***************
*** 75,81 ****
      int l;
  {
    tlist *cur, *nextptr;
- #ifdef ORDERED_INDEXFILE
    help_indx *temp;
    for (cur = top; cur; cur = nextptr) {
      nextptr = cur->next;
--- 68,73 ----
***************
*** 96,115 ****
      strcpy(temp->topic, cur->topic);
      free(cur);
    }
- #else
-   help_indx temp;
-   for (cur = top; cur; cur = nextptr) {
-     nextptr = cur->next;
-     temp.pos = p;
-     temp.len = l;
-     strcpy(temp.topic, cur->topic);
-     if (fwrite(&temp, sizeof(help_indx), 1, out) < 1) {
-       fprintf(stderr, "error writing\n");
-       exit(-1);
-     }
-     free(cur);
-   }
- #endif
    top = NULL;
  }
  
--- 88,93 ----
***************
*** 124,130 ****
    top = cur;
  }
  
- #ifdef ORDERED_INDEXFILE
  static int topic_cmp _((const help_indx *s1, const help_indx *s2));
  static int
  topic_cmp(s1, s2)
--- 102,107 ----
***************
*** 134,152 ****
    int k = strcasecmp(s1->topic, s2->topic);
    return k;
  }
- #endif
  
  void
  flush_topics(out)
      FILE *out;
  {
- #ifdef ORDERED_INDEXFILE
    qsort(topics, num_topics, sizeof(help_indx), topic_cmp);
    if ((Size_t) fwrite(topics, sizeof(help_indx), num_topics, out) < num_topics) {
      fprintf(stderr, "error writing\n");
      exit(-1);
    }
- #endif
  }
  
  
--- 111,126 ----
***************
*** 172,177 ****
--- 146,154 ----
  #endif
  
  #ifdef EMBEDDED_MKINDX
+   /* Quietly ignore null values for the file */
+   if (!inputfile || !*inputfile || !outputfile || !*outputfile)
+     return 0;
    if ((rfp = fopen(inputfile, "rb")) == NULL) {
      fprintf(stderr, "can't open %s for reading\n", inputfile);
      exit(-1);
Index: src/mycrypt.c
*** src/mycrypt.c.orig Fri, 13 Feb 1998 14:32:30 -0600 dunemush (pennmush/f/19_mycrypt.c 1.1 640) 0.20
--- src/mycrypt.c      Mon, 02 Mar 1998 10:17:24 -0600 dunemush (pennmush/f/19_mycrypt.c 1.1 640) 0.20(w)
***************
*** 36,42 ****
  {
  #if (CRYPT_SYSTEM == 2)
    SHS_INFO shsInfo;
!   static char crypt_buff[15];
  #endif
  
  #if (CRYPT_SYSTEM == 0)
--- 36,42 ----
  {
  #if (CRYPT_SYSTEM == 2)
    SHS_INFO shsInfo;
!   static char crypt_buff[70];
  #endif
  
  #if (CRYPT_SYSTEM == 0)
Index: game/mushcnf.dst
*** game/mushcnf.dst.orig Mon, 16 Feb 1998 15:51:40 -0600 dunemush (pennmush/g/28_mushcnf.ds 1.2 640) 0.20
--- game/mushcnf.dst      Mon, 02 Mar 1998 12:06:43 -0600 dunemush (pennmush/g/28_mushcnf.ds 1.2 640) 0.20(w)
***************
*** 204,210 ****
  # should I fork a concurrent process to do database dumps?
  # If I do, your memory requirements will double during the dump.
  # If I don't, the MUSH will pause while it dumps.
! # if you're low on memory, don't do this.
  forking_dump yes
  
  # If you're not forking, you get a bunch of messages that you
--- 204,211 ----
  # should I fork a concurrent process to do database dumps?
  # If I do, your memory requirements will double during the dump.
  # If I don't, the MUSH will pause while it dumps.
! # If you're low on memory, don't do this.
! # If you're on Win32, don't do this; fork() is not defined.
  forking_dump yes
  
  # If you're not forking, you get a bunch of messages that you
Index: game/txt/hlp/pennfunc.hlp
*** game/txt/hlp/pennfunc.hlp.orig Sat, 14 Feb 1998 09:54:48 -0600 dunemush (pennmush/h/1_pennfunc.h 1.2 640) 0.20
--- game/txt/hlp/pennfunc.hlp      Tue, 03 Mar 1998 11:14:23 -0600 dunemush (pennmush/h/1_pennfunc.h 1.2 640) 0.20(w)
***************
*** 999,1005 ****
    inc(<integer>)
    inc(<string-ending-in-integer>)
  
!   Inc returns the integer minus 1. If given a string that ends in an integer,
    it increments only the final integer portion. That is:
  
    > think inc(3)
--- 999,1005 ----
    inc(<integer>)
    inc(<string-ending-in-integer>)
  
!   Inc returns the integer plus 1. If given a string that ends in an integer,
    it increments only the final integer portion. That is:
  
    > think inc(3)
Index: game/txt/hlp/penntop.hlp
*** game/txt/hlp/penntop.hlp.orig Fri, 13 Feb 1998 14:34:10 -0600 dunemush (pennmush/h/4_penntop.hl 1.1 640) 0.20
--- game/txt/hlp/penntop.hlp      Tue, 03 Mar 1998 11:15:30 -0600 dunemush (pennmush/h/4_penntop.hl 1.1 640) 0.20(w)
***************
*** 378,385 ****
    has been maintaining this code.
    
    Additional credits go to:
!     Talek and Rhyanna: co-developers with Javelin
!     Nick Gammon: win32 post
      Pavel Kankovsky and Thorvald Natvig: rewrites of things
      Naomi Novik: rewrite of the help files for 1.7.0
      Ambar (PernMUSH):  debugging and lots of other stuff (PernMUSH v1.14)
--- 378,386 ----
    has been maintaining this code.
    
    Additional credits go to:
!     Talek and Trivian: co-developers with Javelin
!     Rhyanna: former co-developer
!     Nick Gammon: win32 port                     Sylvia: os2 port
      Pavel Kankovsky and Thorvald Natvig: rewrites of things
      Naomi Novik: rewrite of the help files for 1.7.0
      Ambar (PernMUSH):  debugging and lots of other stuff (PernMUSH v1.14)
Index: game/txt/hlp/pennvers.hlp
*** game/txt/hlp/pennvers.hlp.orig Tue, 24 Feb 1998 09:39:51 -0600 dunemush (pennmush/h/5_pennvers.h 1.5 640) 0.20
--- game/txt/hlp/pennvers.hlp      Wed, 04 Mar 1998 10:06:54 -0600 dunemush (pennmush/h/5_pennvers.h 1.5 640) 0.20(w)
***************
*** 30,35 ****
--- 30,57 ----
  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 5                    March 2, 1998
+ 
+ Fixes:
+       * @cloning an object on a channel could crash the MUSH. Report by
+         Mordak@ATS.
+       * You couldn't add 2 objects with the same name to a channel.
+         Report by Mordak@ATS.
+       * Wiz objects couldn't add players to channels. Report by Mike@M*U*S*H
+       * Compile problem with fork and win32 fixed. [TAP]
+       * You shouldn't get nospoof notification when the speaker isn't
+         spoofing. [TN]
+       * You shouldn't get nospoof notification from @chat, only @cemit
+       * @lock obj=here or @lock obj=exit failed. Report by Luke@M*U*S*H
+       * The MUSH announces where it's sending stderr when it starts up. [NJG]
+       * If there was nothing on the queue, and no user activity,
+         the MUSH could wait as long as 999 seconds before checking to
+         see if it should do anything (like a dump, a shutdown, idling
+         someone out, etc.) This has been changed to 5 seconds.
+         Report by NJG.
+       * Encryption buffer for SHS encryption was too small, could cause
+         password problems. [NJG]
+ 
  Version 1.7.2 patchlevel 4                    February 24, 1998
  
  Fixes: