nuclear@6: #include nuclear@6: #include nuclear@6: nuclear@6: int atoi(const char *str) nuclear@6: { nuclear@91: return strtol(str, 0, 10); nuclear@6: } nuclear@6: nuclear@6: long atol(const char *str) nuclear@6: { nuclear@91: return strtol(str, 0, 10); nuclear@91: } nuclear@91: nuclear@91: long strtol(const char *str, char **endp, int base) nuclear@91: { nuclear@6: long acc = 0; nuclear@6: int sign = 1; nuclear@6: nuclear@6: while(isspace(*str)) str++; nuclear@6: nuclear@91: if(base == 0) { nuclear@91: if(str[0] == '0') { nuclear@91: if(str[1] == 'x' || str[1] == 'X') { nuclear@91: base = 16; nuclear@91: } else { nuclear@91: base = 8; nuclear@91: } nuclear@91: } else { nuclear@91: base = 10; nuclear@91: } nuclear@91: } nuclear@91: nuclear@6: if(*str == '+') { nuclear@6: str++; nuclear@6: } else if(*str == '-') { nuclear@6: sign = -1; nuclear@6: str++; nuclear@6: } nuclear@6: nuclear@91: while(*str) { nuclear@91: long val; nuclear@91: char c = tolower(*str); nuclear@91: nuclear@91: if(isdigit(c)) { nuclear@91: val = *str - '0'; nuclear@91: } else if(c >= 'a' || c <= 'f') { nuclear@91: val = 10 + c - 'a'; nuclear@91: } nuclear@91: if(val >= base) { nuclear@91: break; nuclear@91: } nuclear@91: nuclear@91: acc = acc * base + val; nuclear@6: str++; nuclear@6: } nuclear@6: nuclear@91: if(endp) { nuclear@91: *endp = (char*)str; nuclear@91: } nuclear@91: nuclear@6: return sign > 0 ? acc : -acc; nuclear@6: } nuclear@6: nuclear@6: void itoa(int val, char *buf, int base) nuclear@6: { nuclear@6: static char rbuf[16]; nuclear@6: char *ptr = rbuf; nuclear@6: int neg = 0; nuclear@6: nuclear@6: if(val < 0) { nuclear@6: neg = 1; nuclear@6: val = -val; nuclear@6: } nuclear@6: nuclear@6: if(val == 0) { nuclear@6: *ptr++ = '0'; nuclear@6: } nuclear@6: nuclear@6: while(val) { nuclear@6: int digit = val % base; nuclear@6: *ptr++ = digit < 10 ? (digit + '0') : (digit - 10 + 'a'); nuclear@6: val /= base; nuclear@6: } nuclear@6: nuclear@6: if(neg) { nuclear@6: *ptr++ = '-'; nuclear@6: } nuclear@6: nuclear@6: ptr--; nuclear@6: nuclear@6: while(ptr >= rbuf) { nuclear@6: *buf++ = *ptr--; nuclear@6: } nuclear@6: *buf = 0; nuclear@6: } nuclear@6: nuclear@6: void utoa(unsigned int val, char *buf, int base) nuclear@6: { nuclear@6: static char rbuf[16]; nuclear@6: char *ptr = rbuf; nuclear@6: nuclear@6: if(val == 0) { nuclear@6: *ptr++ = '0'; nuclear@6: } nuclear@6: nuclear@6: while(val) { nuclear@6: unsigned int digit = val % base; nuclear@6: *ptr++ = digit < 10 ? (digit + '0') : (digit - 10 + 'a'); nuclear@6: val /= base; nuclear@6: } nuclear@6: nuclear@6: ptr--; nuclear@6: nuclear@6: while(ptr >= rbuf) { nuclear@6: *buf++ = *ptr--; nuclear@6: } nuclear@6: *buf = 0; nuclear@6: } nuclear@6: