A note from the curator...
Joe Loughry, the original author of this page, recently contacted me about this page with some updates. In case you somehow got here by accident, the BANCStar story is a rather twisted one. Joe sent me this page for the original Tarpit and I posted it; however, the publishers of the program, a company called Broadway and Seymour, took great exception to the existence of this page and its less-than-complimentary attitude towards its product and sic'ed a lawyer on me. Being a mere college student at the time, and having a lot less of a spine than I do now, I backed down and removed the link (but did not delete the page).
As I said, I've grown a spine since then.
I won't make the mistake again of backing down over a free speech issue; it's the one hot button in my political mindset. So without further ado, here is Joe Loughry's BANCStar description, complete with his 2000 update...
I think the world is ready to be introduced to BANCStar.
The following actual sample of BANCStar source code was taken from a production system. I'm not too worried about revealing a lot of proprietary information here, as only about ten people in the world can read this code:
8607,,,1 11547,15475,22002,22002 1316,1629,1,1649 3001,1316,3,30078 11528,22052,22002,22002 9301,0,1528,1528 31568,10001,800,107 8560,,,1568 8550,210,, 3001,,, 3100,1316,3,30089 11547,15475,22002,22002 3001,1316,3,30089 3001,1317,3,10000 8400,,, 8550,700,801, 3001,,, 9301,0,522,522 3000,1284,3,10001 8500,,3, 8500,,5, 1547,,1,-2301
I think we had something like 1,350 files of this code, most files a few hundred lines long, though some were over 1,000 lines. The system ran the retail branch operations of a major commercial bank in the early 1990s.
Interesting features of BANCStar included:
- The only legal characters in a BANCStar program are the digits 0 through 9, comma, minus sign, and carriage return. Blank lines are not allowed. If a "." appears anywhere in the file, the compiler will crash.
- Comments are strictly prohibited.
- Control structures available include the
3001("block conditional"), and
3101("reverse block conditional"), as well as
- There is a hard limit of 2000 variables + constants in the
entire system. Anything to be displayed on screen or printed on a form must
be defined as a constant, thereby taking up part of this valuable space.
As a result, most calculations are done with a block of twenty or so "working
storage" variables, which are continually reused.
Everything in the system is global.New projects always started off with the programmer searching for a handful of working storage numbers that could be "borrowed" long enough to complete the calculation, then restored to their original values before the rightful owner noticed that they were gone.
- Labels within the code are absolute, so any time a new page was added or removed, all downstream GOTOs must be found and retargeted.
Joe Loughry email email@example.com This page was last updated on April 30, 1997.
Copyright © 1997 by Joe Loughry
Joe sent me the following update on July 31, 2000. It says a little more about BANCStar and the company that created it.
A few more details I remember:
BANCStar actually came with a "screen generator" that was supposed to be used to construct applications. But the 5.1c version of the generator was so limited that experienced programmers soon began to pry off the covers and modify directly the intermediate code that the run-time module actually executed.
When I arrived in Seattle in early 1990, I joined a team of seven programmers who by now routinely wrote directly in BancSTAR machine language, completely ignoring the screen generator. The first time they showed me the language, I thought it was a joke. But within a few weeks I was reading and writing the code, with the aid of every BancSTAR programmer's favorite tools: a dot-matrix printer, lots and lots of different color highlighters, and a three-ring binder called the Prompt File, stuffed with printouts of the dozens of tables in the system, and religiously updated anytime anyone changed anything of significance. (I wasn't kidding about reusing storage; if you needed a constant integer 1000, and you could find a place where somebody else had once used that same value, you linked your code to his and hoped it never changed.)
We developed some in-house tools for programming large applications in BancSTAR, and at one point attempted to interest Broadway & Seymour in them, but I think they never really believed us, that we were writing directly to their internal, low-level, undocumented machine code.
I wish to offer only a few comments myself. The Tarpit seems primarily devoted to joke languages (though as I write I'm mulling over a request to add an APL reference to the site). To those who write programming languages for vertical markets, let the above nastiness be a lesson to you: security through obscurity is bad juju.
31 July 2000
Click here to go back to the Turing Tarpit.
Click here to go back to my home page.
[END of message]