' Rapid-Q by William Yu (c)1999-2000 . ' ================================================================================ ' Upload_il_tuo_script_su_Rapidq.it ' Capitolo_6__Scrivere_applicazioni_di_tipo_console ****** 6. Scrivere applicazioni di tipo console ****** Le applicazioni di tipo console sono facili da realizzare quanto le applicazioni Windows. Per creare applicazioni basate sul testo, è sufficiente compilare come CONSOLE anziché GUI. Probabilmente, troverete più facile apprendere i fondamentali di Rapid-Q (o del linguaggio Basic in generale) creando semplici programmi di tipo console e provando le vostre routine. Può essere inoltre un buon metodo per la messa a punto dei vostri programmi GUI. 6. 1 Sommario delle funzioni console. Un'applicazione console è un programma basato sul testo in grado di scrivere ed accettare input dalla console. Un'applicazione console, in Rapid-Q, è costituita da uno schermo visibile e 7 buffer non visibili. Ecco un sommario di alcune funzioni console: CLS - Pulire lo schermo PRINT - Scrivere output sullo schermo (visibile/non visibile) INPUT - Accettare input dall'utente PCOPY - Utilizzato per copiare da e nei buffer dello schermo LOCATE - Posizionare il cursore POS(0) - Rilevare la colonna corrente del cursore CSRLIN - Rilevare la riga corrente del cursore COLOR - Cambiare l'attributo colore del testo POKE - Inserire un attributo/carattere nello schermo PEEK - Rilevare un attributo/carattere dallo schermo SLEEP - Ritardare INKEY$ - Controllo non bloccante sulla tastiera Queste funzioni sono simili a quelle di QBasic. PEEK e POKE funzionano allo stesso modo, SLEEP è più preciso che non in QBasic (è possibile specificare una frazione di secondo, come in PowerBASIC). Notate che non è necessaria alcuna dichiarazione DEF SEG, in quanto stiamo operando in Windows. 6. 2 Esempio "Hello World" Rapid-Q è come la maggior parte dei linguaggi Basic, e permette di creare un programma hello world in una sola riga: PRINT "Hello World!" Compilate ed eseguite, ed avete appena creato dalla vostra prima inutile applicazione console per Windows! Passiamo a qualcosa di più interessante, copiare da e verso i buffer di schermo. CLS PRINT "Questa è la pagina 1" PCOPY 0, 1 '-- Copia la pagina visibile 0, nella pagina non visibile 1 CLS PRINT "Premi un tasto per vedere la pagina 1" DO:LOOP UNTIL INKEY$<>"" PCOPY 1, 0 '-- Copia la pagina non visibile 1, nella pagina visibile 0 Come potete vedere, la nostra pagina visibile è sempre 0. Le nostre pagine non visibili vanno da 1 a 7. PCOPY copia semplicemente l'intero buffer e lo mette in un altro. È possibile anche copiare un buffer non visibile in un altro, in questo modo: PCOPY 1,5 Il contenuto del buffer 1, è ora copiato nel buffer 5. Finora non c'è niente di nuovo rispetto a QBasic. Una nuova caratteristica è che era possibile scrivere in una qualsiasi pagina non visibile: PRINT #1, "Hi World!" '-- Scrivere nella pagina 1 L'esempio precedente scriverà la stringa "Hi World!" nella pagina non visibile 1. Assicuratevi di utilizzare il segno "#" altrimenti verrà interpretato come un numero. Per visualizzarlo, utilizzate PCOPY 1, 0. LOCATE e COLOR hanno lo stesso effetto nelle pagine non visibili. È possibile anche utilizzare PEEK e POKE nelle pagine non visibili, semplicemente fornendo un parametro addizionale, il primo dei quali è il numero della pagina in cui leggere/scrivere. 6. 3 Utilizzo di PEEK and POKE Se anche non avete mai utilizzato PEEK and POKE prima, non è un gran problema. In Rapid- Q, PEEK e POKE hanno stesso utilizzo che in QBasic (fatta eccezione per la possibilità di utilizzare PEEK e POKE nelle pagine non visibili). Gli indirizzi vanno da zero a 3999, in quanto le dimensioni dello schermo in Rapid-Q sono limitate a 80 x 25. Ma se 80 x 25= 2000, a cosa servono gli altri 2000? POKE 0, ASC("A") POKE 1, 15 Se eseguite questo codice, vedrete una lettera "A" bianca visualizzata nell'angolo superiore sinistro della consolle. Notate che un byte dello schermo contiene un carattere ed i suoi attributi. Tutti gli indirizzi con numerazione pari contengono i caratteri, il dispari contengono gli attributi. Se non sapete esattamente che cosa è un attributo, è semplicemente una combinazione di un colore in primo piano ed un colore di sfondo contenuta in un byte (8 bit). I 4 bit inferiori sono riservati per il colore in primo piano, ed i 4 bit superiori sono riservati per il colore dello sfondo. Se sapete qualcosa di bit e byte, potete facilmente calcolare l'attributo: B? = &H07 '-- 0 = sfondo, 7 = primo piano È possibile utilizzare i colori ad alta intensità per lo sfondo. Non è ancora supportato il lampeggio. 6. 4 Accettare input dell'utente Potete accettare input dall'utente tramite il comando INPUT, o con la funzione INKEY$. Il comando INPUT di Rapid-Q non è come il "normale" INPUT di Basic che probabilmente vi è familiare. Assomiglia più a LINE INPUT nel senso che attende una riga di informazione completa e termina solo quando l'utente preme il tasto invio. INPUT "What is your age? ", Age Una stringa fra virgolette può seguire un comando INPUT, quindi una virgola o punto e virgola, seguiti da una variabile. Il comando input immagazzinerà il risultato nella variabile, sotto forma di stringa o un numero. Il comando input si bloccherà finché l'utente non schiaccerà il tasto invio. Per input da tastiera non bloccanti, provate ad utilizzare INKEY$. Il suo utilizzo è un po' complesso all'inizio, ma consente di gestire la tastiera a piacere. Utilizziamo l'esempio precedente per mostrare l'uso di INKEY$. Tuttavia, in questa versione, possiamo personalizzare l'input e filtrare i caratteri non numerici. PRINT "What is your age? "; AGE$ = "" DO DO A$ = INKEY$ LOOP UNTIL LEN(A$) IF A$ = CHR$(13) THEN EXIT DO IF A$ >= "0" AND A$ <= "9" THEN PRINT A$;:AGE$=AGE$+A$ LOOP PRINT PRINT "You are "; AGE$; " years old." Notate che se premete un tasto non numerico, il carattere non è ripetuto. Questo avviene perché abbiamo limitato l'input ai caratteri 0..9. Nonostante questo esempio sia molto più lungo del precedente, abbiamo personalizzato il nostro input utilizzando INKEY$ e questo è molto più potente rispetto a INPUT. Un altro vantaggio di INKEY$ è che consente di utilizzare i tasti estesi. 6.5 Utilizzo dei tasti estesi I tasti estesi hanno una lunghezza di due byte, il primo byte è un carattere ESC, che può essere ignorato, ed il secondo byte è il codice virtuale del tasto. Nella versione Windows, è possibile aggiungere l'opzione per catturare tutti i tasti, compresi shift, ctrl, key, caps lock, num lock, scroll lock, e PopupMenu (se state utilizzando una tastiera specifica per Windows, non il tasto StartMenu, se esiste nella vostra tastiera). È possibile attivare/disattivare questa opzione in qualunque momento: $OPTION INKEY$ TRAPALL ' cattura tutti i tasti compresi shift, alt, ctrl, caps/num/scroll lock ' ed il tasto PopupMenu $OPTION INKEY$ DEFAULT ' cattura tutti i tasti estesi tranne quelli sopra indicati Se avete utilizzato QBasic, probabilmente conoscete i codici a memoria, e tutti i tasti virtuali utilizzati da Rapid-Q sono esattamente gli stessi che avete trovato in QBasic. Il codice che segue è un esempio di come catturare/dividere i tasti estesi, in particolare le frecce: DO DO A$ = INKEY$ LOOP UNTIL LEN(A$) IF LEN(A$) = 2 THEN SELECT CASE RIGHT$(A$, 1) CASE "P" PRINT "Premuto tasto freccia in giù." CASE "H" PRINT "Premuto tasto freccia in sù." CASE "M" PRINT "Premuto tasto freccia destra." CASE "K" PRINT "Premuto tasto freccia sinistra." CASE ELSE PRINT "Tasto esteso "; A$ END SELECT END IF LOOP UNTIL A$ = CHR$(27) Anche se non conoscete i codici, potete dedurli da questo esempio. 6.6 Mescolare CONSOLE e GUI Come avrete notato nell'esempio precedente, abbiamo mescolato alcune operazioni CONSOLE con altre GUI. Ciò è perfettamente valido fintanto che l'applicazione è stata compilata come CONSOLE. In Linux/Unix ci sono alcune strane differenze, fate riferimento alla guida sulla compatibilità per maggiori informazioni. Ad esempio, un'applicazione GUI per Linux/Unix può eseguire alcune operazioni CONSOLE come PRINT, INPUT, e CLS senza essere compilata come CONSOLE. 6.7 Console Linux/Unix Dal momento che la maggior parte dei terminali sono diversi fra di loro, alcune funzioni console non funzioneranno. Se il vostro terminale non sopporta il colore, non sarà visualizzato. Non dovrete preoccuparvi di questi problemi, in quanto Rapid-Q esegue un controllo degli errori per voi. Lo stesso discorso vale per i caratteri estesi, che non sono supportati da alcuni terminali. Tuttavia, la maggior parte dei terminali sopportano le frecce e i tasti Page up/down. È quasi certo che questi tasti funzioneranno per la maggior parte dei terminali. ' =============================================================================== ' 2003 Holyguard.net - 2007_Abruzzoweb