home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------
- ; CheckMD
- ;
- ; Funktion: Testen, ob MDEBUG installiert ist (für TP 4+)
- ;
- ; Autor: Bernd Schemmer
- ; Bäckerweg 48
- ; 60316 Frankfurt
- ; Tel.: (069) 4 97 04 84
- ;
- ; System: IBM-PC/AT/Kompatibler
- ; Hardware: -
- ; Betriebs-System: DOS 3.xx
- ; Sprache: Assembler
- ; Compiler: A86
- ;
- ; Letzter Update: 12.11.1992
- ;
- ; Pascal-Deklaration: {$F+} FUNCTION CheckMD:BYTE; EXTERNAL; {$F-}
- ;
- ;
- ; Ausgabe: -1 - MDEBUG nicht installiert
- ; 0 - MDEBUG ohne Userint installiert
- ; sonst - Nummer des Userints
- ;
- ; Übersetzen: A86 CHECKMD.A86 to CHECKMD.OBJ
- ;
- ; ----------------------------
-
-
- PUBLIC CheckMD
-
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS:CODE
-
- ; ----------------------------
-
- v3 db 'MDEBUG ' ; Kennung im MCB vom MDEBUG
- v3_LENGTH EQU $ - Offset v3
-
- v5 db 'USERINT' ; Kennung vor der Einsprung-Adresse des Userints
- v6 dw 0 ; UMB-Link-Status
-
- CheckMD PROC FAR
- push si,ds,di,es
-
- mov ax,05802h ; UMB-Link-Status ermitteln
- int 021h
- xor ah,ah
- mov cs:v6,ax ; UMB-Link-Status sichern
-
- mov ax,05803h ; UMB-Link-Status setzen
- mov bx,01h
- int 021h
-
- mov ah,052h ; Adresse des DOS-Info-Blocks ermitteln
- int 021h
-
- mov es,es:[bx-2]
- xor bx,bx ; ES:BX -> 1. MCB
-
- mov ds,cs ; DS = CS
-
- Test_Mcbs:
- mov di,bx
- add di,8 ; ES:DI -> 'Namen-Feld' im MCB
- mov si,offset v3
- mov cx,3
-
- cmcb1:
- repe cmpsw ; Kennung vorhanden ?
- jne cmcb2
- cmp byte ptr es:[di],0
- je cmcb10 ; Name gefunden
- cmp word ptr es:[di],02020h
- je cmcb10 ; Name gefunden
-
- cmcb2:
- cmp byte ptr es:[bx],'Z'
- ; 'Z' -> letzter MCB
- mov al,0FFh
- je cmcbende ; MDEBUG nicht gefunden
-
- mov ax,es ; Nächsten MCB ermitteln
- add ax,es:[bx+3]
- inc ax
- mov es,ax
- xor bx,bx
- jmp Test_MCBs
-
- cmcb10:
- ; Eintrag gefunden, Userint suchen
- mov dx,es
- inc dx ; DX = PSP von MDEBUG
- mov al,05Fh ; erster möglicher Interrupt ist der Int 60h
- mov cx,8xD ; 8 mögliche Interrupts
- mov ah,035h ; Funktion: Ermittle Int-Adresse
- mov si,offset v5 ; SI -> Kennstring für den Userint
-
- cmcb11:
- push es
- inc al ; Interrupt-Nummer korrigieren
- int 021h
- mov di,bx
-
- push cx,si
- mov cx,7xD
- sub di,7xD ; USERINT-Kennung vorhanden ?
- repe cmpsb
- pop si,cx
- pop es
- loopne cmcb11
- je cmcbEnde ; AL = Nummer des Userints
-
- mov al,0 ; MDEBUG noch nicht installiert oder kein Userint
-
- cmcbende:
-
- push ax ; Returncode sichern
- mov ax,05803h
- mov bx,cs:v6 ; UMB-Link-Status restaurieren
- int 021h
- pop ax ; AX = Returncode
-
- pop es,di,ds,si
- retf
-
- CODE ENDS
-
- ; ----------------------------
-
-