230 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.TH FM2 1
 | 
						|
.SH NAME
 | 
						|
fm2 \- fast CC compatible Modula-2 compiler
 | 
						|
.SH SYNOPSIS
 | 
						|
.B fm2
 | 
						|
[
 | 
						|
.B \-c
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-O
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-v
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-vn
 | 
						|
]
 | 
						|
[ \fB\-D\fIname\fR ]
 | 
						|
[ \fB\-D\fIname\fB=\fIdef\fR ]
 | 
						|
[
 | 
						|
.BI \-I pathname
 | 
						|
]
 | 
						|
[
 | 
						|
.BI \-w classes
 | 
						|
]
 | 
						|
[
 | 
						|
.BI \-W classes
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-L
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-o 
 | 
						|
.I outfile
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-R
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-A
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-3
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-U
 | 
						|
]
 | 
						|
[
 | 
						|
.B \-e
 | 
						|
]
 | 
						|
[
 | 
						|
.BI \-U name
 | 
						|
]
 | 
						|
[
 | 
						|
.BI -M compiler
 | 
						|
]
 | 
						|
.I sourcefile ...
 | 
						|
.SH DESCRIPTION
 | 
						|
.LP
 | 
						|
.I fm2
 | 
						|
is a fast
 | 
						|
.B Modula-2
 | 
						|
compiler. It translates 
 | 
						|
.B Modula-2
 | 
						|
programs
 | 
						|
into cc(1)-compatible relocatable object modules, and does so in one pass.
 | 
						|
Then, if the \fB\-c\fP flag is not given,
 | 
						|
.I fm2
 | 
						|
offers the object modules to a link-editor,
 | 
						|
to create an executable binary.
 | 
						|
.LP
 | 
						|
.I Fm2
 | 
						|
accepts several types of filename arguments.  Files with 
 | 
						|
names ending in
 | 
						|
.B .mod
 | 
						|
are taken to be 
 | 
						|
.B Modula-2
 | 
						|
source programs. 
 | 
						|
They are compiled, and the resulting object module is placed in the current
 | 
						|
directory.
 | 
						|
The object module is named after its source file, the suffix
 | 
						|
.B .o
 | 
						|
replacing 
 | 
						|
.BR .mod
 | 
						|
in the name of the object.
 | 
						|
A file with suffix
 | 
						|
.B .mod
 | 
						|
is passed through the C preprocessor if it begins with a '#'.
 | 
						|
.PP
 | 
						|
Definition modules are not separately compiled. The compiler reads them when
 | 
						|
it needs them.
 | 
						|
Definition modules are expected to reside in files with names ending
 | 
						|
in
 | 
						|
.BR .def .
 | 
						|
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.
 | 
						|
.LP
 | 
						|
Other arguments refer to loader options,
 | 
						|
object modules, or object libraries.
 | 
						|
Unless the
 | 
						|
.B \-c
 | 
						|
flag is given, these modules and libraries, together with the results of any
 | 
						|
specified compilations, are passed (in the order given) to the
 | 
						|
link-editor to produce
 | 
						|
an output file named
 | 
						|
.IR a.out .
 | 
						|
You can specify a name for the executable by using the
 | 
						|
.B \-o 
 | 
						|
option.
 | 
						|
.LP
 | 
						|
If a single 
 | 
						|
.B Modula-2
 | 
						|
program is compiled and loaded all at once, the object module
 | 
						|
file is deleted.
 | 
						|
.SH OPTIONS
 | 
						|
.LP
 | 
						|
The \fB\-l\fIlib\fR, \fB\-d\fP, \fB\-n\fP, \fB\-N\fP,
 | 
						|
\fB\-r\fP, \fB\-s\fP, \fB\-S\fP, \fB\-i\fP, and \fB\-u\fP options are
 | 
						|
passed to the link-editor program.
 | 
						|
The \fB\-u\fP option takes an extra argument.
 | 
						|
.IP \fB\-c\fP
 | 
						|
.br
 | 
						|
Suppress the loading phase of the compilation, and force an object module to
 | 
						|
be produced, even if only one program is compiled.
 | 
						|
