version 1.12, 2007/08/21 20:29:25 |
version 1.13, 2008/02/22 01:24:58 |
|
|
{ |
{ |
int or_sign, parity = 0; |
int or_sign, parity = 0; |
int expincr = 1, exponent = -1; |
int expincr = 1, exponent = -1; |
int bite, expsign = 1, sign = 1; |
int bite, expsign = 1, sign = 1, zeroskip = 0; |
u_char lastvalue, *nonzero, *tline, *C_TENS; |
u_char lastvalue, *tline, *C_TENS; |
u_char *nweights; |
u_char *nweights; |
|
|
if (Rflag) |
if (Rflag) |
|
|
} |
} |
/* eat initial zeroes */ |
/* eat initial zeroes */ |
for (; *line == '0' && line < lineend; line++) |
for (; *line == '0' && line < lineend; line++) |
; |
zeroskip = 1; |
/* calculate exponents < 0 */ |
/* calculate exponents < 0 */ |
if (*line == DECIMAL) { |
if (*line == DECIMAL) { |
exponent = 1; |
exponent = 1; |
|
|
} |
} |
/* next character better be a digit */ |
/* next character better be a digit */ |
if (*line < '1' || *line > '9' || line >= lineend) { |
if (*line < '1' || *line > '9' || line >= lineend) { |
*pos++ = nweights[127]; |
if (!zeroskip) { |
return (pos); |
*pos++ = nweights[127]; |
|
return (pos); |
|
} |
} |
} |
if (expincr) { |
if (expincr) { |
for (tline = line-1; *++tline >= '0' && |
for (tline = line-1; *++tline >= '0' && |
|
|
: *line); |
: *line); |
if (pos == bufend) |
if (pos == bufend) |
return (NULL); |
return (NULL); |
if (*line != '0' || lastvalue != '0') |
|
nonzero = pos; |
|
} else |
} else |
lastvalue = *line; |
lastvalue = *line; |
parity ^= 1; |
parity ^= 1; |
|
|
} else |
} else |
break; |
break; |
} |
} |
if (parity && lastvalue != '0') { |
if (parity) { |
*pos++ = or_sign ? OFF_NTENS[lastvalue] - '0' : |
*pos++ = or_sign ? OFF_NTENS[lastvalue] - '0' : |
OFF_TENS[lastvalue] + '0'; |
OFF_TENS[lastvalue] + '0'; |
} else |
} |
pos = nonzero; |
|
if (pos > bufend-1) |
if (pos > bufend-1) |
return (NULL); |
return (NULL); |
*pos++ = or_sign ? nweights[254] : nweights[0]; |
*pos++ = or_sign ? nweights[254] : nweights[0]; |