``Bootstraping LISP'' means ``Creating a pure STD-LISP interpreter from scratch''. Here is how to do it:
Each of these C programs will create a part of the C source,
those
which will later be compiled by a C compiler and presumably
will be linked to get the actual executable program.
C compilation
of any LISP program.
(Please note that this is not so for lisp1.c
when you later perform a LISP code compilation than
cr1 has to be fired again to reproduce
lisp1.c.
C
compiler and produce a true C source that will be
C compilable.
We hear you groaning, but this was necessary, again, to keep true portability, since systems with different operating system have different directory and file access strings. (The trivial example is UNIX versus DOS, one has a slash, the other has a backslash for directories)
The bit fields come into account in the tag of a dotted pair, where various informations have to be hold about that dotted pair (e.g. one bit is for garbage collection marking). It is cute and elegant to use in this case bit-fields, but unfortunately some compilers generate a terrible code for bit-field accesses. (e.g. some of them perform a number of shift right operations to get the desired bit to the least significant bit position and then test it, which is awful!). But another alternative is to use just a byte and mask the bits of it. Then setting will correspond to a bitwise OR, and the testing will correspond to bitwise AND operation among the tested byte containing the tested bit and the selection mask byte.
Furthermore the IBM-PC is
using the 80x86 P-chip which allows pointers
to sit at addresses that are not zero (modulo 4).
The code makes use of this (non-portable) feature
if the flag IBMPC is set to 1. If you don't have
an 80x86 or if you get errors like
(bus-error, segmentation fault) turn this flag to
zero.
data structures may have different sizes on different C compilers, because of the underlying hardware. Therefore it is necessary to determine how your compiler acts. We need this information because this LISP implementation does not simply use malloc or calloc when it has to create a LISP data object, for further details see the chapter on ``The Dynamic Structure''.
what the libraries will be is something system dependent, so since you got your hands on a C compiler, we have to assume that you are fully capable of creating an executable code after a C compilation.