Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
al Rexx. Questa libreria (che è unfi~nctio~z host ARexx) fornisce<br />
l'accesso ad alcune funzioni di Intuition, della<br />
graphics.library e della arplibrary, e vi aggiunge alcune<br />
funzioni di supporto. I1 modello di programmazione, per la<br />
verità, è piuttosto primitivo, e appoggiandosi direttamente<br />
a Intuition consente soltanto la definizione dei "vecchi"<br />
gadget, finestre e menu in stile <strong>Amiga</strong>OS 1.3. Salvo casi<br />
particolari, per esempio in presenza di risorse ridottissime,<br />
ci sembra che una delle alternative più moderne sia preferibile.<br />
Per finire, citiamo il pacchetto Varexx, che risolve il pro-<br />
blema della creazione della GUI affidandosi a un costrut-<br />
tore di GUI esterno (GadToolsBox: ne parleremo prossi-<br />
mamente). Varexx legge i file ".guin prodotti da GadTool-<br />
sBox, contenenti le descrizioni della GUI, e crea le fine-<br />
stre corrispondenti. Lo script può interagire con la GUI at-<br />
traverso le funzioni e i comandi forniti da Varexx, che<br />
consentono un buon grado di controllo; le azioni<br />
dell'utente sugli elementi della GUI causano l'invio di par-<br />
ticolari messaggi a una porta che lo script deve controlla-<br />
re all'interno di un ciclo di lettura.<br />
Come abbiamo visto, c'è un'ampia scelta di pacchetti dispo-<br />
nibili (e la nostra selezione non esaurisce la gamma delle<br />
soluzioni possibili), ed è anche possibile chiamare diretta-<br />
mente da ARexx le varie librerie condivise, di sistema o me-<br />
no. Fra i criteri che dovrebbero guidare la scelta del pro-<br />
grammatore, non vanno dimenticati due di cui non abbia-<br />
mo parlato: l'occupazione di memoria e la velocità. I1 primo<br />
aspetto dipende principalmente dalle richieste di memoria<br />
del framework di riferimento (da praticamente nulla per la<br />
rexxarplib.library a svariate centinaia di kb per MUIRexx),<br />
mentre il secondo favorisce le estensioni in cui il livello di<br />
astrazione è il più alto possibile (in questo modo, la mag-<br />
giore quantità di lavoro viene fatta all'interno dell'host, ge-<br />
neralmente scritto in C o Assembler e quindi più veloce): a<br />
questo riguardo, ZedRexx ha delle carte da giocare.<br />
Come al solito, il miglior compromesso fra memoria, velo-<br />
cità, flessibilità e sofisticazione della GUI dipende dalle ne-<br />
cessità della particolare applicazione, e la scelta caso per<br />
caso è compito del programmatore.<br />
Una GUI per <strong>Amiga</strong> E<br />
Fra i linguaggi di maggior diffusione, non poteva mancare<br />
<strong>Amiga</strong> E. Già nel pacchetto originale di E è compreso un<br />
modulo, chiamato EasyGUi, che implementa un intero fra-<br />
mework per la creazione e la gestione di interfacce grafiche.<br />
EasyGUI (che occupa appena una decina di kilobyte, da<br />
includere staticamente nel codice dell'applicazione) è costi-<br />
tuita da pochissime funzioni, una sola delle quali è suffi-<br />
ciente per la creazione della GUI e l'esecuzione del ciclo di<br />
gestione dei messaggi. Tutta la complessità è incapsulata in<br />
uno degli argomenti della funzione di creazione, sotto for-<br />
ma di lista (di liste ... ) di "comandi astratti" di definizione<br />
della GUI; per consentire un controllo di buon livello, Ea-<br />
syGUI fa largo uso di puntatori a funzioni (di E) che ven-<br />
gono chiamate dal motore in occasione di determinati<br />
eventi. La GUI così costruita, basata su GadTools, sarà ridi-<br />
mensionabile e sensibile al font in uso senza particolari<br />
precauzioni da parte del programmatore.<br />
Se le limitazioni di EasyGUI (principalmente derivanti da<br />
GadTools) non sono troppo restrittive per una particolare<br />
applicazione, questo framework si rivelerà veloce e prati-<br />
co, e (a differenza dei precedenti) non necessita che altre<br />
librerie, comandi o raccolte di classi siano presenti nel si-<br />
stema, a tutto vantaggio della semplicità di installazione e<br />
disinstallazione. I1 listato 4 mostra un esempio di uso di Ea-<br />
syGUI; l'aspetto dell'interfaccia così generata è visibile in fi-<br />
gura 2.<br />
Il<br />
MODULE 'tools/easygui'<br />
PROC main()<br />
easygui('Riavvia con...',<br />
[ BEVELR,<br />
[ ROWS ,<br />
[MX,{os),NIL,['<strong>Amiga</strong>OS 1.3', '<strong>Amiga</strong>OS 3.0',<br />
'MacOS/ShapeShifter', 'Linuxl,NIL],<br />
FALSE, 1 ] ,<br />
[BARI<br />
[CHECK,{perm),'Permanente',FALSE,TRUE],<br />
[CHECK,{CO~~),'CO~~ reset',TRUE,TRUE],<br />
[BARI t<br />
[SBUTTON,l, ' Riavvia '1<br />
l<br />
l<br />
)<br />
ENDPROC<br />
PROC os(info,sel) IS WriteF('os=\d\n',sel)<br />
PROC perm(info,bool) IS WriteF('perm=\d\n',bool)<br />
PROC cold(info,bool) IS WriteF('cold=\d\n',bool)<br />
11 Listato 4 - 11 sorgente per la CUI infigura 2.<br />
Fig. 2 - Una GUZprodotta con EasyCUZ.<br />
J <strong>Amiga</strong>QS l ,3<br />
6 AnigaOS 3.9<br />
J MacOSlShapeSh i f t er<br />
J Linux<br />
Peraanente I<br />
Cold reset<br />
Riauvia 1