10
20
30 :
40 mode$="MODE ":MODE 10:VDU 8:IFPOS>20:mode$="|"
50 ON ERROR mode$="|"
60 OSCLImode$+"8":ON ERROR OFF
70 REPEAT:RESTORE:FOR loop%=0 TO 31
80 IF(loop%AND7)=0:PROCfont
90 mode%=loop%+(loop%AND16)*5:READ flag
100 IFflag:MODEmode%:OSCLImode$+STR$(mode%):PROCdemo(mode%)
110 NEXT:UNTIL FALSE:END
120 :
130 DEFPROCfont:FOR A%=163 TO 175:VDU 23,A%
140 VDU(A%AND8)*3,(A%AND8)*3,(A%AND8)*3,((A%AND2)*3.5)OR((A%AND4)*60)OR24
150 VDU(A%AND1)*24,(A%AND1)*24,(A%AND1)*24,(A%AND1)*24:NEXT A%:ENDPROC
160 :
170 DATA 1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0
180 DATA 1,1,0,1,1,0,1,0,1,0,0,1,1,0,1,0
190 :
200 DEFPROCdemo(mode%)
210 base=(mode%AND7)+1
220 IF(mode%AND7)=3 OR (mode%AND6)=6:VDU 19,0,4,0,0,0
230 columns=20*2^(2-((mode%AND7)MOD3)):IF(mode%AND7)=6:columns=40
240 colours=VALMID$("0204160202040208041616040416040805131605051305080904160909040908",(((mode%DIV2)AND16)OR(mode%AND15))*2+1,2)
250 A%=135:disp%=((USR&FFF4)AND&FF0000)DIV65536
260 clrs%=colours:IFmode%<96:A%=160:X%=96:clrs%=((USR&FFF4)AND&FF00)DIV256+1
270 :
280 IFcolours=2 :back=128:fore=1:white=7:num$="two"
290 IFcolours=4 :back=129:fore=3:white=3:num$="four"
300 IFcolours=5 :back=129:fore=0:white=4:num$="five"
310 IFcolours=8 :back=128:fore=7:white=7:num$="eight"
320 IFcolours=9 :back=128:fore=7:white=7:num$="nine"
330 IFcolours=13:back=130:fore=0:white=7:num$="13"
340 IFcolours=16:back=130:fore=0:white=7:num$="16"
350 colmax=colours-1
360 IFcolmax<2 OR clrs%<>colours:colmax=3:back=128+clrs%-2:fore=back EOR 131:white=7
370 IFcolmax>13:colmax=7
380 :
390 COLOUR back:COLOUR fore
400 PRINT"£"STRING$(columns-2,"¦")"¥©";
410 IFmode%<8:IFcolumns=80:PRINTSPC(21);
420 IFcolumns=20:PRINTSPC(6);
430 IFcolumns>20:PRINTSPC((7-LEN(STR$mode%+num$))/2);
440 IFmode%=11:PRINTSPC(9);
450 IFmode%>95:IFcolumns=80:PRINTSPC(3);
460 PRINT"MODE ";mode%;
470 IFcolumns=20:PRINTSPC(columns-POS-1);"©©";SPC(2-LENnum$/2)columns;" cols, ";num$;
480 IFcolumns>20:PRINT" ";STRING$(2-(LEN(num$+STR$mode%)AND1),"-");" ";columns;" columns and ";num$;
490 IFPOS>columns-8:PRINT" clrs"; ELSE PRINT" colours";
500 IFmode%<8 OR columns<80:PRINTSPC(columns-POS-1);"©";
510 IFmode%>7:IFcolumns<80:PRINT"©";SPC(-(mode%=9));
520 IFmode%>7:IFcolumns=80:PRINT" - ";
530 IFmode%=12:PRINT"Small-memory MODE 1";
540 IFmode%=13:PRINT"Small-mem'y MODE 2©© ";
550 IF(mode%AND&FE)=14:PRINTSPC(10);
560 IFmode%>95:IFcolumns<80:PRINTSPC(4);
570 IFmode%>7:IFmode%<>12:PRINTnum$;"-colour MODE ";mode%AND7;
580 IF(mode%AND&78)=8:IFmode%<11 OR mode%=12:PRINT" ";STRING$(1-(mode%=9),"-");" ";columns;"-column MODE ";base;
590 IFmode%>95:PRINT" - MODE &";~mode%AND&68;"+";mode%AND7;
600 IFmode%>7:PRINTSPC(columns-POS-1);"©";
610 IF((mode%EORdisp%)AND&F0) OR clrs%<>colours:PRINT"©"SPC((columns-20)/2);"Dropping to MODE ";disp%;SPC(columns-POS-1);"©";
620 PRINT"«"STRING$(columns-2,"¦")"";
630 :
640 width=columns DIV colmax
650 FOR A=0 TO colmax:PRINT"©";
660 IFwidth=26:PRINTSPC(11);
670 IFwidth=20:PRINTSPC(4);
680 IFwidth=13:PRINTSPC((columns DIV 4)-1);
690 IFwidth=10:PRINTSPC((columns DIV 4)-4);
700 IFwidth=6 :PRINTSPC(3);
710 IFwidth=5 :PRINTSPC(7);
720 IFwidth=3 :PRINTSPC(1);
730 IFwidth=2 :PRINTSPC(5);
740 FOR B=0-(colmax>8) TO colmax
750 C=(A+B) MOD colours
760 IFcolours=9:COLOUR 0
770 IFmode%<96:COLOUR 128+(C AND 7):COLOUR (colours-C-1) AND 7 ELSE COLOUR 128+C
780 IFwidth>19:PRINT" COLOUR ";C;SPC3;
790 IFwidth<20:PRINTSPC(SQR(width+1)-1);~C;SPC(SQR(width+1)-1);
800 NEXT:COLOUR back:COLOUR fore
810 PRINTSPC(columns-POS-1);"©";
820 NEXT:PRINT"ª"STRING$(columns-2,"¦")"¬";
830 COLOUR 128:COLOUR white
840 IFcolumns>20:*.
850 PRINT">*BMPSave MODE";mode%;"/bmp";CHR$8
860 PROCpr(LEFT$("Press SPACE... Press SPACE... Press SPACE...",columns/5*4-2),colmax+2*(clrs%=2))
870 COLOUR white
880 IFINKEY(500)=83:OSCLI"BMPSave MODE"+STR$mode%+"/bmp"
890 ENDPROC
900 :
910 DEFPROCpr(A$,N):FOR A=1 TO LEN A$:COLOUR A MOD N+1:PRINTMID$(A$,A,1);:NEXT:ENDPROC