[Back to EXEC SWAG index]  [Back to Main SWAG index]  [Original]

{
>This should do the job, but actually I'm interested in letting the text
>appear in a seperate window, like dizman or something like that..... So
>if you know anything about that, please respond.....

Try something like this:
}

{ Thanks to DJ, TeeCee, Charles Falconer, Mike Copeland, et al. for their help
on this echo over the years ...... }
{$A-,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X-,Y+}
{$M 16384,0,0}

uses
  crt,
  dos;

function FileExists(name : string):boolean;
{ may not work with subdirs }
var f : searchrec;
begin
  findfirst(name, anyfile, f);
  FileExists:= (DOSerror = 0);
end;

procedure Compress(filespec : string);
const
  stderr = 2;
  compressor : pathstr = 'lha.exe';
var
  outfilename : pathstr;
  outfile : text;
  OldStdErr : word;
     procedure DOSclose(handle : word);
     var regs : registers;
     begin
       with regs do
         begin
           bx:= handle;
           ah:= $3e;
           MsDos(regs);
           if (flags and fcarry) <> 0 then
             writeln('Error ',ax,'. Closing DOS handle ', handle);
         end;
     end;
     procedure dup_handle(oldhandle : word; var newhandle : word);
     var regs : registers;
     begin
       newhandle:= 0;
       with regs do
         begin
           bx:= oldhandle;
           ah:= $45;
           MsDos(regs);
           if (flags and fcarry) <> 0 then
             writeln('Error ',ax,'. Dup''ing DOS handle ', oldhandle)
           else newhandle:= ax;
         end;
     end;
     procedure force_dup(existing, second:word);
     var regs : registers;
     begin
       with regs do
         begin
           ah := $46;  bx := existing; cx := second;
           msdos(regs);
           if (flags and fcarry) <> 0 then
             writeln('Error ',ax,'. Changing DOS handle ',
                      existing,' to ', second);
         end;
     end;
begin
  if not FileExists(compressor) then
    compressor:= FSearch(compressor, getenv('path'));
  if not FileExists(compressor) then
    begin
      write('File compressor not found.  Press Enter to acknowledge...');
      readln;
      halt;
    end;
  outfilename:= 'lha.log';
  assign(outfile, outfilename);
  rewrite(outfile);
  dup_handle(StdErr, OldStdErr);
  { redirect stderr to outfile }
  force_dup(textrec(outfile).handle, stderr);
  swapvectors;
  exec(compressor, 'a squished '+ filespec);
  swapvectors;
  flush(outfile);

  if (DOSerror<>0) or (DOSexitcode<>0) then
    begin
      writeln('DOSerror=', DOSerror);
      writeln('DOSexitcode=',DOSexitcode);
    end;

  { restore stderr }
  force_dup(OldStdErr, stderr);
  DosClose(OldStdErr);
  close(outfile);
end;


begin
  clrscr;
  write(' File Archiving by:  LHA version 2.13   Copyright (c) Yoshi 1988-1991.');
  Compress('dowwndw.pas');
  Readln;
end.


[Back to EXEC SWAG index]  [Back to Main SWAG index]  [Original]