
Le prove e le esercitazioni sul linguaggio C effettuate fino ad ora sono state svolte su uno schermo grezzo in bianco e nero. Le visualizzazioni si sono succedute sequenzialmente ed in modo discendente risultando, diciamolo pure, un po' brutte a vedersi. La lezione di oggi verte proprio su tale argomento. Vedremo come abbellire le nostre videate, dando loro un certo ordine di posizionamento. Impareremo anche a colorare l'output, a posizionare il cursore in qualunque posizione, a modificare gli attributi del video e a conferire all'intero schermo di console un aspetto graficamente più gradevole, restando tuttavia in modalità testuale. Tutto questo è possibile utilizzando le miracolose sequenze di Escape.
Introduzione
L'occhio, si sa, vuole sempre la sua parte. Non basta che il programma da noi prodotto sia estremamente efficiente, potente e veloce. Se esso non dispone di una adeguata interfaccia grafica, magari un po' più amichevole, difficilmente l'utente finale amerà il nostro lavoro. Questo discorso, a maggior ragione, vale per i software scritti con il linguaggio C e il compilatore GCC. L'efficienza è, in questo caso, massima ma non si può dire altrettanto dell'aspetto grafico ed estetico. Sono molte, infatti, le caratteristiche che, normalmente, non sono presenti in un programma scritto in linguaggio C:
- La possibilità della cancellazione e della pulizia dello schermo.
- La gestione del cursore e posizionamento libero dei dati sul video.
- La facoltà di colorare a piacimento i messaggi e le scritte sul video.
E' sufficiente implementare questi tre concetti nei propri lavori, per ottenere un prodotto finale molto più amichevole ed usabile. In ogni caso stiamo parlando sempre di un ambiente "a console" ed in modalità testo, che è ben lungi da qualsiasi paragone con le interfacce GUI. Ma per piccoli sistemi di domotica, automatizzazione e controllo, già queste peculiarità sono più che sufficienti. Gli stessi concetti sono propedeutici per nostri futuri esperimenti con le porte di I/O, con le quali interagiremo utilizzando gradevoli interfacce a video ed amichevoli menù di comando.
Il controllo del video
Sino ad ora, per visualizzare dei risultati o dei messaggi, abbiamo utilizzato in modo abbondante la funzione printf(). Essa, ricordiamolo, ha lo scopo di inoltrare a video qualsiasi sequenza di dati e di informazioni. Per il suo utilizzo si vedano le puntate precedenti del presente corso. Tale funzione si limita ad accodare sul video, per la precisione verso lo standard output (STDOUT), le informazioni, che il video gestisce in maniera "discendente". In altre parole, ogni chiamata alla funzione inoltra l'informazione a video, scrivendola una sotto l'altra. Se si raggiunge il limite inferiore del monitor, la videata scorre verso l'alto, effettuando il cosiddetto "scrolling-up" ed eliminando le informazioni dalla sommità dello schermo. Un eventuale buffer video non sarebbe capace di contenere eventuali numerose informazioni. Il seguente esempio chiarisce meglio il concetto. Si abbia il seguente listato:
#include "stdio.h" int main() { int k; for(k=1;k<=1000;k++) printf("%4d %7d %10d\n",k,k*k,k*k*k); return 0; }
Si tratta di un conteggio nel quale sono visualizzati, nell'ordine, un numero progressivo (da 1 a 1000), il suo quadrato e il suo cubo. L'esecuzione causa una lunghissima sequenza di risultati che, oltre a risultare graficamente non gradevole, rende impossibile la consultazione dei precedenti valori, ormai scomparsi verso l'alto. La figura 1 mostra il risultato dell'esecuzione del programma.
Le sequenze di Escape
Per ottenere un maggiore controllo del video, specialmente nei sistemi Unix e Linux, si possono usare utilmente le sequenze di Escape. Si tratta di particolari sequenze di caratteri che, inviate allo schermo tramite opportuna funzione (printf() o altra) ,producono svariati risultati e modificano il normale flusso dei dati. Si chiamano anche caratteri di controllo. Sono, in pratica, delle successioni di caratteri non visualizzabili, che [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2571 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Per implementare una gui con C in raspberry si dovrebbe, per esempio, installare le librerie gtk.
Ottimo corso e spiegazioni molto esaurienti! I manuali di C non spiegano queste funzioni grafiche, mi piacerebbe se alla fine del corso ci spegassi come usare le librerie GUI in C.
Grazie per questo bellissimo corso Giovanni!
Ciao
Grazie,
penso che le GUI saranno trattate,,,,,,,,
Bellissima lezione, molto interessanti le possibilità grafiche in modalità testo.
A proposito di bicicletta, hai realizzato un’interfaccia da collegare a una cyclette? Mi interesserebbe poter applicare la cosa a un sistema di rulli che si usa per pedalare in casa. Ne conosci per caso qualche marca che consente di prelevare i segnali in uscita?
Stavo sperimentando con gli esempi proposti, usando MinGW per Windows.
Purtroppo le sequenze di Escape non vengono riconosciute dalla consolle di Windows.
Ciao grazie dei complimenti.
PEr l’interfaccia non ho realizzato nulla. Il contatto proveniente dalla cyclette è un semplice contattore Aperto/Chiuso, quindi basta solo implementare una semplice resistenza di pull-up o pull down ad una porta del Raspberry (o altro micro)..
In effetti, per fare le cose per bene, si potrebbe pulire tale segnale di contatto, magari facendolo entrare ad una porta logica buffer.
Per il Windows, non sopporta le sequenze di Escape. Forse col Cygwin funzionano….
Ciao
Dove posso trovare un elenco completo delle sequenze di escape esistenti?
Qui sotto un elenco.
Su Internet trovi senz’altro ulteriori informazioni.
Sequenze di Escape
\a BELL (Campanello o beep)
\b Backspace (cancella carattere a sinistra del cursore)
\f INIZIO PAGINA (Form Feed o )
\n A capo (NewLine o )
\r Inizio riga (Carriage return o )
\t Tabulatore
\v Tabulatore verticale
\\ Barra rovescia (BackSlash )
\’ Apostrofo (o virgoletta semplice)
\” Virgolette ()
\0 NULL (Terminatore Stringa)
\o Numero ottale
\x Numero Esadecimale
\? Punto interrogativo ()
non possibile scaricarla in PDF?
Salve Paolo, puoi scaricare l’intero corso in pdf a questo link:
https://it.emcelettronica.com/eos-book-a-corso-c-su-raspberry-pi-partendo-da-zero