|
|
1.1 root 1: .TH M4 1
2: .CT 1 prog_c
3: .SH NAME
4: m4 \(mi macro processor
5: .SH SYNOPSIS
6: .B m4
7: [
8: .I option ...
9: ]
10: [
11: .I file ...
12: ]
13: .SH DESCRIPTION
14: .I M4\^
15: is a macro processor
16: intended as a front end for C and other languages.
17: Each of the argument files is processed in order;
18: if there are no files, or if a file name is
19: .BR - ,
20: the standard input is read.
21: The processed text is written on the standard output.
22: .PP
23: The options and their effects are as follows:
24: .TP
25: .B -e
26: Operate interactively.
27: Interrupts are ignored and the output is unbuffered.
28: Using this mode requires a special state of mind.
29: .TP
30: .B -s
31: Enable line sync output for the C preprocessor,
32: .RB ( #line " .\|.\|.\|)"
33: .TP
34: .BI -B int\^
35: Change the size of the push-back and argument collection
36: buffers from the default of 4,096.
37: .TP
38: .BI -H int\^
39: Change the size of the symbol table hash array from the
40: default of 199.
41: The size should be prime.
42: .TP
43: .BI -S int\^
44: Change the size of the call stack from the default of 100 slots.
45: Macros take three slots, and non-macro arguments take one.
46: .TP
47: .BI -T int\^
48: Change the size of the token buffer from the default of 512 bytes.
49: .PP
50: The preceding options must appear before any
51: file names or
52: .B -D
53: or
54: .B -U
55: options.
56: .TP
57: \f5-D\fP\f2name\^\fP[\f5=\fP\f2val\^\fP]
58: Defines
59: .I name\^
60: to
61: .I val\^
62: or to null if
63: .I val
64: is missing.
65: .TP
66: .BI -U name\^
67: undefines
68: .IR name .
69: .PP
70: Macro calls
71: have the form:
72: .IP
73: .L name(arg1,arg2, .\|.\|., argn)
74: .PP
75: The
76: .B (
77: must immediately follow the name of the macro.
78: If a defined macro name is not followed by a
79: .BR ( ,
80: it is deemed to have no arguments.
81: Leading unquoted blanks, tabs, and new-lines are ignored while collecting arguments.
82: Potential macro names consist of alphabetic letters,
83: digits, and underscore
84: .BR _ ,
85: where the first character is not a digit.
86: .PP
87: Left and right single quotes are used to quote strings.
88: The value of a quoted string is the string stripped of the quotes.
89: .PP
90: When a macro name is recognized,
91: its arguments are collected by searching for a matching right
92: parenthesis.
93: Macro evaluation proceeds normally during the collection of the arguments,
94: and any commas or right parentheses
95: which happen to turn up within the value of a nested
96: call are as effective as those in the original input text.
97: After argument collection,
98: the value of the macro is pushed back onto the input stream
99: and rescanned.
100: .PP
101: The value of a macro is obtained by replacing
102: each occurrence of
103: .BI $ n\^
104: in the replacement text,
105: where
106: .I n\^
107: is a digit,
108: with the
109: .IR n -th
110: argument.
111: Argument 0 is the name of the macro;
112: missing arguments are replaced by the null string;
113: .B $#
114: is replaced by the number of arguments;
115: .B $*
116: is replaced by a list of all the arguments separated by commas;
117: .B $@
118: is like
119: .BR $* ,
120: but each argument is quoted (with the current quotes).
121: .PP
122: .I M4\^
123: makes available the following built-in macros.
124: They may be redefined, but once this is done the original meaning is lost.
125: Their values are null unless otherwise stated.
126: .TP 12
127: .B define
128: the second argument is installed as the replacement text of the macro
129: whose name is the first argument.
130: .TP
131: .B undefine
132: Remove the definition of the macro named in the argument.
133: .TP
134: .B defn
135: Return the quoted definition of the argument(s);
136: useful for renaming macros, especially built-ins.
137: .TP
138: .B pushdef
139: Like
140: .IR define ,
141: but save any previous definition.
142: .TP
143: .B popdef
144: Remove current definition of the argument(s),
145: exposing the previous one if any.
146: .TP
147: .B ifdef
148: If the first argument is defined, the value is the second argument, otherwise the third.
149: If there is no third argument, the value is null.
150: The word
151: .L unix\^
152: is predefined on
153: .SM UNIX
154: versions of
155: .IR m4 .
156: .TP
157: .B shift
158: Return all but the first argument.
159: The other arguments pushed back with
160: commas in between and quoted to
161: nullify the effect of the extra scan.
162: .TP
163: .B changequote
164: Change quote symbols to the first and second arguments.
165: The symbols may be up to five characters long.
166: .B Changequote\^
167: without arguments restores the original values
168: (i.e.,
169: .LR `\|' ).
170: .TP
171: .B changecom
172: Change left and right comment markers from the default
173: .B #
174: and new-line.
175: With no arguments, the comment mechanism is effectively
176: disabled.
177: With one argument, the left marker becomes the argument and
178: the right marker becomes new-line.
179: With two arguments, both markers are affected.
180: Comment markers may be up to five characters long.
181: .TP
182: .B divert
183: .I m4\^
184: Switch output to one of 10 streams,
185: numbered 0-9 designated by the argument.
186: The final output is the concatenation of the streams
187: in numerical order;
188: stream 0 is the current initially.
189: Output to a stream other than 0 through 9
190: is discarded.
191: .TP
192: .B undivert
193: Cause immediate output of text from diversions named as
194: arguments, or all diversions if no argument.
195: Text may be undiverted into another diversion.
196: Once undiverted, the diverted text is no longer contained in that diversion.
197: .TP
198: .B divnum
199: Return the name of the current output stream.
200: .TP
201: .B dnl
202: reads and discards characters up to and including the next new-line.
203: .TP
204: .B ifelse
205: If the first argument is the same string as the second,
206: then the value is the third argument.
207: If not, and if there are more than four arguments, the process is repeated with arguments 4, 5, 6 and 7.
208: Otherwise, the value is either the fourth string, or, if that is not present,
209: null.
210: .TP
211: .B incr
212: Return the value of the argument incremented by 1.
213: The value of the argument is calculated
214: by interpreting an initial digit-string as a decimal number.
215: .TP
216: .B decr
217: Return the value of the argument decremented by 1.
218: .TP
219: .B eval
220: Evaluate the argument as an arithmetic expression, using 32-bit arithmetic.
221: C-like operators include
222: .BR +-*/% ,
223: bitwise
224: .BR &|^~ ;
225: relationals; parentheses.
226: Octal and hex numbers may be specified as in C.
227: The second argument specifies the radix for the result;
228: the default is 10.
229: The third argument may be used to specify the minimum number
230: of digits in the result.
231: .TP
232: .B len
233: Returns the number of characters in the argument.
234: .TP
235: .B index
236: Return the position in the first argument where the second argument begins (zero origin),
237: or \-1 if the second argument does not occur.
238: .TP
239: .B substr
240: Return a substring of the first argument.
241: The second argument is a zero origin
242: number selecting the first character;
243: the third argument indicates the length of the substring.
244: A missing third argument is taken to be large enough to extend to
245: the end of the first string.
246: .TP
247: .B translit
248: Transliterate the characters in the first argument
249: from the set given by the second argument to the set given by the third,
250: deleting characters that lack a correspondent in the third set.
251: There is no character-range notation.
252: .TP
253: .B include
254: Return the contents of the file named in the argument.
255: .TP
256: .B sinclude
257: Same, but give no diagnostic if the file is inaccessible.
258: .TP
259: .B syscmd
260: Execute the
261: .SM UNIX
262: command given in the first argument.
263: No value is returned.
264: .TP
265: .B sysval
266: The return code from the last call to
267: .IR syscmd .
268: .TP
269: .B maketemp
270: Rill in a string of
271: .LR X
272: characters in the argument with the current process id.
273: .TP
274: .B m4exit
275: Exit immediately from
276: .IR m4 .
277: Argument 1, if given, is the exit code;
278: the default is 0.
279: .TP
280: .B m4wrap
281: Push the argument back at the end of the input.
282: Example:
283: .L m4wrap(`cleanup()')
284: .TP
285: .B errprint
286: Prints the argument
287: on the standard error file.
288: .TP
289: .B dumpdef
290: Print current names and definitions,
291: for the named items, or for all if no arguments are given.
292: .TP
293: .B traceon
294: If there are no arguments, turn on tracing for all macros
295: (including built-ins).
296: Otherwise, turn on tracing for named macros.
297: .TP
298: .B traceoff
299: Turn off trace globally and for any macros specified.
300: Macros specifically traced by
301: .B traceon\^
302: can be untraced only by specific calls to
303: .BR traceoff .
304: .SH EXAMPLES
305: .EX
306: define(fib,`ifelse(define(`n',eval($1))n,0,1,n,1,1,dnl()
307: `eval(fib(n-1)+fib($1-2))')')dnl()
308: fib(2*3)
309: .EE
310: .ns
311: .IP
312: Recursively evaluate a Fibonacci number.
313: The inner
314: .B define
315: avoids some reevaluations.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.