TIP: Click on subject to list as thread! ANSI
echo: power_bas
to: ALL
from: DAVE NAVARRO
date: 1995-04-13 16:26:00
subject: Command Line Arguments

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)

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.