Newsgroup: it.comp.lang.c
Titolo: Mouse e c

Come si fa a integrare il mause in c???
Qualcuno conosce le rutin di dialogo???
            Grazie
                SERGIO

 di dialogo???
  Le "rutin"? =)
  Non si puo`: il C non sa -- e non vuol sapere -- cosa sia un "mouse".
Pero` puoi, compatibilmente con il tuo sistema operativo, percorrere
strade alternative:
	- Per DOS puoi scrivere procedure assembly che si 
	interfaccino all'interrupt del mouse (30h? 33h? Ahime`, la 
	mia memoria inizia a deteriorarsi...) oppure sperare che 
	il tuo compilatore preveda un'interfaccia verso il SO 
	(tipo intx86() o qualcosa del genere).
	- Per Windows NT/9x/3x c'e` l'apposita API che viene 
	distribuita con l'SDK.
	- Per UNIX c'e` da spaccarsi la testa con le varie funzioni
	di accesso al sistema a basso livello oppure ci sono le
	librerie *curses (per terminale a carattere) oppure la X 
	lib per il framework grafico X.
	Alla prossima,
		Marco

you wrote :
#Come si fa a integrare il mause in c???
#Qualcuno conosce le rutin di dialogo???
/********************************************************************
 * mouse.c - gestione del mouse tramite C                           *
 * ---------------------------------------------------------------- *
 * (C)1999 by Andrea Laforgia                                       *
 *                                                                  *
 * NOTE : e' espressamente studiato per sistemi DOS/Windows9x ed e' *
 * compilato con DJGPP.                                             *
 *                                                                  *
 * La funzione mouse_change_color() e' stata aggiunta in un secondo *
 * momento, dato che, per alcune persone, il cursore di default del *
 * mouse e' nero e quindi indistinguibile, in certi contesti, dallo *
 * sfondo del video.                                                *
 ********************************************************************/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
/* elenco delle dichiarazioni delle funzioni usate */
int int86 (int ivec, union REGS *in, union REGS *out);
unsigned mouse_reset                ( void ) ;
    void mouse_cursor_enable        ( void ) ;
    void mouse_cursor_disable       ( void ) ;
unsigned mouse_get_x                ( void ) ;
unsigned mouse_get_y                ( void ) ;
unsigned mouse_left_button_pressed  ( void ) ;
unsigned mouse_right_button_pressed ( void ) ;
    void mouse_change_color         ( unsigned ) ;
/***************************************************/
/* costanti cursor mask */
const unsigned black   = 0x0000 ;
const unsigned blue    = 0x1000 ;
const unsigned green   = 0x2000 ;
const unsigned cyan    = 0x3000 ;
const unsigned red     = 0x4000 ;
const unsigned magenta = 0x5000 ;
const unsigned yellow  = 0x6000 ;
const unsigned white   = 0x7000 ;
unsigned mouse_reset ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 0 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( 
r_out.x.ax
 == 0xffff ) ;
}
void mouse_change_color ( unsigned cursor_mask )
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 0x000a ;
  r_in.x.bx = 0 ;
 
r_in.x.cx
 = 0x8fff ;
  r_in.x.dx = cursor_mask ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
void mouse_cursor_enable ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 1 ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
void mouse_cursor_disable ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 2 ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
unsigned mouse_get_x ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( ( 
r_out.x.cx
 & 0x0FFF) >> 3);
}
unsigned mouse_get_y ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( ( r_out.x.dx & 0x00FF ) >> 3 );
}
unsigned mouse_left_button_pressed ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( r_out.x.bx & 1 );
}
unsigned mouse_right_button_pressed ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( (r_out.x.bx & 2 ) >> 1 );
}
int main ()
{
    char c = 0 ;
    unsigned old_x = 0, old_y = 0,
             old_left_pressed = 0, old_right_pressed = 0;
    unsigned x, y, left_pressed, right_pressed ;
    clrscr() ;
    if ( ! mouse_reset() )
    {
       fprintf(stderr, "driver del mouse non installato.");
       exit ( 1 ) ;
    }
    else
    {
       mouse_cursor_enable() ;
       mouse_change_color( blue ) ;
       while ( c != '\x1B' ) /* premi ESC per uscire */
       {
             if ( kbhit() ) c = getch () ;
             x = mouse_get_x () ;
             y = mouse_get_y () ;
             left_pressed = mouse_left_button_pressed () ;
             right_pressed = mouse_right_button_pressed () ;
             if ( ( x != old_x ) || (y != old_y) )
             {
                mouse_cursor_disable() ;
                printf("posizione : (x = %3u , y = %3u)\n", x, y );
                mouse_cursor_enable() ;
             }
             if ( ( left_pressed != old_left_pressed ) ||
                ( right_pressed != old_right_pressed ) )
             {
                mouse_cursor_disable() ;
                printf("pulsanti  : ( %u, %u )\n", left_pressed,
                                                   right_pressed );
                mouse_cursor_enable() ;
             }
             old_x = x;
             old_y = y;
             old_left_pressed = left_pressed;
             old_right_pressed = right_pressed;
       }
       mouse_cursor_disable() ;
    }
    return 0 ;
}
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

Dunque, devi usare l'interrupt 33h del dos.
Fidati, è una cosa estremamente facile, io ci sono riuscito senza
difficolta.
Per ulteriori informazioni sull'int33h, vediti la lista degli interrupt di
Ralph Brown, oppure, meglio ancora, vai su 
http://gpi.eden.it
 nella sezione
DEV ( o una coasa del genere...) e cercati il tutorial sul mouse in Italiano
se proprio non lo trovi te lo sendo io!
Ciao by Tdx
Ps: ehm....rutin??? BUUUURP!

Aggiungo solo un piccolo dettaglio al listato postato da Andrea
Laforgia.Il programma funziona alla perfezione anche sui vecchi
compilatori C++ per DOS,solo che bisogna aggiungere all'inizio il file
include 'process.h'.Per il resto va tutto bene.
Il Ghenio