/
Common subdirectories: ./1/1 and ./1
diff -c -P -N -x hedit.patch ./1/interp.c ./interp.c
*** ./1/interp.c	Wed Dec 31 07:59:44 1997
--- ./interp.c	Thu Jan  1 08:24:50 1998
***************
*** 373,378 ****
--- 373,379 ----
      { "aedit",		do_aedit,	POS_DEAD,    0,  LOG_NORMAL, 1 },
      { "oedit",		do_oedit,	POS_DEAD,    0,  LOG_NORMAL, 1 },
      { "mpedit",		do_mpedit,	POS_DEAD,    0,  LOG_NORMAL, 1 },
+     { "hedit",		do_hedit,	POS_DEAD,    0,  LOG_NORMAL, 1 },
  
      /*
       * End of list.
diff -c -P -N -x hedit.patch ./1/interp.h ./interp.h
*** ./1/interp.h	Wed Dec 31 07:59:44 1997
--- ./interp.h	Thu Jan  1 08:25:00 1998
***************
*** 305,307 ****
--- 305,308 ----
  DECLARE_DO_FUN( do_medit	);
  DECLARE_DO_FUN( do_oedit	);
  DECLARE_DO_FUN( do_mpedit	);
+ DECLARE_DO_FUN( do_hedit	);
diff -c -P -N -x hedit.patch ./1/mem.c ./mem.c
*** ./1/mem.c	Wed Dec 31 07:59:44 1997
--- ./mem.c	Thu Jan  1 08:22:33 1998
***************
*** 473,475 ****
--- 473,490 ----
      mpcode_free  = pMcode;
      return;
  }
+ 
+ HELP_DATA *new_help(void)
+ {
+      HELP_DATA *NewHelp;
+ 
+      NewHelp = alloc_perm(sizeof(*NewHelp) );
+      top_help++;
+ 
+      NewHelp->level    = 0;
+      NewHelp->keyword = str_dup("");
+      NewHelp->text    = str_dup("");
+      NewHelp->next    = NULL;
+ 
+      return NewHelp;
+ }
diff -c -P -N -x hedit.patch ./1/merc.h ./merc.h
*** ./1/merc.h	Wed Dec 31 07:59:44 1997
--- ./merc.h	Thu Jan  1 08:22:33 1998
***************
*** 119,124 ****
--- 119,126 ----
  #define	MAX_KEY_HASH		 1024
  #define MAX_STRING_LENGTH	 4608
  #define MAX_INPUT_LENGTH	  256
+ #define MIL MAX_STRING_LENGTH
+ #define MSL MAX_INPUT_LENGTH
  #define PAGELEN			   22
  
  
diff -c -P -N -x hedit.patch ./1/olc.c ./olc.c
*** ./1/olc.c	Wed Dec 31 07:59:44 1997
--- ./olc.c	Thu Jan  1 20:45:49 1998
***************
*** 53,59 ****
  	break;
      case ED_MPCODE:
      	mpedit( d->character, d->incomm );
!     	break;
      default:
  	return FALSE;
      }
--- 53,62 ----
  	break;
      case ED_MPCODE:
      	mpedit( d->character, d->incomm );
!         break;
!     case ED_HELP:
!         hedit( d->character, d->incomm );
!         break;
      default:
  	return FALSE;
      }
***************
*** 84,89 ****
--- 87,95 ----
      case ED_MPCODE:
      	sprintf( buf, "MPEdit" );
  	break;
+     case ED_HELP:
+         sprintf( buf, "HEdit" );
+         break;
      default:
  	sprintf( buf, " " );
  	break;
***************
*** 189,195 ****
  	    break;
  	case ED_MPCODE:
  	    show_olc_cmds( ch, mpedit_table );
! 	    break;
      }
  
      return FALSE;
--- 195,205 ----
  	    break;
  	case ED_MPCODE:
  	    show_olc_cmds( ch, mpedit_table );
!             break;
!     case ED_HELP:
!         show_olc_cmds( ch, hedit_table );
!         break;
! 
      }
  
      return FALSE;
***************
*** 350,355 ****
--- 360,381 ----
      {	NULL,		0,		}
  };
  
+ /* Help Editor - kermit 1/98 */
+ const struct olc_cmd_type hedit_table[] =
+ {
+ /*  {   command		function	}, */
+ 
+     { "commands", show_commands  },
+     { "desc",     hedit_desc     },
+     { "keywords", hedit_keywords },
+     { "level",    hedit_level    },
+     { "make",     hedit_make     },
+     { "show",     hedit_show     },
+     {   "?",      show_help	 },
+ 
+     {	NULL, 0, }
+ };
+ 
  /*****************************************************************************
   *                          End Interpreter Tables.                          *
   *****************************************************************************/
