Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

m4(9) [minix man page]

M4  is a macro processor intended as a front end for Ratfor, Pas-
cal, and other languages that do not have a built-in  macro  pro-
cessing  capability.  M4 reads standard input, the processed text
is written on the standard output.  The options and their effects
are as follows:

     -D  name[=val]Defines  name  to val, or to null in val's ab-
     sence.
     -U name	 Undefines name.

Macro calls have the form: name(arg1,arg2, ..., argn)

The ( must immediately follow the name of the macro.  If the name
of  a  defined	macro  is not followed by a ( it is taken to be a
call of that macro with no  arguments,	i.e.  name().	Potential
macro  names  consist  of alphabetic letters and digits.  Leading
unquoted blanks, tabs and newlines are ignored	while  collecting
arguments.   Left  and	right  single  quotes  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 ).  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 paren-
theses which happen to turn up within the value of a nested  call
are  as  effective as those in the original input text.  (This is
typically referred as  inside-out macro expansion.)  After  argu-
ment  collection,  the value of the macro is pushed back onto the
input stream and rescanned.  M4  makes	available  the	following
built-in  macros.   They  may be redefined, but once this is done
the original meaning is lost.  Their values are null unless  oth-
erwise	stated.   define  "(name [, val])" the second argument is
installed as the value of the macro whose name is the first argu-
ment.	If  there is no second argument, the value is null.  Each
occurrence of $ n in the replacement text, where n is a digit, is
replaced  by  the  n -th argument.  Argument 0 is the name of the
macro; missing arguments are replaced by the null  string.   defn
"(name	[, name ...])" returns the quoted definition of its argu-
ment(s). Useful in renaming  macros.   undefine  ";(name  [,  name
...])"	removes the definition of the macro(s) named. If there is
more than one definition for the named macro,  (due  to  previous
use  of  pushdef) all definitions are removed.	pushdef "(name [,
val])" like define, but saves any previous definition by stacking
the  current  definition.   popdef  ";(name [, name ...])" removes
current definition of its argument(s), exposing the previous  one
if  any.  ifdef ";(name, if-def [, ifnot-def])" if the first argu-
ment is defined, the value is the second argument, otherwise  the
third.	If there is no third argument, the value is null.  A word
indicating the current operating  system  is  predefined.   (e.g.
unix  or  vms).  shift ";(arg, arg, arg, ...)" 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.   changequote
"(lqchar,  rqchar)"  change quote symbols to the first and second
arguments.  With no arguments, the quotes are reset back  to  the
default  characters.  (i.e.,  `').   changecom "(lcchar, rcchar)"
change left and right comment markers from the default # and new-
line.	With no arguments, the comment mechanism is reset back to
the default characters.  With one argument, the left  marker  be-
comes  the  argument  and the right marker becomes newline.  With
two arguments, both  markers  are  affected.   divert  ";(divnum)"
maintains 10 output streams, numbered 0-9.  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 lost.	undivert "([divnum [, di-
vnum  ...]])"  causes  immediate  output  of text from diversions
named as argument(s), or all diversions if no argument.  Text may
be  undiverted	into another diversion.  Undiverting discards the
diverted text.	At the end of input processing, M4 forces an  au-
tomatic undivert unless is defined.  divnum ";()" returns the val-
ue of the current output stream.  dnl  ";()"  reads  and  discards
characters  up	to and including the next newline.  ifelse "(arg,
arg, if-same [, ifnot-same | arg, arg ...])" has  three  or  more
arguments.   If the first argument is the same string as the sec-
ond, then the value is the third argument.  If not, and if  there
are  more than four arguments, the process is repeated with argu-
ments 4, 5, 6 and 7.  Otherwise, the value is either  the  fourth
string, or, if it is not present, null.  incr ";(num)" returns the
value of its argument incremented by 1.  The value of  the  argu-
ment  is  calculated by interpreting an initial digit-string as a
decimal number.  decr ";(num)" returns the value of  its  argument
decremented  by 1.  eval ";(expression)" evaluates its argument as
a constant expression, using integer arithmetic.  The  evaluation
mechanism  is  very similar to that of cpp (#if expression).  The
expression can involve only integer constants and character  con-
stants, possibly connected by the binary operators
     *	   /	 %     +    -	 >>   <<    <	 >   <=   >=   ==
     !=   &    ^    |	  &&   ||
or the unary operators - ! or tilde or by the ternary operator	?
:  .   Parentheses may be used for grouping. Octal numbers may be
specified as in C.  len ";(string)" returns the number of  charac-
ters  in  its  argument.  index ";(search-string, string)" returns
the position in its first argument where the second argument  be-
gins  (zero  origin), or 1 if the second argument does not occur.
substr ";(string, index [, length])" returns a  substring  of  its
first  argument.  The second argument is a zero origin number se-
lecting the first character (internally  treated  as  an  expres-
sion);	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.	translit  "(source, from [, to])"
transliterates the characters in its first argument from the  set
given  by  the second argument to the set given by the third.  If
the third argument is shorter than the second, all extra  charac-
ters  in the second argument are deleted from the first argument.
If the third argument is missing altogether,  all  characters  in
the second argument are deleted from the first argument.  include
"(filename)" returns the contents of the file that  is	named  in
the  argument.	sinclude "(filename)"is identical to include, ex-
cept that it says nothing if the  file	is  inaccessable.   paste
"(filename)"  returns the contents of the file named in the argu-
ment without any processing, unlike include.  spaste ";(filename)"
is identical to paste, except that it says nothing if the file is
inaccessibl[De.  syscmd "(command)" executes the command given in
the  first  argument.	No value is returned.  sysval "()" is the
return code from the last call to syscmd.
 .PP maketemp (string)" fills in a string of XXXXXX in its  argu-
ment  with  the current process ID.  m4exit ";([exitcode])" causes
immediate exit from M4.  Argument 1, if given, is the exit  code;
the default is 0.  m4wrap ";(m4-macro-or-built-n)" argument 1 will
be pushed back at final EOF; example: m4wrap(`dumptable()').  er-
rprint	"(str  [,  str,  str,  ...])"  prints  its argument(s) on
stderr. If there is more than one argument, each argument is sep-
arated	by a space during the output.  An arbitrary number of ar-
guments may be supplied.  dumpdef ";([name,  name,  ...])"  prints
current names and definitions, for the named items, or for all if
no arguments are given.  M4 was written by Ozan S. Yigif.
Man Page