Wieder mal ein Modul von mir, es erlaubt das einfache laden von Konfigurationen aus DataPaks.
~Das Modul~
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
Import xaymar.datapak
Module xaymar.config ModuleInfo "License: Public Domain" ModuleInfo "Original Author: Michael Dirks <support@levelnull.de>" ModuleInfo "Purpose: Easily read and write configuration files by using xaymar.datapak."
Type TConfig Field __MainDP:TDataPak Field __CurrentDP:TDataPak Method CreateConfig(name:String="Master") __CurrentDP = Null If __MainDP <> Null __MainDP.Destroy() __MainDP = Null End If __MainDP = TDataPak.Create(name) End Method Method OpenConfig(url:String,pwd:String="") __CurrentDP = Null If __MainDP <> Null __MainDP.Destroy() __MainDP = Null End If __MainDP = TDataPak.FromFile(url,pwd) End Method Method SaveConfig(url:String,pwd:String="") __MainDP.ToFile(url, TDP_FLAG_COMPRESSED | TDP_FLAG_PASSWORDED, pwd) End Method Method CloseConfig() __CurrentDP = Null __MainDP.Destroy() __MainDP = Null End Method Method IsConfigOpen:Int() Return (__MainDP <> Null) End Method Method CreateGroup(name:String) If __MainDP <> Null Local TVarDP:TDataPakType[] = Null If __MainDP.GetDataByName(name) <> Null Then TVarDP = __MainDP.GetDataByName(name) End If If TVarDP <> Null And TVarDP[0].GetType() = TDP_CONTAINER __CurrentDP = TDataPak(TVarDP[0]) Else __CurrentDP = __MainDP.AddDataContainer(name) End If Else Throw TConfigException.Create("No Config open.") End If End Method Method OpenGroup(name:String) If __MainDP <> Null Local TVarDP:TDataPakType[] = Null If __MainDP.GetDataByName(name) <> Null Then TVarDP = __MainDP.GetDataByName(name) End If If TVarDP <> Null And TVarDP[0].GetType() = TDP_CONTAINER __CurrentDP = TDataPak(TVarDP[0]) Else Throw TConfigException.Create("Group '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Config open.") End If End Method Method CloseGroup() __CurrentDP = Null End Method Method IsGroupOpen:Int() Return (__CurrentDP <> Null) End Method Method GetGroupByte:Byte(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_BYTE Return TDataPakByte(TVarDP).GetData() Else Throw TConfigException.Create("Byte '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupShort:Short(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_SHORT Return TDataPakShort(TVarDP).GetData() Else Throw TConfigException.Create("Short '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupInt:Int(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_INT Return TDataPakInt(TVarDP).GetData() Else Throw TConfigException.Create("Int '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupLong:Long(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_LONG Return TDataPakLong(TVarDP).GetData() Else Throw TConfigException.Create("Long '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupFloat:Float(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_FLOAT Return TDataPakFloat(TVarDP).GetData() Else Throw TConfigException.Create("Float '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupDouble:Double(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_DOUBLE Return TDataPakDouble(TVarDP).GetData() Else Throw TConfigException.Create("Double '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupString:String(name:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_STRING Return TDataPakString(TVarDP).GetData() Else Throw TConfigException.Create("String '"+name+"' does not exist.") End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupByteEx:Byte(name:String, def:Byte) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_BYTE Return TDataPakByte(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupShortEx:Short(name:String, def:Short) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_SHORT Return TDataPakShort(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupIntEx:Int(name:String, def:Int) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_INT Return TDataPakInt(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupLongEx:Long(name:String, def:Long) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_LONG Return TDataPakLong(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupFloatEx:Float(name:String, def:Float) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_FLOAT Return TDataPakFloat(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupDoubleEx:Double(name:String, def:Double) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_DOUBLE Return TDataPakDouble(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method GetGroupStringEx:String(name:String, def:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_STRING Return TDataPakString(TVarDP).GetData() Else Return def End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupByte(name:String,data:Byte) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_BYTE TDataPakByte(TVarDP).SetData(data) Else __CurrentDP.AddDataByte(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupShort(name:String,data:Short) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_SHORT TDataPakShort(TVarDP).SetData(data) Else __CurrentDP.AddDataShort(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupInt(name:String,data:Int) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_INT TDataPakInt(TVarDP).SetData(data) Else __CurrentDP.AddDataInt(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupLong(name:String,data:Long) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_LONG TDataPakLong(TVarDP).SetData(data) Else __CurrentDP.AddDataLong(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupFloat(name:String,data:Float) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_FLOAT TDataPakFloat(TVarDP).SetData(data) Else __CurrentDP.AddDataFloat(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupDouble(name:String,data:Double) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_DOUBLE TDataPakDouble(TVarDP).SetData(data) Else __CurrentDP.AddDataDouble(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method Method SetGroupString(name:String,data:String) If __CurrentDP <> Null Local TVarDP:TDataPakType = Null, TVarDPA:TDataPakType[] = __CurrentDP.GetDataByName(name) If TVarDPA.Length > 0 Then TVarDP = TVarDPA[0] If TVarDP <> Null And TVarDP.GetType() = TDP_STRING TDataPakString(TVarDP).SetData(data) Else __CurrentDP.AddDataString(name,data) End If Else Throw TConfigException.Create("No Group selected.") End If End Method End Type
Type TConfigException Field Error:String Method ToString:String() Return Error End Method Function Create:TConfigException(Error:String) Local TCE:TConfigException = New TConfigException TCE.Error = Error Return TCE End Function End Type
~Benutzung~
- Zuerst müsst ihr eine Instanz der TConfig erstellen, z.b. so: Local CFG:TConfig = New TConfig
- Nun könnt ihr mit CreateConfig oder OpenConfig eine Konfigurationsdatei erstellen oder öffnen(Format DataPak), z.b. so: CFG.CreateConfig("Tutorial")
- Da ihr aber nicht wisst ob es tatsächlich geklappt hat könnt ihr mit IsConfigOpen() prüfen ob __MainDP vorhanden ist.
- Nun könnt ihr einzelne Gruppen für Konfigurationen öffnen, die Befehle dazu sind CreateGroup und OpenGroup, z.b. so: CFG.CreateGroup("Keyboard.Device1")
- Ob das vorige fehlgeschlagen ist könnt ihr nun auch mit IsGroupOpen prüfen.
- Habt ihr nun eine Gruppe/Group offen könnt ihr mit den befehlen GetGroupByte/Short/Int/Long/Float/Double/String und deren -Ex modifikation Daten auslesen und mit SetGroupByte/Short/Int/Long/Float/Double/String Daten setzen.
- Um eine Konfiguration nun zu speichern ruft ihr SaveConfig auf, z.b. so: CFG.SaveConfig("Tutorial.mdp","Whatapassword").
~Methodenliste~
- CreateConfig(String Name)
- OpenConfig(String URL, String Passwort)
- SaveConfig(String URL, String Passwort)
- CloseConfig()
- Int Offen = IsConfigOpen()
- CreateGroup(String Name)
- OpenGroup(String Name)
- CloseGroup()
- Int Offen = IsGroupOpen()
- Byte Data = GetGroupByte(String Name)
- Byte Data = GetGroupByteEx(String Name, Byte StandardData)
- Short Data = GetGroupShort(String Name)
- Short Data = GetGroupShortEx(String Name, Short StandardData)
- Int Data = GetGroupInt(String Name)
- Int Data = GetGroupIntEx(String Name, Int StandardData)
- Long Data = GetGroupLong(String Name)
- Long Data = GetGroupLongEx(String Name, Long StandardData)
- Float Data = GetGroupFloat(String Name)
- Float Data = GetGroupFloatEx(String Name, Float StandardData)
- Double Data = GetGroupDouble(String Name)
- Double Data = GetGroupDoubleEx(String Name, Double StandardData)
- String Data = GetGroupString(String Name)
- String Data = GetGroupStringEx(String Name, String StandardData)
- SetGroupByte(String Name, Byte Data)
- SetGroupShort(String Name, Short Data)
- SetGroupInt(String Name, Int Data)
- SetGroupLong(String Name, Long Data)
- SetGroupFloat(String Name, Float Data)
- SetGroupDouble(String Name, Double Data)
- SetGroupString(String Name, String Data)
|