/**************************************************************************/ // hedit.cpp - OLC based help editor, Kal. /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with the dawn license * * in licenses.txt... In particular, you may not remove this copyright * * notice. * **************************************************************************/ #include "include.h" // dawn standard includes #include "olc.h" #include "security.h" #include "help.h" /**************************************************************************/ bool hedit_show(char_data *ch, char *) { help_data *pHelp; if (!HAS_SECURITY(ch,1)) { ch->println("The hedit_show command is an olc command, you dont have olc permissions."); return false; } EDIT_HELP(ch, pHelp); if(IS_SET(ch->dyn,DYN_SHOWFLAGS)){ help_display_to_char(pHelp, ch); return false; } SET_BIT(ch->dyn,DYN_SHOWFLAGS); ch->println("`s=============================================================================`x"); ch->printlnf("`=rTitle: `x%s", pHelp->title); ch->printlnf("`=rCommand Reference: `x%s", pHelp->command_reference); ch->printlnf("`=rKeywords: `x%s", pHelp->keyword); mxp_display_olc_flags(ch, help_category_types, pHelp->category, "category", "Category:"); ch->printlnf("`=rContinues: `=_%s`x", pHelp->continues); ch->printlnf("`=rParent Help: `=_%s`x", pHelp->parent_help); // see also ch->print("`=rSee Also: "); if(!IS_NULLSTR(pHelp->see_also)){ char *p=pHelp->see_also; char pword[MIL]; while(*p){ p=first_arg(p, pword, false); if(has_space(pword)){ ch->printf(" `=_'%s'", pword); }else{ ch->printf(" `=_%s", pword); } } } ch->println(""); // imm see also ch->print("`=rImm See Also: "); if(!IS_NULLSTR(pHelp->immsee_also)){ char *p=pHelp->immsee_also; char pword[MIL]; while(*p){ p=first_arg(p, pword, false); if(has_space(pword)){ ch->printf(" `=_'%s'", pword); }else{ ch->printf(" `=_%s", pword); } } } ch->println(""); if(!IS_NULLSTR(pHelp->spell_name)){ ch->printlnf("`=rSpell Name: %s", pHelp->spell_name); } // display the level ch->printf("`=rLevel: `x%d", pHelp->level); if(HAS_MXP(ch)){ ch->printf(" `S%s %s", mxp_create_send(ch, "level 0"), mxp_create_send(ch, FORMATF("level %d", LEVEL_IMMORTAL)) ); } ch->println(""); // display the assigned editor value ch->printf("`=rAssigned Editor: `x%d", pHelp->assigned_editor); if(HAS_MXP(ch)){ ch->print(" ["); for(int ai=0; ai<10; ai++){ if(pHelp->assigned_editor==ai){ ch->print("`C"); }else{ ch->print("`S"); } ch->print(mxp_create_send(ch, FORMATF("sa assign %d", ai), FORMATF("%d",ai))); if(ai!=9){ ch->print(" "); } } ch->print("`S]"); } ch->println(""); ch->printlnf("`=rHelpfile: `x%s (%d)", pHelp->helpfile? mxp_create_send(ch, FORMATF("hlist %s", pHelp->helpfile->file_name), FORMATF("%s", pHelp->helpfile->file_name)) : "`RNo Helpfile!!!`x", pHelp->helpfile? pHelp->helpfile->vnum:0); mxp_display_olc_flags(ch, help_flags, pHelp->flags, "flags", "Flags:"); ch->printlnf("`=%cWidest Line: %d (%d character%s).", (pHelp->widest_line_width<79?'r':'X'), pHelp->widest_line, pHelp->widest_line_width, pHelp->widest_line_width==1?"":"s"); ch->printlnf("`=r%s (%d bytes)`=R", mxp_create_send(ch, "text", "Text:"), str_len(pHelp->text)); if(str_len(pHelp->text)>200){ ch->printlnf("%.200s`Y...`x", pHelp->text[0]=='.'?pHelp->text+1:pHelp->text); }else{ ch->printlnf("%s`x", pHelp->text[0]=='.'?pHelp->text+1:pHelp->text); } if(pHelp->next){ ch->printlnf("`s%s(`=_%s)`x", mxp_create_send(ch, "EditNextHelp", "EditNextHelp"), lowercase(pHelp->next->keyword)); } ch->println("`s=============================================================================`x"); REMOVE_BIT(ch->dyn,DYN_SHOWFLAGS); return false; } /**************************************************************************/ void do_hedit( char_data *ch, char *argument ) { helpfile_data *pHelpFD; help_data *pHelp; char arg[MIL]; char *all_but_first_parameter; if (!HAS_SECURITY(ch,1)) { ch->println("The hedit command is an olc command, you dont have olc permissions."); return; } if (!HAS_SECURITY(ch,6)) { ch->println("Security 6 is required to use hedit."); return; } if (IS_NULLSTR(argument)){ ch->println("syntax: hedit <helpfile_keyword>"); ch->println(" hedit create <helpfile_to_store_new_entry_in>"); ch->println(""); ch->println(" note: <helpfile_to_store_new_entry_in> can be founding using hlist"); return; } // check if we have a create option all_but_first_parameter= one_argument(argument,arg); if ( !str_cmp( arg, "create" ) && IS_TRUSTED(ch,DEMI)) { // get the helpfile name pHelpFD=helpfile_get_by_filename(all_but_first_parameter); if (pHelpFD) { pHelp = help_allocate_new_entry(); pHelp->helpfile = pHelpFD; pHelp->helpfile->entries++; // increment the entries in the helpfile SET_BIT( pHelp->helpfile->flags, HELPFILE_CHANGED); pHelp->level = 92; pHelp->text = str_dup(""); sprintf(arg,"new_entry_%s", ch->name); pHelp->keyword = str_dup(arg); // add it into the linked list if ( !help_first){ help_first = pHelp; help_first->prev=NULL; } if ( help_last){ help_last->next = pHelp; pHelp->prev = help_last; } help_last = pHelp; pHelp->next = NULL; top_help++; help_init_quicklookup_table(); // we need to recreate the lookup hash // made the help entry put into edit mode ch->desc->pEdit = (void *)pHelp; ch->desc->editor = ED_HELP; return; } else { ch->println("You have to specify the helpfile which the entry is to be stored in."); ch->println("e.g. `=Chedit create commands`x"); ch->println("Use `=Chlist`x for a list of all the helpfiles."); return; } return; }// end of create option if(IS_TRUSTED(ch, MAX_LEVEL)){ // max level can edit all helps int oldtrust=ch->trust; ch->trust=MAX_LEVEL+10; // try exact match first pHelp=help_get_by_keyword(argument, ch, true); if(!pHelp){ pHelp=help_get_by_keyword(argument, ch, false); } ch->trust=oldtrust; }else{ // try exact match first pHelp=help_get_by_keyword(argument, ch, true); if(!pHelp){ pHelp=help_get_by_keyword(argument, ch, false); } } if(pHelp){ // found the help entry put into edit mode ch->desc->pEdit = (void *)pHelp; ch->desc->editor = ED_HELP; // inform the builder they are now in hedit mode ch->wraplnf("`=rYou are now editing help entry: '`r%s`=r' from: `Y%s`x", pHelp->keyword, pHelp->helpfile->file_name); ch->println("`=rType `=Cdone`=r to finish editing."); hedit_show(ch,""); return; } ch->printlnf("Sorry, no help on the keyword '%s' was found to edit.", argument); return; } /**************************************************************************/ bool hedit_level (char_data *ch, char *argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( argument[0] == '\0' || !is_number( argument ) ) { ch->println("Syntax: level [number]"); return false; } int value=atoi( argument ); if(value<0 || value>ABSOLUTE_MAX_LEVEL){ ch->printlnf("The level of a help entry must be between 0 and %d.", ABSOLUTE_MAX_LEVEL); return false; } if(value==pHelp->level){ ch->printlnf("This help entry is already level %d.", value); return false; } ch->printlnf( "Help level changed from %d set to %d.\r\n", pHelp->level, value); pHelp->level = value; return true; } /**************************************************************************/ bool hedit_text(char_data *ch, char *argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); REMOVE_BIT(pHelp->flags,HELP_WORDWRAPPED); if ( IS_NULLSTR(argument)) { if (str_len(pHelp->text)>(MSL-20)) { ch->wrapln("To long to be edited with olc... " "split help entry manually first. " "(or type either `=Ctext clear`x to clear the whole entry or " "`=Ctext trim`x to chop off the tail end of the help)"); return false; } else { replace_string(pHelp->undo_edittext, pHelp->text); string_append(ch, &pHelp->text); // setup the changed flags to ensure the help entry is // autosaved even if they are in the description editor // during an autosave. if(ch->desc && pHelp->helpfile){ ch->desc->changed_flag=&pHelp->helpfile->flags; } replace_string(pHelp->last_editor, ch->name); pHelp->last_editdate = current_time; return true; } } if(!str_cmp(argument,"clear")){ free_string(pHelp->text); pHelp->text= str_dup( "" ); ch->println("Help text cleared!"); }else if(!str_cmp(argument,"trim")){ if (str_len(pHelp->text)<=(MSL-20)){ ch->wrapln("The 'text trim' command can only be used when the " "text is too long it can't be edited!"); }else{ char t=pHelp->text[MSL-30]; pHelp->text[MSL-30]='\0'; char *trimmedtext=str_dup(pHelp->text); pHelp->text[MSL-30]=t; free_string(pHelp->text); pHelp->text= trimmedtext; ch->println("Help text trimmed!"); } }else{ ch->println(" Syntax: text - to edit the text in the description editor."); ch->println(" Syntax: text clear - to delete all the text."); ch->println(" Syntax: text trim - to trim the text so it can be edited."); } get_widest_line_stats(pHelp->text, true, &pHelp->widest_line, &pHelp->widest_line_width); return false; } /**************************************************************************/ bool hedit_addkey(char_data *ch, char *argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); char keyword[MSL*2]; if ( IS_NULLSTR(argument)) { ch->println("Syntax: addkey <keyword>"); return false; } // invalid character checks if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_infix(",", argument)){ ch->println("You can't have the , character in a help reference."); return false; } sprintf(keyword,"%s %s", pHelp->keyword,argument); if (str_len(keyword)>MSL-20) { ch->println("The keyword would be too long if you added that."); return false; } // convert to uppercase for (int i=0; keyword[i]; i++) { keyword[i]=UPPER(keyword[i]); } free_string(pHelp->keyword); pHelp->keyword=str_dup(keyword); ch->printlnf("Keywords are now %s.", pHelp->keyword); help_init_quicklookup_table();// we need to recreate the lookup hashtable return true; } /**************************************************************************/ bool hedit_rekey(char_data *ch, char *argument) { char keyword[MSL*2]; help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println("Syntax: rekey <keywords>"); ch->println(" (replace all the current keywords with the new ones.)"); return false; } // invalid character checks if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_infix(",", argument)){ ch->println("You can't have the , character in a help reference."); return false; } strcpy(keyword, argument); // convert to uppercase for (int i=0; keyword[i]; i++) { keyword[i]=UPPER(keyword[i]); } ch->printlnf("Keywords changed from %s to %s.", pHelp->keyword, keyword); free_string(pHelp->keyword); pHelp->keyword=str_dup(keyword); help_init_quicklookup_table();// we need to recreate the lookup hashtable return true; } /**************************************************************************/ bool hedit_file(char_data *ch, char *argument) { helpfile_data *pHelpFD; help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println("Syntax: file <keyword>"); ch->println(" (changes the file the help entry is stored in.)"); return false; } pHelpFD=helpfile_get_by_filename(argument); if (pHelpFD) { if (pHelpFD==pHelp->helpfile) { ch->printlnf("Help entry already stored in %s", pHelp->helpfile->file_name); return false; } // change the help entry pHelp->helpfile->entries--; // decrement the entries in the old file SET_BIT( pHelp->helpfile->flags, HELPFILE_CHANGED); pHelp->helpfile = pHelpFD; pHelp->helpfile->entries++; // increment the entries in the newfile SET_BIT( pHelp->helpfile->flags, HELPFILE_CHANGED); ch->printlnf("Help entry now stored in %s",pHelp->helpfile->file_name); return false; } else { ch->println("`#Couldn't find the name of the new helpfile to store the"); ch->println("help entry in. Use `=Chlist`^ to find a name"); return false; } return true; } /**************************************************************************/ bool hedit_flags(char_data *ch, char *argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); int value; if ( IS_NULLSTR(argument)) { show_olc_options(ch, help_flags, "flags", "help", pHelp->flags); return false; } if (( value = flag_value( help_flags, argument )) != NO_FLAG ) { TOGGLE_BIT( pHelp->flags, value); ch->println("Help flag toggled."); return true; } return false; } /**************************************************************************/ bool hedit_removehelp(char_data *ch, char *argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: removehelp confirm"); ch->wrapln( "This flags the helpfile for removal, next time the help is " "autosaved, the help entry will not be saved in the file - effectively " "removed after the next reboot. Helplist shows entries marked for removal."); ch->println( "Syntax: removehelp restore"); ch->println(" restore can be used to mark the helpfile to be saved next autosave."); return false; } if ( !str_cmp("restore", argument)) { if(IS_SET(pHelp->flags, HELP_REMOVEHELP)){ REMOVE_BIT(pHelp->flags, HELP_REMOVEHELP); SET_BIT( pHelp->helpfile->flags, HELPFILE_CHANGED); do_hsave(NULL,""); ch->println( "Help entry will no longer be removed."); return true; } ch->println( "This help entry has not been flagged for removal."); return false; } if ( !str_cmp("confirm", argument)) { char buf[MSL]; SET_BIT(pHelp->flags, HELP_REMOVEHELP); ch->println( "This help entry has been flagged for removal."); ch->println( "next hotreboot this help will no longer exist, use 'removehelp restore' to undo this effect."); sprintf(buf, "%s flagged help entry '%s' for removal, level %d, flags '%s'\ntext:", TRUE_CH(ch)->name, pHelp->keyword, pHelp->level, flag_string( help_flags, pHelp->flags)); logf(buf); append_string_to_file( REMOVEDHELP_FILE, buf, true); append_string_to_file( REMOVEDHELP_FILE, pHelp->text, true); return true; } hedit_removehelp(ch,""); return false; } /**************************************************************************/ bool hedit_category( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); int value; if(IS_NULLSTR(argument)){ show_olc_options(ch, help_category_types, "category", "help category", pHelp->category); return false; } if ( ( value = flag_value( help_category_types, argument) ) != NO_FLAG ) { pHelp->category= value; ch->printlnf( "Help category set to %s.", flag_string(help_category_types, pHelp->category) ); return true; } return false; } /**************************************************************************/ bool hedit_parenthelp( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: parenthelp (string)" ); ch->println( "Syntax: parenthelp - (to clear)" ); return false; } if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_cmp(argument,"-")){ ch->printlnf("Parent help cleared (was '%s')", pHelp->parent_help); replace_string( pHelp->parent_help, ""); return true; } argument=uppercase(rtrim_string(argument)); if(!help_get_by_keyword(argument, NULL, false)){ ch->printlnf("`RWARNING:`x couldn't find any help entry to match '%s'", argument); } ch->printlnf( "Parent help changed from '%s' to '%s'.", pHelp->parent_help, argument); replace_string( pHelp->parent_help, argument); return true; } /**************************************************************************/ bool hedit_seealso( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: seealso (string)" ); ch->println( "Syntax: seealso - (to clear)" ); return false; } if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_infix(",", argument)){ ch->println("All comma characters are automatically stripped from the seealso words."); } if(!str_cmp(argument,"-")){ ch->printlnf("SeeAlso cleared (was '%s')", pHelp->see_also); replace_string( pHelp->see_also, ""); return true; } argument=uppercase(rtrim_string(argument)); ch->printlnf( "See_also changed from '%s' to '%s'.", pHelp->see_also, argument); replace_string( pHelp->see_also, argument); pHelp->see_also=string_replace_all(pHelp->see_also, ",", ""); return true; } /**************************************************************************/ bool hedit_immseealso( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: immseealso (string)" ); ch->println( "Syntax: immseealso - (to clear)" ); return false; } // invalid character checks if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_infix(",", argument)){ ch->println("All comma characters are automatically stripped from the immseealso words."); } if(!str_cmp(argument,"-")){ ch->printlnf("ImmSeeAlso cleared (was '%s')", pHelp->immsee_also); replace_string( pHelp->immsee_also, ""); return true; } argument=uppercase(rtrim_string(argument)); ch->printlnf( "ImmSeeAlso changed from '%s' to '%s'.", pHelp->immsee_also, argument); replace_string( pHelp->immsee_also, argument); pHelp->immsee_also=string_replace_all(pHelp->immsee_also, ",", ""); return true; } /**************************************************************************/ bool hedit_spellname( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); int sn; if ( IS_NULLSTR(argument)){ ch->println( "Syntax: spellname (string)" ); ch->println( "Syntax: spellname - (to clear)" ); return false; } sn=spell_lookup(argument); if(sn<0){ ch->printlnf("There is no spell called '%s'", argument); return false; } ch->printlnf("Spell name changed from '%s' to '%s'", pHelp->spell_name, skill_table[sn].name); replace_string(pHelp->spell_name, skill_table[sn].name); return true; } /**************************************************************************/ bool hedit_title( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: title (string)" ); ch->println( "Syntax: title - (to clear)" ); return false; } argument=rtrim_string(argument); if(!str_cmp(argument,"-")){ ch->printlnf("Help Title cleared (was '%s')", pHelp->title); replace_string( pHelp->title, ""); return true; } ch->printlnf( "Help Title changed from '%s' to '%s'.", pHelp->title, argument); replace_string( pHelp->title, argument); return true; } /**************************************************************************/ bool hedit_commandref( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: commandref (string)" ); ch->println( "Syntax: commandref - (to clear)" ); ch->println( ""); ch->println( "type `=Ccommands`x to see the hedit commands"); return false; } argument=ltrim_string(rtrim_string(lowercase(argument))); if(!str_cmp(argument,"-")){ ch->printlnf("Help command reference cleared (was '%s')", pHelp->command_reference); replace_string( pHelp->command_reference, ""); return true; } ch->printlnf( "Help command reference changed from '%s' to '%s'.", pHelp->command_reference, argument); replace_string( pHelp->command_reference, argument); return true; } /**************************************************************************/ bool hedit_continues( char_data *ch, char * argument) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: continues (string)" ); ch->println( "Syntax: continues - (to clear)" ); ch->println( "This is used to link to a help file that continues with another."); return false; } if(!str_infix("`", argument)){ ch->println("You can't have the ```` colour code in a help reference."); return false; } if(!str_cmp(argument,"-")){ ch->printlnf("Continues help cleared (was '%s')", pHelp->continues); replace_string( pHelp->continues, ""); return true; } argument=uppercase(rtrim_string(argument)); if(!help_get_by_keyword(argument, NULL, false)){ ch->printlnf("`RWARNING:`x couldn't find any help entry to match '%s'", argument); } ch->printlnf( "Continues help changed from '%s' to '%s'.", pHelp->continues, argument); replace_string( pHelp->continues, argument); return true; } /**************************************************************************/ bool hedit_wraptext( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if(IS_NULLSTR(argument) || str_cmp(argument,"confirm")){ ch->println("`=lSyntax: `=Cwraptext confirm`x"); ch->wrapln("This will wordwrap the text of the help entry, if you dont like it you " "can use `=Cundowrap`x to revert a backup made just before wrapping."); return false; } replace_string(pHelp->undo_wraptext, pHelp->text); pHelp->text= note_format_string( pHelp->text); get_widest_line_stats(pHelp->text, true, &pHelp->widest_line, &pHelp->widest_line_width); SET_BIT(pHelp->flags,HELP_WORDWRAPPED); ch->println("Help text wordwrapped, you can use undowrap to revert to previous text layout."); return true; } /**************************************************************************/ bool hedit_undowrap( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if(IS_NULLSTR(argument) || str_cmp(argument,"confirm")){ ch->println("`=lSyntax: `=Cundowrap confirm`x"); ch->wrapln("This reverts the text to a backup made just before last wordwrapping."); return false; } if(IS_NULLSTR(pHelp->undo_wraptext)){ ch->println("hedit_undowrap(): sorry there is no unwrap text backup available."); return false; } replace_string(pHelp->text, pHelp->undo_wraptext); get_widest_line_stats(pHelp->text, true, &pHelp->widest_line, &pHelp->widest_line_width); REMOVE_BIT(pHelp->flags,HELP_WORDWRAPPED); ch->println("Text reverted to just before last wraptext."); return true; } /**************************************************************************/ bool hedit_undotext( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if(IS_NULLSTR(argument) || str_cmp(argument,"confirm")){ ch->println("`=lSyntax: `=Cundotext confirm`x"); ch->wrapln("This reverts the text to a backup made just before " "the last time you entered the text editor."); return false; } if(IS_NULLSTR(pHelp->undo_edittext)){ ch->println("hedit_undotext(): sorry there is no text backup available."); return false; } replace_string(pHelp->text, pHelp->undo_edittext); get_widest_line_stats(pHelp->text, true, &pHelp->widest_line, &pHelp->widest_line_width); REMOVE_BIT(pHelp->flags,HELP_WORDWRAPPED); ch->println("Text reverted to just before last text edit."); return true; } /**************************************************************************/ bool hedit_assigneditor( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if(IS_NULLSTR(argument) || !is_number(argument)){ ch->println("`=lSyntax: `=Cassigneditor #`x"); ch->wrapln("This assigns an editor to the help entry which can " "then be searched for later."); return false; } int value=atoi(argument); ch->printlnf("Editor changed from %d to %d.", pHelp->assigned_editor, value); pHelp->assigned_editor=value; return true; } /**************************************************************************/ bool hedit_convertlinecodes( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if ( IS_NULLSTR(argument)) { ch->println( "Syntax: convertlinecodes confirm"); ch->println( "This command converts ``1 line codes into ``+."); ch->wrapln("``+ is a line code, which is only converted to a new line " "by the string wrapping code. It is sliently ignored by the " "colour system. The reason for using ``+ within helps is that " "it can be difficult using dawnftp to work with help entries in external " "editors that do not treat ``1 as a newline."); return false; } if ( str_cmp("confirm", argument)) { hedit_convertlinecodes(ch, ""); return false; } int count=0; // hide all ``1 codes from the replace of `1 codes while(!str_infix("``1", pHelp->text)){ pHelp->text= string_replace( pHelp->text, "``1", "!@#$%%^%$#@!"); } while(!str_infix("`1", pHelp->text)){ pHelp->text=string_replace( pHelp->text, "`1", "`+\n"); count++; } // return all original ``1 codes while(!str_infix("!@#$%%^%$#@!", pHelp->text)){ pHelp->text=string_replace( pHelp->text, "!@#$%%^%$#@!", "``1"); } if(count==0){ ch->println( "Couldn't find any ``1 code in string to replace."); }else{ ch->printlnf("Replaced %d ``1 symbols with ``+\\n",count); } return true; } /**************************************************************************/ bool hedit_editnexthelp( char_data *ch, char *argument ) { help_data *pHelp; EDIT_HELP(ch, pHelp); if(!pHelp->next){ ch->printlnf("There is no help file after 'help `=_%s'.", pHelp->keyword); return false; } do_help(ch, pHelp->next->keyword); ch->printlnf("Moving editing from 'help `=_%s' to 'help `=_%s'.", pHelp->keyword, pHelp->next->keyword); pHelp=pHelp->next; ch->desc->pEdit = (void *)pHelp; hedit_show(ch,""); return false; } /**************************************************************************/ /**************************************************************************/