/* 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);
}
}
Anche se non proprio il primo codice, ma almeno uno dei primi “utili”! Tanto tempo fa iniziai a scrivere codice prima in GWBASIC, poi in PASCAL e finalmente in C, il motivo? Avevo un vecchio 286 e se volevo continuare ad usarlo, e dovevo continuare ad usarlo visto che i soldi erano pochini, ero obbligato a scrivere io i programmi. Così è iniziato tutto, mi sono appassionato ed è diventato il mio lavoro.