In both GW-BASIC and QuickBASIC, statements are passed arguments, some of which are optional and can be omitted depending on the statement:
REM Move the text cursor to the specified column and row.
LOCATE row%, column%
REM Move the text cursor to the specified column without changing the row.
LOCATE , column%
In GW-BASIC, the CLEAR
statement is rather unusual in that its first "argument" is always omitted:
CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack
In QuickBASIC, the basicMem
parameter became optional due to the interpreter/runtime managing its own memory:
CLEAR , , basicStack
What I'm wondering is whether that first "argument" ever used for anything prior to GW-BASIC, i.e. something like this was actually useful:
CLEAR missingArg, basicMem, basicStack
REM ^^^^^^^^^^
REM here
That is, was there ever an purposeful non-empty argument before the first comma?
If anybody has any idea, I'd love to know!
Yes, there was a first argument, but there was never a 3-argument form that actually made use of it.
Microsoft (originally Micro-Soft) created Altair BASIC. It featured a
CLEAR
command with no arguments that set all program variables to zero. The 4K version had no strings, so it had no need for managing string space. However, the 8K, Extended, and Disk versions had aCLEAR
command that also accepted a single argument of the formCLEAR x
. The valuex
specified the maximum amount of string space available in bytes, with the default at load time of BASIC being 50 bytes in the 8K version and 200 bytes in the Extended and Disk versions until it was changed [source]. That's where the missing first argument came from and what it was used for originally. At the time, however, only that one argument was valid.Microsoft went on to develop a derivative called "BASIC-80" for several systems, notably the Intel ISIS-II, CP/M, and TEKDOS operating systems. A "Standalone Disk BASIC" version of BASIC-80 was also created that could run on "almost any 8080 or Z80 based disk hardware without an operating system." There was no 4K version of BASIC-80, so it's reasonable to assume all versions of BASIC-80 had strings available as the 8K version of Altair BASIC did. As a result, that string space needed managed. However, it was in BASIC-80 that a second argument was added:
expression!
was an expression that specified the amount of string space, like in 8K (Altair) BASIC, andaddress
was the maximum address available to BASIC, i.e. the amount of memory available to BASIC, like the argument immediately after the first comma in GW-BASIC.Eventually, BASIC-80, Release 5.0, was shipped into the world, and it featured the odd syntax instead:
expression1
was the maximum memory available to BASIC, andexpression2
was the amount of stack space. Appendix A: New Features in BASIC-80, Release 5.0 explains why the first argument was dropped:In other words,
CLEAR strSpace!,maxMem
would ignore thestrSpace!
argument in BASIC-80, Release 5.0, so the syntax becameCLEAR [,[maxMem][,maxStack]]
.QuickBASIC eventually changed the syntax further to just
CLEAR [,,stack]
. Confusingly, the on-line help system of QuickBASIC 4.5 states the following:"The first parameter" mentioned is
maxMem
as BASICA (and GW-BASIC) used the syntax available with BASIC-80, Release 5.0, rather than the equally missingstrSpace!
parameter used by pre-5.0 releases of BASIC-80.