Integer.st
changeset 4424 f0f658ed8995
parent 4423 2a478882f765
child 4522 29a6625dc7b1
--- 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 $'
 ! !