--- 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);
+}
+