int 
str2long(char *str, long *lp)
{
  long      result = 0;
  long      sign = 1;
  while ((*str != '\0') && (isspace(*str)))
    str++;
  if (*str == '-') {
    str++;
    sign = -1;
  } else if (*str == '+') {
    str++;
  }
  if (!*str)
    return 1;
  while (isdigit(*str)) {
    long      increment = sign * convertDigit(*str);
    if ((sign == 1) && (result > (LONG_MAX - increment) / 10))
      return 3;
    if ((sign == -1) && (result < (LONG_MIN - increment) / 10))
      return 3;
    result = result * 10 + increment;
    str++;
  }
  if (*str != '\0')
    return 2;
  *lp = result;
  return 0;
}
