INIs parsen, erstellen und modifizieren

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Jolinah

Betreff: INIs parsen, erstellen und modifizieren

BeitragDo, März 16, 2006 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss, es gibt schon einen (bzw. viele) INI-Parser, aber ich hatte gerade nichts besseres zu tun Wink Damit kann man INI-Dateien laden und anschliessend bearbeiten oder auslesen, sowie neue INI-Dateien erstellen:

Vorteile:
Arrow Eine INI-Datei muss nur einmal eingelesen werden und kann dann direkt aus dem Speicher ausgelesen oder bearbeitet werden. Die meisten INI-Parser öffnen die Datei jedesmal wieder und suchen nach der Gruppe und der Variable.
Arrow Das Auslesen von Werten müsste deshalb schneller sein, da alles aus dem Speicher kommt und keine Datei mehr geöffnet werden muss.

Nachteile:
Arrow Es braucht etwas mehr Arbeitsspeicher
Arrow Es ist Case-Sensitive (kann auch ein Vorteil sein, je nach Situation, aber das kann ja recht schnell angepasst werden)

Alles in einer Datei, zum einfachen Importieren mit Import "dateiname.bmx":
BlitzMax: [AUSKLAPPEN]
Rem
bbdoc: Represents an INI configuration file containing groups/sections and variables.
about:
<pre>
Example INI file content:

GlobalVar = Hello World
[Video]
ResolutionX = 1920
ResolutionY = 1080
[]
AnotherGlobalVar = true

Where [Video] and [] are groups and the other lines with an assignment are variables.
Variables below a group belong to this group. Variables at the beginning of the file belong to the global group.

The global group is just a group with an empty string as its name, containing all the variables that are in no other group.
You can switch back to the global group by adding a line like [] (group with empty string as its name).

In the code you can retrieve the global group by using the GlobalGroup field.
Additionaly, you can use "" as the global group name for all methods that require a group name.
</pre>
End Rem

Type TIniFile
Field Path:String
Field Groups:TMap
Field GlobalGroup:TIniGroup

Method New()
Groups = New TMap
GlobalGroup = TIniGroup.Create("")
Groups.Insert("", GlobalGroup)
End Method

Rem
bbdoc: Creates a new INI file in memory.
about: The path is optional and will only be used later, when you call Save() without arguments.
End Rem

Function Create:TIniFile(path:String = Null)
Local f:TIniFile = New TIniFile
f.Path = path
Return f
End Function

Rem
bbdoc: Loads an existing INI file from disk into memory.
End Rem

Function Load:TIniFile(path:String)
Local stream:TStream = ReadFile(path)
If stream = Null Then Return Null

Local ini:TIniFile = LoadStream(stream)
If ini <> Null
ini.Path = path
EndIf

CloseFile(stream)
Return ini
End Function

Rem
bbdoc: Loads an existing INI file from a stream.
End Rem

Function LoadStream:TIniFile(stream:TStream)
If stream = Null Then Return Null

Local ini:TIniFile = TIniFile.Create()
Local line:String
Local variable:String[]
Local group:TIniGroup = ini.GlobalGroup

While Not Eof(stream)
line = ReadLine(stream)
line = line.Trim()

'Ignore comment lines
If line[0] = "#" Then Continue

If line[..1] = "[" And line[line.Length - 1..] = "]"
'Groups/sections
line = line[1..line.Length - 1]
group = ini.GetOrAddGroup(line)
Else If group <> Null
'Variable
variable = line.Split("=")
If variable.Length > 1
If variable.Length > 2
variable[1] = "=".Join(variable[1..])
End If
group.SetValue(variable[0].Trim(), variable[1].Trim())
EndIf
EndIf
Wend

Return ini
End Function

Rem
bbdoc: Loads an INI file by its string content.
End Rem

Function Parse:TIniFile(content:String)
Local bank:TBank = CreateBank(content.Length)
Local stream:TBankStream = CreateBankStream(bank)
stream.WriteString(content)
stream.Seek(0)

