Read and Write easy your INI files with Blitz3D

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

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!

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)