/* 	Classe Ambiente 

	Assunto: 	metodos de comunicacao.
	Condicionantes:
	Programa sem erros

	Descrição: 
		Esta classe tem duas funções da linguagem C - entrada_int(),
			entrada_float() - devem ficar assim como exemplo de funções
			escrita em C numa classe
			São atalhos C em C++
			
			Exemplifica como uma alteração em Ambiente.h  se propaga para
				todos os programas que a usarem - as funções 
				entrada_in, entrada_float()
				se modificadas os programas que usem Ambiente.h  não soferão
				nenhuma modificação.

		apeteco('duas mensagens'), limpa_tela(vazia)	
      Índice dos métodos públicos:
		int 		apeteco(char mensagem1[70], char mensagem2[70]);
		int 		apeteco2(); // mensagem própria
		int 		apetecof(); // mensagem final
		int 		compara(char primeira[15], char segunda[15]);
		int 		copyleft();
		int 		limpa_janela();
		int 		linhaembranco();	// imprime uma linha em branco		
		void		marca();		
		void 		mask();
		void		rotulo(char prim[80], char seg[80], char ter[80], char fim[80])
		int 		obrigado();
		int 		quatrolinhas();		
		int  		sim_nao(int resposta); // admite resposta padrão  
      void     separa() // uma linha pafa separar		
		int 		sucesso();        
		int 		translata();		    
		// quatro  métodos para entrada de dados
		int		entrada_int(char msg[80], int valor); // (100) não alterar
		float		entrada_float(char msg[80], float valor); // (100)  não alterar
		string	entrada_nomes(string  msg, string valor)
		char		entrada_caracter(string  msg, char valor)

	Palavras-chave: monologos com usuario, atalhos C em C++
   por Tarcisio Praciano Pereira -  C++ para matemáticos
   Sobral, Janeiro de 2006	- UeVA    	      		
*/

# include <iostream>
# include <string>
using namespace std;


class Ambiente
{
	public: // métodos públicos

		// imprime duas mensagens e aguarda 'return'   
		// as mensagens são definidas pelo programador.
		int apeteco(char mensagem1[70], char mensagem2[70])
		{
			char 	w; // para usar com cin.get()
			//char	deposito[80];
			cout << "================================================= " << endl;
			cout <<  mensagem1 << mensagem2 
					<< " enter " << endl;
			//fgets(deposito, sizeof(deposito), stdin);
			cin.get(w); //.get();			
			fflush(stdin);
			cout << "\a\a\a\a\a" << endl;
			return(0);
		}

		int apeteco2()
		{
			char  w; // para usar com cin.get()
			//char  deposito[80];
			cout 	<< "\n================================================= "
					<< "\a\a\a\a\a\n" << endl;
			cout << " Aperte <enter> para continuar ";
			//fgets(deposito, sizeof(deposito), stdin);
			cin.get(w);//.get();			
			fflush(stdin);			
			// cin.get(w).get();			
			cout << "\a\a\a\a\a\n"<< endl;
			return(0);
		}

		int apetecof()
		{
			char  w; // para usar com cin.get()
			//char  deposito[80];
			cout << "\n======================================== " << endl;
			cout << "\a\a\a\a\a\n"<< endl;
			cout << " Aperte <enter> para finalizar " << endl;
			//fgets(deposito, sizeof(deposito), stdin);
			cin.get(w); // .get();			
			fflush(stdin);
			cout << "\a\a\a\a\a\n" << endl;
			return(0);
		}


		// corrige a lógica perversa de strcmp()  sucesso = 1
		// strcmp() devolve 0 quando houver sucesso que corresponde ao
		// 	falso. compara()  inverte o resultado.
		int compara(char primeira[15], char  segunda[15])
			{
				return (!strcmp(primeira, segunda));
			}


		int copyleft()
		{
		limpa_janela();
		cout << "=================         copyleft        ================== " << endl
		<< "   \"Copyleft\", um outro tipo de direito autoral, por ele os programas" << endl     
		 << "são fornecidos como se encontram, sem garantias de qualquer natureza " << endl
       << "na esperança de que possam ser úteis para o seu aprendizado. " << endl
       << "\t Podem ser livremente copiados e distruibuidos desde que:  "  << endl
       << "(1) seja mencionada a  fonte,  " << endl
       << "(2) que os arquivos não sejam alterados," << endl
       << "(3) sem nenhum custo, além do que for necessário para distribuí-los "<< endl
       << "\t O espirito do nosso trabalho é o de \"código aberto\" e isto " << endl
       << "significa que quem desejar participar do nosso trabalho é bem vindo,  " << endl
       << "propor idéias para melhorar o projeto ou arregaçar as mangas e vir se juntar " << endl
       << "ao trabalho, seguindo o exemplo dos pioneiros do \"código aberto\", " << endl
       << "do qual LinuX é, possivelmente, o exemplo maior. " << endl
       << "   Mas você estará infringindo os direitos do autor se distribuir " << endl
       << "nosso trabalho em um CD ou colocar os programas ou os livros em site " << endl
       << "da web sem autorização por escrito dos autores.  " << endl
       << "===  copyleft por Tarcisio Praciano-Pereira  === " << endl
       << "contacto:   tarcisio@member.ams.org  "   << endl;
      return(0); 
		}