***************
*** 672,677 ****
--- 698,744 ----
      return;
  }
  
+ /* Help Editor - kermit 1/98 */
+ void hedit( CHAR_DATA *ch, char *argument)
+ {
+     char command[MIL];
+     char arg[MIL];
+     int cmd;
+     
+     smash_tilde(argument);
+     strcpy(arg, argument);
+     argument = one_argument( argument, command);
+ 
+     if (ch->pcdata->security < 9)
+     {
+         send_to_char("HEdit: Insufficient security to modify code\n\r",ch);
+        edit_done(ch);
+     }
+ 
+     if ( !str_cmp(command, "done") )
+     {
+ 	edit_done( ch );
+ 	return;
+     }
+ 
+     if ( command[0] == '\0' )
+     {
+         hedit_show( ch, argument );
+ 	return;
+     }
+ 
+     for ( cmd = 0; hedit_table[cmd].name != NULL; cmd++ )
+     {
+ 	if ( !str_prefix( command, hedit_table[cmd].name ) )
+ 	{
+             (*hedit_table[cmd].olc_fun) ( ch, argument );
+             return;
+ 	}
+     }
+ 
+     interpret( ch, arg );
+     return;    
+ }
  
  
  
***************
*** 684,689 ****
--- 751,757 ----
      {   "object",	do_oedit	},
      {   "mobile",	do_medit	},
      {	"mpcode",	do_mpedit	},
+     {   "help",         do_hedit        },
  
      {	NULL,		0,		}
  };
***************
*** 985,990 ****
--- 1053,1112 ----
      return;
  }
  
+ /* Help Editor - kermit 1/98 */
+ void do_hedit( CHAR_DATA *ch, char *argument )
+ {
+     HELP_DATA *pHelp;
+     char arg1[MIL];
+     char argall[MAX_INPUT_LENGTH],argone[MAX_INPUT_LENGTH];
+     bool found = FALSE;
+ 
+     strcpy(arg1,argument);
+     
+     if(argument != '\0')
+     {
+         /* Taken from do_help */
+         argall[0] = '\0';
+         while (argument[0] != '\0' )
+         {
+             argument = one_argument(argument,argone);
+             if (argall[0] != '\0')
+                 strcat(argall," ");
+             strcat(argall,argone);
+         }
+ 
+         for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next )
+         {
+             if ( is_name( argall, pHelp->keyword ) )
+             {
+                 ch->desc->pEdit=(void *)pHelp;
+                 ch->desc->editor= ED_HELP;
+                 found = TRUE;
+                 return;
+             }
+         }
+     }
+ 
+     if(!found)
+     {
+         argument = one_argument(arg1, arg1);
+         
+         if(!str_cmp(arg1,"make"))
+         {
+             if (argument[0] == '\0')
+             {
+                 send_to_char("Syntax: edit help make [topic]\n\r",ch);
+                 return;
+             }
+             if (hedit_make(ch, argument) )
+                 ch->desc->editor = ED_HELP;
+             return;
+         }
+     }
+ 
+     send_to_char( "HEdit:  There is no default help to edit.\n\r", ch );
+     return;
+ }
  
  
  void display_resets( CHAR_DATA *ch )
diff -c -P -N -x hedit.patch ./1/olc.h ./olc.h
*** ./1/olc.h	Wed Dec 31 07:59:44 1997
--- ./olc.h	Sun Jan 11 07:28:57 1998
***************
*** 59,64 ****
--- 59,65 ----
  #define ED_OBJECT 3
  #define ED_MOBILE 4
  #define ED_MPCODE 5
+ #define ED_HELP 6
  
  
  
***************
*** 70,75 ****
--- 71,77 ----
  void    medit           args( ( CHAR_DATA *ch, char *argument ) );
  void    oedit           args( ( CHAR_DATA *ch, char *argument ) );
  void	mpedit		args( ( CHAR_DATA *ch, char *argument ) );
