November 28, 2020, 02:21:44 AM

Author Topic: [bb] INI file functions by Murilo [ 1+ years ago ]  (Read 563 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] INI file functions by Murilo [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
Title : INI file functions
Author : Murilo
Posted : 1+ years ago

Description : The two main functions (INI_ReadValue and INI_WriteValue) require no external arrays/variables - I've kept them completely self contained. The WriteINIFile function will create the INI file if it does not exist, create new sections if required and delete key values etc.

Code :
Code: BlitzBasic
  1. ; Title:        INI Read and Write functions
  2. ; Version:      1.22
  3. ; Revised:      November 11th 2002
  4. ; Author:       Leigh Bowers
  5.  
  6. ; Email:        leigh.bowers@curvesoftware.co.uk
  7. ; Web:  http://www.curvesoftware.co.uk/blitz
  8.  
  9. ; History:
  10.  
  11. ; 1.22  Failed to rename a variable during the v1.21 update - Fixed.
  12. ; 1.21  Functions/variables renamed for consitency, clarity & to avoid conflicts with globals - Prefxed with "INI_".
  13. ; 1.20  Bug fix: INI files with a single section could behave weirdly (thanks to Jacob Sindelir for highlighting the problem).
  14. ; 1.13  More efficient use of Upper$.
  15. ; 1.12  Minor optimisations/tweaks.
  16. ; 1.11  First public release (1.10 + enhancement).
  17. ;               Read/Write: Added support for INI sections.
  18. ;               Read: Now removes leader and trailer quotes where applicable (optional).
  19. ; 1.04  Initial internal release.
  20.  
  21. ; Example usage:
  22.  
  23. ;Print "INI Value = " + INI_ReadValue("Archon", "Video", "Resolution", "800x600")
  24. ;bSuccess% = INI_WriteValue("Archon", "Audio", "Music", "0")
  25.  
  26. Function INI_ReadValue$(INI_sAppName$, INI_sSection$, INI_sKey$, INI_sDefault$)
  27.  
  28. ; Returns: INI Value (String) - The INI_sDefault value is returned if no SECTION/KEY combination is found
  29.  
  30.         INI_sSection = "[" + Upper$(Trim$(INI_sSection)) + "]"
  31.         INI_sKey = Upper$(Trim$(INI_sKey))
  32.         INI_sFilename$ = CurrentDir$() + ""  + INI_sAppName + ".ini"
  33.  
  34. ; Retrieve the INI data
  35.  
  36.         INI_sContents$= INI_FileToString(INI_sFilename)
  37.         INI_sUpperContents$ = Upper$(INI_sContents) ; Speed up checks below
  38.  
  39. ; Locate the SECTION, KEY and VALUE
  40.  
  41.         INI_sValue$ = ""
  42.  
  43.         INI_lSectionPos% = Instr(INI_sUpperContents, INI_sSection)
  44.         If (INI_lSectionPos <> 0) Then
  45.                 INI_lKeyPos% = Instr(INI_sUpperContents, INI_sKey, (INI_lSectionPos + Len(INI_sSection) + 1))
  46.                 If (INI_lKeyPos <> 0) Then
  47.                         INI_lStartPos% = Instr(INI_sUpperContents, "=", (INI_lKeyPos + 1))
  48.                         If (INI_lStartPos <> 0) Then
  49.                                 INI_lEndPos% = Instr(INI_sUpperContents, Chr$(0), (INI_lStartPos + 1))
  50.                                 If (INI_lEndPos <> 0) Then
  51.                                         ; We have located the required INI VALUE!
  52.                                         INI_sValue = Trim$(Mid$(INI_sContents, INI_lStartPos + 1, (INI_lEndPos - INI_lStartPos - 1)))
  53.                                         ; Now remove any leader/trailer quotes (") - ** OPTIONAL **
  54.                                         ;If Left$(INI_sValue, 1) = Chr$(34) Then INI_sValue = Mid$(INI_sValue, 2)
  55.                                         ;If Right$(INI_sValue, 1) = Chr$(34) Then INI_sValue = Mid$(INI_sValue, 1, (Len(INI_sValue) - 1))
  56.                                 End If
  57.                         End If
  58.                 End If
  59.         End If
  60.  
  61. ; Return the value
  62.  
  63.         If (INI_sValue <> "") Then Return INI_sValue Else Return INI_sDefault
  64.  
  65. End Function
  66.  
  67. Function INI_WriteValue%(INI_sAppName$, INI_sSection$, INI_sKey$, INI_sValue$)
  68.  
  69. ; Returns: True (Success) or False (Failed)
  70.  
  71.         INI_sSection = "[" + Trim$(INI_sSection) + "]"
  72.         INI_sUpperSection$ = Upper$(INI_sSection)
  73.         INI_sKey = Trim$(INI_sKey)
  74.         INI_sValue = Trim$(INI_sValue)
  75.         INI_sFilename$ = CurrentDir$() + ""  + INI_sAppName + ".ini"
  76.  
  77. ; Retrieve the INI data (if it exists)
  78.  
  79.         INI_sContents$= INI_FileToString(INI_sFilename)
  80.  
  81. ; (Re)Create the INI file updating/adding the SECTION, KEY and VALUE
  82.  
  83.         INI_bWrittenKey% = False
  84.         INI_bSectionFound% = False
  85.         INI_sCurrentSection$ = ""
  86.  
  87.         INI_lFileHandle = WriteFile(INI_sFilename)
  88.         If INI_lFileHandle = 0 Then Return False ; Create file failed!
  89.  
  90.         INI_lOldPos% = 1
  91.         INI_lPos% = Instr(INI_sContents, Chr$(0))
  92.  
  93.         While (INI_lPos <> 0)
  94.  
  95.                 INI_sTemp$ =Trim$(Mid$(INI_sContents, INI_lOldPos, (INI_lPos - INI_lOldPos)))
  96.                
  97.                 If (INI_sTemp <> "") Then
  98.  
  99.                         If Left$(INI_sTemp, 1) = "[" And Right$(INI_sTemp, 1) = "]" Then
  100.  
  101.                                 ; Process SECTION
  102.  
  103.                                 If (INI_sCurrentSection = INI_sUpperSection) And (INI_bWrittenKey = False) Then
  104.                                         INI_bWrittenKey = INI_CreateKey(INI_lFileHandle, INI_sKey, INI_sValue)
  105.                                 End If
  106.                                 INI_sCurrentSection = Upper$(INI_CreateSection(INI_lFileHandle, INI_sTemp))
  107.                                 If (INI_sCurrentSection = INI_sUpperSection) Then INI_bSectionFound = True
  108.  
  109.                         Else
  110.  
  111.                                 ; KEY=VALUE
  112.  
  113.                                 lEqualsPos% = Instr(INI_sTemp, "=")
  114.                                 If (lEqualsPos <> 0) Then
  115.                                         If (INI_sCurrentSection = INI_sUpperSection) And (Upper$(Trim$(Left$(INI_sTemp, (lEqualsPos - 1)))) = Upper$(INI_sKey)) Then
  116.                                                 If (INI_sValue <> "") Then INI_CreateKey INI_lFileHandle, INI_sKey, INI_sValue
  117.                                                 INI_bWrittenKey = True
  118.                                         Else
  119.                                                 WriteLine INI_lFileHandle, INI_sTemp
  120.                                         End If
  121.                                 End If
  122.  
  123.                         End If
  124.  
  125.                 End If
  126.  
  127.                 ; Move through the INI file...
  128.  
  129.                 INI_lOldPos = INI_lPos + 1
  130.                 INI_lPos% = Instr(INI_sContents, Chr$(0), INI_lOldPos)
  131.  
  132.         Wend
  133.  
  134.         ; KEY wasn't found in the INI file - Append a new SECTION if required and create our KEY=VALUE line
  135.  
  136.         If (INI_bWrittenKey = False) Then
  137.                 If (INI_bSectionFound = False) Then INI_CreateSection INI_lFileHandle, INI_sSection
  138.                 INI_CreateKey INI_lFileHandle, INI_sKey, INI_sValue
  139.         End If
  140.  
  141.         CloseFile INI_lFileHandle
  142.  
  143.         Return True ; Success
  144.  
  145. End Function
  146.  
  147. Function INI_FileToString$(INI_sFilename$)
  148.  
  149.         INI_sString$ = ""
  150.         INI_lFileHandle% = ReadFile(INI_sFilename)
  151.         If INI_lFileHandle <> 0 Then
  152.                 While Not(Eof(INI_lFileHandle))
  153.                         INI_sString = INI_sString + ReadLine$(INI_lFileHandle) + Chr$(0)
  154.                 Wend
  155.                 CloseFile INI_lFileHandle
  156.         End If
  157.         Return INI_sString
  158.  
  159. End Function
  160.  
  161. Function INI_CreateSection$(INI_lFileHandle%, INI_sNewSection$)
  162.  
  163.         If FilePos(INI_lFileHandle) <> 0 Then WriteLine INI_lFileHandle, "" ; Blank line between sections
  164.         WriteLine INI_lFileHandle, INI_sNewSection
  165.         Return INI_sNewSection
  166.  
  167. End Function
  168.  
  169. Function INI_CreateKey%(INI_lFileHandle%, INI_sKey$, INI_sValue$)
  170.  
  171.         WriteLine INI_lFileHandle, INI_sKey + "=" + INI_sValue
  172.         Return True
  173.  
  174. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal