home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* TSR.PAS *)
- (* (c) 1990,1991 DMV-Verlag *)
- (* ------------------------------------------------- *)
- UNIT Tsr;
-
- INTERFACE
-
- PROCEDURE MakeResident(Adress : POINTER;
- Hotkey : WORD);
-
- IMPLEMENTATION
-
- USES Dos;
-
- VAR
- NewSS, NewSP, OldSS, OldSP, Key : WORD;
- Work : BOOLEAN;
- OldInt16, Intprg : POINTER;
-
-
- PROCEDURE NewInt16 (Flags, CS, IP, AX, BX, CX, DX,
- SI, DI, DS, ES, BP : WORD);
- INTERRUPT;
-
- PROCEDURE NewStack;
- INLINE ($8C/$16/OldSS/$89/$26/OldSP/$FA/
- $8E/$16/NewSS/$8B/$26/NewSP/$FB);
-
- PROCEDURE OldStack;
- INLINE ($FA/$8E/$16/OldSS/$8B/$26/OldSP/$FB);
-
- PROCEDURE ExecInt(Adress : POINTER);
- INLINE ($5B/$58/$87/$5E/$0E/$87/$46/$10/$89/
- $EC/$5D/$07/$1F/$5F/$5E/$5A/$59/$CB);
-
- FUNCTION GetKey : WORD;
- INLINE ($31/$C0/$9C/$FF/$1E/OldInt16);
-
- BEGIN { NewInt16 }
- IF Hi(AX) = 0 THEN BEGIN
- AX := GetKey;
- IF (AX = Key) AND NOT Work THEN BEGIN
- Work := TRUE;
- NewStack;
- INLINE ($FF/$1E/Intprg);
- OldStack;
- Work := FALSE;
- END;
- END ELSE ExecInt(OldInt16);
- END; { NewInt16 }
-
- PROCEDURE MakeResident(Adress : POINTER;
- Hotkey : WORD);
- BEGIN
- Intprg := Adress;
- Key := Hotkey;
- NewSS := SSeg;
- NewSP := SPtr;
- Work := FALSE;
- GetIntVec($16, OldInt16);
- SetIntVec($16, @NewInt16);
- SetIntVec($1b, SaveInt1b);
- SetIntVec($00, SaveInt00);
- Keep(0);
- END; { MakeResident }
-
- END.
- (* ------------------------------------------------- *)
- (* Ende von TSR.PAS *)
-