Introdução


Para quem não sabe o NCURSES é uma biblioteca capaz de dar funcionalidade a terminais a base de texto. Com ela os seus programas poderão:
O NCURSES é desenvolvida sob a licença GNU/Linux. Para obter a última versão, informações detalhadas e outras ligações relativas à ncurses, visite: www.gnu.org/software/ncurses/.
Para efetuar o download d ncurses é só clicar aqui: ncurses-5.9.tar.gz

Compilando programas que utilizam o NCURSES

Para utilizarmos a biblioteca NCURSES devemos primeiramente incluir a biblioteca em nosso programa. Para isso devemos ter a linha de comando #include <curses.h> no topo de nosso código fonte.
Ao compilarmos nossos programas colocaremos o parâmetro -lncurses, como no exemplo abaixo:
gcc meuprograma.c -o meuprograma -lncurses

Primeiro exemplo

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -l ncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>

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

   initscr(); /* Esta função  inicializa o ncurses. Para todos os programas devemos sempre inicializar a ncurses e depois finalizar, como veremos adiante. */
   keypad(stdscr, true); // Insira este comando para pegar todas as teclas

   printw("Precione qualquer tecla para sair.");
   getch();
   endwin(); /* Sempre que finalizarmos um programa com a biblioteca curses, devemos executar este comando. */

   return 0;

}
Comandos:
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
Precione qualquer tecla para sair.

Alterandos as cores

COLOR_BLACK (Preto)
COLOR_RED (Vermelho)
COLOR_GREEN (Verde)
COLOR_YELLOW (Amarelo)
COLOR_BLUE (Azul)
COLOR_MAGENTA (Magenta)
COLOR_CYAN (Ciano)
COLOR_WHITE (Branco)

Alterando a cor de fundo da tela

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -l ncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>

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

   initscr();
   keypad(stdscr, true); // Insira este comando para pegar todas as teclas

   // Abaixo estamos definindo os pares de cores que serão utilizados no programa
   start_color(); // Esta função torna possível o uso das cores

   init_pair(1,COLOR_WHITE,COLOR_BLUE); // Texto(Branco) | Fundo(Azul)
   bkgd(COLOR_PAIR(1));  // Aqui nós definiremos que a cor de fundo da tela.

   printw("Precione qualquer tecla para sair.");
   getch();
   endwin();

   return 0;

}
Comandos:
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
Precione qualquer tecla para sair.

Alterando a cor da fonte

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -l ncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>

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

   initscr();
   keypad(stdscr, true);

   start_color(); // Esta função torna possível o uso das cores
   // Fundo da Tela
   init_pair(1,COLOR_WHITE,COLOR_YELLOW); // Texto(Branco) | Fundo(Amarelo)
   bkgd(COLOR_PAIR(1));  // Aqui nós definiremos que a cor de fundo da tela.

   init_pair(2,COLOR_RED,COLOR_WHITE);    //Texto(Vermelho) | Fundo(Branco)
   attron(COLOR_PAIR(2)); // Estamos alterando a cor da letra
   printw("Texto Vermelho Fundo Branco\n");

   init_pair(3,COLOR_WHITE,COLOR_BLUE);   //Texto(branco) | Fundo(Azul)
   attron(COLOR_PAIR(3)); // Estamos alterando a cor da letra
   printw("Texto Branco   Fundo Azul  \n");

   init_pair(4,COLOR_WHITE,COLOR_GREEN);   //Texto(branco) | Fundo(Verde)
   attron(COLOR_PAIR(4)); // Estamos alterando a cor da letra
   printw("Texto Branco   Fundo Verde \n");

   init_pair(5,COLOR_BLACK,COLOR_WHITE);   //Texto(preto) | Fundo(branco)
   attron(COLOR_PAIR(5)); // Estamos alterando a cor da letra
   printw("Precione qualquer tecla para sair.");
   getch();
   endwin();

   return 0;

}
Comandos:
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
Texto Vermelho Fundo Branco
Texto Branco Fundo Azul
Texto Branco Fundo Verde
Precione qualquer tecla para sair.

Limpando a tela

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -l ncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>

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

   initscr();
   keypad(stdscr, true);

   start_color(); // Esta função torna possível o uso das cores
   // Fundo da Tela

   init_pair(1,COLOR_WHITE,COLOR_YELLOW); // Texto(Branco) | Fundo(Amarelo)
   bkgd(COLOR_PAIR(1));  // Aqui nós definiremos que a cor de fundo da tela.

      init_pair(2,COLOR_RED,COLOR_WHITE);    //Texto(Vermelho) | Fundo(Branco)
      attron(COLOR_PAIR(2)); // Estamos alterando a cor da letra
      printw("Tela 1\n");
   getch();

   clear();
      init_pair(3,COLOR_WHITE,COLOR_BLUE);   //Texto(branco) | Fundo(Azul)
      attron(COLOR_PAIR(3)); // Estamos alterando a cor da letra
      printw("Tela 2\n");
   getch();

   clear();
      init_pair(4,COLOR_WHITE,COLOR_GREEN);   //Texto(branco) | Fundo(Verde)
      attron(COLOR_PAIR(4)); // Estamos alterando a cor da letra
      printw("Tela 3\n");
   getch();

   clear();
      init_pair(5,COLOR_BLACK,COLOR_WHITE);   //Texto(preto) | Fundo(branco)
      attron(COLOR_PAIR(5)); // Estamos alterando a cor da letra
      printw("Precione qualquer tecla para sair.");
   getch();

   endwin();

   return 0;

}
Comandos:
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
Tela 1
<precione qualquer tecla>
Tela 2
<precione qualquer tecla>
Tela 3
<precione qualquer tecla>
Precione qualquer tecla para sair.
<precione qualquer tecla>

