/*_____________
Martin Robinson
encodeur morse
saisie un message et le convertie en morse
_______________
Preprocesseur*/

#include <iostream>

#include "../lib/saisieMR.hpp"

using namespace std;

/*______________
Les structures*/

struct association{
	char key;			//charactere alphabetique
	char value[7];		//code morse
};

/*_____________________
Prototype de fonction*/
char toUpper(char c);
template <int qty>
int trouverCodeMorse(char key, association liste[]);

/*___________________
Programme principal*/

int main()
{
    //initialisation
	saisie<void>pause("appyer sur une touche pour continuer\n");	//pause
	lecture fichier("CodeMorse.txt");	//fichier de definition
	association codeMorse[37];			//liste associative a recherche linéaire
	int qtyCodeMorse = 0,				//compteur de liste associative
		index;							//index de recherche dans la liste
    char strTampon[128];				//série de charactère à saisire au clavier.

	//Lecture du fichier ressources et construction de la liste associative
	while(fichier && qtyCodeMorse<37)
	{
		fichier >> codeMorse[qtyCodeMorse].key >> codeMorse[qtyCodeMorse].value;
		qtyCodeMorse++;
	}

	//saisie au clavier du message à traduire en morse
    cout << "Entrer votre message à coder en morse (1 ligne max) : ";
    cin.getline(strTampon,127);

    cout << "Voici la traduction de votre message:\n";
    for (int i=0;strTampon[i]!=0;i++)
        if (strTampon[i]==' ')			//saut de ligne pour un espace
            cout << endl;
        else
		{
			cout << "<" << strTampon[i] << ">   ";
			index = trouverCodeMorse<37>(toUpper(strTampon[i]),codeMorse);
			if (index == -1)			//caractere inconnu
				cout << "???\n";
			else						//caracter connu
				cout << codeMorse[index].value << endl;
		}

	//fermer le fichier et sortir
	fichier.fermer();
	pause();
    return 0;
}

/*________
fonction*/

//toupper
char toUpper(char c)
{
	if (c>96)
		return c-32;
	return c;
}

//trouver le code morse
template <int qty>
int trouverCodeMorse(char key, association liste[])
{
	for (int i=0;i<qty;i++)
		if (liste[i].key==key)
			return i;
	return -1;
}