home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TSR.PAS *)
- (* (c) 1988, 1989 K.Gieselmann & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Tsr;
- { bitte VOR Crt in der uses-Anweisung einfügen! }
-
- INTERFACE
-
- USES Dos;
-
- PROCEDURE MakeResident(PopUp : Pointer; HotKey : WORD);
-
- IMPLEMENTATION
-
- VAR
- SystemSP, SystemSS, PopUpSS, PopUpSP, HotKey_ : WORD;
- CurrInt16, PopUp_, Int16Save, Int1BSave : Pointer;
-
- PROCEDURE Int16(Flags, CS, IP, AX, BX, CX, DX,
- SI, DI, DS, ES, BP : WORD);
- INTERRUPT;
-
-
- FUNCTION KeyFromOldInt16 : WORD;
- INLINE ($31/$C0/$9C/$FF/$1E/Int16Save);
-
- PROCEDURE ExitOldInt16;
- INLINE ($A1/Int16Save + 2/$87/$46/$10/$8B/$1E/Int16Save/
- $87/$5E/$0E/$5D/$07/$1F/$5F/$5E/$5A/$59/$CB);
-
- PROCEDURE CallPopUp; INLINE ($FF/$1E/PopUp_);
-
- PROCEDURE SwitchStack;
- INLINE ($8C/$16/SystemSS/$89/$26/SystemSP/$FA/
- $8E/$16/PopUpSS/$8B/$26/PopUpSP/$FB);
-
- PROCEDURE SwitchBack;
- INLINE ($FA/$8E/$16/SystemSS/$8B/$26/SystemSP/$FB);
-
- BEGIN {Int16}
- IF Hi(AX) = 0 THEN
- REPEAT
- AX := KeyFromOldInt16;
- IF AX = HotKey_ THEN BEGIN
- SwitchStack;
- GetIntVec($16, CurrInt16);
- SetIntVec($16, Int16Save);
- Callpopup;
- SetIntVec($16, CurrInt16);
- SwitchBack;
- END;
- UNTIL AX <> HOTKEY_
- ELSE ExitOldInt16;
- END;
-
- PROCEDURE MakeResident;
- BEGIN
- PopUp_ := PopUp;
- HotKey_ := HotKey;
- GetIntVec($16, Int16Save);
- SetIntVec($16, @Int16);
- SetIntVec($1B, Int1BSave);
- Keep(0);
- END;
-
- BEGIN
- PopUpSS := SSeg;
- PopUpSP := SPtr + 4;
- GetIntVec($1B, Int1BSave)
- END.
- (* ------------------------------------------------------ *)
- (* Ende von TSR.PAS *)