{"id":25957192,"date":"2024-03-12T15:30:20","date_gmt":"2024-03-12T14:30:20","guid":{"rendered":"https:\/\/msxitalia.org\/?p=25957192"},"modified":"2024-03-12T15:30:20","modified_gmt":"2024-03-12T14:30:20","slug":"lezione-25-gestione-errori-tasti-funzione-e-interruzione-programmi","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/lezione-25-gestione-errori-tasti-funzione-e-interruzione-programmi\/","title":{"rendered":"LESSON 25 \u2013 ERROR MANAGEMENT, FUNCTION KEYS AND PROGRAM INTERRUPTION"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Buongiorno a tutti. <br \/>Come avevo accennato nella puntata scorsa, parler\u00f2 della gestione degli errori, come poter lavorare con i tasti funzione e controllare il tasto STOP.<br \/>L&#8217;errore che si commette spesso \u00e8 il cosiddetto errore di battitura, vedremo apparire sullo schermo il classico SYNTAX ERROR. Fortunatamente il nostro MSX ci riporta la riga dove \u00e8 avvenuto e possiamo controllarla per fare le correzioni. Il problema \u00e8 quando si verificano errori pi\u00f9 gravi, cio\u00e8 un errore dovuto ad una funzione o dato impostato errato. Per fare un esempio banale, quando una matrice va sotto lo zero, perch\u00e9 nei nostri calcoli non abbiamo messo un controllo che questo avvenga. In questo caso, L&#8217;MSX ha segnalato l&#8217;errore in quella linea, ma effettivamente l&#8217;errore \u00e8 stato commesso prima. Questo per farvi capire che non sempre risolveremo i nostri problemi con la gestione errori. Per poter avviare la routine metteremo all&#8217;inizio del programma: ON ERROR GOTO Numero di linea. Nel momento che si verifica un qualsiasi errore l&#8217;esecuzione verr\u00e0 mandata al linea indicata nel comando. Alla fine della routine usiamo la funzione RESUME per far ritornare l&#8217;esecuzione al punto dove \u00e8 stato interrotto. Ci sono 3 diversi modi per usare RESUME; RESUME Numero linea, rimander\u00e0 il programma alla linea specificata. RESUME NEXT, che lo sposter\u00e0 alla linea successiva dove \u00e8 avvenuto l&#8217;errore ed infine RESUME [0] che far\u00e0 rieseguire la linea dove \u00e8 stato commesso l&#8217;errore. Possiamo anche sapere in quale linea \u00e8 avvenuto l&#8217;errore e il suo codice con le funzioni ERL e ERR. ERL ci dice la linea ed ERR il codice (I codici errore li potete vedere in qualsiasi manuale o libro che parla di MSX Basic). C&#8217;\u00e8 anche la possibilit\u00e0 di simulare un errore con la funzione ERROR Codice Errore. Come codice errore prenderemo un errore non contemplato nella tabella, che vanno dal 72 al 255. Per disattivare l&#8217;intercettamento errori, scriveremo: ON ERROR GOTO 0. Di seguito inserisco un piccolo programma per far capire meglio.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">10 ON ERROR GOTO 1000<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&#8230;&#8230;..<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">100 INPUT &#8220;Inserire IL nome del file&#8221;; N$ : OPEN N$ FOR INPUT AS #1<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&#8230;&#8230;.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">500 IF LEN(f$) &gt; 30 THEN ERROR 100<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&#8230;&#8230;&#8230;&#8230;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">1000 IF ERR=66 THEN PRINT &#8220;Disco pieno. Cambiare il disco e premere spazio per continuare&#8221;: GOTO 1040<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">1010 IF ERR=53 THEN PRINT&#8221; Il file non esiste. Inserire il nome corretto&#8221;: RESUME<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">1020 IF ERR=100 THEN PRINT &#8220;Frase troppo lunga&#8221;: RESUME NEXT<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">1030 PRINT &#8220;Errore N\u00b0; ERR; &#8220;alla linea&#8221;; ERL; &#8220;programma terminato&#8221;: ON ERROR GOTO 0: END<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">1040 IF INKEY$&lt;&gt;CHR$(32) THEN 1030 ELSE RESUME 0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Faccio il caso che il nostro programma gestisca tanti files. Nella prima linea della subroutine intercettamento errori cio\u00e8 la 1000, quando il disco sar\u00e0 pieno ci dar\u00e0 la possibilit\u00e0 di cambiarlo, ripetendo l&#8217;operazione. RESUME o RESUME 0 sono la stessa cosa. Nella Linea 1010, intercetta l&#8217;errore alla linea 100 o simili e ci da la possibilit\u00e0 di reinserire il nome del file. La Linea 1020 sar\u00e0 processata con l&#8217;errore codice 100 creato alla linea 500, al verificarsi di una frase pi\u00f9 lunga del dovuto. Il programma rientra alla linea successiva (RESUME NEXT), ma potevo benissimo rimandarlo alla linea d&#8217;inserimento: RESUME Numero Linea. L&#8217;ultima linea, la 1030 entra in esecuzione solo quando ha riscontrato un errore non previsto dal programma, a questo punto ci dice dove \u00e8 avvenuto e il suo codice, disattivata la routine ed esce.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Il comando KEY pu\u00f2 essere usato per disabilitare la visualizzazione della linea in fondo allo schermo, scrivendo KEY OFF. Se vogliamo farla riapparire scriveremo KEY ON, se invece vogliamo visualizzare tutta la lista sullo schermo scriveremo KEY LIST. I 10 tasti funzione sono programmabili, per cambiare la descrizione di uno dei tasti scriveremo: KEY Numero Tasto, &#8220;Testo&#8221;. Il numero tasto va da 1 a 10, il testo potr\u00e0 essere lungo al massimo 15 caratteri, ma nella linea inferiore dello schermo vedremo solo 7 caratteri per tasto, per problemi di spazio. Possiamo usare anche i caratteri speciali. Esempio: KEY 1,&#8221;PRINT&#8221; + CHR$(34) + &#8220;CIAO&#8221; + CHR$(34) + CHR$(13) . Per attivare l&#8217;intercettamento dei tasti funzione useremo il comando ON KEY GOSUB Numero Linea, Numero linea, eccetera. Possiamo inserire fino a 10 numeri di linea per quanto sono i tasti funzione. Possiamo anche saltarne uno lasciando un spazio vuoto. Ad esempio, vogliamo utilizzare i tasti F1, F2 e F4, la nostra linea sar\u00e0 cos\u00ec scritta: ON KEY GOSUB 1000,2000,,3000. Come tutti gli interrupt che ho spiegato in precedenza, per attivarli hanno bisogno di un altro comando: KEY (Numero Tasto) ON, se vogliamo disattivarli metteremo OFF o STOP per sospenderli.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">100 ON KEY GOSUB 1000,2000,,3000: KEY(1)ON: KEY(2)ON: KEY(4)ON<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se vogliamo che un programma non venga bloccato con il tasto STOP, all&#8217;inizio inseriremo la seguente linea: ON STOP GOSUB Numero Linea e subito dopo lo attiveremo, aggiungendo STOP ON. Con STOP OFF lo disattiviamo, mentre con STOP STOP lo sospendiamo. Nella subroutine possiamo inserire una frase oppure solo la funzione RETURN. Il comando STOP pu\u00f2 essere usato anche per fare i controlli nei programmi. Per fare un esempio, vogliamo vedere cosa succede ad un determinato punto del suddetto, inseriremo il comando a tale punto per stopparlo cos\u00ec potremo fare i nostri controlli. C&#8217;\u00e8 la possibilit\u00e0 di fare partire il programma dal punto interrotto usando il comando CONT. Quest&#8217;ultimo lo possiamo usare anche se l&#8217;interruzione \u00e8 stata fatta con il tasto STOP, ma per portelo usare ci devo essere i presupposti giusti, altrimenti l&#8217;MSX segnaler\u00e0 un messaggio d&#8217;errore : &#8220;Can&#8217;t continue&#8221;.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Anche questa puntata \u00e8 giunta al termine. Ringrazio ancora tutte le persone che stanno seguendo questa lunga rubrica. Alla prossima \ud83d\ude42<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Buongiorno a tutti. Come avevo accennato nella puntata scorsa, parler\u00f2 della gestione degli errori, come poter lavorare con i tasti funzione e controllare il tasto STOP.L&#8217;errore che si commette spesso \u00e8 il cosiddetto errore di battitura, vedremo apparire sullo schermo il classico SYNTAX ERROR. Fortunatamente il nostro MSX ci riporta la riga dove \u00e8 avvenuto [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":6311,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[14],"tags":[],"dipi_cpt_category":[],"class_list":["post-25957192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msx-basic"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/25957192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/comments?post=25957192"}],"version-history":[{"count":6,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/25957192\/revisions"}],"predecessor-version":[{"id":25957213,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/25957192\/revisions\/25957213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media\/6311"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=25957192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=25957192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=25957192"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=25957192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}