|
|
Attribute VB_Name = "CmdLineOptions" Option Explicit
' i_strCommand is the command line. ' i_strOptionList is a comma separated list of options that we are looking for, eg ' "h,?,help" will look for /h, /?, /help
Public Function OptionExists( _ ByVal i_strCommand As String, _ ByVal i_strOptionList, _ ByVal i_blnIgnoreCase As Boolean _ ) As Boolean
Dim arrCmdOptions() As String Dim arrOptions() As String Dim intCmdIndex As Long Dim intOptionIndex As Long Dim strOption As String Dim strCmdWord As String
arrCmdOptions = Split(i_strCommand) arrOptions = Split(i_strOptionList, ",")
For intOptionIndex = LBound(arrOptions) To UBound(arrOptions)
strOption = "/" & arrOptions(intOptionIndex)
If (i_blnIgnoreCase) Then strOption = LCase$(strOption) End If
For intCmdIndex = LBound(arrCmdOptions) To UBound(arrCmdOptions)
If (arrCmdOptions(intCmdIndex) <> "") Then
strCmdWord = arrCmdOptions(intCmdIndex)
If (i_blnIgnoreCase) Then strCmdWord = LCase$(strCmdWord) End If
If (strOption = strCmdWord) Then OptionExists = True Exit Function End If
End If
Next
Next
OptionExists = False
End Function
' i_strCommand is the command line. ' i_strOptionList is a comma separated list of options that we are looking for, eg ' "i,input" will look for /i or /input. When one is found, the next word from ' the command line is returned. Multiple words enclosed in double quotes are ' considered a single word. The quotes are stripped. ' Eg GetOption("/abc def /ghi ""Hello World""", "ghi", True) returns Hello World
Public Function GetOption( _ ByVal i_strCommand As String, _ ByVal i_strOptionList, _ ByVal i_blnIgnoreCase As Boolean _ ) As String
On Error GoTo LErrorHandler
Dim arrOptions() As String Dim intIndex As Long Dim strRemainingCmdLine As String Dim strCurrentChar As String Dim strCurrentWord As String Dim strTerminatingChar As String Dim strOption As String Dim intPos As Long Dim blnOptionFound As Boolean
strRemainingCmdLine = Trim$(i_strCommand)
arrOptions = Split(i_strOptionList, ",")
Do While (strRemainingCmdLine <> "")
strCurrentChar = Mid$(strRemainingCmdLine, 1, 1)
Select Case strCurrentChar Case """" strTerminatingChar = """" Case Else strTerminatingChar = " " End Select
' Where does this word end? Start is 2, because we don't want ' the search to stop at the current character.
intPos = InStr(2, strRemainingCmdLine, strTerminatingChar)
If intPos = 0 Then intPos = Len(strRemainingCmdLine) + 1 End If
If (strTerminatingChar = """") Then ' Eat the terminating double quotes too. intPos = intPos + 1 End If
strCurrentWord = Mid$(strRemainingCmdLine, 1, intPos - 1)
strRemainingCmdLine = Trim$(Mid$(strRemainingCmdLine, intPos))
If blnOptionFound Then If strCurrentChar = "/" Then ' strCurrentWord represents the next option. The desired option ' was not followed by any non-option word. GetOption = "" Else If (strTerminatingChar = """") Then ' Strip out the enclosing double quotes GetOption = Mid$(strCurrentWord, 2, Len(strCurrentWord) - 2) Else GetOption = strCurrentWord End If End If Exit Function End If
If (i_blnIgnoreCase) Then strCurrentWord = LCase$(strCurrentWord) End If
For intIndex = LBound(arrOptions) To UBound(arrOptions) strOption = "/" & arrOptions(intIndex) If (i_blnIgnoreCase) Then strOption = LCase$(strOption) End If If (strOption = strCurrentWord) Then blnOptionFound = True End If Next
Loop
Exit Function
LErrorHandler:
GetOption = ""
End Function
|