Доброго всем дня!
Вот реализация записи в экзе-файл под досом.
А то Шивадест с Анконнектедом меня грузили...
Теперича верите??? Могу зачетку отсканить
))))))))))))
{$A+,B-,D+,E+,F+,G-,I+,L+,N+,O-,P-,Q+,R+,S+,T+,V+,X+,Y+}
{$M 65520,0,65520}
uses DOS,Crt;
const
RunCount : LongInt = $0A;
var
Self : file; {exe file}
HdrSize : Word; {Header Size of exe file}
RunCountOffset : LongInt; {Offset in exe file of Const RunCount}
i : Byte;
Pos : ^Byte;
const
CheckRunCount : LongInt = $0A; {Zdes dolzhno byt' znachenie RunCount}
procedure Expired; {Eta procedura zapuskaetsya kogda limit ischerpan}
{(RunCount = 0) }
begin
WriteLn('Vash limit ischerpan...');
end;
procedure NotExpired;{RunCount<>0}
begin
WriteLn('Ostalos'' zapuskov : ', RunCount);
end;
begin {main}
ClrScr;
{Odna iz zashit}
if CheckRunCount<RunCount then
begin
Expired;
RunCount:=0;
end;
if RunCount=0 then
Expired
else
begin
Assign(Self,ParamStr(0)); {}
Reset(Self,1); {}
Seek(Self,8); {}
BlockRead(Self,HdrSize,2);{Read header size}
{formula vychisleniya smesheniya peremennoi RunCount v faile trial.exe}
RunCountOffset:=Ofs(RunCount)+LongInt((Seg(RunCount)-PrefixSeg-$10+HdrSize))*16;
RunCount:=RunCount-1;
Seek(Self,RunCountOffset);
for i:=0 to 3 do
begin
Pos:=Ptr(Seg(RunCount),Ofs(RunCount)+i);
{ WriteLn(Pos^);}
BlockWrite(Self,Pos^,1);
end;
Close(Self);
NotExpired;
end;
WriteLn('Press any key...');
ReadKey;
end. {main}
Добавлено Блин, сессия началась... С матаном такая халява не прокатит... Так что небольшой перерывчик... где на недельки 3... Прошу тему не закрывать.
Заранее благодарю. Всем студентам успешной сдачи сессии.