changes for reading input files
[IRC.git] / Robust / src / Runtime / bamboo / multicoreruntime.c
index 57c971af4d1506f33e9b5ee0514499d70791ec4d..bed80cf40a50b49fd462a29a29000cded452cf55 100644 (file)
@@ -429,23 +429,94 @@ void CALL01(___System______printString____L___String___, struct ___String___ * _
 }
 #endif
 
-#ifdef D___Scanner______next____ 
-struct ArrayObject * CALL01(___Scanner______next____, struct ___Scanner___ * ___this___) {
+#ifdef D___Scanner______nextInt____ 
+int CALL01(___Scanner______nextInt____, struct ___Scanner___ * ___this___) {
   int pos = VAR(___this___)->___currentpos___;
-#if defined(MULTICORE_GC)||defined(PMC_GC)
-  struct ArrayObject * result= allocate_newarray(NULL, CHARARRAYTYPE, 10);
-#else
-  struct ArrayObject * result=allocate_newarray(CHARARRAYTYPE, 10);
-#endif
   int i = 0;
-  while(true) { //(VAR(___this___)->___sourcename___[pos]==' ')||(VAR(___this___)->___sourcename___[pos]=='\n')){
+  unsigned char * filearray = (unsigned char *)(VAR(___this___)->___filearray___);
+  while((filearray[pos]==' ')||(filearray[pos]=='\n')){
          pos++;
   }
+  int value = 0;
+  bool isNeg=false;
+  int radix = 10;
+
+  if (filearray[pos]=='-') {
+         isNeg=true;
+      pos++;
+  }
+  bool cont=true;
   do {
-         ((short *)(((char *)&result->___length___)+sizeof(int)))[i++]='\0';//(short)VAR(___this___)->___sourcename___[pos++]; // TODO
-  }while(true);//(VAR(___this___)->___sourcename___[pos]!=' ')&&(VAR(___this___)->___sourcename___[pos]!='\n'));
+         unsigned char b=filearray[pos];
+      int val;
+      if (b>='0'&&b<='9')
+        val=b-'0';
+      else if (b>='a'&&b<='z')
+        val=10+b-'a';
+      else if (b>='A'&&b<='Z')
+        val=10+b-'A';
+      else {
+        cont=false;
+      }
+      if (cont) {
+        if (val>=radix)
+          printf("Error in Scanner.nextInt(): val >= radix");
+        value=value*radix+val;
+               pos++;
+      }
+  }while(cont);
+  if (isNeg)
+         value=-value;
+
+  VAR(___this___)->___currentpos___ = pos;
+  return value;
+}
+#endif
+
+#ifdef D___Scanner______nextDouble____ 
+double CALL01(___Scanner______nextDouble____, struct ___Scanner___ * ___this___) {
+  int pos = VAR(___this___)->___currentpos___;
+  int i = 0;
+  unsigned char * filearray = (unsigned char *)(VAR(___this___)->___filearray___);
+  while((filearray[pos]==' ')||(filearray[pos]=='\n')){
+         pos++;
+  }
+  double value = 0.0;
+  bool isNeg=false;
+  int radix = 10;
+
+  if (filearray[pos]=='-') {
+         isNeg=true;
+      pos++;
+  } else if(filearray[pos]=='+') {
+         pos++;
+  }
+  bool cont=true;
+  // TODO
+  /*do {
+         unsigned char b=filearray[pos];
+      int val;
+      if (b>='0'&&b<='9')
+        val=b-'0';
+      else if (b>='a'&&b<='z')
+        val=10+b-'a';
+      else if (b>='A'&&b<='Z')
+        val=10+b-'A';
+      else {
+        cont=false;
+      }
+      if (cont) {
+        if (val>=radix)
+          System.error();
+        value=value*radix+val;
+               pos++;
+      }
+  }while(cont)*/
+  if (isNeg)
+         value=-value;
+
   VAR(___this___)->___currentpos___ = pos;
-  return result;
+  return value;
 }
 #endif