targ.3 - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
targ.3 (2155B)
---
     1 .TH ARG 3
     2 .SH NAME
     3 ARGBEGIN, ARGEND, ARGC, ARGF, EARGF, arginit, argopt \- process option letters from argv
     4 .SH SYNOPSIS
     5 .B #include 
     6 .br
     7 .B #include 
     8 .PP
     9 .nf
    10 .B ARGBEGIN {
    11 .B char *ARGF();
    12 .B char *EARGF(code);
    13 .B Rune ARGC();
    14 .B } ARGEND
    15 .PP
    16 .B extern char *argv0;
    17 .SH DESCRIPTION
    18 These macros assume the names
    19 .I argc
    20 and
    21 .I argv
    22 are in scope; see
    23 .MR exec (3) .
    24 .I ARGBEGIN
    25 and
    26 .I ARGEND
    27 surround code for processing program options.
    28 The code
    29 should be the cases of a C switch on
    30 option characters;
    31 it is executed once for each option character.
    32 Options end after an argument 
    33 .BR -- ,
    34 before an argument
    35 .BR - ,
    36 or before an argument that doesn't begin with
    37 .BR - .
    38 .PP
    39 The function macro
    40 .I ARGC
    41 returns the current option character, as an integer.
    42 .PP
    43 The function macro
    44 .I ARGF
    45 returns the current option argument:
    46 a pointer to the rest of the option string if not empty,
    47 or the next argument in
    48 .I argv
    49 if any, or 0.
    50 .I ARGF
    51 must be called just once for each option
    52 that takes an argument.
    53 The macro
    54 .I EARGF
    55 is like
    56 .I ARGF
    57 but instead of returning zero
    58 runs
    59 .I code
    60 and, if that returns, calls
    61 .MR abort (3) .
    62 A typical value for
    63 .I code
    64 is 
    65 .BR usage() ,
    66 as in
    67 .BR EARGF(usage()) .
    68 .PP
    69 After
    70 .IR ARGBEGIN ,
    71 .I argv0
    72 is a copy of
    73 .BR argv[0]
    74 (conventionally the name of the program).
    75 .PP
    76 After
    77 .IR ARGEND ,
    78 .I argv
    79 points at a zero-terminated list of the remaining
    80 .I argc
    81 arguments.
    82 .SH EXAMPLE
    83 This C program can take option
    84 .B b
    85 and option
    86 .BR f ,
    87 which requires an argument.
    88 .IP
    89 .EX
    90 .ta \w'12345678'u +\w'12345678'u +\w'12345678'u +\w'12345678'u +\w'12345678'u
    91 #include 
    92 #include 
    93 void
    94 main(int argc, char *argv[])
    95 {
    96         char *f;
    97         print("%s", argv[0]);
    98         ARGBEGIN {
    99         case 'b':
   100                 print(" -b");
   101                 break;
   102         case 'f':
   103                 print(" -f(%s)", (f=ARGF())? f: "no arg");
   104                 break;
   105         default:
   106                 print(" badflag('%c')", ARGC());
   107         } ARGEND
   108         print(" %d args:", argc);
   109         while(*argv)
   110                 print(" '%s'", *argv++);
   111         print("\en");
   112         exits(nil);
   113 }
   114 .EE
   115 .PP
   116 Here is the output from running the command
   117 .B
   118 prog -bffile1 -r -f file2 arg1 arg2
   119 .IP
   120 .B
   121 prog -b -f(file1) badflag('r') -f(file2) 2 args: 'arg1' 'arg2'
   122 .PP
   123 .SH SOURCE
   124 .B \*9/include/libc.h