L'ADP Basic (5)
gli ultimi 6
Si conclude con questo numero la presentazione del tool device-oriented ADP Basic. Con quest'ultima porzione di interprete potremo facilmente gestire file relativi, definire gli 8 tasti F1-F8 e leggere un file sequenziale visualizzando il suo contenuto su video, alla maniera del comando VIEW, valido solo per i programmi Basic.
Per chi non ha gli ultimi 4 numeri di MC microcomputer o, pi semplicemente, per tutti coloro che non sono interessati a come e perch l'ADP Basic funziona, volendo soltanto mandarlo in esecuzione e usarlo, in queste pagine stato ripubblicato l'intero listato dei 4096 byte occupati dal Tool ADP. Un apposito riquadro, inoltre, elenca una per una tutte le istruzioni implementate, non senza indicare le opportune avvertenze e modalit d'uso.
Chi ha la stampante 801 (e, ripetiamo, non ci ha seguito nei numeri scorsi) dopo aver digitato il listato 3, inserisca in memoria anche il listato 4 che adatter l'ADP Basic alla stampante minore.
I 6 nuovi comandi
La prima istruzione presentata questo mese, permette di definire i tasti F1-F8. Ad ognuno possibile associare una stringa di massimo 8 caratteri. Il comando KEY, e ha due diversi significati. Se non seguito da nulla, attiva le 8 definizioni e le visualizza una per una sullo schermo.
Questa operazione inoltre necessaria, ogni qual volta si esegue la sequenza Run/Stop e Restore, che modifica alcune celle in pagina zero. Se nessuna modifica fatta alle definizioni degli otto tasti, troveremo al tasto F1 il comando FLASH, al tasto F3 il comando DSAVE, al tasto F5 il comando DLOAD, al tasto F7 il comando CAT per visualizzare la directory del dischetto presente nel Driver.
Se facciamo precedere la pressione dallo Shift, troveremo rispettivamente le sequenze: EXE":*" per caricare il primo programma da dischetto; APPEND per saldare due programmi; VIEW per mostrare su video il listato di un programma che sta su disco; ERASE per cancellare file inutili dal dischetto.
Le definizioni relative ai tasti F1,F2 e F7, forzano automaticamente un [RETURN], per eseguire la funzione con la sola pressione del tasto definibile.
Per cambiare la definizione dei tasti, sufficiente digitare:
KEY NumeroTasto,"Stringa"
eventualmente seguito da un +CHR$(13) se si desidera un'auto-esecuzione dell'istruzione contenuta nella stringa. Facciamo un esempio: vogliamo associare al tasto F1 la stringa CIAO. Digiteremo semplicemente:
KEY 1,"CIAO"
da questo momento, ogni pressione del tasto F1, far apparire su video la sequenza di caratteri C,I,A,O. Se vogliamo definire un tasto con un comando, ad esempio LIST, digiteremo:
KEY 1,"LIST"+CHR$(13)
ad ogni pressione del tasto F1, sar eseguito il list su video del programma Basic contenuto in memoria.
Per visualizzare il contenuto di un file sequenziale, alla maniera del comando VIEW valido solo per i programmi basic, disponibile il comando FILE, seguito dal nome del file.
E' possibile anche leggere file dell'EASY SCRIPT, precedentemente salvati dal word processor. Se non si desidera leggere tutto il file, sufficiente agire sul tasto Run/Stop per interrompere anzitempo la visualizzazione.
Per un trattamento facilitato dei file relativi, sono disponibili 4 nuovi comandi.
REL OPEN "NomeFile",LunghezzaReg.
Permette di inizializzare un file relativo i cui elementi hanno lunghezza minore o uguale a quella indicata dopo la virgola (compresa sempre tra 2 e 80). L'operazione di inizializzazione obbligatoria prima di cominciare a inserire elementi. Per aprire semplicemente un file relativo, gi inizializzato, per successive operazioni di lettura e/o scrittura, basta non specificare la lunghezza degli elementi.
Quando non si usa pi un file relativo, bisogna chiuderlo col comando REL CLOSE, seguito da nulla.
Per inserire registrazioni nel file disponibile il comando SEND (invia). La sua sintassi :
SEND Posizione,"Stringa"
e inserisce la "Stringa" (che non deve contenere virgole o [Return]) nel file relativo aperto, nella posizione specificata. Per recuperare una registrazione si usa il comando RECEIVE, seguito dalla posizione che ci interessa e da una variabile di tipo stringa che, a operazione compiuta, conterr la registrazione cercata. Come per il comando INPUT, obbligatorio che la RECEIVE sia inserita in una linea di programma, pena il messaggio d'errore ILLEGAL DIRECT.
Facciamo un esempio, scriviamo il seguente programmino per inserire alcune registrazioni in un file e per recuperarle agevolmente.
10 REL OPEN "ESEMPIO",50
con questa prima linea inizializiamo il file relativo, di nome ESEMPIO e con registrazioni di lunghezza massima 50 byte.
20 SEND 12,"BUONGIORNO"
riempiamo la 12-esima posizione con la stringa BUONGIORNO.
30 SEND 3,"ARRIVEDERCI"
riempiamo la terza posizione con la stringa ARRIVEDERCI.
40 REL CLOSE
chiudiamo il file precedentemente aperto. Scriviamo ora un programmino per accedere alle registrazioni del file ESEMPIO e per modificare alcune di esse:
10 REL OPEN "ESEMPIO"
questa volta non abbiamo indicato la lunghezza massima degli elementi, essendo il file gi inizializzato.
20 RECEIVE 12,A$
poniamo in A$ la 12-esima registrazione.
30 PRINT A$
mostrer su video la scritta BUONGIORNO, precedentemente prelevata dalla 12-esima posizione del file.
40 SEND 5,"SALVE!"
riempiamo la quinta posizione con la stringa SALVE!
50 SEND 3,"ABBRACCI E BACI"
riempiamo la terza posizione con la stringa ABBRACCI E BACI, cancellando l'ARRIVEDERCI precedentemente inserito.
60 REL CLOSE
chiude il file aperto. E' chiaro che non possibile aprire pi file relativi contemporaneamente, dato che le istruzioni SEND e RECEIVE non fanno riferimenti al nome del file in questione.
Confessione e autocritica
Dobbiamo confessare una piccola cosa: l'ADP Basic, per come era stato pensato e ripensato al momento del concepimento, si sarebbe dovuto esaurire gi da un mese. Trattamento file relativi e definizione dei tasti F1-F8 non erano in programma. Diciamo che la continuazione avvenuta a gentila richiesta di alcuni lettori: "Un Tool che non definisce i tasti F1-F8?"..."E i file relativi che fine fanno"..." Per caso il 1541 di AdP non gestisce file relativi"..."Il comando VIEW non funziona coi file sequenziali" e molte altre frecciatine simili.
Va bene eccovi accontentati. Anche se stata dura: lo spazio rimasto a disposizione nei 4 K liberi del 64 era poco e malamente distribuito: solo qualche buco qua e l . Ci ci ha costretto a limitare la potenzialit di questi ultimi comandi, rimandando alla attenzione dell'utente il buon uso di questi. Ad esempio, il sistema non si accorge se un file relativo stato aperto prima di usare SEND e RECEIVE e roba di questo taglio. Comunque, sempre e solo inconvenienti non distruttivi. Se qualcosa sembrerebbe non andare per il verso giusto, basta spegnere le periferiche, eseguire la sequenza Run/Stop e Restore, e riaccedere le periferiche.
Un'altra considerazione va fatta in merito ai comandi vuoti. Un comando vuoto ... un comando che non c' . In ADP Basic non sono ammessi comandi vuoti. Ci spieghiamo meglio: se digitiamo
10 PRINT "CIAO"::GOTO200
(notare i due duepunti di seguito) abbiamo inserito nella linea 10 un comando vuoto contenuto tra i due duepunti. Quando attivo l'ADP Basic dando RUN sar segnalato un SYNTAX ERROR IN 10. Allo stesso modo non si potr scrivere su video:
:CAT
non essendo leciti i duepunti iniziali (per la precisione abbiamo digitato un comando vuoto, seguito di duepunti e dal comando CAT). Il lettore si convincer facilmente che perdere l'opportunit di inserire comandi vuoti non nemmeno contemplabile.
Una limitazione un po' pi seria, questa volta per proprio colpa della Commodore, sta nella impossibilit di inserire comandi ADP di seguito al THEN di un IF. Ad esempio, la linea:
10 IF A>0 THEN DRAW 100,100
non lecita (a meno di un piccolo trucchetto) in quanto dopo il THEN, se non c' un numero linea il controllo passato alla normale interpretazione dei comandi Basic e non alla EXECUTE STATEMENT di una qualsiasi estensione Basic. Sarebbe bastato un salto indiretto in pagina tre, invece del salto diretto alla routine (Evviva! ho trovato un buco nel CBM BASIC ! n.d.r.).
Per ovviare a questo inconveniente basta inserire i ":" tra il THEN e il DRAW, digitando:
10 IF A>0 THEN:DRAW 100,100
ma come? non avevamo detto che i comandi vuoti non erano leciti?
Esatto! Non dimentichiamo per che al momento del THEN il controllo passa al Basic standard che accetta comandi vuoti. La sequenza di operazioni dunque questa: dopo il THEN non c' un numero linea, il controllo ceduto alla EXECUTE STATEMENT del Basic standard. Questa trova i ":", non esegue nulla. Al giro successivo siamo nuovamente in ADP Basic, e possiamo eseguire il comando DRAW. Tutto procede secondo i piani.
Vedi anche:
ADPbasic parte 1
ADPbasic parte 2
ADPbasic parte 3
ADPbasic parte 4