#include #define STORLEK 20000 #define LANGD 50 #define PTAL 11 /* p[] */ #define bokstav(t) (97<=t&&t<=125||65<=t&&t<=93) #define liten(t) (97<=t&&t<=125) #define stor(t) (65<=t&&t<=93) #define Liten(t) ((65<=t&&t<=93)?t+32:t) #define sann 1 #define falsk 0 #define ETT14 1<<14 #define DELORDMIN 3 #define ORDMIN 2 int tabell[STORLEK]; char lexf_namn[40],ordf_namn[40]; FILE *lexf, *ordf, *logfil; long pow2[PTAL][LANGD]; /* NP, NW */ int filter = falsk; long p[] = { 319993, 319981, 319967, 319927, 319919, 319849, 319831, 319829, 319819, 319817, 319811}; main(argc,argv) int argc; char *argv[]; { char ord[LANGD], Ord[LANGD], ordin[LANGD]; initiera(); oppna_filer(argc,argv); tag_lexikon(); while(tagord(ordin) ) { versaler_gemena(ordin,ord,Ord); if(!(finns(ordin) || ord[0] != '\0' && finns(ord) || Ord[0] != '\0' && finns(Ord))) { printf("%s\n",ordin); fprintf(logfil,"%s\n",ordin); } } } tagord(ordin) char ordin[]; { char t; int i; int mer; static int nyfil = sann; do { i=0; mer = sann; while(mer) { if(nyfil) { nyfil = falsk; t = '\n'; } else t = getc(ordf); while(!bokstav(t) && t != EOF) if(t == '\n') { if((t=getc(ordf)) == '.' || t=='\'') while( (t=getc(ordf)) != '\n' && t != EOF) t = getc(ordf); } else t=getc(ordf); while(bokstav(t)){ ordin[i] = t; i++; t = getc(ordf); } if(t == '-') { t = getc(ordf); if (t == '\n' || bokstav(t)) mer = sann; else mer = falsk; } else mer = falsk; ungetc(t,ordf); } ordin[i] = 0; }while( i>0 && i0); } initiera() { int i,j; long h; for(i=0; i=DELORDMIN; i--) { delaord(l,i,ord,ord2,ord3); /* printf("#%s=%s - %s\n",ord,ord2,ord3); */ if(i_lexikon(ord2)) { if(finns2(ord3)) return(sann); else if(ord3[0] == 's') if(finns2( ord3+1 )) return(sann); } if( l-i != i) { delaord(l,l-i,ord,ord2,ord3); /* printf("#%s=%s-%s\n",ord,ord2,ord3); */ if(i_lexikon(ord2)) { if(finns2(ord3)) return(sann); else if(ord3[0] == 's') if(finns2( ord3+1 )) return(sann); } } } return(falsk); } i_lexikon(ord) char ord[]; { int i,j; long h; for(i=0; i>4] & ( 1<<((int) h & 017))) ) { return(0); } } return(1); } oppna_filer(argc,argv) int argc; char *argv[]; { if(argc == 1) { filter = sann; ordf = stdin; } else if(argc == 2) { strcpy(ordf_namn,argv[1]); while((ordf = fopen(ordf_namn,"r")) == NULL) { printf("Fel hos filen %s, ge nytt filnamn:",ordf_namn); scanf("%s",ordf_namn); } } else { printf("\nAnv{ndning: stava filnamn\n"); exit(1); } strcpy(lexf_namn,"/usr/dict/stavalist"); while((lexf = fopen(lexf_namn,"r")) == NULL) { printf("Fel hos lexikonfilen %s, ge nytt filnamn:",lexf_namn); scanf("%s",lexf_namn); } if((logfil = fopen("/usr/dict/stavahist","a")) == NULL) logfil = fopen("/dev/null","a"); } tag_lexikon() { fread(tabell,(sizeof(int)),STORLEK,lexf); } delaord(l,i,ord,ord2,ord3) int l,i; char ord[], ord2[], ord3[]; { int j,k; for(j=0; j