[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
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.
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]