m4 - macro processor
m4 [options] [file ...]
m4 is a macro processor intended as a front end for Ratfor, C, and
other languages. Each of the argument files is processed in order; if
there are no files, or if a file name is -, standard input is read.
The processed text is written to standard output.
m4 recognizes the following options:
-e Operate interactively. Interrupts are ignored and the
output is unbuffered. Using this mode may be very
-s Enable line sync output for the C preprocessor (#line
-Bint Change the size of the push-back and argument
collection buffers from the default of 4,096.
-Hint Change the size of the symbol table hash array from the
default of 199. The size should be prime.
-Sint Change the size of the call stack from the default of
100 slots. Macros take three slots, and nonmacro
arguments take one.
-Tint Change the size of the token buffer from the default of
To be effective, the options listed above must appear before any
file names and before any -D or -U options.
Define name as val or as null if val is omitted.
-Uname Undefine name.
Macro calls have the form:
name(arg1, arg2, ... ,argn)
The left parenthesis (() must immediately follow the name of the
macro. If the name of a defined macro is not followed by a (, it is
deemed to be a call of that macro with no arguments. Potential macro
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
names consist of alphabetic letters, digits, and underscore (_); the
first character cannot be a digit.
Leading unquoted blanks, tabs, and newlines are ignored while
collecting arguments. Left and right single quotes (` and ') are used
to quote strings. The value of a quoted string is the string stripped
of the quotes.
When a macro name is recognized, its arguments are collected by
searching for a matching right parenthesis. If fewer arguments are
supplied than are in the macro definition, the trailing arguments are
taken to be null. Macro evaluation proceeds normally during the
collection of the arguments, and any commas or right parentheses which
happen to turn up within the value of a nested call are as effective
as those in the original input text. After argument collection, the
value of the macro is pushed back onto the input stream and rescanned.
Built-In Macro Names
m4 makes available the following built-in macros. They can be
redefined, but, once this is done, the original meaning is lost.
Their values are null unless otherwise stated.
changecom Change left and right comment markers from the
default # and newline. With no arguments, the
comment mechanism is effectively disabled. With one
argument, the left marker becomes the argument and
the right marker becomes newline. With two
arguments, both markers are affected. Comment
markers may be up to five characters long.
changequote Change quote symbols to the first and second
arguments. The symbols may be up to five characters
long. changequote without arguments restores the
original values (i.e., ` and ').
decr Returns the value of its argument decremented by 1.
define The second argument is installed as the value of the
macro whose name is the first argument. Each
occurrence of $n in the replacement text, where n is
a digit, is replaced by the nth argument. Argument
0 is the name of the macro; missing arguments are
replaced by the null string; $# is replaced by the
number of arguments; $* is replaced by a list of all
the arguments separated by commas; $@ is equivalent
to $*, but each argument is quoted (with the current
defn Returns the quoted definition of its arguments. It
is useful for renaming macros, especially built-ins.
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000
divert m4 maintains 10 output streams, numbered 0 to 9.
The final output is the concatenation of the streams
in numerical order; initially, stream 0 is the
current stream. The divert macro changes the
current output stream to its (digit-string)
argument. Output diverted to a stream other than 0
through 9 is discarded.
divnum Returns the value of the current output stream.
dnl Reads and discards characters up to and including
the next newline.
dumpdef Prints current names and definitions, for the named
items, or for all if no arguments are given.
errprint Prints its argument on the diagnostic output file.
eval Evaluates its argument as an arithmetic expression,
using 32-bit arithmetic. Operators include +, -, *,
/, %, ** (exponentiation), bitwise &&&&, |, ^, and ~,
relationals, and parentheses. Octal and hexadecimal
numbers may be specified as in C. The second
argument specifies the radix for the result; the
default is 10. The third argument may be used to
specify the minimum number of digits in the result.
hpux Is a predefined object with a null value.
ifdef If the first argument is defined, the value is the
second argument; otherwise the third. If there is
no third argument, the value is null. The word unix
is predefined on HP-UX system versions of m4.
ifelse Has three or more arguments. If the first argument
is the same string as the second, then the value is
the third argument. If not, and if there are more
than four arguments, the process is repeated with
arguments 4, 5, 6 and 7. Otherwise, the value is
either the fourth string, or, if it is not present,
include Returns the contents of the file named in the
incr Returns the value of its argument incremented by 1.
The value of the argument is calculated by
interpreting an initial digit-string as a decimal
Hewlett-Packard Company - 3 - HP-UX Release 11i: November 2000
index Returns the position in its first argument where the
second argument begins (zero origin), or -1 if the
second argument does not occur.
len Returns the number of characters in its argument.
m4exit Causes immediate exit from m4. Argument 1, if
given, is the exit code; the default is 0.
m4wrap Argument 1 is pushed back at final EOF; for example:
maketemp Fills in a string of XXXXX in its argument with the
current process ID.
popdef Removes current definition of its arguments,
exposing the previous one, if any.
pushdef Similar to define, but saves any previous
shift Returns all but its first argument. The other
arguments are quoted and pushed back with commas in
between. The quoting nullifies the effect of the
extra scan that will subsequently be performed.
sinclude Identical to include, except that it says nothing if
the file is inaccessible.
substr Returns a substring of its first argument. The
second argument is a zero-origin number selecting
the first character; the third argument indicates
the length of the substring. A missing third
argument is taken to be large enough to extend to
the end of the first string.
syscmd Executes the HP-UX system command given in the first
argument. No value is returned.
sysval Is the return code from the last call to syscmd.
traceoff Turns off trace globally and for any macros
specified. Macros specifically traced by traceon
can be untraced only by specific calls to traceoff.
traceon With no arguments, turns on tracing for all macros
(including built-ins). Otherwise, turns on tracing
for named macros.
translit Transliterates the characters in its first argument
from the set given by the second argument to the set
Hewlett-Packard Company - 4 - HP-UX Release 11i: November 2000
given by the third. No abbreviations are permitted.
undefine Removes the definition of the macro named in its
undivert Causes immediate output of text from diversions
named as arguments, or all diversions if no
argument. Text may be undiverted into another
diversion. Undiverting discards the diverted text.
(XPG4 only.) It is an error to specify an argument containing any
non-numeric character for the built-in-macros: decr, divert, incr,
m4exit, substr, undivert, and eval.
m4: SVID2, SVID3, XPG2, XPG3, XPG4
Hewlett-Packard Company - 5 - HP-UX Release 11i: November 2000