10 REM > Pixels
   20 REM Test correct number of logical pixels for screen size
   30 :
   40 ON ERROR REPORT:IF ERR=25:RUN ELSE PRINT:END
   50 :
   60 bbfw%=FALSE:IF PAGE>&FFFF:bbfw%=(INKEY-256 AND &DB)=&53
   70 :       :gap$=CHR$3+CHR$6+CHR$7+CHR$11+CHR$14+CHR$17
   80 IF bbfw%:gap$=CHR$3+CHR$6+CHR$7+CHR$20+CHR$21+CHR$28+CHR$29
   90 FOR M%=0 TO 127
  100   MODE M%:PRINT':VDU8:txW%=POS+1
  110   REPEAT:txH%=VPOS+1:PRINT:UNTILtxH%=VPOS+1
  120   COLOUR &BF:VDU 32:cols%=ABSPOINT(0,0)+1:cols%=cols%-192*(cols%=64)
  130   IF cols%<3:IF M%=7:cols%=8
  140   COLOUR 128:COLOUR 7:GCOL 0,128:GCOL 0,5
  150   VDU 19,5,7,0,0,0, 23,1,0;0;0;0;
  160   CLS
  170   :       :gap%=INSTR(gap$,CHR$M%)<>0 AND (txH%=22 OR txH%=25)
  180   IF bbfw%:gap%=INSTR(gap$,CHR$M%)<>0           :REM Slightly different for BBFW
  190   :
  200   REM Calculation should be this:
  210   REM   LOGICAL_XPIXELS=TEXTCOLS*2^(10-INT(LN(TEXTCOLS)/LN(2)))
  220   REM   LOGICAL_YPIXELS=TEXTROWS*(8-2*GAP)*4
  230   :
  240   REM But this works in reality:
  250   gfH%=txH%*(8-2*gap%)                          :REM Physical pixels
  260   gfW%=txW%*8
  270   gfY%=gfH%:REPEAT:gfY%=gfY%*2:UNTIL gfY%>=&300 :REM Logical pixels
  280   gfX%=gfW%:REPEAT:gfX%=gfX%*2:UNTIL gfX%>=&400
  290   REM Doesn't work for MODE 22
  300   REM Doesn't work for some DOS MODEs
  310   :
  320   REM Subtly different for BBFW
  330   IF bbfw%:gfY%=gfH%*4                                    :REM Fixed EigenY
  340   IF bbfw%:gfX%=gfW%:REPEAT:gfX%=gfX%*2:UNTIL gfX%>=gfY%  :REM width always > height
  350   :
  360   PRINTTAB((txW%-LENSTR$M%-5)/2,1);"MODE ";M%
  370   PRINTTAB(txW%/2-9,2);txW%;" x ";txH%;" characters"
  380   PRINTTAB(txW%/2-6-LENSTR$gfW%-LENSTR$gfH%,3);gfW%;" x ";gfH%;" physical ";LEFT$("pixels",txW%>20)
  390   PRINTTAB(txW%/2-5-LENSTR$gfX%-LENSTR$gfY%,4);gfX%;" x ";gfY%;" logical ";LEFT$("pixels",txW%>20)
  400   IF cols%>1:PRINTTAB((txW%-LENSTR$cols%-8)/2,5);cols%;" colours"
  410   MOVE 0,0:GCOL 0,7:FOR A%=1 TO 7
  420     x%=VALMID$("1100101",A%,1)*(gfX%-1)
  430     y%=VALMID$("0110110",A%,1)*(gfY%-1)
  440   DRAW x%,y%:NEXT A%
  450   IF INKEY(500)=8:M%=M%-2
  460 NEXT M%
  470 RUN