Newsgroup: it.comp.programmare
Titolo: Gestione mouse (urgente)

Sto sviluppando una interfaccia generica in modo testo in C++. Per questa
interfaccia ho necessità di gestire il mouse, però non so come si fa. Io
utilizzo un compilatore Borland e, di conseguenza, utilizzo per questa
interfaccia la libreria <conio.h>. Ho visto che ci sono delle istruzioni per
leggere e scrivere dati nelle porte (inp, inpw, ecc.), però non so come si
utilizzano. Se qualcuno sa inviarmi (via newsgroup o via e-mail, è lo
stesso) delle funzioni per l'individuazione e gestione del mouse e magari
anche un piccolo main () di esempio, gliene sarei grato. Ciao
                                                        Marchisio Stefano

 interfaccia ho necessità di gestire il mouse, però non so come si fa.
Io avevo scritto un semplice modulo di interfacciamento tra
Clipper ed il driver del Mouse in c, usando la int86.
Se ti interessa dimmelo che ti mando i sorgenti, sempreche' li
ritrovo...
Per scrivermi rimuovi _speed dall'indirizzo.
Davide

interfaccia ho necessità di gestire il mouse, però non so come si fa. 
Il codice seguente e' di 2 anni fa e l'ho scritto per DJGPP,
ma dovrebbe funzionare senza modifiche con il Borland.
/********************************************************************
 * mouse.c - gestione del mouse tramite C
 * Andrea Laforgia 2000
*******************************************************************/
#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 (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]