In addition to offering most of the commands and functions from Dartmouth BASIC Version 4, in including matrix math commands, SUPER BASIC also included a number of features from the seminal JOSS language developed at Rand Corporation,[1] via Tymshare's version, CAL, and added a variety of new functions, complex numbers as a built-in type, and double precision support.
Dartmouth specifically placed the underlying design in the public domain, so that anyone could port it to their platforms and call it BASIC.
Frank Bracher added the routines for file input/output (I/O), which made it far more practical than the original Dartmouth code that relied purely on DATA statements embedded in the program.
Dartmouth's workflow was tape based so loading and saving individual files was not practical and direct I/O was not addressed until later versions.
Bracher's I/O code had originally been developed for Tymshare's SUPER FORTRAN offering.
[3] Tymshare maintained SUPER BASIC through the 1970s, but as the market for rented timeshare programming services dwindled the system went into maintenance and Lewis and Bracher left to do SUPER BASIC consulting for those companies still using it.
Commands that were typed without a line number were executed immediately, which they referred to as "direct mode".
[7] Although the built-in editor loaded and saved only the lines in the program itself, the user could edit the resulting text file to add additional commands that would run in direct mode.
A common example was to edit a program and add RUN on its own line at the end of the file.
[11] Additionally, SUPER BASIC provided alternate forms of the range definition using WHILE and UNTIL, whereas most other languages used completely separate loop structures for these.
[12] As in Microsoft BASIC, multiple loops could end with a single NEXT I,J,[12] although it did not include the feature of later version of MS where the index variable could be left off entirely.
Finally, in JOSS fashion, one could replace the typical range specifier 1 TO 10 with an explicit list of values, FOR I=1,4,5,6,10.
This required the system to test the variable type at runtime during INPUT and PRINT for instance, which reduced performance.
The later is very useful in debugging scenarios, where the normal behavior can hide the fact that a variable being used in a calculation has not been correctly initialized.
[19] An existing single precision value or expression could be converted to double using the DBL(X) function.
[14] SUPER BASIC also added XOR, EQV for "equivalence" (equals) and IMP for "implication".
The much-greater-than and much-less-than operators compared the values of the two operands, for instance, A and B in the expression A >> B.
SUPER BASIC also allowed this, which resulted in the somewhat confusing behavior of LET A=B=5, which, following operator precedence, assigns 5 to B and then returns true or false if A=B.
To ease the entry of binary values, constants could be entered in octal format[b] by prefixing a number with an "O", like LET A=O41.
[28] SUPER BASIC allowed string constants (literals) to be enclosed with single or double quotes, so one could use PRINT "HELLO, WORLD!"
[29] In contrast to later dialects of BASIC, one could assign a string to any variable and the $ signifier was not used, so A="HELLO, WORLD!"
Field type included integers,[33] specified decimal formats, and exponents, as well as strings and text.
[35] PRINT IN FORMAT worked generally the same way, the difference being that spaces had to be explicitly defined using B.
The FORMAT version supported a wider variety of format strings and included items like inline carriage returns, but the examples given in the manuals do not make it clear why there are two such systems when they accomplish the same thing in the end.
The system also included a function TEL that returned whether or not there was input waiting in the terminal.
SUPER BASIC programs often included code like to wait for user input and test it every second before continuing.