Date: 02-16-2022
Return to Index
created by gbSnippets
Function HexString(a$) As String
#Register None
Local fl As Long
Local src As Long
Local dst As Long
Local lcnt As Long
Local buffer As String
! jmp over_table
hex_table:
! dw "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F"
! dw "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F"
! dw "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F"
! dw "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F"
! dw "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F"
! dw "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F"
! dw "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F"
! dw "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F"
! dw "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F"
! dw "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F"
! dw "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF"
! dw "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF"
! dw "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF"
! dw "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF"
! dw "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF"
! dw "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
over_table:
fl = Len(a$)
buffer = Space$(fl*4) ' 4 times length for buffer
src = StrPtr(a$)
dst = StrPtr(buffer)
! lea ebx, hex_table ; get base address of table
! mov esi, src ; address of source string
! mov edi, dst ; address of output buffer
! mov eax, esi
! add eax, fl
! mov ecx, eax ; exit condition for byte read
! xor eax, eax ; prevent stall
hxlp:
! mov al, [esi] ; get BYTE
! inc esi
! inc lcnt
! mov dx, [ebx+eax*2] ; put WORD from table into DX
! mov [edi], dx ; write 2 byte string to buffer
! add edi, 2
! mov BYTE PTR [edi], 32 ; add space
! inc edi
! cmp lcnt, 8 ; test for half to add "-"
! jne lNxt
! mov WORD PTR [edi], " -"
! add edi, 2
lNxt:
! cmp lcnt, 16 ; break line at 16 characters
! jne lNxt1
! dec edi ; overwrite last space
! mov WORD PTR [edi], &H0A0D; write CRLF to buffer
! add edi, 2
! mov lcnt, 0
lNxt1:
! cmp esi, ecx ; test exit condition
! jl hxlp
Function = LTrim$(buffer)
End Function
'gbs_01271
'Date: 05-11-2013
http://www.garybeene.com/sw/gbsnippets.htm