#include "INI_Manager.h" /* This function checks if there is a carriage return at the end of the ini file and adds it if there is not */ void checkEndReturn(char* iniFilename) { if(fileExists(iniFilename)) { long int returnPos = 0; long int fileLen = lengthOfFile(iniFilename); long int lastReturnPos = 0; while((returnPos=findText(iniFilename, returnPos, "\n"))!=-1) { lastReturnPos = returnPos += 2; } if(fileLen!=0 && lastReturnPos!=fileLen) { char tmp[3]; *tmp = 13; *(tmp+1) = 10; *(tmp+2) = 0; insertText(iniFilename, fileLen, tmp); } } } /* This function gets the value of a variable previously saved in a ini file or return a customized default value if it's failed */ bool getIniValue(char* iniFilename, char* iniVarname, char* iniVarDefaultValue, char* iniValueDest) { //ajout au besoin d'un saut de ligne final dans le fichier INI checkEndReturn(iniFilename); //recherche du nom de la variable avec un espace à la fin pour gérer les variables avec un nom inclus dans un autre char * tmpVarname = (char*)ZeroAlloc(strlen(iniVarname)+2); strcpy(tmpVarname, iniVarname); strcat(tmpVarname, " "); long int linePos = findText(iniFilename, 0, tmpVarname); CC_free(tmpVarname); //on vérifie également qu'il n'y a pas d'autres lettres ou chiffres collés avant le nom de la variable char c[3]; if((linePos >= 1) && getText(iniFilename, linePos-1, linePos, c)) { //si la variable est effectivement absente, on retourne "ABSENT" if((*c>='a' && *c<='z') || (*c>='A' && *c<='Z') || (*c>='0' && *c<='9')) { if(iniValueDest) strcpy(iniValueDest, iniVarDefaultValue); return false; } } //si la ligne définissant la variable est en commentaire ("//" avant le nom de la variable), on retourne "ABSENT" long int cPos = linePos; while((cPos >= 1) && getText(iniFilename, cPos-1, cPos, c) && *c==' ') { cPos--; } if((cPos >= 2) && (findText(iniFilename, cPos-2, "//") == (cPos-2))) { if(iniValueDest) strcpy(iniValueDest, iniVarDefaultValue); return false; } //si la variable est effectivement présente et doit être lue, on récupère sa valeur if(linePos!=-1) { linePos = findText(iniFilename, linePos, " = ") + 3; long int lineEnd = findText(iniFilename, linePos, "\n"); if(lineEnd!=-1) { //si le but était de retourner la valeur de la variable, on la retourne avec "PRESENT" if(iniValueDest) { getText(iniFilename, linePos, lineEnd, iniValueDest); return true; } //si le but était de vérifier la présence de la variable... else { //... on retourne "ABSENT" si la variable à la valeur "0"... char *stringEnd = (char*)ZeroAlloc(lineEnd-linePos+2); if(getText(iniFilename, linePos, lineEnd, stringEnd) && *stringEnd=='0') { CC_free(stringEnd); return false; } //... "PRESENT" sinon. else { CC_free(stringEnd); return true; } } } } //si la variable est absente, on retourne "ABSENT" if(iniValueDest) strcpy(iniValueDest, iniVarDefaultValue); return false; } /* This function gets the line of a variable value saved in a ini file */ bool getIniValue(char* iniFilename, char* iniVarname, char* iniValueDest) { return getIniValue(iniFilename, iniVarname, "\0", iniValueDest); } /* This function says if a variable iniVarname is saved in a ini file iniFilename */ bool getIniValue(char* iniFilename, char* iniVarname) { return getIniValue(iniFilename, iniVarname, "\0", 0); } /* This function deletes the line of a variable value saved in a ini file */ bool delIniValue(char* iniFilename, char* iniVarname) { //ajout au besoin d'un saut de ligne final dans le fichier INI checkEndReturn(iniFilename); //récupération de la position de la ligne de la variable à supprimer du fichier ini long int linePos = findText(iniFilename, 0, iniVarname); long int lineEnd = findText(iniFilename, linePos, "\n")+2; bool definedValue = (linePos!=-1); //suppression de la ligne if(linePos!=-1 && lineEnd!=-1) deleteText(iniFilename, linePos, lineEnd); return definedValue; } /* This function saves a variable value in a ini file */ bool setIniValue(char* iniFilename, char* iniVarname, char* newValue) { //ajout au besoin d'un saut de ligne final dans le fichier INI checkEndReturn(iniFilename); //suppression de la ligne contenant la valeur de la variable à ajouter bool definedValue = delIniValue(iniFilename, iniVarname); //ajout de la nouvelle ligne pour définir la valeur de la variable FILE* iniFile = CC_fopen(iniFilename,"at"); if (iniFile) { if(newValue) fprintf(iniFile, "%s = %s\n", iniVarname, newValue); else fprintf(iniFile, "%s = 1\n", iniVarname); CC_fclose(iniFile); } return definedValue; } /* This function puts a variable in a ini file */ bool setIniValue(char* iniFilename, char* iniVarname) { return setIniValue(iniFilename, iniVarname, 0); }