# include "refer.h"
# define BSIZ 2000
int getq(char *v[], int nitem)
{
static char buff[BSIZ];
static int eof = 0;
char *p;
int c, n = 0, las = 0;
if (eof)
return -1;
p = buff;
while ( (c = (sinput ? *sinput++ : getchar()) ) > 0) {
if (c == '\n')
break;
if (isalpha(c) || isdigit(c)) {
if (las == 0) {
if (n >= nitem)
err("Cannot handle more than %d query items", nitem);
v[n++] = p;
las = 1;
}
if (las++ <= 6)
*p++ = c;
} else {
if (las > 0)
*p++ = 0;
las = 0;
}
}
*p = 0;
assert(p < buff + BSIZ);
if (c <= 0) {
if (sinput == 0)
eof = 1;
else
sinput--;
}
n = keycomp(v, n);
# if D1
fprintf(stderr, "no. keys %d\n", n);
for (c = 0; c < n; c++)
fprintf(stderr, "keys X%sX\n", v[c]);
# endif
return n;
}
int keycomp(char *v[], int n) /* compress keys */
{
int i, j, k;
for (i = j = 0; i < n; i++) {
for (k = 0; k < j; k++)
if (strcmp(v[i], v[k]) == 0)
break;
if (k < j) /* found it */
continue;
v[j++] = v[i];
}
return j;
}
|