arg.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 <u.h> 6 .br 7 .B #include <libc.h> 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 <u.h> 92 #include <libc.h> 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