/* Programa    return.cc  
	Assunto: Para mostrar o significado do return()
	Condicionantes:  Compile com
		g++ -Wall -oprog   return.cc
		
	Programa sem erros

	Descrição:  mostra para onde vai o valor do return(int) 

	palavras chave: return, sistema operacional
   por Tarcisio Praciano Pereira     - 10 licoes para aprender C++
   Sobral, Abril de 2008 - UeVA    	      		
*/


# include <fstream>
# include "Ambiente.h" // Biblioteca particular: comunicacao com usuário

using namespace std; // a evitar - polui o espaço de nomes  // a evitar - polui o espaço de nomes    // a evitar - polue o espaço de nomes


Ambiente Tela;  // Uma instância de Ambiente - herda seus métodos
int	rotulo();
int	final();

int main()
{
      int numero1, numero2;
	Tela.mask(); // Tela herdou este método  definido em Ambiente
	rotulo(); Tela.apeteco2(); Tela.limpa_janela();
	cout	<< "Me dê dois números inteiros: \n" 
	      << "O primeiro eu vou imprimir em seguida, e o segundo\n"
	      << "você vai obter com um comando do Sistema Operacional \n"
	      << "usando o terminal de Linux onde você rodar este programa.\n"
	      << "Possivelmente não funciona no windows... sorry! \n"
	      << "Não use números muito grandes, até 30, e, naturalmente,\n"
	      << "números diferentes. \n" 
             << "Não se esqueça de ler, no programa,  o comentário\n"
             << "ao lado da função return(numero2) " <<  endl;	      
        cout << "O primeiro número inteiro: "; cin >> numero1;
        cout << "O segundo  número inteiro: "; cin >> numero2; 
        cout << "O primeiro   número que você me deu foi: " << numero1 << endl;
        cout << " ---------   e agora chamando o SO ----------- \n";
        cout << "\tPara ver qual foi o segundo  número que você me deu \n"
            <<  "execute este comando \n\n\t\t   echo ${?}  \n\n"
             << "agora, assim que o programa parar. " << endl; 
	return(numero2); // o número passado para o SO 
}

int rotulo()
{
  cout << "\t  -   significado do return(0)  em main()    - " << endl
       << "======================================================" << endl;
   cout  << "\t Este programa mostra para onde vai o valor que a função  \n"
 << "return() devolve ao final da função main() \n\n"
 << "\tÉ  diferente do return() que se encontra nas demais funções. \n"
 << "Nas demais funções, return() é usado para devolver o valor que a função \n"
 << "produz, para outra função, que, eventualmente, a chamar. \n"
 << "\tComo ninguém chama a main() \n"
 << "- pode acontecer - algumas recursividades um tanto perigosas \n"
 << "então parece sem sentido o return() na função main().\n\n"
 << "Este programa mostra para onde vai o return(0)  da main(), \n"
 << "porque sempre, é uma regra não escrita, sempre main() deve ser\n"
 << "do tipo  int  e portanto devolver um inteiro. \n"
 << "Rode, leia, modifique o programa para entender isto, entretanto\n"
 << "este assunto ficará simples com o passar do tempo, não dedique tempo\n"
 << "excessivo a este assunto, neste ponto, não merece.\n"
 <<  endl;
	return(0);
}

 
 
int   final()
{
	 bool  resposta=0;
	 Tela.limpa_janela();
	 cout  << "A resposta padrão para esta pergunta é \"não\" bastando que\n"
	 << "você acione o <enter> \n"
	 << "Deseja ler a noticia sobre os direitos autorais ? <s,n> \n";
	 resposta = Tela.sim_nao();
	 if (resposta)
	 {
	 Tela.copyleft();  Tela.obrigado();  Tela.apetecof();Tela.limpa_janela();
	 }
	 else
	 {
	 Tela.obrigado();Tela.apetecof();Tela.limpa_janela();
	 }
	 return(0);
}
 
 
/* Comentários:  A numeração dos comentários, como num programa em
		BASIC,  não   é continuada, pode dar saltos...para
		  facilitar a reutilização de programas.
		  
*/

