#include <char.h> long atoi(const char *nptr) { int c; /* current char */ long total; /* current total */ int sign; /* if '-', then negative, otherwise positive */ /* skip whitespace */ while(isspace((int)(unsigned char)*nptr)) ++nptr; c = (int)(unsigned char)*nptr++; sign = c; /* save sign indication */ /* skip sign */ if(c == '-' || c == '+') c = (int)(unsigned char)*nptr++; total = 0; while(isdigit(c)) { total = 10 * total + (c - '0'); /* accumulate digit */ c = (int)(unsigned char)*nptr++; /* get next char */ } /* return result, negated if necessary */ if(sign == '-') return -total; else return total; }