This commit is contained in:
ceriel 1995-12-06 13:08:44 +00:00
parent 583130b79b
commit 6e2fe89c61
12 changed files with 0 additions and 2622 deletions

View file

@ -1,6 +0,0 @@
man
INSTALL
INSTALL_A
READ_ME.n
driver.c
str_change.c

View file

@ -1,182 +0,0 @@
#!/bin/sh
# installation of fast ACK compilers fcc, fm2, and fpc
# is the call correct?
case $# in
1)
if [ -d $1 ]
then
:
else
echo $0: $1 is not a directory >&2
exit 1
fi
;;
*)
echo $0: Call is $0 \<bin directory\> >&2
exit 1
;;
esac
# investigate machine: either vax or sun(3)
echo $0: determining type of machine ...
cat > t.c <<'EOF'
main() {
#ifdef sun
printf("sun\n");
#endif
#ifdef vax
printf("vax\n");
#endif
}
EOF
if cc t.c
then
:
else
$0: compilation failed >&2
exit 1
fi
m=`./a.out`
rm -f a.out t.[co]
case $m in
sun|vax)
echo $0: Starting installation for a $m ...
;;
*)
echo $0: machine must be sun or vax >&2
exit 1
;;
esac
# make links to proper bin and lib directories
echo $0: creating bin and lib directories ...
rm -f bin lib
ln -s bin.$m bin
ln -s lib.$m lib
# edit manual page
sed s@CHANGE_ME@`pwd`/def@ < man/fm2.1.src > man/fm2.1
# now compile the driver program
echo $0: compiling driver program ...
rm -f fcc fm2 fpc
SunOs4=
if [ -f /usr/lib/ld.so ]
then
# different options for the loader on SunOs 4.0
SunOs4=-DSunOs4
fi
if cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFCC -o fcc driver.c &&
cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFM2 -o fm2 driver.c &&
cc -O -DFASTDIR=\"`pwd`\" $SunOs4 -DFPC -o fpc driver.c
then
:
else
echo $0: compilation of driver program failed >&2
exit 1
fi
if cc -o str_change str_change.c
then
case $m in
vax)
./str_change CHANGE_ME `pwd` < bin.vax/m2mm > fm2mm
;;
sun)
./str_change CHANGE_ME `pwd` < bin.sun/m2mm > fm2mm
;;
esac
rm -f str_change.o str_change
chmod +x fm2mm
else
echo "$0: compilation of string patching program failed; cannot create fm2mm" >&2
fi
#now run simple tests
echo $0: run some simple tests
failed=false
cat > test.mod <<'EOF'
MODULE test;
FROM InOut IMPORT WriteString, WriteLn;
BEGIN
WriteString("Hello World");
WriteLn
END test.
EOF
if ./fm2 test.mod 2>/dev/null
then
case `a.out` in
"Hello World")
;;
*)
echo $0: fm2 test failed >&2
failed=true
;;
esac
else
echo $0: fm2 compilation failed >&2
failed=true
fi
cat > test.c <<'EOF'
main() { printf("Hello World\n"); }
EOF
if ./fcc test.c 2>/dev/null
then
case `a.out` in
"Hello World")
;;
*)
echo $0: fcc test failed >&2
failed=true
;;
esac
else
echo $0: fcc compilation failed >&2
failed=true
fi
cat > test.p <<'EOF'
program p(output); begin writeln('Hello World') end.
EOF
if ./fpc test.p 2>/dev/null
then
case `a.out` in
"Hello World")
;;
*)
echo $0: fpc test failed >&2
failed=true
;;
esac
else
echo $0: fpc compilation failed >&2
failed=true
fi
rm -f test.* a.out
case $failed in
true)
echo $0: some tests failed, installation aborted >&2
exit 1
;;
false)
rm -f $1/fm2 $1/fcc $1/fpc
cp fm2 fcc fpc $1
if [ -f fm2mm ]
then
rm -f $1/fm2mm
cp fm2mm $1/fm2mm
fi
rm -f fm2 fpc fcc fm2mm
echo $0: Installation completed
exit 0
;;
esac

View file

