Conhecendo atributos do Ncurses
Publicado por Diego da Silva de Medeiros 12/12/2005
[ Hits: 9.673 ]
Homepage: www.sj.cefetsc.edu.br/~dsmedeiros
Um programa para conhecer alguns atributos do curses.h.
Eu já tinha feito algumas partes separadamente, então juntei tudo num único programa, que ao meu ver, ficou bem legal. Está todo comentado de uma forma bem didática. A lógica utilizada é baseada nos artigos disponíveis na web (inclusive aqui no VOL), mas possui algumas diferenças que facilitaram a compreensão.
RECOMENDO, CASO HAJAM DÚVIDAS QUANTO ÀS FUNÇÕES UTILIZADAS, A CONSULTA NO man, EM ESPECIAL: $man ncurses
//___________________________________________________________
// RECOMENDO O DOWNLOAD DO SCRIPT PARA A VISUALIZAÇÃO
// EM UM EDITOR COLORIDO E COM AS DEVIDAS ENDENTAÇÕES,
// ISSO FACILITA O ENTENDIMENTO.
//___________________________________________________________
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* PROGRAMA PARA TESTAR ALGUNS ATRIBUTOS DEFINIDOS NO curses.h */
/* */
/* Autor: Diego da Silva de Medeiros - d-medeiros@hotmail.com - Baseado em artigos e tutoriais espalhados pela web */
/* */
/* Recomendo a série de artigos do Leonardo B. dos Santos daqui do VOL, em artigos/ C/C++/ Miscelânea, realmente muito bons */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//Observação: Esse tipo de comentário (após duas barras), não está definido no C padrão ANSI, podendo, dependendo do compilador, não ser compilado com sucesso. Caso ocorra algum problema desse tipo, use o comentário padrão (texto entre o /* e o */)
//Dica: Caso não consiga enteder a lógica aqui empregada, comece dando uma olhada geral nas funções, após isso, imagine-se um processador, começando pela função main() e seguindo todos os comandos e funções do programa
#include <stdio.h>
#include <curses.h>
#include <stdlib.h> //para usar a função exit()
#define ENTER 10 //valores diretos da tabela ASCII, tecla ENTER = 10
#define ESCAPE 27 //tecla ESC = 27
#define FUNDO 1
#define COR_MENU 2 //definindo nomes para o código ficar mais claro
#define CURSOR 3
void criar_barra_ferramentas(WINDOW *barra_ferramentas); //função que criará a barra de ferramentas
WINDOW **abrir_submenu(int numero_itens, int coluna); //função que criará o submenu
int cursor(WINDOW **itens_menu, int numero_itens); //função que cuidará do cursor e do item selecionado
void remover_submenu(WINDOW **itens_menu, int numero_itens); //função que deletará cada janela e liberará memória alocada
void imprimir_cores(int item_selecionado); //função que imprimirá o teste de cores
void imprimir_janela(int item_selecionado); //função que imprimirá o teste de janela
void f1(); //função que organizará todas as variáveis e funções, caso a tecla pressionada tenha sido o F1
void f2(); //idem à função anterior, porém, quando a tecla F2 for pressionada
//=============================================================================================
int main()
{
int key; //variável que receberá a tecla pressionada
WINDOW *barra_ferramentas; //ponteiro WINDOW que será a referência para a barra de ferramentas
initscr(); //inicializar o curses
start_color(); //possibilita o uso das cores
//definição de pares de cores para a interface
init_pair(FUNDO, COLOR_CYAN, COLOR_BLACK);
init_pair(COR_MENU, COLOR_BLUE, COLOR_YELLOW);
init_pair(CURSOR, COLOR_YELLOW, COLOR_BLUE);
init_pair(4, COLOR_BLACK, COLOR_YELLOW);
init_pair(11, COLOR_YELLOW, COLOR_BLACK);
init_pair(12, COLOR_RED, COLOR_BLACK);
curs_set(0); //faz com que o cursor fique invisível (0) ou apareça (1)
noecho(); //impede que as teclas digitads apareçam na tela
keypad(stdscr, TRUE); //abilita o uso dos #defines do teclado, possibilita, por exemplo a referência da tecla F1 por KEY_F1
//--------------------------------------------------------------------------------------------
bkgd (COLOR_PAIR(FUNDO)); //definindo o fundo do ecrã
mvprintw(14,2,"Características do curses.h");
mvprintw(18,2,"-> F1 - Teste de Cores."); //move o cursor para a linha 18, coluna 2 e imprime
mvprintw(19,7,"(w)attron() para inserí-los no curses.");
mvprintw(22,2,"-> F2 - Teste de Janela.");
mvprintw(23,7,"box() para inserí-los no curses.");
mvprintw(26,2,"-> ESC - Sair");
attron(COLOR_PAIR(12)); //ligando attr(on) um atributo (COLOR_PAIR(12))
mvprintw(36,2,"Consulte o man, quando aparecerem as dúvidas!");
attroff(COLOR_PAIR(12)); //desligando o mesmo atributo
refresh(); //atualiza a tela
criar_barra_ferramentas(barra_ferramentas); //aqui, criarei a barra de ferramentas, aquela pequena aba superior
do
{
key = getch(); //vai esperar o usuário digitar uma tecla
mvprintw(30, 2, " "); //vai apagar (de uma forma tosca) o que estiver escrito na linha 30, coluna 2, que é o quadro de mensagem - execute o programa, tecle F1 e tecle ESC, irá aparecer uma mensagem em amarelo
if (key == KEY_F(1)) //se a tecla pressionada for o F1
f1(); //chama a função f1()
else if (key == KEY_F(2)) //senão, se for o F2
f2(); //chama a função f2()
}while(key != ESCAPE); //pede ao usuário que digite uma tecla até que a tecla pressionada seja ESCAPE
delwin(barra_ferramentas); //deleta a barra de ferramentas
endwin(); //termina a curses
exit(0); //finaliza o programa em estado normal (0)
}
//===============================================================================================
void criar_barra_ferramentas(WINDOW *barra_ferramentas)
{
barra_ferramentas = subwin(stdscr,1,100,0,0); //o ponteiro barra_ferramentas apontará para uma subwin que aparecerá na janela principal (stdscr), com 1 linha e 100 colunas, que aparecerá na linha 0, coluna 0
wbkgd (barra_ferramentas, COLOR_PAIR(COR_MENU)); //mudando o fundo da subjanela barra de ferramentas, usando o #define COR_MENU
waddstr(barra_ferramentas,"Teste de Cores - F1"); //waddstr: Window ADD STRing, adiciona a string na janela, onde o cursor estiver
wmove(barra_ferramentas,0,30); //move o cursor da subwin barra_ferramentas para a linha 0, coluna 30
waddstr(barra_ferramentas,"Teste de Janela - F2");
wrefresh(barra_ferramentas); //atualiza a subwin
}
//===============================================================================================
WINDOW **abrir_submenu(int numero_itens, int coluna)
{
int i; //o famoso i do for()
WINDOW **itens_menu; //variável que armazenará todas as janelas
itens_menu = (WINDOW **) malloc(numero_itens * sizeof(WINDOW **)); //usando alocação dinâmica para criar um vetor de janelas (por incrível que pareça, assim fica mais fácil)
itens_menu[0] = newwin((numero_itens + 2), 25, 1, coluna); //aqui, toda a janela com os itens será criada, com duas linhas a mais que o número de itens, para ter espaço para a moldura
wbkgd(itens_menu[0], COLOR_PAIR(COR_MENU)); //mudando o fundo da janela
box(itens_menu[0], ACS_VLINE, ACS_HLINE); //criando uma moldura na janela
for (i = 1; i <= numero_itens; i++)
{
itens_menu[i] = subwin(itens_menu[0], 1, 23, (i + 1), (coluna + 1)); //cada ponteiro do vetor itens_menu aponta para uma subjanela que aparecerá na janela itens_menu[0], com 1 linha e 23 colunas (2 a menos que a coluna do menu, lembre-se da moldura), que aparecerá na linha i+1 (da janela padrão stdscr), e na coluna (coluna + 1) (a mesma coluna do quadro do menu, menos 1 da moldura)
wbkgd(itens_menu[i], COLOR_PAIR(COR_MENU)); //mudando o fundo de cada subwin
}
if (coluna == 0) //aqui eu testo a coluna, se ela for 0, quer dizer que a tecla pressionada foi o F1, senão, foi o F2
{
waddstr(itens_menu[1], " 1. Cores Normais");
waddstr(itens_menu[2], " 2. A_BOLD");
waddstr(itens_menu[3], " 3. A_UNDERLINE");
waddstr(itens_menu[4], " 4. A_REVERSE");
waddstr(itens_menu[5], " 5. A_BLINK"); //estou imprimindo os textos de cada opção dos menus
waddstr(itens_menu[6], " 6. A_STANDOUT");
waddstr(itens_menu[7], " 7. A_ALTCHARSET");
waddstr(itens_menu[8], " 8. A_ATTRIBUTES");
}
else
{
waddstr(itens_menu[1], " 1. Corners");
waddstr(itens_menu[2], " 2. Tees");
waddstr(itens_menu[3], " 3. Lines");
waddstr(itens_menu[4], " 4. Plus & Diamonds");
waddstr(itens_menu[5], " 5. Scans");
waddstr(itens_menu[6], " 6. Ckboards & Degrees");
waddstr(itens_menu[7], " 7. Plminus & Bullets");
waddstr(itens_menu[8], " 8. Arrows");
waddstr(itens_menu[9], " 9. Boards & Lanterns");
waddstr(itens_menu[10], " 10. Blocks & PIs ");
waddstr(itens_menu[11], " 11. Equals");
waddstr(itens_menu[12], " 12. Strlings");
}
wbkgd(itens_menu[1], COLOR_PAIR(CURSOR)); //já coloquei o cursor na primeira subjanela, a primeira opção
wrefresh(itens_menu[0]); //atualiza a janela itens_menu[0]
return itens_menu; //retorna o vetor de ponteiro para ponteiro itens_menu
}
//================================================================================================
int cursor(WINDOW **itens_menu, int numero_itens)
{
//- - - - - -
// cada opção é uma subjanela, que, quando escolhida, será realçada pela mudança de seu background
//- - - - - -
int key;
int item_selecionado = 1; //variável que guardará o número do item selecionado, ela é iniciada com 1 porque o cursor começa na primeira opção
do
{
key = getch(); //espera o usuário digitar uma tecla
if (key == KEY_DOWN || key == KEY_UP) //se foi seta para baixo ou seta para cima
{
wbkgd(itens_menu[item_selecionado], COLOR_PAIR(COR_MENU)); //muda o fundo da opção que estava anteriormente selecionada, voltando ao fundo padrão
wrefresh(itens_menu[item_selecionado]); //atualiza a subjanela para aplicar as mudanças
if (key == KEY_DOWN) //se a tecla foi seta para baixo...
{
if (item_selecionado == numero_itens) //...e se o cursor já estiver na última opção do menu...
item_selecionado = 1; //...volta o cursor para a primeira posição.
else //senão
item_selecionado = (item_selecionado + 1); //apenas incrementa o cursor. *** EU ACHEI ESSA MANEIRA MAIS FÁCIL DE ENTENDER E LIVRE DE ERROS
// DO QUE A MANEIRA MATEMÁTICA PRESENTE EM QUASE TODOS OS ARTIGOS ***
}
else if (key == KEY_UP) //se a tecla foi seta para cima...
{
if (item_selecionado == 1) //...e se o cursor já estiver na primeira posição...
item_selecionado = numero_itens; //...o cursor é movida para a última posição da lista.
else
item_selecionado = (item_selecionado - 1); //senão apenas decrementa o cursor
}
wbkgd(itens_menu[item_selecionado], COLOR_PAIR(CURSOR)); //muda o fundo da opção selecionada para deixá-la visível
wrefresh(itens_menu[item_selecionado]); //e atualiza a tela para aplicar as alterações
}
else if (key == KEY_LEFT || key == KEY_RIGHT) //se atecla digitada foi seta para a esquerda ou seta para a direita, que mudará o menu corrente
{
remover_submenu(itens_menu, numero_itens); //remove o menu corrente
touchwin(stdscr); //reescreve toda a tela, com base nos flags registrados
refresh(); //esse refresh é necessário para parar o touchwin()
if (numero_itens == 8) //se o número de itens for 8, quer dizer que o menu atual é o referente ao F1
f2(); //chama a função F2, e recomeça toda a lógica até aqui vista
else
f1(); //senão, quer dizer que o menu atual é o F2, então chama a função F1
return 0; //fecha a função cursor
}
else if (key == KEY_F(1) || key == KEY_F(2)) //senão, se a tecla digitada foi F1 ou F2
{
if (key == KEY_F(1)) //se a tecla foi F1
{
remover_submenu(itens_menu, numero_itens); //remove o menu atual
touchwin(stdscr); //redesenha a tela
refresh(); //atualiza
f1(); //e chama a função F1
return 0;
}
else if (key == KEY_F(2))
{
remover_submenu(itens_menu, numero_itens); //mesma coisa da anterior
touchwin(stdscr);
refresh();
f2();
return 0;
}
}
else if (key == ENTER) //se a tecla foi enter
{
attron(COLOR_PAIR(11)); //muda o par de cor
mvprintw(30, 2,"Você selecionou o item %i", item_selecionado); //diz qual foi o item selecionado
refresh(); //atualiza
attroff(COLOR_PAIR(11)); //volta para o par de cor anterior
return item_selecionado; //retorna o número do item selecionado
}
} while (key != ESCAPE); //espera o usuário digital algo até ele digitar ESC para abortar e fechar o menu
attron(COLOR_PAIR(11)); //mesma forma acima colocada
mvprintw(30, 2,"Você não selecionou nenhum item");
refresh();
attroff(COLOR_PAIR(11));
return 0;
}
//=============================================================================================
void remover_submenu(WINDOW **itens_menu, int numero_itens) //função encarregada de remover e liberar a memória alocada dinamicamente
{
int i;
for (i = 0; i <= numero_itens; i++)
delwin(itens_menu[i]); //deleta cada janela indexada por i
free(itens_menu); //libera toda área de memória apontada por itens_menu
}
//============================================================================================
void imprimir_cores(int item_selecionado) //função que mostrará o conteúdo de cada opção referente ao teste de cores (F1)
{
//definindo pares de cores para o menu Teste de Cores
init_pair(5, COLOR_BLUE, COLOR_RED);
init_pair(6, COLOR_GREEN, COLOR_YELLOW);
init_pair(7, COLOR_BLACK, COLOR_CYAN);
init_pair(8, COLOR_WHITE, COLOR_MAGENTA);
init_pair(9, COLOR_WHITE, COLOR_BLUE);
WINDOW *janela; //ponteiro que apontará para a janela que irá se abrir ao escolher uma opção
janela = newwin(15, 40, 20, 60); //o ponteiro janela apontará para uma newwin de dimensões 15x40, que aparecerá na linha 20, coluna 60
wbkgd(janela, COLOR_PAIR(9)); //colocando um fundo nessa janela
box(janela, ACS_VLINE, ACS_HLINE); //colocando uma moldura
wrefresh(janela); //atualizando a janela
if (item_selecionado == 1) // se o item selecionado foi o número 1, imprime tudo com cores normais
{
mvwprintw(janela, 1, 1, "Cores Normais.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW "); //qualquer dúvida quanto às funções, pesquise man nome_da_função
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch(); //espera o usuário digitar uma tecla para fechar a janela
werase(janela); //apaga tudo que está escrito na janela
wrefresh(janela);
}
else if (item_selecionado == 2) //imprime texto com A_BOLD, *** PROCURE ESSAS PALAVRAS NA BIBLIOTECA ***
{
wattron(janela, A_BOLD);
mvwprintw(janela, 1, 1, "A_BOLD.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 3) //imprime texto com atributo A_UNDERLINE
{
wattron(janela, A_UNDERLINE);
mvwprintw(janela, 1, 1, "A_UNDERLINE.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 4) //imprime texto com A_REVERSE
{
wattron(janela, A_REVERSE);
mvwprintw(janela, 1, 1, "A_REVERSE.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 5) //A_BLINK
{
wattron(janela, A_BLINK);
mvwprintw(janela, 1, 1, "A_BLINK.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 6) //A_STANDOUT
{
wattron(janela, A_STANDOUT);
mvwprintw(janela, 1, 1, "A_STANDOUT.");
wattron(janela, COLOR_PAIR(1));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(2));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(3));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(4));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 7) //A_ALTCHARSET
{
wattron(janela, A_ALTCHARSET);
mvwprintw(janela, 1, 1, "A_ALTCHARSET.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 8) //A_ATTRIBUTES
{
wattron(janela, A_ATTRIBUTES);
mvwprintw(janela, 1, 1, "A_ATTRIBUTES.");
wattron(janela, COLOR_PAIR(5));
mvwprintw(janela, 5, 3, "Texto: BLUE Fundo: RED ");
wattron(janela, COLOR_PAIR(6));
mvwprintw(janela, 6, 3, "Texto: GREEN Fundo: YELLOW ");
wattron(janela, COLOR_PAIR(7));
mvwprintw(janela, 7, 3, "Texto: BLACK Fundo: CYAN ");
wattron(janela, COLOR_PAIR(8));
mvwprintw(janela, 8, 3, "Texto: WHITE Fundo: MAGENTA ");
wattron(janela, COLOR_PAIR(9));
mvwprintw(janela, 13, 1, "Digite qualquer tecla para continuar.");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
delwin(janela); //deleta a janela
touchwin(stdscr);
refresh();
}
//======================================================================================
void imprimir_janela(int item_selecionado) //função que cuidará das molduras que serão apresentadas ao usuário
{
WINDOW *janela;
init_pair(10, COLOR_WHITE, COLOR_BLUE);
janela = newwin(15, 40, 20, 60);
wbkgd(janela, COLOR_PAIR(10));
wrefresh(janela);
if (item_selecionado == 1) //olhe, na função box, a moldura utilizada
{
box(janela, ACS_ULCORNER, ACS_URCORNER);
mvwprintw(janela, 2, 3, "ACS_[UL, UR, LL, LR]CORNER");
mvwprintw(janela, 3, 5, "- Vertical: UL");
mvwprintw(janela, 4, 5, "- Horizontal: UR");
mvwprintw(janela, 6, 8, "LEGENDA");
mvwprintw(janela, 7, 8, "- UL - Upper Left");
mvwprintw(janela, 8, 8, "- UR - Upper Right");
mvwprintw(janela, 9, 8, "- LL - Lower Left");
mvwprintw(janela, 10, 8, "- LR - Lower Right");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 2)
{
box(janela, ACS_LTEE, ACS_BTEE);
mvwprintw(janela, 2, 3, "ACS_[B, T, L, R]TEE");
mvwprintw(janela, 3, 5, "- Vertical: L");
mvwprintw(janela, 4, 5, "- Horizontal: B");
mvwprintw(janela, 6, 8, "LEGENDA");
mvwprintw(janela, 7, 8, "- B - Up");
mvwprintw(janela, 8, 8, "- T - Down");
mvwprintw(janela, 9, 8, "- L - Left");
mvwprintw(janela, 10, 8, "- R - Right");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
if (item_selecionado == 3)
{
box(janela, ACS_VLINE, ACS_HLINE);
mvwprintw(janela, 2, 3, "ACS_[V, H]LINE");
mvwprintw(janela, 3, 5, "- Vertical: V");
mvwprintw(janela, 4, 5, "- Horizontal: H");
mvwprintw(janela, 6, 8, "LEGENDA");
mvwprintw(janela, 7, 8, "- V - Vertical");
mvwprintw(janela, 8, 8, "- H - Horizontal");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
if (item_selecionado == 4)
{
box(janela, ACS_PLUS, ACS_DIAMOND);
mvwprintw(janela, 2, 3, "ACS_PLUS & ACS DIAMOND");
mvwprintw(janela, 3, 5, "- Vertical: ACS_PLUS");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_DIAMOND");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
if (item_selecionado == 5)
{
box(janela, ACS_S1, ACS_S9);
mvwprintw(janela, 2, 3, "ACS_S[1, 3, 7, 9]");
mvwprintw(janela, 3, 5, "- Vertical: 1");
mvwprintw(janela, 4, 5, "- Horizontal: 9");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
if (item_selecionado == 6)
{
box(janela, ACS_CKBOARD, ACS_DEGREE);
mvwprintw(janela, 2, 3, "ACS_CKBOARD & ACS_DEGREE");
mvwprintw(janela, 3, 5, "- Vertical: ACS_CKBOARD");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_DEGREE");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
if (item_selecionado == 7)
{
box(janela, ACS_PLMINUS, ACS_BULLET);
mvwprintw(janela, 2, 3, "ACS_PLMINUS & ACS_BULLET");
mvwprintw(janela, 3, 5, "- Vertical: ACS_PLMINUS");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_BULLET");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 8)
{
box(janela, ACS_RARROW, ACS_DARROW);
mvwprintw(janela, 2, 3, "ACS_[U, D, L, R]ARROW");
mvwprintw(janela, 3, 5, "- Vertical: R");
mvwprintw(janela, 4, 5, "- Horizontal: D");
mvwprintw(janela, 6, 8, "LEGENDA");
mvwprintw(janela, 7, 8, "- U - Up");
mvwprintw(janela, 8, 8, "- D - Down");
mvwprintw(janela, 9, 8, "- L - Left");
mvwprintw(janela, 10, 8, "- R - Right");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 9)
{
box(janela, ACS_BOARD, ACS_LANTERN);
mvwprintw(janela, 2, 3, "ACS_BOARD & ACS_LANTERN");
mvwprintw(janela, 3, 5, "- Vertical: ACS_BOARD");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_LANTERN");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 10)
{
box(janela, ACS_BLOCK, ACS_PI);
mvwprintw(janela, 2, 3, "ACS_BLOCK & ACS_PI");
mvwprintw(janela, 3, 5, "- Vertical: ACS_BLOCK");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_PI");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 11)
{
box(janela, ACS_LEQUAL, ACS_GEQUAL);
mvwprintw(janela, 2, 3, "ACS_[L, G, N]EQUAL");
mvwprintw(janela, 3, 5, "- Vertical: L");
mvwprintw(janela, 4, 5, "- Horizontal: G");
mvwprintw(janela, 6, 8, "LEGENDA");
mvwprintw(janela, 7, 8, "- L - Less");
mvwprintw(janela, 8, 8, "- G - Greater");
mvwprintw(janela, 9, 8, "- N - Not");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
else if (item_selecionado == 12)
{
box(janela, ACS_STERLING, ACS_STERLING);
mvwprintw(janela, 2, 3, "ACS_STERLING");
mvwprintw(janela, 3, 5, "- Vertical: ACS_STERLING");
mvwprintw(janela, 4, 5, "- Horizontal: ACS_STERLING");
mvwprintw(janela, 13, 2, "Digite qualquer tecla para continuar");
wrefresh(janela);
getch();
werase(janela);
wrefresh(janela);
}
delwin(janela);
touchwin(stdscr);
refresh();
}
//=========================================================================
void f1()
{
int coluna = 0; //inicialização de variáveis locais, só para não ficar usando números na função abaixo
int numero_itens = 8;
int item_selecionado; //variável que guardará o item selecionado pelo usuário
WINDOW **itens_menu; //NÃO ENTENDI PORQUE, mas se o ponteiro itens_menu não for um ponteiro para ponteiro, o programa dá erros
itens_menu = abrir_submenu(numero_itens, coluna); //função que irá criar o submenu
item_selecionado = cursor(itens_menu, numero_itens); //o item_selecionado guardará o valor retornado pela função cursor
remover_submenu(itens_menu, numero_itens); //função removerá os menus e liberará a memória alocada
touchwin(stdscr);
refresh();
if (item_selecionado != 0) //se foi selecionada alguma coisa, se item selecionado não for igual à zero
imprimir_cores(item_selecionado);
}
//===========================================================================
void f2()
{
int coluna = 30;
int numero_itens = 12;
int item_selecionado;
WINDOW **itens_menu;
itens_menu = abrir_submenu(numero_itens, coluna);
item_selecionado = cursor(itens_menu, numero_itens); //mesma coisa acima citada
remover_submenu(itens_menu, numero_itens);
touchwin(stdscr);
refresh();
if (item_selecionado != 0)
imprimir_janela(item_selecionado);
}
Manipulando argumentos com getopt_long
Lista Duplamente Encadeada em C
Patch para Zsnes 1.51 com GCC>=4.3
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (4)
Thinkpads são bons mesmo ?! (4)
existe algum hub de jogos online similiar ou igual dos browser (6)
Como botar o efeito de deslocar janelas (win + setas - windows) no lin... (0)









