Hi all.
I'm new to this list - interests GIS, functional programming, CAS. I was
pleased to discover the other day that GCL and Maxima had been ported to
Windows via Mingw32, saddened to note that the person responsible for the
port has apparently died.
Thinking to try the latest versions of both GCL and Maxima on Windows, I
tried building GCL 2.4.0 with a Cygwin hosted Mingw32 compiler but
discovered that vital files were missing. Stepping back to 2.3.8 cured that
problem, but there was a problem with a macro - NULL_OR_ON_C_STACK - which I
worked around (see the messages I posted on comp.lang.lisp included below)
to obtain a working text mode only version of GCL 2.3.8 (without the TCL/TK
facilities or PCL).
My questions are:
1. Can anyone shed light on the NULL_OR_ON_C_STACK issue?
2. Is GCL 2.3.8 beta sufficient for the latest Maxima version?
3. What is the reason for the apparent lack of interest in GCL compared with
other LISP's? (Am I wasting my time on this?)
4. Has anyone built Maxima with Corman CL?
5. Has anyone been able to obtain any further information on building
Mingw32 GCL other than that to be found in the source tarballs?
Cheers
Mike Thomas.
=====================================
Hi there.
Building GCL version 2.3.6 as Cygwin hosted mingw:
./configure --enable-machine=mingw
I get to the place where it starts raw_gcl.exe:
-----------------------------------------------------------------
../unixport/raw_gcl.exe ../unixport/ -libdir
c:/lang/source/mingw32/gcl-2.3.8/ <
foo
GCL (GNU Common Lisp) April 1994 32768 pages
Unrecoverable error: NULL_OR_ON_C_STACK macro invalid.
abnormal program termination
-----------------------------------------------------------------
This macro is defined as:
-----------------------------------------------------------------
/* on most machines this will test in one instruction
if the pointe/r is on the C stack or the 0 pointer
in winnt our heap starts at DBEGIN
*/
#define NULL_OR_ON_C_STACK(y)\
(((unsigned int)(y)) == 0 || \
(((unsigned int)(y)) < DBEGIN && ((unsigned int)(y)) &0xf000000))
-----------------------------------------------------------------
and is used in main.c like:
-----------------------------------------------------------------
initlisp()
{
int j;
if (NULL_OR_ON_C_STACK(&j) == 0
|| NULL_OR_ON_C_STACK(Cnil) != 0
|| (((unsigned long )core_end) !=0
&& NULL_OR_ON_C_STACK(core_end) != 0))
{ /* check person has correct definition of above */
error("NULL_OR_ON_C_STACK macro invalid");
}
............
-----------------------------------------------------------------
I found the description of this macro cryptic. Can anyone explain what is
going on here?
Also, does anyone know why "unexnt.h" does not appear in the CVS repository
for GCL 2.4?
Cheers
Mike Thomas.
=====================================
Incidentally, I forgot to include some debugging out put from main.c just
before the test:
addr j = 22ff3c, DBEGIN = 10000000, Cnil = 500cc0, core_end = 100c8000
(all numbers are hexadecimal).
What is the significance of the apparently arbitrary use of 0xf000000 in the
macro and the definition of DBEGIN as 0x10000000?
My computer has 392M of RAM, if that is relevant.
=====================================
Even more interesting - commenting out the tests in main .c results in a
version of saved_gcl.exe which appears to work.