When Clarion discontinued support for Topspeed Modula2 and C/C++ on Compuserve I rescued some of the more interesting bits and pieces and obtained permission from Pam Brechlin of Clarion to make them available on the web for the benefit of any remaining users of the Modula2 v3.xx compiler.
You download and use these files at your own risk. They are completely unsupported. They all seem to work here and I make them available now to do my bit to help keep Modula 2 alive.
|Fixes.doc||List of known problems and bugfixes in the Topspeed Modula2 compiler and libraries with suggested work arounds and corrections.|
|Fltpt.lzh||Replacement x87 inline floating point library by Jack Courtney - uses Topspeed calling convention and fixes bugs in SinH, TanH|
|Inlne.lzh||Demonstration of fast use of inline procedure|
|Vararg.lzh||Demonstration of subverting Modula procedures to take variable numbers of arguments|
|Paranoia.zip||Modified version of Paranoia floating point test routine intended to run under Topspeed Modula2|
|Quiner.mod||Program to print itself out - a pure QUINE done recursively in Modula 2|
A couple of notes on Topspeed Modula 2. It still generates pretty good 16bit code despite it's age. However, for numerical work it does have a minor problem in that the rounding mode is set to truncate towards zero and this can sometimes affect sensitive floating point code and increase the numerical error. It does support x87 REAL, LONGREAL and TEMPREAL formats so that you can hold accumulators to full hardware precision.
The OS/2 version of the compiler has a few quirks when used with multitasking threads and DLLs. It often fails to report the location of runtime errors correctly. I made a small modification to the runtime library to add the length of the failing code segment to ERRORINF.$$$ which together with the utility FINDSEG.EXE by zzzzz provides an almost unambiguous way to locate failing code at runtime given the ERRORINF.$$$ files.
I also have a small utility intended to be run each time a program crashes to sweep up and save any ERRORINF.$$$ from the subdirectory structure and save them in subdirectory error complete with a summary file which logs the failures with date/time stamps.
I still do a small amount of commercial maintenance programming in Modula 2. I like the language, but few industrial users adopted it.