home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* DSKWATCH.PAS *)
- (* Residenter Monitor für Laufwerkszugriffe *)
- (* Compiler: Turbo Pascal 6.0 *)
- (* ------------------------------------------------- *)
- (* (c) 1991 Jörn Willhöft & DMV-Verlag *)
- (* ------------------------------------------------- *)
- {$A+,B-,D+,E+,F-,I+,L+,N-,O-,R+,S+,V+}
- {$M 16384,0,5000}
- PROGRAM DiskWatcher;
-
- USES
- Crt, Dos;
-
- TYPE
- SchirmTyp = ARRAY [1..2000] OF WORD;
-
- VAR
- OldDiskVek,
- NewDiskVek : Pointer;
- DiskVek : Pointer ABSOLUTE $0000:$004C;
- Bild : SchirmTyp ABSOLUTE $B800:$0000;
- BildSave : SchirmTyp;
- OldX, OldY,
- LW : BYTE;
- code : INTEGER;
- Regs : Registers;
- ch : CHAR;
-
-
- PROCEDURE NewDiskInt(Flags, cs, ip, ax, bx, cx, dx,
- si, di, ds, es, bp : WORD);
- INTERRUPT;
- BEGIN
- IF ax = $CCCC THEN
- ax := $AFFE
- ELSE BEGIN
- DiskVek := OldDiskVek;
- Regs.ax := ax;
- Regs.bx := bx;
- Regs.cx := cx;
- Regs.dx := dx;
- Regs.es := es;
- Intr($13, Regs);
- IF Lo(dx) = LW THEN BEGIN
- BildSave := Bild;
- oldx := WhereX;
- oldy := WhereY;
- TextBackground(White);
- TextColor(Black);
- Window(10, 5, 30, 20);
- ClrScr;
- WriteLn(' AH, AL : ', Hi(ax), '-', Lo(ax));
- WriteLn(' CH, CL : ', Hi(cx), '-', Lo(cx));
- WriteLn(' DH, DL : ', Hi(dx), '-', Lo(dx));
- WriteLn(' ES : ', es );
- WriteLn(' BX : ', bx );
- WriteLn('-------------------' );
- Write (' C-Flag : ');
- WriteLn((Regs.Flags AND fCarry) <> 0);
- WriteLn(' AH : ', Regs.ah);
-
- ch := ReadKey;
-
- Window(1, 1, 80, 25);
- Bild := BildSave;
- GotoXY(oldx, oldy);
- END;
- DiskVek := NewDiskVek;
- ax := Regs.ax;
- bx := Regs.bx;
- cx := Regs.cx;
- dx := Regs.dx;
- es := Regs.es;
- Flags := Regs.Flags;
- END;
- END;
-
- BEGIN
- Val(ParamStr(1), LW, Code);
- IF (((LW <= 135) AND (LW >= 128)) OR
- ((LW <= 3) AND (LW >= 0))) AND
- (Code = 0) THEN BEGIN
- ch := 'J';
- Regs.ax := $CCCC;
- Intr($13, Regs);
- IF Regs.ax = $AFFE THEN BEGIN
- WriteLn(ParamStr(0) +
- ' ist bereits installiert!');
- WriteLn('Trotzdem installieren ? (J/N)');
- ch := UpCase(ReadKey);
- END;
- IF ch = 'J' THEN BEGIN
- OldDiskVek := DiskVek;
- NewDiskVek := Addr(NewDiskInt);
- DiskVek := NewDiskVek;
- WriteLn(ParamStr(0) + ' installiert.');
- Keep(0);
- END;
- END ELSE BEGIN
- WriteLn('Aufruf von ', ParamStr(0), ':');
- WriteLn(ParamStr(0) + ' <0..3, 80..87>');
- WriteLn(' 0 : erstes Laufwerk');
- WriteLn(' 1 : zweites Laufwerk usw...');
- WriteLn(' 80: erste Festplatte');
- WriteLn(' 81: zweite Festplatte usw...');
- END;
- END.
- (* ------------------------------------------------- *)
- (* Ende von DSKWATCH.PAS *)
-
-