glenda.party
term% ls -F
term% pwd
$home/manuals/9front/2/arg
term% cat index.txt
ARG(2)                        System Calls Manual                       ARG(2)

NAME
       ARGBEGIN, ARGEND, ARGC, ARGF, EARGF - process option letters from argv

SYNOPSIS
       #include <u.h>
       #include <libc.h>

       ARGBEGIN {
       char *ARGF();
       char *EARGF(code);
       Rune ARGC();
       } ARGEND

       extern char *argv0;

DESCRIPTION
       These  macros assume the names argc and argv are in scope; see exec(2).
       ARGBEGIN and ARGEND surround code for processing program options.   The
       code should be the cases of a C switch on option characters; it is exe‐
       cuted  once  for  each option character.  Options end after an argument
       --, before an argument -, or before an argument that doesn't begin with
       -.

       The function macro ARGC returns the current option character, as an in‐
       teger.

       The function macro ARGF returns the current option argument: a  pointer
       to  the rest of the option string if not empty, or the next argument in
       argv if any, or 0.  ARGF must be called just once for each option argu‐
       ment.  The macro EARGF is like ARGF but instead of returning zero  runs
       code and, if that returns, calls abort(2).  A typical value for code is
       usage(), as in EARGF(usage()).

       After  ARGBEGIN, argv0 is a copy of argv[0] (conventionally the name of
       the program).

       After ARGEND, argv points at a zero-terminated list  of  the  remaining
       argc arguments.

EXAMPLE
       This  C program can take option b and option f, which requires an argu‐
       ment.

              #include <u.h>
              #include <libc.h>
              void
              main(int argc, char *argv[])
              {
                      char *f;
                      print("%s", argv[0]);
                      ARGBEGIN {
                      case 'b':
                              print(" -b");
                              break;
                      case 'f':
                              print(" -f(%s)", (f=ARGF())? f: "no arg");
                              break;
                      default:
                              print(" badflag('%c')", ARGC());
                      } ARGEND
                      print(" %d args:", argc);
                      while(*argv)
                              print(" '%s'", *argv++);
                      print("\n");
                      exits(nil);
              }

       Here is the output from running the command prog -bffile1 -r  -f  file2
       arg1 arg2

              prog -b -f(file1) badflag('r') -f(file2) 2 args: 'arg1' 'arg2'

SOURCE
       /sys/include/libc.h

SEE ALSO
       getflags(8)

                                                                        ARG(2)