[FLUG] [CODE] ncurses
- From: Michele Mei - <mVentisette@xxxxxxxxx>
- To: fanolug@xxxxxxxxxxxxx
- Date: Sun, 23 Feb 2003 18:22:32 +0100
Ciao a tutti
PREMESSA
... in questa e nello scorso fine settimana ho avuto due pomeriggi
liberi nei quali mi sono divertito un po con Linux... in particolare ho
provato a programmare le ncurses, cioe' delle semplicissime, quanto
potentissime librerie semi-grafiche, per fare un esempio man, less,
mutt, BitchX, etc.. ect.. usano queste librerie per fare della
semi-grafica sulla console, utilizzare nei propri programmi queste
librerie e' molto semplice, anche per la mole di informazioni che si
posso avere delle numerose pagine man che si hanno a disposizione,
avventurarsi nelle ncurses e' davvero esaltante, una esperienza che
consiglio a tutti!
A conclusione della breve avventura, purtroppo superficiale, ho
preparato un programmino per ricordarmi in futuro le basi
fondamentali per utilizzarele.
...credo quindi che questo programmino possa interessare qualcuno... se
cosi' non fosse... scusatemi vi ho fatto scaricare qualche byte inutile
... :((
BODY
Il codice e' molto semplice per il fatto che non viene fatto uso di
nessun tipo di algoritmo, sono solo una serie di comandi in pieno stile
"Programmazione Imperativa", il passaggio piu' impegnativo sono una
while e un for.
Il codice e' stato commentato e indentato con "indent" per renderlo
maggiormente leggibile.
L'unica funzione non commentata e' mvprintw(X,Y,"Ciao Mondo");
e' uguale ad un printf solo che accetta due argomenti, la posizione da
cui incominciare a scrivere verticale e orizzontale, comunque per tutte
le funzioni potete fare il man nome_funzione.
Per compilare bisogna dire al compilatore che ci vogliono le librerie
ncurses in questo modo:
$ gcc -lncurses nome_programma.c
Il programmino di esempio e' un quiz ... :))
Io l'ho messo in esecuzione ogni volta che avvio ... mi ricorda come
sono fortunato ad avere una GNU/Linux :))
Allego il codice.
Saluti a tutti.
--
"... Dopo la battaglia il re potra' disporre a suo piacimento della mia testa,
ma durante la battaglia vorra' gentilmente permettermi di usarla." [cit.]
Michele Mei -m27- <mVentisette@xxxxxxxxx>
/*
* file: boot_faq.c
* author: Michele Mei <mVentisette@xxxxxxxxx>
* info: Giochino di esempio per imparare le minime cose indispensabili
per programmare le ncurses
* */
#include<ncurses.h>
/*
* ATTENZIONE:
* Precisazione.
* Ho deciso di utilizzare questo sistema di riferimento:
* ----(-)---Y---(+)--->
* |
* |
* (-)
* |
* X
* |
* (+)
* |
* */
#define X_POS_WIN 15
#define Y_POS_WIN 30
#define X_POS 15
#define Y_POS 30
int
main (void)
{
short my_green = 1; //Ogni set di colori che si usa deve avere un
suo riferimento
short my_win = 2;
short my_winr = 3;
char option = 0; //Ci leggo il valore di ritorno di getch();
int control; //Lo uso come contatore nella FOR
initscr (); //Se si usano le ncurses ci vuole sempre
start_color (); //Se si usano i colori ci vuole sempre
/*init_pair(variabile,TESTO,SFONDO) */
init_pair (my_green, COLOR_GREEN, COLOR_BLACK);
init_pair (my_win, COLOR_WHITE, COLOR_BLUE);
init_pair (my_winr, COLOR_BLUE, COLOR_WHITE);
attrset (COLOR_PAIR (my_green)); //Utilizza il set di colori chiamato
my_green
noecho (); //Non visualizza cio che scrivi a tastiera
mvprintw (X_POS, Y_POS,
"********************* BOOT - FAQ *********************");
mvprintw (X_POS + 1, Y_POS,
"* *");
mvprintw (X_POS + 2, Y_POS,
"* # Quale tra questi e' sicuramente il miglior *");
mvprintw (X_POS + 3, Y_POS,
"* # sistema operativo che si possa trovare ? *");
mvprintw (X_POS + 4, Y_POS,
"* *");
mvprintw (X_POS + 5, Y_POS,
"* < A > GNU/Linux *");
mvprintw (X_POS + 6, Y_POS,
"* < B > GNU/HURD *");
mvprintw (X_POS + 7, Y_POS,
"* < C > *BSD *");
mvprintw (X_POS + 8, Y_POS,
"* < D > Microsoft Windows *");
mvprintw (X_POS + 9, Y_POS,
"* *");
mvprintw (X_POS + 10, Y_POS,
"******************************************************");
mvprintw (X_POS + 11, Y_POS,
"* < A > < B > < C > < D > *");
mvprintw (X_POS + 12, Y_POS,
"******************************************************");
mvprintw (47, 0,
"----- SPACE per confermare la tua risposta
-----------------------------------------------------------------------------------------");
mvprintw (X_POS + 11, Y_POS + 45, " "); //Riporta il cursore in < D >
/*Legge ... fino a che non SPACE */
option = getch ();
while (option != 32)
{
option = getch ();
}
attrset (COLOR_PAIR (my_win)); //Cambio colori
mvprintw (0, 0, ""); //Riporto il cursore in 0,0
for (control = 0; control < 50; control++) //Metto uno sfondo BLU
{
printw
("
\n");
}
attrset (COLOR_PAIR (my_winr)); //Cambio colori
mvprintw (X_POS_WIN, Y_POS_WIN + 25, "Slackware GNU/Linux 8.1");
attrset (COLOR_PAIR (my_win)); //Cambio colori
mvprintw (X_POS_WIN + 2, Y_POS_WIN,
"Si e' verificato un errore irreversibile 06 in 07E7:0000075F");
mvprintw (X_POS_WIN + 3, Y_POS_WIN,
"L'applicazione corrente verra' terminata.");
mvprintw (X_POS_WIN + 5, Y_POS_WIN,
" * Premere qualsiasi tasto per far terminare l'applicazione.");
mvprintw (X_POS_WIN + 6, Y_POS_WIN,
" * Premere CTRL-ALT-CANC per riavviare il computer. Verranno");
mvprintw (X_POS_WIN + 7, Y_POS_WIN,
"perse tutte le informazioni non salvate di tutte le
applicazioni.");
mvprintw (X_POS_WIN + 9, Y_POS_WIN,
" Premere un tasto per continuare");
getch (); //Aspetto un carattere
endwin (); //Chiudo tutto cio che e' ncurses ...
return 0; //Amato kernel ... a te il controllo ... :))
}
Other related posts: