--- a/Integer.st Wed Jul 21 17:22:11 1999 +0200
+++ b/Integer.st Wed Jul 21 17:24:14 1999 +0200
@@ -405,13 +405,17 @@
decodeFromBCD
"return a number representing the value of the BCD encoded receiver."
- |v rslt multiplier|
+ |v rslt multiplier nibble|
v := self.
rslt := 0.
multiplier := 1.
[v > 0] whileTrue:[
- rslt := rslt + ((v bitAnd:16r0F) * multiplier).
+ nibble := v bitAnd:16r0F.
+ nibble > 9 ifTrue:[
+ ^ self error:'bad BCD coded value'
+ ].
+ rslt := rslt + (nibble * multiplier).
multiplier := multiplier * 10.
v := v bitShift:-4.
].
@@ -421,6 +425,8 @@
16r55 decodeFromBCD
16r127 decodeFromBCD
16r1234567890 decodeFromBCD
+
+ 16r5A decodeFromBCD
"
!
@@ -2169,5 +2175,5 @@
!Integer class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.100 1999-07-21 15:22:11 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.101 1999-07-21 15:24:14 cg Exp $'
! !