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 ... :)) }