|
|
1.1 ! root 1: /* ! 2: * Non-floating ASCII to int conversion ! 3: * int atoi(cp) ! 4: * char *cp; ! 5: * Modified by rec 22.Apr.82 to allow octal and hexadecimal. ! 6: */ ! 7: ! 8: atoi(cp) ! 9: register char *cp; ! 10: { ! 11: register val; ! 12: register c; ! 13: register base; ! 14: int sign; ! 15: ! 16: val = sign = 0; ! 17: while ((c = *cp)==' ' || c=='\t') ! 18: cp++; ! 19: if (c == '-') { ! 20: sign = 1; ! 21: cp++; ! 22: } else if (c == '+') ! 23: cp++; ! 24: base = 10; ! 25: if ((c = *cp) == '0') { ! 26: cp++; ! 27: if ((c = *cp) == 'x' || c == 'X') { ! 28: cp++; ! 29: base = 16; ! 30: } else ! 31: base = 8; ! 32: } ! 33: for (;;) { ! 34: c = *cp++; ! 35: if ((c -= '0') >= 0 && c <= 9) { ! 36: val = val*base - c; ! 37: continue; ! 38: } ! 39: if (base == 16) { ! 40: if ((c += 10 + '0' - 'A') >= 0 && c < base) { ! 41: val = val*base - c; ! 42: continue; ! 43: } ! 44: if ((c += 'A' - 'a') >= 0 && c < base) { ! 45: val = val*base - c; ! 46: continue; ! 47: } ! 48: } ! 49: break; ! 50: } ! 51: if (!sign) ! 52: val = -val; ! 53: return (val); ! 54: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.