Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] C e assembly, mouse routines

    Ciao a tutti. Avendo bisogno di settare la posizione del mouse in un programma scritto in c, ho trovato una piccola libreria che permette varie funzioni sul mouse appunto.
    La libreria è composta da un semplice file, senza molte pretese, con le varie funzioni in c con inclusioni inline in assembly.
    Per i possibili interessati, da questo link potete scaricare la "libreria" http://www.programmersheaven.com/dow.../download.aspx .

    Ed eccoci al problema:
    Un esempio di queste funzioni (sono tutte molto simili) è

    codice:
     void GetMouseStatus ( void )
    
    {
    
      int button;
    
      mouse_b1 = 0;
    
      mouse_b2 = 0;
    
    
    
      _asm
    
      {
    
        mov ax, 03
    
        int 33h
    
        mov [mouse_x], ecx
    
        mov [mouse_y], edx
    
        mov [button], ebx
    
      }
    
      if ( button == 1 ) mouse_b1 = 1;
    
      if ( button == 2 ) mouse_b2 = 1;
    
      if ( button == 3 ) {mouse_b1 = 1; mouse_b2 = 1;}
    
    
    
    }
    Io compilo con gcc su linux 64, ma il compilatore non mi riconosce la forma con cui è introdotto, e cioè

    _asm { /*assembly code*/ }

    ERRORI: error: expected ‘(’ before ‘{’ token ,
    mouselibORIG.c:32: error: ‘mov’ undeclared (first use in this function)
    eccetera....

    Secondo voi da cosa può dipendere? Ho buone conoscenze sia di c che di assembly, ma a metterli insieme non sono ancora riuscito.
    Grazie e buona serata,

    Gio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Non mi è chiarissimo: vorresti leggere la posizione del mouse, su linux, chiamando una INT per DOS in modalità reale?

  3. #3
    No, vorrei modificare la posizione del mouse. Naturalmente prima di modificarla devo conoscerla

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da ziogio91
    No, vorrei modificare la posizione del mouse. Naturalmente prima di modificarla devo conoscerla
    E lo vorresti fare con una chiamata al DOS in modalità reale (quindi parliamo neanche di Windows NT, bensì di massimo Windows ME), su una macchina Linux?

    Continuo ad essere un pochino confuso

  5. #5
    Ora capisco la tua perplessità, e la condivido: ti sembrerà strano ma non ci ho mai pensato...più che altro davo per scontato di poter programmare in c o in assembly senza pesi sulla coscienza. Ciò che stavo provando a fare non aveva senso.
    A questo punto hai qualche idea di come potrei fare in c a creare un programmino del genere? Altrimenti troverò qualche via alternativa

  6. #6
    Il livello più basso a cui agganciarsi per pilotare il mouse nell'ambiente grafico* è il server X, e quindi le funzioni di Xlib; nello specifico, ti serve XQueryPointer per ottenere la posizione del puntatore e XWarpPointer per spostarlo.

    * in realtà si può anche leggere direttamente dai device di /dev/input, ma devi essere superuser, se ce n'è più di uno non sai quale pescare (mentre X è già configurato) e non ci puoi scrivere. A livello più alto invece ci sono i vari toolkit grafici.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Grazie MItaly, il tuo consiglio è stata una svolta: non avevo mai usato la xlib. Il problema è che il caro gcc mi dà errori all'interno dell'header e della libreria stessa:
    ho incluso come header
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <X11/X.h>
    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    e come librerie, dal comando gcc, libX11.a lib libXt.a libXaw7.a.
    Gli errori sono molti, e iniziano con

    /usr/lib/libX11.a(xcb_io.o): In function `require_socket':
    (.text+0x331): undefined reference to `xcb_take_socket'
    /usr/lib/libX11.a(xcb_io.o): In function `wait_or_poll_for_event':
    (.text+0x404): undefined reference to `xcb_wait_for_event'
    Vi risparmio il resto

    Molto probabilmente si riferisce a qualche header da includere, ma sinceramente non saprei cos'altro includere...any ideas?

  8. #8
    Non è un problema di header da includere, sono errori di linker; prova ad aggiungere sulla linea di comando del compilatore -lxcb oltre a -lX11.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Funziona Ora mi da un seg fault, ma ci lavoro un po' su prima di parlare ancora.
    Grazie davvero!

  10. #10
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.