+ out.println(" double result=0.0;");\r
+ out.println(" unsigned int value=0;");\r
+ out.println(" unsigned int maxvalue=((unsigned int)(1<<32)-1)/10;");\r
+ out.println(" bool isNeg=false;");\r
+ out.println(" bool isDiv=false;");\r
+ out.println(" unsigned int radix = 10;");\r
+ out.println();\r
+ out.println(" if (filearray[*pos]=='-') {");\r
+ out.println(" isNeg=true;");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" }");\r
+ out.println(" bool cont=true;");\r
+ out.println(" bool exp=false;");\r
+ out.println(" bool decimal=false;");\r
+ out.println(" bool compute=true;");\r
+ out.println(" bool omit=false;");\r
+ out.println(" unsigned int dcount=0;");\r
+ out.println(" // compute the base");\r
+ out.println(" do {");\r
+ out.println(" unsigned char b=filearray[*pos];");\r
+ out.println(" unsigned int val;");\r
+ out.println(" if (b>='0'&&b<='9') {");\r
+ out.println(" if (!omit) {");\r
+ out.println(" val=b-'0';");\r
+ out.println(" if(decimal) {");\r
+ out.println(" dcount++;");\r
+ out.println(" }");\r
+ out.println(" }");\r
+ out.println(" } else if (b=='.') {");\r
+ out.println(" decimal=true;");\r
+ out.println(" compute=false;");\r
+ out.println(" } else if (b=='E'||b=='e') {");\r
+ out.println(" exp=true;");\r
+ out.println(" cont=false;");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" } else {");\r
+ out.println(" cont=false;");\r
+ out.println(" }");\r
+ out.println(" if (cont) {");\r
+ out.println(" if (val>=radix)");\r
+ out.println(" printf(\"Error in nextDouble(): val >= radix\");");\r
+ out.println(" if(compute) {");\r
+ out.println(" if(value<maxvalue) {");\r
+ out.println(" value=value*radix+val;");\r
+ out.println(" } else {");\r
+ out.println(" omit=true;");\r
+ out.println(" compute=false;");\r
+ out.println(" dcount--;");\r
+ out.println(" }");\r
+ out.println(" } else if(!omit) {");\r
+ out.println(" compute=true;");\r
+ out.println(" }");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" }");\r
+ out.println(" }while(cont);");\r
+ out.println(" if(exp) {");\r
+ out.println(" // compute the power index");\r
+ out.println(" cont=true;");\r
+ out.println(" unsigned int n=0;");\r
+ out.println(" if (filearray[*pos]=='-') {");\r
+ out.println(" isDiv=true;");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" } else if (filearray[*pos]=='+') {");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" }");\r
+ out.println(" do {");\r
+ out.println(" unsigned char b=filearray[*pos];");\r
+ out.println(" unsigned int val;");\r
+ out.println(" if (b>='0'&&b<='9') {");\r
+ out.println(" val=b-'0';");\r
+ out.println(" } else {");\r
+ out.println(" cont=false;");\r
+ out.println(" }");\r
+ out.println(" if (cont) {");\r
+ out.println(" if (val>=radix)");\r
+ out.println(" printf(\"Error in nextDouble(): val >= radix\");");\r
+ out.println(" n=n*10+val;");\r
+ out.println(" *pos=*pos+1;");\r
+ out.println(" }");\r
+ out.println(" }while(cont);");\r
+ out.println(" if(isDiv) {");\r
+ out.println(" result = (double)value/pow(radix, n+dcount);");\r
+ out.println(" } else {");\r
+ out.println(" if(n>dcount) {");\r
+ out.println(" result = (double)value*pow(radix, n-dcount);");\r
+ out.println(" } else if(n<dcount) {");\r
+ out.println(" result = (double)value/pow(radix, dcount-n);");\r
+ out.println(" } else {");\r
+ out.println(" result = (double)value;");\r
+ out.println(" }");\r
+ out.println(" }");\r
+ out.println(" } else {");\r
+ out.println(" result = (double)value/pow(radix, dcount);");\r
+ out.println(" }");\r
+ out.println(" if (isNeg)");\r
+ out.println(" result=-result;");\r
+ out.println();\r
+ out.println("return result;");\r