Come utilizzare le sequenze di Escape in linguaggio C
Nel linguaggio C l’istruzione printf contiene direttamente il codice di stampa del colore ad esempio il codice
“\x1b[32” indica che il colore del testo di scrittura nella Console è verde quindi un’istruzione di Output in C
del tipo printf(“\x1b[32 Hello World !”);
produce come effetto una stampa della scritta in colore Verde.
Invece una printf(“\x1b[42 Hello World”);
produce una stampa della scritta bianca su sfondo verde.
Tale approccio in linguaggio C è valido per ambienti “Unix/Linux” dove di default è abilitata la funzionalità “Virtual Termina”.
Nel sistema operativo Windows la questione è più complessa poiché la Console viene gestita diversamente e due sono gli approcci possibili: abilitare la funzionalità Virtual Termina da codice (è fatto nel programma in C), oppure sempre con l’inclusione della libreria “windo.h”.
All’inizio del programma occorre inserire le seguenti direttive:
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif
All’interno programma occorre inserire prima di utilizzare le sequenze di Escape le seguenti istruzioni:
// definisce il canle standard di output
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
// usa il canale handler per capire in quale modalità è settata la console
DWORD dwMode = GetConsoleMode(hOut, &dwMode);
// imposta il buffer della conole a virtual temrinal
dwMode = dwMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
// imposta la nuova modalità di output per la console *nix based
SetConsoleMode(hOut, dwMode);
Alla fine viene mostrato un programma in C che stampa una scritta colorata.
Nel linguaggio C++
Nel linguaggio C++ il codice in ambiente *nix è identifico a quello utilizzato in C con la differenza di aggiungere l’istruzione “cout” al posto dalla “printf”-
Il codice C++ di esempio definisce le costanti T_COLORE e SF_COLORE con i codici dei colori per il testo e per lo sfondo. Attraverso una semplice istruzione viene visualizzata una scritta rossa su sfondo verde.
#define T_MAGENTA "\x1b[35m"
#define T_CIANO "\x1b[36m"
#define T_WHITE "\x1b[37m"
#define SF_RED "\x1b[41m"
#define SF_VERDE "\x1b[42m"
#define SF_GIALLO "\x1b[43m"
#define SF_BLU "\x1b[44m"
#define SF_MAGENTA "\x1b[45m"
#define SF_CIANO "\x1b[46m"
#define SF_BIANCO "\x1b[47m"
#define RST_COLORE "\x1b[0m"
int main ()
{
cout <<T_ROSSO << SF_VERDE "Ciao mondo !" RST_COLORE<< endl;
return 0;
}
In ambiente Windows sono aggiunte le righe mostrate sopra-
Nella pagina sono presenti link di affiliazione su cui si ottiene una piccola quota dei ricavi, senza variazioni dei prezzi.