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