| SuperBASIC | |
|---|---|
| Developers | Sinclair Research,Jan Jones |
| Initial release | 1984; 42 years ago (1984) |
| Operating system | QDOS |
| Platform | Sinclair QLmicrocomputer |
| Type | second-generation BASIC |
| License | Proprietary |
SuperBASIC is an advanced variant of theBASIC programming language with manystructured programming additions. It was developed atSinclair Research byJan Jones during the early 1980s.
Originally SuperBASIC was intended as theBASIC interpreter for ahome computer code-namedSuperSpectrum, then under development. This project was later cancelled; however, SuperBASIC was subsequently included in theROMfirmware of theSinclair QLmicrocomputer (announced in January 1984), also serving as thecommand line interpreter for the QL'sQDOSoperating system.[1][2]
It was one of the firstsecond-generation BASICs to be integrated into a microcomputer's operating system (unlikeBBC BASIC which preceded it in 1981), making the OS user-extendable—as done byLinus Torvalds in his formative years.
BYTE in September 1984 approved of SuperBASIC's improvements overSinclair BASIC but criticized its "very, very slow" performance on theByte Sieve, writing that "With a 7.5-MHz68008, you'd think it would take some effort to get a language to run that slowly". The magazine also noted that SuperBASIC's seven-digit precision made it unsuitable for business use ("you can represent numbers far larger than the number of quarks in the universe, but not the pennies on your balance sheet if your turnover exceeds £99,000").[3]
IF -THEN -ELSE -END IFFOR -NEXT -EXIT -END FORREPeat -NEXT -EXIT -END REPeatSELect ON -ON -REMAINDER -END SELectRETurn from within procedures & functionsLOCal arrays & (string) variablesAUTOmatic line numberingRESTORE &DATAThe function below illustrates the last eight of these features. After havingRUN it, entering
PRINT weekdays$(Iso("19631122",1))will printFRI to the screen. Until cleared (e.g. by enteringNEW), the functionIso[4] will act like an extension to the operating system. Similarly, according to the QL User Guide, "many of the operating system commands are themselves defined as procedures."[5]
AUTO 11,2 DEFine FN Iso(S,O) LOCal y%,m%,d%,i$,n%,w% REM Step 0 - to isolate components of date-stamp S="YEARMoDa" LET y%=S(1TO 4) : m%=S(5TO 6) : d%=S(7TO 8) REM Step 1 - to initiateLachman's Congruence[6] LET i$=m%*2.56+ 193 : S=S(1TO 6)- 3 REM Step 2 - to compute the day-number within the week LET w%=(S(1TO 2)&"32"DIV 16+ S(1TO 4)DIV 4+ y%+ i$(2TO 3)+ d%)MOD 7 REM Step 3 - to return result SELect ON O ON O= 5 : n%=i$(2TO 3) ON O= 4 : n%=y% ON O= 3 : n%=m% ON O= 2 : n%=d% ON O= 1 : n%=w% ON O= REMAINDER : n%=-1 END SELect RETurn n% REM data statements DIM weekdays$(6,3) RESTORE 190 FOR count=0 TO 6 : READ weekdays$(count)
ctrl+space
100DIMmonth$(12,9)110RESTORE120REMQLUserGuide's "Data Read Restore" example ii130REMappropriatelyamendedrelativetoexamplei140FORcount=1TO12:READmonth$(count)150DATA"January","February","March"160DATA"April","May","June"170DATA"July","August","September"180DATA"October","November","December"190DATA"SUN","MON","TUE","WED","THU","FRI","SAT"199ENDDEFineIso