home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / wita / tsr.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-01-20  |  1.8 KB  |  71 lines

  1. (* ------------------------------------------------- *)
  2. (*                    TSR.PAS                        *)
  3. (*           (c) 1990,1991 DMV-Verlag                *)
  4. (* ------------------------------------------------- *)
  5. UNIT Tsr;
  6.  
  7. INTERFACE
  8.  
  9.   PROCEDURE MakeResident(Adress : POINTER;
  10.                          Hotkey : WORD);
  11.  
  12. IMPLEMENTATION
  13.  
  14. USES Dos;
  15.  
  16. VAR
  17.   NewSS, NewSP, OldSS, OldSP, Key : WORD;
  18.   Work                            : BOOLEAN;
  19.   OldInt16, Intprg                : POINTER;
  20.  
  21.  
  22.   PROCEDURE NewInt16 (Flags, CS, IP, AX, BX, CX, DX,
  23.                       SI, DI, DS, ES, BP : WORD);
  24.   INTERRUPT;
  25.  
  26.     PROCEDURE NewStack;
  27.     INLINE ($8C/$16/OldSS/$89/$26/OldSP/$FA/
  28.             $8E/$16/NewSS/$8B/$26/NewSP/$FB);
  29.  
  30.     PROCEDURE OldStack;
  31.     INLINE ($FA/$8E/$16/OldSS/$8B/$26/OldSP/$FB);
  32.  
  33.     PROCEDURE ExecInt(Adress : POINTER);
  34.     INLINE ($5B/$58/$87/$5E/$0E/$87/$46/$10/$89/
  35.             $EC/$5D/$07/$1F/$5F/$5E/$5A/$59/$CB);
  36.  
  37.     FUNCTION GetKey : WORD;
  38.     INLINE ($31/$C0/$9C/$FF/$1E/OldInt16);
  39.  
  40.   BEGIN { NewInt16 }
  41.     IF Hi(AX) = 0 THEN BEGIN
  42.       AX := GetKey;
  43.       IF (AX = Key) AND NOT Work THEN BEGIN
  44.         Work := TRUE;
  45.         NewStack;
  46.         INLINE ($FF/$1E/Intprg);
  47.         OldStack;
  48.         Work := FALSE;
  49.       END;
  50.     END ELSE ExecInt(OldInt16);
  51.   END; { NewInt16 }
  52.  
  53.   PROCEDURE MakeResident(Adress : POINTER;
  54.                          Hotkey : WORD);
  55.   BEGIN
  56.     Intprg := Adress;
  57.     Key    := Hotkey;
  58.     NewSS  := SSeg;
  59.     NewSP  := SPtr;
  60.     Work   := FALSE;
  61.     GetIntVec($16, OldInt16);
  62.     SetIntVec($16, @NewInt16);
  63.     SetIntVec($1b, SaveInt1b);
  64.     SetIntVec($00, SaveInt00);
  65.     Keep(0);
  66.   END; { MakeResident }
  67.  
  68. END.
  69. (* ------------------------------------------------- *)
  70. (*               Ende von TSR.PAS                    *)
  71.