// UTS 2000 - fichier 'conf_gen.cpp' Lecture des variables générales dans le fichier de configuration - 
// V3.7a Le 01/06/2016
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "Train_UTS.h"

// Déclaration des fonctions externes
extern int get_line(FILE*, char ch_tab[][CHAR_CONFIG_NB], int*);

// Déclaration des variables externes
extern int cfg_enable_leds[NB_CARTE];
extern int cfg_show_cards_found, cfg_aigauto, cfg_memoire_pos_train, cfg_memoire_pos_aig;
extern int cfg_canton_inv[NB_CARTE][NB_CANTON];
extern int cfg_can_inv[NB_CARTE][NB_CAN];
extern int cfg_aig_digit;
#ifndef VERSION_UTS_V3 // Ne pas toucher à cette ligne !!!
extern int cfg_enable_servos[NB_CARTE][NB_SERVO];
#endif


/*****************************************************************************/
/* CONFIG GENERAL                                                            */
/*****************************************************************************/

// NAME  : config_general_exit_if_no_file
// ARG   : char filename[]: nom du fichier de configuration
// NOTES : Sort un message d'erreur si le fichier passé en paramètre n'existe pas + arrêt du programme.
//
void  config_general_exit_if_no_file(char filename[])
{
    FILE* pf;
    if((pf=fopen(filename,"rt"))==NULL) {
        MessageBox(NULL,STR_NO_CONFIG_FILE,"Erreur",MB_OK|MB_ICONERROR); exit(1);
    }
    fclose(pf);
}


// NAME  : config_general_init_file
// DESCR : permet des initialisations gnerales a partir du fichier de config
// ARG   : char filename[]: nom du fichier de configuration
// NOTES :  250 caratères par lignes au maximum dans 'config.txt'.
//
void config_general_init_file(char filename[])
{
    FILE* pf;
    char ch[CHAR_CONFIG_NB],ch_tab[BLOC_CONFIG_NB][CHAR_CONFIG_NB],ch_error[200];
    int  ch_nb,i;
    int  val;
    if((pf=fopen(filename,"rt"))==NULL){
        MessageBox(NULL,"Impossible d'ouvrir le fichier de configuration général 'Config.txt'","Erreur",MB_OK|MB_ICONERROR);exit(1);
    }
	while(fscanf(pf,"%s%*[^\n]\n",ch)!=EOF) {	// " %s" => "%s%*[^\n]\n" = Nouvelle formule au 02/03/2012, lit uniquement le permier mot de chaque ligne.
        if(STR_SAME strcmp(ch,"#general")){
            fscanf(pf," %s",ch); //remove [
            while(get_line(pf,ch_tab,&ch_nb)){
				if(ch_nb>=BLOC_CONFIG_NB)	{
					MessageBox(NULL,"Le fichier 'config.txt' comporte une ligne trop complexe dans la section '#general'","Erreur",MB_OK|MB_ICONERROR);
					MessageBox(NULL,"Section '#general' (ligne>75 blocs) commençant par (taper sur Entrée) : ","Erreur",MB_OK|MB_ICONERROR);
					strcpy(ch_error,"Section #general Erreur ligne :");
					for(i=0;i<ch_nb;i++) { strcat(ch_error,"  "); strcat(ch_error,ch_tab[i]); }
					MessageBox(NULL,ch_error,"UTS - Erreur",MB_OK|MB_ICONERROR); exit(1);
				}
				if (ch_tab[0][0]==']') break;
                for(i=0;i<ch_nb;i++) if(ch_tab[i][0]=='@') ch_nb=i;  //remove comments
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"leds_card_0")) if (STR_SAME stricmp(ch_tab[1],"off")) cfg_enable_leds[0]=0;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"leds_card_1")) if (STR_SAME stricmp(ch_tab[1],"off")) cfg_enable_leds[1]=0;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"leds_card_2")) if (STR_SAME stricmp(ch_tab[1],"off")) cfg_enable_leds[2]=0;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"leds_card_3")) if (STR_SAME stricmp(ch_tab[1],"off")) cfg_enable_leds[3]=0;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"show_cards_found"))  if (!stricmp(ch_tab[1],"on"))  cfg_show_cards_found=1;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"memorisation_train"))if (!stricmp(ch_tab[1],"on"))  cfg_memoire_pos_train=1;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"memorisation_aig"))  if (!stricmp(ch_tab[1],"on"))  cfg_memoire_pos_aig=1;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"train_aigauto"))     if (!stricmp(ch_tab[1],"off")) cfg_aigauto=0;
                if (ch_nb>=2) if (STR_SAME stricmp(ch_tab[0],"aigauto"))           if (!stricmp(ch_tab[1],"off")) cfg_aigauto=0;
				
				#ifndef VERSION_UTS_V3 // Ne pas toucher à cette ligne !!!
				if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_000_card_0") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[0][0]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_001_card_0") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[0][1]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_100_card_1") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[1][0]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_101_card_1") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[1][1]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_200_card_2") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[2][0]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_201_card_2") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[2][1]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_300_card_3") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[3][0]=1;
                if((ch_nb)>=2) if( STR_SAME stricmp(ch_tab[0],"servo_301_card_3") ) if( STR_SAME stricmp(ch_tab[1],"on") ) cfg_enable_servos[3][1]=1;
				#endif

				if((ch_nb)>=2) if( STR_SAME strnicmp(ch_tab[0],"inv_canton_",strlen("inv_canton_")) ) if( STR_SAME stricmp(ch_tab[1],"on") ) {
					val=atoi(&ch_tab[0][strlen("inv_canton_")]); cfg_canton_inv[val/100][val%100]=1; }
                if((ch_nb)>=2) if( STR_SAME strnicmp(ch_tab[0],"inv_pot_"   ,strlen("inv_pot")    ) ) if( STR_SAME stricmp(ch_tab[1],"on") ) { 
					val=atoi(&ch_tab[0][strlen("inv_pot_")   ]); cfg_can_inv[val/100][val%100]=1;    }
                if((ch_nb)>=2) if( STR_SAME strnicmp(ch_tab[0],"ir_aig_digit",strlen("ir_aig_digit")) ) cfg_aig_digit=atoi(ch_tab[1]);
			}	// While (get_line) fin de la ligne de texte.
			break; // Pour sortir de la lecture de la suite du fichier.
		}		// if(==#general)   fin description '#general'.
	}			// While (scanf)    fin du fichier 'config.txt'.
	//moins_char_normal=1;		// '-' est un caractère normal, comme '+'.
	fclose(pf);
}
