08.11.2012 Views

dettagli - Amiga Magazine

dettagli - Amiga Magazine

dettagli - Amiga Magazine

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!