Siod version 3.5 of MAY-1997. This and previous versions of SIOD have been ported to small machines running MS-DOS, CPM, and other operating systems. Refer to the FAQ and software library sections of the machine specific news group, mailing lists, and ftp or web sites, searching for the string SIOD. The general approach is usually to start out with a kernel using sample.c and avoiding the highly "unix" conditionalized slibu.c and then adding OS specific customizations as required. I use the term "unix" loosely, because slibu.c also takes in VMS and WIN32 tweeks when the functionality is roughly equivalent. To get an idea of what size SIOD would take on small machines such as palm-tops and pda's these figures taken from the VAX/VMS linker map file are a useful guide. The VAX being one of the more space efficient 32-bit architectures from the late 1970's. The size of the SIOD runtime library is 89,600 bytes on disk. The size of a runtime object is 12 bytes. Although on a 16-bit machine this could be reduced to 6 or maybe even 5 bytes while reducing the basic numeric precision from the 64-bit floating point number to the less accurate 32-bit representation. At startup with -n0 (no pre-consed numbers) the system allocates 1142 objects, mostly symbols and built-in procedures. Note that the memory is allocated from the operating system in larger chunks, determined by the -h setting. The default values of these startup flags being set in the siod.c source file. The two most important uses of space are (1) string constants, mainly the names of symbols, procedures, error message and module version strings, and (2) executable code. In a very tight machine one could imagine these constant strings being allocated from a table in a disk file, although given that palm-tops and pda's don't have disk there would be nothing to gain assuming the operating system was already smart enough to memory map the objects efficiently. String constant breakdown by module, in bytes: SIOD.C 44 SLIB.C 3671 SLIBA.C 2905 TRACE.C 195 SLIBU.C 1884 MD5.C 0 --------------- total 8699 Executable code size by module, in bytes: SIOD.C 51 SLIB.C 32890 SLIBA.C 25284 TRACE.C 1527 SLIBU.C 11034 MD5.C 3824 --------------- total 74610