ARG(2) ARG(2) NAME ARG - process option letters from argv SYNOPSIS #include <libc.h> ARGBEGIN { } ARGEND char *ARGF(); char ARGC(); extern char *argv0; DESCRIPTION Command-line arguments to programs (see exec(2)) are conven- tionally arranged as a set of options - strings beginning with a - (minus sign) - followed by plain arguments such as file names. The ARG macros provide a convenient means for processing these options. Option characters appear in nonempty clusters preceded by -. After options processing is terminated (by an argument not starting with -, or by the argument -- which is then skipped, or by the argument -), execution resumes after the ARGEND. The body of a switch statement should be put between ARGBEGIN{ and }ARGEND; it is executed once for each option character (the character itself may be referenced by ARGC()). If an option takes a string argument (that is, the rest of the current option string or if that is empty, the next argument), it can be referenced by ARGF(). After ARGEND, argv points at a zero-terminated list of the remain- ing argc arguments. ARGBEGIN also sets up argv0 to point at argv[0] (convention- ally the name of the program). EXAMPLES This program processes arguments for a command that can take option b and option f, which requires an argument. #include <u.h> #include <libc.h> main(int argc, char *argv[]) { char *f; print("%s", argv[0]); ARGBEGIN{ case 'b': print(" -b"); break; case 'f': f = ARGF(); print(" -f(%s)", f?f:"no arg"); break; Page 1 Plan 9 (printed 11/18/24) ARG(2) ARG(2) default: print(" badflag('%c')", ARGC()); break; }ARGEND print(" %d args:", argc); while(*argv) print(" '%s'", *argv++); print("\n"); exits(0); } When this program is run as prog -bffile1 -r -f file2 arg1 argn it yields prog -b -f(file1) badflag('r') -f(file2) 2 args: 'arg1' 'argn' DIAGNOSTICS ARGF() returns 0 on error. Page 2 Plan 9 (printed 11/18/24)