in utils/unlit/unlit.c [322:402]
int main(int argc,char **argv)
{
FILE *istream, *ostream;
char *file;
for (argc--, argv++; argc > 0; argc--, argv++)
if (strcmp(*argv,"-n")==0)
noisy = 1;
else if (strcmp(*argv,"-q")==0)
noisy = 0;
else if (strcmp(*argv,"-c")==0)
crunchnl = 1;
else if (strcmp(*argv,"-P")==0)
no_line_pragma = 1;
else if (strcmp(*argv,"-h")==0) {
if (argc > 1) {
argc--; argv++;
if (prefix_str)
free(prefix_str);
prefix_str = (char*)malloc(sizeof(char)*(1+strlen(*argv)));
if (prefix_str)
strcpy(prefix_str, *argv);
}
} else if (strcmp(*argv,"-#")==0)
ignore_shebang = 0;
else
break;
if (argc!=2) {
fprintf(stderr, USAGE);
exit(1);
}
if (strcmp(argv[0],argv[1])==0 && strcmp(argv[0],"-")!=0) {
fprintf(stderr, DISTINCTNAMES);
exit(1);
}
file = argv[0];
if (strcmp(argv[0], "-")==0) {
istream = stdin;
file = "stdin";
}
else
if ((istream=__hs_fopen(argv[0], "r")) == NULL) {
fprintf(stderr, CANNOTOPEN, argv[0]);
exit(1);
}
ofilename=argv[1];
if (strcmp(argv[1], "-")==0)
ostream = stdout;
else
if ((ostream=__hs_fopen(argv[1], "w")) == NULL) {
fprintf(stderr, CANNOTOPEN, argv[1]);
exit(1);
}
/* Prefix the output with line pragmas */
if (!no_line_pragma && prefix_str) {
/* Both GHC and CPP understand the #line pragma.
* We used to throw in both a #line and a {-# LINE #-} pragma
* here, but CPP doesn't understand {-# LINE #-} so it thought
* the line numbers were off by one. We could put the {-# LINE
* #-} before the #line, but there's no point since GHC
* understands #line anyhow. --SDM 8/2003
*/
fprintf(ostream, "#line 1 \"%s\"\n", prefix_str);
}
unlit(file, istream, ostream);
if (istream != stdin) fclose(istream);
if (ostream != stdout) {
if (fclose(ostream) == EOF) {
writeerror();
}
}
exit(errors==0 ? 0 : 1);
}