Annotation of researchv10no/cmd/PDP11/fpp/aux/mmatof.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Original ("atof1") from J.P. Hawkins at WH: "atof1.c"
                      3:  * "atof" in libc.a is in assembly language and uses floating point;
                      4:  * (No good when using RH floating point preprocessor)
                      5:  * mjm: put this in "flibu" (-lfu) "mmatof.o
                      6:  *     change name: atof1 -> atof
                      7:  */
                      8: 
                      9: double atof(s) /*convert string s to floating point*//* mjm: was atof1 */
                     10: char s[];
                     11: {
                     12:        char *s1;
                     13:        char *s2;
                     14:        double val,power;
                     15:        int i,sign,esin,exp;
                     16: 
                     17:        s1 = s;
                     18:        s2 = s;
                     19:        while(*s2 != '\0')
                     20:                switch (*s2) {
                     21:                        case ' ' :
                     22:                        case '\015' :
                     23:                        case '\012' :
                     24:                        case '\t':
                     25:                        s2++;
                     26:                        break;
                     27:                        case 'E':
                     28:                        *s1++ = 'e';
                     29:                        s2++;
                     30:                        break;
                     31:                        default:
                     32:                        *s1++ = *s2++;
                     33:                }
                     34:        *s1 = '\0';
                     35:        i=0;
                     36:        sign = 1;
                     37:        if(s[i] == '+' || s[i] == '-')
                     38:                sign = (s[i++] == '+') ? 1 : -1 ;
                     39:        for(val = 0;s[i] >= '0' && s[i] <= '9';i++)
                     40:                val = 10 * val + s[i] - '0';
                     41:        if(s[i] == '.')
                     42:        {
                     43:                i++;
                     44:                for(power = 1;s[i] >= '0' && s[i] <= '9'; i++)
                     45:                {
                     46:                        val = val * 10 + s[i] - '0';
                     47:                        power *= 10;
                     48:                }
                     49:                val /= power;
                     50:        }
                     51:        if(s[i] == 'e')
                     52:        {
                     53:                i++;
                     54:                esin = 1;
                     55:                if(s[i] == '+' || s[i] == '-')
                     56:                        esin = (s[i++] == '+') ? 1 : -1;
                     57:                for(exp = 0;s[i] >= '0' && s[i] <= '9';i++)
                     58:                        exp = 10 * exp + s[i] - '0';
                     59:                power = 1;
                     60:                for(i=0;i<exp;i++)
                     61:                        power *= 10;
                     62:                val = (esin == -1) ? val/power : val * power ;
                     63:        }
                     64:        return(sign * val);
                     65: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.