.TH MODULA\-2 1 "$Revision$"
.ad
.SH NAME
Modula-2 \- ACK Modula-2 compiler
.SH SYNOPSIS
\fBack\fR \-m\fImach\fR files
.br
\fImach\fR files
.SH INTRODUCTION
This document provides a short introduction to the use of the ACK Modula-2
compiler. It also
mentions the location of definition modules for "standard" modules.
.SH FILENAMES
Usually, a Modula-2 program consists of several definition and implementation
modules, and one program module.
Definition modules must reside in files with names having a ".def" extension.
Implementation modules and program modules must reside in files having a
".mod" extension.
.PP
The name of the file in which a definition module is stored must be the same as
the module-name, apart from the extension.
Also, in most Unix systems filenames are only 14 characters long.
So, given an IMPORT declaration for a module called "LongModulName",
the compiler will try to open a file called "LongModulN.def".
The requirement does not hold for implementation or program modules,
but is certainly recommended.
.SH CALLING THE COMPILER
The easiest way to do this is to let the \fIack\fR(1) program do it.
So, to compile a program module "prog.mod", just call
.nf
	\fBack\fR \-m\fImach\fR prog.mod [ objects of implementation modules ]
		or
	\fImach\fR prog.mod [ objects of implementation modules ]
.fi
where \fImach\fR is one of the target machines of ACK.
.PP
To compile an implementation module, use the \-\fBc\fR flag
to produce a ".o" file.
Definition modules can not be compiled; the compiler reads them when they are
needed. 
.PP
For more details on the \fIack\fR program see \fIack\fR(1).
.SH DEFINITION MODULES
"Standard" definition modules can be found in
the directory \fB~em/lib/m2\fR.
.PP
When the compiler needs a definition module, it is first searched for
in the current directory, then in the directories given to it by the
\-\fBI\fR flag
in the order given,
and then in the directory mentioned above.
.SH FLAGS
The \fIack\fR(1) program recognizes (among others) the following
flags, that are passed to the Modula-2 compiler:
.IP \fB\-I\fIdirname\fR
.br
append \fIdirname\fR to the list of directories where definition modules
are looked for. 
.IP \fB\-I\fP
don't look in
the directory \fB~em/lib/m2\fR.
.IP \fB\-M\fP\fIn\fP
set maximum identifier length to \fIn\fR. The minimum value of \fIn\fR
is 14, because the keyword "IMPLEMENTATION" is that long.
.IP \fB\-n\fR
do not generate EM register messages.
The user-declared variables will not be stored into registers on the target
machine.
.IP \fB\-L\fR
do not generate the EM \fBfil\fR and \fBlin\fR instructions that enable
an interpreter to keep track of the current location in the source code.
.IP \fB\-w\fR\fIclasses\fR
suppress warning messages whose class is a member of \fIclasses\fR.
Currently, there are three classes: \fBO\fR, indicating old-flashioned use,
\fBW\fR, indicating "ordinary" warnings, and \fBR\fR, indicating
restricted Modula-2.
If no \fIclasses\fR are given, all warnings are suppressed.
By default, warnings in class \fBO\fR and \fBW\fR are given.
.IP \fB\-W\fR\fIclasses\fR
allow for warning messages whose class is a member of \fIclasses\fR.
.IP \fB\-g\fR
produce a DBX-style symbol table.
.IP \fB\-x\fR
make all procedure names global, so that \fIadb\fR(1) understands them.
.IP \fB\-Xs\fR
make INTEGER ranges symmetric, t.i., MIN(INTEGER) = - MAX(INTEGER).
This is useful for interpreters that use the "real" MIN(INTEGER) to
indicate "undefined".
.LP
.SH SEE ALSO
\fIack\fR(1), \fIem_m2\fR(6), \fIm2mm(1)\fR
.SH FILES
.IR ~em/lib/em_m2 :
binary of the Modula-2 compiler.
.SH DIAGNOSTICS
All warning and error messages are written on standard error output.
.SH REMARKS
Debugging and profiling facilities may be present during the development
of \fIem_m2\fP.
