[Info-vax] C History on VMS (was Re: C... the only winning move is not to play...)
Stephen Hoffman
seaohveh at hoffmanlabs.invalid
Wed Feb 12 12:04:59 EST 2014
On 2014-02-12 15:34:35 +0000, JohnF said:
> ...I think dcl is what all those str$functions we discussed were really
> written for. That is, but for digital's desire to provide string
> manipulation in dcl, they never would have bothered with that
> str$library. The C headers and stuff were more of an afterthought,
> i.e., as long as the library's there, might as well let C link it. But
> all other things equal, when writing C you're better advised to use
> standard C stuff if possible.
Some history and discssions of general and related structures...
DCL has its own supervisor-mode world; getting stuff compiled and
linked into that environment is a little odd. (It and the XQP are
probably two of the weirder parts of VMS, in terms of its general
run-time environment, and around debugging it.)
FWIW, none of the VMS and none of the (user-mode) language RTLs are
intended to be callable from any inner-mode code. (There were (are)
some security-clobbering hacks latent in the RTL calls that allowed
inner-mode to sort-of kind-of work, for those folks that were inclined
to open up leaks across the per-mode memory management protections.
Not recommended.)
I don't have the OpenVMS source listings handy to confirm it, but I'd
be surprised if there were RTL calls around.
As for the include files, the VMS-provided header files are common
source. The same SDL source file generates C, BASIC, Fortran and
others, and — with the most recent versions of SDL — also now DCL
symbolic constants. C was added to this list over time, and
particularly around the addition of the SYS$STARLET_C and SYS$LIB_C
libraries into OpenVMS. STARLETSD.TLB was also used by various
languages.
In terms of the per-language support within OpenVMS, C was effectively
an afterthought for most of the environments, as the first C compiler
and VAXCRTL library support only arrived somewhere around V4.4 IIRC.
That was well after the other languages. C is also somewhat weird on
OpenVMS in that it now has two libraries; the traditional user-mode
library that most languages have, and also its own kernel-mode library
that was implemented as part of the C system programming support that
arrived around OpenVMS V6.1 IIRC.
The STR$ and LIB$ calls are generally old. Many of the core routines
are older than V4.4. It wouldn't surprise me to learn that the history
of this stuff goes back further than VAX-11/VMS too, as here's the
XPORT library for TOPS
<http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp10/TOPS10_softwareNotebooks/vol08/AA-J201A-TK_XPORT_Programmers_Guide_Apr81.pdf>
The STR$ and LIB$ calls are useful in Macro, Bliss, Fortran and various
other languages. (Various Fortran code was is still fond of using
space-padded fixed-length strings, too.) The OTS$ calls was largely
for the compilers, but was and is available for other use.
More to make it a little easier for me to find these details for some
hypothetical next time a discussion of ancient VMS calls and ancient
run-time libraries (RTLs) arises, there are all sorts of related
shenanigans around the break-up of the VMSRTL run-time library are in
play here, too. The ancient VMSRTL omnibus library has a long and
checkered career:
<http://archive.org/stream/bitsavers_decvaxvms2ReleaseNotesMar80_3242450/AA-D015C-TE_VMS_2.0_Release_Notes_Mar80_djvu.txt>
<http://archive.org/stream/bitsavers_decvaxvms3leaseNotesV3.0May82_5458871/AA-D015D-TE_VAX-VMS_Release_Notes_V3.0_May82_djvu.txt>
<http://www.ibiblio.org/pub/academic/computer-science/history/pdp-11/hardware/micronotes/numerical/micronote36.txt>.
This VMSRTL stuff was in common use prior to VAX/VMS V4.0, when that
RTL was broken up into hunks; into separate RTLs. For completeness,
this was all before C existed on VMS, too.
--
Pure Personal Opinion | HoffmanLabs LLC
More information about the Info-vax
mailing list