@ -1,166 +0,0 @@
#!/bin/sh
# installation of fast ACK compilers afcc, afm2
# is the call correct?
case $# in
1)
if [ -d $1 ]
then
:
else
echo $0: $1 is not a directory >&2
exit 1
fi
;;
*)
echo $0: Call is $0 \<ACK home directory\> >&2
exit 1
;;
esac
# investigate machine: either vax or sun(3)
echo $0: determining type of machine ...
cat > t.c <<'EOF'
main() {
#ifdef sun
printf("sun\n");
#endif
#ifdef vax
printf("vax\n");
#endif
}
EOF
if cc t.c
then
:
else
echo $0: compilation failed >&2
exit 1
fi
m=`./a.out`
rm -f a.out t.[co]
case $m in
sun|vax)
echo $0: Starting installation for a $m ...
;;
*)
echo $0: machine must be sun or vax >&2
exit 1
;;
esac
# edit manual page
sed s@CHANGE_ME@$1/lib/m2@ < man/afm2.1.src > man/afm2.1
# install the compiler binaries
echo $0: copying compiler binaries ...
case $m in
sun)
cp ack.sun/cemcom* ack.sun/m2* $1/lib/m68020
;;
vax)
cp ack.vax/cemcom* ack.vax/m2* $1/lib/vax4
;;
esac
# now compile the driver program
echo $0: compiling driver program ...
rm -f afcc afm2
if cc -O -DACK_BIN -I$1/h -DFCC -o afcc driver.c &&
cc -O -DACK_BIN -I$1/h -DFM2 -o afm2 driver.c
then
:
else
echo $0: compilation of driver program failed >&2
exit 1
fi
( cd $1/lang/m2/libm2
echo 'killbss() { }' > killbss.c
../../../bin/acc -L -c -LIB killbss.c
cp LIST LIST.old
echo 'killbss.c' >> LIST
../../../bin/arch r tail_m2.a killbss.c
) > /dev/null 2>&1
case $m in
sun)
( cd $1/lib/sun3
cp tail_m2 tail_m2.orig
../../bin/aal r tail_m2 ../../lang/m2/libm2/killbss.o
)
;;
vax)
( cd $1/lib/vax4
cp tail_m2 tail_m2.orig
ar r tail_m2 ../../lang/m2/libm2/killbss.o
ranlib tail_m2
)
;;
esac > /dev/null 2>&1
#now run simple tests
echo $0: run some simple tests
failed=false
cat > test.mod <<'EOF'
MODULE test;
FROM InOut IMPORT WriteString, WriteLn;
BEGIN
WriteString("Hello World");
WriteLn
END test.
EOF
if ./afm2 test.mod 2>/dev/null
then
case `a.out` in
"Hello World")
;;
*)
echo $0: afm2 test failed >&2
failed=true
;;
esac
else
echo $0: afm2 compilation failed >&2
failed=true
fi
cat > test.c <<'EOF'
main() { printf("Hello World\n"); }
EOF
if ./afcc test.c 2>/dev/null
then
case `a.out` in
"Hello World")
;;
*)
echo $0: afcc test failed >&2
failed=true
;;
esac
else
echo $0: afcc compilation failed >&2
failed=true
fi
rm -f test.* a.out
case $failed in
true)
echo $0: some tests failed, installation aborted >&2
exit 1
;;
false)
rm -f $1/bin/afm2 $1/bin/afcc
cp afm2 afcc $1/bin
rm -f afm2 afcc
cp man/afcc.1 man/afm2.1 $1/man
echo $0: Installation completed
exit 0
;;
esac

View file

