rendered paste bodyvoid scanfile (FILE *infile, char *filename, listmap_ref map, option) {
int linenr;
for (linenr = 1;; ++linenr) {
char buffer[1024];
char *charptr = fgets (buffer, sizeof buffer, infile);
listmap_itor_ref itor = NULL;
if (charptr == NULL) break;
charptr = strchr (buffer, '\n');
if (charptr != NULL) {
*charptr = '\0';
}else {
eprintf ("%s: %s: line %d: missing newline\n",
exec_name, filename, linenr);
}
xprintf ("%s: %d: %s\n", filename, linenr, buffer);
}
}int main (int argc, char **argv) {
bool eflag = FALSE;//-e option
listmap_ref map = NULL;
exec_name = basename (argv[0]);
map = new_listmap ();
opterr = FALSE;
for(;;){
int option = getopt(argc, argv, "e");
if(option == EOF)break;
switch(option){
case 'e': eflag = TRUE; break;
default : eprintf("%s: -%c: invalid option\n", exec_name, optopt);
exit_status = EXIT_FAILURE;
};
};
if (argc < 2) {
scanfile (stdin, stdin_filename, map, option);
}else {
int argi;
for (argi = 1; argi < argc; ++argi) {
if (strcmp (argv[argi], stdin_filename) == 0) {
scanfile (stdin, stdin_filename, map, option);
}else {
char *filename = argv[argi];
FILE *infile = fopen (filename, "r");
if (infile == NULL) {
eprintf ("%s: %s: %s\n",
exec_name, filename, strerror (errno));
}else {
scanfile (infile, filename, map, option);
xfclose (infile);
}
};
};
};
return exit_status;
}