From: dennis@starlifter.reichel.net

> > Humm.. what you will probally need to do is to parse the keywords
> > yourself, and i don't think that you can have spaces in them.. i think a
> > space seperates keywords, what you need to do is a have some code that
> > looks like this.
> 
> > 	word = strtok(phelp->keywords,seps)
> 
> Almost, except use one_argument rather than strtok; help keywords can have
> space in them, e.g. 'magic missile'. 
> 

I achieved a similar effect more simply :-)  

help <one character>

Will display the keywords only that begin with that letter.  It works fine
on my server - anyone is welcome to drop it into their rom, I require no
credit or postcards, etc :-)


void do_help( CHAR_DATA *ch, char *argument )
{
    HELP_DATA *pHelp;
    BUFFER *output;
    bool found = FALSE;
    char argall[MAX_INPUT_LENGTH],argone[MAX_INPUT_LENGTH];
    int level;

    output = new_buf();

    if ( argument[0] == '\0' )
	argument = "summary";

    /* this parts handles help a b so that it returns help 'a b' */
    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 )
    {
    	level = (pHelp->level < 0) ? -1 * pHelp->level - 1 : pHelp->level;

	if (level > get_trust( ch ) )
	    continue;

	if ( is_name( argall, pHelp->keyword ) )
	{
	    /* add seperator if found */
	    if (found)
		add_buf(output,
    "\n\r#W============================================================#n\n\r\n\r");
//    Someone edited my helps and put all the 0's to -1 so.... :-)
//	    if ( pHelp->level >= 0 && str_cmp( argall, "imotd" ) ) 
	    if ( pHelp->level >= -1 && str_cmp( argall, "imotd" ) )
	    {
		add_buf(output,pHelp->keyword);
		add_buf(output,"\n\r");
	    }

	    /*
	     * Strip leading '.' to allow initial blanks.
	     */
	    if ( strlen( argall ) == 1 )   
	        ;     // DJR HACK - display only keywords 	       	    
	    else if ( pHelp->text[0] == '.' )
		add_buf(output,pHelp->text+1);
	    else
		add_buf(output,pHelp->text);
	    found = TRUE;
	    /* small hack :) */
	    if (ch->desc != NULL && ch->desc->connected != CON_PLAYING 
	    &&  		    ch->desc->connected != CON_GEN_GROUPS)
		break;
	}
    }

    if (!found)
    	send_to_char( "No help on that word.\n\r", ch );
    else
	page_to_char(buf_string(output),ch);
    free_buf(output);
}