home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1635 / mdebug1.exe / CHECKMD.A86 < prev    next >
Encoding:
Text File  |  1993-09-19  |  3.4 KB  |  132 lines

  1. ; ----------------------------
  2. ; CheckMD
  3. ;
  4. ; Funktion:        Testen, ob MDEBUG installiert ist (für TP 4+)
  5. ;
  6. ; Autor:           Bernd Schemmer
  7. ;                  Bäckerweg 48
  8. ;                  60316 Frankfurt
  9. ;                  Tel.: (069) 4 97 04 84
  10. ;
  11. ; System:          IBM-PC/AT/Kompatibler
  12. ; Hardware:        -
  13. ; Betriebs-System: DOS 3.xx
  14. ; Sprache:         Assembler
  15. ; Compiler:        A86
  16. ;
  17. ; Letzter Update:  12.11.1992
  18. ;
  19. ; Pascal-Deklaration:  {$F+} FUNCTION CheckMD:BYTE; EXTERNAL; {$F-}
  20. ;
  21. ;
  22. ; Ausgabe:         -1 - MDEBUG nicht installiert
  23. ;                   0 - MDEBUG ohne Userint installiert
  24. ;               sonst - Nummer des Userints
  25. ;
  26. ; Übersetzen: A86  CHECKMD.A86 to CHECKMD.OBJ
  27. ;
  28. ; ----------------------------
  29.  
  30.  
  31. PUBLIC CheckMD
  32.  
  33. CODE SEGMENT BYTE PUBLIC
  34.      ASSUME CS:CODE
  35.  
  36. ; ----------------------------
  37.  
  38. v3       db 'MDEBUG  '        ; Kennung im MCB vom MDEBUG
  39. v3_LENGTH EQU $ - Offset v3
  40.  
  41. v5       db 'USERINT'         ; Kennung vor der Einsprung-Adresse des Userints
  42. v6       dw 0                 ; UMB-Link-Status
  43.  
  44. CheckMD PROC FAR
  45.          push si,ds,di,es
  46.  
  47.          mov ax,05802h        ; UMB-Link-Status ermitteln
  48.          int 021h
  49.          xor ah,ah
  50.          mov cs:v6,ax         ; UMB-Link-Status sichern
  51.  
  52.          mov ax,05803h        ; UMB-Link-Status setzen
  53.          mov bx,01h
  54.          int 021h
  55.  
  56.          mov ah,052h          ; Adresse des DOS-Info-Blocks ermitteln
  57.          int 021h
  58.  
  59.          mov es,es:[bx-2]
  60.          xor bx,bx            ; ES:BX -> 1. MCB
  61.  
  62.          mov ds,cs            ; DS = CS
  63.  
  64. Test_Mcbs:
  65.          mov di,bx
  66.          add di,8             ; ES:DI -> 'Namen-Feld' im MCB
  67.          mov si,offset v3
  68.          mov cx,3
  69.  
  70. cmcb1:
  71.          repe cmpsw           ; Kennung vorhanden ?
  72.          jne cmcb2
  73.          cmp byte ptr es:[di],0
  74.          je cmcb10            ; Name gefunden
  75.          cmp word ptr es:[di],02020h
  76.          je cmcb10            ; Name gefunden
  77.  
  78. cmcb2:
  79.          cmp byte ptr es:[bx],'Z'
  80.                   ; 'Z' -> letzter MCB
  81.          mov al,0FFh
  82.          je cmcbende          ; MDEBUG nicht gefunden
  83.  
  84.          mov ax,es            ; Nächsten MCB ermitteln
  85.          add ax,es:[bx+3]
  86.          inc ax
  87.          mov es,ax
  88.          xor bx,bx
  89.          jmp Test_MCBs
  90.  
  91. cmcb10:
  92.                               ; Eintrag gefunden, Userint suchen
  93.          mov dx,es
  94.          inc dx               ; DX = PSP von MDEBUG
  95.          mov al,05Fh          ; erster möglicher Interrupt ist der Int 60h
  96.          mov cx,8xD           ; 8 mögliche Interrupts
  97.          mov ah,035h          ; Funktion: Ermittle Int-Adresse
  98.          mov si,offset v5     ; SI -> Kennstring für den Userint
  99.  
  100. cmcb11:
  101.          push es
  102.          inc al               ; Interrupt-Nummer korrigieren
  103.          int 021h
  104.          mov di,bx
  105.  
  106.          push cx,si
  107.          mov cx,7xD
  108.          sub di,7xD           ; USERINT-Kennung vorhanden ?
  109.          repe cmpsb
  110.          pop si,cx
  111.          pop es
  112.          loopne cmcb11
  113.          je cmcbEnde          ; AL = Nummer des Userints
  114.  
  115.          mov al,0             ; MDEBUG noch nicht installiert oder kein Userint
  116.  
  117. cmcbende:
  118.  
  119.          push ax              ; Returncode sichern
  120.          mov ax,05803h
  121.          mov bx,cs:v6         ; UMB-Link-Status restaurieren
  122.          int 021h
  123.          pop ax               ; AX = Returncode
  124.  
  125.          pop es,di,ds,si
  126.          retf
  127.  
  128.          CODE ENDS
  129.  
  130. ; ----------------------------
  131.  
  132.