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