mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-17 19:08:22 +00:00
Moved some around, more renames
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
#include "ini.h"
|
||||
|
||||
INIParser::INIParser(const char *filename)
|
||||
{
|
||||
memset(file, 0, 128);
|
||||
if(strlen(filename) > 128)
|
||||
{
|
||||
strncpy(file, filename, 128);
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(file, filename, strlen(filename));
|
||||
}
|
||||
Parse();
|
||||
}
|
||||
|
||||
INIParser::~INIParser()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void INIParser::Parse()
|
||||
{
|
||||
FILE *fp;
|
||||
if(fp = fopen(file, "r"))
|
||||
{
|
||||
char Option[255], Param[255];
|
||||
while(!feof(fp))
|
||||
{
|
||||
ReadLine(fp, Option, Param);
|
||||
AddOption(std::string(Option), std::string(Param));
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
void INIParser::ReadLine(FILE *fp, char *Option, char *Param)
|
||||
{
|
||||
typedef enum ReadingState { ReadingOption, ReadingParameter };
|
||||
|
||||
ReadingState State = ReadingOption;
|
||||
|
||||
int StrIndex = 0;
|
||||
char ch;
|
||||
|
||||
strcpy(Option, "");
|
||||
strcpy(Param, "");
|
||||
|
||||
while(true) {
|
||||
ch = fgetc(fp);
|
||||
if((ch=='#')&&(StrIndex==0)) { // Discard comment lines beginning with a hash
|
||||
while((ch!=EOF)&&(ch!='\n'))
|
||||
ch = fgetc(fp);
|
||||
|
||||
continue;
|
||||
}
|
||||
if(ch=='\r') continue;
|
||||
if((ch==EOF)||(ch=='\n')) {
|
||||
switch(State) {
|
||||
case ReadingOption: {
|
||||
Option[StrIndex]='\0';
|
||||
break;
|
||||
}
|
||||
case ReadingParameter: {
|
||||
Param[StrIndex] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if(ch=='=') {
|
||||
if(State==ReadingOption) {
|
||||
Option[StrIndex] = '\0';
|
||||
State = ReadingParameter;
|
||||
StrIndex = 0;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
switch(State) {
|
||||
case ReadingOption: {
|
||||
Option[StrIndex++]=tolower(ch);
|
||||
break;
|
||||
}
|
||||
case ReadingParameter: {
|
||||
Param[StrIndex++]=ch;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!strcmp(Param,"true")) strcpy(Param,"1");
|
||||
if(!strcmp(Param,"false")) strcpy(Param,"0");
|
||||
}
|
||||
|
||||
void INIParser::AddOption(std::string option, std::string param)
|
||||
{
|
||||
for(unsigned int x = 0; x < options.size(); ++x)
|
||||
{
|
||||
if(options[x].option == option)
|
||||
return;
|
||||
}
|
||||
|
||||
iniData d;
|
||||
d.option = option;
|
||||
d.param = param;
|
||||
options.push_back(d);
|
||||
}
|
||||
|
||||
std::string INIParser::GetOption(std::string option)
|
||||
{
|
||||
for(unsigned int x = 0; x < options.size(); ++x)
|
||||
{
|
||||
if(options[x].option == option)
|
||||
return options[x].param;
|
||||
}
|
||||
return std::string("Not Found");
|
||||
}
|
||||
Reference in New Issue
Block a user