xref: /original-bsd/usr.bin/spell/spellout.c (revision b21da0a0)
1 #ifndef lint
2 static char sccsid[] = "@(#)spellout.c	4.2 02/02/91";
3 #endif
4 
5 #include "spell.h"
6 
7 main(argc, argv)
8 int argc;
9 char **argv;
10 {
11 	register i, j;
12 	long h;
13 	register long *lp;
14 	char word[NW];
15 	int dflag = 0;
16 	int indict;
17 	register char *wp;
18 
19 	if (argc>1 && argv[1][0]=='-' && argv[1][1]=='d') {
20 		dflag = 1;
21 		argc--;
22 		argv++;
23 	}
24 	if(argc<=1) {
25 		fprintf(stderr,"spellout: arg count\n");
26 		exit(1);
27 	}
28 	if(!prime(argc,argv)) {
29 		fprintf(stderr,
30 		    "spellout: cannot initialize hash table\n");
31 		exit(1);
32 	}
33 	while (fgets(word, sizeof(word), stdin)) {
34 		indict = 1;
35 		for (i=0; i<NP; i++) {
36 			for (wp = word, h = 0, lp = pow2[i];
37 				(j = *wp) != '\0'; ++wp, ++lp)
38 				h += j * *lp;
39 			h %= p[i];
40 			if (get(h)==0) {
41 				indict = 0;
42 				break;
43 			}
44 		}
45 		if (dflag == indict)
46 			fputs(word, stdout);
47 	}
48 }
49