C e ncurses

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
[paZx]
Prode Principiante
Messaggi: 90
Iscrizione: giovedì 17 febbraio 2005, 20:57

C e ncurses

Messaggio da [paZx] »

Ciao a tutti,
sto cercando di fare un programmino in C con le librerie ncurses. Il codice del mio programma è:

Codice: Seleziona tutto

#include <stdio.h>
#include <ncurses.h>
#include <signal.h>

int check_keys(void);

main(int argc, char *argv[])
	{

		/* Dati ’non-ncurses’ */
		int key=0, finestra, finestra2;
		int dato1=0, dato2=0;
		bool first=false;

		
		/* Inizializzazioni ncurses */
		(void) initscr(); 	/* inizializza la libreria curses */
		keypad(stdscr, TRUE); 	/* abilita la mappatura della tastiera */
		(void) nonl();  	/* non convertire NL->CR/NL in output */
		(void) cbreak(); 	/* prende i caratteri in input uno alla volta, senza attendere il \n */
		(void) noecho(); 	/* nessuna echo dell’input */
	        (void) nodelay(stdscr, true);	
		
		/* Colori per ncurses */
		start_color();	
		init_pair(1, COLOR_WHITE, COLOR_BLACK);
		init_pair(2, COLOR_GREEN, COLOR_GREEN);
		init_pair(3, COLOR_WHITE, COLOR_BLUE);
		init_pair(4, COLOR_CYAN, COLOR_CYAN);
		init_pair(5, COLOR_WHITE, COLOR_WHITE);
		init_pair(6, COLOR_MAGENTA, COLOR_MAGENTA);
		init_pair(7, COLOR_BLUE, COLOR_BLUE);
		init_pair(8, COLOR_YELLOW, COLOR_YELLOW);

		/* Colora lo sfondo della pagina */
		bkgd(COLOR_PAIR(3));
		mvprintw(11,2,"Dato 1:");	// Stampa il commento del dato 1
		mvprintw(21,2,"Dato 2:");	// Stampa il commento del dato 2
		refresh();
			  
		
		for(;;) {
			
			/* Crea la finestra per il primo dato */
			finestra=newwin(3,16,10,20);
			wbkgd(finestra,COLOR_PAIR(3));
			box(finestra,ACS_VLINE,ACS_HLINE);	// Bordi della finestra			
			mvwprintw(finestra,1,2,"%d",dato1);	// Stampa il dato nella finestra
			
			/* Crea la finestra per il secondo dato */
			finestra2=newwin(3,16,20,20);
			wbkgd(finestra2,COLOR_PAIR(3));
			box(finestra2,ACS_VLINE,ACS_HLINE);	// Bordi della finestra			
			mvwprintw(finestra2,1,2,"%d",dato2);	// Stampa il dato nella finestra
	
			if((key=getch())==KEY_EXIT) 
				break; 
			
			else if((key=getch())==ERR) {
				
				
				
				if(first==false){
					wrefresh(finestra2);
					first=true;
				}

				if(dato1<10000){
					dato1++;
					wrefresh(finestra);
					}
				else {
					dato2++;
					dato1=0;
					wrefresh(finestra);
					wrefresh(finestra2);
					}
		
				}		
			}
		
		delwin(finestra);
		delwin(finestra2);
		endwin();
	
}
Il problema è che premendo Esc non termina l'applicazione.. qualcuno riesce a darmi una mano?  ???

Grazie
Avatar utente
pierba
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14532
Iscrizione: sabato 26 febbraio 2005, 19:10

Re: C e ncurses

Messaggio da pierba »

Hai installato i compilatori? Di default non vengono installati; devi aggiungere i pacchetti build-essential e libncurses5-dev.


ciao
Pietro pagina personale - Avete domande sul forum? Leggendo le FAQ: potreste trovare la risposta.
La conoscenza deve essere collettiva, quindi, come da regolamento (Sez. II punto 15) i messaggi personali contententi richieste di assistenza tecnica verranno ignorati.
Avatar utente
[paZx]
Prode Principiante
Messaggi: 90
Iscrizione: giovedì 17 febbraio 2005, 20:57

Re: C e ncurses

Messaggio da [paZx] »

Ho tutto il necessario, infatti a parte qualche warning compila tutto, ma in esecuzione non esce dal programma come mi apsetto.. anzi non ne esce proprio, se premo Esc si ferma l'incremento di dato1 per 1 secondo e poi ricomincia. Per fermare l'applicazione devo usare Ctrl+c ma questo impedisce la corretta chiusura di finestre varie e mi riame tutto in memoria causando problemi vari.

Ciao
Avatar utente
NuSYS
Prode Principiante
Messaggi: 177
Iscrizione: lunedì 14 marzo 2005, 13:55

Re: C e ncurses

Messaggio da NuSYS »

Per prima cosa stampa l'output dell'int key.
Vedi che valore ti restituisce...
Avatar utente
[paZx]
Prode Principiante
Messaggi: 90
Iscrizione: giovedì 17 febbraio 2005, 20:57

Re: C e ncurses

Messaggio da [paZx] »

NuSYS ha scritto: Per prima cosa stampa l'output dell'int key.
Vedi che valore ti restituisce...
Infatti.. il tasto Esc corrisponde all'int 27 e non all'int 551 di KEY_EXIT.
A questo punto mi chiedo a cosa corrispondono i valori dei vari KEY_ in ncurses.h.. googlerò un pò.

Grazie NuSYS
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti