don't mess up return data stream if numbers have too much precision

This commit is contained in:
Michael Moon 2011-03-05 15:54:36 +11:00
parent db8902b265
commit c177756913
1 changed files with 12 additions and 10 deletions

View File

@ -291,17 +291,19 @@ void gcode_parse_char(uint8_t c) {
default: default:
// can't do ranges in switch..case, so process actual digits here. // can't do ranges in switch..case, so process actual digits here.
if (c >= '0' && c <= '9' && if (c >= '0' && c <= '9') {
read_digit.exponent < DECFLOAT_EXP_MAX && if (read_digit.exponent < DECFLOAT_EXP_MAX &&
((next_target.option_inches == 0 && ((next_target.option_inches == 0 &&
read_digit.mantissa < DECFLOAT_MANT_MM_MAX) || read_digit.mantissa < DECFLOAT_MANT_MM_MAX) ||
(next_target.option_inches && (next_target.option_inches &&
read_digit.mantissa < DECFLOAT_MANT_IN_MAX))){ read_digit.mantissa < DECFLOAT_MANT_IN_MAX)))
{
// this is simply mantissa = (mantissa * 10) + atoi(c) in different clothes // this is simply mantissa = (mantissa * 10) + atoi(c) in different clothes
read_digit.mantissa = (read_digit.mantissa << 3) + (read_digit.mantissa << 1) + (c - '0'); read_digit.mantissa = (read_digit.mantissa << 3) + (read_digit.mantissa << 1) + (c - '0');
if (read_digit.exponent) if (read_digit.exponent)
read_digit.exponent++; read_digit.exponent++;
} }
}
#ifdef DEBUG #ifdef DEBUG
else { else {
// invalid // invalid