04.06.2013 Views

Gruppo Editoriale - Amiga Magazine Online

Gruppo Editoriale - Amiga Magazine Online

Gruppo Editoriale - Amiga Magazine Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Le pagine di<br />

O / Transcictor per MIGA<br />

Romano Tenca<br />

Introduzione all'input.device<br />

Accanto alle librerie di sistema, <strong>Amiga</strong> presenta una serie di<br />

device (dispositivi) che sono strutturati in maniera analoga<br />

alle librerie, ma sono destinati, in generale, a gestire l'input<br />

e l'output. Una parte dell'input di sistema viene gestito, a<br />

livello più basso, dai seguenti device: keyboard.device (per<br />

la tastiera), gameport.device (per la porta del mouse e per<br />

quella del joystick), timer.device (per gli eventi temporali).<br />

L'input.device, da parte sua, costituisce una specie di super-<br />

visore degli eventi citati, che funziona in una maniera del<br />

tutto particolare. Quando viene aperto per la prima volta<br />

(cosa che viene effettuata direttamente da <strong>Amiga</strong>Dos),<br />

viene generato un vero e proprio task Exec, il quale si<br />

incarica di dialogare con i predetti device, per generare un<br />

unico flusso di dati. In questo flusso compariranno, nell'or-<br />

dine in cui sono accaduti, gli eventi provenienti dalla<br />

tastiera, dal mouse, dal timer (oltre al segnale di disco<br />

inserito/rimosso). In esso non sono presenti gli eventi rela-<br />

tivi al joystick che, se interessano, devono essere rilevati<br />

direttamente attraverso il gameport.device.<br />

Se noi volessimo utilizzare il keyboard.device o il<br />

gameport.device (per gli eventi relativi al mouse)<br />

direttamente,diventeremmo concorrenti del task<br />

dell'input.device e non riusciremmo ad accedere a tutti gli<br />

eventi in input, perché una buona parte sarebbe comunica-<br />

ta al suddetto task invece che al nostro. Per ricevere gli<br />

eventi in input si deve dunque passare attraverso<br />

l'input.device, il quale si incaricherà di comunicare il flusso<br />

di dati agli utenti che ne hanno fatto richiesta. Un "clien-<br />

te" fisso dell'input.device è Intuition, che in continuazione<br />

interpreta e smista i diversi eventi (generando, ad esempio,<br />

dei messaggi IDCMP diretti alla window attiva).<br />

Se più utenti richiedono l'accesso al flusso di input,<br />

llinput.device mette a disposizione tale flusso ai diversi<br />

task, in maniera sequenziale: al primo programma viene<br />

trasmesso un puntatore al flusso dei dati, poi 1'input.device<br />

attende che questo termini il proprio lavoro e restituisca il<br />

puntatore, che, a questo punto, verrà inviato al secondo<br />

programma e così via.<br />

I singoli utenti possono semplicemente leggere il flusso dei<br />

dati, oppure modificarlo, cambiandone dei parametri,<br />

oppure ancora eliminare dal flusso interi eventi o tutta la<br />

Come costruire un input handler<br />

catena, restituendo un puntatore ~lullo. L'utente successivo<br />

non riceverà più il flusso originale, ma quello modificato.<br />

Se, ad esempio, noi intercettiamo il flusso dei dati prima di<br />

Intuition ed eliminiamo da esso tutti gli eventi relativi alla<br />

tastiera, Intuition non sarà più in grado di ricevere questo<br />

tipo di informazioni. Viceversa, se lo riceviamo dopo Intuition,<br />

gli eventi ci appariranno così come Intuition li ha<br />

elaborati.<br />

Da ciò che abbiamo detto appare immediatamente eviden-<br />

te la grande potenza delllinput.device e, dunque, la partico-<br />

lare cura che occorre porre nel programmare a questo<br />

livello. Con questo metodo sono stati disegnati alcuni dei<br />

più famosi programmi PD, come POPCLI o DMOUSE.<br />

Grazie a questo metodo è possibile modificare profonda-<br />

mente l'interfaccia Intuition, per esempio mutando il signi-<br />

ficato associato alla pressione dei bottoni del mouse, o<br />

attribuire a delle particolari combinazioni di tasti compiti<br />

particolari (hot key). D'altra parte, occorre tenere presente<br />

che i programmi che vogliono gestire il flusso di dati<br />

devono operare molto velocemente, se non vogliono ral-<br />

lentare Intuition e tutto ciò che ne dipende; pertanto devo-<br />

no essere brevi e possibilmente, ma non necessariamente,<br />

in linguaggio macchina.<br />

I1 flusso di input<br />

I1 flusso di input è costituito da una catena di strutture<br />

InputEvent, la cui definizione si trova nel file include<br />

"devices/inputevent.h". L'elenco dei valori che i suoi campi<br />

posssono assumere si trova nel file include già citato ed è lo<br />

stesso che viene utilizzato per interpretare i messaggi che<br />

provengono dal console.device quando questo fornisce<br />

eventi in input di tipo raw.<br />

Si può notare, inoltre, una qualche affinità con i valori che<br />

compaiono in certi campi della struttura IntuiMessage,<br />

utilizzata da Intuition per comunicare con le Window,<br />

attraverso il metodo IDCMP. Di fatto gli IntuiMessage costi-<br />

tuiscono una elaborazione degli InputEvent effettuata da<br />

Intuition, che, per esempio, interpreta la pressione del tasto<br />

destro del mouse come una richiesta di visualizzazione del<br />

menu. L'esame che noi svolgeremo ora riguarda solo gli<br />

input handler che agiscono a priorità più elevata di Intui-<br />

tion, e che dunque possono "vedere" solo gli eventi, per<br />

così dire, allo stato grezzo.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!