home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / PATCHBP.PAS < prev    next >
Pascal/Delphi Source File  |  1993-09-30  |  3KB  |  92 lines

  1. Program PatchBP; {--- 1993 Matthias Withopf / c't ---}
  2.  
  3. Var
  4.   f : File of Byte;
  5.   s : String;
  6.   c : Byte;
  7.   BP701 : Boolean;
  8.   Error : Boolean;
  9.  
  10.   Procedure Chg(O1,O1a,O2,O2a,O3,O3a : LongInt;
  11.         OldVal,NewVal : Array of Char);
  12.   Var
  13.     b : Byte;
  14.     i : Integer;
  15.     O : LongInt;
  16.   Begin
  17.     If BP701 then
  18.       Case c of 1 : O := O1a; 2 : O := O2a; 3 : O := O3a; End
  19.     else
  20.       Case c of 1 : O := O1; 2 : O := O2; 3 : O := O3; End;
  21.     If O <> 0 then
  22.       Begin
  23.     For i := Low(OldVal) to High(OldVal) do
  24.       Begin
  25.         Seek(f,O); Read(f,b); Seek(f,O);
  26.         If (b = Ord(OldVal[i])) or (b = Ord(NewVal[i])) then
  27.           Begin
  28.         b := Ord(NewVal[i]); Write(f,b)
  29.           End
  30.         else
  31.           Begin
  32.         WriteLn('Fehler beim Patchen! Abbruch.');
  33.         Close(f); Halt(50);
  34.           End;
  35.         Inc(O);
  36.       End;
  37.       End;
  38.   End;
  39.  
  40. Begin
  41.   Error := True;
  42.   If ParamCount >= 2 then
  43.     Begin
  44.       s := ParamStr(2) + ' ';
  45.       c := Pos(UpCase(s[1]),'CIR');
  46.       If c > 0 then Error := False;
  47.       BP701 := ParamStr(3) = '701';
  48.     End;
  49.   If Error then
  50.     Begin
  51.       WriteLn('Aufruf: PatchBP <Dateiname> C [701]  für BPC.EXE');
  52.       WriteLn('        PatchBP <Dateiname> I [701]  für BP.EXE');
  53.       WriteLn('        PatchBP <Dateiname> R [701]  für BP.REZ');
  54.       Halt(10);
  55.     End;
  56.   Assign(f,ParamStr(1)); Reset(f);
  57.   { Kein InitTask() bei Programmstart. }
  58.   Chg($086F9,$08706,$1BBEF,$1BB30,$0    ,$0    ,#6,#2);
  59.   { Application Flags = 2. }
  60.   Chg($0D3FE,$0D421,$20CAF,$20C06,$0    ,$0    ,#3,#2);
  61.   { (Compatible with Windowing API). }
  62.   Chg($0D408,$0D42B,$20CB9,$20C10,$0    ,$0    ,#$83,#$82);
  63.   { Operating System = OS/2. }
  64.   Chg($0D48B,$0D4AE,$20D3C,$20C93,$0    ,$0    ,#2,#1);
  65.   { Stub gibt 'This program requires OS/2' aus. }
  66.   Chg($0E5AA,$0E5AA,$11BEC,$11AEC,$0    ,$0,'Microso','OS/2'#13#10'$');
  67.   { Compiler meldet sich mit 'Version 7OS2'. }
  68.   Chg($14C19,$14C19,$010C3,$010C3,$0    ,$0    ,'.0 ','OS2');
  69.   { Kommandozeilen-Parameter -CO = OS/2 target. }
  70.   Chg($14D4B,$14D4B,$0      ,$0     ,$0    ,$0    ,'W','O');
  71.   Chg($14D4F,$14D4F,$0      ,$0     ,$0    ,$0    ,'Windows','OS/2   ');
  72.   Chg($01376,$01375,$0      ,$0     ,$0    ,$0    ,'W','O');
  73.   { Standard-Unit-Extension ist 'TPO'. }
  74.   Chg($15391,$15391,$617A7,$617A7,$0    ,$0    ,'W','O');
  75.   { 'OS2' als bedingtes Symbol definieren. }
  76.   Chg($1645E,$1645E,$61882,$61882,$0    ,$0    ,#7'WINDO',#3'OS2'#0#2);
  77.   { Compiler|Zielplattform einstellen = 'OS/2'. }
  78.   Chg($0    ,$0    ,$6D290,$6D390,$02B9C,$02B9C,'W~indows','O~S/2   ');
  79.   { Optionen|Compiler = 'OS/2'. }
  80.   Chg($0    ,$0    ,$6D788,$6D888,$030D9,$030D9,'Windows','OS/2   ');
  81.   { Optionen|Speicherauslegung = 'OS/2'. }
  82.   Chg($0    ,$0    ,$6D949,$6DA49,$03298,$03298,'Windows','   OS/2');
  83.   { Standard-Library ist 'OS2.TPL'. }
  84.   Chg($1525A,$1525A,$6E86E,$6E96E,$04251,$04251,'TPW','OS2');
  85.   { Compiler|Zielplattform = 'OS/2'. }
  86.   Chg($0    ,$0    ,$70311,$70411,$06396,$06396,'Windows','   OS/2');
  87.   { Compile-Box = 'OS/2'. }
  88.   Chg($0    ,$0    ,$779B5,$77AB5,$0E034,$0E034,'Windows','   OS/2');
  89.   WriteLn('Patch ok.');
  90.   Close(f);
  91. End.
  92.