3 cfa37a7b 2004-04-10 devnull ARGBEGIN, ARGEND, ARGC, ARGF, EARGF, arginit, argopt \- process option letters from argv
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
10 cfa37a7b 2004-04-10 devnull .B ARGBEGIN {
11 cfa37a7b 2004-04-10 devnull .B char *ARGF();
12 cfa37a7b 2004-04-10 devnull .B char *EARGF(code);
13 cfa37a7b 2004-04-10 devnull .B Rune ARGC();
14 cfa37a7b 2004-04-10 devnull .B } ARGEND
16 cfa37a7b 2004-04-10 devnull .B extern char *argv0;
17 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
18 cfa37a7b 2004-04-10 devnull These macros assume the names
22 cfa37a7b 2004-04-10 devnull are in scope; see
23 bf8a59fa 2004-04-11 devnull .IR exec (3).
24 cfa37a7b 2004-04-10 devnull .I ARGBEGIN
26 cfa37a7b 2004-04-10 devnull .I ARGEND
27 cfa37a7b 2004-04-10 devnull surround code for processing program options.
29 cfa37a7b 2004-04-10 devnull should be the cases of a C switch on
30 cfa37a7b 2004-04-10 devnull option characters;
31 cfa37a7b 2004-04-10 devnull it is executed once for each option character.
32 cfa37a7b 2004-04-10 devnull Options end after an argument
34 cfa37a7b 2004-04-10 devnull before an argument
36 cfa37a7b 2004-04-10 devnull or before an argument that doesn't begin with
39 cfa37a7b 2004-04-10 devnull The function macro
41 cfa37a7b 2004-04-10 devnull returns the current option character, as an integer.
43 cfa37a7b 2004-04-10 devnull The function macro
45 cfa37a7b 2004-04-10 devnull returns the current option argument:
46 cfa37a7b 2004-04-10 devnull a pointer to the rest of the option string if not empty,
47 cfa37a7b 2004-04-10 devnull or the next argument in
49 cfa37a7b 2004-04-10 devnull if any, or 0.
51 cfa37a7b 2004-04-10 devnull must be called just once for each option
52 cfa37a7b 2004-04-10 devnull that takes an argument.
53 cfa37a7b 2004-04-10 devnull The macro
57 cfa37a7b 2004-04-10 devnull but instead of returning zero
60 cfa37a7b 2004-04-10 devnull and, if that returns, calls
61 bf8a59fa 2004-04-11 devnull .IR abort (3).
62 cfa37a7b 2004-04-10 devnull A typical value for
65 cfa37a7b 2004-04-10 devnull .BR usage() ,
67 cfa37a7b 2004-04-10 devnull .BR EARGF(usage()) .
70 cfa37a7b 2004-04-10 devnull .IR ARGBEGIN ,
72 cfa37a7b 2004-04-10 devnull is a copy of
73 cfa37a7b 2004-04-10 devnull .BR argv[0]
74 cfa37a7b 2004-04-10 devnull (conventionally the name of the program).
77 cfa37a7b 2004-04-10 devnull .IR ARGEND ,
79 cfa37a7b 2004-04-10 devnull points at a zero-terminated list of the remaining
81 cfa37a7b 2004-04-10 devnull arguments.
82 cfa37a7b 2004-04-10 devnull .SH EXAMPLE
83 cfa37a7b 2004-04-10 devnull This C program can take option
85 cfa37a7b 2004-04-10 devnull and option
87 cfa37a7b 2004-04-10 devnull which requires an argument.
90 cfa37a7b 2004-04-10 devnull .ta \w'12345678'u +\w'12345678'u +\w'12345678'u +\w'12345678'u +\w'12345678'u
91 cfa37a7b 2004-04-10 devnull #include <u.h>
92 cfa37a7b 2004-04-10 devnull #include <libc.h>
94 cfa37a7b 2004-04-10 devnull main(int argc, char *argv[])
97 cfa37a7b 2004-04-10 devnull print("%s", argv[0]);
98 cfa37a7b 2004-04-10 devnull ARGBEGIN {
99 cfa37a7b 2004-04-10 devnull case 'b':
100 cfa37a7b 2004-04-10 devnull print(" -b");
102 cfa37a7b 2004-04-10 devnull case 'f':
103 cfa37a7b 2004-04-10 devnull print(" -f(%s)", (f=ARGF())? f: "no arg");
105 cfa37a7b 2004-04-10 devnull default:
106 cfa37a7b 2004-04-10 devnull print(" badflag('%c')", ARGC());
107 cfa37a7b 2004-04-10 devnull } ARGEND
108 cfa37a7b 2004-04-10 devnull print(" %d args:", argc);
109 cfa37a7b 2004-04-10 devnull while(*argv)
110 cfa37a7b 2004-04-10 devnull print(" '%s'", *argv++);
111 cfa37a7b 2004-04-10 devnull print("\en");
112 cfa37a7b 2004-04-10 devnull exits(nil);
116 cfa37a7b 2004-04-10 devnull Here is the output from running the command
118 cfa37a7b 2004-04-10 devnull prog -bffile1 -r -f file2 arg1 arg2
121 cfa37a7b 2004-04-10 devnull prog -b -f(file1) badflag('r') -f(file2) 2 args: 'arg1' 'arg2'
123 cfa37a7b 2004-04-10 devnull .SH SOURCE
124 c3674de4 2005-01-11 devnull .B \*9/include/libc.h