[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
(*************************************************************************
===============================================
Hex-encode binary files in debug-script batches
===============================================
Copyright (c) 1993,1994 by Jos‚ Campione
Ottawa-Orleans Personal Systems Group
Fidonet: 1:163/513.3
This program reads a binary file and creates a hex-encoded
text file. This text file is also a batch file and a debug
script which, when run, will use debug.exe or debug.com to
reconstruct the binary file.
**************************************************************************)
{$M 2048,0,0}
program debugbat;
uses crt,dos;
const
maxsize = $FFEF;
type
string2 = string[2];
var
ifile : file of byte;
ofile : text;
n : word;
s : word;
b : byte;
fsize : word;
dir : dirstr;
nam : namestr;
ext : extstr;
filename : string[12];
i : integer;
function b2x(b: byte): string2;
const hexdigit: array[0..15] of char = '0123456789ABCDEF';
begin
b2x:= hexdigit[b shr 4] + hexdigit[b and $0F];
end;
procedure myhalt(e: byte);
begin
gotoxy(1,wherey);
case e of
0 : writeln('done.');
1 : writeln('error in command line.');
2 : writeln('file exceeds the 65K limit.');
else begin
e:= 255;
writeln('Unknown error.');
end;
end;
halt(e);
end;
begin
writeln;
writeln('DEBUGBAT v.1.0. Copyright (c) Feb/93 by J. Campione.');
write('Wait... ');
n := 0;
s := $F0;
{$I-}
assign(ifile,paramstr(1));
reset(ifile);
{$I+}
if (paramcount <> 1) or (ioresult <> 0) or (paramstr(1) = '') then myhalt(1);
fsplit(paramstr(1),dir,nam,ext);
for i:= 1 to length(ext) do ext[i]:= upcase(ext[i]);
for i:= 1 to length(nam) do nam[i]:= upcase(nam[i]);
if ext = '.EXE' then filename:= nam + '.EXX'
else filename:= nam + ext;
fsize:= filesize(ifile);
if fsize > maxsize then myhalt(2);
assign(ofile, nam + '.BAT');
rewrite(ofile);
writeln(ofile,'@echo off');
writeln(ofile,'rem');
writeln(ofile,'rem *************************************************************************');
writeln(ofile,'rem File ',nam + '.BAT',' was created by program DEBUGBAT.EXE v.1.0');
writeln(ofile,'rem Copyright (c) Feb. 1993 by J. Campione (1:163/513.3)');
writeln(ofile,'rem Running this file uses DEBUG to reconstruct file ',nam + ext);
writeln(ofile,'rem *************************************************************************');
writeln(ofile,'rem');
writeln(ofile,'echo DEBUGBAT v.1.0. Copyright (c) Feb/93 by J. Campione.');
writeln(ofile,'if not exist %1debug.exe goto error1');
writeln(ofile,'goto decode');
writeln(ofile,':error1');
writeln(ofile,'if not exist %1debug.com goto error2');
writeln(ofile,':decode');
writeln(ofile,'echo Wait...');
writeln(ofile,'debug < %0.BAT > nul');
writeln(ofile,'goto name');
writeln(ofile,':error2');
writeln(ofile,'echo Run %0.BAT with DEBUG''s path in the command line');
writeln(ofile,'echo example: %0 c:\dos\ ... notice the trailing slash!');
write(ofile,'goto end');
while not eof(ifile) do begin
n:= n + 1;
read(ifile,b);
if n mod 16 = 1 then begin
s := s + 16;
writeln(ofile);
write(ofile,'E ',b2x(hi(s)),b2x(lo(s)));
end;
write(ofile,' ',b2x(b));
end;
writeln(ofile);
writeln(ofile,'RCX');
writeln(ofile,b2x(hi(n)),b2x(lo(n)));
if ext = '.EXE' then begin
filename:= nam + '.EXX';
end;
writeln(ofile,'N ',filename);
writeln(ofile,'W');
writeln(ofile,'Q');
writeln(ofile,':name');
if ext = '.EXE' then begin
writeln(ofile,'if exist ',nam + ext,' del ',nam + ext);
writeln(ofile,'rename ',nam + '.EXX ',nam + ext);
end;
writeln(ofile,':end');
close(ifile);
close(ofile);
myhalt(0);
end.
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]