Nell’articolo precedente abbiamo introdotto l’uso delle librerie ncurses ed abbiamo fatto alcuni esempi per mostrare un approccio pratico alla programmazione del terminale in Linux. Questa volta approfondiremo l’argomento parlando dell’inizializzazione della libreria e l’uso dei caratteri speciali che la volta scorsa avevamo soltanto introdotto.
Vediamo innanzitutto le costanti ed i tipi di dato definiti nella libreria:
Per quanto riguarda i nomi delle funzioni, la libreria adotta alcune convenzioni utili a rendere più sintetici i programmi. Data una generica funzione di output, che chiameremo f(parametri), sono possibili le seguenti varianti:
Normalmente, se non si specifica nessuna finestra, l’output avviene su stdscr. Se non si specifica nessuna posizione per il cursore, i caratteri sono scritti o letti a partire dalla posizione corrente. Da notare che le coordinate del cursore sono formate dalla riga e dalla colonna, il punto (0,0) si trova in alto a sinistra dello schermo, le x ( colonne ) crescono verso destra e le y ( righe ) verso il basso.
Come abbiamo visto nello scorso articolo, prima di utilizzare la libreria è necessario inizializzarla con la funzione initscr() che alloca lo spazio in memoria per le variabili curscr e stdscr ed inoltre inserisce i valori a LINES e COLS.
#include “ncursesw/curses.h”
int main(int argc, char** argv)
{
initscr();
printw(“Lo schermo ha %d righe e %d colonne\n\n”, LINES, COLS);
addstr(“Premere un tasto per chiudere l’applicazione”);
refresh();
getch();
endwin();
return 0;
}
Per compilare il programma ricordo che dovete dare il comando:
gcc -Wall -o test test.c -lncursesw
con il file sorgente che si chiama test.c ( maggiori informazioni sulla compilazione in Linux potete trovarli in questo articolo ). Dopo initscr() è facoltativa la chiamata di una o più delle seguenti funzioni:
Ecco quindi una tipica inizializzazione che noi inseriremo in una funzione che verrà richiamata ogni volta che si deve inizializzare la libreria.
…
void InitLib()
{
initscr();
if (has_colors())
start_color();
cbreak();
nonl();
keypad(stdscr, TRUE);
meta(stdscr, TRUE);
noecho();
}
…
Ncurses dispone di alcune funzioni per il disegno di linee o bordi con dei caratteri speciali che possono essere inoltre inseriti tramite la funzione addch().
Vediamo un esempio su come sfruttare quello che abbiamo imparato in questo articolo.
#include “ncursesw/curses.h”
void InitLib()
{
initscr();
if (has_colors())
start_color();
cbreak();
nonl();
keypad(stdscr, TRUE);
meta(stdscr, TRUE);
noecho();
}
int main(int argc, char** argv)
{
e=”font-size: x-small;”> InitLib();
mvhline(5, 20, ‘-‘, 40);
mvhline(15, 20, ‘-‘, 40);
mvvline(5, 20, ‘|’, 10);
mvvline(5, 60, ‘|’, 10);
mvaddstr(10, 30, “BENVENUTI IN NCURSES”);
mvaddstr(19, 1, “Premere un tasto per chiudere il programma…”);
refresh();
getch();
endwin();
return 0;
}
In questo semplicissimo esempio abbiamo utilizzato le funzioni che abbiamo spiegato in questo articolo, come si può notare è ottimizzato solo per terminali 80 x 20, ma in futuro prenderemo in esame altre funzioni ed altre caratteristiche di questa potente libreria per terminali Linux e potremmo così creare dei programmi molto più elaborati.
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→