Вы находитесь на странице: 1из 4

Programao pseudo-grfica para Linux

Postado por Willian Valle em 15/02/2009 04:35


Blog: Void main
Nesse artigo vou falar sobre uma biblioteca muito til feita para
desenvolvimento de aplicaes pseudogrficas usando C e rodando no sistema
Linux.
A Ncurses (new curses) possui funes completas de criao de janelas,
manipulao de cores, suporte avanado a teclado e suporte a uso do mouse
para aplicaes de terminal. O que a torna ideal para criar um ambiente
agradvel em arquivos de configurao, instalao etc.
Possui ainda bibliotecas derivadas que auxiliam no processo de criao de
Panels e Menus.
Embora atualmente s rode em Linux, a equipe responsvel pelo seu
desenvolvimento anunciou que tem planos de porta-la para a
plataforma DOS/Windows.
INSTALAO:
_________________________________________________________
Antes de tudo precisamos baixar e instalar a biblioteca, que est disponvel em:
http://ftp.gnu.org/pub/gnu/ncurses/ (baixar
compilao segue o padro:

tar.gz

da

ultima

verso)

./configure
make
make install
PRIMEIRO EXEMPLO: Baixar Exemplo
#include <ncurses.h>
int main(){
WINDOW *janela; //Declara um ponteiro para identificar uma
janela.
initscr(); //Inicializa a biblioteca
start_color(); //Inicializa a funo de cores
init_pair(1, COLOR_WHITE, COLOR_BLACK); //Define um par de
cor na posio 1

janela=newwin(10,50,2,2); //Cria uma janela com 10 de altura,


50 de largura e posio 2/2
box(janela,ACS_VLINE,ACS_HLINE); //Cria uma borda na janela
wbkgdset(janela,COLOR_PAIR(1)); //Define cor padro como
sendo a da posio 1
mvwprintw(janela,2,2,"Texto"); //Coloca um texto na janela
"janela", na posio 2/2
wrefresh(janela); //Atualiza o contedo da janela para ser
mostrado
wgetch(janela); //Para a execuo para a janela ser vista
delwin(janela); //Deleta a janela
endwin(); //Permite o fim correto do programa
return 0;
}

Esse o caso mais simples da utilizao de janelas da biblioteca, e tambm


o algoritmo base do seu funcionamento que est descrito nos comentrios do
programa.
Ento. Para um programa de exibio como o caso, o algoritmo pode ser
resumido como:
Declara ponteiros do tipo WINDOW para as janelas.
Inicializa a biblioteca ( initscr(); ) Se usar cores, entrar com o start_color(); e os
pares de cores com a init_pair(); Funes facultativas de gerenciamento e
escrita das janelas.
Atualizar janelas wrefresh(); parar a execuo getch(); deletar janelas
delwin(); finalizar biblioteca endwin();
COMPILANDO:
_________________________________________________________
Para compilar corretamente programas feitos com a Ncurses, alem de
adicionar seu header com o comando include deve-se linkar a biblioteca ao gcc
passando -lncurses como parmetro.
Ento uma forma comum de compilao ficaria:
gcc arquivo.c -o arquivo -lncurses

Uma coisa interessante a se prestar ateno so as regras dos nomes das


funes da linguagem, que indicam os seus argumentos e sua funcionalidade.
Por exemplo:
mvwprintw(); ? permite escolher a posio na tela/janela (mv) permite ser
colocada em uma janela (w)
enquanto a funo wprintw(); s permite ser colocada em uma janela, pois no
precedida do mv.
OUTRAS FUNES:
_________________________________________________________
Boa parte das funes das bibliotecas stdio e conio.h tem sua respectiva na
Ncurses. Citarei algumas das mais usadas.
*Todas as funes podem ser encontradas com o prefixo mv, w etc..
Scanw(); ? permite a leitura de entrada do teclado assim como a scanf do stdio.
Getch(); ? captura um char do usurio sem esperar a entrada do enter.
Getstr(); ? captura uma string do usurio.
Halfdelay(); ? similar a cbreak();
A QUESTO DO REFRESH/GETCH
_________________________________________________________
importante entender bem essas duas funes, visto que nem sempre se
deseja fazer apenas uma janela de cada vez, e elas so as que definem o que
vai aparecer a qual hora.
Como a Ncurses no tem funo de loop, o programador encarregado de
fazer as janelas aparecerem e sumirem nas horas corretas.
wrefresh(WINDOW *janela);
A no apario da funo faz com que a janela no seja exibida, e qualquer
mudana da janela da em diante no ser exibida a no ser que exista algum
refresh posterior. Pode ser usada para controlar o conteudo.
wgetch(WINDOW *janela);
o wgetch apenas aguarda uma tecla ser pressionada para dar continuidade a
execuo do programa, ento no necessaria caso exista algum break na
janela. Porm se nenhuma pausa for dada entre dois refreshs, a janela s ser
visualizada de uma forma (no caso, na forma do ultimo refresh).
CONCLUSO PRIMEIRA PARTE:
_________________________________________________________
Esse foi o primeiro artigo sobre a biblioteca, e serve apenas para apresentar e
dar as ideias bsicas da programao pseudogrfica com a Ncurses.

Uma boa base de dados para o aprendizado da biblioteca o site:


http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html que trata
de grande parte da biblioteca.