This disk contains a limited shareware C compiler for your use and enjoyment. You should find a number of directories on this disk which contain the following files: bin cc.ttp - translates C code to intermediate code as.ttp - translates intermediate code to machine code hd.ttp - hex dump utility cat.ttp - file concatenation utility grep.ttp - utility to search for a string in a file ss.ttp - simple spreadsheet program ue.ttp - public domain microEmacs editor mkt.bat - batch program to compile "x.c" into "x.ttp" mkp.bat - batch program to compile "x.c" into "x.prg" obj.bat - batch program to compile "x.c" into "x.s" lib prg.s - startup intermediate code for .PRG programs ttp.s - startup intermediate code for .TTP programs lib.a - library used to create .TTP programs gem.a - library used to create .PRG programs lib.c - c code for lib.a gem.c - c code for gem.a stdio.h - standard i/o header gem.h - header for GEM AES routines src ss.c - source for a simple spreadsheet program cat.c - source the file concatenation program grep.c - source for the string search program hd.c - source for the hex dump program You will also find the following files in the root directory: rmd209.acc - public domain ramdisk accessory command.tos - public domain command line interpreter boot.bat - copy tools into the ramdisk The compiler (cc.ttp) is preprocessor, parser, and code generator all rolled into a single program. Please refer to the "C Programming Language" by K&R. The compiler has the following features, limitations, and shortcomings: features - symbol names can be any length - built-in "trap" generator "trap(NUM, arg1, arg2, ...)" limitations - Only globals can be (very carefully) initialized. No type checking is done between the initializing value and the type of the global being initialized. This is crude but it works. Accepted initializer values are (long or short) constant expressions, strings, and symbols. what's missing - type specifiers: float double auto static - goto and labels - preprocessor: #undef and the #if family - structure assignments The output of the compiler is ascii text and each line maps into a single instruction. This intermediate code is as terse as I can make it (to save disk space) but is still readable (by me at least). (I have plans to improve this to make things easier for an optimizer). The output of the compiler is always placed in a file called "yc.out" in the current directory. Any error messages are displayed on the screen. The assembler (as.ttp) reads the intermediate code in a single pass and keeps everything in memory before generating the file "ya.out" in the current directory. The size limit of the program to be compiled is basically the size of the available memory. The "ya.out" file should be renamed to one of the standard extensions (.TTP, .PRG, .TOS) before executing it. The command line of the assembler should always list a startup file first (see ttp.s or prg.s) then the intermediate files of the program, then "-L" followed by any libraries. Any errors encountered by the assembler terminates assembly. A "-M" argument to the assembler will generate an address map of all global symbols in the file "ya.map". A library is simply intermediate code, but is handled differently by the assembler than regular intermediate code. Intermediate code (the files before "-L") are read and processed directly; all symbols and code are accepted without question. A library is read without processing until a symbol is found that is needed but not defined. From that point on, the library is read and processed until the next symbol is encountered. At the next symbol, the "needed but not defined" test is applied again and processing or scanning continues as necessary. The libraries include TOS, VDI, and AES routines taken from the Abacus books. I plan to document the library routines later. I have also included basic routines. I have included the source for lib.a and gem.a (see lib.c and gem.c). A lot of library routines you would expect to see are missing, and for that I apologize. Creating .TTP programs is straightforward and better tested than .PRG (GEM) program creation. In a .TTP process, the main function is called with the standard arguments: main(argc, argv) int argc; char *argv[]; Redirection of input and output using >outfile, >>appendfile, or