26/04/84 Graphics interface The standard APM graphics routines can now be called from C. See graftest.c for examples. 25/04/84 Debugging The compiler can now generate code to keep track of source line numbers during run time. The flag -l causes the line number at location 1000 hex in the APM to be updated, so error messages (e.g. bus error) can include it. The flag -L causes trap 15 instructions to be generated, so the software front panel commands n (step to next source line) and lnnn (continue to line nnn) can be used. 23/04/84 Some enhancements: A C event handler is now installed when a C program is loaded (and removed on exit). This transforms imp events into UNIX signals where possible. The signals supported are: name UNIX IMP interrupt SIGINT 0,1 console control Y illegal instruction SIGILL 0,4 floating point exception SIGFPE 1,4 bus error SIGBUS 0,2 segment violation SIGSEGV 0,3 address error bad system call SIGSYS 5,* Default action on all signals is to reinstall the original event handler and pass the buck to it. This means that C programs which do not concern themselves with signals can now be successfully terminated with control Y, without getting into **trouble. The exit routine now does a closeinput if the exit status is non-zero. This means that a C program being executed in a command file which fails (status != 0) aborts the command file. The startup routine, which parses the command line, also does some i/o redirection. Files can be associated with stdin, stdout and stderr using '<', '>', '2>'. C programs can now be installed in memory and reexecuted without reloading. This means that symbol definitions such as c68=c:c68 can be used, which speed up program execution considerably. 16/04/84 APM C Compiler v2 -- Preliminary release notice FDC A new version of the MIT C compiler, along with most of the UNIX C run-time system, is now available on the WEE filestore. Major changes (compared to OLD::C:CC): * The run-time system has been considerably expanded. The original UNIX sources have been used for the machine-independant C-subroutines (most of section 3 of the UNIX manuals). The system calls (section 2) have been implemented as far as possible on the APM. All of the calls are available, but some (such as fork()) just return an error code. * DEC-like floating-point routines (32 & 64 bit) are included, as are the UNIX section 3M maths functions. * To handle the expanded run-time system a new linker is available, which searches object module libraries and loads only those modules which satisfy undefined external references. * A code optimizer is available. It is not bug-free, and sometimes produces bad code. * Various utilities, mainly for inspecting object modules and managing libraries, are available. The compiler has been used successfully to compile itself on the APM, and to compile CProlog. Portability problems are restricted to those system calls involving forks, pipes, execs or detailed file operations like ioctl(2), and machine dependant code for parsing filenames etc. The symbol "apm" is predfined in the preprocessor, so conditional compilation like the following can be used: #ifdef apm char *tmpname = "$pcXXXXXX"; #else char *tmpname = "/tmp/pcXXXXXX"; #endif Numerous improvements and extensions are possible, but they will not be attempted until the APM multi-tasking operating system is operational. A simple C program can be compiled and linked as follows: C:DO C:CCL,prog This would compile file prog.c into prog.mob. C:DO is a simple command file executer, and C:CCL the corresponding command file to compile and link a single module program. Other possibilities are: C:CC - compile only C:CCO - compile and optimize C:CCOL - compile, optimize and link