|
|
1.1 ! root 1: %{ ! 2: # define WORD 1 ! 3: # define DOT 2 ! 4: extern char *yylval, *sufstr(); ! 5: char *svc(); ! 6: # include "assert.h" ! 7: # include "ctype.h" ! 8: %} ! 9: %% ! 10: [-'A-Za-z0-9#]+ {lcase(yytext); cfree(yylval); ! 11: yylval=svc(sufstr(yytext)); return(WORD);} ! 12: "." return(DOT); ! 13: "!" return(DOT); ! 14: "?" return(DOT); ! 15: . ; ! 16: \n ; ! 17: %% ! 18: yywrap() ! 19: { ! 20: return(1); /* always stop on eof */ ! 21: } ! 22: char * ! 23: svc(s) ! 24: char *s; ! 25: { ! 26: char *p, *calloc(); ! 27: p = calloc(strlen(s)+1,1); ! 28: assert(p!=0); ! 29: strcpy(p,s); ! 30: return(p); ! 31: } ! 32: trimnl(s) ! 33: char *s; ! 34: { ! 35: while (*s)s++; ! 36: if (*--s=='\n') *s=0; ! 37: } ! 38: lcase(s) ! 39: register char *s; ! 40: { ! 41: register int c; ! 42: register char *p; ! 43: if (*s==0) return; ! 44: for(p=s+1; c= *p; p++) ! 45: if (isupper(c)) ! 46: return; ! 47: if (isupper(c = *s)) ! 48: *s= tolower(c); ! 49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.