Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ m4(1) — DG/UX 4.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought



                                                                    m4(1)



        _________________________________________________________________
        m4                                                        Command
        macro processor
        _________________________________________________________________


        SYNTAX

        m4 [ options ] [ files ]


        DESCRIPTION

        M4 is a macro processor intended as a front end for 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:

        -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 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 non-macro arguments
             take one.

        -Tint
             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 -D or -U flags:

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

        -Uname
             undefines name.




        DG/UX 4.00                                                 Page 1
               Licensed material--property of copyright holder(s)





                                                                    m4(1)



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

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



        DG/UX 4.00                                                 Page 2
               Licensed material--property of copyright holder(s)





                                                                    m4(1)



                    second argument, otherwise the third.  If there is no
                    third argument, the value is null.  The word unix is
                    predefined on UNIX system versions of m4.

        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.  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 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 1.
                    The value of the argument is calculated by
                    interpreting an initial digit-string as a decimal



        DG/UX 4.00                                                 Page 3
               Licensed material--property of copyright holder(s)





                                                                    m4(1)



                    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 include, except that it says nothing
                    if the file is inaccessible.

        syscmd      executes the DG/UX 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 XXXXXX at the end of its
                    argument with a unique letter and 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()')




        DG/UX 4.00                                                 Page 4
               Licensed material--property of copyright holder(s)





                                                                    m4(1)



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


        EXAMPLE

             m4 file1 file2 > outputfile

        will run the m4 macro processor on the files file1 and file2,
        redirecting the output into outputfile.


        SEE ALSO

        cc(1), cpp(1).

        The M4 Macro Processor by B. W. Kernighan and D. M. Ritchie.



























        DG/UX 4.00                                                 Page 5
               Licensed material--property of copyright holder(s)



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