C compiler for IBM -- Whitesmiths on VM/CMS

Robert Wells rwells at bbn-spca
Mon Jan 28 16:53:48 AEST 1985


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 at bbn-spca.arpa)



More information about the Comp.unix mailing list