eval_expr_val (char **expr, int *result)
eval_expr_val (char **expr, long int *result)
eval_expr_val (char **expr, int *result){  int sgn = +1;  char *digit;  /* Skip white space */  for (digit = *expr; digit && *digit && isspace (*digit); ++digit);  switch (*digit)    {    case '(':      /* Scan for closing paren */      for (++digit; **expr && **expr != ')'; ++(*expr));      /* Is there one? */      if (!**expr)	return WRDE_SYNTAX;      *(*expr)++ = 0;      if (eval_expr (digit, result))	return WRDE_SYNTAX;      return 0;    case '+':	/* Positive value */      ++digit;      break;    case '-':	/* Negative value */      ++digit;      sgn = -1;      break;    default:      if (!isdigit (*digit))	return WRDE_SYNTAX;    }  *result = 0;  for (; *digit && isdigit (*digit); ++digit)    *result = (*result * 10) + (*digit - '0');  *expr = digit;  *result *= sgn;  return 0;}