1*3c3a7b76Schristos /*
2*3c3a7b76Schristos  * cat.lex: A demonstration of YY_NEW_FILE.
3*3c3a7b76Schristos  */
4*3c3a7b76Schristos 
5*3c3a7b76Schristos %{
6*3c3a7b76Schristos #include <stdio.h>
7*3c3a7b76Schristos 
8*3c3a7b76Schristos char **names = NULL;
9*3c3a7b76Schristos int  current = 1;
10*3c3a7b76Schristos %}
11*3c3a7b76Schristos 
12*3c3a7b76Schristos %%
13*3c3a7b76Schristos <<EOF>> {
14*3c3a7b76Schristos            current += 1;
15*3c3a7b76Schristos            if(names[current] != NULL){
16*3c3a7b76Schristos               yyin = fopen(names[current],"r");
17*3c3a7b76Schristos               if(yyin == NULL){
18*3c3a7b76Schristos                 fprintf(stderr,"cat: unable to open %s\n",
19*3c3a7b76Schristos                         names[current]);
20*3c3a7b76Schristos                 yyterminate();
21*3c3a7b76Schristos               }
22*3c3a7b76Schristos               YY_NEW_FILE;
23*3c3a7b76Schristos            } else {
24*3c3a7b76Schristos              yyterminate();
25*3c3a7b76Schristos            }
26*3c3a7b76Schristos         }
27*3c3a7b76Schristos %%
28*3c3a7b76Schristos 
29*3c3a7b76Schristos int main(int argc, char **argv)
30*3c3a7b76Schristos {
31*3c3a7b76Schristos     if(argc < 2){
32*3c3a7b76Schristos        fprintf(stderr,"Usage: cat files....\n");
33*3c3a7b76Schristos        exit(1);
34*3c3a7b76Schristos     }
35*3c3a7b76Schristos     names = argv;
36*3c3a7b76Schristos 
37*3c3a7b76Schristos     yyin = fopen(names[current],"r");
38*3c3a7b76Schristos     if(yyin == NULL){
39*3c3a7b76Schristos       fprintf(stderr,"cat: unable to open %s\n",
40*3c3a7b76Schristos               names[current]);
41*3c3a7b76Schristos       yyterminate();
42*3c3a7b76Schristos     }
43*3c3a7b76Schristos 
44*3c3a7b76Schristos     yylex();
45*3c3a7b76Schristos }
46