unit exeend;

INTERFACE

var
  endofexe,sizeofdata:longint;
  data:boolean;

function getexeinfo(const name:string;var data:boolean; var endofexe,sizeofdata:longint):boolean;

IMPLEMENTATION

function getexeinfo(const name:string; var data:boolean; var endofexe,sizeofdata:longint):boolean;
const
  magic=$5a4d; {'mz'}
var
  header:array[1..3]of word; {id,bytemod,pages}
  br:word;
  f:file;
begin
  getexeinfo:=false;
  data:=false;
  endofexe:=0;
  sizeofdata:=0;
  if(name='.')or(name='')then exit;
  assign(f,name);
  {$i-} reset(f,1); {$i+}
  if(ioresult<>0)then exit;
  {$i-} blockread(f,header,sizeof(header),br); {$i+}
  if(ioresult<>0)then exit;
  if(br<>sizeof(header))or(header[1]<>magic)then exit;
  endofexe:=longint(header[3]-1)*512+header[2];
  sizeofdata:=(filesize(f)-endofexe);
  close(f);
  data:=(sizeofdata>0);
  getexeinfo:=true;
end;

function dosmajor:byte; assembler;
asm
  mov ah,030h
  int 21h
end;

begin
  if(dosmajor>=3)then getexeinfo(paramstr(0),data,endofexe,sizeofdata)else
     getexeinfo('.',data,endofexe,sizeofdata);
end.