I had to smile to see some young whippersnapper ask “What are the Windows A: and B: drives used for?“, and thought back to when I started using computers that were even pre-floppy drive (you saved and loaded from a cassette tape and sat listening to the high-pitched noise as it loaded for 10 minutes with fingers crossed in case of data error), and decided to write down my favourite computer war story of prehistoric times.
Between 1988 and 1993 I worked for a very large computer services company, writing VAX/VMS Fortran and Cobol programs that drove an “online” Viewdata service that allowed the dealer network of a British car company to record sales and arrange finance. No program module could be more than 8K, I recall – so fripperies like comments, meaningful variable names or 4 digit year numbers were luxuries we couldn’t afford.
At night, the service was suspended while batch jobs ran to produce great big magnetic taps of data that were taken by motorcycle courier from the West Midlands to London in time for the BACS run at 7 am, when the banks did all their transactions. If you missed the BACs run, the previous day’s sales were not debited form the customers’ accounts and therefore not credited to the car dealer. Because of this, members of the team took it turns to carry a pager so that we could be contacted if there was a problem outside office hours (no mobile phones then!).
In the early hours of the morning of 2nd of August 1991, I was disturbed in flagrante delicto by my work pager chirruping. I phoned the operator at our computer data centre to be told that one of the batch jobs had failed with an inscrutable error message. Of course, these days I’d open my laptop and search the Web, but way back then I had no option to get a taxi into the data centre and go to the big cupboard full of the big orange ring binders that contained the manuals.
The error message told me that a data type had overflowed. A further 30 minutes led me to conclude that the running total of sales value was being stored in an INTEGER*4 variable. Because it was an integer, it was being tallied in pence rather than pounds – and at £55m (or 5.5 billion pence) the number was too big to store in 4 bytes. The previous day’s trading, 1st of August, was the first day of the new registration year, so everyone had rushed to be the first on their street/in their office to have the newest registration plate.
Another half hour with cigarettes, vending machine coffee while looking at the manuals suggested that I could substitute a REAL*4 variable and tally in pounds with two significant decimal places for the pennies. With no time for fripperies like testing my theory, I recompiled and relinked all the programs and ran the batch job again as dawn was breaking.
The leathered-up motorcycle guy was in Reception by this point. “It’s going to start getting busy on the M25” he warned as we mounted the tapes to write to.
It was with a queasy feeling that I checked the logs before writing the tape to make sure that the grand total was £55million. If I’d got it wrong, I would rather not send a tape to the bank at all than send a tape that erroneously debited £5million or £550million. I was also painfully aware that I had no authority to take such a decision—and a day’s interest on that kind of money was not trivial. But by the time I had found the number of someone with such authority, phoned him, awoken him, explained the position to he could take the decision, it would be too late.
Success – the total was correct! While the courier grumbled that he was going to perhaps exceed the 70mph speed limit on British motorways, the tape was written, boxed up and put in the cycle paniers. As the courier roared off, I wearily got into a taxi back to my sleeping lady-friend, to shave and shower to start work at 8.30 again.
You young ‘uns with your APIs and debugging consoles. You don’t know you’re born.