Vistas de página en total

viernes, 3 de mayo de 2013

CONTROL DEL RATÓN

  Esta es la librería para control del ratón. Como en "C" la he llamado MOUSE.
  En  este caso, al ser un código muy corto, he introducido el código como macro. Hacerlo como librería no aporta reducción de código, pues la implementación de código necesario para  pasar los datos a la función de la librería, a través de pila, ocupa tanto como el código mismo.
   Por lo tanto es mejor usar directamente el código en cada función, que llamar a una rutina asociada de la librería.

   En todas la llamadas se utiliza la pila para mantener transparentes los registros, de forma que llamar a la función no nos cause problemas con los datos que ya tenemos en los registros. Esto nos permite, como en "C", usar de forma cómoda las funciones sin preocuparnos por el estado de los datos almacenadas en los registros antes de la llamada.
  
  Por ello, en la mayoría de estas macros aparecen una serie de Push a la pila, que luego serán extraídos en orden inverso de esta. Estos registros salvados en la pila son precisamente los utilizados por nuestra rutina.

 Las macros nos permitirán crear de una forma cómoda y potente llamadas a nuestras funciones

MOUSE.MAC
; Copyright (C) 2013  José Ángel Moneo Fernández

;    This program is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation, either version 3 of the License, or
;   (at your option) any later version.

;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.

;    You should have received a copy of the GNU General Public License
;    along with this program.  If not, see <http://www.gnu.org/licenses/>.

ON = 1    ; definición de estado activado
OFF = 0   ; definición de estado apagado


; definición de constantes
;acciones posibles del ratón
m_move equ 1
m_p_left equ 2  ; Pulsar botón izquierdo
m_r_left equ 4  ; Pulsar soltar izquierdo
m_p_right equ 8   ; Pulsar botón derecho
m_r_right equ 16   ; Pulsar soltar derecho
m_p_medio equ 32   ; Pulsar botón medio
m_r_medio equ 64    ; Pulsar soltar medio


; Muestra u oculta el cursor del ratón
; la opcion es ON y OFF
mouse macro opcion
        mov ax,2-opcion
        int 33h
      endm

;reinicializa el ratón
resmouse macro
        mov ax,0
        int 33h
      endm

;coloca el ratón en una posición dada
putmouse macro x,y
      push cx  
      push dx
      mov ax,4
      mov cx,x
      mov dx,y
      int 33h
      pop dx
      pop cx
     endm

;lee los botones del ratón en ax 1 izquierdo,2 derecho,4 medio
getmouse macro
        push bx
        push dx
        mov ax,3
        int 33h
        mov ax,bx
        pop dx
        pop bx
     endm

;toma la posicion x del ratón y la devuelve en ax
getmousex macro
        push bx
        push cx
        push dx
        mov ax,3
        int 33h
        mov ax,cx
        pop dx
        pop cx
        pop bx
     endm

;toma la posicion y del ratón y la devuelve en ax
getmousey macro
        push bx
        push cx
        push dx
        mov ax,3
        int 33h
        mov ax,dx
        pop dx
        pop cx
        pop bx
     endm

;comprueba la corecta instalaci¢n del ratón
mouseok macro
        mov ax,0
        int 33h
        dec ax
        endm


;Activa un procedimiento asociado al ratón
mouseint macro accion,procedure
        mov ax,0ch
        push cx
push dx
        mov cx,accion
        push es
        push cs
        pop es
        mov dx,offset procedure
        int 33h
        pop es
        pod dx
        pop cx
        endm



;TOMA EL MOVIMIENTO DEL RATÓN DESDE LA ULTIMA LLAMADA
;SOBRE EL EJE X
movx_mouse macro
        push cx
        mov ax,11
        int 33h
        mov ax,cx
        pop cx
        endm
     

;TOMA EL MOVIMIENTO DEL RATÓN DESDE LA ULTIMA LLAMADA
;SOBRE EL EJE Y
movy_mouse macro
        push dx
        mov ax,11
        int 33h
        mov ax,dx
        pop dx
        endm






No hay comentarios:

Publicar un comentario

Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.