home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 04 / turpatch.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-03-13  |  2.4 KB  |  57 lines

  1. {---------------------------------------------------------------------------}
  2. { Patch fuer Turbo-Pascal 3.0 unter CP/M 3.0 Plus zur korrekten Anzeige des
  3.   freien Disketten-Speicherplatzes bei Ausfuehrung des DIR-Kommandos.       }
  4.  
  5. PROGRAM TurPatch;                                         { Version 1.10.86 }
  6.  
  7. CONST w: ARRAY[65..104] OF BYTE =                  { neue Maschinen-Routine }
  8.               (14, 26, 17, 116, 44, 205, 5, 0, 14, 25, 205,
  9.                5, 0, 14, 46, 95, 205, 5, 0, 42, 116, 44, 58,
  10.                118, 44, 79, 6, 3, 175, 203, 25, 203, 28, 203,
  11.                29, 16, 247, 195, 119, 44);
  12.  
  13. TYPE buf = ARRAY[0..127] OF BYTE;
  14.  
  15. VAR f    : FILE;                                           { fuer TURBO.COM }
  16.     i0, i: INTEGER;               { Ein-/Ausgabe-Fehlernummer, Laufvariable }
  17.     b    : buf;              { Ein-/Ausgabepuffer fuer BLOCKREAD und -WRITE }
  18.  
  19. BEGIN
  20.   BDos(45, 225);                      { BDOS-Error-Mode auf "return" setzen }
  21.   ASSIGN(f, 'TURBO.COM');
  22.   REPEAT
  23.     WRITELN;
  24.     WRITE('Bitte Diskette mit TURBO.COM in das angemeldete Lauf');
  25.     WRITELN('werk legen und');
  26.     WRITE('RETURN druecken! (^C fuer Abbruch) ');
  27.     READLN;
  28.     {$I-}           { Ein-/Ausgabefehlerbehandlung durch Pascal ausschalten }
  29.     RESET(f);
  30.     {$I+}           {   "            "               "     "     anschalten }
  31.     i0:=IORESULT;
  32.     IF i0 > 0 THEN
  33.       WRITELN('Fehler-Nr. ', I0, ' beim File-RESET!');
  34.   UNTIL i0 = 0;
  35.   SEEK(f, 86);                              { zu 'patchenden' Record suchen }
  36.   BLOCKREAD(f, b, 1);                       { und von Disk lesen...         }
  37.   FOR i := 65 TO 104 DO b[i] := w[i];       { Record flicken...             }
  38.   SEEK(f, 86);                              { und wieder auf Disk zurueck-  }
  39.                                             { schreiben...                  }
  40.   {$I-}
  41.   BLOCKWRITE(f, b, 1);
  42.   {$I+}
  43.   i0 := IORESULT;                     { Datei vielleicht schreibgeschuetzt? }
  44.   IF i0 = 0 THEN
  45.     BEGIN
  46.       SEEK(f, 87);
  47.       BLOCKREAD(f, b, 1);                    { Zweiten Teil der Routine ... }
  48.       FOR i := 17 TO 20 DO b[i] := 0;        { ... mit NOP'S ueberschreiben }
  49.       SEEK(f, 87);
  50.       BLOCKWRITE(f, b, 1);
  51.       WRITELN; WRITELN('Patch installiert!'); WRITELN;
  52.     END
  53.   ELSE
  54.     WRITELN('Fehler ', i0, ' beim BLOCKWRITE. Programm gestoppt!');
  55.   CLOSE(f);
  56. END.
  57.