Enviado em 30/09/2012 - 05:48h
Eu não conheço biblioteca de compatibilidade entre DOS e UNIX num nível como os desses comandos externos. Aliás, nem sei se deveria existir, pois, como está explícito, trata-se de comandos externos.#include <stdlib.h>
int pausar(void){
#if defined(__unix)
return system("echo -n 'Pressione <ENTER> para prosseguir... ' ; read dummy")==0;
#elif defined(_MSDOS_) || defined(_WIN32) || defined(_WIN64) || defined(_OS2)
return system("pause")==0;
#else
/*
Sistema desconhecido. Como o C padrão é agnóstico sobre o ambiente
de execução, o mais seguro é não fazer coisa alguma.
*/
return 0;
#endif
}
int limpatela(void){
#if defined(__unix)
/*
O comando "clear" é um comando externo, que pode nem mesmo estar
instalado. Se não conseguir executar, a tela vai continuar "suja",
e ainda vai surgir nela uma mensagem de erro.
*/
return system("clear")==0;
#elif defined(_MSDOS_) || defined(_WIN32) || defined(_WIN64) || defined(_OS2)
return system("cls")==0;
#else
/*
Sistema desconhecido. Como o C padrão é agnóstico sobre o hardware,
pode ser que nem exista tela; logo não faz coisa alguma.
*/
return 0;
#endif
}
#if defined(__unix)
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <curses.h>
#include <term.h>
#endif
#include <stdio.h>
#include <stdlib.h>
int pausar(void){
#if defined(__unix)
static const char msg[]="Pressione <ENTER> para prosseguir... ";
static const char nl='\n';
int cons_fd;
struct termios old_tc, tc;
char ch;
/*
Obtém descritor do terminal controlador do processo, mesmo que as
entradas e saídas padrão tenham sido redirecionadas. Se falhar,
então não tem terminal controlador, logo não faz sentido pausar.
*/
if((cons_fd=open("/dev/tty", O_RDWR, 0x644))==-1)
return 0;
/* Obtém e salva configuração atual do terminal. */
tcgetattr(cons_fd, &old_tc);
/*
Copia configuração obtida, alterando propriedades necessárias para
uma leitura sem eco na tela, para mínimo impacto visual.
*/
tc=old_tc;
tc.c_lflag&=~(ICANON|ECHO);
tc.c_cc[VMIN]=1;
tc.c_cc[VTIME]=0;
tcsetattr(cons_fd, TCSANOW, &tc);
/* Exibe mensagem de prompt. */
write(cons_fd, msg, sizeof(msg)-1);
/* Aguarda o caráter correspondente à tecla desejada. */
while ( read(cons_fd, &ch, 1)==1 && ch!='\n' )
; /* Isso mesmo: nada dentro do corpo do loop. */
/*
Pula linha, para evitar que o próximo texto escrito na tela fique
junto da mensagem de prompt.
*/
write(cons_fd, &nl, 1);
/* Restaura configuração original do terminal e fecha seu descritor. */
tcsetattr(cons_fd, TCSANOW, &old_tc);
close(cons_fd);
/* Retorna indicando sucesso. */
return 1;
#elif defined(_MSDOS_) || defined(_WIN32) || defined(_WIN64) || defined(_OS2)
return system("pause")==0;
#else
/*
Sistema desconhecido. Como o C padrão é agnóstico sobre o ambiente
de execução, o mais seguro é não fazer coisa alguma.
*/
return 0;
#endif
}
int limpatela(void){
#if defined(__unix)
/* Só limpa a tela se a saída padrão estiver ligada a um terminal. */
if(!isatty(STDOUT_FILENO))
return 0;
/*
Vê se o tipo do terminal já está definido, por meio da variável global
cur_term, declarada em term.h.
*/
if(cur_term==NULL){
/* Não está ainda. Tenta defini-lo. */
int err_code;
if(setupterm(NULL, STDOUT_FILENO, &err_code)==ERR || err_code!=1){
/* Falha. Retorna indicando que nada foi feito. */
return 0;
}
}
/*
Envia código de limpeza de tela. O valor retornado será 1 se
tiver tido sucesso, e zero de tiver havido falha.
*/
return putp(clear_screen)==OK;
#elif defined(_MSDOS_) || defined(_WIN32) || defined(_WIN64) || defined(_OS2)
return system("cls")==0;
#else
/*
Sistema desconhecido. Como o C padrão é agnóstico sobre o hardware,
pode ser que nem exista tela; logo não faz coisa alguma.
*/
return 0;
#endif
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
como coloco para instalar com esse erro. (13)
Alguém sabe de documentos de texto e /ou vídeo aulas de certificações ... (1)