/*
fichier lit_ecrit.cxx
contient
	- l'action AfficheEntierLong(a)
	- la fonction LitEntierLong
*/

//inclusion de fichiers entetes

#include <iostream> //pour cout et cin
using namespace std;

#include <cstring> // pour strlen
//#include <ctype> // pour toascii

#include "entierlong.h" //pour le type EntierLong

#include "lit_ecrit.h" /* facultatif : permet de verifier que les types
des parametres dans les prototypes sont bien les memes que dans les
actions/fonctions correspondantes*/

//fonction AfficheEntierLong(n)
//affiche sur l'ecran un EntierLong
void AfficheEntierLong(EntierLong a)
{
    //variables
    int i,j;
    // debut
    // signe
    if (a.negatif)
    {
	   cout <<"-";
    }
    // chiffres
    /* on recherche le 1er chiffre non nul (ou le chiffre des unites dans le cas
    d'un entier nul*/
    i=MAXCHIFFRES-1;
    while ((a.chiffres[i]==0)&&(i>0))
    {
    	i=i-1;
    }
    /*on ecrit les chiffres "utiles"*/
    for(j=i;j>=0;j=j-1)
    {
    	cout << a.chiffres[j];
    }
    cout << endl;
    // fin
}

//fonction LitEntierLong
//lit au clavier un EntierLong
EntierLong LitEntierLong()
{
    char Nb[MAXCHIFFRES+1];
    EntierLong a;
    int i,l;
    // debut
    cin >> Nb;
    a.negatif = (Nb[0]=='-');
    l=strlen(Nb);
    if ((a.negatif)||(Nb[0]=='+'))
    {
    	//on decale le caractere de fin de chaine d'un indice a gauche
    	for(i=0;i<l;i=i+1)
    	{
    		Nb[i]=Nb[i+1];
    	}
    	l=strlen(Nb);
    }
    for (i=0;i<l;i=i+1)
    {
    	a.chiffres[i] = toascii(Nb[l-1-i])-toascii('0');
    }
    // on complete par des 0
    for (i=l;i<MAXCHIFFRES;i=i+1)
    {
    	a.chiffres[i]=0;
    }
    return a;
    // fin
}