+++ /dev/null
-man
-INSTALL
-INSTALL_A
-READ_ME.n
-driver.c
-str_change.c
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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
+++ /dev/null
-.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.
+++ /dev/null
-/* fcc/fm2/fpc
- Driver for fast ACK compilers.
-
- Derived from the C compiler driver from Minix.
-
- You can create cc-compatible versions by compiling with
- cc -O '-DFASTDIR="<this directory>"' -DF?? driver.c
- where F?? is either FCC, FM2, or FPC.
- Install resulting binaries in a public place (f.i. /usr/local/bin).
- Suggested names: fcc, fm2, and fpc.
-
- If you have ACK, you can create ACK-compatible versions by compiling
- this file with
- cc -O -DACK_BIN -I<ACK home directory>/h -DF?? driver.c
- where F?? is either FCC, FPC, or FM2.
- Install the resulting binaries in the EM bin directory.
- Suggested names: afcc, afm2, and afpc.
- The ACK compatible version afpc is not compatible with the 4th
- ACK distribution, and thus is not on the tape.
-*/
-
-
-#ifndef vax
-#ifndef sun
-In this case, no fast ACK compiler available
-#endif
-#endif
-
-#if FM2+FPC+FCC > 1
-Something wrong here! Only one of FM2, FPC, or FCC must be defined
-#endif
-
-#include <errno.h>
-#include <signal.h>
-#include <varargs.h>
-#include <stdio.h>
-#ifdef ACK_BIN
-#include <em_path.h>
-#define M2DEF "/lib/m2"
-#define FASTDIR EM_DIR
-#else
-#define M2DEF "/def"
-#define TMP_DIR "/tmp"
-#endif ACK_BIN
-
-
-#ifndef ACK_BIN
-#define BINDIR "/bin/"
-#define LIBDIR "/lib/"
-#else ACK_BIN
-#define BINDIR "/lib/"
-#ifdef sun
-#define LIBDIR "/lib/sun3/"
-#endif sun
-#ifdef vax
-#define LIBDIR "/lib/vax4/"
-#endif vax
-#define CCINCL "/include/_tail_cc"
-#endif ACK_BIN
-char *ROOT_DIR = FASTDIR;
-
-/*
-#ifndef ACK_BIN
- Version producing VAX or SUN .o files in one pass.
-#else ACK_BIN
- Version producing ACK .o files in one pass.
-#endif ACK_BIN
-*/
-#define MAXARGC 256 /* maximum number of arguments allowed in a list */
-#define USTR_SIZE 128 /* maximum length of string variable */
-
-typedef char USTRING[USTR_SIZE];
-
-USTRING INCLUDE = "-I";
-
-struct arglist {
- int al_argc;
- char *al_argv[MAXARGC];
-};
-
-#define LD "/bin/ld"
-#define AS "/bin/as"
-#define CPP "*cpp"
-#if ACK_BIN && !vax
-#undef LD
-#undef AS
-#define LD "*em_led"
-#define CV "~cv" /* machine dependent; resides in lib directory */
-#endif ACK_BIN && !vax
-#define SHELL "/bin/sh"
-
-/* flags passed to linker */
-#define TO_LD "dnNrsSi"
-#if ACK_BIN && !vax
-#undef TO_LD
-#define TO_LD "rs"
-#endif ACK_BIN && !vax
-
-int kids = -1;
-int ecount = 0;
-
-struct arglist CPP_FLAGS = {
-#ifdef vax
- 8,
-#endif
-#ifdef sun
- 10,
-#endif
- {
- "-Dunix",
- "-DEM_WSIZE=4",
- "-DEM_PSIZE=4",
- "-DEM_SSIZE=2",
- "-DEM_LSIZE=4",
- "-DEM_FSIZE=4",
- "-DEM_DSIZE=8",
-#ifdef vax
- "-Dvax"
-#endif
-#ifdef sun
- "-Dmc68000",
- "-Dsun",
- "-Dmc68020"
-#endif
- }
-};
-
-struct arglist COMP_FLAGS;
-
-#ifdef FCC
-struct arglist LD_HEAD = {
-#ifdef ACK_BIN
- 2,
- {
- "~head_em",
- "~head_cc"
- }
-#else ACK_BIN
-#ifdef sun
-#ifdef SunOs4
- 7,
-#else
- 5,
-#endif
- {
- "-e",
- "start",
- "-X",
-#ifdef SunOs4
- "-L/usr/lib/fsoft",
- "-Bstatic",
-#endif
- "/lib/crt0.o",
- "/lib/Fcrt1.o"
- }
-#endif
-#ifdef vax
- 2,
- {
- "-X",
- "/lib/crt0.o"
- }
-#endif
-#endif ACK_BIN
-};
-
-struct arglist LD_TAIL = {
-#ifdef ACK_BIN
-#ifdef sun
- 6,
- {
- "~tail_cc.1s",
- "~tail_cc.2g",
- "*m68020/tail_fp",
- "*m68020/tail_em",
- "~tail_mon",
- "*m68020/end_em"
- }
-#endif sun
-#ifdef vax
- 4,
- {
- "~tail_cc.1s",
- "~tail_cc.2g",
- "~tail_em",
- "~tail_mon"
- }
-#endif vax
-#else ACK_BIN
-#ifdef sun
- 2,
- {
- "~tail_ext",
- "-lc"
- }
-#endif
-#ifdef vax
- 2,
- {
- "~tail_em",
- "-lc"
- }
-#endif
-#endif ACK_BIN
-};
-#endif FCC
-
-#ifdef FPC
-struct arglist LD_HEAD = {
-#ifdef ACK_BIN
- 2,
- {
- "~head_em",
-#ifdef vax
- "~head_pc"
-#endif
-#ifdef sun
- "*m68020/head_pc"
-#endif
- }
-#else ACK_BIN
-#ifdef sun
-#ifdef SunOs4
- 7,
-#else
- 5,
-#endif
- {
- "-e",
- "begtext",
- "-X",
-#ifdef SunOs4
- "-L/usr/lib/fsoft",
- "-Bstatic",
-#endif
- "~head_em",
- "~head_pc"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "-X",
- "~head_em",
- "~head_pc"
- }
-#endif vax
-#endif ACK_BIN
-};
-struct arglist LD_TAIL = {
-#ifndef ACK_BIN
-#ifdef sun
- 3,
- {
- "~tail_pc",
- "~tail_ext",
- "-lc"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "~tail_pc",
- "~tail_em",
- "-lc"
- }
-#endif vax
-#else ACK_BIN
-#ifdef sun
- 5,
- {
- "*m68020/tail_pc",
- "*m68020/tail_fp",
- "*m68020/tail_em",
- "~tail_mon",
- "*m68020/end_em"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "~tail_pc",
- "~tail_em",
- "~tail_mon"
- }
-#endif vax
-#endif ACK_BIN
-};
-#endif FPC
-
-#ifdef FM2
-struct arglist LD_HEAD = {
-#ifdef ACK_BIN
- 2,
- {
- "~head_em",
- "~head_m2"
- }
-#else ACK_BIN
-#ifdef sun
-#ifdef SunOs4
- 7,
-#else
- 5,
-#endif
- {
- "-e",
- "begtext",
- "-X",
-#ifdef SunOs4
- "-L/usr/lib/fsoft",
- "-Bstatic",
-#endif
- "~head_em",
- "~head_m2"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "-X",
- "~head_em",
- "~head_m2"
- }
-#endif vax
-#endif ACK_BIN
-};
-struct arglist LD_TAIL = {
-#ifndef ACK_BIN
-#ifdef sun
- 3,
- {
- "~tail_m2",
- "~tail_ext",
- "-lc"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "~tail_m2",
- "~tail_em",
- "-lc"
- }
-#endif vax
-#else ACK_BIN
-#ifdef sun
- 5,
- {
- "~tail_m2",
- "*m68020/tail_fp",
- "*m68020/tail_em",
- "~tail_mon",
- "*m68020/end_em"
- }
-#endif sun
-#ifdef vax
- 3,
- {
- "~tail_m2",
- "~tail_em",
- "~tail_mon"
- }
-#endif vax
-#endif ACK_BIN
-};
-#endif FM2
-
-#if ACK_BIN && !vax
-#ifdef sun
-struct arglist def_align = {
- 5,
- {
- "-a0:4",
- "-a1:4",
- "-a2:0x20000",
- "-a3:4",
- "-b0:0x2020"
- }
-};
-
-struct arglist n_align = {
- 5,
- {
- "-a0:4",
- "-a1:4",
- "-a2:0x20000",
- "-a3:4",
- "-b0:0x2000"
- }
-};
-
-struct arglist N_align = {
- 5,
- {
- "-a0:4",
- "-a1:4",
- "-a2:4",
- "-a3:4",
- "-b0:0x2000"
- }
-};
-#endif sun
-
-struct arglist *sect_align = &def_align;
-
-#endif ACK_BIN && !vax
-
-char *o_FILE = "a.out"; /* default name for executable file */
-
-#define remove(str) ((noexec || unlink(str)), (str)[0] = '\0')
-#define cleanup(str) (str && str[0] && remove(str))
-#define init(al) ((al)->al_argc = 1)
-
-char ProgCall[128];
-
-struct arglist SRCFILES;
-struct arglist LDFILES;
-struct arglist GEN_LDFILES;
-
-int RET_CODE = 0;
-
-struct arglist LD_FLAGS;
-
-struct arglist CALL_VEC;
-
-int o_flag = 0;
-int c_flag = 0;
-int v_flag = 0;
-int O_flag = 0;
-
-char *mkstr();
-char *malloc();
-char *alloc();
-char *extension();
-
-USTRING ofile;
-USTRING BASE;
-USTRING tmp_file;
-
-int noexec = 0;
-
-extern char *strcat(), *strcpy(), *mktemp(), *strchr();
-
-trapcc(sig)
- int sig;
-{
- signal(sig, SIG_IGN);
- if (kids != -1) kill(kids, sig);
- cleanup(ofile);
- cleanup(tmp_file);
- exit(1);
-}
-
-#ifdef FCC
-#define lang_suffix() "c"
-#ifndef ACK_BIN
-#define comp_name() "*cemcom_ce"
-#else
-#ifdef vax
-#define comp_name() "~cemcom_ce"
-#endif
-#ifdef sun
-#define comp_name() "*m68020/cemcom_ce"
-#endif
-#endif ACK_BIN
-#endif FCC
-
-#ifdef FM2
-#define lang_suffix() "mod"
-#ifndef ACK_BIN
-#define comp_name() "*m2_ce"
-#else
-#ifdef vax
-#define comp_name() "~m2_ce"
-#endif
-#ifdef sun
-#define comp_name() "*m68020/m2_ce"
-#endif
-#endif ACK_BIN
-#endif FM2
-
-#ifdef FPC
-#define lang_suffix() "p"
-#ifndef ACK_BIN
-#define comp_name() "*pc_ce"
-#else
-#ifdef vax
-#define comp_name() "~pc_ce"
-#endif
-#ifdef sun
-#define comp_name() "*m68020/pc_ce"
-#endif
-#endif ACK_BIN
-
-#endif FPC
-
-
-#ifdef FCC
-int
-lang_opt(str)
- char *str;
-{
- switch(str[1]) {
- case '-': /* debug options */
- case 'w': /* disable warnings */
- case 'R': /* strict K&R C. */
- append(&COMP_FLAGS, str);
- return 1;
- }
- return 0;
-}
-#endif FCC
-
-#ifdef FM2
-int
-lang_opt(str)
- char *str;
-{
- switch(str[1]) {
- case '-': /* debug options */
- case 'w': /* disable warnings */
- case 'R': /* no runtime checks */
- case 'W': /* add warnings */
- case 'L': /* no line numbers */
- case 'A': /* extra array bound checks */
- case '3': /* only accept 3rd edition Modula-2 */
- append(&COMP_FLAGS, str);
- return 1;
- case 'I':
- append(&COMP_FLAGS, str);
- break; /* !!! */
- case 'U': /* underscores in identifiers allowed */
- if (str[2] == '\0') {
- append(&COMP_FLAGS, str);
- return 1;
- }
- break;
- case 'e': /* local extension for Modula-2 compiler:
- procedure constants
- */
- str[1] = 'l';
- append(&COMP_FLAGS, str);
- return 1;
- }
- return 0;
-}
-#endif FM2
-
-#ifdef FPC
-int
-lang_opt(str)
- char *str;
-{
- switch(str[1]) {
- case '-': /* debug options */
- case 'a': /* enable assertions */
- case 'd': /* allow doubles (longs) */
- case 'i': /* set size of integer sets */
- case 't': /* tracing */
- case 'w': /* disable warnings */
- case 'A': /* extra array bound checks */
- case 'C': /* distinguish between lower case and upper case */
- case 'L': /* no FIL and LIN instructions */
- case 'R': /* no runtime checks */
- append(&COMP_FLAGS, str);
- return 1;
- case 'u':
- case 'U':
- /* underscores in identifiers */
- case 's':
- /* only compile standard pascal */
- case 'c':
- /* C type strings */
- if (str[2] == '+' && str[3] == '\0') {
- str[2] = 0;
- append(&COMP_FLAGS, str);
- return 1;
- }
- }
- return 0;
-}
-#endif FPC
-
-main(argc, argv)
- char *argv[];
-{
- char *str;
- char **argvec;
- int count;
- char *ext;
- register struct arglist *call = &CALL_VEC;
- char *file;
- char *ldfile = 0;
- USTRING COMP;
- int compile_cnt = 0;
-
- setbuf(stdout, (char *) 0);
- basename(*argv++,ProgCall);
- strcat(INCLUDE, ROOT_DIR);
-#ifdef FM2
- strcat(INCLUDE, M2DEF);
-#endif FM2
-#ifdef FCC
-#ifdef ACK_BIN
- strcat(INCLUDE, CCINCL);
-#else
- INCLUDE[0] = '\0';
-#endif ACK_BIN
-#endif FCC
-#ifdef FPC
- INCLUDE[0] = '\0';
-#endif FPC
- strcpy(COMP,comp_name());
-
- if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
- signal(SIGHUP, trapcc);
- if (signal(SIGINT, SIG_IGN) != SIG_IGN)
- signal(SIGINT, trapcc);
- if (signal(SIGQUIT, SIG_IGN) != SIG_IGN)
- signal(SIGQUIT, trapcc);
- while (--argc > 0) {
- if (*(str = *argv++) != '-') {
- append(&SRCFILES, str);
- continue;
- }
-
- if (lang_opt(str)) {
- }
- else switch (str[1]) {
-
- case 'c': /* stop after producing .o files */
- c_flag = 1;
- break;
- case 'D': /* preprocessor #define */
- case 'U': /* preprocessor #undef */
- append(&CPP_FLAGS, str);
- break;
- case 'I': /* include directory */
- append(&CPP_FLAGS, str);
- break;
- case 'o': /* target file */
- if (argc-- >= 0) {
- o_flag = 1;
- o_FILE = *argv++;
- ext = extension(o_FILE);
- if (ext != o_FILE && ! strcmp(ext, lang_suffix())
-#ifndef ACK_BIN
- || !strcmp(ext, "s")
-#endif
- ) {
- error("-o would overwrite %s", o_FILE);
- }
- }
- break;
- case 'u': /* mark identifier as undefined */
- append(&LD_FLAGS, str);
- if (argc-- >= 0)
- append(&LD_FLAGS, *argv++);
- break;
- case 'O': /* use built in peephole optimizer */
- if (! O_flag) strcat(COMP, "opt");
- O_flag = 1;
- break;
- case 'v': /* verbose */
- v_flag++;
- if (str[2] == 'n')
- noexec = 1;
- break;
- case 'l': /* library file */
- append(&SRCFILES, str);
- break;
- case 'M': /* use other compiler (for testing) */
- strcpy(COMP, str+2);
- break;
-#if ACK_BIN && !vax
- case 'n': /* text portion sharable, read-only. No
- demand paging
- */
- sect_align = &n_align;
- break;
- case 'N': /* text portion not sharable, not read-only */
- sect_align = &N_align;
- break;
- case 'd': /* force definition of common storage */
- append(&LD_FLAGS, "-c");
- break;
-#endif ACK_BIN && !vax
- default:
-#ifdef sun
- if (! strcmp(str, "-sun3")) {
- /* SunOs4.0 make passes this flag to
- $(CC). Ignore it silently.
- */
- break;
- }
-#endif
- if (strchr(TO_LD, str[1]) == 0)
- warning("%s flag ignored", str);
- else {
- append(&LD_FLAGS, str);
- }
- break;
- }
- }
-
- if (ecount) exit(1);
-
-#if FCC && !ACK_BIN
- append(&COMP_FLAGS, "-L"); /* disable line number and filename admin */
-#endif FCC && !ACK_BIN
- count = SRCFILES.al_argc;
- argvec = &(SRCFILES.al_argv[0]);
- while (count-- > 0) {
- ext = extension(*argvec);
- if (*argvec[0] != '-' &&
- ext != *argvec++ && (! strcmp(ext, lang_suffix())
-#ifndef ACK_BIN
- || !strcmp(ext, "s")
-#endif
- )) {
- compile_cnt++;
- }
- }
-
- if (compile_cnt > 1 && c_flag && o_flag) {
- warning("-o flag ignored");
- o_flag = 0;
- }
-
- count = SRCFILES.al_argc;
- argvec = &(SRCFILES.al_argv[0]);
- while (count-- > 0) {
- register char *f;
- basename(file = *argvec++, BASE);
-
- ext = extension(file);
-
- if (file[0] != '-' &&
- ext != file && (!strcmp(ext, lang_suffix())
-#ifndef ACK_BIN
- || !strcmp(ext, "s")
-#endif
- )) {
-#ifndef ACK_BIN
- if (compile_cnt > 1)
- printf("%s:\n", file);
-#else
- printf("%s\n", file);
-#endif
-
- ldfile = c_flag ? ofile : alloc((unsigned)strlen(BASE)+3);
- if (
-#ifdef FCC
- !strcmp(ext, "s") &&
-#endif
- needsprep(file)) {
- strcpy(tmp_file, TMP_DIR);
- strcat(tmp_file, "/F_XXXXXX");
- mktemp(tmp_file);
- init(call);
- append(call, CPP);
- concat(call, &CPP_FLAGS);
- append(call, INCLUDE);
- append(call, file);
- if (runvec(call, tmp_file)) {
- file = tmp_file;
- }
- else {
- remove(tmp_file);
- tmp_file[0] = '\0';
- continue;
- }
- }
- init(call);
- if (o_flag && c_flag) {
- f = o_FILE;
- }
- else f = mkstr(ldfile, BASE, ".o", (char *)0);
-#ifndef ACK_BIN
- if (strcmp(ext, "s")) {
-#endif
- append(call, COMP);
-#ifdef FCC
- concat(call, &CPP_FLAGS);
-#endif
- concat(call, &COMP_FLAGS);
-#if FM2 || FCC
- append(call, INCLUDE);
-#endif
- append(call, file);
- append(call, f);
-#ifndef ACK_BIN
- }
- else {
- append(call, AS);
- append(call, "-o");
- append(call, f);
-#ifdef sun
- append(call, "-mc68020");
-#endif
- append(call, file);
- }
-#endif
- if (runvec(call, (char *) 0)) {
- file = f;
- }
- else {
- remove(f);
- continue;
- }
- cleanup(tmp_file);
- tmp_file[0] = '\0';
- }
-
- else if (file[0] != '-' &&
- strcmp(ext, "o") && strcmp(ext, "a")) {
- warning("file with unknown suffix (%s) passed to the loader", ext);
- }
-
- if (c_flag)
- continue;
-
- append(&LDFILES, file);
- if (ldfile) {
- append(&GEN_LDFILES, ldfile);
- ldfile = 0;
- }
- }
-
- /* *.s to a.out */
- if (RET_CODE == 0 && LDFILES.al_argc > 0) {
-#ifndef ACK_BIN
- if (compile_cnt > 1) {
- printf("Linking:\n");
- }
-#endif
- init(call);
- append(call, LD);
- concat(call, &LD_HEAD);
- concat(call, &LD_FLAGS);
- append(call, "-o");
-#if ACK_BIN && !vax
- strcpy(tmp_file, TMP_DIR);
- strcat(tmp_file, "/LF_XXXXXX");
- mktemp(tmp_file);
- append(call, tmp_file);
- concat(call, sect_align);
-#else ACK_BIN && !vax
- append(call, o_FILE);
-#endif ACK_BIN && !vax
- concat(call, &LDFILES);
- concat(call, &LD_TAIL);
-#if ACK_BIN && !vax
- if (! runvec(call, (char *) 0)) {
- cleanup(tmp_file);
- exit(RET_CODE);
- }
- init(call);
- append(call, CV);
- append(call, tmp_file);
- append(call, o_FILE);
-#endif ACK_BIN && !vax
- if (runvec(call, (char *) 0) && GEN_LDFILES.al_argc == 1)
-#ifdef ACK_BIN
- ;
-#else
- remove(GEN_LDFILES.al_argv[0]);
-#endif ACK_BIN
-#if ACK_BIN && !vax
- cleanup(tmp_file);
-#endif ACK_BIN && !vax
- }
- exit(RET_CODE);
-}
-
-needsprep(name)
- char *name;
-{
- int file;
- char fc;
-
- file = open(name,0);
- if (file < 0) return 0;
- if (read(file, &fc, 1) != 1) fc = 0;
- close(file);
- return fc == '#';
-}
-
-char *
-alloc(u)
- unsigned u;
-{
- char *p = malloc(u);
-
- if (p == 0)
- panic("no space");
- return p;
-}
-
-append(al, arg)
- struct arglist *al;
- char *arg;
-{
- if (!arg || !*arg) return;
- if (al->al_argc >= MAXARGC)
- panic("argument list overflow");
- if (*arg == '~' || *arg == '*') {
- char *p;
- char *lb = *arg == '~' ? LIBDIR : BINDIR;
- p = alloc((unsigned)strlen(ROOT_DIR)+strlen(lb)+strlen(arg+1)+1);
- strcpy(p, ROOT_DIR);
- strcat(p, lb);
- strcat(p, arg+1);
- arg = p;
- }
- al->al_argv[(al->al_argc)++] = arg;
-}
-
-concat(al1, al2)
- struct arglist *al1, *al2;
-{
- register i = al2->al_argc;
- register char **p = &(al1->al_argv[al1->al_argc]);
- register char **q = &(al2->al_argv[0]);
-
- if ((al1->al_argc += i) >= MAXARGC)
- panic("argument list overflow");
- while (i-- > 0) {
- if (**q == '~' || **q == '*') {
- char *lb = **q == '~' ? LIBDIR : BINDIR;
- *p = alloc((unsigned)strlen(ROOT_DIR)+strlen(lb)+strlen(*q+1)+2);
- strcpy(*p, ROOT_DIR);
- strcat(*p, lb);
- strcat(*p++, *q+1);
- q++;
- }
- else *p++ = *q++;
- }
-}
-
-/*VARARGS*/
-char *
-mkstr(va_alist)
- va_dcl
-{
- va_list ap;
- char *dst;
-
- va_start(ap);
- {
- register char *p;
- register char *q;
-
- dst = q = va_arg(ap, char *);
- p = va_arg(ap, char *);
-
- while (p) {
- while (*q++ = *p++);
- q--;
- p = va_arg(ap, char *);
- }
- }
- va_end(ap);
-
- return dst;
-}
-
-basename(str, dst)
- char *str;
- register char *dst;
-{
- register char *p1 = str;
- register char *p2 = p1;
-
- while (*p1)
- if (*p1++ == '/')
- p2 = p1;
- p1--;
- while (*p1 != '.' && p1 >= p2) p1--;
- if (p1 >= p2) {
- *p1 = '\0';
- while (*dst++ = *p2++);
- *p1 = '.';
- }
- else
- while (*dst++ = *p2++);
-}
-
-char *
-extension(fn)
- char *fn;
-{
- register char *c = fn;
-
- while (*c++) ;
- while (*--c != '.' && c >= fn) { }
- if (c++ < fn || !*c) return fn;
- return c;
-}
-
-runvec(vec, outp)
- struct arglist *vec;
- char *outp;
-{
- int pid, status;
-
- if (v_flag) {
- pr_vec(vec);
- putc('\n', stderr);
- }
- if ((pid = fork()) == 0) { /* start up the process */
- if (outp) { /* redirect standard output */
- close(1);
- if (creat(outp, 0666) != 1)
- panic("cannot create output file");
- }
- ex_vec(vec);
- }
- if (pid == -1)
- panic("no more processes");
- kids = pid;
- wait(&status);
- if (status) switch(status & 0177) {
- case SIGHUP:
- case SIGINT:
- case SIGQUIT:
- case SIGTERM:
- case 0:
- break;
- default:
- error("%s died with signal %d\n", vec->al_argv[1], status&0177);
- }
- kids = -1;
- return status ? ((RET_CODE = 1), 0) : 1;
-}
-
-/*VARARGS1*/
-error(str, s1, s2)
- char *str, *s1, *s2;
-{
- fprintf(stderr, "%s: ", ProgCall);
- fprintf(stderr, str, s1, s2);
- putc('\n', stderr);
- ecount++;
-}
-
-/*VARARGS1*/
-warning(str, s1, s2)
- char *str, *s1, *s2;
-{
- fprintf(stderr, "%s: (warning) ", ProgCall);
- fprintf(stderr, str, s1, s2);
- putc('\n', stderr);
-}
-
-panic(str)
- char *str;
-{
- error(str);
- trapcc(SIGINT);
-}
-
-pr_vec(vec)
- register struct arglist *vec;
-{
- register char **ap = &vec->al_argv[1];
-
- vec->al_argv[vec->al_argc] = 0;
- fputs(*ap, stderr);
- while (*++ap) {
- putc(' ', stderr);
- fputs(*ap, stderr);
- }
-}
-
-extern int errno;
-
-ex_vec(vec)
- register struct arglist *vec;
-{
- if (noexec)
- exit(0);
- vec->al_argv[vec->al_argc] = 0;
- execv(vec->al_argv[1], &(vec->al_argv[1]));
- if (errno == ENOEXEC) { /* not an a.out, try it with the SHELL */
- vec->al_argv[0] = SHELL;
- execv(SHELL, &(vec->al_argv[0]));
- }
- if (access(vec->al_argv[1], 1) == 0) {
- /* File is executable. */
- error("cannot execute %s", vec->al_argv[1]);
- } else {
- error("%s is not executable", vec->al_argv[1]);
- }
- exit(1);
-}
+++ /dev/null
-afcc.1
-afm2.1.src
-fcc.1
-fm2.1.src
-fpc.1
+++ /dev/null
-.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.
+++ /dev/null
-.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.
+++ /dev/null
-.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.
+++ /dev/null
-.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.
+++ /dev/null
-.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.
+++ /dev/null
-/* 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);
-}