You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
La creazione delle GUI<br />
Abbiamo visto nelle precedenti puntate come sia disponi-<br />
bile un'ampia varietà di soluzioni per semplificare la crea-<br />
zione dell'interfaccia utente grafica di un programma. In<br />
realtà, quanto questa varietà sia effettivamente ampia di-<br />
pende in misura sostanziale dal linguaggio di programma-<br />
zione che si sta usando. Anche se praticamente tutti i lin-<br />
guaggi disponibili su Arniga possono, in un modo o nell'al-<br />
tro, invocare funzioni di librerie condivise (e accedere così<br />
alla quasi totalità dei framework che abbiamo presentato),<br />
in alcuni casi ciò è tutt'altro che agevole.<br />
Spesso è sufficiente un <strong>dettagli</strong>o per complicare le cose:<br />
non sempre la rappresentazione dei dati in memoria offerta<br />
da un certo linguaggio coincide con quella assunta dalle Ii-<br />
brerie (che è poi quella del linguaggio C), e non sempre è<br />
possibile passare a una libreria puntatori a funzione compa-<br />
tibili con gli Hook di sistema; alcuni linguaggi sono inter-<br />
pretati, e non compilati e, quindi, non possono usare affatto<br />
degli Hook e meno che mai costruire delle classi custom<br />
per i framework orientati agli oggetti; a volte semplicemen-<br />
t6 non sono disponibili i file di supporto per un determina-<br />
to linguaggio, o una libreria fa un uso spregiudicato di<br />
qualche particolare del supporto a tempo d'esecuzione del<br />
C. Insomma, "il diavolo si nasconde nei <strong>dettagli</strong>", e basta un<br />
nonnulla perché l'adozione di un certo framework, anziché<br />
semplificare la programmazione, la complichi oltre misura.<br />
Non stupirà allora scoprire che, parallelamente alla diffu-<br />
sione di linguaggi diversi da C e assembler per la program-<br />
mazione su <strong>Amiga</strong>, si siano diffusi strumenti e ambienti per<br />
il supporto alla creazione di GUI con questi linguaggi: ed è<br />
Linguaggi e GUI @arte ZII)<br />
a questi "cugini poveri" di MUI e consimili che dedichere-<br />
mo la nostra attenzione in questa puntata.<br />
L'ambiente più "ostile" alla programmazione delle normali<br />
librerie condivise è, senza alcun dubbio, il linguaggio della<br />
Shell: gli script di ArnigaDOS. Potrà sembrare strana l'idea<br />
di usare gli script di Shell per realizzare applicazioni dotate<br />
di interfaccia grafica, ma in realtà molti piccoli problemi di<br />
normale amministrazione potrebbero essere agevolmente<br />
affrontati con i comandi del DOS e un po' di inventiva,<br />
senza richiedere il ricorso a mezzi più sofisticati.<br />
Proprio riconoscendo questa possibilità, la vecchia Com-<br />
modore aveva incluso fra i comandi di sistema Request-<br />
Choice e RequestFile, che danno la possibilità a uno script<br />
Shell di presentare all'utente un requester testuale, even-<br />
tualmente con risposte multiple, e un file requester; le<br />
azioni dell'utente vengono poi comunicate allo script attra-<br />
verso lo standard output e i valori di ritorno dei comandi<br />
(e poi gestite tramite I'impostazione di opportune variabili<br />
d'ambiente). Sulla loro scia sono nate nel tempo altre pic-<br />
cole utility, di solito reperibili nel pubblico dominio, che<br />
permettono di costruire requester più complessi, aggiunge-<br />
re menu, aprire e chiudere schermi e così via.<br />
Se questo approccio "artigianale" alla costruzione di una<br />
GUI può andar bene per realizzare una sporadica richiesta<br />
di conferma, o per scegliere un po' di file da passare come<br />
argomenti a LHA (vedi listato l), non è il caso di affidarsi a<br />
questi comandi per realizzare applicazioni appena un po'<br />
più complesse. Non è necessario però abbandonare del tut-<br />
to l'approccio dei comandi di Shell: si può usare gui4cii.<br />
set dest 'requestfile title="Nome dell'archivio" savemode noicons'<br />
I if exists $dest<br />
set add 'requestchoice "Richiesta di conferma" "Aggiungo all'archivio*Npreesistente?" "s~~No"'<br />
if "$addU eq "O"<br />
quit<br />
endif<br />
endif<br />
lha a $dest 'requestfile title="File da archiviare" positive="Archivia" multiselect'<br />
Listato I - Uso di RequestFile e RequestCboice.