ftp.nice.ch/pub/next/unix/editor/e2.N.bs.tar.gz#/e2.N.bs/find_match.c

This is find_match.c in view mode; [Download] [Up]

#include "e.h"


/*
 * find_match()
 *
 * Find the name in the history list that contains the 'pattern'.
 * If we find one, put it into the 'arg' variable. Otherwise
 * announce that a match couldn't be found and leave.
 *
 */
void
find_match(pattern)
char *pattern;
{
    register i;
	int match();

    /* 
     * Try for a match with each file in turn. Note that we are working
     * from most-recently-used backwards.
     *
     */

    for (i = hist_count - 1; i >= 0; i--){
        if (match(hist[i], pattern)){
            ok_sprintf(arg, "%s", hist[i]);
            reconstruct(i);
            return;
        }
    }

    /* 
     * We couldn't match so get out of here. 
     *
     */
    e_error("Unable to match with '%s'.", pattern);
}



/*
 * match()
 *
 * Boneheaded but easy pattern matcher. Just see if the 'pattern'
 * exists anywhere in the 'argument'. Boyer-Moore who?
 * In general our patterns will be so short that it wouldn't be
 * worth the effort to set up a better algorithm.
 *
 */
int
match(argument, pattern)
char *argument;
char *pattern;
{
    register length = strlen(pattern);

    while (strlen(argument) >= length){
        if (!strncmp(argument++, pattern, length)){
            return 1;
        }
    }
    return 0;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.