{ Altho it doesn't have the write & readthat yours has, I just found no need, esp. cuz I was using "COPY PROGRAM.EXE + DATA.FIL NEWPROG.EXE". } Unit ExeEnd; Interface Uses Dos; Var EndOfExe, SizeOfData: LongInt; Data: Boolean; Function GetExeInfo(Const Name: PathStr; var Data: Boolean; var EndOfExe, SizeOfData: LongInt): Boolean; Implementation Function GetExeInfo(Const Name: PathStr; var Data: Boolean; var EndOfExe, SizeOfData: LongInt): Boolean; Const CorrectExe=$5A4D; {'MZ'} Var Header: Array[1..3] of Word; {ID, ByteMod, Pages} F: File; ReadIn: Word; Begin Data:=False; EndOfExe:=0; SizeOfData:=0; If Name='.' then Exit; Assign(F, Name); {$I-} Reset(F, 1); {$I+} If IOResult=0 then Begin BlockRead(F, Header, SizeOf(Header), ReadIn); If (ReadIn=SizeOf(Header)) and (Header[1]=CorrectExe) then EndOfExe:=LongInt(Header[3]-1)*512+Header[2]; SizeOfData:=FileSize(F)-EndOfExe; Close(F); Data:=SizeOfData>0; GetExeInfo:=True; End Else GetExeInfo:=False; End; Begin If Lo(DosVersion)>=3 then GetExeInfo(ParamStr(0), Data, EndOfExe, SizeOfData) Else GetExeInfo('.', Data, EndOfExe, SizeOfData); End.