Robert Wells <rwells@bbn-spca> (01/28/85)
We have been using the Whitesmiths C compiler for IBM VM/CMS for about six months. It costs $4-5K, and I think it works on DOS and MVS too. The only other 370 compiler we have heard praised is the Waterloo compiler, which we have on order. The address for Whitesmiths is Whitesmiths Ltd. 97 Lowell Rd. Concord, MA (617)-369-8499 To its credit we have been able to port a large C program (>120k source lines) and get it running correctly, and have encountered only a couple of bugs in the compiler and support library; I could send details to anyone really interested. The compiler's dialect is basically the same as that of the other Whitesmiths compilers, so if your code is portable to the others, it should go here without big problems. The library unfortunately conforms with the Whitesmiths libraries on other machines, rather than with Unix stdio conventions; exit takes 1 for success and 0 for failure, fopen takes a pointer to a FIO (sic) structure rather than returning an allocated FILE structure, and so forth. The routines almost all either have different names or different arguments. This didn't matter for our main application, but has been a pain for porting hack utilities. Our big problem with the current release is that it generates non-reentrant code, meaning each user has to have a separate copy of the code rather than using a shared segment. They claim there will be a test release in February/March that fixes this as well as other problems. We are eagerly awaiting this next release. We are using GDDM (the principle ibm mainframe graphics package) with Whitesmiths C; for each GDDM function we wanted to call, we wrote a ~10 line assembler routine to pipefit the different calling conventions. Between the Whitesmiths manual and the appendixes to the GDDM manual, there is enough detail to match up the calling sequences. Mostly it involves setting up a block of argument pointers corresponding to the arguments on the C stack. All regular C routine names are prefixed by '$' for the loader, so the assembler interface routines essentially just get the GDDM name prefixed by '$', and truncated to 8 characters. Another GDDM interface approach would have been to set up a single assembler routine to call the GDDM system programmers' interface entry point, with a pointer to the argument pointer block. The argument pointer block could then be set up in little C routines that would front end for each GDDM function; the initial argument in the block is an integer code for the desired GDDM function. This would minimize the assembler used, which is probably good, although those 40-60 assembler routines were pretty easy to write and read, since they are so similar and so single minded. In conclusion, the Whitesmiths C compiler is a serious contender on VM/CMS. This is a new area for commercial C compilers; 15 months ago there were no serious C compilers for this environment. Long term the continued lack of stdio compatibility is going to erode Whitesmiths market share in all environments, including this one. If the Waterloo compiler generates tolerable code for a reasonable C dialect, generates reentrant code, and has a stdio compatible library, we will probably convert over to it eventually just for long term convenience in porting little programs. -Robert Wells, BBN Software Products (rwells@bbn-spca.arpa)