With the publication of this version, the source for implementations of SPITBOL produced over a period of over forty years, for the IBM/360 mainframe, MS-DOS for 8088 through Pentium chips, unix for i386, and unix and osx for x64 (amd64), are all now available from github.com/spitbol.
The original version of Macro SPITBOL, created in the early 1970’s, was the joint work of Robert B. K. Dewar and Anthony P. “Tony” McCann.
At Robert’s suggestion, I spent two weeks in March 1976 in Leeds, England, where Tony was a professor at the University of Leeds, to learn more about Macro SPITBOL, mainly to see if we could apply some its technology to help in porting SETL to new machines. I was accompanied by my wife Karin and daughter Alison.
Tony and his wife Olga were wonderful hosts.
Working with Tony was a memorable experience. He was a very modest and soft-spoken gentleman.
As long as I can remember, the default extension for SPITBOL source files has been “spt,” pronounced, as one might guess, as “spit.”
Tony preferred the extension “sbl”, pronounced like the name “sibyl.” (I just looked up the meaning of ‘sybil’ and learned that it means “a woman in ancient times supposed to utter the oracles and prophecies of a god.”
Soon after I started working on SPITBOL in 2009, I was able to track down Tony’s email address, and received the following letter in reply in May, 2009:
I am still living where I was when you visited Leeds all those years ago, when SPITBOL was still a new and needy product! However Olga my wife died from a heart attack 6 weeks ago so I am planning to sell and move next summer to the nearby village of Menston where two of my daughters and their families live.
I have been retired for 7 or 8 years from the software company with which I worked after leaving Leeds University in 1988 – I wanted to program for the last part of my working career rather than be a senior departmental administrator and it all turned out very well.
I hope you are well and presume that you may have reached retirement or thereabouts.
All the best
I learned not long after from Tony’s son that Tony had passed away.
He was a wonderful man, just wonderful.
I have just extended SPITBOL so that the suffix ‘sbl’ can also be used for SPITBOL source files.
From now on, whenever I run an existing SPITBOL program, or write a new one with the suffix “sbl,” I hope that will remind me of Tony.
If you have read this post, I hope you will be so reminded.
Anthony P. “Tony” McCann: May his Memory be a Blessing.”
As part of the conversion of SPITBOl to generate gnu assembler (gas) instead of NASM format, I learned that the GAS assembler is less powerful than that of NASM. For example, in NASM I could
use ‘define’ to map a register name to ‘eax’ in 32-bit mode, or ‘rax’ in 64-bit mode.
No problemo … SPITBOL to the rescue.
Here is the simple preprocessor I wrote in about twenty minutes:
* rename registers according to word size
target = host(0)
target break('_') . os "_" rem . ws
prefix = (eq(ws,32) '%e', '%r')
word = (eq(ws,32) 'dword','qword')
defines = 'M_WORD ' word ' '
defines = defines 'D_WORD' ' ' (eq(ws,32) '.long', '.quad') ' '
a ident(os,"osx") :s(a.err)
a = '[' ref ']' :(return)
m ident(os,"osx") :s(m.err)
m = (eq(ws,32) 'd', 'q') 'word ptr ' ref ']' :(return)
rmap = table(20)
s = 'XLsiXRdiXSspXTsiWAcxWBbxWCdxW0axIAbp'
rinit s len(2) . min len(2) . reg = :f(rdone)
rmap[min] = reg :(rinit)
rpat = 'IA' | ('X' any('LRST')) | ('W' any('ABC0'))
line = input :f(end)
aloop line breakx('A') . first 'A(' bal . ref ')' rem . last = first a(ref) last :s(mloop)
defs = defines
defs break(' ') . key ' ' break(' ') . val ' ' = :f(mloop)
dloop.1 line key = val :s(dloop.1)f(dloop)
mloop line breakx('M') . first 'M(' bal . ref ')' rem . last = first m(ref) last :s(mloop)
rloop line rpat . reg = prefix rmap[reg] :s(rloop)
output = line :(next)
err output = 'error '