%{ /* * merge.l - Flex source * Merges two PostScript files * */ #include #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif YY_BUFFER_STATE file1, file2; int second_is_open = 0; FILE *fp1, *fp2; %} %option noyywrap %x SECOND_FILE %% ^showsheet { printf("%%%%SHOWSHEET IN FIRST FILE: Removed!\n"); BEGIN(SECOND_FILE); if ( !second_is_open ){ second_is_open = 1; file1 = YY_CURRENT_BUFFER; yyin = fp2; file2 = yy_create_buffer(yyin, YY_BUF_SIZE); } yy_switch_to_buffer(file2); } ^showpage { printf("%%%%Next line renders the merged page.\nshowsheet\n"); BEGIN(INITIAL); yy_switch_to_buffer(file1); } %% void yyerror(char *msg) { fprintf(stderr, "Error...\n"); exit(1); } main(int argc, char *argv[]) { if ( (fp1 = fopen(argv[1], "r")) == NULL ){ fprintf(stderr, "%s: file not found!\n", argv[1]); exit(1); } if ( (fp2 = fopen(argv[2], "r")) == NULL ){ fprintf(stderr, "%s: file not found!\n", argv[2]); exit(1); } yyin = fp1; yylex(); exit(0); }