10 REM > Checks 1.01
   20 REM Check for presence of extended BASIC functionality
   30 REM Tests for BBFW and PDP-11 extensions
   40 REM Has to be edited in BB4W or extended BASIC to preserve tokens
   50 :
   60 DIM mem% 15
   70 ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
   80 IF ok%:$$mem%="":A$=$$mem%
   90 PRINT"$$<addr> "FNnot(ok%)
  100 :
  110 ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  120 IF ok%:DIM str{a,b}
  130 PRINT"DIM structure{..} "FNnot(ok%)
  140 :
  150 ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  160 IF ok%:DIM one{a,b}:DIM two{}=one{}
  170 PRINT"DIM one{}=two{} prototyping "FNnot(ok%)
  180 :
  190 ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  200 IF ok%:FOR A%=1 TO 2:EXIT FOR
  210   IF ok%:NEXT A%
  220   PRINT"EXIT FOR "FNnot(ok%)
  230   :
  240   ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  250   IF ok%:FOR A%=1 TO 2:FOR B%=1 TO 2:EXIT FOR A%
  260     IF ok%:NEXT B%:NEXT A%
  270     PRINT"EXIT FOR <var> "FNnot(ok%)
  280     :
  290     ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  300     IF ok%:REPEAT:EXIT REPEAT
  310       IF ok%:UNTIL TRUE
  320       PRINT"EXIT REPEAT "FNnot(ok%)
  330       :
  340       ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  350       IF ok%:A%=1:WHILE A%=1:EXIT WHILE
  360         IF ok%:A%=A%-1:ENDWHILE
  370         PRINT"EXIT WHILE "FNnot(ok%)
  380         :
  390         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  400         IF ok%:PLOT 0,0
  410         PRINT"PLOT x,y "FNnot(ok%)
  420         :
  430         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  440         IF ok%:PRINT"Press space...";:PROCprivate
  450         PRINTCHR$13;"PRIVATE "FNnot(ok%)
  460         :
  470         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  480         IF ok%:A%=^PROCpr:PROC(A%)
  490         PRINT"PROC(<addr>) "FNnot(ok%)
  500         :
  510         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  520         IF ok%:PROCpcall(PROCpr):PROCfcall(FNfn)
  530         PRINT"PROCcall(PROCname|FNname) "FNnot(ok%)
  540         :
  550         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  560         IF ok%:A%=FNpcall(PROCpr):A%=FNfcall(FNfn)
  570         PRINT"FNcall(PROCname|FNname) "FNnot(ok%)
  580         :
  590         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  600         IF ok%:RECTANGLE SWAP 0,0,0,0 TO 0,0
  610         PRINT"RECTANGLE SWAP "FNnot(ok%)
  620         :
  630         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  640         IF ok%:WAIT 0
  650         PRINT"WAIT <num> "FNnot(ok%)
  660         :
  670         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  680         IF ok%:PROCline
  690         PRINT"\ line continuation "FNnot(ok%)
  700         :
  710         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  720         IF ok%:one.a=1
  730         PRINT"structure assignment "FNnot(ok%)
  740         :
  750         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  760         IF ok%:A%=DIM(one{})
  770         PRINT"=DIM(struct{}) "FNnot(ok%)
  780         :
  790         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  800         IF ok%:A%=^FNfn:A%=FN(A%)
  810         PRINT"FN(<addr>) "FNnot(ok%)
  820         :
  830         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  840         IF ok%:A%=^A%
  850         PRINT"^ address-of "FNnot(ok%)
  860         :
  870         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  880         IF ok%:A%=one.a
  890         PRINT"reading structure content "FNnot(ok%)
  900         :
  910         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  920         IF ok%:A%=1:A%*=2
  930         IF ok%:IF A%<>2:ok%=0
  940         PRINT"*= "FNnot(ok%)
  950         :
  960         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
  970         IF ok%:A%=4:A%/=2
  980         IF ok%:IF A%<>2:ok%=0
  990         PRINT"/= "FNnot(ok%)
 1000         :
 1010         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1020         IF ok%:A%=7:A%AND=2
 1030         IF ok%:IF A%<>2:ok%=0
 1040         PRINT"AND= "FNnot(ok%)
 1050         :
 1060         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1070         IF ok%:A%=4:A%OR=2
 1080         IF ok%:IF A%<>6:ok%=0
 1090         PRINT"OR= "FNnot(ok%)
 1100         :
 1110         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1120         IF ok%:A%=6:A%EOR=2
 1130         IF ok%:IF A%<>4:ok%=0
 1140         PRINT"EOR= "FNnot(ok%)
 1150         :
 1160         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1170         IF ok%:A%=10:A%MOD=6
 1180         IF ok%:IF A%<>4:ok%=0
 1190         PRINT"MOD= "FNnot(ok%)
 1200         :
 1210         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1220         IF ok%:A%=10:A%DIV=3
 1230         IF ok%:IF A%<>3:ok%=0
 1240         PRINT"DIV= "FNnot(ok%)
 1250         :
 1260         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1270         IF ok%:PRINT"Press space...";:OSCLI"FX138,0,127":A$=GET$(0,0)
 1280         PRINTCHR$13;"GET$(x,y) "FNnot(ok%)
 1290         :
 1300         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1310         IF ok%:PRINT"Press space...";:OSCLI"FX138,0,127":A%=GET(0,0)
 1320         PRINTCHR$13;"GET(x,y) "FNnot(ok%)
 1330         :
 1340         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1350         IF ok%:PRINT"Press space...";:OSCLI"FX138,0,127":A%=GET(0)
 1360         PRINTCHR$13;"GET(x) "FNnot(ok%)
 1370         :
 1380         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1390         IF ok%:A%=&o100
 1400         PRINT"&o octal constants "FNnot(ok%)
 1410         :
 1420         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1430         IF ok%:A$=STR$=100
 1440         PRINT"STR$=<num> octal conversion "FNnot(ok%)
 1450         :
 1460         ok%=TRUE:ON ERROR ok%=FALSE:ON ERROR OFF
 1470         IF ok%:A$=STR$/100
 1480         PRINT"STR$/<num> binary conversion "FNnot(ok%)
 1490         :
 1500         END
 1510         DEFFNnot(A%)=STRING$(30-POS,".")+LEFT$("not ",NOTA%)+"available"
 1520         DEFPROCprivate:PRIVATE a%:ENDPROC
 1530         DEFPROCpr:ENDPROC
 1540         DEFFNfn=1
 1550         DEFPROCline:\ comment
 1560         \ ENDPROC
 1570         DEFPROCpcall(RETURN p%)
 1580         PROC(^p%)
 1590         ENDPROC
 1600         DEFPROCfcall(RETURN p%)
 1610         A%=FN(^p%)
 1620         ENDPROC
 1630         DEFFNpcall(RETURN p%)
 1640         PROC(^p%)
 1650         =0
 1660         DEFFNfcall(RETURN p%)
 1670         A%=FN(^p%)
 1680         =A%