+ void    hedit          args( ( CHAR_DATA *ch, char *argument ) );
  
  
  /*
***************
*** 123,128 ****
--- 125,131 ----
  extern const struct olc_cmd_type	oedit_table[];
  extern const struct olc_cmd_type	medit_table[];
  extern const struct olc_cmd_type	mpedit_table[];
+ extern const struct olc_cmd_type	hedit_table[];
  
  
  /*
***************
*** 133,138 ****
--- 136,142 ----
  DECLARE_DO_FUN( do_oedit        );
  DECLARE_DO_FUN( do_medit        );
  DECLARE_DO_FUN( do_mpedit	);
+ DECLARE_DO_FUN( do_hedit       );
  
  
  /*
***************
*** 264,269 ****
--- 268,281 ----
  DECLARE_OLC_FUN( mpedit_show   );
  
  
+ /* Help editor - kermit 1/98 */
+ DECLARE_OLC_FUN( hedit_show    );
+ DECLARE_OLC_FUN( hedit_make );
+ DECLARE_OLC_FUN( hedit_desc   );
+ DECLARE_OLC_FUN( hedit_level   );
+ DECLARE_OLC_FUN( hedit_keywords   );
+ 
+ 
  /*
   * Macros
   */
***************
*** 282,287 ****
--- 294,300 ----
  #define EDIT_OBJ(Ch, Obj)	( Obj = (OBJ_INDEX_DATA *)Ch->desc->pEdit )
  #define EDIT_ROOM(Ch, Room)	( Room = Ch->in_room )
  #define EDIT_AREA(Ch, Area)	( Area = (AREA_DATA *)Ch->desc->pEdit )
+ #define EDIT_HELP(Ch, Help)     ( Help = (HELP_DATA *)Ch->desc->pEdit )
  
  
  
***************
*** 321,323 ****
--- 334,341 ----
  void            free_mprog              args ( ( MPROG_LIST *mp ) );
  MPROG_CODE	*new_mpcode		args ( (void) );
  void		free_mpcode		args ( ( MPROG_CODE *pMcode));
+ 
+ /* Help Editor - kermit 1/98 */
+ HELP_DATA *new_help args ( (void) );
+ /* Help Editor - kermit 1/98 */
+ void save_helps args( (void) );
diff -c -P -N -x hedit.patch ./1/olc_act.c ./olc_act.c
*** ./1/olc_act.c	Wed Dec 31 07:59:45 1997
--- ./olc_act.c	Thu Jan  1 08:22:34 1998
***************
*** 36,41 ****
--- 36,42 ----
  #define OEDIT( fun )		bool fun( CHAR_DATA *ch, char *argument )
  #define MEDIT( fun )		bool fun( CHAR_DATA *ch, char *argument )
  #define AEDIT( fun )		bool fun( CHAR_DATA *ch, char *argument )
+ #define HEDIT( fun )            bool fun( CHAR_DATA *ch, char *argument )
  
  
  
***************
*** 4919,4923 ****
--- 4920,5011 ----
      }
  
      send_to_char("Mprog removed.\n\r", ch);
+     return TRUE;
+ }
+ 
+ /* Help Editor - kermit 1/98 */
+ HEDIT (hedit_make)
+ {
+     HELP_DATA *pHelp;
+     
+     if (argument[0] == '\0')
+     {
+         send_to_char("Syntax: mpedit make [keyword(s)]\n\r",ch);
+         return FALSE;
+     }
+ 
+     pHelp                        = new_help();
+     pHelp->keyword = str_dup(argument);
+     pHelp->next                  = help_first;
+     help_first                    = pHelp;
+     ch->desc->pEdit               = (void *)pHelp;
+ 
+     send_to_char("New Help Entry Created.\n\r",ch);
+     return TRUE;
+ }
+ 
+ HEDIT( hedit_show)
+ {
+     HELP_DATA *pHelp;
+     char buf[MSL];
+     
+     EDIT_HELP(ch,pHelp);
+ 
+     sprintf(buf,
+                    "Level:       [%d]\n\r"
+                    "Keywords: %s\n\r"
+                    "\n\r%s\n\r",
+             pHelp->level, pHelp->keyword, pHelp->text);
+     send_to_char(buf,ch);
+     
+     return FALSE;
+ }
+ 
+ HEDIT( hedit_desc)
+ {
+     HELP_DATA *pHelp;
+     EDIT_HELP(ch, pHelp);
+ 
+     if (argument[0] =='\0')
+     {
+        string_append(ch, &pHelp->text);
+        return TRUE;
+     }
+ 
+     send_to_char(" Syntax: desc\n\r",ch);
+     return FALSE;
+ }
+ 
+ HEDIT( hedit_keywords)
+ {
+     HELP_DATA *pHelp;
+     EDIT_HELP(ch, pHelp);
+ 
+     if(argument[0] == '\0')
+     {
+         send_to_char(" Syntax: keywords [keywords]\n\r",ch);
+         return FALSE;
+     }
+ 
+     pHelp->keyword = str_dup(argument);
+     send_to_char( "Keyword(s) Set.\n\r", ch);
+     return TRUE;
+ }
+ 
+ HEDIT(hedit_level)
+ {
+     HELP_DATA *pHelp;
+ 
+     EDIT_HELP(ch, pHelp);
+ 
+     if ( argument[0] == '\0' || !is_number( argument ) )
+     {
+ 	send_to_char( "Syntax:  level [number]\n\r", ch );
+ 	return FALSE;
+     }
+ 
+     pHelp->level = atoi( argument );
+ 
+     send_to_char( "Level set.\n\r", ch);
      return TRUE;
  }
