[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]