M6 (I) 11/15/72 M6 (I)
NAME m6 -- general purpose macro processor
SYNOPSIS m6 [ -d arg1 ] [ arg2 [ arg3 ] ]
DESCRIPTION m6 takes input from file arg2 (or standard input
if arg2 is missing) and places output on file
arg3 (or standard output). A working file of
definitions, "m.def", is initialized from file
arg1 if that is supplied. M6 differs from the
standard [1] in these respects:
#trace:, #source: and #end: are not defined.
#meta,arg1,arg2: transfers the role of metachar-
acter arg1 to character arg2. If two metacharac-
ters become identical thereby, the outcome of
further processing is not guaranteed. For exam-
ple, to make []{} play the roles of #:<> type
\#meta,<\#>,[:
[meta,<:>,]:
[meta,[substr,<<>>,1,1;,{]
[meta,[substr,{{>>,2,1;,}]
#del,arg1: deletes the definition of macro arg1.
#save: and #rest: save and restore the definition
table together with the current metacharacters on
file m.def.
#def,arg1,arg2,arg3: works as in the standard
with the extension that an integer may be sup-
plied to arg3 to cause the new macro to perform
the action of a specified builtin before its re-
placement text is evaluated. Thus all builtins
except #def: can be retrieved even after dele-
tion. Codes for arg3 are:
0 - no function
1,2,3,4,5,6 - gt,eq,ge,lt,ne,le
7,8 - seq,sne
9,10,11,12,13 - add,sub,mpy,div,exp
20 - if
21,22 - def,copy
23 - meta
24 - size
25 - substr
26,27 - go,gobk
28 - del
29 - dnl
30,31 - save,rest
FILES m.def--working file of definitions
/usr/lang/mdir/m6a--m6 processor proper
(/usr/bin/m6 is only an initializer)
/usr/lang/mdir/m6b--default initialization for
m.def
/bin/cp--used for copying initial value of m.def
SEE ALSO [1] A. D. Hall, The M6 Macroprocessor, Bell Tele-
phone Laboratories, 1969
DIAGNOSTICS "err" -- a bug, an unknown builtin or a bad defi-
nition table
"oprd"--can't open input or initial definitions
"opwr"--can't open output
"ova" -- overflow of nested arguments
"ovc" -- overflow of calls
"ovd" -- overflow of definitions
"Try again" -- no process available for copying
m.def
BUGS Characters in internal tables are stored one per
word. They really should be packed to improve
capacity. For want of space (and because of un-
packed formats) no file arguments have been pro-
vided to #save: or #rest:, and no check is made
on the actual opening of file m.def. Again to
save space, garbage collection makes calls on
#save: and #rest: and so overwrites m.def.