|
|
1.1 ! root 1: /** ! 2: * ! 3: * long ! 4: * myatol( s ) -- Ascii to Long integer conversion. ! 5: * char * s; ! 6: * ! 7: * Input: s = pointer to string containing a numeric prefix. ! 8: * ! 9: * Action: Parse input string. ! 10: * Parse optional leading sign character '-'. ! 11: * Parse optional numeric base specification '0', '0o', and '0x'. ! 12: * Parse following numeric digits. ! 13: * ! 14: * Return: Long integer value. ! 15: * ! 16: * Notes: Numeric parsing terminates on first non-digit. ! 17: */ ! 18: long ! 19: myatol( s ) ! 20: register char * s; ! 21: { ! 22: register int base; ! 23: register int sign; ! 24: auto long valu; ! 25: ! 26: /* ! 27: * Check for leading negative sign. ! 28: */ ! 29: sign = 1; ! 30: if ( *s == '-' ) { ! 31: sign = -1; ! 32: s++; ! 33: } ! 34: ! 35: /* ! 36: * Check for base specification. ! 37: */ ! 38: base = 10; ! 39: if ( *s == '0' ) { ! 40: switch ( *++s ) { ! 41: case 'x': base = 16; ++s; break; ! 42: case 'o': base = 8; ++s; break; ! 43: default: base = 8; ! 44: } ! 45: } ! 46: ! 47: for ( valu = 0L; *s != '\0'; s++ ) { ! 48: ! 49: /* ! 50: * Decimal digit. ! 51: */ ! 52: if ( ('0' <= *s) && (*s <= '9') ) { ! 53: valu *= base; ! 54: valu += *s - '0'; ! 55: } ! 56: ! 57: /* ! 58: * Upper case hex digit. ! 59: */ ! 60: else if ( (base == 16) && ('A' <= *s) && (*s <= 'F') ) { ! 61: valu *= base; ! 62: valu += *s - ('A' - 10); ! 63: } ! 64: ! 65: /* ! 66: * Lower case Hex digit. ! 67: */ ! 68: else if ( (base == 16) && ('a' <= *s) && (*s <= 'f') ) { ! 69: valu *= base; ! 70: valu += *s - ('a' - 10); ! 71: } ! 72: ! 73: /* ! 74: * Not a digit. ! 75: */ ! 76: else ! 77: break; ! 78: } ! 79: ! 80: if ( sign < 0 ) ! 81: valu = -valu; ! 82: ! 83: return valu; ! 84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.