diff -r 0f3f6714b938 -r 32bd7ef40897 stage1_2/stage1_2.cc --- a/stage1_2/stage1_2.cc Mon Aug 04 15:14:25 2008 +0200 +++ b/stage1_2/stage1_2.cc Tue Aug 12 16:14:12 2008 +0200 @@ -178,27 +178,76 @@ return strcat(strcat(strcpy(res, a), b), c); /* safe, actually */ } - - - - - -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ -/***********************************************************************/ - - -int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref); - - -int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root_ref) { - return stage1_2__(filename, includedir, tree_root_ref); -} - +/*************************/ +/* Tracking Functions... */ +/*************************/ + +extern tracking_t* current_tracking; + +/*-------------------------------------------------------------------- + * GetNextChar + * + * reads a character from input for flex + *------------------------------------------------------------------*/ +int GetNextChar(char *b, int maxBuffer) { + char *p; + + if ( current_tracking->eof ) + return 0; + + while ( current_tracking->currentChar >= current_tracking->lineLength ) { + current_tracking->currentChar = 0; + current_tracking->currentTokenStart = 1; + current_tracking->eof = false; + + p = fgets(current_tracking->buffer, MAX_BUFFER_LENGTH, current_tracking->in_file); + if ( p == NULL ) { + if ( ferror(current_tracking->in_file) ) + return 0; + current_tracking->eof = true; + return 0; + } + + current_tracking->lineNumber++; + current_tracking->lineLength = strlen(current_tracking->buffer); + } + + b[0] = current_tracking->buffer[current_tracking->currentChar]; + if (b[0] == ' ' || b[0] == '\t') + current_tracking->currentTokenStart++; + current_tracking->currentChar++; + + return b[0]==0?0:1; +} + +tracking_t* GetNewTracking(FILE* in_file) { + tracking_t* new_env = new tracking_t; + new_env->eof = 0; + new_env->lineNumber = 0; + new_env->currentChar = 0; + new_env->lineLength = 0; + new_env->currentTokenStart = 0; + new_env->buffer = (char*)malloc(MAX_BUFFER_LENGTH); + new_env->in_file = in_file; + return new_env; +} + +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ + + +int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full); + + +int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full) { + return stage1_2__(filename, includedir, tree_root_ref, full); +} +