// config.cc - Classe Config // nono - Programme du robot Efrei Robotique I1-I2 2004 // Copyright (C) 2004 Olivier Gaillard /// @file config.cc Charge le fichier config et distribue les variables #include "config.h" #include #include #include using namespace std; /// Parse une ligne du fichier de config /// @param *var nom de la variable a fixer /// @param *arg valeur de la variable void Config::Parse(char *var, char *arg) { char argu[20]; if (!arg) cerr << "Config::Parse : Error during config file parsing" << endl; strcpy(argu, arg); // Verifie si l'argument est un nombre ou un nom de fichier if (((argu[0]>'9') || (argu[0] < '0')) && strcmp(var, "Source") && strcmp(var, "imgPath")) { FILE *file; file=fopen(arg, "r"); if (!file) cerr << "Config::Parse : Bad pathfile for " << arg << endl; fgets(argu, 20,file); fclose(file); } // Affecte la valeur de argu a la variable var if (!strcmp(var, "Hauteur_Image")) height = atoi(argu); else if(!strcmp(var,"Largeur_Image")) width = atoi(argu); else if(!strcmp(var,"NN_Step_Learning")) nn_sl = atof(argu); else if(!strcmp(var,"NN_Neighborhood_Learning")) nn_nl = atof(argu); else if(!strcmp(var,"NN_Number_Iteration_Learning")) nn_nil = atol(argu); else if(!strcmp(var,"NN_Nombre_Couleurs")) nn_NbCouleurs = atoi(argu); else if(!strcmp(var,"NN_Influence_Luminosite")) nn_influ_lum = atof(argu); else if(!strcmp(var,"imgPath")) strcpy(imgPath, argu); else if(!strcmp(var,"NN_Lazy_Threshold")) nn_lazy_threshold = atoi(argu); else if(!strcmp(var,"Map_Error")) map_error = atoi(argu); else if(!strcmp(var,"Map_Error_Part")) map_error_part = atoi(argu); else if(!strcmp(var,"Angle_Ball")) angle_ball_weight= atoi(argu); else if(!strcmp(var,"Distance_Ball_Robot")) distance_ball_robot_weight = atoi(argu); else if(!strcmp(var,"Distance_Ball_Goal")) distance_ball_goal_weight = atoi(argu); else if(!strcmp(var,"Ball_Density")) ball_density_weight = atoi(argu); else if(!strcmp(var,"Ennemy_Presence")) ennemy_presence_weight = atoi(argu); else if(!strcmp(var,"Ball_Precision")) ball_precision_weight = atoi(argu); else if(!strcmp(var,"Skepticism")) skepticism_weight = atoi(argu); else if(!strcmp(var,"Skepticism_Max")) skepticism_max = atoi(argu); else if(!strcmp(var,"Source")) { if (!strcmp(argu, "file")) source = SOURCE_FILE; else if (!strcmp(argu, "usbcam")) source = SOURCE_USB_CAM; else if (!strcmp(argu, "cam")) source = SOURCE_CAM; } } /// Constructor /// @param *filename nom du fichier de config Config::Config(char *filename) { const int NBARG = 3; char *cut[NBARG] = {NULL}; FILE *file; char ligne[50]; int i; // Ouverture du fichier de conf file = fopen(filename, "r"); if (!file) cerr << "Config::Config : Error during config file opening" << endl; else cout << "Lecture du ficher de configuration" << endl; // Parcours des lignes et analyse while(fgets(ligne, 50, file)) { if (ligne[0] == '#') continue; // Division du string cut[0] = strtok(ligne, " \n"); if (!cut[0]) continue; i=0; while ((cut[i] != NULL) && (i<(NBARG-1))) { i++; cut[i] = strtok( NULL, " \t\n"); } Parse(cut[0], cut[2]); } colorMode = 0; color = NULL; node = NULL; index = NULL; LoadThFile(); LoadNNFile(); } /// Chargement des poids d'un reseau de neurones /// @param *filePath nom du fichier de poids a charger void Config::LoadNNFile(char *filePath) { const int NBARG = 4; char *cut[NBARG] = {NULL}; FILE *file; char ligne[50]; int i; unsigned char *pNode; // Ouverture du fichier de conf file = fopen(filePath, "r"); if (!file) { cerr << "Config::LoadNNFile : Error during poids file opening" << endl; index = new int[nn_NbCouleurs]; for (int i=0; i