program morestak;
{Problem: 16-Bit-Windows-Programme mit der Vorgabe 8 KByte für Stack
laufen unter Windows 98 und Me nicht mehr oder stürzen ab.
Lösung: Patch des betreffenden Programms für 4 KB mehr Stack}
{$I-,X+}
uses WinDos;
var
w: Word;
l: LongInt;
i: Integer;
s: array[0..255] of Char;
f: file;
c: Char;
begin
i:=GetArgCount;
if i=0 then begin
WriteLn('Patcht 16-bit-Windows-Programm zu mehr Stack, für Lauffähigkeit unter Win98+.');
WriteLn('Dateiname angeben!');
exit;
end;
GetArgStr(s,1,sizeof(s));
Assign(f,s);
Reset(f,1);
if IOResult<>0 then begin
WriteLn('Kann Datei ',s,' nicht (zur Modifikation) öffnen!');
exit;
end;
BlockRead(f,w,2);
if w<>$5A4D then begin
WriteLn(s,' ist keine .EXE-Datei!');
exit;
end;
Seek(f,$3C);
BlockRead(f,l,4);
Seek(f,l);
BlockRead(f,w,2);
if w<>$454E then begin
WriteLn(s,' ist keine 16-bit-Windows-Datei!');
exit;
end;
Seek(f,l+$12);
BlockRead(f,w,2);
WriteLn('Die Stackgröße ist z.Z. ',w,' Bytes.');
Write('Vergrößerung um 4 KB gewünscht [J/N]? ');
ReadLn(c);
if not (c in ['J','j','Y','y']) then begin
WriteLn('Dann eben nicht.');
exit;
end;
Inc(w,$1000);
Seek(f,l+$12);
BlockWrite(f,w,2);
Close(f);
if IOResult<>0 then begin
WriteLn('Fehler beim Schreiben!');
exit;
end;
WriteLn('OK, ',s,' modifiziert.');
end.
Detected encoding: OEM (CP437) | 1
|
|