Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ m4(1) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(1)

cc(1)



m4(1)                    USER COMMANDS                      m4(1)



NAME
     m4 - macro processor

SYNOPSIS
     m4 [options] [files]

DESCRIPTION
     The m4 command is a macro processor intended as a front  end
     for C, assembler, and other languages.  Each of the argument
     files is processed in order; if there are no files, or if  a
     file  name  is -, the standard input is read.  The processed
     text is written on the standard output.

     The options and their effects are as follows:

     -e      Operate interactively.  Interrupts are  ignored  and
             the output is unbuffered.

     -s      Enable line  sync  output  for  the  C  preprocessor
             (#line ...)

     -Bint   Change the size of the push-back and  argument  col-
             lection 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 non-
             macro arguments take one.

     -Tint   Change the size of the token buffer from the default
             of 512 bytes.

     To be effective, the above flags must appear before any file
     names and before any -D or -U flags:

     -Dname[=val]
          Defines name to val or to null in val's absence.

     -Uname
          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 deemed
     to be a call of that macro  with  no  arguments.   Potential
     macro  names  consist  of alphanumeric characters and under-
     score (), where the first character is not a digit.



                                                                1





m4(1)                    USER COMMANDS                      m4(1)



     Leading unquoted blanks, tabs,  and  new-lines  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 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 that 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.

     m4 makes available the  following  built-in  macros.   These
     macros  may be redefined, but once this is done the original
     meaning is lost.  Their values  are  null  unless  otherwise
     stated.

     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 n-th
                  argument.  Argument 0 is the name of the macro;
                  missing  arguments  are  replaced  by  the null
                  string; $# is replaced by the number  of  argu-
                  ments;  $*  is  replaced  by  a list of all the
                  arguments separated by commas; $@ is  like  $*,
                  but  each  argument is quoted (with the current
                  quotes).

     undefine     removes the definition of the  macro  named  in
                  its argument.

     defn         returns   the   quoted   definition   of    its
                  argument(s).  It is useful for renaming macros,
                  especially built-ins.

     pushdef      like define, but saves any previous definition.

     popdef       removes current definition of its  argument(s),
                  exposing the previous one, if any.

     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.

     shift        returns all but its first argument.  The  other
                  arguments  are  quoted  and  pushed  back  with



                                                                2





m4(1)                    USER COMMANDS                      m4(1)



                  commas in between.  The quoting  nullifies  the
                  effect of the extra scan that will subsequently
                  be performed.

     changequote  change quote symbols to the  first  and  second
                  arguments.  The symbols may be up to five char-
                  acters  long.   changequote  without  arguments
                  restores the original values (i.e., `').

     changecom    change left and right comment markers from  the
                  default # and new-line.  With no arguments, the
                  comment  mechanism  is  effectively   disabled.
                  With  one argument, the left marker becomes the
                  argument and the right marker becomes new-line.
                  With  two arguments, both markers are affected.
                  Comment markers may be up  to  five  characters
                  long.

     divert       m4 maintains 10 output streams,  numbered  0-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.

     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.

     divnum       returns the value of the current output stream.

     dnl          reads and discards characters up to and includ-
                  ing the next new-line.

     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 pro-
                  cess is repeated with arguments 4, 5, 6 and  7.
                  Otherwise,  the  value  is  either  the  fourth
                  string, or, if it is not present, null.

     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 number.

     decr         returns the value of its  argument  decremented
                  by 1.



                                                                3





m4(1)                    USER COMMANDS                      m4(1)



     eval         evaluates its argument as an arithmetic expres-
                  sion,   using   32-bit  arithmetic.   Operators
                  include +, -, *,  /,  %,  **  (exponentiation),
                  bitwise   &,   |,   ^,   and   ~;  relationals;
                  parentheses.  Octal  and  hex  numbers  may  be
                  specified  as in C.  The second argument speci-
                  fies 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.

     len          returns the number of characters in  its  argu-
                  ment.

     index        returns the  position  in  its  first  argument
                  where the second argument begins (zero origin),
                  or -1 if the second argument does not occur.

     substr       returns a substring of its first argument.  The
                  second argument is a zero origin number select-
                  ing the first  character;  the  third  argument
                  indicates the length of the substring.  A miss-
                  ing third argument is taken to be large  enough
                  to extend to the end of the first string.

     translit     transliterates  the  characters  in  its  first
                  argument from the set given by the second argu-
                  ment to the set given by the third.  No  abbre-
                  viations are permitted.

     include      returns the contents of the file named  in  the
                  argument.

     sinclude     is identical to include, except  that  it  says
                  nothing if the file is inaccessible.

     syscmd       executes the UNIX System command given  in  the
                  first argument.  No value is returned.

     sysval       is the  return  code  from  the  last  call  to
                  syscmd.

     maketemp     fills in a string of XXXXX in its argument with
                  the current process ID.

     m4exit       causes immediate exit from m4.  Argument 1,  if
                  given, is the exit code; the default is 0.

     m4wrap       argument 1 will be pushed back  at  final  EOF;
                  example: m4wrap(`cleanup()')

     errprint     prints its argument on  the  diagnostic  output
                  file.



                                                                4





m4(1)                    USER COMMANDS                      m4(1)



     dumpdef      prints current names and definitions,  for  the
                  named  items,  or  for  all if no arguments are
                  given.

     traceon      with no arguments, turns  on  tracing  for  all
                  macros (including built-ins).  Otherwise, turns
                  on tracing for named macros.

     traceoff     turns off trace globally  and  for  any  macros
                  specified.   Macros specifically traced by tra-
                  ceon can be untraced only by specific calls  to
                  traceoff.

SEE ALSO
     as(1), cc(1).








































                                                                5



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026