@ -1,80 +0,0 @@
.ND
.SH
Installing the fast ACK compilers
.LP
This is the first distribution of the fast ACK compilers, in
binary form, for either a DEC VAX running Berkeley Unix BSD 4.2 or BSD 4.3,
or a SUN-3 MC68020 work-station running SunOS 3.2-3.5, or SunOS 4.0.
The distribution contains a C-, a Modula-2-, and a Pascal-compiler producing object
code that is compatible with cc-produced object code. There are also
versions for C and Modula-2 producing object code that is compatible
with ACK, 4th distribution.
The distribution also contains a Modula-2 makefile generator.
.LP
The tape contains the following files and directories:
.IP "lib.vax and bin.vax"
.br
binaries and libraries for the VAX.
.IP "lib.sun and bin.sun"
.br
binaries and libraries for the SUN-3.
.IP def
directory containing definition modules of the Modula-2 run-time system.
.IP man
directory containing manual pages.
.IP doc
directory containing some documents describing the languages implemented.
.IP "ack.sun and ack.vax"
.br
binaries for ACK compatible fast compilers.
.IP "driver.c"
.br
sources of the compiler driver.
.IP "READ_ME"
.br
the file you are reading now.
.IP "INSTALL" and "INSTALL_A"
.br
shell-scripts taking care of the installation.
.LP
Installation makes the following commands available:
.IP fm2
fast Modula-2 compiler.
.IP fcc
fast C compiler.
.IP fpc
fast Pascal compiler.
.IP fm2mm
.br
makefile generator for fast Modula-2 compiler.
.LP
To install these commands, proceed as follows:
.IP 1.
Create a directory for the compilers, f.i. /usr/local/lib/fastc.
You will need about 3 megabyte to extract the tape.
.IP 2.
Go to this directory and extract the tape (which is in 1600 bpi tar-format).
.IP 3.
Execute the INSTALL shell-script with one argument: the directory in
which the fm2, fcc, fpc, and fm2mm binaries must be installed, f.i.
/usr/local/bin.
This will take care of the installation of the cc(1) compatible
versions of the fast ACK compilers.
The INSTALL script will also run some small tests.
.IP 4.
The man-subdirectory contains manual pages. When you have satisfied
yourself that fm2, fcc, and fpc work properly, install the
fm2, fm2mm, fcc, and fpc manual pages
in a public man-directory, and announce the availability of
fm2, fm2mm, fcc, and fpc.
.IP 5.
The tape also contains ACK-compatible fast ACK compilers for C and Modula-2.
If you have the 4th ACK distribution (became available in august 1988),
you can use the INSTALL_A shell-script to install these in the ACK tree.
Call INSTALL_A with the ACK home directory as argument.
This will make afm2 and afcc available in the ACK bin-directory.
.IP 6.
After the installation, some directories are no longer needed. The ack.sun
and ack.vax directories can be removed; when on a SUN, the bin.vax and
lib.vax directories can be removed; when on a VAX, the bin.sun and lib.sun
directories can be removed.

File diff suppressed because it is too large Load diff

View file

@ -1,5 +0,0 @@
afcc.1
afm2.1.src
fcc.1
fm2.1.src
fpc.1

View file

@ -1,157 +0,0 @@
.TH AFCC 1
.SH NAME
afcc \- fast ACK compatible C compiler
.SH SYNOPSIS
.B afcc
[
.B \-c
]
[
.B \-O
]
[
.B \-v
]
[
.B \-vn
]
[ \fB\-D\fIname\fR ]
[ \fB\-D\fIname\fB=\fIdef\fR ]
[
.BI \-I pathname
]
[
.B \-w
]
[
.B \-o
.I outfile
]
[
.B \-R
]
[
.BI \-U name
]
[
.BI -M compiler
]
.I sourcefile ...
.SH DESCRIPTION
.LP
.I Afcc
is a fast
.B C
compiler. It translates
.B C
programs
into ack(1ACK)-compatible relocatable object modules, and does so in one pass.
Then, if the \fB\-c\fP flag is not given,
.I afcc
offers the object modules to a link-editor,
to create an executable binary.
.LP
.I Afcc
accepts several types of filename arguments. Files with
names ending in
.B .c
are taken to be
.B C
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 .c
in the name of the object.
.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.
.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 compiler first searches for
.B #include
files in the directory containing
.I sourcefile,
then in directories in
.B \-I
options, then in the ACK include directory,
and finally, in
.I /usr/include.
.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\-w\fP
suppress warning messages.
.IP \fB\-R\fP
.br
test for more compatibility with Kernighan & Ritchie C [1].
.IP \fB\-M\fIcompiler\fR
.br
use \fIcompiler\fR as C-2 compiler instead of the default.
.LP
Object modules produced by ack(1ACK) and
.I afcc
can be freely mixed.
.SH "SEE ALSO"
.IP [1]
B.W. Kernighan, D. Ritchie, "\fIThe C programming Language\fP", Prentice-Hall Inc., 1978
.IP [2]
E.H. Baalbergen, "\fIThe ACK CEM compiler\fP".
.IP [3]
ack(1ACK) manual page.
.SH DIAGNOSTICS
Diagnostics are intended to be self-explanatory.
.SH REMARKS
You need the 4th ACK distribution to be able to use this program.

