VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "Data"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
''+-------------------------------------------+
''| ICI style I/O database file access module |
''+-------------------------------------------+
''|       Made by Jure Sah of MesonAI         |
''+-------------------------------------------+
''
''DO NOT MODIFY WITHOUT MY PREMITION!!!
''(or use in altered form)
''
''Mailto:jure.sah@guest.arnes.si
''
''Feel free to use this module in your
''programs and share it with your friends.
''
''
''You will probably need it if you are
''building apps for the ICI Console.
''
''There is a external public string that
''can be defined: <DataFilesPath>
''It can be used to simplify calling routines

Public xTemporaryPath As String
Public DataFilesPath As String

Private Function xFixName(xName As String) As String
xFile$ = ""
If DataFilesPath <> "" Then xFile$ = DataFilesPath + "\"
xFile$ = xFile$ + xName
xFixName = xFile$
End Function

Public Sub xCreate(xName As String)
On Error Resume Next
xFile$ = xFixName(xName)

''Does it already exist?
If Dir(xFile$) = "" Then
 ''Place emptyness in new file
 OutputFN = FreeFile
 Open xFile$ For Output As #OutputFN
  Print #OutputFN, "INTERNAL FLAG = EXISTS!"
 Close #OutputFN
End If
End Sub

Public Sub xRemove(xName As String)
On Error Resume Next
xFile$ = xFixName(xName)

''Does it already exist?
If Dir(xFile$) <> "" Then
 Kill xFile$
End If
End Sub

Public Sub xSet(xName As String, xProperty As String, xValue As String)
On Error Resume Next
''Set filenames
xFile$ = xFixName(xName)
SwapFile$ = xTemporaryPath + "\ICIC.SWP"

If Dir(xFile$) <> "" Then
''Find Property in file and save the remaining data in the swap file
SwapFN = FreeFile
Open SwapFile$ For Output As #SwapFN
MainFN = FreeFile
Open xFile$ For Input As #MainFN
Found = False
Do: Line Input #MainFN, a$
 ''If the thing behind the "=" is our property...
 If UCase$(Trim$(Mid$(a$, 1, InStr(a$, "=") - 1))) = UCase$(Trim$(xProperty)) Then
  Found = True
 Else
  ''Otherwise copy to the swapfile
  Print #SwapFN, a$
 End If
Loop Until EOF(MainFN)
Close #MainFN, #SwapFN
Else
Found = False
End If

If Not Found Then
 ''If property not already inside, append it
 AppendFN = FreeFile
 Open xFile$ For Append As #AppendFN
 Print #AppendFN, xProperty; "="; xValue
 Close #AppendFN
Else
 ''If property inside, put it in the swap file and switch them
 AppendFN2 = FreeFile
 Open SwapFile$ For Append As #AppendFN2
 Print #AppendFN2, xProperty; "="; xValue
 Close #AppendFN2
 Kill xFile$
 Name SwapFile$ As xFile$
End If
Kill xTemporaryPath + "\ICIC.SWP"
End Sub

Public Function xQuery(xName As String, xProperty As String) As String
On Error Resume Next
xFile$ = xFixName(xName)

''Find the right Property and then extract the Value
If Dir(xFile$) <> "" Then
InputFN = FreeFile
Open xFile$ For Input As #InputFN
Found = False
Do: Line Input #InputFN, a$
'Debug.Print "("; UCase$(Trim$(Mid$(a$, 1, InStr(a$, "=") - 1))); ")"
If UCase$(Trim$(Mid$(a$, 1, InStr(a$, "=") - 1))) = UCase$(Trim$(xProperty)) Then
 xQuery = Trim$(Mid$(a$, InStr(a$, "=") + 1))
 Exit Do
End If
Loop Until EOF(InputFN)
Close #InputFN
End If
End Function

Public Function xNextSerial(xName As String, xProperty As String) As Long
Do: N = N + 1
tmp$ = xQuery(xName, xProperty + Trim$(Str$(N)))
Loop Until Trim$(tmp$) = ""
xNextSerial = N
End Function

