virt.h

virt.h includes several of the standard header files. It then defines each of the objects and the functions described in earlier chapters. These headers are
#include <d:dos.h>
#include <d:stdlib.h>
#include <d:stdio.h>
#include <d:math.h>
#include <d:string.h>
#include <d:io.h>
#include <d:fcntl.h>
#include <d:errno.h>
#include <d:types.h>
#include <d:stat.h>
#include <d:iostream.h>

#define STACKLENGTH 16352

#define NDECS 10
#define ZERO (1.0E-8)
The disk 'd:' is where the headers are stored for compilation. It is a RAM disk in extended memory. Compilation is faster when reading headers from a RAM disk even on 386 machine. The d drive is also where $$$$vmem.tmp can be created. Recent versions of BC use precompiled headers, so you might want to remove the d: from the includes.

The variable STACKLENGTH is defined. You can increase this as needed up to 64k bytes in Turbo C++. This variable is not need for most programs since the 4096 byte stacklength is sufficient. You must turn off stack checking and resort to the huge model to avoid fixup overflow error messages[6]. This can be a dangerous thing to do in pointer intensive programs. Use the following statement in your main module before defining Dispatch to modify the stack length

unsigned int _stklen = STACKLENGTH;
The best advice regarding the stack is to try to limit the number of local matrices in any single function. This keeps the stack within the default 4096 bytes. Each local VMatrix takes 104 bytes off of the stack.

The variable NDECS is used in the conversions of strings to floats in the data IO functions. The variable ZERO is used in sweep and elementwise division. It can be reduced where needed.