Von den genannten Routinen sollte das Hochsprachen-Programm zunächst die Routine TsrIsInst aufrufen, denn mit ihrer Hilfe läßt sich feststellen, ob bereits eine Kopie des Programms als TSR-Programm im Speicher verankert wurde. Die Routine bedient sich dabei einer Funktion des DOS-Multiplexer-Interrupts 2Fh (MUX). Der Interrupt-Handler für den Interrupt 2Fh reagiert jedoch nur auf eine ganz bestimmte Funktion, deren Funktionsnummer beim Aufruf von TsrIsInst festgelegt wird. Wird dieser Interrupt mit einer anderen Funktionsnummer aufgerufen, leitet das TSR-Programm diesen Aufruf einfach an den alten Handler weiter. Der neue MUX-Interrupt-Handler unterstützt zwei Unterfunktionen mit den Nummern AAh und BBh. Erstere hilft beim Auffinden einer bereits installierten Kopie.
Wie bei MUX-Funktionen üblich, vertauscht sie bei ihrem Aufruf dazu einfach die Funktions- und Unterfunktionsnummern im Registerpaar AH/AL. Ist das TSR-Programm nicht installiert, unterbleibt dieser Tausch, da sich keiner der bisherigen MUX-Handler für diese Funktion verantwortlich fühlt und den Inhalt des AX-Registers deshalb unverändert zurückgibt.
Ist das Programm bereits installiert, wird innerhalb von TsrIsInst dann auch gleich die zweite MUX-Funktion aufgerufen, die die Segmentadresse des TSR-Programms im Speicher zurückliefert. Dieser Wert wird, wie alle anderen Variablen des Assembler-Moduls, im Codesegment des Moduls untergebracht. Dies bietet die Gewähr, daß diese Variablen auch innerhalb der Interrupt-Handler angesprochen werden können, wenn das Datensegment des Programms nicht erreichbar ist.
|