home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / sftgrd / ini_file.bas < prev    next >
Encoding:
BASIC Source File  |  1996-06-12  |  9.7 KB  |  303 lines

  1. ': INI_FILE.BAS
  2. '-    Manages writing info to Windows INI files
  3. '
  4. ' Copyright 1994, AA-Software International
  5. '     Distributed for non-commercial educational use only.
  6. '     For other use contact:
  7. '        AA-Software International
  8. '        12 ter Domaine Du Bois Joli
  9. '        06330 Roquefort-Les-Pins, France
  10. '
  11. '        Tel: (+33) 93.77.50.47
  12. '        Fax: (+33) 93.77.19.78
  13. '        Internet: cswilly@acm.org
  14. '        CompuServe: 100343,2570
  15. '
  16. Option Explicit
  17. '
  18. ' Window API Function Declarations
  19. '
  20. Declare Function GetPrivateProfileInt Lib "Kernel" (ByVal AppName As String, ByVal KeyName As String, ByVal DEFAULT As Integer, ByVal FileName As String) As Integer
  21. Declare Function GetPrivateProfileString Lib "Kernel" (ByVal AppName As String, ByVal KeyName As String, ByVal DEFAULT As String, ByVal ReturnedString As String, ByVal MaxSize As Integer, ByVal FileName As String) As Integer
  22. Declare Function WritePrivateProfileString Lib "Kernel" (ByVal AppName As String, ByVal KeyName As String, ByVal NewString As String, ByVal FileName As String) As Integer
  23.  
  24. Dim INI_FILENAME As String
  25. Dim APP_NAME As String
  26.  
  27. Dim filesOpen_s() As String            'file name of the CAF files that are currently open
  28.  
  29. Sub ini_CloseFile (ByVal iniFile_h As Integer)
  30.  
  31. '-Closes a ini file.
  32.  
  33.    'Make sure handle is valid
  34.    Rem gen_assert (0 < iniFile_h And iniFile_h <= UBound(filesOpen_s)), "ini_CloseFile", "Invalid ini file handle"
  35.  
  36.    'Mark the slot as unused by setting it to null string
  37.    filesOpen_s(iniFile_h) = ""
  38.  
  39. End Sub
  40.  
  41. Function ini_GetFileName_s (ByVal iniFile_h As Integer) As String
  42.    
  43.    Rem gen_assert (0 < iniFile_h And iniFile_h <= UBound(filesOpen_s)), "ini_GetFileName_s", "Invalid ini file handle."
  44.    Rem gen_assert (filesOpen_s(iniFile_h) <> ""), "ini_GetFileName_s", "Invalid ini file handle."
  45.    
  46.    ini_GetFileName_s = filesOpen_s(iniFile_h)
  47.  
  48. End Function
  49.  
  50. Function ini_GetMaxObjects_l (ByVal iniFile_h As Integer) As Long
  51.  
  52.    'Get the ini file name
  53.    Dim iniFileName_s As String
  54.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  55.  
  56.    ini_GetMaxObjects_l = IniGetInteger2(iniFileName_s, "global info", "ObjectsMax", 0)
  57.  
  58. End Function
  59.  
  60. Function ini_GetObjectID_l (ByVal iniFile_h As Integer, ByVal keyName_s As String) As Long
  61.  
  62.    'Get the ini file name
  63.    Dim iniFileName_s As String
  64.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  65.  
  66.    'Return the keyname for this object
  67.    ini_GetObjectID_l = IniGetInteger2(iniFileName_s, keyName_s, "objectID", 0)
  68.  
  69.  
  70. End Function
  71.  
  72. Function ini_GetObjectKeyName_s (ByVal iniFile_h As Integer, ByVal ObjectID_l As Long) As String
  73.  
  74.    'Get the ini file name
  75.    Dim iniFileName_s As String
  76.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  77.  
  78.    'Return the keyname for this object
  79.    ini_GetObjectKeyName_s = IniGetString2(iniFileName_s, "objectKeyname", "I" & Trim$(Str$(ObjectID_l)), "")
  80.  
  81. End Function
  82.  
  83. Function ini_GetObjectStatus_s (ByVal iniFile_h As Integer, ByVal ObjectID_l As Long) As String
  84.  
  85.    Dim iniFileName_s As String
  86.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  87.  
  88.    Dim keyName_s As String
  89.    keyName_s = ini_GetObjectKeyName_s(iniFile_h, ObjectID_l)
  90.    Rem gen_assert (keyName_s <> ""), "ini_GetObjectStatus_s", "Object does not exist"
  91.  
  92.    ini_GetObjectStatus_s = IniGetString2(iniFileName_s, keyName_s, "Status", "")
  93.  
  94. End Function
  95.  
  96. Sub ini_Initialize ()
  97.  
  98.    Static AlreadyInitialized_b As Integer
  99.  
  100.    If AlreadyInitialized_b Then
  101.       Exit Sub
  102.    End If
  103.  
  104.    ReDim filesOpen_s(0)
  105.    AlreadyInitialized_b = True
  106. End Sub
  107.  
  108. Function ini_OpenFile_h (ByVal fileName_s As String) As Integer
  109.  
  110. '-Open a ini file returing a handle.
  111.  
  112.    'find a empty filename slot
  113.    Dim slot_i As Integer
  114.    For slot_i = 1 To UBound(filesOpen_s)
  115.       If filesOpen_s(slot_i) = "" Then Exit For
  116.    Next slot_i
  117.  
  118.    'extend the number of filename slots if needed
  119.    If slot_i > UBound(filesOpen_s) Then
  120.       slot_i = slot_i + 1
  121.       ReDim Preserve filesOpen_s(slot_i)
  122.    End If
  123.  
  124.    'put filename into slot
  125.    filesOpen_s(slot_i) = fileName_s
  126.  
  127.    'report back the slot number used
  128.    ini_OpenFile_h = slot_i
  129.  
  130. End Function
  131.  
  132. Sub ini_SetObjectStatus (ByVal iniFile_h As Integer, ByVal ObjectID_l As Long, ByVal status_s As String)
  133.  
  134.    Dim iniFileName_s As String
  135.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  136.  
  137.    Dim keyName_s As String
  138.    keyName_s = ini_GetObjectKeyName_s(iniFile_h, ObjectID_l)
  139.    Rem gen_assert (keyName_s <> ""), "ini_GetObjectStatus_s", "Object does not exist"
  140.  
  141.    IniPutString2 iniFileName_s, keyName_s, "Status", status_s
  142. End Sub
  143.  
  144. Function iniCreateObject_l (ByVal iniFile_h As Integer, ByVal keyName_s As String) As Long
  145.  
  146.    'Get the ini file name
  147.    Dim iniFileName_s As String
  148.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  149.  
  150.    Dim ObjectID_l As Long
  151.    ObjectID_l = IniGetInteger2(iniFileName_s, keyName_s, "objectID", 0)
  152.    
  153.    'Check if object exists
  154.    If ObjectID_l = 0 Then
  155.       'Object Not found, create new object
  156.       ObjectID_l = pGetNextFreeObjectID_l(iniFile_h)
  157.       'Set the keyname lookup
  158.       IniPutString2 iniFileName_s, "objectKeyname", "I" & Format$(ObjectID_l), keyName_s
  159.       IniPutInteger2 iniFileName_s, keyName_s, "objectID", ObjectID_l
  160.    End If
  161.    
  162.    iniCreateObject_l = ObjectID_l
  163.  
  164. End Function
  165.  
  166. Sub IniGetForm (f As Form, ByVal formName$)
  167. Dim APP_NAME As String
  168.  
  169. APP_NAME = formName$ + "-Position"
  170. f.Left = GetPrivateProfileInt(APP_NAME, "Left", f.Left, INI_FILENAME)
  171. f.Width = GetPrivateProfileInt(APP_NAME, "Width", f.Width, INI_FILENAME)
  172. f.Top = GetPrivateProfileInt(APP_NAME, "Top", f.Top, INI_FILENAME)
  173. f.Height = GetPrivateProfileInt(APP_NAME, "Height", f.Height, INI_FILENAME)
  174. f.WindowState = GetPrivateProfileInt(APP_NAME, "WindowState", f.WindowState, INI_FILENAME)
  175.  
  176. End Sub
  177.  
  178. Function IniGetInteger (ByVal Key As String, ByVal DefaultValue As Integer) As Integer
  179.  
  180.     IniGetInteger = GetPrivateProfileInt(APP_NAME, Key, DefaultValue, INI_FILENAME)
  181.  
  182. End Function
  183.  
  184. Function IniGetInteger2 (ByVal iniFileName As String, ByVal sectionName As String, ByVal Key As String, ByVal DefaultValue As Integer) As Integer
  185.    
  186.    IniGetInteger2 = GetPrivateProfileInt(sectionName, Key, DefaultValue, iniFileName)
  187.  
  188. End Function
  189.  
  190. Function IniGetString (ByVal Key As String, ByVal DefaultValue As String) As String
  191. Dim r As Integer
  192. Dim retval As String
  193.  
  194. retval = Space$(255)
  195. r = GetPrivateProfileString(APP_NAME, Key, DefaultValue, retval, Len(retval), INI_FILENAME)
  196. retval = Trim$(retval)
  197. IniGetString = Left$(retval, Len(retval) - 1)
  198.  
  199. End Function
  200.  
  201. Function IniGetString2 (ByVal iniFileName As String, ByVal sectionName As String, ByVal Key As String, ByVal DefaultValue As String) As String
  202.    
  203.    Dim retval As String
  204.    retval = Space$(255)
  205.  
  206.    Dim r As Integer
  207.    r = GetPrivateProfileString(sectionName, Key, DefaultValue, retval, Len(retval), iniFileName)
  208.    retval = Trim$(retval)
  209.    IniGetString2 = Left$(retval, Len(retval) - 1)
  210.  
  211. End Function
  212.  
  213. Sub IniPutForm (f As Form, ByVal formName$)
  214. Dim r As Integer
  215. Dim APP_NAME As String
  216.  
  217. APP_NAME = formName$ + "-Position"
  218. r = WritePrivateProfileString(APP_NAME, "WindowState", Format$(f.WindowState), INI_FILENAME)
  219.  
  220. If f.WindowState = 0 Then   ' Do not update if full screen or inconed
  221.     r = WritePrivateProfileString(APP_NAME, "Left", Format$(f.Left), INI_FILENAME)
  222.     r = WritePrivateProfileString(APP_NAME, "Width", Format$(f.Width), INI_FILENAME)
  223.     r = WritePrivateProfileString(APP_NAME, "Top", Format$(f.Top), INI_FILENAME)
  224.     r = WritePrivateProfileString(APP_NAME, "Height", Format$(f.Height), INI_FILENAME)
  225. End If
  226. End Sub
  227.  
  228. Sub IniPutInteger (ByVal Key As String, ByVal Value As Long)
  229. Dim r As Integer
  230.  
  231.     r = WritePrivateProfileString(APP_NAME, Key, Format$(Value), INI_FILENAME)
  232.  
  233. End Sub
  234.  
  235. Sub IniPutInteger2 (ByVal iniFileName As String, ByVal sectionName As String, ByVal Key As String, ByVal Value As Long)
  236.    Dim r
  237.    r = WritePrivateProfileString(sectionName, Key, Format$(Value), iniFileName)
  238.  
  239. End Sub
  240.  
  241. Sub IniPutString (ByVal Key As String, ByVal Value As String)
  242. Dim r As Integer
  243.  
  244.     r = WritePrivateProfileString(APP_NAME, Key, Value, INI_FILENAME)
  245.  
  246. End Sub
  247.  
  248. Sub IniPutString2 (ByVal iniFileName As String, ByVal sectionName As String, ByVal Key As String, ByVal Value As String)
  249.    Dim r
  250.    r = WritePrivateProfileString(sectionName, Key, Value, iniFileName)
  251.  
  252. End Sub
  253.  
  254. Sub IniSetAppName (ByVal AppName As String)
  255.     APP_NAME = AppName
  256. End Sub
  257.  
  258. Sub IniSetFileName (ByVal IniFileName_c As String)
  259.     INI_FILENAME = IniFileName_c
  260. End Sub
  261.  
  262. Private Function pGetNextFreeObjectID_l (ByVal iniFile_h As Integer) As Long
  263.  
  264.   'Get the ini file name
  265.    Dim iniFileName_s As String
  266.    iniFileName_s = ini_GetFileName_s(iniFile_h)
  267.  
  268.    'Get maximum number of objects in iniFile
  269.    Dim ObjectsMax_i As Integer
  270.    ObjectsMax_i = ini_GetMaxObjects_l(iniFile_h)
  271.  
  272.    'Check if there are any deleted objects
  273.    If IniGetInteger2(iniFileName_s, "global info", "ObjectsDeleted", 0) = 1 Then
  274.       'scan looking for deleted object
  275.       Dim controlKeyName_s As String
  276.  
  277.       Dim i As Long
  278.       For i = 1 To ObjectsMax_i
  279.          controlKeyName_s = ini_GetObjectKeyName_s(iniFile_h, i)
  280.          If controlKeyName_s = "" Then
  281.             'found a deleted object. i points to it.
  282.             Exit For
  283.          End If
  284.       Next i
  285.    Else
  286.       i = ObjectsMax_i + 1
  287.    End If
  288.  
  289.    ' i points to the correct objectID. It is either:
  290.    '     pointing to a deleted object, or
  291.    '     ObjectMax_i+1
  292.    pGetNextFreeObjectID_l = i
  293.  
  294.    'Save out object reserved and delete info
  295.    If i > ObjectsMax_i Then
  296.       IniPutString2 iniFileName_s, "global info", "ObjectsMax", Str$(i)
  297.       'There are no deleted objects.
  298.       IniPutString2 iniFileName_s, "global info", "ObjectsDeleted", Str$(0)
  299.    End If
  300.  
  301. End Function
  302.  
  303.