		int limpa_janela()
		{
         system("clear");    
			return(0);
		}


		void	marca()
			{
			cout << "=======================================" << endl;
			}


		// Mask(projeto, programa, local, versao, autor)	
		int  mask()
			{
			cout << "========================================== " << endl
			<< "C++ para Matemáticos " << endl
			<< "Univ. Estadual do Vale do Acaraú - Sobral " << endl
			<<  "versão  1.0 " << endl
			<< "Tarcisio Praciano-Pereira  " << endl
			<< "tarcisio@member.ams.org "  << endl
			<<  "==========================================" << endl;
			return(0);
			}

		void	rotulo(char prim[80], char seg[80], char ter[80], char fim[80])
		{
			cout << prim << endl << seg << endl
					<< ter << endl << fim << endl;
		}

		int obrigado()
		{
			translata();  // corre algumas linhas
			cout 
			<< " \t Obrigado por usar o nosso sistema.  " << endl
			<< " dirija suas consultas, reclamações ou sugestões a " << endl
			<< " \t tarcisio@member.ams.org    " << endl
			<< " ou,(caso extremo), pelo fone  (088) 3677 4246   " << endl
			<< " Em nome da equipe, mais uma vez, grato.  " << endl 
			<< " \a\a\a\a\a " << endl; // apita cinco vezes
			return(0);
		}


		void	separa()
			{
			cout << "=======================================" << endl;
			}

		// resposta default é  não 
		int  sim_nao()
			{
			char buffer[5];
			char Resposta='n';
			cout << " Sim ou nao <s,n> ? ";  
			fgets(buffer, sizeof(buffer), stdin);
			sscanf(buffer, "%c",&Resposta);
			// apeteco2();  // Acho desnecessário, vamos verificar com o uso
			switch (Resposta)
				{
				case 'S':
					return(1);
				case 's':
					return(1);
				default: 
					return(0);	
				}
			}
			
		// limpesa parcial da tela...deve ser substituida por quatrolinhas();
		int translata()
		{
				 cout << " " << endl; 
				 cout << "\a\a\a\a\a"; // apita 5 vezes e passa 5 linhas
				 return(0);
		}

		int	linhaembranco()
		{
			cout << "  " << endl;
			return(0);
		}

		// limpesa parcial da tela...  deve substituir  translata()
		int quatrolinhas()
		{
				 cout <<  endl <<  endl <<  endl  << endl; 
				 return(0);
		}

			
		// funcao sucesso - imprime uma mensagem de sucesso escolhida  
		// de sucesso. Pode ser alterada
		int sucesso(char sucesso[80]="foi um sucesso ")
		{
			cout <<  sucesso << endl;
			return(0);
		}
		
		int		entrada_int(char msg[80], int valor)
		{
			char	deposito[80];
			cout << msg << "  " << valor << "  ";
			fgets(deposito, sizeof(deposito), stdin);
			sscanf(deposito, "%d", &valor);
			return(valor);		
		}

		float		entrada_float(char msg[80], float valor)
		{
			char	deposito[80];
			cout << msg << "  " << valor << "  ";
			fgets(deposito, sizeof(deposito), stdin);
			sscanf(deposito, "%f", &valor);
			return(valor);				
		}

      string	entrada_nomes(char msg[80], string valor)
      {
      		cout	<< msg << valor << " ";
      		getline(cin , valor);	 // C++
      		fflush(stdin);
				return(valor);      	
      }

		char		entrada_caracter(string  msg, char valor)
      {
      		cout	<< msg << valor << " ";
      		cin  >> valor;	 // C++
      		fflush(stdin);
				return(valor);      	
      }
       
};

/* Comentários:
	
(100) Os métodos  entrada_int(), entrada_float() usam funções  da linguagem C - 
		fgets(), sscanf()	- Devem ficar assim como exemplos de atalhos de
		C em C++ 
	
*/

	

