#include #include #include void slot(int tamanho) { // text_info info; // gettextinfo(&info); textbackground(BLACK); for(int col = 0; col < tamanho; col++) // mostra na tela o tamanho maximo da string putch(' '); // textbackground(info.attribute); } void escreveXY(int tam, int col, int lin, char *string) { gotoxy(col, lin); slot(tam); gotoxy(col, lin); cprintf(string); } // *********************************** // leXY // --------------------------------- // Essa funcao le uma string de // tamanho fixo na coluna e linha // especificadas char *leXY(int tamanho, int coluna, int linha) { char *string_lida = new char[tamanho+1] , // cria uma variavel para armazenar a string letra ; int lendo_string = 1 , posicao_atual = 0 ; // caracter lido no momento gotoxy(coluna, linha); textbackground(WHITE); for(int col = 0; col < tamanho; col++) // mostra na tela o tamanho maximo da string putch(' '); do{ gotoxy(coluna+posicao_atual, linha); // vai para a posicao do caracter sendo lido no momento letra = getch(); // le o proximo caracter switch(letra) { case 13: lendo_string = 0; // se pressionou ENTER //posicao_atual++; break; case 8 : // se pressionou BACKSPACE if(posicao_atual == 0) { sound(800); delay(200); nosound(); } else { posicao_atual--; gotoxy(coluna+posicao_atual, linha); // volta uma letra putch(' '); } break; case 27: lendo_string = 0; // se pressionou ESC posicao_atual = 0; break; default: if(posicao_atual == tamanho) { sound(800); delay(200); nosound(); } else { string_lida[posicao_atual] = letra; // coloca letra na string putch(letra); posicao_atual++; } } }while(lendo_string); string_lida[posicao_atual] = '\0'; return string_lida; } void borda(int ci, int li, int cf, int lf) { gotoxy(ci, li); putch(218); gotoxy(cf, li); putch(191); gotoxy(ci, lf); putch(192); gotoxy(cf, lf); putch(217); for(int coluna = ci+1; coluna < cf; coluna++) { gotoxy(coluna, li); putch(196); gotoxy(coluna, lf); putch(196); } for(int linha = li+1; linha < lf; linha++) { gotoxy(ci, linha); putch(179); gotoxy(cf, linha); putch(179); } } void janela(int ci, int li, int cf, int lf, int cor) { window(ci, li, cf, lf); textbackground(cor); clrscr(); window(1,1,80,25); borda(ci, li, cf, lf); } char* abre_janela(int ci, int li, int cf, int lf, int cor) { int tamH = cf-ci; int tamV = lf-li; int meioH = tamH/2; int meioV = tamV/2; int tamanhoH = 1; int tamanhoV = 1; int incrementoV = meioH > meioV ? (meioH/meioV) : 1; int incrementoH = meioV > meioH ? (meioV/meioH) : 1; char *buffer = new char[4096]; gettext(1,1,80,25,buffer); do { janela((ci+meioH) - tamanhoH, (li+meioV)-tamanhoV, (ci+meioH)+tamanhoH, (li+meioV)+tamanhoV, cor); tamanhoH = tamanhoH > meioH ? meioH: tamanhoH + incrementoV; tamanhoV = tamanhoV > meioV ? meioV: tamanhoV + incrementoH; delay(50); }while(tamanhoH != meioH && tamanhoV != meioV); janela(ci, li, cf, lf, cor); return buffer; } void fecha_janela(int ci, int li, int cf, int lf, int cor, char *buffer) { int tamH = cf-ci; int tamV = lf-li; int meioH = tamH/2; int meioV = tamV/2; int tamanhoH = meioH; int tamanhoV = meioV; int incrementoV = meioH > meioV ? (meioH/meioV) : 1; int incrementoH = meioV > meioH ? (meioV/meioH) : 1; do { clrscr(); puttext(1,1,80,25, buffer); janela((ci+meioH) - tamanhoH, (li+meioV)-tamanhoV, (ci+meioH)+tamanhoH, (li+meioV)+tamanhoV, cor); tamanhoH = tamanhoH > 1 ? tamanhoH - incrementoV : 1; tamanhoV = tamanhoV > 1 ? tamanhoV - incrementoH : 1; delay(50); }while(tamanhoH != 1 && tamanhoV != 1); puttext(1,1,80,25, buffer); }