home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / DVIFACE.ZIP / DVIFACE.ASM
Encoding:
Assembly Source File  |  1987-12-31  |  5.1 KB  |  140 lines

  1.                       NAME    DVINT
  2.                       TITLE   DESQview Interfaces
  3.                       PAGE    66,132
  4.  
  5. DVINT_SEG SEGMENT 'CODE'
  6.                       ASSUME  CS:DVINT_SEG
  7.  
  8.                       PUBLIC  DV_GET_VERSION
  9.                       PUBLIC  DV_PAUSE
  10.                       PUBLIC  DV_BEGIN_CRITICAL
  11.                       PUBLIC  DV_END_CRITICAL
  12.                       PUBLIC  DV_GET_VIDEO_BUFFER
  13.  
  14. IN_DV                 DB 1
  15.  
  16. GET_VERSION PROC
  17.                       PUSH    BX
  18.                       PUSH    CX
  19.                       PUSH    DX
  20.                       MOV     AX,2B01H       ; DV get version
  21.                                              ; request
  22.                       MOV     CX,'DE'
  23.                       MOV     DX,'SQ'
  24.                       INT     21H
  25.                       CMP     AL,0FFH             ; Are we in DV?
  26.                       JE NO_DV                    ; Jump if not
  27.                       MOV     AX,BX               ; We are; put
  28.                                                   ; the version
  29.                                                   ; number in AX
  30.                       MOV     CS:IN_DV,1          ; Set the local
  31. IN_DV flag
  32.                       JMP     SHORT DVGV_EXIT
  33. NO_DV:                SUB     AX,AX               ; Clear AX
  34.                       MOV     CS:IN_DV,AL         ; And the local
  35.                                                   ; flag
  36. DVGV_EXIT:
  37.                       POP     DX
  38.                       POP     CX
  39.                       POP     BX
  40.                       RET
  41. GET_VERSION ENDP
  42.  
  43. ; DV_GET_VERSION returns the DV version number in AX, or 0 if not
  44. ;in DV.  This should be called before any other DV functions.
  45.  
  46. DV_GET_VERSION PROC FAR
  47.                       CALL    GET_VERSION
  48.                       RET
  49. DV_GET_VERSION ENDP
  50.  
  51. ; API_CALL is a local routine that goes on stack, does whatever
  52. ;call is passed it in BX, and then goes off stack
  53. API_CALL PROC
  54.                       PUSH    AX
  55.                       MOV     AX,101AH
  56.                       INT     15H            ; OSTACK
  57.                       MOV     AX,BX
  58.                       INT     15H            ; Parameter
  59.                       MOV     AX,1025H
  60.                       INT     15H            ; USTACK
  61.                       POP     AX
  62.                       RET
  63. API_CALL ENDP
  64.  
  65. ; DV_PAUSE gives up the rest of its time slice when called.
  66. DV_PAUSE PROC FAR
  67.                       CMP     CS:IN_DV,1          ; Are we in DV?
  68.                       JNE     DVP_END             ; Jump if not
  69.                       PUSH    BX
  70.                       MOV     BX,1000H       ; PAUSE function
  71.                                              ; call
  72.                       CALL    API_CALL
  73.                       POP     BX
  74. DVP_END:
  75.                       RET
  76. DV_PAUSE ENDP
  77.  
  78. ; Begins a critical region.  This is a section of code which DV
  79. ;will not slice out of.  It MUST be ended with a DV_END_CRITICAL
  80. ;call.
  81. DV_BEGIN_CRITICAL PROC FAR
  82.                       CMP     CS:IN_DV,1     ; Are we in DV?
  83.                       JNE     DVBC_END       ; Jump if not
  84.                       PUSH    BX
  85.                       MOV     BX,101BH       ; BEGINC
  86.                       CALL    API_CALL
  87.                       POP     BX
  88. DVBC_END:
  89.                       RET
  90. DV_BEGIN_CRITICAL ENDP
  91.  
  92.  
  93. ; Ends a critical region.
  94. DV_END_CRITICAL PROC FAR
  95.                       CMP     CS:IN_DV,1     ; Are we in DV?
  96.                       JNE     DVEC_END       ; Jump if not
  97.                       PUSH    BX
  98.                       MOV     BX,101CH       ; ENDC
  99.                       CALL    API_CALL
  100.                       POP     BX
  101. DVEC_END:
  102.                       RET
  103. DV_END_CRITICAL ENDP
  104.  
  105. ; Passed on the stack the video buffer address to use outside of
  106. ; DV. Returns the video buffer address to use instead.
  107. ; If what it returns is different, then video synching is not
  108. ; necessary. Also, this call does a DV_GET_VERSION call itself,
  109. ; so if you get the video buffer, it is not required that you get
  110. ; the version.
  111. DV_GET_VIDEO_BUFFER PROC FAR
  112.                       PUSH    BP
  113.                       MOV     BP,SP
  114.                       PUSH    BX
  115.                       PUSH    DI
  116.                       PUSH    ES
  117.                       MOV     ES,[BP+6]      ; Put the starting
  118.                                              ; segment in ES
  119.                       CALL    GET_VERSION
  120.                       TEST    AX,AX          ; Are we in
  121.                                              ; DESQview?
  122.                       JZ DVGVB_END           ; Jump if not
  123.                       SUB     DI,DI          ; Clear DI
  124.                       MOV     AH,0FEH        ; Get video buffer
  125.                                              ; function call
  126.                       INT     10H
  127. DVGVB_END:
  128.                       MOV     AX,ES
  129.                       POP     ES
  130.                       POP     DI
  131.                       POP     BX
  132.                       POP     BP
  133.                       RET     2
  134. DV_GET_VIDEO_BUFFER ENDP
  135.  
  136. DVINT_SEG ENDS
  137.  
  138.                       END
  139.  
  140.