    M6(VI)                       2/19/74                       M6(VI)

    NAME
         m6 - general purpose macroprocessor

    SYNOPSIS
         m6 [ name ]

    DESCRIPTION
         M6  copies  the  standard input to the standard output, with
         substitutions for any macro calls that appear.  When a  file
         name  argument  is given, that file is read before the stan-
         dard input.

         The processor is as described in the  reference  with  these
         exceptions:

           #def,arg1,arg2,arg3:  causes  arg1  to become a macro with
           defining text arg2 and (optional) built-in  serial  number
           arg3.

           #del,arg1: deletes the definition of macro arg1.

           #end: is not implemented.

           #list,arg1: sends the name of the macro designated by arg1
           to the current  destination  without  recognition  of  any
           warning  characters;  arg1  is 1 for the most recently de-
           fined macro, 2 for the next most recent, and so  on.   The
           name is taken to be empty when arg1 doesn't make sense.

           #warn,arg1,arg2:  replaces  the old warning character arg1
           by the new warning character arg2.

           #quote,arg1: sends the definition text of  macro  arg1  to
           the current destination without recognition of any warning
           characters.

           #serial,arg1: delivers the built-in serial number  associ-
           ated with macro arg1.

           #source,arg1: is not implemented.

           #trace,arg1:  with  arg1  = `1' causes a reconstruction of
           each later call to be placed on the standard output with a
           call  level number; other values of arg1 turn tracing off.

         The built-in `warn' may  be  used  to  replace  inconvenient
         warning  characters.  The example below replaces `#' `:' `<'
         `>' by `[' `]' `{' `}'.

                   #warn,<#>,[:
                   [warn,<:>,]:
                   [warn,[substr,<<>>,1,1;,{]
                   [warn,[substr,{{>>,2,1;,}]
                   [now,{calls look like this}]

                                  - 1 -

    M6(VI)                       2/19/74                       M6(VI)

         Every built-in function has a serial number, which specifies
         the  action  to be performed before the defining text is ex-
         panded.  The serial numbers are: 1 gt, 2 eq, 3 ge, 4  lt,  5
         ne,  6  le,  7 seq, 8 sne, 9 add, 10 sub, 11 mpy, 12 div, 13
         exp, 20 if, 21 def, 22 copy, 23 warn, 24 size, 25 substr, 26
         go,  27  gobk, 28 del, 29 dnl, 32 quote, 33 serial, 34 list,
         35 trace.  Serial number 0 specifies no built-in action.

    SEE ALSO
         A. D. Hall, M6 Reference Manual.  Computer Science Technical
         Report #2, Bell Laboratories, 1969.

    DIAGNOSTICS
         Various table overflows and ``impossible'' conditions result
         in comment and dump.  There are no  diagnostics  for  poorly
         formed input.

    AUTHOR
         M. D. McIlroy

    BUGS
         Provision should be made to extend tables as needed, instead
         of wasting a big fixed core allocation.  You  get  what  the
         PDP11 gives you for arithmetic.

                                  - 2 -