Gruppo Editoriale - Amiga Magazine Online
Gruppo Editoriale - Amiga Magazine Online
Gruppo Editoriale - Amiga Magazine Online
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.