ncurses - problema F1-F12 [RESOLVIDO]

1. ncurses - problema F1-F12 [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 22/01/2014 - 17:19h

gente estou desenvolvendo umas telas para um programa de biblioteca que eu tenho aqui, certo, a parte dos menus já esta pronta, agora estou criando a integração para quando usar as setas fazer isso ou aquilo ...

em fim com as setas direcionais já está tudo quase pronto, agora meu código emperrou na parte que precisei usar as teclas F1, F2, F3, ele reconhece a tecla, mas não entra na comparação, e sim eu estou com keypad(stdscr,TRUE); ativada, se vcs puderem me ajudar a encontrar o problema ficarei grato, não precisa fazer por mim só indicar algum erro que eu posso não estar vendo.

segue o código das janelas:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
#define FUNDO 1
#define SOMBRA 2
#define JANELA 3
#define SELECAO1 4
#define SELECAO2 5


void inicia_ncurses()
{
initscr();
start_color();
init_pair(FUNDO,COLOR_BLACK,COLOR_BLUE);
init_pair(SOMBRA,COLOR_BLACK,COLOR_BLACK);
init_pair(JANELA,COLOR_BLACK,COLOR_CYAN);
init_pair(SELECAO1,COLOR_WHITE,COLOR_BLUE);
init_pair(SELECAO2,COLOR_GREEN,COLOR_BLACK);
noecho();
keypad(stdscr,TRUE);
cbreak();
curs_set(0);
}
WINDOW **cria_esqueleto(char *titulo)
{
WINDOW **esqueleto;
int tamanho=strlen(titulo);
esqueleto=(WINDOW **)malloc(3*sizeof(WINDOW *));
esqueleto[0]=newwin((LINES-2),(COLS-3),1,2);
wbkgd(esqueleto[0],COLOR_PAIR(SOMBRA));
wrefresh(esqueleto[0]);
esqueleto[1]=newwin((LINES-3),(COLS-3),1,1);
wbkgd(esqueleto[1],COLOR_PAIR(JANELA));
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
wrefresh(esqueleto[1]);
esqueleto[2]=newwin((LINES-10),(COLS-5),5,2);
box(esqueleto[2],0,0);
wbkgd(esqueleto[2],COLOR_PAIR(JANELA));
wrefresh(esqueleto[2]);
return esqueleto;
}
void redimensiona_esqueleto(WINDOW **esqueleto,char *titulo)
{
int cont,tamanho=strlen(titulo);
clear();
for(cont=0;cont<3;cont++)
wclear(esqueleto[cont]);
wresize(esqueleto[0],(LINES-2),(COLS-3));
wresize(esqueleto[1],(LINES-3),(COLS-3));
wresize(esqueleto[2],(LINES-10),(COLS-5));
box(esqueleto[2],0,0);
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
refresh();
for(cont=0;cont<3;cont++)
wrefresh(esqueleto[cont]);
sleep(1);
}
int largura_menu(char *titulo_menus[],int tam_vet_str)
{
int cont,tam=0,aux;
for(cont=0;cont<tam_vet_str;cont++)
{
aux=strlen(titulo_menus[cont]);
if(aux>tam)
tam=aux;
}
return tam;
}
WINDOW **cria_menus(char *titulo_menus[],int tam_vet_str)
{
WINDOW **menus;
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
menus=(WINDOW **)malloc(tam_vet_str*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_str;cont++)
{
menus[cont]=newwin(1,tam,cont+8,(COLS/2)-((tam/2)+1));
wbkgd(menus[cont],COLOR_PAIR(JANELA));
mvwprintw(menus[cont],0,0,titulo_menus[cont]);
wrefresh(menus[cont]);
}
return menus;
}
void redimensiona_menus(WINDOW **menus,char *titulo_menus[],int tam_vet_str)
{
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
for(cont=0;cont<tam_vet_str;cont++)
{
mvwin(menus[cont],cont+8,(COLS/2)-((tam/2)+1));
wrefresh(menus[cont]);
}
sleep(1);
}
WINDOW **cria_submenu(char *titulo_menus[], int n_menus, char *titulo_submenu[],int tam_vet_str,int linha_inicio)
{
int cont,tam,tamM;
WINDOW **submenu;
tam=largura_menu(titulo_submenu,tam_vet_str);
tamM=largura_menu(titulo_menus,n_menus);
submenu=(WINDOW **)malloc(tam_vet_str*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_str;cont++)
{
submenu[cont]=newwin(1,tam+2,cont+linha_inicio,(COLS/2)+((tamM/2)));
wbkgd(submenu[cont],COLOR_PAIR(SELECAO1));
mvwprintw(submenu[cont],0,1,titulo_submenu[cont]);
wrefresh(submenu[cont]);
}
return submenu;
}
WINDOW **exclui_submenu(WINDOW **esqueleto, WINDOW **submenu,int tam_vet_str)
{
int i;
for(i=0;i<tam_vet_str;i++)
{
delwin(submenu[i]);
wrefresh(esqueleto[2]);
box(esqueleto[2],0,0);
}
return NULL;
}
void seleciona_menus(WINDOW **menus,int tamanho,int local,int NORMAL, int SELECAO)
{
int i;
for(i=0;i<tamanho;i++)
{
wbkgd(menus[i],COLOR_PAIR(NORMAL));
wrefresh(menus[i]);
}
wbkgd(menus[local],COLOR_PAIR(SELECAO));
wrefresh(menus[local]);
}
void rolagem(WINDOW **menus,WINDOW **esqueleto,char *titulo_menus[],char *titulo_sms1[],char *titulo_sms2[],char *titulo_sms3[], int tam_vet_str,int *tam_vet_sm)
{
int key,cont=0,tam,ultimo_tam,ultimo_key=0,cont2=-1,penultimo_key=-1;
WINDOW **submenu=NULL;
do
{
key=getch();
if(key==KEY_DOWN || key=='\t')
{
tam=largura_menu(titulo_menus,tam_vet_str);
if(cont>=0 && cont<tam_vet_str)
{
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
cont++;
}
else
{
cont=0;
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
cont++;
}
}
else
{
if(key==KEY_UP)
{
if(cont>=0 && cont<tam_vet_str)
{
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
cont--;
}
else
{
cont=tam_vet_str-1;
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
cont--;
}
}
else
{
if(key=KEY_RIGHT && cont2==-1)
{
if(penultimo_key==KEY_UP)
{
if(cont>=0 && cont<tam_vet_str-1)
cont++;
else
if(cont<tam_vet_str)
cont=0;
}
else
{
if(penultimo_key==KEY_DOWN)
{
if(cont>=1 && cont<tam_vet_str)
cont--;
else
if(cont==tam_vet_str)
cont=tam_vet_str-1;
}
}
if(ultimo_key==KEY_LEFT)
{
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
}
cont2=0;
if(submenu!=NULL)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2=-1;
}
do
{
key=getch();
if(key==KEY_UP)
{
if(cont2>=0 && cont2<ultimo_tam)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
else
{
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
}
else
{
if(key==KEY_DOWN)
{
if(cont2>=0 && cont2<ultimo_tam)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
else
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
}
}
}while(key!=KEY_LEFT);
cont2=-1;
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
redimensiona_menus(menus,titulo_menus,tam_vet_str);
}
else
{
if(key==KEY_F(1))// não entra nessa comparação
{
attron(COLOR_PAIR(SELECAO2));
printw("entrou");
attroff(COLOR_PAIR(SELECAO2));
seleciona_menus(menus,tam_vet_str,0,JANELA,SELECAO1);
if(ultimo_key==KEY_LEFT || ultimo_key==0)
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
key=getch();
if(key==KEY_RIGHT && cont2==-1)
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2=-1;
do
{
key=getch();
if(key==KEY_UP)
{
if(cont2>=0 && cont2<ultimo_tam)
{
if(cont2==-1)
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
else
{
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
}
else
{
if(key==KEY_DOWN)
{
if(cont2>=0 && cont2<ultimo_tam)
{
if(cont2==-1)
cont2=1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
else
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
}
}
}while(key!=KEY_LEFT);
cont2=-1;
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
redimensiona_menus(menus,titulo_menus,tam_vet_str);
}
}
}
}
}
if(key==KEY_DOWN || KEY_UP)
penultimo_key=key;
if(key==KEY_LEFT || KEY_RIGHT)
ultimo_key=key;

}while(3000);
}
void main()
{
WINDOW **esqueleto, **menus;
char titulo[10],*titulo_menus[3],tm1[27],tm2[27],tm3[27];
char *titulo_submenu1[2],tsm1_1[14],tsm1_2[14];
char *titulo_submenu2[4],tsm2_1[14],tsm2_2[14],tsm2_3[20],tsm2_4[21];
char *titulo_submenu3[6],tsm3_1[20],tsm3_2[12],tsm3_3[20],tsm3_4[20],tsm3_5[18],tsm3_6[20];
int tam_vet_sm[3];
strcpy(titulo,"BIBLIOTECA");
strcpy(tm1,"(F1) CADASTRO DE LIVROS -->");
strcpy(tm2,"(F2) CADASTRO DE ALUNOS -->");
strcpy(tm3,"(F3) EMPRESTIMOS -->");
titulo_menus[0]=tm1;
titulo_menus[1]=tm2;
titulo_menus[2]=tm3;
strcpy(tsm1_1,"INSERIR LIVROS");
strcpy(tsm1_2,"EXCLUIR LIVROS");
titulo_submenu1[0]=tsm1_1;
titulo_submenu1[1]=tsm1_2;
strcpy(tsm2_1,"INSERIR ALUNOS");
strcpy(tsm2_2,"EXCLUIR ALUNOS");
strcpy(tsm2_3,"QUANTIDADE DE ALUNOS");
strcpy(tsm2_4,"VERIFICAR EMPRESTIMOS");
titulo_submenu2[0]=tsm2_1;
titulo_submenu2[1]=tsm2_2;
titulo_submenu2[2]=tsm2_3;
titulo_submenu2[3]=tsm2_4;
strcpy(tsm3_1,"REALIZAR EMPRESTIMOS");
strcpy(tsm3_2,"IMPRIME TUDO");
strcpy(tsm3_3,"CANCELAR EMPRESTIMOS");
strcpy(tsm3_4,"DEVOLVER EMPRESTIMOS");
strcpy(tsm3_5,"LIVROS DISPONIVEIS");
strcpy(tsm3_6,"DEVOLVER EMPRESTIMOS");
titulo_submenu3[0]=tsm3_1;
titulo_submenu3[1]=tsm3_2;
titulo_submenu3[2]=tsm3_3;
titulo_submenu3[3]=tsm3_4;
titulo_submenu3[4]=tsm3_5;
titulo_submenu3[5]=tsm3_6;
tam_vet_sm[0]=2;
tam_vet_sm[1]=4;
tam_vet_sm[2]=6;
inicia_ncurses();
bkgd(COLOR_PAIR(FUNDO));
refresh();
esqueleto=cria_esqueleto(titulo);
menus=cria_menus(titulo_menus,3);
rolagem(menus,esqueleto,titulo_menus,titulo_submenu1,titulo_submenu2,titulo_submenu3,3,tam_vet_sm);
/*for(;;)
{
redimensiona_esqueleto(esqueleto,titulo);
redimensiona_menus(menus,titulo_menus,3);
}*/
}


a comparação que não está entrando está na função rolagem. está com o comentário indicando. por favor me dá um help aqui.


  


2. Re: ncurses - problema F1-F12 [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 26/01/2014 - 20:35h

bem não era problema para reconhecer a tecla, era algum bug no código, em fim agora pelo menos isso está funcionando:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
#define FUNDO 1
#define SOMBRA 2
#define JANELA 3
#define SELECAO1 4
#define SELECAO2 5
#define BOTAO 6
#define SELECAO_B 7
#define KEY_ESC 27


void inicia_ncurses()
{
initscr();
start_color();
init_pair(FUNDO,COLOR_BLACK,COLOR_BLUE);
init_pair(SOMBRA,COLOR_BLACK,COLOR_BLACK);
init_pair(JANELA,COLOR_BLACK,COLOR_CYAN);
init_pair(SELECAO1,COLOR_WHITE,COLOR_BLUE);
init_pair(SELECAO2,COLOR_GREEN,COLOR_BLACK);
init_pair(BOTAO,COLOR_WHITE,COLOR_BLACK);
init_pair(SELECAO_B,COLOR_BLACK,COLOR_WHITE);
noecho();
keypad(stdscr,TRUE);
cbreak();
curs_set(0);
}
WINDOW **cria_esqueleto(char *titulo)
{
WINDOW **esqueleto;
int tamanho=strlen(titulo);
esqueleto=(WINDOW **)malloc(3*sizeof(WINDOW *));
esqueleto[0]=newwin((LINES-2),(COLS-3),1,2);
wbkgd(esqueleto[0],COLOR_PAIR(SOMBRA));
wrefresh(esqueleto[0]);
esqueleto[1]=newwin((LINES-3),(COLS-3),1,1);
wbkgd(esqueleto[1],COLOR_PAIR(JANELA));
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
wrefresh(esqueleto[1]);
esqueleto[2]=newwin((LINES-10),(COLS-5),5,2);
box(esqueleto[2],0,0);
wbkgd(esqueleto[2],COLOR_PAIR(JANELA));
wrefresh(esqueleto[2]);
return esqueleto;
}
void redimensiona_esqueleto(WINDOW **esqueleto,char *titulo)
{
int cont,tamanho=strlen(titulo);
clear();
for(cont=0;cont<3;cont++)
wclear(esqueleto[cont]);
wresize(esqueleto[0],(LINES-2),(COLS-3));
wresize(esqueleto[1],(LINES-3),(COLS-3));
wresize(esqueleto[2],(LINES-10),(COLS-5));
box(esqueleto[2],0,0);
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
refresh();
for(cont=0;cont<3;cont++)
wrefresh(esqueleto[cont]);
sleep(1);
}
int largura_menu(char *titulo_menus[],int tam_vet_str)
{
int cont,tam=0,aux;
for(cont=0;cont<tam_vet_str;cont++)
{
aux=strlen(titulo_menus[cont]);
if(aux>tam)
tam=aux;
}
return tam;
}
WINDOW **cria_menus(char *titulo_menus[],int tam_vet_str)
{
WINDOW **menus;
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
menus=(WINDOW **)malloc(tam_vet_str*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_str;cont++)
{
menus[cont]=newwin(1,tam,cont+8,(COLS/2)-((tam/2)+1));
wbkgd(menus[cont],COLOR_PAIR(JANELA));
mvwprintw(menus[cont],0,0,titulo_menus[cont]);
wrefresh(menus[cont]);
}
return menus;
}
void redimensiona_menus(WINDOW **menus,char *titulo_menus[],int tam_vet_str)
{
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
for(cont=0;cont<tam_vet_str;cont++)
{
mvwin(menus[cont],cont+8,(COLS/2)-((tam/2)+1));
wrefresh(menus[cont]);
}
sleep(1);
}
void atualiza_menu(WINDOW **menus,int tam_vet_str)
{
int i;
for(i=0;i<tam_vet_str;i++)
{
wbkgd(menus[i],COLOR_PAIR(JANELA));
wrefresh(menus[i]);
}

}
WINDOW **cria_submenu(WINDOW **menus,char *titulo_submenu[],int tam_vet_sm,int linha_inicio)
{
int cont,tam,tamM;
WINDOW **submenu;
tam=largura_menu(titulo_submenu,tam_vet_sm);
getyx(menus[0],cont,tamM);
submenu=(WINDOW **)malloc(tam_vet_sm*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_sm;cont++)
{
submenu[cont]=newwin(1,tam+2,cont+linha_inicio,(COLS/2)+((tamM/2)));
wbkgd(submenu[cont],COLOR_PAIR(SELECAO1));
mvwprintw(submenu[cont],0,1,titulo_submenu[cont]);
wrefresh(submenu[cont]);
}
return submenu;
}
WINDOW **cria_botao(char *titulo_botao[],int n_botoes)
{
WINDOW **botao;
int tam;
if(n_botoes==1)
{
botao=(WINDOW **)malloc(sizeof(WINDOW *));
tam=largura_menu(titulo_botao,n_botoes);
botao[0]=newwin(1,tam+2,LINES-4,(COLS/2)-(tam/2));
wbkgd(botao[0],COLOR_PAIR(BOTAO));
mvwprintw(botao[0],0,1,titulo_botao[0]);
wrefresh(botao[0]);
return botao;
}

}
WINDOW **exclui_submenu(WINDOW **esqueleto, WINDOW **submenu,int tam_vet_sm)
{
int i;
for(i=0;i<tam_vet_sm;i++)
{
delwin(submenu[i]);
wrefresh(esqueleto[2]);
box(esqueleto[2],0,0);
}
free(submenu);
return NULL;
}
void seleciona_menus(WINDOW **menus,int tamanho,int local,int NORMAL, int SELECAO)
{
int i;
for(i=0;i<tamanho;i++)
{
wbkgd(menus[i],COLOR_PAIR(NORMAL));
wrefresh(menus[i]);
}
wbkgd(menus[local],COLOR_PAIR(SELECAO));
wrefresh(menus[local]);
}
WINDOW **decisao_submenu(WINDOW **esqueleto,WINDOW **menus,WINDOW **submenu_corrente,int tam_vet_str,char *titulo_sms1[],char *titulo_sms2[], char *titulo_sms3[],int *tam_vet_sm,int local)
{
WINDOW **submenu;
if(submenu_corrente==NULL)
{
if(local==0)
submenu=cria_submenu(menus,titulo_sms1,tam_vet_sm[0],8);
else
{
if(local==1)
submenu=cria_submenu(menus,titulo_sms2,tam_vet_sm[1],9);
else
if(local==2)
submenu=cria_submenu(menus,titulo_sms3,tam_vet_sm[2],10);
}
}
else
{
submenu_corrente=exclui_submenu(esqueleto,submenu_corrente,tam_vet_str);
atualiza_menu(menus,tam_vet_str);
if(local==0)
submenu=cria_submenu(menus,titulo_sms1,tam_vet_sm[0],8);
else
{
if(local==1)
submenu=cria_submenu(menus,titulo_sms2,tam_vet_sm[1],9);
else
if(local==2)
submenu=cria_submenu(menus,titulo_sms3,tam_vet_sm[2],10);
}
}
return submenu;
}
int decisao_f1_a_f3(WINDOW **esqueleto,WINDOW **menus,int tam_vet_str,int localM,WINDOW **submenu,int tam_vet_sm, char *titulo_sm[], int ln_inicio)
{
int key,posicao=0, ultimo_key;
if(submenu==NULL)
submenu=cria_submenu(menus,titulo_sm,tam_vet_sm,ln_inicio);
else
{
submenu=exclui_submenu(esqueleto,submenu,tam_vet_sm);
submenu=cria_submenu(menus,titulo_sm,tam_vet_sm,ln_inicio);
}
seleciona_menus(menus,tam_vet_str,localM,JANELA,SELECAO1);
do
{
if(key!=KEY_LEFT)
key=getch();
if(key==KEY_RIGHT)
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
}while(key!=KEY_LEFT && key!=KEY_RIGHT && key!=KEY_F(1) && key!=KEY_F(2) && key!=KEY_F(3) && key!=KEY_DOWN && key!=KEY_UP);
if(key!=KEY_DOWN && key!=KEY_UP)
{
while(key!=KEY_LEFT && key!=KEY_F(1) && key!=KEY_F(2) && key!=KEY_F(3))
{
ultimo_key=key;
key=getch();
if(key==KEY_LEFT)
continue;
if(key==KEY_UP || key==KEY_DOWN)
{
if(ultimo_key!=KEY_DOWN && ultimo_key!=KEY_UP && key==KEY_DOWN)
posicao++;
else
if(ultimo_key!=KEY_DOWN && ultimo_key!=KEY_UP && key==KEY_UP)
posicao=tam_vet_sm-1;
if(posicao>=0 && posicao<tam_vet_sm)
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao==1)
posicao=tam_vet_sm-1;
else
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao>0)
posicao-=2;
else
{
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao==tam_vet_sm-2)
posicao=0;
else
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao>=0)
posicao+=2;
}
}
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
if(key==KEY_DOWN)
posicao++;
else
if(key==KEY_UP)
posicao--;
}
else
{
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao==-1)
{
posicao+=2;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
posicao++;
}
else
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao==tam_vet_sm)
{
posicao-=2;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
posicao--;
}
else
{
if(key==KEY_DOWN)
posicao=0;
else
if(key=KEY_UP)
posicao=tam_vet_sm-1 ;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
if(key==KEY_DOWN)
posicao++;
else
if(key==KEY_UP)
posicao--;
}
}
}
}
}
submenu=exclui_submenu(esqueleto,submenu,tam_vet_sm);
seleciona_menus(menus,tam_vet_str,localM,JANELA,SELECAO1);
return key;
}
else
{
submenu=exclui_submenu(esqueleto,submenu,tam_vet_sm);
seleciona_menus(menus,tam_vet_str,localM,JANELA,JANELA);
return key;
}

}
WINDOW **decisao_down_up_tab(WINDOW **esqueleto,WINDOW **menus,WINDOW **submenu,int tam_vet_str,char *titulo_sms1[],char *titulo_sms2[], char *titulo_sms3[],int *tam_vet_sm,int *tecla,int *local_atual)
{
WINDOW **submenu_corrente=submenu;
int key=-1,trava=0,local=*local_atual,ultimo=-1;
while(key!=KEY_LEFT && key!=KEY_RIGHT && key!=KEY_F(1) && key!=KEY_F(2) && key!=KEY_F(3))
{
if(trava!=0)
{
ultimo=key;
key=getch();
if(key==KEY_LEFT || key==KEY_RIGHT || key==KEY_F(1) || key==KEY_F(2) || key==KEY_F(3))
{
*tecla=key;
continue;
}
}
else
{
trava=1;
key=*tecla;
}
if(key==KEY_DOWN || key=='\t' || key==KEY_UP)
{
if(local>=0 && local<tam_vet_str)
{
if(ultimo==KEY_DOWN && key==KEY_UP && local==1)
local=tam_vet_str-1;
else
{
if(ultimo==KEY_DOWN && key==KEY_UP && local>0)
local-=2;
else
{
if(ultimo==KEY_UP && key==KEY_DOWN && local==tam_vet_str-2)
local=0;
else
if(ultimo==KEY_UP && key==KEY_DOWN && local>=0)
local+=2;
}
}
submenu_corrente=submenu;
submenu=decisao_submenu(esqueleto,menus,submenu_corrente,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,local);
seleciona_menus(menus,tam_vet_str,local,JANELA,SELECAO1);
if(key==KEY_DOWN || key=='\t')
local++;
else
if(key==KEY_UP)
local--;
}
else
{
if(ultimo==KEY_UP && key==KEY_DOWN && local==-1)
{
local+=2;
submenu_corrente=submenu;
submenu=decisao_submenu(esqueleto,menus,submenu_corrente,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,local);
seleciona_menus(menus,tam_vet_str,local,JANELA,SELECAO1);
local++;
}
else
{
if(ultimo==KEY_DOWN && key==KEY_UP && local==tam_vet_str)
{
local-=2;
submenu_corrente=submenu;
submenu=decisao_submenu(esqueleto,menus,submenu_corrente,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,local);
seleciona_menus(menus,tam_vet_str,local,JANELA,SELECAO1);
local--;
}
else
{
if(key==KEY_DOWN || key=='\t')
local=0;
else
if(key==KEY_UP)
local=tam_vet_str-1;
submenu_corrente=submenu;
submenu=decisao_submenu(esqueleto,menus,submenu_corrente,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,local);
seleciona_menus(menus,tam_vet_str,local,JANELA,SELECAO1);
if(key==KEY_DOWN || key=='\t')
local++;
else
if(key==KEY_UP)
local--;
}
}
}
}
}
if(ultimo==KEY_DOWN)
{
if(local>0 && local<tam_vet_str)
local--;
else
local=tam_vet_str-1;
*local_atual=local;
return submenu;
}
else
{
if(ultimo==KEY_UP)
{
if(local>=0 && local<tam_vet_str-1)
local++;
else
if(local<tam_vet_str);
local=0;
*local_atual=local;
return submenu;
}
}
}
void decisao_right(WINDOW **esqueleto,WINDOW **menus,int tam_vet_str,int localM, char *titulo_submenu[],int tam_vet_sm,int linha_inicio)
{
WINDOW **submenu;
int key,ultimo_key,posicao=0;
submenu=cria_submenu(menus,titulo_submenu,tam_vet_sm,linha_inicio);
seleciona_menus(submenu,tam_vet_sm,0,SELECAO1,SELECAO2);
while(key!=KEY_LEFT && key!=KEY_F(1) && key!=KEY_F(2) && key!=KEY_F(3))
{
ultimo_key=key;
key=getch();
if(key==KEY_LEFT || key==KEY_RIGHT)
continue;
if(key==KEY_UP || key==KEY_DOWN)
{
if(ultimo_key!=KEY_DOWN && ultimo_key!=KEY_UP && key==KEY_DOWN)
posicao++;
else
if(ultimo_key!=KEY_DOWN && ultimo_key!=KEY_UP && key==KEY_UP)
posicao=tam_vet_sm-1;
if(posicao>=0 && posicao<tam_vet_sm)
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao==1)
posicao=tam_vet_sm-1;
else
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao>0)
posicao-=2;
else
{
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao==tam_vet_sm-2)
posicao=0;
else
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao>=0)
posicao+=2;
}
}
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
if(key==KEY_DOWN)
posicao++;
else
if(key==KEY_UP)
posicao--;
}
else
{
if(ultimo_key==KEY_UP && key==KEY_DOWN && posicao==-1)
{
posicao+=2;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
posicao++;
}
else
{
if(ultimo_key==KEY_DOWN && key==KEY_UP && posicao==tam_vet_sm)
{
posicao-=2;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
posicao--;
}
else
{
if(key==KEY_DOWN)
posicao=0;
else
if(key=KEY_UP)
posicao=tam_vet_sm-1 ;
seleciona_menus(submenu,tam_vet_sm,posicao,SELECAO1,SELECAO2);
if(key==KEY_DOWN)
posicao++;
else
if(key==KEY_UP)
posicao--;
}
}
}
}
}
submenu=exclui_submenu(esqueleto,submenu,tam_vet_sm);
seleciona_menus(menus,tam_vet_str,localM,JANELA,SELECAO1);
}
void rolagem(WINDOW **menus,WINDOW **esqueleto,char *titulo_menus[],char *titulo_sms1[],char *titulo_sms2[],char *titulo_sms3[], int tam_vet_str,int *tam_vet_sm)
{
int key,key_udt=-1,key_f=-1,local=0,trava=0;
WINDOW **submenu=NULL;
do
{
if((key_udt!=-1)&&(key_udt==KEY_LEFT || key_udt==KEY_RIGHT || key_udt==KEY_F(1) || key_udt==KEY_F(2) || key_udt==KEY_F(3)))
{
key=key_udt;
key_udt=-1;
}
else
{
if((key_f!=-1)&&(key_f==KEY_DOWN || key_f==KEY_UP || key_f==KEY_F(1) || key_f==KEY_F(2) || key_f==KEY_F(3)))
{
key=key_f;
if(key_f==KEY_DOWN || key_f==KEY_UP)
key_udt=key;
key_f=-1;
}
else
{
key=getch();
if(key==KEY_DOWN || key==KEY_UP || key=='\t')
key_udt=key;
}
}
switch(key)
{
case KEY_F(1):
key_f=decisao_f1_a_f3(esqueleto,menus,tam_vet_str,0,submenu,tam_vet_sm[0],titulo_sms1,8);
submenu=NULL;
local=0;
trava=1;
break;
case KEY_F(2):
key_f=decisao_f1_a_f3(esqueleto,menus,tam_vet_str,1,submenu,tam_vet_sm[1],titulo_sms2,9);
submenu=NULL;
local=1;
trava=1;
break;
case KEY_F(3):
key_f=decisao_f1_a_f3(esqueleto,menus,tam_vet_str,2,submenu,tam_vet_sm[2],titulo_sms3,10);
submenu=NULL;
local=2;
trava=1;
break;
case KEY_LEFT:
if(submenu==NULL)
{
atualiza_menu(menus,tam_vet_str);
local=0;
trava=0;
}
else
{
submenu=exclui_submenu(esqueleto,submenu,tam_vet_sm[local]);
seleciona_menus(menus,tam_vet_str,local,JANELA,SELECAO1);
submenu=NULL;
}
break;
case KEY_DOWN:
if(trava!=0)
local++;
submenu=decisao_down_up_tab(esqueleto,menus,submenu,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,&key_udt,&local);
trava++;
break;
case '\t':
if(trava!=0)
local++;
submenu=decisao_down_up_tab(esqueleto,menus,submenu,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,&key_udt,&local);
trava++;
break;
case KEY_UP:
if(trava!=0)
local--;
submenu=decisao_down_up_tab(esqueleto,menus,submenu,tam_vet_str,titulo_sms1,titulo_sms2,titulo_sms3,tam_vet_sm,&key_udt,&local);
trava++;
break;
case KEY_RIGHT:
if(local==0)
decisao_right(esqueleto,menus,tam_vet_str,local,titulo_sms1,tam_vet_sm[0],8);
else
{
if(local==1)
decisao_right(esqueleto,menus,tam_vet_str,local,titulo_sms2,tam_vet_sm[1],9);
else
if(local==2)
decisao_right(esqueleto,menus,tam_vet_str,local,titulo_sms3,tam_vet_sm[2],10);
}
break;
case KEY_ESC:
exit(0);
}
}while(30000);
}
void main()
{
WINDOW **esqueleto, **menus, **botao;
char titulo[10],*titulo_menus[3],tm1[27],tm2[27],tm3[27];
char *titulo_submenu1[2],tsm1_1[14],tsm1_2[14];
char *titulo_submenu2[4],tsm2_1[14],tsm2_2[14],tsm2_3[20],tsm2_4[21];
char *titulo_submenu3[6],tsm3_1[20],tsm3_2[12],tsm3_3[20],tsm3_4[20],tsm3_5[18],tsm3_6[20];
char *titulo_b[2];
char titulo_b1[5];
int tam_vet_sm[3];
strcpy(titulo,"BIBLIOTECA");
strcpy(tm1,"(F1) CADASTRO DE LIVROS -->");
strcpy(tm2,"(F2) CADASTRO DE ALUNOS -->");
strcpy(tm3,"(F3) EMPRESTIMOS -->");
titulo_menus[0]=tm1;
titulo_menus[1]=tm2;
titulo_menus[2]=tm3;
strcpy(tsm1_1,"INSERIR LIVROS");
strcpy(tsm1_2,"EXCLUIR LIVROS");
titulo_submenu1[0]=tsm1_1;
titulo_submenu1[1]=tsm1_2;
strcpy(tsm2_1,"INSERIR ALUNOS");
strcpy(tsm2_2,"EXCLUIR ALUNOS");
strcpy(tsm2_3,"QUANTIDADE DE ALUNOS");
strcpy(tsm2_4,"VERIFICAR EMPRESTIMOS");
titulo_submenu2[0]=tsm2_1;
titulo_submenu2[1]=tsm2_2;
titulo_submenu2[2]=tsm2_3;
titulo_submenu2[3]=tsm2_4;
strcpy(tsm3_1,"REALIZAR EMPRESTIMOS");
strcpy(tsm3_2,"IMPRIME TUDO");
strcpy(tsm3_3,"CANCELAR EMPRESTIMOS");
strcpy(tsm3_4,"DEVOLVER EMPRESTIMOS");
strcpy(tsm3_5,"LIVROS DISPONIVEIS");
strcpy(tsm3_6,"DEVOLVER EMPRESTIMOS");
titulo_submenu3[0]=tsm3_1;
titulo_submenu3[1]=tsm3_2;
titulo_submenu3[2]=tsm3_3;
titulo_submenu3[3]=tsm3_4;
titulo_submenu3[4]=tsm3_5;
titulo_submenu3[5]=tsm3_6;
tam_vet_sm[0]=2;
tam_vet_sm[1]=4;
tam_vet_sm[2]=6;
strcpy(titulo_b1,"SAIR");
titulo_b[0]=titulo_b1;
inicia_ncurses();
bkgd(COLOR_PAIR(FUNDO));
refresh();
esqueleto=cria_esqueleto(titulo);
menus=cria_menus(titulo_menus,3);
botao=cria_botao(titulo_b,1);
rolagem(menus,esqueleto,titulo_menus,titulo_submenu1,titulo_submenu2,titulo_submenu3,3,tam_vet_sm);
/*for(;;)
{
redimensiona_esqueleto(esqueleto,titulo);
redimensiona_menus(menus,titulo_menus,3);
}*/
}








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts