BASIC's question mark and PRINT

Allison ajp166 at bellatlantic.net
Mon Nov 21 15:54:12 CST 2005


Jim Battle wrote:
> Allison wrote:
> 
>>> Subject: Re: BASIC's question mark and PRINT
>>>  From: Jim Battle <frustum at pacbell.net>
>>>  Date: Mon, 21 Nov 2005 13:03:31 -0600
>>>    To: General Discussion: On-Topic and Off-Topic Posts 
>>> <cctalk at classiccmp.org>
>>>
>>> tim lindner wrote:
>>>
>>>> In BASIC, where did the short cut of '?' for PRINT originate?
>>>>
>>>> After following a discussion on the CoCo list I thought I'd ask here.
>>>>
>>>
>>> Here are some bounds and data points.
>>>
>>> The Dartmouth BASIC specification does not have ? as an abbrevation 
>>> (circa 1964).
>>>
>>> I think all versions of Microsoft BASIC have this shortcut (circa 1975).
>>>
>>> Palo Alto Tiny BASIC (li chen wang) didn't use this convention -- 
>>> instead it used "P.".
>>>
>>> Wang BASIC (circa 1972) didn't use this convention.
>>>
>>> From what I can tell, DEC BASIC didn't use this abbreviation.
>>
>>
>>
>> The ? was adopted by convention from the fact that early MS basic 
>> (MITS BASIC) the ? was also the same value as the token for print.
>> Most of the non-compiled 8bit basics were tokenized in memory for 
>> execution and storage and when "LIST"ed were detokenized to list as 
>> Basic we know.
>>
>> Allison
> 
> 
> Allison, that seems unlikely.  Later versions of microsoft basic 
> certainly didn't use any value lower than 0x80 for tokens.  Even if you 
> could find a few characters in the "live" portion of the ascii table 
> that didn't lead to ambiguous parsing, I can't think of a good reason 
> why they'd do it -- there was enough room at 0x80 and above, and not 
> enough unused values below 0x80, so why have two lookup tables when one 
> would do?
> 
> It would seem much easier to have special case where '?' got mapped to 
> the token for PRINT.
> 
> OK, trying to be less speculative, I looked at the binary for
> 
>     ALTAIR BASIC VERSION 3.2 [EIGHT-K VERSION]
> 
> that is included with Rich Cini's Altair emulator.  At the end is the 
> list of the statement keywords.  In memory each keyword abuts the next, 
> and the boundary between keywords is marked by setting the msb of the 
> byte.  Here is the table in order:
> 
> END
> FOR
> NEXT
> DATA
> INPUT
> DIM
> READ
> LET
> GOTO
> RUN
> IF
> RESTORE
> GOSUB
> RETURN
> REM
> STOP
> OUT
> ON
> NULL
> WAIT
> DEF
> POKE
> PRINT
> CONT
> LIST
> CLEAR
> CLOAD
> CSAVE
> NEW
> TAB(
> 
> Since there no room for storing a token value after each item (I know it 
> is possible that that mapping is held elsewhere, but it seems unlikely), 
> these keywords very likely have consecutive token values.
> 
> Elsewhere in the binary, near the beginning, is a similar table for the 
> functions (FN, SPC, NOT, AND, OR, VAL, CHR, LEFT, RIGHT, MID, FRE, SIN, 
> COS, TAN, PEEK, etc, but also including THEN, STEP).

Ever look at the saved files or in memory programs?

I also have 3.2 (the first no so buggy one).

Allison


More information about the cctalk mailing list