WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Numbers

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

BCD Conversion UDFs

Keywords:    bcd conversion bcdtodec

If itemlocate("udfbcdtodec_", IntControl(77,103,0,0,0), @tab) then goto skip_udfbcdtodec_
#DefineFunction udfBcdToDec_ (bb) ; the number is presented in a binary buffer
; The String Version
numstr = ""
icount = BinaryEodGet(bb)-2
For i=0 to icount
   byte = BinaryPeek(bb,i)
   numstr = StrCat(numstr,byte>>4) ; high nibble
   numstr = StrCat(numstr,byte&15) ; low  nibble
Next
byte = BinaryPeek(bb,icount+1)
numstr = StrCat(numstr,byte>>4)
If ((byte&15)==13) then return (0-numstr)
Return (0+numstr)
; this udf returns an integer value
; DD.20020131
#EndFunction
:skip_udfbcdtodec_

If itemlocate("udfbcdtodec", IntControl(77,103,0,0,0), @tab) then goto skip_udfbcdtodec
#DefineFunction udfBcdToDec (bb) ; the number is presented in a binary buffer
; The Number Version
num = 0
icount = BinaryEodGet(bb)-2
For i=0 to icount
   byte = BinaryPeek(bb,i)
   num  = 10*num + (byte>>4) ; high nibble
   num  = 10*num + (byte&15) ; low  nibble
Next
byte = BinaryPeek(bb,icount+1)
num  = 10*num + (byte>>4)
If ((byte&15)==13) then return (-num)
Return (num)
; this udf returns an integer value
; DD.20020131
#EndFunction
:skip_udfbcdtodec


;--- test ---
:test1
; poke decimal number -7 into buffer
bb = BinaryAlloc(1)
numstr = "-7"
BinaryPoke(bb,0,125)
message("Demo udfBcdToDec(bb) The String Version",StrCat(numstr," = ",udfBcdToDec_(bb)))
message("Demo udfBcdToDec(bb) The Number Version",StrCat(numstr," = ",udfBcdToDec(bb)))
BinaryFree(bb)

:test2
; poke decimal number -4321 into buffer
bb = BinaryAlloc(3)
numstr = "-4321"
BinaryPoke(bb,0,4)
BinaryPoke(bb,1,50)
BinaryPoke(bb,2,29)
message("Demo udfBcdToDec(bb) The String Version",StrCat(numstr," = ",udfBcdToDec_(bb)))
message("Demo udfBcdToDec(bb) The Number Version",StrCat(numstr," = ",udfBcdToDec(bb)))
BinaryFree(bb)

:test3
; poke decimal number +000050 into buffer
bb = BinaryAlloc(4)
numstr = "+000050"
BinaryPoke(bb,0,0)
BinaryPoke(bb,1,0)
BinaryPoke(bb,2,5)
BinaryPoke(bb,3,12)
message("Demo udfBcdToDec(bb) The String Version",StrCat(numstr," = ",udfBcdToDec_(bb)))
message("Demo udfBcdToDec(bb) The Number Version",StrCat(numstr," = ",udfBcdToDec(bb)))
BinaryFree(bb)

Exit


Article ID:   W15330
File Created: 2002:09:05:13:51:20
Last Updated: 2002:09:05:13:51:20