Source file: /~heha/hs/t_und_m.zip/SRC/MORESTAK.PAS

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
Wrong umlauts? - Assume file is ANSI (CP1252) encoded