Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

155 lines
4.4 KiB

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