Annotation of researchv10no/cmd/PDP11/fpp/aux/mmatof.c, revision 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.