Read and Write easy your INI files with Blitz3D

Blitz3D Forums/Blitz3D Tutorials/Read and Write easy your INI files with Blitz3D

Giulio(Posted 2004) [#1]
With external DLL calls capability, Blitz can achieve an high grade of programmability. In this tutorial i try to explain how to manage easily you ini files.

First you need to create in blitz 'userlibs' directory a decls file to import API routines. Save it as kernel32.decls

; Userlibs kernel32.decls 
.lib "kernel32.dll"
GetPrivateProfileString%(lpApplicationName$,lpKeyName$,lpDefault$,lpReturnedString*,nSize%,lpFileName$):"GetPrivateProfileStringA"
WritePrivateProfileString%(lpApplicationName$,lpKeyName$,lpString$,lpFileName$):"WritePrivateProfileStringA"


Done? Well. Now you must include in your source code two functions to write and retrieve values in ini file:

Function SetIniString%(FileINI$, Section$, Key$, Value$)
  ; FileINI = file (must include path, for current dir use .\) to write into (eg: ".\myinifile.ini")
  ; Section$ = section that will include your key and value (eg: "GeneralSetup")
  ; Key$ = Key's name for the value (eg: "BackColor")
  ; Value$ = Value to write in Key (eg: "ff00ff")
  ; If the function succedeed it return True otherwhise False

  ; result in myinifile.ini:
  ; [GeneralSetup]
  ; BackColor=ff00ff

  Ret%=WritePrivateProfileString(Section$, Key$, Value$, FileINI$)
  If Ret% <> 1 Then
    Return False
  Else
    Return True
  End If
  
End Function

Function GetIniString$(FileINI$,Section$,Key$,DefaultValue$)
  ; FileINI = file (must include path, for current dir use .\) to read (eg: "c:\windows\myinifile.ini")
  ; Section$ = section where search your key (eg: "GeneralSetup")
  ; Key$ = Key's name to search (eg: "BackColor")
  ; DefaultValue$ = Value to return if key or file or section is not found (eg: "ff00ff")
  ; Function return value retrieved from searched Key or the user's default value

  myString$=""
  myBank=CreateBank(255)
  LenString%=GetPrivateProfileString(Section$, Key$, DefaultValue$, myBank, 255, FileINI$)
  For x=1 To LenString%
    myString$=myString$+Chr(PeekByte(myBank,x-1))
  Next
  FreeBank myBank
  Return myString$
	
End Function


You can manage also integer or floating number, you dont need to convert it to string before writing or after read. That's all!


Giulio(Posted 2004) [#2]
Use of these functions.

Imagine to load at start you preferred program variables, previuosly saved in you ini file. Code may be:

const INIFILE$=".\myini.ini"

WindowsSize$=GetIniString(INIFILE,"Window","Size","Maximized")
WindowsCoords$=GetIniString(INIFILE,"Window","Coords","0,0,640,480")
MaxScore%=GetIniString(INIFILE,"Players","MaxScore","9999")
MaxScorePlayerName$=GetIniString(INIFILE,"Players","MaxScoreName","????")

... and so on

To write:
SetIniString(INIFILE,"Window","Size",WindowsSize$)
SetIniString(INIFILE,"Window","Coords",WindowsCoords$)
SetIniString(INIFILE,"Players","MaxScore",MaxScore%)
SetIniString(INIFILE,"Players","MaxScoreName",MaxScorePlayerName$)


Note that you can control if the write operation was successeful with:

if not SetIniString(INIFILE,"Window","Size",WindowsSize$) then ... (manage here your error)