Local ini:TIniFile = LoadStream(stream)

stream.Close()
Return ini
End Function

Rem
bbdoc: Loads an existing INI file from disk into memory.
about: If the file does not exist or can__COMMENT4__
End Rem

Function LoadOrCreate:TIniFile(path:String)
Local ini:TIniFile = Load(path)

If ini = Null
ini = Create(path)
EndIf

Return ini
End Function

Rem
bbdoc: Retrieves an existing group/section or creates a new one.
End Rem

Method GetOrAddGroup:TIniGroup(name:String)
Local group:TIniGroup = GetGroup(name)
If group <> Null Then Return group

group = TIniGroup.Create(name)
Groups.Insert(name, group)
Return group
End Method

Rem
bbdoc: Retrieves an existing group/section. Returns Null if there is no such group.
End Rem

Method GetGroup:TIniGroup(name:String)
Local group:TIniGroup = TIniGroup(Groups.ValueForKey(name))
Return group
End Method

Rem
bbdoc: Removes a group (if it exists).
End Rem

Method RemoveGroup(name:String)
Groups.Remove(name)
End Method

Rem
bbdoc: Retrieves an existing variable. Returns Null if the group/section or the variable does not exist.
End Rem

Method GetVar:TIniVar(groupName:String, varName:String)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return Null

Return group.GetVar(varName)
End Method

Rem
bbdoc: Removes a variable from a group (if the group and variable exists).
End Rem

Method RemoveVar(groupName:String, varName:String)
Local group:TIniGroup = GetGroup(groupName)
If group <> Null
group.RemoveVar(varName)
End If
End Method