Usando o Teclado

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -l ncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>

int tecla=0;

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

   initscr();
   keypad(stdscr, true); // Insira este comando para pegar todas as teclas

   move(10,10); printw("Com echo(), a tecla é mostrada");
   move(11,10); printw("Tecla = \"");
   echo(); // Com echo(), a tecla é mostrada
   tecla = getch();
   printw("\" Num = %d", tecla);

   move(12,10); printw("Com noecho(), a tecla não é mostrada\n");
   move(13,10); printw("Tecla = \"");
   noecho(); // Com noecho(), a tecla não é mostrada
   tecla = getch();
   printw("\" Num = %d", tecla);

   move(14,10); printw("Pressione qualquer tecla para sair");
   getch(); // Sair

   endwin();

   return 0;

}
Comandos
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
          Com echo(), a tecla é mostrada
          Tecla = "d" Num = 100
          Com noecho(), a tecla não é mostrada
          Tecla = "" Num = 100
          Pressione qualquer tecla para sair

Configurando o Teclado

Arquivo: Exemplo.c
// configurando o teclado
#include <curses.h>
#include <stdio.h>

int tecla = 0;

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

   initscr();
   keypad(stdscr, true);

   system("setxkbmap us"); /* <- Este comando configura o teclado para Americano. */

   move(10,10); printw("Com echo(), a tecla é mostrada");
   move(11,10); printw("Tecla = \"");

   echo(); tecla = getch();

   printw("\" Num = %d", tecla);

   system("setxkbmap -model abnt2 -layout br"); /* <- Este comando configura o teclado para Português/Brasil */

   move(14,10); printw("Pressione qualquer tecla para sair");
   getch(); // Sair

   endwin();
 
  return 0;
}
Comandos
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
          Com echo(), a tecla é mostrada
          Tecla = "d" Num = 100
          Pressione qualquer tecla para sair

Usando o comando nodelay

Arquivo: Exemplo.c
// configurando o teclado
#include <curses.h>
#include <stdio.h>

int tecla = ERR;

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

   initscr();
   keypad(stdscr, true);

   nodelay(stdscr,true);   // Abilita a entrada nonblocking

   do{
      move(10,10); printw("Precione qualquer tecla: ");
      tecla=getch();
   }while(tecla==ERR);

   nodelay(stdscr,false);   // Desabilita a entrada nonblocking

   move(11,10); printw("Você precionou a tecla = %d", tecla);
   getch();

   endwin();
 
  return 0;
}
Comandos
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
          Precione qualquer tecla: d
          Você precionou a tecla = 100

Tornando visível ou invisível o cursor do Terminal

Arquivo: Exemplo.c
// configurando o teclado
#include <curses.h>
#include <stdio.h>

int tecla = ERR;

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

   initscr();
   keypad(stdscr, true);

   curs_set(false); // torna cursor invisível
   move(10,10); printw("Precione qualquer tecla: ");
   tecla=getch();

   curs_set(true); // torna cursor visível
   move(11,10); printw("Precione qualquer tecla: ");
   tecla=getch();

   move(12,10); printw("Fim");
   getch();

   endwin();
 
  return 0;
}
Comandos
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo
          Precione qualquer tecla: d
          Precione qualquer tecla: d
          Fim

Constantes do Teclado

Veja tabela abaixo

Arquivo: Exemplo.c
// gcc meuprograma.c -o meuprograma -lncurses
#include <curses.h> //<-- Inclua esta biblioteca em nosso projeto.
#include <stdio.h>
#include <string.h>

int tecla = ERR;
char texto[10];
int x = 0;

#define X_KEY_UP    259
#define X_KEY_DOWN  258
#define X_KEY_LEFT  260
#define X_KEY_RIGHT 261

#define X_KEY_ESC   27

void teclas(int c){

        if(c == X_KEY_UP   ){strcpy(texto, "UP");}
   else if(c == X_KEY_DOWN ){strcpy(texto, "DOWN");}
   else if(c == X_KEY_LEFT ){strcpy(texto, "LEFT");}
   else if(c == X_KEY_RIGHT){strcpy(texto, "RIGHT");}
   else if(c == X_KEY_ESC  ){strcpy(texto, "ESC");}
   else                     {strcpy(texto, "???");}

   printw("%s", texto);
}

int xLoop();

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

   initscr();
   clear();

   keypad(stdscr, true); // Insira este comando para pegar todas as teclas
   echo(); // Com echo(), a tecla é mostrada

   do{
      x = xLoop();
      if(x == X_KEY_ESC){break;}
   } while(true);

   printw("Pressione qualquer tecla para sair");
   getch();

   endwin();

   return 0;

}

int xLoop(){

   printw("Tecla = \"");
   tecla = getch();
   printw("\"\nNum = %d", tecla);
   printw("\nValor = \"");

   teclas(tecla);

   printw("\"\n");

   return tecla;
}
Comandos
~$ gcc Exemplo.c -o Exemplo -l ncurses
~$ ./Exemplo

Interagindo com o mouse