+#define MAX_INCLUDE_DEPTH 16
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+int line_stack[MAX_INCLUDE_DEPTH];
+int column_stack[MAX_INCLUDE_DEPTH];
+int include_stack_ptr = 0;
+
+void handleInclude(char*text, int len)
+{
+ text+=9;len-=9;
+ while(len >=1 && (text[0] == ' ' || text[0] == '\t')) {
+ text++;len--;
+ }
+ while(len >= 1 &&
+ (text[len-1] == ' ' ||
+ text[len-1] == '\r' ||
+ text[len-1] == '\n')) {
+ len--;
+ }
+ if(len >= 2 && text[0] == '"' && text[len-1] == '"') {
+ text++; len-=2;
+ }
+ text[len] = 0;
+ if(include_stack_ptr >= MAX_INCLUDE_DEPTH) {
+ fprintf( stderr, "Includes nested too deeply" );
+ exit( 1 );
+ }
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+ line_stack[include_stack_ptr] = line;
+ column_stack[include_stack_ptr] = column;
+ include_stack_ptr++;
+ yyin = fopen(text, "rb");
+ if (!yyin) {
+ fprintf(stderr, "Couldn't open %s\n", text);
+ exit(1);
+ }
+ yy_switch_to_buffer(yy_create_buffer( yyin, YY_BUF_SIZE ) );
+
+#ifdef INITIAL
+ BEGIN(INITIAL);
+#else
+ // best guess
+ BEGIN(0);
+#endif
+}
+