1 /*
2  *  BMG.C
3  *
4  *  Written by Paul Edwards and released to the public domain.
5  *
6  *  Emulate Boyer-More-Gosper routines, without actually doing it, because
7  *  Msged doesn't use the proper functionality, for unknown reasons.
8  */
9 
10 #include <string.h>
11 #include <ctype.h>
12 #include <stdlib.h>
13 #include "bmg.h"
14 #include "strextra.h"
15 
16 static char search_string[256];
17 
bmg_find(char * text,char * search)18 char *bmg_find(char *text, char *search)
19 {
20     char *endText, *p;
21     int lent, lens, searchStart;
22 
23     lent = strlen(text);
24     lens = strlen(search);
25     if (lens > lent)
26     {
27         return NULL;
28     }
29     searchStart = toupper(*search);
30     p = text;
31     endText = p + (lent - lens) + 1;
32     while (p != endText)
33     {
34         if (toupper(*p) == searchStart)
35         {
36             if (strncmpi(p, search, lens) == 0)
37             {
38                 return p;
39             }
40         }
41         p++;
42     }
43     return NULL;
44 }
45 
bmg_setsearch(char * search)46 void bmg_setsearch(char *search)
47 {
48     strcpy(search_string, search);
49 }
50 
bmg_search(char * text)51 char *bmg_search(char *text)
52 {
53     return bmg_find(text, search_string);
54 }
55