Contributor: JOHN HOWARD PROGRAM Hex4Bin; { Converts hex data file into binary (~64k maximum size) equivalent } { 20OCT94 Freeware v2.2 Hex-to-Binary file convertor by John Howard } {$i DATA4.HEX} (* layout of DATA4.HEX include file saves 40% compared to Hex_Byte array: CONST Name = { 'binary' } ; { SizeL is equal to FILESIZE(BINARY) DIV 4 } HEX_DATA : ARRAY[1..SizeL] OF LONGINT = ( { i.e. hex data such as $4500A2FF,.. } ); Size = { FILESIZE(BINARY) MOD 4 } ; HEX_PAD : ARRAY[1..Size] OF BYTE = ( { $85,$8E,$05 } ); *) VAR BINARY : FILE; BEGIN WRITELN('Howard International, P.O. Box 34633, NKC, MO 64116 USA'); WRITELN('20OCT94 Freeware v2.2 Hex-to-Binary (~64k maximum)'); ASSIGN(BINARY,'binary'); REWRITE(BINARY,1); BLOCKWRITE(BINARY,HEX_DATA,SIZEOF(HEX_DATA)); IF Size <> 0 THEN BLOCKWRITE(BINARY,HEX_PAD,SIZEOF(HEX_PAD)); CLOSE(BINARY); WRITELN('You may rename BINARY to: ', Name); END. PROGRAM Bin4Hex; { Converts binary file less than ~64k in size into hex data file equivalent } { 20OCT94 Freeware v2.2 Binary-to-Hex data convertor by John Howard } { Note: This longint approach saves 40% compared to bytes only. } FUNCTION HexByte(B : Byte) : String; CONST HexDigits : ARRAY[0..15] OF Char = '0123456789ABCDEF'; VAR Temp : String; BEGIN Temp[0] := #2; Temp[1] := HexDigits[B SHR 4]; Temp[2] := HexDigits[B AND $F]; HexByte := Temp; END; FUNCTION HexLong(L : Longint) : String; CONST HexDigits : ARRAY[0..15] OF Char = '0123456789ABCDEF'; VAR Temp : String; BEGIN Temp[0] := #8; Temp[1] := HexDigits[(L SHR 28) AND $F]; Temp[2] := HexDigits[(L SHR 24) AND $F]; Temp[3] := HexDigits[(L SHR 20) AND $F]; Temp[4] := HexDigits[(L SHR 16) AND $F]; Temp[5] := HexDigits[(L SHR 12) AND $F]; Temp[6] := HexDigits[(L SHR 8) AND $F]; Temp[7] := HexDigits[(L SHR 4) AND $F]; Temp[8] := HexDigits[L AND $F]; HexLong := Temp; END; VAR Name : STRING; BINARY : FILE; HEXFILE : TEXT; Hex_Byte : BYTE; Hex_Long : LONGINT; Size : LONGINT; i : WORD; BEGIN IF ParamStr(1) = '/?' THEN BEGIN WRITELN('Howard International, P.O. Box 34633, NKC, MO 64116 USA'); WRITELN('20OCT94 Freeware v2.2 Binary-to-Hex data convertor'); WRITELN('Syntax: bin4hex.exe [filename]'); WRITELN('Filename is optional, the default is called BINARY'); Halt; END; IF ParamCount = 0 THEN Name := 'binary' ELSE Name := ParamStr(1); WRITELN('Looking for file called: ', Name); ASSIGN(BINARY,Name); FileMode := 0; { Read Only } {$I-} RESET(BINARY,1); {$I+} IF IOResult <> 0 THEN BEGIN WRITELN('File not found. Try the /? parameter.'); Halt; END; ASSIGN(HEXFILE,'DATA4.HEX'); REWRITE(HEXFILE); Size := FILESIZE(BINARY) DIV 4; WRITELN(HEXFILE, 'CONST Name = ''', Name,''';'); WRITELN(HEXFILE, ' HEX_DATA : ARRAY[1..', Size,'] OF LONGINT = ('); BLOCKREAD(BINARY,Hex_Long,SIZEOF(Hex_Long)); WRITE(HEXFILE, ' $'); WRITE(HEXFILE,HEXLONG(Hex_Long)); FOR i := 2 TO Size DO BEGIN BLOCKREAD(BINARY,Hex_Long,SIZEOF(Hex_Long)); WRITE(HEXFILE, ',$'); WRITE(HEXFILE,HEXLONG(Hex_Long)); IF (i MOD 7 = 0) THEN WRITELN(HEXFILE); { columns } END; WRITELN(HEXFILE, ');'); Size := FILESIZE(BINARY) MOD 4; IF Size <> 0 THEN BEGIN WRITELN(HEXFILE, ' Size = ', Size,';'); WRITE (HEXFILE, ' HEX_PAD : ARRAY[1..', Size,'] OF BYTE = ($'); FOR i := 1 TO Size DO BEGIN BLOCKREAD(BINARY,Hex_Byte,SIZEOF(Hex_Byte)); IF i <> 1 THEN WRITE(HEXFILE, ',$'); WRITE(HEXFILE,HEXBYTE(Hex_Byte)); END; WRITELN(HEXFILE, ');'); END ELSE BEGIN WRITELN(HEXFILE, ' Size = 0;'); WRITELN(HEXFILE, ' HEX_PAD : ARRAY[1..1] OF BYTE = (0);'); END; CLOSE(HEXFILE); CLOSE(BINARY); WRITELN('Your BINARY was converted to DATA4.HEX include file.'); END.