#include <stdio.h>
#include "trie.h"
#include "globals.h"
#define ALLCHK 0x7FFFFFE
unsigned long trielookup(register unsigned long t, register char *s)
{
register unsigned long *p;
foo:
if (!*s)
return (t);
if (!ptr (t))
return (0);
p = dawg + ptr (t);
do {
if (chr (*p) == chr (*s)) {
t = *p;
s++;
goto foo;
}
}
while (!last (*p++));
return (0);
}
unsigned long checkout (char *s, unsigned long *score)
{
register unsigned long chek = 0;
register unsigned long *p;
register char *s1 = s;
*score = 0;
while (s1[-1])
(*score) += lettervalue[*--s1];
/* now s1 points to top of word */
p = dawg + ptr (trielookup (root, s1));
if (p == dawg)
return (0);
do
if (term (trielookup (*p, s + 1)))
chek |= (1 << chr (*p));
while (!last (*p++));
while (s[1])
(*score) += lettervalue[*++s];
return (chek);
}
void computechecks (char fill[17][17],
unsigned long check[17][17],
unsigned long trans[17][17])
{
unsigned long i, j;
for (i = 1; i < 16; i++)
for (j = 1; j < 16; j++) {
trans[j][i] = -1;
check[j][i] =
fill[i][j] ? 0
:fill[i][j - 1] || fill[i][j + 1] ?
checkout (fill[i] + j, trans[j] + i)
:ALLCHK;
}
}