[Info-vax] Software does wear out, was: Re: Raid Controller in I64 ans Alpha(MSA$UTIL)

Paul Sture nospam at sture.ch
Mon Dec 2 09:42:43 EST 2013


David Froble wrote:

> Codis uses an 8 byte string of the format "yyyymmdd" for dates.  I 
> seriously doubt we'll have any problems for the next 8000 years.

Perhaps this is the point to tell my story about dates.

Yes, we were using "yymmdd" for dates but this was back in 1983/4 and we
we were used to systems which only had a lifespan of a few years before
they got migrated or rewritten to take advantage of new hardware and the
whims of management.  Or simply the original supplier disappearing. In
those days you were often facing a rewrite if you wanted to migrate to a
larger system within IBM's product range, so a rewrite rather than a
port was quite normal.

Being a COBOL shop we decided to hold dates as packed decimal fields.
As opposed to the integer data type these behaved nicely when combined
with text fields as part of RMS keys; the correct sort order was
preserved.

Then one day we started getting ACCVIO errors in our application and
these seemed to be date related.

Here's where the point about a software support contract serviced by
competent people who know their product comes in as well, for they very
quickly tracked this down.  Without access to the library sources we
would have been very stuck trying to diagnose this ourselves.

The problem was down to the third party library routines providing
support for several calling languages, namely FORTRAN, COBOL and BASIC.

Hold on a minute though.  In this context "FORTRAN" meant FORTRAN IV and
strings passed as byte arrays *and* FORTRAN-77 which had character
strings which were by default passed by descriptor.  Repeat and rinse
with COBOL. because the early COBOL compilers available for VMS only
supported parameters passed by reference.  I don't know what the
available flavours of BASIC for VMS did at that time, but I gathered
there was quite a bit of work involved to get BASIC support with those
third party libraries.

It turned out that to cope with the above scenario, the library routines
were working out whether buffers were arriving vy reference or by
descriptor.  Those dates suddenly looked like descriptors to the library
routines, hence the ACCVIOs.

The solution was simple, because by that time VAX-COBOL did support
calling by descriptor.  Yours truly simply did a bit of mass editing to
ensure that key and file buffers were passed by descriptor rather than
COBOL's default of by reference.

Meanwhile the software house responsible for the offending libraries did
put further checks into their routines along the lines of  "if it looks
like a descriptor, is the address it's pointing to a valid one?", but
once bitten, twice shy, we weren't taking the risk of having that bug
bite us again.



-- 
Paul Sture




More information about the Info-vax mailing list