Initial commit
This commit is contained in:
parent
ead414d725
commit
d5dc0b7342
5 changed files with 1620 additions and 0 deletions
182
fast_misc/INSTALL
Executable file
182
fast_misc/INSTALL
Executable file
|
@ -0,0 +1,182 @@
|
|||
#!/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 /usr/em `pwd` < bin.vax/m2mm > fm2mm
|
||||
;;
|
||||
sun)
|
||||
./str_change /proj/em/Work `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
|
166
fast_misc/INSTALL_A
Executable file
166
fast_misc/INSTALL_A
Executable file
|
@ -0,0 +1,166 @@
|
|||
#!/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
|
80
fast_misc/READ_ME.n
Normal file
80
fast_misc/READ_ME.n
Normal file
|
@ -0,0 +1,80 @@
|
|||
.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.
|
1097
fast_misc/driver.c
Normal file
1097
fast_misc/driver.c
Normal file
File diff suppressed because it is too large
Load diff
95
fast_misc/str_change.c
Normal file
95
fast_misc/str_change.c
Normal file
|
@ -0,0 +1,95 @@
|
|||
/* 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);
|
||||
}
|
Loading…
Reference in a new issue