\NAME #101=SCRNMODE\MOVE 4 TO SCRNMODE
\NAME #102=ASCII_MODE\MOVE '4' TO ASCII_MODE
\NAME #103=MODE_STATEMENT\MOVE 'MODE: ' TO MODE_STATEMENT
\IF SCREEN_MODE=4
\LOCATE 10,10\OVERLAY 0\WIDTH 300 DOTS\HEIGHT 150
This program will test several video modes for you.  To advance through the modes, press <RETURN>.
\"
The modes tested are mode 4 (this mode), 13, 16, 19, 18, 258 and 261.  These correspond to CGA, 2 EGA modes, MCGA, VGA, and two VESA SVGA modes.
\WAIT RET -1\LOCATE 10,10
The test patterns are rectangles, diagonal lines, and ovals.  For 256 color modes, after placing the shapes on the screen it will change the colors for a few seconds and go to the next mode.
\"
To exit the test at any time, press <ALT-Q>  (Press the "ALT" key down and while holding it down, press the "Q" key.)
\WAIT RET -1\CLEAR SCREEN
\ENDIF
\X NEWMODE\MOVE 10 TO X
\X BOXIT
\ON KEY 14624 JUMP MODECHANGE\ON KEY 7181 JUMP MODECHANGE\ON KEY 4096 JUMP QUITIT
\PEN WIDTH=1\LINE 0,0,20,0,3\LINE 0,0,0,20,3\LINE 0,0,10,10,2
\LINE SCREEN_DOT_WIDTH-1,0,SCREEN_DOT_WIDTH-20,0,3\LINE SCREEN_DOT_WIDTH-1,0,SCREEN_DOT_WIDTH-1,20,3\LINE SCREEN_DOT_WIDTH-1,0,SCREEN_DOT_WIDTH-11,10,2
\LINE SCREEN_DOT_WIDTH-1,SCREEN_DOT_HEIGHT-1,SCREEN_DOT_WIDTH-1,SCREEN_DOT_HEIGHT-21,3
\LINE SCREEN_DOT_WIDTH-1,SCREEN_DOT_HEIGHT-1,SCREEN_DOT_WIDTH-21,SCREEN_DOT_HEIGHT-1,3
\LINE SCREEN_DOT_WIDTH-1,SCREEN_DOT_HEIGHT-1,SCREEN_DOT_WIDTH-11,SCREEN_DOT_HEIGHT-11,2
\LINE 0,SCREEN_DOT_HEIGHT-1,0,SCREEN_DOT_HEIGHT-21,3\LINE 0,SCREEN_DOT_HEIGHT-1,20,SCREEN_DOT_HEIGHT-1,3\LINE 0,SCREEN_DOT_HEIGHT-1,10,SCREEN_DOT_HEIGHT-11,2
\CURSOR SCREEN_CHARACTER_WIDTH/3+5,SCREEN_CHARACTER_HEIGHT/3+2\WAIT LIMIT 1\BUILD MODE_STATEMENT=MODE_STATEMENT[1,6],ASCII_MODE\QUESTION MODE_STATEMENT,40,12
\CURSOR SCREEN_CHARACTER_WIDTH/3+7,SCREEN_CHARACTER_HEIGHT/3+4\DISPLAY SCREEN_DOT_WIDTH,SCREEN_DOT_HEIGHT\WAIT NOW 584\PEN WIDTH=1
\MOVE 0 TO X\X LOOP99\CURSOR 7,X\DISPLAY X\ADD 1 TO X\IF X<SCREEN_CHARACTER_HEIGHT\JUMP LOOP99\ENDIF\MOVE 10 TO X
\X BOXED\LINE X,X,SCREEN_DOT_WIDTH-X,SCREEN_DOT_HEIGHT-X,X,B\ADD 3 TO X\IF X<SCREEN_DOT_HEIGHT/3\JUMP BOXED\ENDIF
\MOVE 0 TO X
\X AGAIN
\LINE X*3+100,-50,SCREEN_DOT_WIDTH-X*3+100,SCREEN_DOT_HEIGHT+50,X
\ADD 1 TO X\IF X<SCREEN_DOT_WIDTH/2\JUMP AGAIN\ENDIF
\MOVE 0 TO Y\MOVE 0 TO X\X CIRCLE\WAIT NOW 1
\CIRCLE L=SCREEN_DOT_WIDTH*4/5-X/3+20,Y+SCREEN_DOT_HEIGHT/2 R=X,X/2 C=X/2
\ADD 2 TO X\IF X<SCREEN_DOT_WIDTH/3\JUMP CIRCLE\ENDIF
\MOVE SCREEN_DOT_WIDTH/2 TO X\MOVE SCREEN_DOT_HEIGHT/2 TO Y\X GETDOT
\*DOT X,Y,?\DOT X+SCREEN_DOT_WIDTH/2-140,Y+SCREEN_DOT_HEIGHT/2,A\ADD 1 TO X\IF X>SCREEN_DOT_WIDTH/2+125\ADD 1 TO Y\MOVE SCREEN_DOT_WIDTH/2 TO X\ENDIF
\*IF Y<SCREEN_DOT_HEIGHT/2+50\JUMP GETDOT\ENDIF
\X GOITAGAIN\MOVE 0 TO V
\MOVE 0 TO W\MOVE 0 TO X\MOVE 20 TO Y\MOVE 40 TO Z
\X HUELOOP\ON ERROR JUMP MODECHANGE\WAIT NOW 1
\HUE C=9,255 I=1,1,1\ADD 1 TO W\IF W>255\JUMP ENDITALL\ENDIF
\ADD 1 TO X\IF X>63\MOVE 0 TO X\ENDIF
\ADD 1 TO Y\IF Y>63\MOVE 0 TO Y\ENDIF
\ADD 1 TO Z\IF Z>63\MOVE 0 TO Z\ENDIF
\ADD 1 TO V\IF V<100\JUMP HUELOOP\ENDIF\JUMP MODECHANGE
\X ENDITALL\CLEAR ON ERROR \JUMP GOITAGAIN
\WAIT RET -1
..345678.1..345678.2..345678.3..345678.4..345678.5..345678.6..345678.7..345678.8..345678.9..345678.10
\MOUSE
\END\X BADHUE\BEEP 55,55\JUMP MODECHANGE\+
\X BADMODE\BEEP 55,55\+
\SCREEN 0,0,4\LOCATE 0,0\CLEAR SCREEN
Cannot enter that mode!
\WAIT RET -1
\X MODECHANGE\CLEAR ON ERROR\+
\IF SCRNMODE=4\MOVE 13 TO SCRNMODE\MOVE '13' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=13\MOVE 16 TO SCRNMODE\MOVE '16' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=16\MOVE 19 TO SCRNMODE\MOVE '19' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=19\MOVE 18 TO SCRNMODE\MOVE '18' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=18\MOVE 258 TO SCRNMODE\MOVE '258' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=258\MOVE 261 TO SCRNMODE\MOVE '261' TO ASCII_MODE\+
\ELSE\IF SCRNMODE=261\MOVE 13 TO SCRNMODE\MOVE '13' TO ASCII_MODE\+
\ENDIF
\ON ERROR JUMP BADMODE\SCREEN MODE=SCRNMODE\JUMP NEWMODE
\X GRID\LINE X,0,X,SCREEN_DOT_HEIGHT,X\ADD 10 TO X\IF X<SCREEN_DOT_WIDTH\JUMP GRID\ENDIF\MOVE 0 TO X
\MOVE 0 TO Y\X GRID2\LINE 0,Y,SCREEN_DOT_WIDTH,Y,Y\ADD 10 TO Y\IF Y<SCREEN_DOT_HEIGHT\JUMP GRID2\ENDIF\MOVE 0 TO X
\X QUITIT\END
