The following sequence of commands is necessary to generate the Lisp files for the Mach interface:
(setf (search-list "mm:") '("/usr/lisp/mm/")) (setf (search-list "idefs:") '("/usr/lisp/idefs/")) (setf (search-list "icode:") '("/usr/lisp/icode/")) (setf (search-list "code:") '("/usr/lisp/code/")) (setf (default-directory) "/usr/lisp/icode/") (load "code:mm-interfaces.lisp")
The first four lines set up search lists for mm (matchmaker sources), idefs (matchmaker interface definition files), icode (Lisp matchmaker interface sources), and code (Lisp code sources). The fifth line changes the current working directory to be /usr/lisp/icode. This is where the output from matchmaker will be placed. And finally, the last line invokes matchmaker on the matchmaker definition files for all the interfaces.
Matchmaker generates three files for each interface XXX:
XXXdefs.lisp
contains constants and record definitions for the interface.
XXXmsgdefs.lisp
contains definitions of offsets to important fields in the messages that are sent to and received from the interface.
XXXuser.lisp
contains code for each remote procedure, that sends a message to the server and receives the reply from the server (if appropriate). Each of these functions returns one or more values. The first value returned is a general return which specifies whether the remote procedure call succeeded or gives an indication of why it failed. Other values may be returned depending on the particular remote procedure. These values are returned using the multiple value mechanism of Common Lisp.
This step takes about five minutes.