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.

Didattica AMIGA MAGAZINE<br />

.o .e..........o.e...............e....e........o.....<br />

Rob Peck<br />

miga è un ottimo computer<br />

non solo per giocare, ma<br />

anche per la programmazio-<br />

ne, dotato com'è di opzioni vera-<br />

mente uniche per lo sviluppatore.<br />

Come esempio, vorrei mostrare una<br />

interessante routine per la gestione<br />

dei gadget che ho recentemente<br />

sviluppato. Si tratta della soluzione a<br />

un problema che potrebbe essere<br />

riassunto in una ipotetica domanda:<br />

"Ho un'applicazione che richiede<br />

una griglia rettangolare di oggetti,<br />

ognuno dei quali selezionabile indi-<br />

vidualmente. Il mio problema è che,<br />

volendo usare i gadget di Intuition,<br />

la definizione di un gadget per ogni<br />

oggetto aumenta eccessivamente il<br />

volume del codice. C'è un modo<br />

migliore per procedere? "<br />

Qualche volta capita di osservare<br />

un problema da troppo vicino. Sia-<br />

mo tutti tentati di utilizzare strumenti<br />

già presenti nel sistema operativo,<br />

anche se mancano di efficienza. Nel<br />

caso di una matrice regolare di<br />

gadget come quella descritta, c'è<br />

una alternativa: crearsi i propri<br />

gadget e gestirli.<br />

Il listato in C che segue mostra un<br />

esempio di programma che si inter-<br />

faccia con Intuition utilizzando un<br />

solo gadget per segnalare la sele-<br />

zione di un oggetto.<br />

Questo singolo gadget è invisibile e<br />

ne contiene altri, generati dal pro-<br />

gramma stesso.<br />

Ogni click del mouse all'interno del<br />

gadget di Intuition genera un mes-<br />

saggio che specifica come sia stato<br />

scelto uno specifico gadget (indica-<br />

to da un numero) o come l'operatore<br />

abbia cliccato uno dei nostri gad-<br />

get. Quando viene cliccato un gad-<br />

get, si può utilizzare il suo numero<br />

per decidere l'azione successiva,<br />

Dividi e impera<br />

proprio come fanno i molti program-<br />

mi che basano le proprie scelte su<br />

GadgetlD.<br />

Il programma listato in queste pagi-<br />

ne permette a un solo gadget di<br />

essere attivo in un determinato<br />

momento. Questa caratteristica si<br />

chiama mutua esclusione: ogni<br />

gadget attivato disattiva gli altri<br />

gadget del gruppo.<br />

Il programmatore potrà trovare un<br />

sistema per indicare i gadget attivi<br />

da quelli inattivi, o scegliere di la-<br />

sciare attivo più di un gadget alla<br />

volta, o preparare gadget booleani<br />

capaci di attivarsi e disattivarsi alter-<br />

nativamente a ogni click del mouse.<br />

Naturalmente, più sono le opzioni di<br />

Intuition che decidiamo di riprodur-<br />

re, più ci avviciniamo alla reinven-<br />

zione della ruota e alla riproduzione<br />

del codice registrato nelle ROM di<br />

<strong>Amiga</strong>.<br />

Aggiungo qualche dettaglio sul<br />

programma.<br />

Esso genera una matrice rettango-<br />

lare di gadget. Quelli in cui non<br />

appare testo sono deliberatamente<br />

ignorati, e non possono essere sele-<br />

zionati. Il programma risponde solo<br />

se il click viene effettuato dentro il<br />

gadget, e non (come in Intuition)<br />

anche sul suo contorno.<br />

La funzione Draw Gads dispone i<br />

gadget e li riempie di testo. Draw-<br />

Box traccia una linea intorno alla<br />

zona attiva. ShowCursor deselezio-<br />

na un vecchio gadget e ne comple-<br />

menta uno nuovo sul video, agendo<br />

anche sul testo.<br />

DumpXY capisce che gadget è<br />

stato selezionato e passa a Show-<br />

Cursor le coordinate dell'angolo<br />

superiore sinistro del gadget pre-<br />

scelto. Alla fine, HandleEvent comu-<br />

nica ciò che è accaduto e, se viene<br />

cliccato l'apposito gadget, chiude<br />

la finestra.<br />

Il programma è stato controllato con<br />

i compilatori Lattice C 5.0 e Manx C<br />

3.6a.<br />

Il suo nome è MultiGad, e può esse-<br />

re azionato da un doppio click nel<br />

Workbench o da un comando CLI.<br />

Viene aperta una finestra, in cui<br />

compaiono i gadget generati dal<br />

programma.<br />

Cliccando su un gadget, viene vi-<br />

sualizzato il suo numero.<br />

Per uscire dal programma, è neces-<br />

sario fare click sul box di chiusura<br />

della finestra. A<br />

O Compute! Publication, Inc. 1989.<br />

Tutti i diritti sono riservati.<br />

Articolo tradotto dal n.2 Summer<br />

1989 di Compute!'~ <strong>Amiga</strong> Resource.

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

Saved successfully!

Ooh no, something went wrong!