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