


      MMMM4444((((1111))))                       ((((UUUUNNNNIIIIXXXX 5555....0000))))                      MMMM4444((((1111))))



      NNNNAAAAMMMMEEEE
           m4 - macro processor

      SSSSYYYYNNNNTTTTAAAAXXXX
           mmmm4444 [ options ] [ files ]

      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
           _M_4 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 ----, the standard input is read.  The processed text is
           written on the standard output.

           The options and their effects are as follows:

           ----eeee   Operate interactively.  Interrupts are ignored and the
                output is unbuffered.  Using this mode requires a
                special state of mind.

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

           ----BBBB_i_n_t
                Change the size of the push-back and argument
                collection buffers from the default of 4,096.

           ----HHHH_i_n_t
                Change the size of the symbol table hash array from the
                default of 199.  The size should be prime.

           ----SSSS_i_n_t
                Change the size of the call stack from the default of
                100 slots.  Macros take three slots, and non-macro
                arguments take one.

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

           To be effective, these flags must appear before any file
           names and before any ----DDDD or ----UUUU flags:

           ----DDDD_n_a_m_e[====_v_a_l]
                Defines _n_a_m_e to _v_a_l or to null in _v_a_l's absence.

           ----UUUU_n_a_m_e
                undefines _n_a_m_e.

           Macro calls have the form:

                name(arg1,arg2, ..., argn)




      Page 1                                                   (9010-E)






      MMMM4444((((1111))))                       ((((UUUUNNNNIIIIXXXX 5555....0000))))                      MMMM4444((((1111))))



           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 alphabetic letters, digits, and
           underscore ____, where the first character is not a digit.

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

           _M_4 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 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
                       arguments; $$$$**** 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 _d_e_f_i_n_e, 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



      Page 2                                                   (9010-E)






      MMMM4444((((1111))))                       ((((UUUUNNNNIIIIXXXX 5555....0000))))                      MMMM4444((((1111))))



                       there is no third argument, the value is null.
                       The word _u_n_i_x is predefined on the UNIX System
                       versions of _m_4.

           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.

           changequote change quote symbols to the first and second
                       arguments.  The symbols may be up to five
                       characters long.  _C_h_a_n_g_e_q_u_o_t_e 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      _m_4 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 _d_i_v_e_r_t 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
                       including 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 process
                       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



      Page 3                                                   (9010-E)






      MMMM4444((((1111))))                       ((((UUUUNNNNIIIIXXXX 5555....0000))))                      MMMM4444((((1111))))



                       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.

           eval        evaluates its argument as an arithmetic
                       expression, using 32-bit arithmetic.  Operators
                       include ++++, ----, ****, ////, %%%%, ^^^^ (exponentiation),
                       bitwise &&&&, |, ^^^^, and ~~~~; relationals;
                       parentheses.  Octal and hex 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.

           len         returns the number of characters in its
                       argument.

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

           translit    transliterates the characters in its first
                       argument from the set given by the second
                       argument to the set given by the third.  No
                       abbreviations are permitted.

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

           sinclude    is identical to _i_n_c_l_u_d_e, 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 _s_y_s_c_m_d.

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

           m4exit      causes immediate exit from _m_4.  Argument 1, if



      Page 4                                                   (9010-E)






      MMMM4444((((1111))))                       ((((UUUUNNNNIIIIXXXX 5555....0000))))                      MMMM4444((((1111))))



                       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.

           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
                       _t_r_a_c_e_o_n can be untraced only by specific calls
                       to _t_r_a_c_e_o_f_f.

      SSSSEEEEEEEE AAAALLLLSSSSOOOO
           cc(1), cpp(1).  and the M4 tutorial in the _R_O_S _U_t_i_l_i_t_y _G_u_i_d_e
































      Page 5                                                   (9010-E)