View file

@ -1,214 +0,0 @@
.TH FM2 1
.SH NAME
afm2 \- fast ACK compatible Modula-2 compiler
.SH SYNOPSIS
.B afm2
[
.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 \-_
]
[
.BI \-U name
]
[
.BI -M compiler
]
.I sourcefile ...
.SH DESCRIPTION
.LP
.I afm2
is a fast
.B Modula-2
compiler. It translates
.B Modula-2
programs
into ack(1ACK)-compatible relocatable object modules, and does so in one pass.
Then, if the \fB\-c\fP flag is not given,
.I afm2
offers the object modules to a link-editor,
to create an executable binary.
.LP
.I Afm2
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.
.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, then in the ACK include directory,
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 afm2
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\-_\fP
.br
allow for underscores within identifiers. Identifiers may not start or end
with an underscore, even if this flag is given.
.IP \fB\-M\fIcompiler\fR
.br
use \fIcompiler\fR as Modula-2 compiler instead of the default.
.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]
ack(1ACK) unix manual page.
.SH DIAGNOSTICS
Diagnostics are intended to be self-explanatory.
.SH REMARKS
You need the 4th ACK distribution to be able to use this program.

View file

@ -1,160 +0,0 @@
.TH FCC 1
.SH NAME
fcc \- fast CC-compatible C compiler
.SH SYNOPSIS
.B fcc
[
.B \-c
]
[
.B \-O
]
[
.B \-v
]
[
.B \-vn
]
[ \fB\-D\fIname\fR ]
[ \fB\-D\fIname\fB=\fIdef\fR ]
[
.BI \-I pathname
]
[
.B \-w
]
[
.B \-o
.I outfile
]
[
.B \-R
]
[
.BI \-U name
]
[
.BI -M compiler
]
.I sourcefile ...
.SH DESCRIPTION
.LP
.I Fcc
is a fast
.B C
compiler. It translates
.B C
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 fcc
offers the object modules to a link-editor,
to create an executable binary.
.LP
.I Fcc
accepts several types of filename arguments. Files with
names ending in
.B .c
are taken to be
.B C
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 .c
in the name of the object.
.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 C
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 compiler 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.
.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\-w\fP
suppress warning messages.
.IP \fB\-R\fP
.br
test for more compatibility with Kernighan & Ritchie C [1].
.IP \fB\-M\fIcompiler\fR
.br
use \fIcompiler\fR as C-2 compiler instead of the default.
.LP
Object modules produced by cc(1) and
.I fcc
can be freely mixed, as long as the link-editor is called through
.I fcc.
.SH "SEE ALSO"
.IP [1]
B.W. Kernighan, D. Ritchie, "\fIThe C programming Language\fP", Prentice-Hall Inc., 1978
.IP [2]
E.H. Baalbergen, "\fIThe ACK CEM compiler\fP".
.IP [3]
cc(1) unix manual page.
.SH DIAGNOSTICS
Diagnostics are intended to be self-explanatory.

View file

@ -1,230 +0,0 @@
.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.

View file

