Hex dump to memory block
Posted: Sat Mar 12, 2016 11:06 pm
Here is a function that makes a memory block from some binary hex dump. It can be created e.g. by the command line on OS4 like this:
type <file> hex
type <file> hex
Code: Select all
;hexfile
hexfile=[[
0000: 30100309 00000000 E8045001 00000000 0.......è.P.....
0010: 00000000 00000000 00000000 00C80000 .............È..
0020: 4B4F4E59 56454C00 0000004C 01000000 KONYVEL....L....
0030: 01000000 00000000 00000000 00000000 ................
0040: 4B454C54 00000000 00000044 02000000 KELT.......D....
0050: 08000000 00000000 00000000 00000000 ................
0060: 44415455 4D000000 00000044 0A000000 DATUM......D....
0070: 08000000 00000000 00000000 00000000 ................
0080: 46495A48 41540000 00000044 12000000 FIZHAT.....D....
0090: 08000000 00000000 00000000 00000000 ................
00A0: 42495A53 5A414D00 00000043 1A000000 BIZSZAM....C....
00B0: 0F000000 00000000 00000000 00000000 ................
00C0: 50415254 4B4F4400 0000004E 29000000 PARTKOD....N)...
00D0: 08000000 00000000 00000000 00000000 ................
00E0: 4345474E 45560000 00000043 31000000 CEGNEV.....C1...
00F0: 19000000 00000000 00000000 00000000 ................
0100: 4952535A 414D0000 00000043 4A000000 IRSZAM.....CJ...
0110: 06000000 00000000 00000000 00000000 ................
0120: 5641524F 53000000 00000043 50000000 VAROS......CP...
0130: 1E000000 00000000 00000000 00000000 ................
0140: 43494D00 00000000 00000043 6E000000 CIM........Cn...
0150: 32000000 00000000 00000000 00000000 2...............
0160: 535A4F56 45470000 00000043 A0000000 SZOVEG.....C ...
0170: 19000000 00000000 00000000 00000000 ................
0180: 46495A4D 4F440000 0000004E B9000000 FIZMOD.....N¹...
0190: 01000000 00000000 00000000 00000000 ................
01A0: 50454E5A 4B4F4400 00000043 BA000000 PENZKOD....Cº...
01B0: 01000000 00000000 00000000 00000000 ................
01C0: 4146414B 4F443100 0000004E BB000000 AFAKOD1....N»...
01D0: 02000000 00000000 00000000 00000000 ................
01E0: 4E455454 4F310000 0000004E BD000000 NETTO1.....N½...
01F0: 0A000000 00000000 00000000 00000000 ................
0200: 41464131 00000000 0000004E C7000000 AFA1.......NÇ...
0210: 0A000000 00000000 00000000 00000000 ................
0220: 4146414B 4F443200 0000004E D1000000 AFAKOD2....NÑ...
0230: 02000000 00000000 00000000 00000000 ................
0240: 4E455454 4F320000 0000004E D3000000 NETTO2.....NÓ...
0250: 0A000000 00000000 00000000 00000000 ................
0260: 41464132 00000000 0000004E DD000000 AFA2.......NÝ...
0270: 0A000000 00000000 00000000 00000000 ................
0280: 4146414B 4F443300 0000004E E7000000 AFAKOD3....Nç...
0290: 0A000000 00000000 00000000 00000000 ................
02A0: 4E455454 4F330000 0000004E F1000000 NETTO3.....Nñ...
02B0: 0A000000 00000000 00000000 00000000 ................
02C0: 41464133 00000000 0000004E FB000000 AFA3.......Nû...
02D0: 0A000000 00000000 00000000 00000000 ................
02E0: 4146414B 4F443400 0000004E 05010000 AFAKOD4....N....
02F0: 0A000000 00000000 00000000 00000000 ................
0300: 4E455454 4F340000 0000004E 0F010000 NETTO4.....N....
0310: 0A000000 00000000 00000000 00000000 ................
0320: 41464134 00000000 0000004E 19010000 AFA4.......N....
0330: 0A000000 00000000 00000000 00000000 ................
0340: 4B494547 59000000 0000004C 23010000 KIEGY......L#...
0350: 01000000 00000000 00000000 00000000 ................
0360: 4B494547 5942495A 00000043 24010000 KIEGYBIZ...C$...
0370: 0F000000 00000000 00000000 00000000 ................
0380: 4B494547 59444154 00000044 33010000 KIEGYDAT...D3...
0390: 08000000 00000000 00000000 00000000 ................
03A0: 41464144 41540000 00000044 3B010000 AFADAT.....D;...
03B0: 08000000 00000000 00000000 00000000 ................
03C0: 41444F53 5A414D00 00000043 43010000 ADOSZAM....CC...
03D0: 0D000000 00000000 00000000 00000000 ................
03E0: 0D000000 00000000 00000000 00000000 ................
03F0: 00000000 00000000 00000000 00000000 ................
0400: 00000000 00000000 00000000 00000000 ................
0410: 00000000 00000000 00000000 00000000 ................
0420: 00000000 00000000 00000000 00000000 ................
0430: 00000000 00000000 00000000 00000000 ................
0440: 00000000 00000000 00000000 00000000 ................
0450: 00000000 00000000 00000000 00000000 ................
0460: 00000000 00000000 00000000 00000000 ................
0470: 00000000 00000000 00000000 00000000 ................
0480: 00000000 00000000 00000000 00000000 ................
0490: 00000000 00000000 00000000 00000000 ................
04A0: 00000000 00000000 00000000 00000000 ................
04B0: 00000000 00000000 00000000 00000000 ................
04C0: 00000000 00000000 00000000 00000000 ................
04D0: 00000000 00000000 00000000 00000000 ................
04E0: 00000000 00000000 ........
]]
Function p_HexFile(hex)
Local virtfile$, fh, t, c, _mem, mem, v
virtfile$=DefineVirtualFileFromString(hex,"file.txt")
fh=OpenFile(Nil, virtfile$)
_mem={}
While Not Eof(fh)
t,c=SplitStr(ReadLine(fh),Chr($20))
If c>0
If RightStr(t[0],1)=":"
For Local i=1 To c-1
If t[i]="" Then Break
v=Val("$"..t[i])
InsertItem(_mem,v,ListItems(_mem)+1)
Next
Else
CloseFile(fh)
Return(False,0)
EndIf
Else
CloseFile(fh)
Return(False,0)
EndIf
Wend
mem=AllocMem(Nil,ListItems(_mem)*4)
TableToMem(_mem,mem,#INTEGER)
CloseFile(fh)
Return(mem,ListItems(_mem)*4)
EndFunction
mem,le=p_hexfile(hexfile)
If le > 0
OpenFile(1,"ram:test.file",#MODE_WRITE)
WriteMem(1,mem,le)
CloseFile(1)
EndIf