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

uses
    crt;
type
    EXEHEAD=record
     ID:array [1..2]of char;
     LASTPAGE:word;
     PAGES:word;
     RELOCATION:word;
     HEADERSIZE:word;
     MIN:word;
     MAX:word;
     OFFSET:word;
     SP:word;
     CHECKSUM:word;
     IP:word;
     CS:word;
     FIRST:WORD;
     OVERLAY:WORD;
    end;
var
   exe:exehead;
   f,f1,f2:file;
   s:string[12];
   w:byte;
   buf:array[1..4096]of byte;
   i,j:word;
function FILEEXISTS(FILENAME:STRING) : BOOLEAN;
var
   f:file;
begin
     {$I-}
     assign(f,fileName);
     reset(f);
     close(f);
     {$I+}
     FILEEXISTS:=(ioresult=0) and (fileName<>'');
end;

begin
     textattr:=white;
     writeln;
     writeln('MARKEXE, (C) Copyright DOTAN BARAK, 1997. ver 1.0');
     writeln('Put copywrite message in an EXE file.');
     writeln;
     writeln;
     textattr:=lightgray;
     if paramcount<2 then
     begin
          writeln('usage: MARKEXE  [exefile]  [textfile]');
          writeln;
          halt(1);
     end;
     s:=paramstr(1);
     if not fileexists(s) then
     begin
          writeln('THE FILE ',s, ' NOT FOUND !');
          halt(1)
     end;
     if not fileexists(paramstr(2)) then
     begin
          writeln('THE FILE ',paramstr(2), ' NOT FOUND !');
          halt(1)
     end;
     for w:=1 to length(s) do
      s[w]:=upcase(s[w]);
     assign(f,paramstr(1));
     reset(f,1);
     blockread(f,exe,sizeof(exe));
     if (exe.id<>'MZ') then
      if (exe.id<>'ZM') then
     begin
          close(f);
          writeln('The file ',s,' is not an EXE file.');
          halt(255);
     end;
     assign(f1,paramstr(2));
     reset(f1,1);
     assign(f2,'MARKEXE.$$$');
     rewrite(f2,1);
     seek(f,0);
     blockread(f,buf,exe.headersize*16,i);
     blockwrite(f2,buf,i);
     repeat
           blockread(f1,buf,4096,i);
           blockwrite(f2,buf,i,j);
     until (i<>4096) or (i<>j);
     j:=filesize(f2) div 16;
     i:=filesize(f2) mod 16;
     if i<>0 then
     begin
          exe.headersize:=j+1;
          fillchar(buf,16,0);
          blockwrite(f2,buf,16-i);
     end
     else
          exe.headersize:=j;
     repeat
           blockread(f,buf,4096,i);
           blockwrite(f2,buf,i,j);
     until (i<>4096) or (i<>j);
     i:=filesize(f2);
     exe.lastpage:=i mod 512;
     exe.pages:=(i div 512)+1;
     seek(f2,0);
     blockwrite(f2,exe,sizeof(exe));
     close(f);
     erase(f);
     close(f1);
     close(f2);
     assign(f,'MARKEXE.$$$');
     rename(f,s);
     writeln(' The file ',s,' was marked .');
end.

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