diff -c -P -N -x hedit.patch ./1/olc_save.c ./olc_save.c
*** ./1/olc_save.c	Wed Dec 31 07:59:45 1997
--- ./olc_save.c	Thu Feb  5 04:24:40 1998
***************
*** 35,40 ****
--- 35,41 ----
  
  #define DIF(a,b) (~((~a)|(b)))
  
+ 
  /*
   *  Verbose writes reset data in plain english into the comments
   *  section of the resets.  It makes areas considerably larger but
***************
*** 91,99 ****
  	 */
  	fprintf( fp, "help.are\n"   );
  	fprintf( fp, "social.are\n" );    /* ROM OLC */
- 	fprintf( fp, "rom.are\n"    );    /* ROM OLC */
- 	fprintf( fp, "group.are\n"  );    /* ROM OLC */
- 	fprintf( fp, "olc.hlp\n"    );
  
  	for( pArea = area_first; pArea; pArea = pArea->next )
  	{
--- 92,97 ----
***************
*** 975,980 ****
--- 973,979 ----
      send_to_char( "  asave area     - saves the area being edited\n\r",	ch );
      send_to_char( "  asave changed  - saves all changed zones\n\r",	ch );
      send_to_char( "  asave world    - saves the world! (db dump)\n\r",	ch );
+     send_to_char( "  asave helps    - saves the help files\n\r",	ch );
      send_to_char( "\n\r", ch );
          return;
      }
***************
*** 1014,1020 ****
  
  	    save_area( pArea );
  	    REMOVE_BIT( pArea->area_flags, AREA_CHANGED );
! 	}
  	send_to_char( "You saved the world.\n\r", ch );
  /*	send_to_all_char( "Database saved.\n\r" );                 ROM OLC */
  	return;
--- 1013,1020 ----
  
  	    save_area( pArea );
  	    REMOVE_BIT( pArea->area_flags, AREA_CHANGED );
!         }
!         save_helps();
  	send_to_char( "You saved the world.\n\r", ch );
  /*	send_to_all_char( "Database saved.\n\r" );                 ROM OLC */
  	return;
***************
*** 1105,1112 ****
--- 1105,1146 ----
  	return;
      }
  
+         /* Save Help File */
+     if(!str_cmp(arg1, "helps"))
+     {
+         save_helps();
+         send_to_char( "Helps Saved.\n\r", ch);
+         return;
+     }
+ 
      /* Show correct syntax. */
      /* -------------------- */
      do_asave( ch, "" );
      return;
+ }
+ 
+ /* Help Editor - kermit 1/98 */
+ void save_helps()
+ {
+     HELP_DATA * pHelp;
+     FILE * fp;
+ 
+     if (!(fp = fopen( "help.are", "w") ) )
+     {
+         bug( "Open_help: fopen", 0);
+         perror( "help.are");
+      }
+ 
+         fprintf(fp, "#HELPS\n\n");
+ 
+         for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next )
+         {
+             
+             fprintf(fp, "%d %s~\n\n%s~\n",
+                     pHelp->level, pHelp->keyword, fix_string(pHelp->text));
+         }
+ 
+         fprintf(fp,"0 $~\n\n#$\n");
+         fclose(fp);
+         return;
  }