stage1_2/stage1_2.cc
changeset 136 32bd7ef40897
parent 86 1988bf1634da
child 139 668a54686827
--- 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);
+}
+