/* NZZR SoftWare - Funzioni per l'uso del mouse - 1998 */ #include <dos.h> #include <math.h> #include <conio.h> #include <ctype.h> void mostra_mouse(void); void cancella_mouse(void); int controlla_mouse(void); int posizione(void); void sposta_mouse(int xp,int yp); void x_limiti(int inizio,int fine); void y_limiti(int inizio,int fine); char stato(void); static union REGS inp; static union REGS out; int MODO=0,XMP=0,YMP=0,XTP,YTP; /* MODO:modalita a due o tre tasti; XMP,YMP:la posizione del cursore; XTP,YTP la posizione del cursore in modalità di testo. */ void mostra_mouse(void) {inp.x.ax=1;int86(0x33,&inp,&out);} void cancella_mouse(void) {inp.x.ax=2;int86(0x33,&inp,&out);} int controlla_mouse(void) /* Restituisce -1 se il mouse è installato altrimenti 0 imposta valore di MODO*/ { inp.x.ax=0; int86(0x33,&inp,&out); if(out.x.ax==0)return(0); MODO=out.x.bx; return(out.x.ax); } int posizione(void) /* Legge la posizione del cursore assegnando un valore a XMP eYMP e restituisce lo stato dei tasti: 0=tasto sinistro;1=tasto destro;2=tasto centrale*/ { inp.x.ax=3; int86(0x33,&inp,&out); XMP=out.x.cx; YMP=out.x.dx; XTP=floor(XMP/8); YTP=floor(YMP/8); return(out.x.bx); } void sposta_mouse(int xp,int yp) /* Sposta il cursore nella posizione (xp,yp) */ { inp.x.ax=4; inp.x.cx=xp; inp.x.dx=yp; int86(0x33,&inp,&out); } void x_limiti(int inizio,int fine) /*Imposta i limiti orizzontali per il mouse*/ { inp.x.ax=7; inp.x.cx=inizio; inp.x.dx=fine; int86(0x33,&inp,&out); } void y_limiti(int inizio,int fine) /*Imposta i limiti verticali per il mouse*/ { inp.x.ax=8; inp.x.cx=inizio; inp.x.dx=fine; int86(0x33,&inp,&out); } char stato(void) /*controlla quale tasto è stato premuto*/ { int button; char c; for(;;){ while(!kbhit()){ button=posizione(); if(button==1)return('\n');/*tasto sinistro (codice di INVIO)*/ if(button==2)return(27);/*tasto destro (codice di Esc)*/ if(button==4)return(144);/*tasto centrale*/ } c=toupper(getch()); return(c); } }
Ultimo aggiornamento 30/09/1999