00001
00013
00014 #include <string.h>
00015 #include <stdlib.h>
00016 #include "lookup_words.h"
00017
00018
00019
00030 int lookup_words(keyword_t words[], int len, const char * s)
00031 {
00032 int p, q, r, comp;
00033
00034 p = 0;
00035 q = len - 1;
00036
00037 while (p <= q)
00038 {
00039 r = (p + q) / 2;
00040 comp = strcasecmp(s, words[r].name);
00041
00042 if (comp == 0)
00043 return words[r].tokn;
00044
00045 if (comp < 0)
00046 q = r - 1;
00047 else
00048 p = r + 1;
00049 }
00050
00051 return -1;
00052 }
00053
00054
00055
00059 int lookup_membcompare(const void * a1, const void * a2)
00060 {
00061 return strcasecmp(((keyword_t *)a1)->name, ((keyword_t *)a2)->name);
00062 }
00063
00064
00065
00074 void lookup_sorttable(keyword_t words[], int len)
00075 {
00076 qsort((void *)words, len, sizeof(keyword_t), &lookup_membcompare);
00077 }
00078