10 REM > Colours
   20 REM Test VDU driver COLOUR support
   30 :
   40 A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256:noBGD%=(os%=28)
   50 IF os%<8 THEN setFL%=8:setBR%=16 ELSE setFL%=16:setBR%=8
   60 M$="||":IFos%<6:M$="MODE ":ON ERROR M$="|"+M$:IF ERR<>220:M$="||"
   70 IF ASCM$<>124:OSCLIM$
   80 M$=MID$(M$,2):ON ERROR OFF
   90 :
  100 FOR M%=-1 TO 127:IF M%=0:MODE 128
  110   IF M%>=0:VDU 22,128+M%:OSCLI M$+STR$(128+M%)
  120   PRINT ''CHR$8;:W%=POS+1:SM%=W%<32 AND W%>1:WD%=31+16*SM%:IF POS:PRINT'CHR$11;CHR$11;
  130   A$="MODE "+STR$M%+" "+LEFT$("- &"+RIGHT$("0"+STR$~(M% AND -8),2)+"+"+STR$(M% AND 7),M%>7)
  140   IF M%>=0:PRINT SPC(WD%/2-LENA$/2+1);A$
  150   FOR rgb%=0 TO 31
  160     C%=(rgb% AND 7)-setBR%*((rgb%AND8)<>0)-setFL%*((rgb%AND16)<>0)
  170     IF noBGD%:COLOUR C% ELSE COLOUR C% EOR 7:COLOUR 128+C%
  180     PRINT MID$(" "+RIGHT$("0"+STR$C%,2)+" ",1-SM%,4+2*SM%);
  190     IF (C% AND 7)=7:COLOUR 128:COLOUR 7:IF SM%:PRINT CHR$8
  200     IF (C% AND 7)=7:IF W%>39:IF rgb%>7:PRINT " ";MID$("BrightFlash Br+Fl ",(rgb% DIV 8)*6-5,6);
  210     IF (C% AND 7)=7:PRINT CHR$8
  220     NEXT:FOR C%=32 TO 127
  230     COLOUR C% AND 7:IF noBGD%=0:COLOUR 135-(C% AND 7)
  240     IF C%<>127:VDU C% ELSE VDU 32
  250     IF (C% AND WD%)=WD%:COLOUR 128:PRINT CHR$8
  260     NEXT:FOR C%=0 TO 31
  270     IF (C% AND 7)=0:RESTORE:IF SM%:FOR B%=1 TO 8:READ A$:NEXT
  280     IF noBGD%:COLOUR C% ELSE COLOUR C% EOR 7:COLOUR 128+C%
  290     READ A$:PRINTA$;
  300     IF (C% AND 7)=7:COLOUR 128:PRINT CHR$8
  310   NEXT:IF M%>=0:VDU 20 ELSE COLOUR 128:COLOUR 7
  320   A$="   G  R  A  Y   S  C  A  L  E   "
  330   IF SM%:A$="   GRAY SCALE   "
  340   B%=(WD%+1)/4:FOR A%=0 TO 3
  350     IF noBGD%=0:COLOUR 7-(A%AND2)*3.5:COLOUR 128+(A%AND1)*8+(A%AND2)*3.5
  360     IF noBGD%=0:PRINT MID$(A$,A%*B%+1,(WD%+1)/8);MID$(A$,A%*B%+B%/2+1,(WD%+1)/8);
  370   NEXT:IF noBGD%=0:COLOUR 128:COLOUR 7:PRINT
  380   IF SM%:IF noBGD%=0:PRINT"Backgd should be"CHR$8'"  named colour"
  390   IF NOT SM%:PRINT SPC2"Where 8+ colours supported,"'LEFT$("backg'nd",noBGD%=0);SPC(noBGD%AND3);" should be named colour."
  400   IF NOT SM%:IF M%>=0:PRINT SPC3"If COLOUR &C0+n supported,"'SPC3"border should be colour ";M% AND 31;"."
  410   IF SM%:IF M%>=0:PRINT "Border colour=";M% AND 31;"."
  420   IF M%>=0:COLOUR 192+M%:COLOUR 128
  430   IF M%=7:PRINT'"  If supported this should be teletext"'CHR$147;STRING$(38,",")'SPC2;
  440   IF M%=7:FOR C%=1 TO 7:PRINT CHR$(128+C%);MID$("RED GRN YELWBLUEMGNTCYANWHTE",C%*4-3,4);:NEXT:PRINT'CHR$149;STRING$(38,",")
  450   REPEATUNTILGET<33:IF M%=31:M%=95
  460 NEXT
  470 DATA Black,Red,Grn,Yel,Blue,Magen,Cyan,White
  480 DATA Bk,Rd,Gn,Yl,Bl,Mg,Cy,Wt