home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / CMP / LPRM2 / PATCHLPR / PATCHLPR.MOD next >
Encoding:
Text File  |  1993-07-16  |  4.6 KB  |  149 lines

  1. MODULE PatchLPR;
  2. (* Programm ist dafür gedacht, das leidige Patch-Problem
  3.    mit dem LPR-Modula und der crystal-Bibliothek von Ulrich
  4.    Kaiser 'endgültig' zu lösen.
  5.    Alle zu patchenden Dateien müssen sich im gleichen Ver-
  6.    zeichnis wie das Programm befinden.
  7.    Sprache: LPR-Modula-2
  8.    Version: 16.07.93   16:48
  9.    Autor  : Jörg Kantel, (c) 1993
  10.    Programm ist nur für den Einsatz mit crystal
  11.    gedacht und darf nur zusammen mit crystal
  12.    unter den dort angegeben Konditionen weiter-
  13.    gegeben werden.
  14. *)
  15.  
  16. FROM FileSystem IMPORT Response, File, Lookup, Close, SetPos, WriteChar;
  17. FROM Filename   IMPORT Extension, filespec, parse;
  18. FROM InOut      IMPORT Read, ReadString, WriteString, WriteLn;
  19.  
  20. CONST maxpatch = 10;
  21.  
  22. TYPE PatchRecord = RECORD
  23.                      Name      : filespec;
  24.                      Numbers   : CARDINAL;
  25.                      PAdr      : ARRAY [1..5] OF LONGINT;
  26.                    END;
  27.  
  28.      ToPatch = ARRAY[1..maxpatch] OF PatchRecord;
  29.  
  30. VAR Patches     : ToPatch;
  31.     InFile      : File;
  32.     InName      : filespec;
  33.     PatchAdr    : ARRAY[1..6] OF CHAR;
  34.     position    : LONGINT;
  35.     w           : CHAR;
  36.     Weiter      : BOOLEAN;
  37.     c           : CHAR;
  38.     i, j        : CARDINAL;
  39.  
  40. PROCEDURE Initialize;
  41. BEGIN
  42.  
  43.    Patches[1].Name    := 'AAS.SBM';
  44.    Patches[1].Numbers := 1;
  45.    Patches[1].PAdr[1] := 0BH;
  46.  
  47.    Patches[2].Name    := 'AAS.OBM';
  48.    Patches[2].Numbers := 1;
  49.    Patches[2].PAdr[1] := 6H;
  50.  
  51.    Patches[3].Name    := 'APPLICAT.OBM';
  52.    Patches[3].Numbers := 1;
  53.    Patches[3].PAdr[1] := 6CH;
  54.  
  55.    Patches[4].Name    := 'COMPILE.OBM';
  56.    Patches[4].Numbers := 2;
  57.    Patches[4].PAdr[1] := 15996H;
  58.    Patches[4].PAdr[2] := 18A74H;
  59.  
  60.    Patches[5].Name    := 'DEBUG.OBM';
  61.    Patches[5].Numbers := 3;
  62.    Patches[5].PAdr[1] := 0DAH;
  63.    Patches[5].PAdr[2] := 314EH;
  64.    Patches[5].PAdr[3] := 578AH;
  65.  
  66.    Patches[6].Name    := 'LINKER.OBM';
  67.    Patches[6].Numbers := 1;
  68.    Patches[6].PAdr[1] := 6CH;
  69.  
  70.    Patches[7].Name    := 'M2EDITOR.OBM';
  71.    Patches[7].Numbers := 4;
  72.    Patches[7].PAdr[1] := 5DDCH;
  73.    Patches[7].PAdr[2] := 746CH;
  74.    Patches[7].PAdr[3] := 8434H;
  75.    Patches[7].PAdr[4] := 0B294H;
  76.  
  77.    Patches[8].Name    := 'M2SHELL.OBM';
  78.    Patches[8].Numbers := 5;
  79.    Patches[8].PAdr[1] := 0C4H;
  80.    Patches[8].PAdr[2] := 48BEH;
  81.    Patches[8].PAdr[3] := 5118H;
  82.    Patches[8].PAdr[4] := 80D8H;
  83.    Patches[8].PAdr[5] := 8DA0H;
  84.  
  85.    Patches[9].Name    := 'WINDOWBA.OBM';
  86.    Patches[9].Numbers := 1;
  87.    Patches[9].PAdr[1] := 56H;
  88.  
  89.    Patches[10].Name    := 'FILENAME.OBM';
  90.    Patches[10].Numbers := 1;
  91.    Patches[10].PAdr[1] := 40H;
  92.  
  93.    (* Hier können bei Bedarf weitere Patch-Adressen hin, dann
  94.     * darf aber nicht vergessen werden, den Range von Patches
  95.     * (maxpatch) in der Typ-Deklaration zu ändern.
  96.     * So kann zum Beispiel der Eintrag für GRAPHIC.OBM - ist in
  97.     * Holgers Patchlist, aber nicht auf meiner LPR-Diskette -
  98.     * wie folgt aussehen:
  99.     * Patches[11].Name    := 'GRAPHIC.OBM';
  100.     * Patches[11].Numbers := 1;
  101.     * Patches[11].PAdr[1] := 56H;
  102.     *)
  103. END Initialize;
  104.  
  105. BEGIN
  106.    Weiter := TRUE;
  107.    Initialize;
  108.    WriteString('Patch-Programm für LPR-Modula-2 und crystal'); WriteLn;
  109.    WriteString('        (c) 1993 by Jörg Kantel            '); WriteLn;
  110.    WriteString('--------------------------------------------'); WriteLn;
  111.    WriteLn;
  112.    WriteString('Sind alle Dateien im gleichen Unterverzeich-'); WriteLn;
  113.    WriteString('nis wie dieses Programm?             (j/n): ');
  114.    Read(c); WriteLn;
  115.    IF (c <> 'j') THEN Weiter := FALSE; END;
  116.    WHILE Weiter DO
  117.       FOR i := 1 TO maxpatch DO
  118.          WITH Patches[i] DO
  119.             InName := Name;
  120.             Lookup(InFile, InName, FALSE);
  121.             IF (InFile.res = done) THEN
  122.                WriteString('File-Name ');
  123.                WriteString(InName);
  124.                WriteString(' in Arbeit...');
  125.                WriteLn;
  126.                FOR j := 1 TO Numbers DO
  127.                   position := PAdr[j];
  128.                   SetPos(InFile, position);
  129.                   w := 'A';
  130.                   WriteChar(InFile, w);
  131.                   INC(position);
  132.                   WriteChar(InFile, w);
  133.                   INC(position);
  134.                   w := 'S';
  135.                   WriteChar(InFile, w);
  136.                   Close(InFile);
  137.                END; (* FOR j *)
  138.             ELSE
  139.                WriteString('Datei ');
  140.                WriteString(InName);
  141.                WriteString(' nicht gefunden ...');
  142.                WriteLn;
  143.             END; (* IF *)
  144.          END; (* WITH *)
  145.       END; (* FOR i *)
  146.       Weiter := FALSE;
  147.    END; (* WHILE *)
  148. END PatchLPR.
  149.