ADD IN MEM.C
/* Help Editor - kermit 1/98 */
HELP_DATA *new_help(void)
{
HELP_DATA *NewHelp;
NewHelp = alloc_perm(sizeof(*NewHelp) );
NewHelp->level = 0;
NewHelp->keyword = str_dup("");
NewHelp->text = str_dup("");
NewHelp->next = NULL;
return NewHelp;
}
ADD IN OLC.C
--- run_olc_editor ---
case ED_MPCODE:
mpedit( d->character, d->incomm );
break;
+ case ED_HELP:
+ hedit( d->character, d->incomm );
+ break;
default:
return FALSE;
--- olc_ed_name ---
case ED_MPCODE:
sprintf( buf, "MPEdit" );
break;
+ case ED_HELP:
+ sprintf( buf, "HEdit" );
+ break;
default:
sprintf( buf, " " );
break;
--- show_commands ---
case ED_MPCODE:
show_olc_cmds( ch, mpedit_table );
break;
+ case ED_HELP:
+ show_olc_cmds( ch, hedit_table );
+ break;
}
---
/* 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 },
{ "delete", hedit_delete },
{ "?", show_help },
{ NULL, 0, }
};
--- const struct editor_cmd_type ---
{ "mpcode", do_mpedit },
+ { "help", do_hedit },
{ NULL, 0, }
---
/* 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;
}
/* 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] != '\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 new [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;
}
ADD IN OLC.H
#define ED_HELP 6
void hedit args( ( CHAR_DATA *ch, char *argument ) );
extern const struct olc_cmd_type hedit_table[];
DECLARE_DO_FUN( do_hedit );
/* 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 );
DECLARE_OLC_FUN( hedit_delete );
#define EDIT_HELP(Ch, Help) ( Help = (HELP_DATA *)Ch->desc->pEdit )
HELP_DATA *new_help args ( (void) );
void free_help args( ( HELP_DATA * pHelp));
void save_helps args( (void) );
---
ADD IN OLC_ACT.C
#define HEDIT( fun ) bool fun( CHAR_DATA *ch, char *argument )
---
/* 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);
if(pHelp->delete) {
send_to_char("\n\nTHIS HELP IS MARKED FOR DELETION!\n\r",ch);
return FALSE;
}
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;
}
HEDIT( hedit_delete)
{
HELP_DATA *pHelp;
EDIT_HELP(ch,pHelp);
if(!pHelp->delete) {
pHelp->delete = TRUE;
send_to_char("YOU HAVE MARKED THIS HELP DELETION!\n\r",ch);
return TRUE;
}
pHelp->delete = FALSE;
send_to_char("YOU HAVE UNMARKED THIS HELP FOR DELETION!\n\r",ch);
return TRUE;
}
ADD IN OLC_SAVE.C
--- do_asave ---
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 );
---
send_to_char( "Area saved.\n\r", ch );
return;
}
+ /* Save Help File */
+ if(!str_cmp(arg1, "helps"))
+ {
+ save_helps();
+ send_to_char( "Helps Saved.\n\r", ch);
+ return;
+ }
/* Show correct syntax. */
---
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");
for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next )
{
if(pHelp->delete)
continue;
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;
}
---------------
ADD IN MERC.H
#define MSL MAX_STRING_LENGTH
#define MIL MAX_INPUT_LENGTH
struct help_data
{
HELP_DATA * next;
sh_int level;
char * keyword;
char * text;
+ bool delete;
};
ADD IN INTERP.C
{ "hedit", do_hedit, POS_DEAD, 0, LOG_NORMAL, 1 },
ADD IN INTERP.H
DECLARE_DO_FUN( do_hedit );