Articolo pubblicato sul n. 39 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel marzo 1985
Commodore 64 (quinta parte) 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 De Prisco 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.
Impaginato originale... Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui |