While writing a command line utility, I had need for advanced functions
to parse the command line for me. Preferably clones of C's ArgC and
ArgV functions. So I wrote them:
'============================================================================
' ArgC - Return the number of command line arguments passed.
'
FUNCTION ArgC() PUBLIC
Cmd$ = LTRIM$(RTRIM$(COMMAND$))
CmdPos = 1
CmdLen = LEN(Cmd$)
ArgCount = 0
WHILE CmdPos <= CmdLen
DO
X$ = MID$(Cmd$, CmdPos, 1)
IF X$ = " " THEN
DO WHILE CmdPos < CmdLen
INCR CmdPos
X$ = MID$(Cmd$, CmdPos, 1)
LOOP WHILE X$ = " "
EXIT DO
END IF
IF X$ = CHR$(34) THEN 'beginning quote?
DO WHILE CmdPos < CmdLen 'find matching quote
INCR CmdPos
X$ = MID$(Cmd$, CmdPos, 1)
LOOP UNTIL X$ = CHR$(34)
END IF
INCR CmdPos
LOOP UNTIL (X$ = " ") OR (X$ = "/") OR (CmdPos > CmdLen)
INCR ArgCount
WEND
ArgC = ArgCount
END FUNCTION
'============================================================================
' ArgV - Return the specified command line argument passed.
'
' Which = Number of argument to return.
'
FUNCTION ArgV$(BYVAL Which) PUBLIC
IF Which > ArgC THEN 'exit if invalid argument
EXIT FUNCTION
END IF
Cmd$ = LTRIM$(RTRIM$(COMMAND$))
CmdPos = 1
CmdLen = LEN(Cmd$)
ArgCount = 0
Arg$ = ""
WHILE CmdPos <= CmdLen
INCR ArgCount
DO
X$ = MID$(Cmd$, CmdPos, 1)
IF X$ = " " THEN
DO WHILE CmdPos < CmdLen
INCR CmdPos
X$ = MID$(Cmd$, CmdPos, 1)
LOOP WHILE X$ = " "
EXIT DO
END IF
IF ArgCount = Which THEN
Arg$ = Arg$ + X$
END IF
IF X$ = CHR$(34) THEN 'beginning quote?
DO WHILE CmdPos < CmdLen 'find matching quote
INCR CmdPos
X$ = MID$(Cmd$, CmdPos, 1)
IF ArgCount = Which THEN
Arg$ = Arg$ + X$
END IF
LOOP UNTIL X$ = CHR$(34)
END IF
INCR CmdPos
LOOP UNTIL (X$ = " ") OR (X$ = "/") OR (CmdPos > CmdLen)
WEND
ArgV$ = Arg$
END FUNCTION
Enjoy!
--Dave
---
þ QMPro 1.53 þ Tried to play my shoehorn... all I got was footnotes!
--- QScan v1.065b
---------------
* Origin: Nitelog BBS Monterey CA (408) 655-1096 (1:216/303) (1:216/303)
|