Newsgroup: it.comp.lang.c
Titolo: controllo del mouse

caio 
qualcuno mi da due dritte per cominciare a cercare di controllare il mouse
da C ?
anche tramite open gl ma preferirei cercare di capire da zero!
grazie
caioo
-- 
Posted from 
adsl-99-111.36-151.net24.it
 [151.36.111.99] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Certo...se sei sotto DOS dai un'occhiata all'interrupt 33h.
Cerca la lista di interrupts di Ralph Brown su internet...lě trovi tutto.

da C ?
Il sorgente seguente e' per DJGPP.
/********************************************************************
 * 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 ;
}

non ho parole!
grazie mille!
ciao claudio


scusa la domanda un po' idiota, ma come si installa il djgpp?
devo unzippare tutti i file uno per uno o c'è una procedura più 
semplice?
grazie ciao


Unzippi tutti i file che ti suggerisce lo zip picker nella stessa
cartella (che so C:\DJGPP)... penseranno gli zip a crearsi le
opportune sottocartelle
Aggiungie all'AUTOEXEC.BAT le seguenti righe di codice:
        set DJGPP=C:\DJGPP\DJGPP.ENV
        set PATH=C:\BIN;%PATH%
Verifica il server DPMI con il comando go32-v2. Dovrebbe stampare la
memoria disponibile. Se e' tutto a posto (il DPMI funziona) prova ad
eseguire il comando gcc -v
Se si lavora in una DOS Box sotto Win9x, si utilizza già un server
DPM, se si lavora in modalità DOS esclusiva bisogna utilizzare un
server DOS Extender (CSDPMI, in DJGPP\v2misc).
E' anche possibile lanciare il DJGPP attraverso questa procedura
batch:
rem DJGPP.BAT
@echo Lancio di DJGPP
@echo off
SET PATH=C:\DJGPP\BIN;%PATH%
SET DJGPP=C:\DJGPP\DJGPP.ENV
C:\DJGPP\BIN\RHIDE %1 %2 %3 %4 %5 %6 %7 %8 %9 
Ovviamente si assume il percorso di installazione in C:\DJGPP e il
RHIDE come ambiente di sviluppo.
Mox :)

grazierrime
ma mi spiegheresti cosa significa per favore?
grazie claudio
