home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / pastrick / dskwatch / dskwatch.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-12-17  |  3.1 KB  |  112 lines

  1. (* ------------------------------------------------- *)
  2. (*                  DSKWATCH.PAS                     *)
  3. (*     Residenter Monitor für Laufwerkszugriffe      *)
  4. (*    Compiler: Turbo Pascal 6.0                     *)
  5. (* ------------------------------------------------- *)
  6. (*       (c) 1991 Jörn Willhöft & DMV-Verlag         *)
  7. (* ------------------------------------------------- *)
  8. {$A+,B-,D+,E+,F-,I+,L+,N-,O-,R+,S+,V+}
  9. {$M 16384,0,5000}
  10. PROGRAM DiskWatcher;
  11.  
  12. USES
  13.   Crt, Dos;
  14.  
  15. TYPE
  16.   SchirmTyp = ARRAY [1..2000] OF WORD;
  17.  
  18. VAR
  19.   OldDiskVek,
  20.   NewDiskVek  : Pointer;
  21.   DiskVek     : Pointer   ABSOLUTE $0000:$004C;
  22.   Bild        : SchirmTyp ABSOLUTE $B800:$0000;
  23.   BildSave    : SchirmTyp;
  24.   OldX, OldY,
  25.   LW          : BYTE;
  26.   code        : INTEGER;
  27.   Regs        : Registers;
  28.   ch          : CHAR;
  29.  
  30.  
  31.   PROCEDURE NewDiskInt(Flags, cs, ip, ax, bx, cx, dx,
  32.                        si, di, ds, es, bp : WORD);
  33.   INTERRUPT;
  34.   BEGIN
  35.     IF ax = $CCCC THEN
  36.       ax := $AFFE
  37.     ELSE BEGIN
  38.       DiskVek := OldDiskVek;
  39.       Regs.ax := ax;
  40.       Regs.bx := bx;
  41.       Regs.cx := cx;
  42.       Regs.dx := dx;
  43.       Regs.es := es;
  44.       Intr($13, Regs);
  45.       IF Lo(dx) = LW THEN BEGIN
  46.         BildSave := Bild;
  47.         oldx     := WhereX;
  48.         oldy     := WhereY;
  49.         TextBackground(White);
  50.         TextColor(Black);
  51.         Window(10, 5, 30, 20);
  52.         ClrScr;
  53.         WriteLn('  AH, AL : ', Hi(ax), '-', Lo(ax));
  54.         WriteLn('  CH, CL : ', Hi(cx), '-', Lo(cx));
  55.         WriteLn('  DH, DL : ', Hi(dx), '-', Lo(dx));
  56.         WriteLn('  ES     : ', es );
  57.         WriteLn('  BX     : ', bx );
  58.         WriteLn('-------------------' );
  59.         Write  ('  C-Flag : ');
  60.         WriteLn((Regs.Flags AND fCarry) <> 0);
  61.         WriteLn('  AH     : ', Regs.ah);
  62.  
  63.         ch := ReadKey;
  64.  
  65.         Window(1, 1, 80, 25);
  66.         Bild := BildSave;
  67.         GotoXY(oldx, oldy);
  68.       END;
  69.       DiskVek := NewDiskVek;
  70.       ax := Regs.ax;
  71.       bx := Regs.bx;
  72.       cx := Regs.cx;
  73.       dx := Regs.dx;
  74.       es := Regs.es;
  75.       Flags := Regs.Flags;
  76.     END;
  77.   END;
  78.  
  79. BEGIN
  80.   Val(ParamStr(1), LW, Code);
  81.   IF (((LW <= 135) AND (LW >= 128)) OR
  82.       ((LW <= 3)   AND (LW >= 0))) AND
  83.        (Code = 0) THEN BEGIN
  84.     ch := 'J';
  85.     Regs.ax := $CCCC;
  86.     Intr($13, Regs);
  87.     IF Regs.ax = $AFFE THEN BEGIN
  88.       WriteLn(ParamStr(0) +
  89.               ' ist bereits installiert!');
  90.       WriteLn('Trotzdem installieren ? (J/N)');
  91.       ch := UpCase(ReadKey);
  92.     END;
  93.     IF ch = 'J' THEN BEGIN
  94.       OldDiskVek := DiskVek;
  95.       NewDiskVek := Addr(NewDiskInt);
  96.       DiskVek    := NewDiskVek;
  97.       WriteLn(ParamStr(0) + ' installiert.');
  98.       Keep(0);
  99.     END;
  100.   END ELSE BEGIN
  101.     WriteLn('Aufruf von ', ParamStr(0), ':');
  102.     WriteLn(ParamStr(0) + ' <0..3, 80..87>');
  103.     WriteLn('  0 : erstes Laufwerk');
  104.     WriteLn('  1 : zweites Laufwerk usw...');
  105.     WriteLn('  80: erste Festplatte');
  106.     WriteLn('  81: zweite Festplatte usw...');
  107.   END;
  108. END.
  109. (* ------------------------------------------------- *)
  110. (*            Ende von DSKWATCH.PAS                  *)
  111.  
  112.