home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / ldm / txtsr.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-10-05  |  4.5 KB  |  195 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       TXTSR.PAS                        *)
  3. (*                  (c) 1990 TOOLBOX                      *)
  4. (* ------------------------------------------------------ *)
  5. UNIT txTSR;
  6. {$R-,S-,I-,V-,B-,N-,D-}
  7.  
  8. INTERFACE
  9.  
  10. USES Dos, Crt;
  11.  
  12.   PROCEDURE SaveInt16;
  13.  
  14.   PROCEDURE Int16;
  15.  
  16.   FUNCTION  AlreadyLoaded(ID : BYTE) : BOOLEAN;
  17.  
  18.   FUNCTION  Segment(ID : BYTE) : WORD;
  19.  
  20.   (* --- Änderung -- 11'90 ------------------------------ *)
  21.   FUNCTION  PopUpInstalled(PopUp     : POINTER;
  22.                            HotKey,
  23.                            HeapParas : WORD;
  24.                            PopUpNr   : BYTE) : BOOLEAN;
  25.   (* ---------------------------------------------------- *)
  26.  
  27.   PROCEDURE MakeResident(ID : BYTE);
  28.  
  29.   PROCEDURE ReleaseBlock(Segment : WORD);
  30.  
  31.   PROCEDURE RemoveTSR;
  32.  
  33.  
  34. IMPLEMENTATION
  35.  
  36. VAR
  37.   SaveSP,
  38.   SaveSS,
  39.   PopUpSS,
  40.   PopUpSP,
  41.  
  42.   (* --- Änderung -- 11'90 ------------------------------ *)
  43.   HotKey_1,                   (* Definition von 5 HotKeys *)
  44.   HotKey_2,
  45.   HotKey_3,
  46.   HotKey_4,
  47.   HotKey_5   : WORD;
  48.   PopUp_1,
  49.   PopUp_2,
  50.   PopUp_3,
  51.   PopUp_4,
  52.   PopUp_5,
  53.   (* ---------------------------------------------------- *)
  54.  
  55.   TempInt16,
  56.   SaveInt1B  : POINTER;
  57.   InUse      : BOOLEAN;
  58.   ProgramID  : BYTE;
  59.  
  60.   (* --- Änderung -- 11'90 ------------------------------ *)
  61.   SaveHotKey : WORD;
  62.  
  63. {$L TXTSR.OBJ}
  64.  
  65.   PROCEDURE SaveInt16;  EXTERNAL;
  66.   PROCEDURE Int16;      EXTERNAL;
  67.  
  68.   FUNCTION  AlreadyLoaded(ID : BYTE) : BOOLEAN;
  69.   VAR
  70.     Regs   : Registers;
  71.     IDMask : LONGINT;
  72.   BEGIN
  73.     Regs.ah := $f0;
  74.     Regs.bx := 0;
  75.     Regs.cx := 0;
  76.     Intr($16, Regs);
  77.     IDmask := LONGINT(Regs.cx) SHL 16 + Regs.bx;
  78.     AlreadyLoaded := IDMask AND
  79.                      (LONGINT(1) SHL PRED(ID)) <> 0;
  80.   END;
  81.  
  82.   FUNCTION Segment(ID : BYTE) : WORD;
  83.   VAR
  84.     Regs : Registers;
  85.   BEGIN
  86.     Regs.ah := $F1;
  87.     Regs.al := ID;
  88.     Regs.bx := 0;
  89.     Intr($16, Regs);
  90.     Segment := Regs.bx;
  91.   END;
  92.  
  93.   (* --- Änderung -- 11'90 ------------------------------ *)
  94.   FUNCTION PopUpInstalled(PopUp     : POINTER;
  95.                           HotKey,
  96.                           HeapParas : WORD;
  97.                           PopUpNr   : BYTE) : BOOLEAN;
  98.   CONST
  99.     Reserved = $1000;
  100.   VAR
  101.     MaxParas : WORD;
  102.     NextFree : ^WORD;
  103.  
  104.     FUNCTION ParasNeeded : WORD;
  105.     VAR
  106.       EnvironSeg,
  107.       EnvironSize : WORD;
  108.     BEGIN
  109.       EnvironSeg  := WORD(Ptr(PrefixSeg, $002C)^);
  110.       EnvironSize := WORD(Ptr(Environseg-1, $0003)^);
  111.       ParasNeeded := Succ(Seg(HeapOrg^) -
  112.                           PrefixSeg + EnvironSize);
  113.     END;
  114.  
  115.   BEGIN
  116.     PopUpInstalled := FALSE;
  117.     MaxParas := WORD(Ptr(PrefixSeg -1, $0003)^);
  118.     NextFree := Ptr(PrefixSeg, $0002);
  119.     IF ParasNeeded + HeapParas + Reserved > MaxParas THEN
  120.       Exit;
  121.     FreePtr   := Ptr(Seg(HeapOrg^) + HeapParas - $100, 0);
  122.     NextFree^ := Seg(HeapOrg^) + HeapParas;
  123.     Release(HeapOrg);
  124.  
  125.     (* --- Änderung -- 11'90 ---------------------------- *)
  126.     CASE PopUpNr OF
  127.       1 : BEGIN
  128.             PopUp_1  := PopUp;
  129.             HotKey_1 := HotKey;
  130.           END;
  131.       2 : BEGIN
  132.             PopUp_2  := PopUp;
  133.             HotKey_2 := HotKey;
  134.           END;
  135.       3 : BEGIN
  136.             PopUp_3  := PopUp;
  137.             HotKey_3 := HotKey;
  138.           END;
  139.       4 : BEGIN
  140.             PopUp_4  := PopUp;
  141.             HotKey_4 := HotKey;
  142.           END;
  143.       5 : BEGIN
  144.             PopUp_5  := PopUp;
  145.             HotKey_5 := HotKey;
  146.           END;
  147.     END;
  148.     PopUpInstalled := TRUE;
  149.   END;
  150.  
  151.   PROCEDURE MakeResident(ID : BYTE);
  152.   VAR
  153.     SavePtr : ^POINTER;
  154.   BEGIN
  155.     ProgramID := ID;
  156.     SavePtr   := @SaveInt16;
  157.     SetIntVec($00, SaveInt00);
  158.     SetIntVec($1B, SaveInt1B);
  159.     SetIntVec($23, SaveInt23);
  160.     SetIntVec($24, SaveInt24);
  161.     GetIntVec($16, SavePtr^);
  162.     SetIntVec($16, @Int16);
  163.     InUse := FALSE;
  164.     Keep(0);
  165.   END;
  166.  
  167.   PROCEDURE ReleaseBlock(Segment : WORD);
  168.   VAR
  169.     Regs : Registers;
  170.   BEGIN
  171.     Regs.es := Segment;
  172.     Regs.ah := $49;
  173.     MsDos(Regs);
  174.   END;
  175.  
  176.   PROCEDURE RemoveTSR;
  177.   VAR
  178.     p : ^POINTER;
  179.   BEGIN
  180.     p := @SaveInt16;
  181.     TempInt16 := p^;
  182.     IF MemW[PrefixSeg:$2C] <> 0 THEN
  183.       ReleaseBlock(MemW[PrefixSeg:$2C]);
  184.     ReleaseBlock(PrefixSeg);
  185.   END;
  186.  
  187. BEGIN
  188.    PopUpSS := SSeg;
  189.    PopUpSP := SPtr + 4;
  190.    GetIntVec($1B, SaveInt1B);
  191. END.
  192. (* ------------------------------------------------------ *)
  193. (*                   Ende von TXTSR.PAS                   *)
  194.  
  195.