/***********************/ /*** Daves Ini Class ***/ /***********************/ #pragma warning( disable : 4786 ) #ifndef __DAVES_INI_CLASS__ #define __DAVES_INI_CLASS__ #include /******************************************************************************/ #define CIni_Max_Data_Size 128 /******************************************************************************/ struct sIniEntry { char Key[CIni_Max_Data_Size+1]; char Data[CIni_Max_Data_Size+1]; }; struct sIniGroup { char Name[CIni_Max_Data_Size+1+2]; std::vector Entry; }; /******************************************************************************/ class CIni { public: CIni (char *IniFile) {Import(IniFile);} CIni () {} int GetGroupCount() {return(IniGroup.size());} char *GetGroupName(int i) {return(IniGroup[i].Name);} int GetKeyCount(const char *Grp) { int Group=FindGroup(Grp); return(IniGroup[Group].Entry.size()); } char *GetKeyName(const char *Grp,int Idx) { int Group=FindGroup(Grp); return(IniGroup[Group].Entry[Idx].Key); } /*----------------------------------------------------------------------------*/ // returns 1 of fail, 0 on success!! (Who thought that up!) int MyStrCmp(const char *Str0,const char *Str1) { if (strlen(Str0)!=strlen(Str1)) return(1); for (int Loop=0;Loop='a' && C0<='z') C0+='A'-'a'; if (C1>='a' && C1<='z') C1+='A'-'a'; if (C0!=C1) return(1); } return(0); } /*----------------------------------------------------------------------------*/ void SkipLine(char **InPtr) { char *Ptr=*InPtr; while (*Ptr!='\n' && *Ptr) Ptr++; *InPtr=Ptr; } /*----------------------------------------------------------------------------*/ void LoadAndImport(const char *Filename) { FILE *File; int Size; char *Script; File=fopen(Filename,"rt"); if (!File) {printf("%s Not Found\n",Filename); return;} fseek(File,0,SEEK_END); Size=ftell(File); fseek(File,0,SEEK_SET); Script=(char*)malloc(Size+1); memset(Script,0,Size+1); // Load It fread(Script,Size,1,File); fclose(File); Import(Script); free(Script); } /*----------------------------------------------------------------------------*/ void Import(char *IniFile) { char GroupEntry[CIni_Max_Data_Size+1+2]; char KeyEntry[CIni_Max_Data_Size+1+2]; GroupEntry[0]=0; ParseFindEntry(&IniFile); while (*IniFile) { if (IsComment(IniFile)) { SkipLine(&IniFile); } else { if (ParseGetEntry(&IniFile,KeyEntry)) { // Group strcpy(GroupEntry,KeyEntry); // Update Group buffer StripGroupName(GroupEntry); UpdateGroup(GroupEntry); } else { // Data UpdateKey(GroupEntry,KeyEntry); } } ParseFindEntry(&IniFile); } } /*----------------------------------------------------------------------------*/ void Export(char *OutFile) { *OutFile=0; // Clear Output for (int Group=0;Group IniGroup; }; #endif