#ifdef ournix #include "ournix.h" #endif char sccsID[] = "@(#) le.c V1.1 Copyright Julian H. Stacey, February 1987\n" ; /* LE - Language Extractor */ #include #include char language; int lineno; char *filnam = "stdin" ; char **ARGV ; #include main(argc, argv) int argc ; char **argv; { char *p; FILE *fp; ARGV = argv ; #ifdef VSL /* { */ #include "../../include/vsl.h" #endif /* } */ if (argc < 2) usage(); language = '\0'; for (argv++; *argv ; argv++) { if (**argv == '-') { p = *argv + 1; if (!isalnum(language = *p)) { fprintf(stderr, "%s: Error Selector '%c' is not alpha numeric\n", *ARGV,language); exit(1); } if (islower(language)) language=toupper(language); continue; } break; } if (language == '\0') usage(); if (*argv == (char *)0) process(stdin); for (; *argv ; argv++) { fp = fopen(*argv, "r"); if(fp == NULL) { fprintf(stderr, "%s: Cannot open '%s'\n",*ARGV, *argv); continue; } filnam = *argv ; process(fp); (void) fclose(fp); } exit(0); } usage() { fprintf(stderr, "Usage: %s [-e/-d] [files...]\n", *ARGV); exit(1); } process(fp) register FILE *fp; { register int c; int lstart = 1; int skip = 0; lineno = 0 ; for (lstart = 1 ; (c = getc(fp)) != EOF; lstart = (c == '\n')) { if (lstart) { lineno++ ; switch (c) { case '{': if ((c = getc(fp)) == EOF) return; if (islower((char)c)) c =toupper((char)c); if (skip) warn(); if ((char)c == language) skip = 0; else skip = 1; while ( (c = getc(fp)) != EOF) if (c == '\n') break; continue; case '}': if ((c = getc(fp)) == EOF) return; if (islower((char)c)) c =toupper((char)c); if (skip) { if((char)c == language) warn(); } else if ((char)c != language) warn(); skip = 0; while ( (c = getc(fp)) != EOF) if(c == '\n') break; continue; default: break; } } if (!skip) putchar(c); } } warn() { fprintf(stderr, "%s: Warning: file %s, missing control, line %d.\n", *ARGV, filnam, lineno); }