home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / cebit_91 / tricks / tsr.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1990-12-10  |  1.9 KB  |  74 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       TSR.PAS                          *)
  3. (*       (c) 1988, 1989  K.Gieselmann & TOOLBOX           *)
  4. (* ------------------------------------------------------ *)
  5. UNIT Tsr;
  6.   { bitte VOR Crt in der uses-Anweisung einfügen! }
  7.  
  8. INTERFACE
  9.  
  10. USES Dos;
  11.  
  12.   PROCEDURE MakeResident(PopUp : Pointer; HotKey : WORD);
  13.  
  14. IMPLEMENTATION
  15.  
  16. VAR
  17.   SystemSP, SystemSS, PopUpSS, PopUpSP, HotKey_ : WORD;
  18.   CurrInt16, PopUp_, Int16Save, Int1BSave       : Pointer;
  19.  
  20.   PROCEDURE Int16(Flags, CS, IP, AX, BX, CX, DX,
  21.                          SI, DI, DS, ES, BP : WORD);
  22.   INTERRUPT;
  23.  
  24.  
  25.     FUNCTION KeyFromOldInt16 : WORD;
  26.     INLINE ($31/$C0/$9C/$FF/$1E/Int16Save);
  27.  
  28.     PROCEDURE ExitOldInt16;
  29.     INLINE ($A1/Int16Save + 2/$87/$46/$10/$8B/$1E/Int16Save/
  30.             $87/$5E/$0E/$5D/$07/$1F/$5F/$5E/$5A/$59/$CB);
  31.  
  32.     PROCEDURE CallPopUp; INLINE ($FF/$1E/PopUp_);
  33.  
  34.     PROCEDURE SwitchStack;
  35.     INLINE ($8C/$16/SystemSS/$89/$26/SystemSP/$FA/
  36.             $8E/$16/PopUpSS/$8B/$26/PopUpSP/$FB);
  37.  
  38.     PROCEDURE SwitchBack;
  39.     INLINE ($FA/$8E/$16/SystemSS/$8B/$26/SystemSP/$FB);
  40.  
  41.   BEGIN {Int16}
  42.     IF Hi(AX) = 0 THEN
  43.       REPEAT
  44.         AX := KeyFromOldInt16;
  45.         IF AX = HotKey_ THEN BEGIN
  46.           SwitchStack;
  47.           GetIntVec($16, CurrInt16);
  48.           SetIntVec($16, Int16Save);
  49.           Callpopup;
  50.           SetIntVec($16, CurrInt16);
  51.           SwitchBack;
  52.         END;
  53.       UNTIL AX <> HOTKEY_
  54.     ELSE ExitOldInt16;
  55.   END;
  56.  
  57.   PROCEDURE MakeResident;
  58.   BEGIN
  59.     PopUp_  := PopUp;
  60.     HotKey_ := HotKey;
  61.     GetIntVec($16, Int16Save);
  62.     SetIntVec($16, @Int16);
  63.     SetIntVec($1B, Int1BSave);
  64.     Keep(0);
  65.   END;
  66.  
  67. BEGIN
  68.   PopUpSS := SSeg;
  69.   PopUpSP := SPtr + 4;
  70.   GetIntVec($1B, Int1BSave)
  71. END.
  72. (* ------------------------------------------------------ *)
  73. (*                   Ende von TSR.PAS                     *)
  74.