Code archives/File Utilities/Simple ini functions for Bmax

This code has been declared by its author to be Public Domain code.

Download source code

Simple ini functions for Bmax by Filax2005
Hi :)

This is the bmax verison of the skn3[ac] ini file for blitz3D.
Strict

CFG_WriteValue("Archon", "Video resolution", "Res1", "640")
CFG_WriteValue("Archon", "Video resolution", "Res2", "600")
CFG_WriteValue("Archon", "Video resolution", "Res3", "800")

CFG_WriteValue("Archon", "Video frequence", "Freq1", "60")
CFG_WriteValue("Archon", "Video frequence", "Freq2", "70")
CFG_WriteValue("Archon", "Video frequence", "Freq3", "75")

Print "INI Value = " + CFG_ReadValue("Archon", "Video resolution", "Res1") 
Print "INI Value = " + CFG_ReadValue("Archon", "Video frequence", "Freq4",80) 
End

' --------------------------------
' Read a value under a config file
' --------------------------------
Function CFG_ReadValue:String(Filename:String, Section:String, Key:String, DefaultValue:String="")
	' --------------------
	' Formating parameters
	' --------------------
	Section:String = "[" + Upper(Trim(Section)) + "]" ; Key:String = Upper(Trim(Key))
	Filename:String = CurrentDir() + "\"  + Filename + ".ini"
	
	' ---------------------------
	' Read the configuration file
	' ---------------------------
	Local Content:String= CFG_FileToString(Filename)
	Local UpperContents:String = Upper(Content) 

	' ----------------------------
	' Search the key and the value
	' ----------------------------
	Local Value:String = "" ; Local SectionPos:Int = Instr(UpperContents, Section)
	
	If SectionPos <> 0 Then
		Local KeyPos:Int = Instr(UpperContents, Key, (SectionPos + Len(Section) + 1))
		
		If KeyPos <> 0 Then
			Local StartPos:Int = Instr(UpperContents, "=", (KeyPos + 1))
			
			If StartPos <> 0 Then
				Local EndPos:Int = Instr(UpperContents, Chr(0), (StartPos + 1))
				
				If EndPos <> 0 Then
					Value = Trim(Mid(Content, StartPos + 1, (EndPos - StartPos - 1)))
				End If
				
			End If
		End If
	End If

	' ----------------------------------------------------
	' If match then return value else return default value
	' ----------------------------------------------------
	If Value <> "" Then Return Value Else Return DefaultValue
End Function

' ---------------------------------
' Write a value under a config file
' ---------------------------------
Function CFG_WriteValue(Filename:String, Section:String, Key:String, Value:String)
	' --------------------
	' Formating parameters
	' --------------------
	Section = "[" + Trim(Section) + "]" ; Key = Trim(Key) ; Value = Trim(Value)
	Filename:String = CurrentDir() + "\"  + Filename + ".ini"

	' ---------------------------
	' Read the configuration file
	' ---------------------------	
	Local UpperSection:String = Upper(Section)
	Local Content:String= CFG_FileToString(Filename)

	' --------------
	' Init local var
	' --------------
	Local WrittenKey:Int = False
	Local SectionFound:Int = False
	Local CurrentSection:String = ""

	' ----------------------------
	' If the file cannot be opened
	' ----------------------------
	Local FileHandle:TStream = WriteFile(Filename)
	If Not FileHandle Then Return False

	Local OldPos:Int = 1
	Local Position:Int = Instr(Content, Chr(0))

	' ---------------------------
	' Read the configuration file
	' ---------------------------
	While Position <> 0

		Local TempString:String =Trim(Mid(Content, OldPos, (Position - OldPos)))
		
		If TempString <> "" Then

			If Left(TempString, 1) = "[" And Right(TempString, 1) = "]" Then
				If CurrentSection = UpperSection And (WrittenKey = False) Then
					WrittenKey = CFG_CreateKey(FileHandle, Key, Value)
				End If
				
				CurrentSection = Upper(CFG_CreateSection(FileHandle, TempString))
				
				If CurrentSection = UpperSection Then SectionFound = True
			Else
				Local EqualPos:Int = Instr(TempString, "=")
				
				If EqualPos <> 0 Then
					If CurrentSection = UpperSection And (Upper(Trim(Left(TempString, (EqualPos - 1)))) = Upper(Key)) Then
						If Value <> "" Then CFG_CreateKey(FileHandle, Key, Value)
						WrittenKey = True
					Else
						WriteLine(FileHandle, TempString)
					End If
				End If

			End If

		End If

		OldPos = Position + 1 ; Position = Instr(Content, Chr(0), OldPos)
	Wend

	' ---------------------------------------
	' If the key is not under the config file
	' ---------------------------------------
	If WrittenKey = False Then
		If SectionFound = False Then CFG_CreateSection FileHandle, Section
		CFG_CreateKey(FileHandle, Key, Value)
	End If

	CloseFile FileHandle
	
	' -----------
	' Return TRUE 
	' -----------
	Return True 
End Function

' -------------------------------------
' Return the config file under a string
' -------------------------------------
Function CFG_FileToString:String(Filename:String)
	Local TempString:String = ""
	Local FileHandle:TStream = ReadFile(Filename)
	
	If FileHandle Then
		While Not Eof(FileHandle)
			TempString = TempString + ReadLine(FileHandle) + Chr(0)
		Wend
		
		CloseFile FileHandle
	End If
	
	Return TempString
End Function

' -----------------------------------
' Write a section under a config file
' -----------------------------------
Function CFG_CreateSection:String(FileHandle:TStream, NewSection:String)
	If StreamPos(FileHandle) <> 0 Then WriteLine FileHandle, "" 
	WriteLine FileHandle, NewSection ; Return NewSection
End Function

' ---------------------------------
' Write a value under a config file
' ---------------------------------
Function CFG_CreateKey(FileHandle:TStream, Key:String, Value:String)
	WriteLine FileHandle, Key + "=" + Value ; Return True
End Function

Comments

deps2005
Works great! Thanks.


Code Archives Forum