@ -1,230 +0,0 @@
.TH FM2 1
.SH NAME
fpc \- fast CC compatible Modula-2 compiler
.SH SYNOPSIS
.B fpc
[
.B \-c
]
[
.B \-O
]
[
.B \-v
]
[
.B \-vn
]
[ \fB\-D\fIname\fR ]
[ \fB\-D\fIname\fB=\fIdef\fR ]
[
.BI \-I pathname
]
[
.B \-w
]
[
.B \-L
]
[
.B \-o
.I outfile
]
[
.B \-R
]
[
.B \-A
]
[
.B \-a
]
[
.B \-d
]
[
.BI \-i num
]
[
.B \-t
]
[
.B \-C
]
[
.B \-U+
]
[
.B \-u+
]
[
.B \-s+
]
[
.B \-c+
]
[
.BI \-U name
]
[
.BI -M compiler
]
.I sourcefile ...
.SH DESCRIPTION
.LP
.I fpc
is a fast
.B Pascal
compiler. It translates
.B Pascal
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 fpc
offers the object modules to a link-editor,
to create an executable binary.
.LP
.I Fpc
accepts several types of filename arguments. Files with
names ending in
.B .p
are taken to be
.B Pascal
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 .p
in the name of the object.
A file with suffix
.B .p
is passed through the C preprocessor if it begins with a '#'.
.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 Pascal
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.
.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\fP
.br
do not generate code to keep track of
the current location in the source code.
.IP \fB\-w\fP
.br
suppress warning messages.
.IP \fB\-d\fP
.br
allow for "long"s.
.IP \fB\-i\fInum\fR
.br
set size for integer sets. By default, the set size is the word size.
.IP \fB\-C\fP
.br
distinguish between lower case and upper case. Normally, upper case letters
are considered equal to their lower case counterpart.
.IP \fB\-t\fP
.br
trace calls and exits of procedures and functions.
.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\-a\fP
.br
disable assertions. Assertions are skipped instead of evaluated.
.IP "\fB\-U+\fP, \fB\-u+\fP"
.br
allow for underscores within identifiers. Identifiers may not start
with an underscore, even if this flag is given.
.IP \fB-s+\fP
.br
allow only standard
.BR Pascal .
This disables the \fB\-c+\fP, \fB\-d\fR, \fB\-u+\fR,
\fB\-U+\fR and \fB\-C\fR options.
Furthermore, assertions are not recognized at all.
.IP \fB-c+\fP
.br
allow C-like strings. This option is mainly intended for usage with
C-functions. This option will cause the type 'string' to be known.
.IP \fB\-M\fIcompiler\fR
.br
use \fIcompiler\fR as Modula-2 compiler instead of the default.
.SH "SEE ALSO"
.IP [1]
J.W. Stevenson, H. v. Eck, \fIAmsterdam Compiler Kit-Pascal reference manual\fP.
.IP [2]
cc(1) unix manual page.
.SH DIAGNOSTICS
Diagnostics are intended to be self-explanatory.

View file

@ -1,95 +0,0 @@
/* Utility to change strings in binary files.
Reads from standard input, writes on standard output.
Only replaces one occurrence if the -s flag is given.
*/
#include <stdio.h>
main(argc, argv)
char *argv[];
{
register char *psrc;
register int ch;
int srclen;
int sflag = 0;
char *progname = argv[0];
while (argc > 1 && argv[1][0] == '-') {
switch(argv[1][1]) {
case 's':
sflag = 1;
break;
default:
fprintf(stderr,
"Usage: %s [-s] <originalstring> <replacementstring>\n",
progname);
exit(1);
}
argc--;
argv++;
}
if (argc != 3) {
fprintf(stderr,
"Usage: %s [-s] <originalstring> <replacementstring>\n",
progname);
exit(1);
}
psrc = argv[1];
srclen = strlen(psrc);
if (srclen == 0) {
fprintf(stderr,
"%s: originalstring must have length > 0\n",
progname);
exit(1);
}
for (;;) {
ch = getchar();
if (ch == EOF) exit(0);
if (ch != (*psrc & 0377)) {
putchar(ch);
continue;
}
do {
psrc++;
ch = getchar();
} while (ch && ch == (*psrc & 0377));
if (ch != EOF) ungetc(ch, stdin);
if (*psrc == '\0') {
/* we have a match */
register int i;
register char *prepl = argv[2];
for (i = srclen; i; i--) {
if (*prepl) {
putchar(*prepl);
prepl++;
}
else putchar('\0');
}
while (*prepl) {
putchar(*prepl);
prepl++;
if (ch != EOF) ch = getchar();
}
if (sflag) {
break;
}
}
else {
register char *p = argv[1];
while (p < psrc) {
putchar(*p);
p++;
}
if (ch == EOF) exit(0);
}
psrc = argv[1];
}
if (ch == EOF) exit(0);
while ((ch = getchar()) != EOF) {
putchar(ch);
}
exit(0);
}