Totally simple configuration module.
BlitzMax Forums/BlitzMax Programming/Totally simple configuration module.
| ||
Well for one of my projects i needed a system so i can load and save whole states of my games world in a single file yet allow it to modifyable, and also so i could store multiple object scripts (for a scripting language i designed called PhoenixScript) in a single object file. I though of ini but i couldnt do sub-groups, i also though of xml but didnt like the syntax myself and it didnt have a couple of things i was after; so i wrote this. Its a parser/lexer/api set for a simple configuration language i call 'Totally simple configuration' (yeh, bad title i know >_<). The syntax is designed to be easy (but please be aware these no expression handeling or anthing of that nature as it was designed wholy for configuration) heres an example;
Settings{
Graphics{
Resolution=640.000000,480.000000
Depth=0.0000000
Hertz=60.0000000
Title="Totally simple configuration - example 01"
}
Application{
ImageFile="media\\Image1.png"
}
}
Map1{
Settings{
MusicFile = "media\\musicarchive.arh[Track0]"
Size = 200, 200
}
Data {
Layer1 = "0102436234601
2353462436234
6234623462346
2364234623463
2346234634634
2342346324643
2346234634623"
Entitys{
Entity001{
Position = 0,0
}
}
}
}
As you can see it has a couple of intresting features like mutliple values per key (eg. "Color = 255,0,255"), escape sequences (most of the C++ ones), full inheritence(no limit to how many sub-groups you have), ability to use ' or " for strings and a few other things like #Define. And the best part is its very simple to load and save the scripts, heres a loading example... Rem Create a new file End Rem Local File:TTSCFile = CreateTSCFile() Rem Load file End Rem LoadTSCFile(File,"config\Example01.tsc") Rem Setup graphics using config values End Rem AppTitle = GetTSCStringKey(File,"Settings::Graphics","Title") Local Width:Int = GetTSCNumberKey(File,"Settings::Graphics","Resolution",0) Local Height:Int = GetTSCNumberKey(File,"Settings::Graphics","Resolution",1) Local Depth:Int = GetTSCNumberKey(File,"Settings::Graphics","Depth") Local Hertz:Int = GetTSCNumberKey(File,"Settings::Graphics","Hertz") Graphics Width, Height, Depth, Hertz SetBlend ALPHABLEND Rem Load image from url stored in config file End Rem Local Image:TImage = LoadImage(GetTSCStringKey(File,"Settings::Application","ImageFile")) MidHandleImage(Image) Anyway heres the module if anyoe wishs to use it, ive included a basic load / save example in it so you can get to know the host api. http://www.savefile.com/files.php?fid=7115117 Please be aware its not completly bug free as i wrote most of it today, and am still fiddling with it heavly. |
| ||
| I did something like this with my Cower.SParse (Simple-Parse) module. Stuff like this is handy, thanks. |