home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / windows / baswind8.zip / MOUSE.ASM < prev    next >
Assembly Source File  |  1990-09-14  |  23KB  |  714 lines

  1. ;
  2. ;TITLE: MOUSE.ASM    SEPT 1, 1990
  3.  
  4. Mouse          EQU      33H
  5. Cursor_on      EQU      0001
  6. Cursor_off     EQU      0002
  7. False          EQU      0
  8. True           EQU      NOT False
  9. Pressed        EQU      True
  10. Not_pressed    EQU      False
  11.  
  12. Basic_setup    MACRO
  13.                PUSH     BP
  14.                MOV      BP,SP
  15.  
  16.                PUSH     AX
  17.                PUSH     BX
  18.                PUSH     CX
  19.                PUSH     DX
  20.  
  21.                PUSH     SI
  22.                PUSH     DI
  23.                PUSH     DS
  24.                PUSH     ES
  25.                ENDM
  26.  
  27. Basic_cleanup  MACRO
  28.                CLD
  29.                POP      ES
  30.                POP      DS
  31.                POP      DI
  32.                POP      SI
  33.                POP      DX
  34.                POP      CX
  35.                POP      BX
  36.                POP      AX
  37.                POP      BP
  38.                ENDM
  39.  
  40. ;
  41. ;CODE          SEGMENT BYTE PUBLIC 'CODE'
  42. ;              ASSUME CS:CODE
  43.  
  44.                 Dosseg                          ;requires masm 5.0 or higher
  45.                .Model Medium
  46.  
  47. ;       Define all publicly accessible routines.
  48.                PUBLIC   Mmcheck
  49.                PUBLIC   Mmcursoron
  50.                PUBLIC   Mmcursoroff
  51.                PUBLIC   Mmclick
  52.                PUBLIC   Mmbuttonpress
  53.                PUBLIC   Mmbuttonrelease
  54.                PUBLIC   Mmbutton
  55.                PUBLIC   Mmgetloc
  56.                PUBLIC   Mmgetlocinfo
  57.                PUBLIC   Mmsetloc
  58.                PUBLIC   Mmsetrange
  59.  
  60.                .Code
  61.  
  62. ;
  63. ;
  64. ;******************************************************************************
  65. ;*      THIS CALL MUST BE MADE BEFORE ANY OTHER MOUSE CALLS WILL FUNCTION     *
  66. ;******************************************************************************
  67. ;
  68. ; BASIC: CALL MMCHECK(MOUSE%)
  69. ;
  70. ; FUNCTION=0
  71. ;
  72. ;          CHECK FOR AN INSTALLED MOUSE, RESET THE MOUSE, INITIALIZE ALL MOTION
  73. ;          COUNTERS AND SET MOUSE TO CENTER POSITION.
  74. ;
  75. ;        ENTRY PARAMETERS:
  76. ;                         AH=0    (INITIALIZE/RESET MOUSE)
  77. ;
  78. ;        EXIT PARAMETERS :
  79. ;
  80. ;                         AX = 0  IF NO MOUSE INSTALLED
  81. ;                         BX = NUMBER OF BUTTONS ON THE MOUSE
  82. ;
  83. ;
  84. Mmcheck        PROC     FAR
  85.  
  86.                Basic_setup
  87.  
  88.                XOR      AX,AX                   ;point to memory segment 0
  89.                MOV      ES,AX
  90.  
  91.                XOR      BX,BX
  92.  
  93.                MOV      SI,Mouse*4H             ;calculate mouse interrupt offset
  94.  
  95.                CMP      AX,ES:[SI+2]            ;has a mouse handler been installed
  96.                JNZ      _mouse_initialize
  97.  
  98.                CMP      AX,ES:[SI]
  99.                JZ       _mouse_not_found        ;segment:offset was all zeros (no mouse driver)
  100.  
  101. _MOUSE_INITIALIZE:
  102.                INT      Mouse
  103.  
  104.                OR       AX,AX                   ;was a mouse found?
  105.                JNZ      _mouse_found            ;yes!
  106.  
  107. _MOUSE_NOT_FOUND:
  108.                MOV      BX,0                    ;indicate mouse not found
  109. _MOUSE_FOUND:
  110.                MOV      SI,[BP+6]               ;return the number of mouse buttons
  111.                MOV      [SI],BX
  112.  
  113.                MOV      CS:_mouse,BX            ;save the number of mouse buttons found
  114.  
  115.                Basic_cleanup
  116.  
  117. MMCHECK_EXIT:
  118.                RET      2D
  119.  
  120. Mmcheck        ENDP
  121.  
  122. ;
  123. ;
  124. ;
  125. ; BASIC: CALL MMCURSORON
  126. ;
  127. ; FUNCTION=1
  128. ;
  129. ;        IF THE CURSOR IS OFF,THE CURSOR WILL STILL FOLLOW THE MOUSES
  130. ;        MOVEMENTS, BUT THE CURSOR WILL NOT BE SEEN UNTIL TURNED ON.
  131. ;
  132. ;        ENTRY PARAMETERS:
  133. ;
  134. ;                         AH=1    (TURN MOUSE CURSOR ON)
  135. ;
  136. ;        EXIT PARAMETERS :
  137. ;
  138. ;
  139. Mmcursoron     PROC     FAR
  140.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  141.                JZ       Mmcursoron_exit         ;no
  142.  
  143.                Basic_setup
  144.  
  145.                MOV      AX,Cursor_on
  146.                MOV      AX,0001H
  147.                INT      Mouse
  148.  
  149.                Basic_cleanup
  150.  
  151. MMCURSORON_EXIT:
  152.                RET
  153.  
  154. Mmcursoron     ENDP
  155.  
  156. ;
  157. ;
  158. ; BASIC: CALL MMCURSOROFF
  159. ;
  160. ; FUNCTION=2
  161. ;
  162. ;        HIDE THE DISPLAY CURSOR. THE CURSOR WILL STILL FOLLOW THE MOUSES
  163. ;        MOVEMENTS, BUT THE CURSOR WILL NOT BE SEEN.
  164. ;
  165. ;        ENTRY PARAMETERS:
  166. ;
  167. ;                         AH=2    (TURN MOUSE CURSOR OFF)
  168. ;
  169. ;        EXIT PARAMETERS :
  170. ;
  171. ;
  172. ;
  173. Mmcursoroff    PROC     FAR
  174.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  175.                JZ       Mmcursoroff_exit        ;no
  176.  
  177.                Basic_setup
  178.  
  179.                MOV      AX,Cursor_off
  180.                MOV      AX,0002H
  181.                INT      Mouse
  182.  
  183.                Basic_cleanup
  184.  
  185. MMCURSOROFF_EXIT:
  186.                RET
  187.  
  188. Mmcursoroff    ENDP
  189.  
  190.  
  191. ;
  192. ;
  193. ; BASIC: CALL MMGETLOC(COL%,ROW%)
  194. ;
  195. ; FUNCTION=3
  196. ;
  197. ;        ENTRY PARAMETERS:
  198. ;
  199. ;                         AH=3    (GET CURRENT MOUSE CURSOR LOCATION)
  200. ;
  201. ;        EXIT PARAMETERS :
  202. ;
  203. ;                         BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  204. ;                         CX = X COORDINATE
  205. ;                         DX = Y COORDINATE
  206. ;
  207. ;
  208. ;        NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
  209. ;             'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
  210. ;             THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
  211. ;             VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
  212. ;             IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
  213. ;
  214. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
  215. ;             BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  216. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  217. ;             IF A BIT IS SET (1)  THEN ITS ASSOCIATED BUTTON IS CURRENTLY
  218. ;             PRESSED DOWN.
  219. ;
  220. Mmgetloc       PROC     FAR
  221.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  222.                JZ       Mmgetloc_exit           ;no
  223.  
  224.                Basic_setup
  225.  
  226.                MOV      AX,0003H
  227.                INT      Mouse
  228.  
  229.                MOV      SI,[BP+8]               ;return the 'x' co-ordinate  (column)
  230.                MOV      [SI],CX
  231.  
  232.                MOV      SI,[BP+6]               ;return the 'y' coordinate   (row)
  233.                MOV      [SI],DX
  234.  
  235.                Basic_cleanup
  236.  
  237. MMGETLOC_EXIT:
  238.                RET      4D
  239.  
  240. Mmgetloc       ENDP
  241.  
  242. ;
  243. ;
  244. ; BASIC: CALL MMGETLOCINFO(BUTTONS%,COL%,ROW%)
  245. ;
  246. ; FUNCTION=3
  247. ;
  248. ;        ENTRY PARAMETERS:
  249. ;
  250. ;                         AH=3    (GET CURRENT MOUSE CURSOR LOCATION)
  251. ;
  252. ;        EXIT PARAMETERS :
  253. ;
  254. ;                         BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  255. ;                         CX = X COORDINATE
  256. ;                         DX = Y COORDINATE
  257. ;
  258. ;
  259. ;        NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
  260. ;             'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
  261. ;             THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
  262. ;             VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
  263. ;             IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
  264. ;
  265. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
  266. ;             BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  267. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  268. ;             IF A BIT IS SET (1)  THEN ITS ASSOCIATED BUTTON IS CURRENTLY
  269. ;             PRESSED DOWN.
  270. ;
  271. ;
  272. Mmgetlocinfo   PROC     FAR
  273.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  274.                JZ       Mmgetlocinfo_exit       ;no
  275.  
  276.                Basic_setup
  277.  
  278.                MOV      AX,0003H
  279.                INT      Mouse
  280.  
  281.                MOV      SI,[BP+0AH]             ;return the buttons pressed status
  282.                MOV      [SI],BX
  283.  
  284.                MOV      SI,[BP+08H]             ;return the 'x' co-ordinate  (column)
  285.                MOV      [SI],CX
  286.  
  287.                MOV      SI,[BP+6H]              ;return the 'y' coordinate   (row)
  288.                MOV      [SI],DX
  289.  
  290.  
  291.                Basic_cleanup
  292.  
  293. MMGETLOCINFO_EXIT:
  294.                RET      6D
  295.  
  296. Mmgetlocinfo   ENDP
  297.  
  298. ;
  299. ;
  300. ;
  301. ; BASIC: CALL MMSETLOC(COL%,ROW%)
  302. ;
  303. ; FUNCTION=4
  304. ;
  305. ;        ENTRY PARAMETERS:
  306. ;
  307. ;                         AH=4    (SET CURRENT MOUSE CURSOR LOCATION)
  308. ;                         CX = X COORDINATE
  309. ;                         DX = Y COORDINATE
  310. ;
  311. ;        EXIT PARAMETERS :
  312. ;
  313. ;                         BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  314. ;                         CX = X COORDINATE
  315. ;                         DX = Y COORDINATE
  316. ;
  317. ;
  318. ;        NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
  319. ;             'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
  320. ;             THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
  321. ;             VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
  322. ;             IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
  323. ;
  324. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
  325. ;             BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  326. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  327. ;            IF A BIT IS SET (1)  THEN ITS ASSOCIATED BUTTON IS CURRENTLY
  328. ;             PRESSED DOWN.
  329. ;
  330. Mmsetloc       PROC     FAR
  331.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  332.                JZ       Mmsetloc_exit           ;no
  333.  
  334.                Basic_setup
  335.  
  336.                MOV      SI,[BP+8]               ;get the 'x' co-ordinate (column) to set
  337.                MOV      CX,[SI]
  338.  
  339.                MOV      SI,[BP+6]               ;get the 'y' co-ordinate (row) to set
  340.                MOV      DX,[SI]
  341.  
  342.                MOV      AX,0004H
  343.                INT      Mouse
  344.  
  345.                Basic_cleanup
  346.  
  347. MMSETLOC_EXIT:
  348.                RET      4D
  349.  
  350. Mmsetloc       ENDP
  351.  
  352. ;
  353. ;
  354. ; BASIC: CALL MMCLICK(LEFT.BUTTON%,RIGHT.BUTTON%)
  355. ;
  356. ; FUNCTION=5
  357. ;
  358. ;        ENTRY PARAMETERS:
  359. ;
  360. ;                         AH=5    (GET BUTTON PRESS INFO)
  361. ;                         AL=O-?  (BUTTON NUMBER TO GET INFO FOR)
  362. ;
  363. ;        EXIT PARAMETERS :
  364. ;
  365. ;                         AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  366. ;                         BX = NUMBER OF PRESSES FOR THIS BUTTON SINCE LAST CALL
  367. ;                              (0=32768)
  368. ;                         CX = X COORDINATE AT LAST PRESS TIME
  369. ;                         DX = Y COORDINATE AT LAST PRESS TIME
  370. ;
  371. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE PRESS/RELEASE STATUS FOR ALL
  372. ;             BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  373. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  374. ;             IF A BIT IS SET (1)  THENS ITS ASSOCIATED BUTTON IS CURRENTLY
  375. ;             PRESSED DOWN.
  376. ;
  377. ;              FUNCTION 5 DOES NOT DOESN'T DETECT OVERFLOW.
  378. ;
  379. ;              THE PRESS COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
  380. ;
  381. ;              THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
  382. ;             IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
  383. ;             REPRESENT THE CURSOR POSITION WHEN YOU LAST PRESSED THE BUTTON,
  384. ;             NOT THE CURSOR/S CURRENT POSITION.
  385. ;
  386. Mmclick        PROC     FAR
  387.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  388.                JZ       Mmclick_exit            ;no
  389.  
  390.                Basic_setup
  391.  
  392.                MOV      BX,0000H                ;get release info for button 1 (left)
  393.                MOV      AX,0005H
  394.                INT      Mouse
  395.  
  396.                MOV      SI,[BP+8]               ;pass back number of releases for this button
  397.                MOV      [SI],BX
  398.  
  399.                MOV      BX,0001H                ;get release info for button 2 (right)
  400.                MOV      AX,0005H
  401.                INT      Mouse
  402.  
  403.                MOV      SI,[BP+6]               ;pass back number of releases for this button
  404.                MOV      [SI],BX
  405.  
  406.                Basic_cleanup
  407.  
  408. MMCLICK_EXIT:
  409.                RET      4D
  410.  
  411. Mmclick        ENDP
  412.  
  413. ;
  414. ;
  415. ; FUNCTION=5
  416. ;
  417. ; BASIC: CALL MMButtonPress(MMButton%,_
  418. ;                           MMButton.status%,_
  419. ;                           MMButton.presses%,_
  420. ;                           MMPress.xord%,_
  421. ;                           MMPress.yord%)
  422. ;        ENTRY PARAMETERS:
  423. ;
  424. ;                         AH=5    (GET BUTTON PRESS INFO)
  425. ;                         AL=O-?  (BUTTON NUMBER TO GET INFO FOR)
  426. ;
  427. ;        EXIT PARAMETERS :
  428. ;
  429. ;                         AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  430. ;                         BX = NUMBER OF PRESSES FOR THIS BUTTON SINCE LAST
  431. ;                              CALL (0-65535)
  432. ;                         CX = X COORDINATE AT LAST PRESS TIME
  433. ;                         DX = Y COORDINATE AT LAST PRESS TIME
  434. ;
  435. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE CURRENT PRESSED/RELEASED
  436. ;             STATUS FOR ALL BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO
  437. ;             ONE BUTTON: (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  438. ;              IF A BIT IS SET (1)  THENS ITS ASSOCIATED BUTTON IS CURRENTLY
  439. ;             PRESSED DOWN.
  440. ;
  441. ;              FUNCTION 5 DOES NOT DOESN'T DETECT OVERFLOW.
  442. ;
  443. ;              THE PRESS COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
  444. ;
  445. ;              THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
  446. ;             IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
  447. ;             REPRESENT THE CURSOR POSITION WHEN YOU LAST PRESSED THE BUTTON,
  448. ;             NOT THE CURSOR'S CURRENT POSITION.
  449. ;
  450. Mmbuttonpress  PROC     FAR
  451.                Basic_setup
  452.  
  453.                XOR      AX,AX                   ;setup in case mouse not installed
  454.                XOR      BX,BX
  455.                XOR      CX,CX
  456.                XOR      DX,DX
  457.  
  458.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  459.                JZ       Mmbuttonpress_exit      ;no
  460.  
  461.                MOV      SI,[BP+0EH]             ;get the mouse button that you want checked
  462.                MOV      BX,[SI]
  463.  
  464.                MOV      AX,0005H
  465.                INT      Mouse
  466.  
  467. MMBUTTONPRESS_EXIT:
  468.                MOV      SI,[BP+0CH]             ;button status for all buttons
  469.                MOV      [SI],AX
  470.  
  471.                MOV      SI,[BP+0AH]             ;number of releases for this button
  472.                MOV      [SI],BX
  473.  
  474.                MOV      SI,[BP+08H]             ;x coordinate at last press time
  475.                MOV      [SI],CX
  476.  
  477.                MOV      SI,[BP+06H]             ;y coordinate at last press time
  478.                MOV      [SI],DX
  479.  
  480.  
  481.                Basic_cleanup
  482.  
  483.                RET      10D
  484.  
  485. Mmbuttonpress  ENDP
  486.  
  487. ;
  488. ;
  489. ; FUNCTION=6
  490. ;
  491. ; BASIC: CALL MMButtonRelease(MMButton%,_
  492. ;                             MMButton.status%,_
  493. ;                             MMButton.releases%,_
  494. ;                             MMPress.xord%,_
  495. ;                             MMPress.yord%)
  496. ;        ENTRY PARAMETERS:
  497. ;
  498. ;                         AH=6    (GET BUTTON RELEASE INFO)
  499. ;                         AL=O-?  (BUTTON NUMBER TO GET INFO FOR)
  500. ;
  501. ;        EXIT PARAMETERS :
  502. ;
  503. ;                         AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  504. ;                         BX = NUMBER OF RELEASES FOR THIS BUTTON SINCE LAST
  505. ;                              CALL (0-65535)
  506. ;                         CX = X COORDINATE AT LAST RELEASE TIME
  507. ;                         DX = Y COORDINATE AT LAST RELEASE TIME
  508. ;
  509. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE CURRENT PRESS/RELEASE STATUS
  510. ;             FOR ALL BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  511. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  512. ;              IF A BIT IS SET (1)  THENS ITS ASSOCIATED BUTTON IS CURRENTLY
  513. ;             PRESSED DOWN.
  514. ;
  515. ;              FUNCTION 6 DOES NOT DOESN'T DETECT OVERFLOW.
  516. ;
  517. ;              THE RELEASE COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
  518. ;
  519. ;              THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
  520. ;             IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
  521. ;             REPRESENT THE CURSOR POSITION WHEN YOU LAST RELEASED THE BUTTON,
  522. ;             NOT THE CURSOR'S CURRENT POSITION.
  523. ;
  524. Mmbuttonrelease PROC FAR
  525.                Basic_setup
  526.  
  527.                XOR      AX,AX                   ;setup in case mouse not installed
  528.                XOR      BX,BX
  529.                XOR      CX,CX
  530.                XOR      DX,DX
  531.  
  532.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  533.                JZ       Mmbuttonrelease_exit    ;no
  534.  
  535.                MOV      SI,[BP+0EH]             ;get the mouse button that you want checked
  536.                MOV      BX,[SI]
  537.  
  538.                MOV      AX,0006H
  539.                INT      Mouse
  540.  
  541. MMBUTTONRELEASE_EXIT:
  542.                MOV      SI,[BP+0CH]             ;button status for all buttons
  543.                MOV      [SI],AX
  544.  
  545.                MOV      SI,[BP+0AH]             ;number of releases for this button
  546.                MOV      [SI],BX
  547.  
  548.                MOV      SI,[BP+08H]             ;x coordinate at last release time
  549.                MOV      [SI],CX
  550.  
  551.                MOV      SI,[BP+06H]             ;y coordinate at last release time
  552.                MOV      [SI],DX
  553.  
  554.                Basic_cleanup
  555.  
  556.                RET      10D
  557.  
  558. Mmbuttonrelease ENDP
  559.  
  560. ;
  561. ;
  562. ;
  563. ; BASIC: CALL MMBUTTON(LEFT.BUTTON%,RIGHT.BUTTON%)
  564. ;
  565. ; FUNCTION=6
  566. ;
  567. ;        ENTRY PARAMETERS:
  568. ;
  569. ;                         AH=6    (GET BUTTON RELEASE INFO)
  570. ;                         AL=O-?  (BUTTON NUMBER TO GET INFO FOR)
  571. ;
  572. ;        EXIT PARAMETERS :
  573. ;
  574. ;                         AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
  575. ;                         BX = NUMBER OF RELEASE FOR THIS BUTTON
  576. ;                              (0=32768)
  577. ;                         CX = X COORDINATE AT LAST RELEASE TIME
  578. ;                         DX = Y COORDINATE AT LAST RELEASE TIME
  579. ;
  580. ;        NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
  581. ;             BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
  582. ;             (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
  583. ;             IF A BIT IS SET (1)  THENS ITS ASSOCIATED BUTTON IS CURRENTLY
  584. ;             PRESSED DOWN.
  585. ;
  586. ;              FUNCTION 6 DOES NOT DOESN'T DETECT OVERFLOW.
  587. ;
  588. ;              THE RELEASE COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
  589. ;
  590. ;              THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
  591. ;             IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
  592. ;             REPRESENT THE CURSOR POSITION WHEN YOU LAST RELEASED THE BUTTON,
  593. ;             NOT THE CURSOR'S CURRENT POSITION.
  594. ;
  595.  
  596. Mmbutton       PROC     FAR
  597.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  598.                JZ       Mmbutton_exit           ;no
  599.  
  600.                Basic_setup
  601.  
  602.  
  603.                XOR      BX,BX                   ;
  604.  
  605.  
  606.                MOV      AX,0006                 ;check which buttons have been released
  607.                INT      Mouse
  608.  
  609.                MOV      BX,Not_pressed          ;assume "false" (not pressed) for button 1
  610.  
  611.                SHR      AX,1                    ;button 1 (left pressed) ?
  612.                JNB      Mmbutton_1              ;no,
  613.  
  614.                MOV      BX,Pressed              ;"true" (pressed)
  615. MMBUTTON_1:
  616.                MOV      SI,[BP+8]               ;return button 1 (left) pressed/released state
  617.                MOV      [SI],BX
  618.  
  619.                MOV      BX,Not_pressed          ;assume "false" (not pressed) for button 2
  620.  
  621.                SHR      AX,1                    ;button 2 (right) pressed?
  622.                JNB      Mmbutton_2              ;no
  623.  
  624.                MOV      BX,Pressed              ;"true" (pressed)
  625. MMBUTTON_2:
  626.                MOV      SI,[BP+6]               ;return button 2 (right) pressed/released state
  627.                MOV      [SI],BX
  628.  
  629.                Basic_cleanup
  630.  
  631. MMBUTTON_EXIT:
  632.                RET      4D
  633. Mmbutton       ENDP
  634.  
  635. ;
  636. ;
  637. ; BASIC: CALL MMSETRANGE(LFTCOL%,TOPROW%,RGTCOL%,BOTROW%)
  638. ;
  639. ; FUNCTION=7 & 8
  640. ;
  641. ;        SET THE MINIMUM AND MAXIMUM VALUES FOR THE MOUSE'S 'X' AND 'Y'
  642. ;        AXIS AND ALSO SET THE GAIN VALUE FOR THE MOUSE.
  643. ;
  644. ;        ENTRY PARAMETERS:
  645. ;
  646. ;                         AH=7    (SET THE MOUSES X AND Y AXIS)
  647. ;                         CX = MINIMUM 'X' COORDINATE (UPPER LEFT COLUMN)
  648. ;                         DX = MINIMUM 'Y' COORDINATE (UPPER LEFT ROW)
  649. ;
  650. ;                         AH=8    (SET THE MOUSES X AND Y AXIS)
  651. ;                         CX = MAXIMUM 'X' COORDINATE (LOWER RIGHT COLUMN)
  652. ;                         DX = MAXIMUM 'Y' COORDINATE (LOWER RIGHT ROW)
  653. ;
  654. ;                         BX = MOUSE GAIN VALUE (0-255)
  655. ;
  656. ;        EXIT PARAMETERS :
  657. ;
  658. ;
  659. ;
  660. ;        NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
  661. ;             'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
  662. ;             THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
  663. ;             VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
  664. ;             IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
  665. ;
  666. ;
  667. ;        NOTE: IF A LARGE GAIN VALUE IS USED, VERY LITTLE MOVEMENT OF THE
  668. ;              MOUSE CAUSES A LARGE 'X' OR 'Y' CHANGE.
  669. ;
  670. Mmsetrange     PROC     FAR
  671.                CMP      CS:_mouse,0             ;is a mouse installed and initialized
  672.                JZ       Mmsetrange_exit         ;no
  673.  
  674.                Basic_setup
  675.  
  676. ;SET HORIZONTAL (X)
  677.                MOV      SI,[BP+0CH]             ;get upper left column co-ordinate - "x"
  678.                MOV      CX,[SI]
  679.                MOV      SI,[BP+08H]             ;get bottom right column co-ordinate - "x"
  680.                MOV      DX,[SI]
  681.  
  682.                MOV      AX,0007H                ;set horizonmtal (x)
  683.                INT      Mouse
  684.  
  685. ;SET VERTICLE (Y)
  686.                MOV      SI,[BP+0AH]             ;get upper left row co-ordinate - "y"
  687.                MOV      CX,[SI]
  688.                MOV      SI,[BP+06H]             ;get bottom right row co-ordinate - "y"
  689.                MOV      DX,[SI]
  690.  
  691.                MOV      AX,0008H                ;set verticle (y)
  692.                INT      Mouse
  693.  
  694. ;SET THE GAIN VALUE
  695. ;             MOV     SI,[BP+0EH]               ;GET THE GAIN VALUE
  696. ;             MOV     BX,[SI]
  697.  
  698. ;             MOV     AX,000FH                  ;SET THE GAIN VALUE
  699. ;             INT     MOUSE
  700.  
  701.                Basic_cleanup
  702.  
  703. MMSETRANGE_EXIT:
  704. ;             RET     10d                       ;IF MOUSE GAIN IMPLEMENTED
  705.                RET      8D
  706.  
  707. Mmsetrange     ENDP
  708.  
  709.  
  710. _mouse         DW       0
  711.  
  712. ;CODE         ENDS
  713.                END
  714.