diff options
Diffstat (limited to 'lexers/LexHex.cxx')
| -rw-r--r-- | lexers/LexHex.cxx | 26 | 
1 files changed, 18 insertions, 8 deletions
| diff --git a/lexers/LexHex.cxx b/lexers/LexHex.cxx index ff4aec3a8..9b35732f6 100644 --- a/lexers/LexHex.cxx +++ b/lexers/LexHex.cxx @@ -154,23 +154,33 @@ static int GetSrecByteCount(unsigned int recStartPos, Accessor &styler)  	return val;  } -// Count the number of digit pairs in this record from "address" field to end -// of line. Has to be equal to the "byte count" field value. +// Count the number of digit pairs for the "address", "data" and "checksum" +// fields in this record. Has to be equal to the "byte count" field value. +// If the record is too short, a negative count may be returned.  static int CountSrecByteCount(unsigned int recStartPos, Accessor &styler)  { +	int cnt;  	unsigned int pos; -	// start counting at "address" field -	pos = recStartPos + 4; +	pos = recStartPos;  	while (!IsNewline(styler.SafeGetCharAt(pos, '\n'))) {  		pos++;  	} -	// divide by 2 because of digit pairs -	// Round up if odd (digit pair incomplete), this way the byte count is -	// considered to be valid if the checksum is incomplete. -	return ((pos - (recStartPos + 4)) + 1) / 2; +	// number of digits in this line minus number of digits of uncounted fields +	cnt = static_cast<int>(pos - recStartPos) - 4; + +	// Prepare round up if odd (digit pair incomplete), this way the byte +	// count is considered to be valid if the checksum is incomplete. +	if (cnt >= 0) { +		cnt++; +	} + +	// digit pairs +	cnt /= 2; + +	return cnt;  }  // Get the size of the "address" field. | 
