home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume1 / xref / xreflex.l < prev   
Encoding:
Lex Description  |  1986-11-30  |  837 b   |  45 lines

  1. %{
  2. #define INFINITE_LOOP  while (1)
  3. int gargc;        /* global argc duplicate */
  4. char **gargv;        /* global argv duplicate */
  5. int n = 1;        /* line counter */
  6. char *fname = "-";    /* current file name */
  7.  
  8. %}
  9. startid [A-Za-z_]
  10. moreid [A-Za-z_0-9]
  11. %%
  12. {startid}{moreid}*    printf(" %s\t%s\t%d\n", yytext, fname, n);
  13. \n            n++;
  14. .            ;
  15. %%
  16.  
  17. yywrap()
  18. {
  19.     /* reset line count & proceed to next file, or quit */
  20.     n = 1;
  21.     if (next_open())   return(0);
  22.     else   exit(0);
  23. }
  24.  
  25. next_open()
  26. {
  27.     (void) fclose(stdin);
  28.     while (--gargc > 0) {
  29.     fname = *++gargv;
  30.     if (fopen(fname,"r") != NULL)
  31.         return(1);
  32.     fprintf(stderr, "xref: can't open %s\n", fname);
  33.     }
  34.     return(0);
  35. }
  36.  
  37. main(argc,argv,env)
  38. int argc;   char **argv;   char *env[];
  39. {
  40.     gargc = argc;   gargv=argv;
  41.     if (gargc==1 || next_open())
  42.     INFINITE_LOOP (void) yylex();
  43.     exit(2);
  44. }
  45.