Blame


1 cfa37a7b 2004-04-10 devnull .TH ARG 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
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>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .PP
9 cfa37a7b 2004-04-10 devnull .nf
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
15 cfa37a7b 2004-04-10 devnull .PP
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
19 cfa37a7b 2004-04-10 devnull .I argc
20 cfa37a7b 2004-04-10 devnull and
21 cfa37a7b 2004-04-10 devnull .I argv
22 cfa37a7b 2004-04-10 devnull are in scope; see
23 d32deab1 2020-08-16 rsc .MR exec (3) .
24 cfa37a7b 2004-04-10 devnull .I ARGBEGIN
25 cfa37a7b 2004-04-10 devnull and
26 cfa37a7b 2004-04-10 devnull .I ARGEND
27 cfa37a7b 2004-04-10 devnull surround code for processing program options.
28 cfa37a7b 2004-04-10 devnull The code
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
33 cfa37a7b 2004-04-10 devnull .BR -- ,
34 cfa37a7b 2004-04-10 devnull before an argument
35 cfa37a7b 2004-04-10 devnull .BR - ,
36 cfa37a7b 2004-04-10 devnull or before an argument that doesn't begin with
37 cfa37a7b 2004-04-10 devnull .BR - .
38 cfa37a7b 2004-04-10 devnull .PP
39 cfa37a7b 2004-04-10 devnull The function macro
40 cfa37a7b 2004-04-10 devnull .I ARGC
41 cfa37a7b 2004-04-10 devnull returns the current option character, as an integer.
42 cfa37a7b 2004-04-10 devnull .PP
43 cfa37a7b 2004-04-10 devnull The function macro
44 cfa37a7b 2004-04-10 devnull .I ARGF
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
48 cfa37a7b 2004-04-10 devnull .I argv
49 cfa37a7b 2004-04-10 devnull if any, or 0.
50 cfa37a7b 2004-04-10 devnull .I ARGF
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
54 cfa37a7b 2004-04-10 devnull .I EARGF
55 cfa37a7b 2004-04-10 devnull is like
56 cfa37a7b 2004-04-10 devnull .I ARGF
57 cfa37a7b 2004-04-10 devnull but instead of returning zero
58 cfa37a7b 2004-04-10 devnull runs
59 cfa37a7b 2004-04-10 devnull .I code
60 cfa37a7b 2004-04-10 devnull and, if that returns, calls
61 d32deab1 2020-08-16 rsc .MR abort (3) .
62 cfa37a7b 2004-04-10 devnull A typical value for
63 cfa37a7b 2004-04-10 devnull .I code
64 cfa37a7b 2004-04-10 devnull is
65 cfa37a7b 2004-04-10 devnull .BR usage() ,
66 cfa37a7b 2004-04-10 devnull as in
67 cfa37a7b 2004-04-10 devnull .BR EARGF(usage()) .
68 cfa37a7b 2004-04-10 devnull .PP
69 cfa37a7b 2004-04-10 devnull After
70 cfa37a7b 2004-04-10 devnull .IR ARGBEGIN ,
71 cfa37a7b 2004-04-10 devnull .I argv0
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).
75 cfa37a7b 2004-04-10 devnull .PP
76 cfa37a7b 2004-04-10 devnull After
77 cfa37a7b 2004-04-10 devnull .IR ARGEND ,
78 cfa37a7b 2004-04-10 devnull .I argv
79 cfa37a7b 2004-04-10 devnull points at a zero-terminated list of the remaining
80 cfa37a7b 2004-04-10 devnull .I argc
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
84 cfa37a7b 2004-04-10 devnull .B b
85 cfa37a7b 2004-04-10 devnull and option
86 cfa37a7b 2004-04-10 devnull .BR f ,
87 cfa37a7b 2004-04-10 devnull which requires an argument.
88 cfa37a7b 2004-04-10 devnull .IP
89 cfa37a7b 2004-04-10 devnull .EX
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>
93 cfa37a7b 2004-04-10 devnull void
94 cfa37a7b 2004-04-10 devnull main(int argc, char *argv[])
95 cfa37a7b 2004-04-10 devnull {
96 cfa37a7b 2004-04-10 devnull char *f;
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");
101 cfa37a7b 2004-04-10 devnull break;
102 cfa37a7b 2004-04-10 devnull case 'f':
103 cfa37a7b 2004-04-10 devnull print(" -f(%s)", (f=ARGF())? f: "no arg");
104 cfa37a7b 2004-04-10 devnull break;
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);
113 cfa37a7b 2004-04-10 devnull }
114 cfa37a7b 2004-04-10 devnull .EE
115 cfa37a7b 2004-04-10 devnull .PP
116 cfa37a7b 2004-04-10 devnull Here is the output from running the command
117 cfa37a7b 2004-04-10 devnull .B
118 cfa37a7b 2004-04-10 devnull prog -bffile1 -r -f file2 arg1 arg2
119 cfa37a7b 2004-04-10 devnull .IP
120 cfa37a7b 2004-04-10 devnull .B
121 cfa37a7b 2004-04-10 devnull prog -b -f(file1) badflag('r') -f(file2) 2 args: 'arg1' 'arg2'
122 cfa37a7b 2004-04-10 devnull .PP
123 cfa37a7b 2004-04-10 devnull .SH SOURCE
124 c3674de4 2005-01-11 devnull .B \*9/include/libc.h