Attribute VB_Name = "moduleFileControl"
Option Explicit
Public fhCurrentIndex As Long
Public fhLastIndex As Long

'The following is for the open file window
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

       Private Type OPENFILENAME
         lStructSize As Long
         hwndOwner As Long
         hInstance As Long
         lpstrFilter As String
         lpstrCustomFilter As String
         nMaxCustFilter As Long
         nFilterIndex As Long
         lpstrFile As String
         nMaxFile As Long
         lpstrFileTitle As String
         nMaxFileTitle As Long
         lpstrInitialDir As String
         lpstrTitle As String
         flags As Long
         nFileOffset As Integer
         nFileExtension As Integer
         lpstrDefExt As String
         lCustData As Long
         lpfnHook As Long
         lpTemplateName As String
       End Type
       
       Private Type INIFILEOBJECT
         SettingName As String
         SettingValue As String
         MajorSection As String
         LastObject As Boolean
       End Type
       
       Public IniSettings(0 To 255) As INIFILEOBJECT
       
       Public LoopVariable As Long
       
       Public fs As Variant


Public Function SelectFile(FileName As String, FileParameters As String, Title As String) As String

         Dim OpenFile As OPENFILENAME
         Dim lReturn As Long
         Dim sFilter As String
         OpenFile.lStructSize = Len(OpenFile)
         OpenFile.hwndOwner = frmSplash.hWnd
         OpenFile.hInstance = App.hInstance
         sFilter = FileParameters
         OpenFile.lpstrFilter = sFilter
         OpenFile.nFilterIndex = 1
         OpenFile.lpstrFile = String(257, 0)
         OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
         OpenFile.lpstrFileTitle = OpenFile.lpstrFile
         OpenFile.nMaxFileTitle = OpenFile.nMaxFile
         OpenFile.lpstrInitialDir = FileName
         OpenFile.lpstrTitle = Title
         OpenFile.flags = 0
         lReturn = GetOpenFileName(OpenFile)
         If lReturn = 0 Then
            SelectFile = ""
            Exit Function ' The User pressed the Cancel Button
         Else
            SelectFile = Trim(OpenFile.lpstrFile)
         End If
     
End Function

Public Function GetFileDirectory(FileName As String) As String

    fhCurrentIndex = 1
    fhLastIndex = 0
    
    While fhCurrentIndex <> 0
        fhLastIndex = fhCurrentIndex
    fhCurrentIndex = InStr(fhLastIndex + 1, FileLocation, "\", vbTextCompare)
        
    Wend
    GetFileDirectory = Left(FileName, fhLastIndex)
    
End Function

Public Function LoadIni(FileName As String) As Long '0=success, 1=file not found, 2=File Empty
    
    For LoopVariable = 0 To 255
        IniSettings(LoopVariable).MajorSection = ""
        IniSettings(LoopVariable).SettingName = ""
        IniSettings(LoopVariable).SettingValue = ""
        IniSettings(LoopVariable).LastObject = True
    Next LoopVariable
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    If fs.FileExists(FileName) = False Then
        LoadIni = 1
        Exit Function
    End If
    
    Dim FileLine As String
    Dim MajorSection As String
    Dim FirstCharacter As String
    Dim LeftSide As String
    Dim RightSide As String
    Dim SeperatorIndex As Integer
    
    MajorSection = "Uncategorized"
    LoopVariable = -1
    
    Open FileName For Input As #1
    
    While Not EOF(1)
        Line Input #1, FileLine
        FirstCharacter = Left(Trim(FileLine), 1)
        If (FirstCharacter <> "") Or (FirstCharacter <> ";") Then
            If FirstCharacter = "[" Then
                MajorSection = Trim(Mid(FileLine, 2, Len(FileLine) - 2))
                If MajorSection = "" Then MajorSection = "Uncategorized"
            Else
                SeperatorIndex = InStr(FileLine, "=")
                If SeperatorIndex > 1 Then
                    IniSettings(KeepNonNegative(LoopVariable)).LastObject = False
                    LoopVariable = LoopVariable + 1
                    IniSettings(LoopVariable).LastObject = True
                    IniSettings(LoopVariable).MajorSection = MajorSection
                    IniSettings(LoopVariable).SettingName = Trim(Left(FileLine, SeperatorIndex - 1))
                    IniSettings(LoopVariable).SettingValue = Trim(Right(FileLine, Len(FileLine) - SeperatorIndex))
                End If
            End If
        End If
    Wend
    
    Close #1
    If LoopVariable = -1 Then
        LoadIni = 2
        Exit Function
    End If
    
    Dim Min As Integer
    Dim InnerLoop As Integer
    Dim I As Integer
    Dim TempString As String
    
    For I = 0 To LoopVariable
        Min = I
        For InnerLoop = I + 1 To LoopVariable
            If StrComp(IniSettings(InnerLoop).MajorSection, IniSettings(Min).MajorSection, vbTextCompare) = -1 Then Min = InnerLoop
        Next InnerLoop
        
        TempString = IniSettings(Min).MajorSection
        IniSettings(Min).MajorSection = IniSettings(I).MajorSection
        IniSettings(I).MajorSection = TempString
        
        TempString = IniSettings(Min).SettingName
        IniSettings(Min).SettingName = IniSettings(I).SettingName
        IniSettings(I).SettingName = TempString
        
        TempString = IniSettings(Min).SettingValue
        IniSettings(Min).SettingValue = IniSettings(I).SettingValue
        IniSettings(I).SettingValue = TempString
        
    Next I
    
    LoadIni = 0
    
End Function

Public Function GetIniValue(Major As String, Key As String)

    LoopVariable = 0
    Dim Found As Boolean
    Found = False
    Major = UCase(Trim(Major))
    Key = UCase(Trim(Key))
    
    While (IniSettings(KeepNonNegative(LoopVariable - 1)).LastObject = False) And (Found = False)
        If UCase(IniSettings(LoopVariable).MajorSection) = Major Then
            Found = True
        End If
        LoopVariable = LoopVariable + 1
    Wend
    
    LoopVariable = LoopVariable - 1
    
    If Found = False Then
        GetIniValue = "Not Found"
        Exit Function
    End If
    
    While UCase(IniSettings(LoopVariable).MajorSection) = Major
        If UCase(IniSettings(LoopVariable).SettingName) = Key Then
            GetIniValue = IniSettings(LoopVariable).SettingValue
            Exit Function
        End If
        LoopVariable = LoopVariable + 1
        
    Wend
    
    GetIniValue = "Not Found"
    
End Function


Public Function KeepNonNegative(EvalNumber As Long) As Long
    If EvalNumber < 0 Then
        KeepNonNegative = 0
    Else
        KeepNonNegative = EvalNumber
    End If
End Function
