(C++) Class for reading Windows-INI-like files
(C++) Class for reading Windows-INI-like files
Hello everyone!
I'm reading this forum for a long time now and it was always very useful for me. Now I reached the point where I want to give something back to the great community so I decided to post this class here.
I know that Irrlicht has its own XML parser, but I dont like XML...
I'm using this class in almost every project when I need to have a configuration file and I find it always very useful.
UPDATE:
The code is now avaible under http://btbsoft.org it's now a bit faster and was redesigned.
I'm reading this forum for a long time now and it was always very useful for me. Now I reached the point where I want to give something back to the great community so I decided to post this class here.
I know that Irrlicht has its own XML parser, but I dont like XML...
I'm using this class in almost every project when I need to have a configuration file and I find it always very useful.
UPDATE:
The code is now avaible under http://btbsoft.org it's now a bit faster and was redesigned.
Last edited by Sylence on Sat Dec 27, 2008 8:04 pm, edited 6 times in total.
Software documentation is like sex. If it's good you want more. If it's bad it's better than nothing.
I realized that there's a bug when loading a file with comments in it...
inside the load()-method you have change
to
I have also updated the complete code in my previous post...
I should test my classes before showing them to anybody![Very Happy :D](./images/smilies/icon_biggrin.gif)
inside the load()-method you have change
Code: Select all
if(strncmp(buffer,"##",2) == 0)
continue;
Code: Select all
if(strncmp(buffer,"##",2) == 0)
{
buffer = strtok(content,"\n");
continue;
}
I should test my classes before showing them to anybody
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Software documentation is like sex. If it's good you want more. If it's bad it's better than nothing.
It is nothing special.
Header
Cpp
You just have to include the header inside the CfgFile.cpp and remove the comments
Header
Code: Select all
#ifndef _IRR_CONVERTER_H_
#define _IRR_CONVERTER_H_
#include "irrlicht.h"
class IrrCon
{
public:
static irr::EKEY_CODE Key(irr::core::stringc str);
static const char* Key(irr::EKEY_CODE value);
};
#endif
Code: Select all
EKEY_CODE IrrCon::Key(stringc str)
{
if(str.equals_ignore_case("MOUSE_L"))
return KEY_LBUTTON;
else if(str.equals_ignore_case("MOUSE_R"))
return KEY_RBUTTON;
else if(str.equals_ignore_case("MOUSE_M"))
return KEY_MBUTTON;
else if(str.equals_ignore_case("XBUTTON_1"))
return KEY_XBUTTON1;
else if(str.equals_ignore_case("XBUTTON_2"))
return KEY_XBUTTON2;
else if(str.equals_ignore_case("BACK"))
return KEY_BACK;
else if(str.equals_ignore_case("TAB"))
return KEY_TAB;
else if(str.equals_ignore_case("RETURN"))
return KEY_RETURN;
else if(str.equals_ignore_case("CLEAR"))
return KEY_CLEAR;
else if(str.equals_ignore_case("SHIFT"))
return KEY_SHIFT;
else if(str.equals_ignore_case("CTRL"))
return KEY_CONTROL;
else if(str.equals_ignore_case("MENU"))
return KEY_MENU;
else if(str.equals_ignore_case("PAUSE"))
return KEY_PAUSE;
else if(str.equals_ignore_case("CAPITAL"))
return KEY_CAPITAL;
else if(str.equals_ignore_case("ESCAPE"))
return KEY_ESCAPE;
else if(str.equals_ignore_case("SPACE"))
return KEY_SPACE;
else if(str.equals_ignore_case("PRIOR"))
return KEY_PRIOR;
else if(str.equals_ignore_case("NEXT"))
return KEY_NEXT;
else if(str.equals_ignore_case("END"))
return KEY_END;
else if(str.equals_ignore_case("HOME"))
return KEY_HOME;
else if(str.equals_ignore_case("LEFT"))
return KEY_LEFT;
else if(str.equals_ignore_case("UP"))
return KEY_UP;
else if(str.equals_ignore_case("RIGHT"))
return KEY_RIGHT;
else if(str.equals_ignore_case("DOWN"))
return KEY_DOWN;
else if(str.equals_ignore_case("SELECT"))
return KEY_SELECT;
else if(str.equals_ignore_case("PRINT"))
return KEY_PRINT;
else if(str.equals_ignore_case("EXECUT"))
return KEY_EXECUT;
else if(str.equals_ignore_case("SNAPSHOT"))
return KEY_SNAPSHOT;
else if(str.equals_ignore_case("INSERT"))
return KEY_INSERT;
else if(str.equals_ignore_case("DELETE"))
return KEY_DELETE;
else if(str.equals_ignore_case("HELP"))
return KEY_HELP;
else if(str.equals_ignore_case("0"))
return KEY_KEY_0;
else if(str.equals_ignore_case("1"))
return KEY_KEY_1;
else if(str.equals_ignore_case("2"))
return KEY_KEY_2;
else if(str.equals_ignore_case("3"))
return KEY_KEY_3;
else if(str.equals_ignore_case("4"))
return KEY_KEY_4;
else if(str.equals_ignore_case("5"))
return KEY_KEY_5;
else if(str.equals_ignore_case("6"))
return KEY_KEY_6;
else if(str.equals_ignore_case("7"))
return KEY_KEY_7;
else if(str.equals_ignore_case("8"))
return KEY_KEY_8;
else if(str.equals_ignore_case("9"))
return KEY_KEY_9;
else if(str.equals_ignore_case("A"))
return KEY_KEY_A;
else if(str.equals_ignore_case("B"))
return KEY_KEY_B;
else if(str.equals_ignore_case("C"))
return KEY_KEY_C;
else if(str.equals_ignore_case("D"))
return KEY_KEY_D;
else if(str.equals_ignore_case("E"))
return KEY_KEY_E;
else if(str.equals_ignore_case("F"))
return KEY_KEY_F;
else if(str.equals_ignore_case("G"))
return KEY_KEY_G;
else if(str.equals_ignore_case("H"))
return KEY_KEY_H;
else if(str.equals_ignore_case("I"))
return KEY_KEY_I;
else if(str.equals_ignore_case("J"))
return KEY_KEY_J;
else if(str.equals_ignore_case("K"))
return KEY_KEY_K;
else if(str.equals_ignore_case("L"))
return KEY_KEY_L;
else if(str.equals_ignore_case("M"))
return KEY_KEY_M;
else if(str.equals_ignore_case("N"))
return KEY_KEY_N;
else if(str.equals_ignore_case("O"))
return KEY_KEY_O;
else if(str.equals_ignore_case("P"))
return KEY_KEY_P;
else if(str.equals_ignore_case("Q"))
return KEY_KEY_Q;
else if(str.equals_ignore_case("R"))
return KEY_KEY_R;
else if(str.equals_ignore_case("S"))
return KEY_KEY_S;
else if(str.equals_ignore_case("T"))
return KEY_KEY_T;
else if(str.equals_ignore_case("U"))
return KEY_KEY_U;
else if(str.equals_ignore_case("V"))
return KEY_KEY_V;
else if(str.equals_ignore_case("W"))
return KEY_KEY_W;
else if(str.equals_ignore_case("X"))
return KEY_KEY_X;
else if(str.equals_ignore_case("Y"))
return KEY_KEY_Y;
else if(str.equals_ignore_case("Z"))
return KEY_KEY_Z;
else if(str.equals_ignore_case("LWIN"))
return KEY_LWIN;
else if(str.equals_ignore_case("RWIN"))
return KEY_RWIN;
else if(str.equals_ignore_case("APPS"))
return KEY_APPS;
else if(str.equals_ignore_case("SLEEP"))
return KEY_SLEEP;
else if(str.equals_ignore_case("NUMPAD0"))
return KEY_NUMPAD0;
else if(str.equals_ignore_case("NUMPAD1"))
return KEY_NUMPAD1;
else if(str.equals_ignore_case("NUMPAD2"))
return KEY_NUMPAD2;
else if(str.equals_ignore_case("NUMPAD3"))
return KEY_NUMPAD3;
else if(str.equals_ignore_case("NUMPAD4"))
return KEY_NUMPAD4;
else if(str.equals_ignore_case("NUMPAD5"))
return KEY_NUMPAD5;
else if(str.equals_ignore_case("NUMPAD6"))
return KEY_NUMPAD6;
else if(str.equals_ignore_case("NUMPAD7"))
return KEY_NUMPAD7;
else if(str.equals_ignore_case("NUMPAD8"))
return KEY_NUMPAD8;
else if(str.equals_ignore_case("NUMPAD9"))
return KEY_NUMPAD9;
else if(str.equals_ignore_case("MULTIPLY"))
return KEY_MULTIPLY;
else if(str.equals_ignore_case("ADD"))
return KEY_ADD;
else if(str.equals_ignore_case("SEPARATOR"))
return KEY_SEPARATOR;
else if(str.equals_ignore_case("SUBTRACT"))
return KEY_SUBTRACT;
else if(str.equals_ignore_case("DECIMAL"))
return KEY_DECIMAL;
else if(str.equals_ignore_case("DIVIDE"))
return KEY_DIVIDE;
else if(str.equals_ignore_case("F1"))
return KEY_F1;
else if(str.equals_ignore_case("F2"))
return KEY_F2;
else if(str.equals_ignore_case("F3"))
return KEY_F3;
else if(str.equals_ignore_case("F4"))
return KEY_F4;
else if(str.equals_ignore_case("F5"))
return KEY_F5;
else if(str.equals_ignore_case("F6"))
return KEY_F6;
else if(str.equals_ignore_case("F7"))
return KEY_F7;
else if(str.equals_ignore_case("F8"))
return KEY_F8;
else if(str.equals_ignore_case("F9"))
return KEY_F9;
else if(str.equals_ignore_case("F10"))
return KEY_F10;
else if(str.equals_ignore_case("F11"))
return KEY_F11;
else if(str.equals_ignore_case("F12"))
return KEY_F12;
else if(str.equals_ignore_case("NUMLOCK"))
return KEY_NUMLOCK;
else if(str.equals_ignore_case("COMMA"))
return KEY_COMMA;
else if(str.equals_ignore_case("PLUS"))
return KEY_PLUS;
else if(str.equals_ignore_case("MINUS"))
return KEY_MINUS;
else if(str.equals_ignore_case("PERIOD"))
return KEY_PERIOD;
else if(str.equals_ignore_case("PLAY"))
return KEY_PLAY;
else if(str.equals_ignore_case("ZOOM"))
return KEY_ZOOM;
else
return (EKEY_CODE)0x0;
}
const char* IrrCon::Key(EKEY_CODE value)
{
switch(value)
{
case KEY_LBUTTON: return "MOUSE_L";
case KEY_RBUTTON: return "MOUSE_R";
case KEY_CANCEL: return "MOUSE_M";
case KEY_MBUTTON: return "MOUSE_M";
case KEY_XBUTTON1: return "XBUTTON_1";
case KEY_XBUTTON2: return "XBUTTON_2";
case KEY_BACK: return "BACK";
case KEY_TAB: return "TAB";
case KEY_CLEAR: return "CLEAR";
case KEY_RETURN: return "RETURN";
case KEY_SHIFT: return "SHIFT";
case KEY_CONTROL: return "CTRL";
case KEY_MENU: return "MENU";
case KEY_PAUSE: return "PAUSE";
case KEY_CAPITAL: return "CAPITAL";
case KEY_ESCAPE: return "ESCAPE";
case KEY_SPACE: return "SPACE";
case KEY_PRIOR: return "PRIOR";
case KEY_NEXT: return "NEXT";
case KEY_END: return "END";
case KEY_HOME: return "HOME";
case KEY_LEFT: return "LEFT";
case KEY_UP: return "UP";
case KEY_RIGHT: return "RIGHT";
case KEY_DOWN: return "DOWN";
case KEY_SELECT: return "SELECT";
case KEY_PRINT: return "PRINT";
case KEY_EXECUT: return "EXECUT";
case KEY_SNAPSHOT: return "SNAPSHOT";
case KEY_INSERT: return "INSERT";
case KEY_DELETE: return "DELETE";
case KEY_HELP: return "HELP";
case KEY_KEY_0: return "0";
case KEY_KEY_1: return "1";
case KEY_KEY_2: return "2";
case KEY_KEY_3: return "3";
case KEY_KEY_4: return "4";
case KEY_KEY_5: return "5";
case KEY_KEY_6: return "6";
case KEY_KEY_7: return "7";
case KEY_KEY_8: return "8";
case KEY_KEY_9: return "9";
case KEY_KEY_A: return "A";
case KEY_KEY_B: return "B";
case KEY_KEY_C: return "C";
case KEY_KEY_D: return "D";
case KEY_KEY_E: return "E";
case KEY_KEY_F: return "F";
case KEY_KEY_G: return "G";
case KEY_KEY_H: return "H";
case KEY_KEY_I: return "I";
case KEY_KEY_J: return "J";
case KEY_KEY_K: return "K";
case KEY_KEY_L: return "L";
case KEY_KEY_M: return "M";
case KEY_KEY_N: return "N";
case KEY_KEY_O: return "O";
case KEY_KEY_P: return "P";
case KEY_KEY_Q: return "Q";
case KEY_KEY_R: return "R";
case KEY_KEY_S: return "S";
case KEY_KEY_T: return "T";
case KEY_KEY_U: return "U";
case KEY_KEY_V: return "V";
case KEY_KEY_W: return "W";
case KEY_KEY_X: return "X";
case KEY_KEY_Y: return "Y";
case KEY_KEY_Z: return "Z";
case KEY_LWIN: return "LWIN";
case KEY_RWIN: return "RWIN";
case KEY_APPS: return "APPS";
case KEY_SLEEP: return "SLEEP";
case KEY_NUMPAD0: return "NUMPAD0";
case KEY_NUMPAD1: return "NUMPAD1";
case KEY_NUMPAD2: return "NUMPAD2";
case KEY_NUMPAD3: return "NUMPAD3";
case KEY_NUMPAD4: return "NUMPAD4";
case KEY_NUMPAD5: return "NUMPAD5";
case KEY_NUMPAD6: return "NUMPAD6";
case KEY_NUMPAD7: return "NUMPAD7";
case KEY_NUMPAD8: return "NUMPAD8";
case KEY_NUMPAD9: return "NUMPAD9";
case KEY_MULTIPLY: return "MULTIPLY";
case KEY_ADD: return "ADD";
case KEY_SEPARATOR: return "SEPARATOR";
case KEY_SUBTRACT: return "SUBTRACT";
case KEY_DECIMAL: return "DECIMAL";
case KEY_DIVIDE: return "DIVIDE";
case KEY_F1: return "F1";
case KEY_F2: return "F2";
case KEY_F3: return "F3";
case KEY_F4: return "F4";
case KEY_F5: return "F5";
case KEY_F6: return "F6";
case KEY_F7: return "F7";
case KEY_F8: return "F8";
case KEY_F9: return "F9";
case KEY_F10: return "F10";
case KEY_F11: return "F11";
case KEY_F12: return "F12";
case KEY_NUMLOCK: return "NUMLOCK";
case KEY_COMMA: return "COMMA";
case KEY_PLUS: return "PLUS";
case KEY_MINUS: return "MINUS";
case KEY_PERIOD: return "PERIOD";
case KEY_PLAY: return "PLAY";
case KEY_ZOOM: return "ZOOM";
default: return "NONE";
}
}
Software documentation is like sex. If it's good you want more. If it's bad it's better than nothing.