A single object module can be named explicitly using the
 | 
						|
.B \-o
 | 
						|
option.
 | 
						|
.IP \fB\-D\fIname\fR\fB=\fIdef\fR
 | 
						|
Define a symbol
 | 
						|
.I name
 | 
						|
to the 
 | 
						|
preprocessor, as if by "#define".
 | 
						|
.IP \fB\-D\fIname\fR
 | 
						|
.br
 | 
						|
same as \fB\-D\fIname\fB=1\fR.
 | 
						|
.IP \fB\-I\fIpathname\fR
 | 
						|
.br
 | 
						|
Add
 | 
						|
.I pathname
 | 
						|
to the list of directories in which to search for
 | 
						|
.B #include
 | 
						|
files with filenames not beginning with slash.
 | 
						|
The preprocessor first searches for
 | 
						|
.B #include
 | 
						|
files in the directory containing
 | 
						|
.I sourcefile,
 | 
						|
then in directories in
 | 
						|
.B \-I
 | 
						|
options, and finally, in
 | 
						|
.I /usr/include.
 | 
						|
This flag is also passed to the compiler. 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 \fB\-I\fP flag, and then in a default directory,
 | 
						|
.I CHANGE_ME.
 | 
						|
.I fm2
 | 
						|
This default directory contains all definition modules of
 | 
						|
the runtime system.
 | 
						|
.IP "\fB\-o \fIoutput\fR"
 | 
						|
Name the final output file
 | 
						|
.I output.
 | 
						|
.IP \fB\-O\fP
 | 
						|
.br
 | 
						|
Use a version of the compiler that is just a bit slower, but produces
 | 
						|
better code.
 | 
						|
.IP \fB\-U\fIname\fR
 | 
						|
.br
 | 
						|
Remove any initial definition of
 | 
						|
.I name.
 | 
						|
.IP \fB\-v\fP
 | 
						|
.br
 | 
						|
Verbose. Print the commands as they are executed.
 | 
						|
.IP \fB\-vn\fP
 | 
						|
.br
 | 
						|
Verbose, no execute. Only print the commands, do not execute them.
 | 
						|
.IP \fB\-L\fR
 | 
						|
do not generate code 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\-R\fP
 | 
						|
.br
 | 
						|
disable all range-checks.
 | 
						|
.IP \fB\-A\fP
 | 
						|
.br
 | 
						|
enable extra array bound checks. Unfortunately, the back-end used for this
 | 
						|
compiler is a bit sloppy, so extra array bound checks are needed if you want
 | 
						|
detection of array bound errors.
 | 
						|
.IP \fB\-3\fP
 | 
						|
.br
 | 
						|
Only accept Modula-2 programs that strictly conform to the 3rd Edition of
 | 
						|
[1].
 | 
						|
.IP \fB\-U\fP
 | 
						|
.br
 | 
						|
allow for underscores within identifiers. Identifiers may not start or end
 | 
						|
with an underscore, even if this flag is given.
 | 
						|
.IP \fB\-e\fP
 | 
						|
.br
 | 
						|
allow for local extensions. Currently, the only local extensions are
 | 
						|
procedure constants.
 | 
						|
.IP \fB\-M\fIcompiler\fR
 | 
						|
.br
 | 
						|
use \fIcompiler\fR as Modula-2 compiler instead of the default.
 | 
						|
.PP
 | 
						|
The compiler does not do any version-control. Instead, a makefile
 | 
						|
generator,
 | 
						|
.IR m2mm ,
 | 
						|
is included.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.IP [1]
 | 
						|
N. Wirth, \fIProgramming in Modula-2\fP, 3rd edition, Springer Verlag.
 | 
						|
.IP [2]
 | 
						|
C.J.H. Jacobs, \fIThe ACK Modula-2 Compiler\fP.
 | 
						|
.IP [3]
 | 
						|
cc(1) unix manual page.
 | 
						|
.IP [4]
 | 
						|
m2mm(1) manual page.
 | 
						|
.SH DIAGNOSTICS
 | 
						|
Diagnostics are intended to be self-explanatory.
 |