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