Rem
bbdoc: Gets the value of a variable if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetValue:String(groupName:String, varName:String, defaultValue:String = Null)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetValue(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as a byte if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetByte:Byte(groupName:String, varName:String, defaultValue:Byte = 0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetByte(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as a short if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetShort:Short(groupName:String, varName:String, defaultValue:Short = 0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetShort(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as an int if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetInt:Int(groupName:String, varName:String, defaultValue:Int = 0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetInt(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as a long if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetLong:Long(groupName:String, varName:String, defaultValue:Long = 0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetLong(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as a float if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetFloat:Float(groupName:String, varName:String, defaultValue:Float = 0.0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetFloat(varName, defaultValue)
End Method

Rem
bbdoc: Gets the value of a variable as a double if the group and variable exists. Else, defaultValue will be returned.
End Rem

Method GetDouble:Double(groupName:String, varName:String, defaultValue:Double = 0.0)
Local group:TIniGroup = GetGroup(groupName)
If group = Null Then Return defaultValue
Return group.GetDouble(varName, defaultValue)
End Method

Rem
bbdoc: Sets a variable to the specified value. The group and the variable will be created if they do not exist.
End Rem

Method SetValue:TIniVar(groupName:String, varName:String, value:String)
Local group:TIniGroup = GetGroup(groupName)
If group = Null
group = TIniGroup.Create(groupName)
Groups.Insert(groupName, group)
End If

Return group.SetValue(varName, value)
End Method

Rem
bbdoc: Saves the INI to a file on disk.
about:
If the filePath is omitted, the path from Create() will be used.
After successfully saving, the Path field of the type will be set to the path where the file has been saved.
This means, the next time you want to save, you can just call Save() without any arguments.
End Rem

Method Save(filePath:String = Null)
If filePath = Null
If Path = Null Throw "No filePath specified."
filePath = Path
End If

Local s:TStream = WriteFile(filePath)
If s = Null Then Return

For Local g:TIniGroup = EachIn Groups.Values()
WriteLine(s, "[" + g.Name + "]")
For Local v:TIniVar = EachIn g.Vars
WriteLine(s, v.Name + " = " + v.Value)
Next
WriteLine(s, "")
Next

CloseFile(s)
Path = filePath
End Method
End Type

Rem
bbdoc: Represents a group/section in an INI configuration file.
End Rem

Type TIniGroup
Field Name:String
Field Vars:TMap

Method New()
Vars = New TMap
End Method

Rem
bbdoc: Creates a new INI group/section.
about:
The group won__COMMENT5__
Just use TIniFile directly for creating groups.
End Rem

Function Create:TIniGroup(name:String)
Local g:TIniGroup = New TIniGroup
g.Name = name
Return g
End Function

Rem
bbdoc: Retrieves an existing variable within the group or Null if the variable does not exist.
End Rem

Method GetVar:TIniVar(name:String)
Local v:TIniVar = TIniVar(Vars.ValueForKey(name))
Return v
End Method

Rem
bbdoc: Removes a variable from the group (if it does exist).
End Rem

Method RemoveVar(name:String)
Vars.Remove(name)
End Method

Rem
bbdoc: Gets the value of a variable within the group. Returns defaultValue if the variable does not exist.
End Rem

Method GetValue:String(name:String, defaultValue:String = Null)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.Value
End Method

Rem
bbdoc: Gets the value of a variable within the group as a byte. Returns defaultValue if the variable does not exist.
End Rem

Method GetByte:Byte(name:String, defaultValue:Byte = 0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetByte()
End Method

Rem
bbdoc: Gets the value of a variable within the group as a short. Returns defaultValue if the variable does not exist.
End Rem

Method GetShort:Short(name:String, defaultValue:Short = 0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetShort()
End Method

Rem
bbdoc: Gets the value of a variable within the group as an int. Returns defaultValue if the variable does not exist.
End Rem

Method GetInt:Int(name:String, defaultValue:Int = 0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetInt()
End Method

Rem
bbdoc: Gets the value of a variable within the group as a long. Returns defaultValue if the variable does not exist.
End Rem

Method GetLong:Long(name:String, defaultValue:Long = 0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetLong()
End Method

Rem
bbdoc: Gets the value of a variable within the group as a float. Returns defaultValue if the variable does not exist.
End Rem

Method GetFloat:Float(name:String, defaultValue:Float = 0.0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetFloat()
End Method

Rem
bbdoc: Gets the value of a variable within the group as a double. Returns defaultValue if the variable does not exist.
End Rem

Method GetDouble:Double(name:String, defaultValue:Double = 0.0)
Local v:TIniVar = GetVar(name)
If v = Null Then Return defaultValue
Return v.GetDouble()
End Method

Rem
bbdoc: Sets the value of a variable within the group to the specified value. The variable will be created if it does not exist.
End Rem

Method SetValue:TIniVar(name:String, value:String)
Local v:TIniVar = GetVar(name)

If v = Null
v = TIniVar.Create(name, value)
Vars.Insert(name, v)
Else
v.value = value
End If

Return v
End Method
End Type

Rem
bbdoc: Represents a variable in an INI configuration file.
End Rem

Type TIniVar
Field Name:String
Field Value:String

Rem
bbdoc: Creates a new variable with the given name and initial value.
about: The variable won__COMMENT6__
End Rem

Function Create:TIniVar(name:String, value:String)
Local v:TIniVar = New TIniVar
v.Name = name
v.Value = value
Return v
End Function

Rem
bbdoc: Returns the value of the variable as a byte.
End Rem

Method GetByte:Byte()
Return Byte(Value)
End Method

Rem
bbdoc: Returns the value of the variable as a short.
End Rem

Method GetShort:Short()
Return Short(value)
End Method

Rem
bbdoc: Returns the value of the variable as an int.
End Rem

Method GetInt:Int()
Return Int(value)
End Method

Rem
bbdoc: Returns the value of the variable as a long.
End Rem

Method GetLong:Long()
Return Long(value)
End Method

Rem
bbdoc: Returns the value of the variable as a float.
End Rem

Method GetFloat:Float()
Return Float(value)
End Method

Rem
bbdoc: Returns the value of the variable as a double.
End Rem

Method GetDouble:Double()
Return Double(value)
End Method
End Type

Und ein kleines Beispiel:
BlitzMax: [AUSKLAPPEN]
'Ini Datei erstellen
Local ini:TIniFile = TIniFile.Create("settings.ini")
Local g:TIniGroup

g = ini.GetOrAddGroup("Video") 'Gruppe hinzufügen
g.SetValue("Width", "800") 'Dieser Gruppe Variablen hinzufügen
g.SetValue("Height", "600")

g = ini.GetOrAddGroup("Audio") 'Noch eine Gruppe
g.SetValue("Volume", "100") 'und eine Variable dazu

g = ini.GetGroup("Video") 'Anschliessend wieder die Gruppe "Video" holen
If g <> Null
g.SetValue("Bits", "32") 'und noch eine Variable anfügen
EndIf

ini.Save() 'Datei effektiv erstellen und speichern


'Datei auslesen
ini = TIniFile.Load("test.ini")
g = ini.GetGroup("Gruppe1") 'Gruppe "Gruppe1" holen
Print g.GetVar("Test1").Value 'Methode GetVar von TIniGroup..
Print g.GetValue("Test1") 'Noch einfacher direkt mit GetValue

Print ini.GetVar("Gruppe1", "Test1").Value '..oder direkt von TIniFile mit Angabe der Gruppe
Print ini.GetValue("Gruppe1", "Test1") 'noch einfacher direkt mit GetValue


'Modifizieren
Local v:TIniVar
v = g.GetVar("Test1") 'Variable "Test1" holen
v.Name = "NeuerName" 'Name ändern
v.Value = "50" 'Wert ändern

g.SetValue("NeuerName", "60") 'Oder den Wert direkt mit SetValue verändern
ini.SetValue("Gruppe1", "NeuerName", "70") 'Das geht auch direkt von TIniFile aus

ini.Save() 'Änderungen speichern

Edit:
Ich habe die Klasse noch etwas erweitert und ein Modul daraus gemacht.

Wer also lieber das Modul haben möchte:
https://https://github.com/Jolinah/mzehr.ini (Quellcode)
https://github.com/Jolinah/mzehr.ini/releases (Download-Pakete, vorkompiliert für Win32)
  • Zuletzt bearbeitet von Jolinah am Do, März 22, 2018 16:09, insgesamt einmal bearbeitet
 

#Reaper

Newsposter

BeitragFr, Apr 04, 2008 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Thread ist zwar nun schon etwas älter, aber ich hoffe das macht nun nichts.. Wink

Ich habe mal deinen tollen Ini-Parser zu einem "vollwertigem" Modul mit ein wenig schlechter Dokumentation "erweitert".
Da ich euch das nun nicht vorenthalten wollte, hier mal der Code:

Code: [AUSKLAPPEN]
SuperStrict

Rem
   bbdoc: Ini-Parser by Jolinah.
   about: For more information visit http://www.blitzforum.de/forum/viewtopic.php?t=16991
End Rem
Module Jolinah.IniParser

ModuleInfo "Version: 1.00"
ModuleInfo "Author: Jolinah"
ModuleInfo "License: Public Domain"
ModuleInfo "History: 1.00 Converted into a module"


Import BRL.FileSystem
Import BRL.Retro


Rem
   bbdoc: Ini-File
   about: Load, create, change and save a Ini-File
End Rem
Type TIniFile
   Field Path:String
   Field Groups:TList
   
   
   Rem
      bbdoc:      Creates a Ini-File
      returns:   Returns a handler to modify the Ini-File
   End Rem
   Function Create:TIniFile(Path:String)
      Local f:TIniFile = New TIniFile
      f.Path = Path
      f.Groups = New TList
      Return f
   End Function
   
   Rem
      bbdoc:      Loads a Ini-File
      returns:   Returns a handler to modify the Ini-File
   End Rem
   Function Load:TIniFile(Path:String)
      Local s:TStream = ReadFile(Path)
      If s = Null Then Return Null
      
      Local f:TIniFile = TIniFile.Create(Path)
      Local line:String
      Local variable:String[]
      Local group:TIniGroup

      While Not Eof(s)
         line = ReadLine(s)
         line = line.Trim()
         
         If Left(line, 1) = "["
            line = Mid(line, 2)
            line = Left(line, line.Length - 1)
            group = f.AddGroup(line)
         Else If group <> Null
            variable = Split(line, "=")
            If variable.Length > 1
               group.AddVar(variable[0].Trim(), variable[1].Trim())
            EndIf
         EndIf
      Wend
                  
      CloseFile(s)
      Return f
   End Function
   
   Rem
      bbdoc:      Adds a group to a Ini-File
      returns:   Returns a handler of a group in the Ini-File
   End Rem
   Method AddGroup:TIniGroup(Name:String)
      Local g:TIniGroup = TIniGroup.Create(Name)
      Groups.AddLast(g)
      Return g
   End Method
   
   Rem
      bbdoc:      Gets a group of a Ini-File
      returns:   Returns a handler of a group in the Ini-File
   End Rem
   Method GetGroup:TIniGroup(Name:String)
      For Local g:TIniGroup = EachIn Groups
         If g.Name = Name Then Return g
      Next
      Return Null
   End Method
   
   Rem
      bbdoc:      Gets a variable of a group
      returns:   Returns a handler of a variable in a group
   End Rem
   Method GetVar:TIniVar(GroupName:String, VarName:String)
      Local g:TIniGroup = GetGroup(GroupName)
      If g = Null Then Return Null
      
      Return g.GetVar(VarName)
   End Method
   
   Rem
      bbdoc:      Saves a created or changed Ini-File
   End Rem
   Method Save()
      Local s:TStream = WriteFile(Path)
      If s = Null Then Return
      
      For Local g:TIniGroup = EachIn Groups
         WriteLine(s, "[" + g.Name + "]")
         For Local v:TIniVar = EachIn g.Vars
            WriteLine(s, v.Name + "=" + v.Value)
         Next
         WriteLine(s, "")
      Next
      
      CloseFile(s)
   End Method
   
End Type


Rem
   bbdoc: Ini-Group
   about: Creates or change a group of a Ini-File
End Rem
Type TIniGroup
   Rem
      bbdoc: Change or get the name of a group
   End Rem
   Field Name:String
   Field Vars:TList
   
   
   Rem
      bbdoc:      Creates a group in a Ini-File
      returns:   Returns a handler of a group
   End Rem
   Function Create:TIniGroup(Name:String)
      Local g:TIniGroup = New TIniGroup
      g.Name = Name
      g.Vars = New TList
      Return g
   End Function
   
   Rem
      bbdoc:      Adds a variable to a group
      returns:   Returns a handler of a variable in a group
   End Rem
   Method AddVar:TIniVar(Name:String, Value:String)
      Local v:TIniVar = TIniVar.Create(Name, Value)
      Vars.AddLast(v)
      Return v
   End Method
   
   Rem
      bbdoc:      Gets a variable of a group
      returns:   Returns a handler of a variable in a group
   End Rem
   Method GetVar:TIniVar(Name:String)
      For Local v:TIniVar = EachIn Vars
         If v.Name = Name Then Return v
      Next
      Return Null
   End Method
End Type


Rem
   bbdoc: Ini-Variable
   about: Creates or change a variable of a group
End Rem
Type TIniVar
   Rem
      bbdoc: Change or get the name of a variable
   End Rem
   Field Name:String
   Rem
      bbdoc: Change or get the value of a variable
   End Rem
   Field Value:String
   
   
   Rem
      bbdoc:      Creates a variable in a group
      returns:   Returns a handler of a variable in a group
   End Rem
   Function Create:TIniVar(Name:String, Value:String)
      Local v:TIniVar = New TIniVar
      v.Name = Name
      v.Value = Value
      Return v
   End Function
End Type




Function Split:String[](str:String, separator:String)
   Local ret:String[]
   Local pos:Int = 0
   Local old_pos:Int = 0
   
   pos = Instr(str, separator)
   old_pos = 1 - separator.Length
   While pos > 0
      ret = ret[..ret.Length+1]
      ret[ret.Length-1] = Mid(str, old_pos + separator.Length, pos - (old_pos + separator.Length))
      old_pos = pos
      pos = Instr(str, separator, old_pos + separator.Length)
   Wend
   
   ret = ret[..ret.Length+1]
   ret[ret.Length-1] = Mid(str, old_pos + separator.Length)
   
   Return ret   
End Function


Ich hoffe du hast nichts dagegen Wink
Allerdings weiß ich nun nicht genau, unter welcher Lizenz das Modul-Board nun eigentlich läuft.

Ich hoffe es kann wer so gebrauchen.


MfG
#Reaper


PS: Mein Englisch ist ja nicht sonderlich toll, wenn jemand einen Fehler findet... darf er ihn behalten oder ihn mir per PN zusenden. ;D
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
  • Zuletzt bearbeitet von #Reaper am Sa, Apr 05, 2008 15:22, insgesamt 3-mal bearbeitet

Jolinah

BeitragFr, Apr 04, 2008 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, habe nichts dagegen Wink Wegen einer Lizenz hab ich mir eigentlich keine Gedanken gemacht. Vielleicht sowas in der Art:

Wers brauchen kann, der darf. Wenn was schlimmes mit dem System passiert, bin ich nicht schuld Rolling Eyes . Und der Code darf nach Belieben verändert werden. Dass mein Name da steht ist mir nicht so wichtig, aber wenn der Code verändert wurde sollte das gekennzeichnet sein, oder mein Name ganz entfernt werden ^^

BtbN

BeitragFr, Apr 04, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du schon nicht gut Englisch kannst("...of Jolinah"), dann schreib doch wenigstens die Doku-Einträge auf Deutsch.
Ist der Verständlichkeit extremst zuträglich.
 

#Reaper

Newsposter

BeitragFr, Apr 04, 2008 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
BORNtobeNAMELESS hat Folgendes geschrieben:
Wenn du schon nicht gut Englisch kannst("...of Jolinah"), dann schreib doch wenigstens die Doku-Einträge auf Deutsch.
Ist der Verständlichkeit extremst zuträglich.

Embarassed
Nja Sad
Habe vergessen das zu erwähnen, wollte ich eigentlich machen ^^°
Sorry Crying or Very sad

Naja, war auch hauptsächlich nur gedacht für's Highlighten...
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

d-bug

BeitragSa, Apr 05, 2008 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Heißt es nicht "...by Jolinah"? Wink
 

#Reaper

Newsposter

BeitragSa, Apr 05, 2008 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
d-bug hat Folgendes geschrieben:
Heißt es nicht "...by Jolinah"? Wink


Embarassed Ich wusste doch, dass da immernoch was falsch ist..^^°
Langsam tue ich mich hier echt mehr als nur blamieren Sad Mad
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Jolinah

BeitragSa, Apr 05, 2008 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Und Modul heisst module, weiterhin wird in Englisch nicht jedes Nomen gross geschrieben. Ist mir nur so aufgefallen, jetzt wo ich es auch kurz überflogen habe Wink (Sollten nur Tipps zur Verbesserung sein, oder sonst kannst du es ja auch einfach in Deutsch schreiben ^^)
 

#Reaper

Newsposter

BeitragSa, Apr 05, 2008 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ubs, schusselfehler. Eigentlich weiß ich ja, das man Modul im englischem module schreibt Rolling Eyes
Naja, habs so an mir, auch im englischem Nomen groß zu schreiben. Embarassed Sad

Btw: Habs jetzt mal die Lizenz "Public Domain" genommen.
(Btw @Admins und Mods: Ihr habt für das Modul-Board keine Lizenz gesetzt. Wink)
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Markus2

BeitragDi, Apr 08, 2008 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jolinah
dein INI Kram kann ich gerade gebrauchen , Danke dafür Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group