home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TXTSR.PAS *)
- (* (c) 1990 TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT txTSR;
- {$R-,S-,I-,V-,B-,N-,D-}
-
- INTERFACE
-
- USES Dos, Crt;
-
- PROCEDURE SaveInt16;
-
- PROCEDURE Int16;
-
- FUNCTION AlreadyLoaded(ID : BYTE) : BOOLEAN;
-
- FUNCTION Segment(ID : BYTE) : WORD;
-
- (* --- Änderung -- 11'90 ------------------------------ *)
- FUNCTION PopUpInstalled(PopUp : POINTER;
- HotKey,
- HeapParas : WORD;
- PopUpNr : BYTE) : BOOLEAN;
- (* ---------------------------------------------------- *)
-
- PROCEDURE MakeResident(ID : BYTE);
-
- PROCEDURE ReleaseBlock(Segment : WORD);
-
- PROCEDURE RemoveTSR;
-
-
- IMPLEMENTATION
-
- VAR
- SaveSP,
- SaveSS,
- PopUpSS,
- PopUpSP,
-
- (* --- Änderung -- 11'90 ------------------------------ *)
- HotKey_1, (* Definition von 5 HotKeys *)
- HotKey_2,
- HotKey_3,
- HotKey_4,
- HotKey_5 : WORD;
- PopUp_1,
- PopUp_2,
- PopUp_3,
- PopUp_4,
- PopUp_5,
- (* ---------------------------------------------------- *)
-
- TempInt16,
- SaveInt1B : POINTER;
- InUse : BOOLEAN;
- ProgramID : BYTE;
-
- (* --- Änderung -- 11'90 ------------------------------ *)
- SaveHotKey : WORD;
-
- {$L TXTSR.OBJ}
-
- PROCEDURE SaveInt16; EXTERNAL;
- PROCEDURE Int16; EXTERNAL;
-
- FUNCTION AlreadyLoaded(ID : BYTE) : BOOLEAN;
- VAR
- Regs : Registers;
- IDMask : LONGINT;
- BEGIN
- Regs.ah := $f0;
- Regs.bx := 0;
- Regs.cx := 0;
- Intr($16, Regs);
- IDmask := LONGINT(Regs.cx) SHL 16 + Regs.bx;
- AlreadyLoaded := IDMask AND
- (LONGINT(1) SHL PRED(ID)) <> 0;
- END;
-
- FUNCTION Segment(ID : BYTE) : WORD;
- VAR
- Regs : Registers;
- BEGIN
- Regs.ah := $F1;
- Regs.al := ID;
- Regs.bx := 0;
- Intr($16, Regs);
- Segment := Regs.bx;
- END;
-
- (* --- Änderung -- 11'90 ------------------------------ *)
- FUNCTION PopUpInstalled(PopUp : POINTER;
- HotKey,
- HeapParas : WORD;
- PopUpNr : BYTE) : BOOLEAN;
- CONST
- Reserved = $1000;
- VAR
- MaxParas : WORD;
- NextFree : ^WORD;
-
- FUNCTION ParasNeeded : WORD;
- VAR
- EnvironSeg,
- EnvironSize : WORD;
- BEGIN
- EnvironSeg := WORD(Ptr(PrefixSeg, $002C)^);
- EnvironSize := WORD(Ptr(Environseg-1, $0003)^);
- ParasNeeded := Succ(Seg(HeapOrg^) -
- PrefixSeg + EnvironSize);
- END;
-
- BEGIN
- PopUpInstalled := FALSE;
- MaxParas := WORD(Ptr(PrefixSeg -1, $0003)^);
- NextFree := Ptr(PrefixSeg, $0002);
- IF ParasNeeded + HeapParas + Reserved > MaxParas THEN
- Exit;
- FreePtr := Ptr(Seg(HeapOrg^) + HeapParas - $100, 0);
- NextFree^ := Seg(HeapOrg^) + HeapParas;
- Release(HeapOrg);
-
- (* --- Änderung -- 11'90 ---------------------------- *)
- CASE PopUpNr OF
- 1 : BEGIN
- PopUp_1 := PopUp;
- HotKey_1 := HotKey;
- END;
- 2 : BEGIN
- PopUp_2 := PopUp;
- HotKey_2 := HotKey;
- END;
- 3 : BEGIN
- PopUp_3 := PopUp;
- HotKey_3 := HotKey;
- END;
- 4 : BEGIN
- PopUp_4 := PopUp;
- HotKey_4 := HotKey;
- END;
- 5 : BEGIN
- PopUp_5 := PopUp;
- HotKey_5 := HotKey;
- END;
- END;
- PopUpInstalled := TRUE;
- END;
-
- PROCEDURE MakeResident(ID : BYTE);
- VAR
- SavePtr : ^POINTER;
- BEGIN
- ProgramID := ID;
- SavePtr := @SaveInt16;
- SetIntVec($00, SaveInt00);
- SetIntVec($1B, SaveInt1B);
- SetIntVec($23, SaveInt23);
- SetIntVec($24, SaveInt24);
- GetIntVec($16, SavePtr^);
- SetIntVec($16, @Int16);
- InUse := FALSE;
- Keep(0);
- END;
-
- PROCEDURE ReleaseBlock(Segment : WORD);
- VAR
- Regs : Registers;
- BEGIN
- Regs.es := Segment;
- Regs.ah := $49;
- MsDos(Regs);
- END;
-
- PROCEDURE RemoveTSR;
- VAR
- p : ^POINTER;
- BEGIN
- p := @SaveInt16;
- TempInt16 := p^;
- IF MemW[PrefixSeg:$2C] <> 0 THEN
- ReleaseBlock(MemW[PrefixSeg:$2C]);
- ReleaseBlock(PrefixSeg);
- END;
-
- BEGIN
- PopUpSS := SSeg;
- PopUpSP := SPtr + 4;
- GetIntVec($1B, SaveInt1B);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von TXTSR.PAS *)
-
-