lex_var.h revision 255332
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/tools/lex_var.h 255332 2013-09-06 23:11:19Z cy $ */ 2145510Sdarrenr 3170268Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5170268Sdarrenr * 6170268Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7170268Sdarrenr */ 8145510Sdarrenr 9145510Sdarrenrextern long string_start; 10145510Sdarrenrextern long string_end; 11145510Sdarrenrextern char *string_val; 12145510Sdarrenrextern long pos; 13145510Sdarrenr 14145510Sdarrenr#define YY_INPUT(buf, result, max_size) \ 15145510Sdarrenr if (pos >= string_start && pos <= string_end) { \ 16145510Sdarrenr buf[0] = string_val[pos - string_start]; \ 17145510Sdarrenr pos++; \ 18145510Sdarrenr result = 1; \ 19145510Sdarrenr } else if ( yy_current_buffer->yy_is_interactive ) \ 20145510Sdarrenr { \ 21145510Sdarrenr int c = '*', n; \ 22145510Sdarrenr for ( n = 0; n < 1 && \ 23145510Sdarrenr (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ 24145510Sdarrenr buf[n] = (char) c; \ 25145510Sdarrenr if ( c == '\n' ) \ 26145510Sdarrenr buf[n++] = (char) c; \ 27145510Sdarrenr if ( c == EOF && ferror( yyin ) ) \ 28145510Sdarrenr YY_FATAL_ERROR( "input in flex scanner failed" ); \ 29145510Sdarrenr result = n; \ 30145510Sdarrenr pos++; \ 31145510Sdarrenr } \ 32145510Sdarrenr else if ( ((result = fread( buf, 1, 1, yyin )) == 0) \ 33145510Sdarrenr && ferror( yyin ) ) \ 34145510Sdarrenr YY_FATAL_ERROR( "input in flex scanner failed" ); 35145510Sdarrenr 36145510Sdarrenr#ifdef input 37145510Sdarrenr# undef input 38145510Sdarrenr# define input() (((pos >= string_start) && (pos < string_end)) ? \ 39145510Sdarrenr yysptr = yysbuf, string_val[pos++ - string_start] : \ 40145510Sdarrenr ((yytchar = yysptr > yysbuf ? U(*--yysptr) : \ 41145510Sdarrenr getc(yyin)) == 10 ? (pos++, yylineno++, yytchar) : \ 42145510Sdarrenr yytchar) == EOF ? (pos++, 0) : (pos++, yytchar)) 43145510Sdarrenr#endif 44145510Sdarrenr 45145510Sdarrenr#ifdef lex_input 46145510Sdarrenr# undef lex_input 47145510Sdarrenr# define lex_input() (((pos >= string_start) && (pos < string_end)) ? \ 48145510Sdarrenr yysptr = yysbuf, string_val[pos++ - string_start] : \ 49145510Sdarrenr ((yytchar = yysptr > yysbuf ? U(*--yysptr) : \ 50145510Sdarrenr getc(yyin)) == 10 ? (pos++, yylineno++, yytchar) : \ 51145510Sdarrenr yytchar) == EOF ? (pos++, 0) : (pos++, yytchar)) 52145510Sdarrenr#endif 53145510Sdarrenr 54145510Sdarrenr#ifdef unput 55145510Sdarrenr# undef unput 56145510Sdarrenr# define unput(c) { if (pos > 0) pos--; \ 57145510Sdarrenr yytchar = (c); if (yytchar == '\n') yylineno--; \ 58145510Sdarrenr *yysptr++ = yytchar; } 59145510Sdarrenr#endif 60145510Sdarrenr 61