Hex dump to memory block

You can post your code snippets here for others to use and learn from
Post Reply
User avatar
lazi
Posts: 625
Joined: Thu Feb 24, 2011 11:08 pm

Hex dump to memory block

Post by lazi »

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

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
                     
Post Reply