void 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; }