FORTRAN stands for: Flipping Heck,This Is Difficult To Learn.
Tony used Fortran V to program The Flexipede.
Drawing and animating using Fortran is not an easy task, especially for someone like myself. I like the idea of creating all the animation in my project with it, but trying to learn it makes me want to give up and rest my head on the nice soft and fluffy Creative Cloud.
Seems the best an animator like me can do is just about understand what TP did.
Dik Leatherdale, (above) was a friend of Tony’s. He says that he, “has never got over the sense of wonder he experienced when he discovered computer programming back in 1966.”
Dik’s a very lovely, funny, clever man and is kindly helping me research TP’s work, (massive thanks, Dik!). In this post I just wanted to share some Fortran-themed tales that he told me.
If you are researching British computing, Watford branch of Marks & Spencers, Tinder for cows, or just need a break from Fortran, I hope that they might will come in useful.
Email: Some Light Relief.
From : Dik Leatherdale
To: Kate, (who’s added pictures from TP’s Speak Welsh Book).
“My experience with Fortran is really quite modest – just one non-trivial program – the output phase of the CDC version of MVC and I didn’t even start that.
After I left Gordon Square I went to work for ICL, initially on a development for Marks and Spencer. About a year in I was called to see management. They had a problem. In those days (as you will probably be all too aware) if you wanted to price a large-scale network, you asked the Post Office who, if you were lucky, might respond in a few weeks, or maybe months.”
“But ICL had a program which could give a reasonable estimate. Trouble was that it was in Fortran and my shop had no Fortran expertise except me.
I was handed a pack of cards and told to modify the program in a particular way. I sat down and got the program to work (as provided) but changing it wasn’t quite so easy. Whoever had written it had obviously read a book on Fortran or perhaps had been on a course but slept through the session on subroutines.
But he had invented a subroutine mechanism all of his own. Set an integer before a GOTO to the pseudo subroutine and return using a computed GOTO.”
“But I also learned that he’d been in the process of being made redundant while he was writing the program and he had left copious comments – all in Welsh.
The entire resources of Marks and Spencer were put at my disposal – a Welsh speaker was found in the Watford branch and I sent the text off to him. A couple of weeks later the translation arrived.
My hero wasn’t Welsh – he just liked learning languages. But his Welsh didn’t stretch to ‘technical Welsh’, so it really wasn’t any help. But by that time I’d worked it out anyway, so nothing lost.”
Nearly 20 years on, still with ICL, I was working in operating system support. A problem came in to my colleagues in the sibling team. Consternation!. No Fortran speakers! Help! Rather foolishly I volunteered. This was a BIG program.
A selective breeding management program for cattle run by the Milk Marketing Board – a computer dating system for cows and bulls. Or rather cows and the artificial insemination man. Every few weeks, details of every cow and bull in the data set were read into some HUGE arrays and the program would cogitate for several hours (on a Series 39/80 no less) and produce recommendations for lots of happy events.
“Their problem is that every time they added more cattle, they had to increase the size of the arrays.
I quickly discovered that they’d hit a system limit – suck air through teeth, shake head sadly, sigh, Say “system limit – oh dear, oh dear” – garage mechanic’s gambit. Maximum segment size under VME is 2Mb (and hence maximum REAL array size is 524,288). They were looking for about 560,000 (you might wonder whether there was ever this many cattle but they never die in this data set).
How to deal with that?
Well the array declarations went something like:
COMMON /XCOMM/ X(560000)
Observing that in Fortran (unlike Algol and its derivatives) a subscripted variable looks just like a function call I essayed something like:
COMMON /XCOMM0/ X0(280000)
COMMON /XCOMM1/ X1(280000)
IF (I.LE.280000) RETURN X0(I)
And recompiled. Obviously statements of the form X(I)= … were faulted, but there weren’t very many of them – far fewer than Y=X(I) etc which passed. So I wrote a matching SUBROUTINE ASSIGNX(I,VALUE) and edited out the problem areas.
After a day or so, with all the big arrays modified, I presented my findings to the Milk Marketing Board. I thought it was quite good. They didn’t. They bought a VAX (I think) and ran it there so we lost that part of the business.
The VAX took longer, but that didn’t matter. It didn’t have anything else to do. It was probably the right decision. That said, the Milk Marketing Board was abolished a couple of years later so we lost ALL the business.”
“One thing I took away from this exercise was that I was never a fan of Fortran – messy, inelegant, error prone. But this was my first (and only) exposure to Fortran 77. And I found it to be a huge improvement – almost a pleasure.
So that’s the limit of my Fortran.
Well, I did promise some light relief.