;****************
;Fonctions souris
;****************
    DOSSEG
    .MODEL LARGE
    .286

;**********
;Constantes
;**********



;********************************
;D‚claration des fonctions public
;********************************

    PUBLIC SR_INIT_SOURIS
    PUBLIC MOUSEX
    PUBLIC MOUSEY
    PUBLIC HMOUSEX
    PUBLIC HMOUSEY
    PUBLIC BOUTONG
    PUBLIC BOUTOND

;***********************************
;Variables pour les fonctions souris
;***********************************
    .DATA
     ERRORMSG1 DB 'Le drivers souris n',39,'a pu ‚tre initialis‚$'
     MOUSEX DW 0   ;position de la souris.
     MOUSEY DW 0
     HMOUSEX DW 0   ;ancienne position de la souris.
     HMOUSEY DW 0
     BOUTONG DB 0  ;‚tat des bouton de la souris
     BOUTOND DB 0
  
;*******************
;D‚but des fonctions
;*******************
    .CODE

;***************************************
;Fonction d'initialisation de la souris.
;***************************************

    SR_INIT_SOURIS PROC FAR
     PUSHA
      PUSH DS
       MOV AX,00              ;initialise le drivers souris.
       INT 33H
       CMP AX,0FFFFH          ;si ax<>FFFFH problŠme avec le drivers souris.
       JE @INIT_MOUSE_OK      ;si problŠme  
        MOV AH,09H            ;Affiche un message d'erreur
        LEA DX,ERRORMSG1
        INT 21H
        MOV AX,4C00H          ;et revient au systŠme d'exploitation.
        INT 21H
       @INIT_MOUSE_OK:
   
       ;Installe le gestionnaire d'‚venenment de la souris.
   
       MOV DX,SEG GEST_SOURIS  ;ES:DX=adresse du gestionnaire.
       MOV ES,DX
       LEA DX,GEST_SOURIS
       MOV AX,000CH
       MOV CL,00011111b  ;Masque d'‚v‚nement
       INT 33H
       POP DS
     POPA
     RETF
    ENDP

;*************************************
;Gestionnaire d'‚venement de la souris
;*************************************
    GEST_SOURIS PROC FAR
     CLI
     PUSHA
      PUSH DS
       MOV AX,@DATA
       MOV DS,AX

       MOV AX,MOUSEX
       MOV HMOUSEX,AX
       MOV AX,MOUSEY
       MOV HMOUSEY,AX

       SHR CX,1
       SHL DX,1
       MOV MOUSEX,CX           ;‚crit la position de la souris(et rectifie),
       MOV MOUSEY,DX           ;et l'‚tat des boutons gauche et droit
                               ;dans les variables appropri‚es.

       MOV AX,319              ;rectifie
       CMP MOUSEX,AX
       JLE @NOOUTHX
        MOV MOUSEX,AX
       @NOOUTHX:

       MOV AX,399
       CMP MOUSEY,AX
       JLE @NOOUTHY
        MOV MOUSEY,AX
       @NOOUTHY:

       XOR AX,AX             ;rectifie
       CMP MOUSEX,AX
       JGE @NOOUTLX
        MOV MOUSEX,AX
       @NOOUTLX:

       
       CMP MOUSEY,AX
       JGE @NOOUTLY
        MOV MOUSEY,AX
       @NOOUTLY:

       MOV BH,BL
       AND BL,1
       MOV BOUTONG,BL
       SHR BH,1
       AND BH,1
       MOV BOUTOND,BH
      POP DS
     POPA
     STI
     RETF
    ENDP

   END
