10 REM >3DMonDemS 20 : 30 MODE 129 40 VDU23;8202;0;0;0; 50 PROCdis 60 PROCinit 70 PROCpage1 80 PROCpage2 90 PROCpage3 100 MODE 7 110 PROCenab 120 END 130 : 140 DEF PROCtitle 150 COLOUR 129:CLS 160 PROC3dbx(160,940,1120,1008,TRUE,FALSE) 170 PROC3dcent(160,940,1120,1008,TRUE,"Monochrome 3D demonstration",3) 180 ENDPROC 190 : 200 DEF PROCpage1 210 PROCtitle 220 PROCotlnbx(16,732,1260,892,TRUE,"Introduction") 230 VDU5 240 GCOL0,3 250 MOVE32,844 260 PRINT"This program is intended to show the" 270 MOVE32,812 280 PRINT"monochrome 3D effect which can be" 290 MOVE32,780 300 PRINT"produced on non-colour displays." 310 PROCotlnbx(16,268,1260,684,TRUE,"Outline boxes") 320 VDU5 330 GCOL0,3 340 MOVE32,636 350 PRINT"Outline boxes are used extensively" 360 MOVE32,604 370 PRINT"on this screen. They can be used to" 380 MOVE32,572 390 PRINT"surround areas of text or related" 400 MOVE32,540 410 PRINT"information. Most have titles, as this" 420 MOVE32,508 430 PRINT"one does, but it is not necessary to" 440 MOVE32,476 450 PRINT"have a title." 460 MOVE32,412 470 PRINT"For example, a wordprocessor using" 480 MOVE32,380 490 PRINT"this style of screen layout might have" 500 MOVE32,348 510 PRINT"the text in one outline box and the" 520 MOVE32,316 530 PRINT"status information in another." 540 VDU4 550 PROCspc 560 ENDPROC 570 : 580 DEF PROCpage2 590 PROCtitle 600 PROCotlnbx(16,540,1260,892,TRUE,"3D boxes") 610 VDU5 620 GCOL0,3 630 MOVE32,844 640 PRINT"3D boxes are 'slabs' which appear" 650 MOVE32,812 660 PRINT"raised or recessed. They are used" 670 MOVE32,780 680 PRINT"for the title at the top of this" 690 MOVE32,748 700 PRINT"screen, and as the titles of outline" 710 MOVE32,716 720 PRINT"boxes." 730 MOVE32,652 740 PRINT"They can also be used, as in the" 750 MOVE32,620 760 PRINT"example below, to highlight data in an" 770 MOVE32,588 780 PRINT"outline box." 790 PROCotlnbx(16,284,1260,492,TRUE,"Status") 800 VDU5 810 GCOL0,3 820 MOVE32,428 830 PRINT"Word count" 840 PROC3dbx(420,384,160,56,FALSE,TRUE) 850 PROC3dcent(420,384,160,56,FALSE,"310",3) 860 VDU5 870 GCOL0,3 880 MOVE32,348 890 PRINT"RAM free" 900 PROC3dbx(420,304,160,56,FALSE,TRUE) 910 PROC3dcent(420,304,160,56,FALSE,"8K",3) 920 VDU5 930 GCOL0,3 940 MOVE640,348 950 PRINT"RAM used" 960 PROC3dbx(1028,304,160,56,FALSE,TRUE) 970 PROC3dcent(1028,304,160,56,FALSE,"3K",3) 980 VDU4 990 PROCspc 1000 ENDPROC 1010 : 1020 DEF PROCpage3 1030 PROCtitle 1040 PROCotlnbx(16,572,1260,892,TRUE,"3D boxes") 1050 VDU5 1060 GCOL0,3 1070 MOVE32,844 1080 PRINT"An alternative form of 3D box is" 1090 MOVE32,812 1100 PRINT"available, which has a white centre." 1110 MOVE32,780 1120 PRINT"You could use the two styles to" 1130 MOVE32,748 1140 PRINT"signify something, or just use" 1150 MOVE32,716 1160 PRINT"whichever you prefer." 1170 MOVE32,652 1180 PRINT"The previous example is reproduced" 1190 MOVE32,620 1200 PRINT"below in the alternative style." 1210 PROCotlnbx(16,316,1260,524,TRUE,"Status") 1220 VDU5 1230 GCOL0,3 1240 MOVE32,460 1250 PRINT"Word count" 1260 PROC3dbxcent(420,416,160,56,FALSE,TRUE) 1270 PROC3dcent(420,416,160,56,FALSE,"310",3) 1280 VDU5 1290 GCOL0,3 1300 MOVE32,380 1310 PRINT"RAM free" 1320 PROC3dbxcent(420,336,160,56,FALSE,TRUE) 1330 PROC3dcent(420,336,160,56,FALSE,"8K",3) 1340 VDU5 1350 GCOL0,3 1360 MOVE640,380 1370 PRINT"RAM used" 1380 PROC3dbxcent(1028,336,160,56,FALSE,TRUE) 1390 PROC3dcent(1028,336,160,56,FALSE,"3K",3) 1400 VDU4 1410 PROCspc 1420 ENDPROC 1430 : 1440 DEF PROCspc 1450 PROCotlnbx(16,16,1260,96,TRUE,"") 1460 VDU5 1470 GCOL0,3 1480 MOVE224,68 1490 PRINT"Press SPACE to continue..." 1500 VDU4 1510 *FX21 1520 REPEAT UNTIL GET=32 1530 ENDPROC 1540 : 1550 DEF PROCinit 1560 gxr%=FNgxr 1570 : 1580 REM COLOUR 0,255,255,255 1590 REM COLOUR 1,170,170,170 1600 REM COLOUR 2,85,85,85 1610 REM COLOUR 3,0,0,0 1620 : 1630 VDU19,0,7,0,0,0 1640 VDU19,1,6,0,0,0 1650 VDU19,2,1,0,0,0 1660 VDU19,3,0,0,0,0 1670 ENDPROC 1680 : 1690 DEF PROCotlnbx(bx%,by%,tx%,ty%,abs%,title$) 1700 LOCAL len% 1710 IF NOT abs% THEN tx%=bx%+tx%:ty%=by%+ty% 1720 GCOL0,2 1730 PROCrect(bx%,by%,tx%,ty%) 1740 GCOL0,0 1750 MOVEbx%,by% 1760 DRAW bx%,ty% 1770 DRAW tx%-4,ty% 1780 DRAW tx%-4,by%+4 1790 DRAW bx%,by%+4 1800 GCOL0,1 1810 PROCrect(bx%+8,by%+8,tx%-8,ty%-8) 1820 IF title$="" THEN ENDPROC 1830 len%=LEN(title$)*32 1840 PROC3dbx(bx%+32,ty%-24,bx%+64+len%,ty%+24,TRUE,FALSE) 1850 GCOL0,2 1860 PLOT69,bx%+32,ty%-4 1870 GCOL0,0 1880 PLOT69,bx%+64+len%,ty% 1890 VDU5 1900 GCOL0,3 1910 MOVEbx%+48,ty%+12 1920 PRINT title$ 1930 VDU4 1940 ENDPROC 1950 : 1960 DEF PROC3dbx(bx%,by%,tx%,ty%,abs%,in%) 1970 LOCAL c1%,c2% 1980 IF NOT abs% THEN tx%=bx%+tx%:ty%=by%+ty% 1990 IF in% THEN c1%=2:c2%=0 ELSE c1%=0:c2%=2 2000 GCOL0,1 2010 PROCrect(bx%,by%,tx%,ty%) 2020 GCOL0,c1% 2030 MOVEbx%,by% 2040 DRAW bx%,ty% 2050 DRAW tx%,ty% 2060 GCOL0,c2% 2070 MOVEbx%+4,by% 2080 DRAW tx%,by% 2090 DRAW tx%,ty%-4 2100 ENDPROC 2110 : 2120 DEF PROC3dbxcent(bx%,by%,tx%,ty%,abs%,in%) 2130 IF NOT abs% THEN tx%=bx%+tx%:ty%=by%+ty% 2140 PROC3dbx(bx%,by%,tx%,ty%,TRUE,in%) 2150 GCOL0,0 2160 PROCrect(bx%+8,by%+8,tx%-8,ty%-8) 2170 GCOL0,3 2180 PROCoutlinerect(bx%+8,by%+8,tx%-8,ty%-8) 2190 ENDPROC 2200 : 2210 DEF PROC3dcent(bx%,by%,tx%,ty%,abs%,text$,c%) 2220 IF NOT abs% THEN tx%=bx%+tx%:ty%=by%+ty% 2230 VDU5 2240 GCOL0,c% 2250 MOVEbx%+((tx%-bx%)/2)-LEN(text$)*16,by%+((ty%-by%)/2)+12 2260 PRINT text$ 2270 VDU4 2280 ENDPROC 2290 : 2300 DEF FNgxr 2310 GCOL0,7 2320 MOVE640,512 2330 PLOT&99,32,0 2340 =(POINT(640,512)>0) 2350 : 2360 DEF PROCrect(bx%,by%,tx%,ty%) 2370 IF gxr% THEN PROCrectgxr(bx%,by%,tx%,ty%) ELSE PROCrectnogxr(bx%,by%,tx%,ty%) 2380 ENDPROC 2390 : 2400 DEF PROCrectgxr(bx%,by%,tx%,ty%) 2410 MOVEbx%,by% 2420 PLOT&65,tx%,ty% 2430 ENDPROC 2440 : 2450 DEF PROCrectnogxr(bx%,by%,tx%,ty%) 2460 MOVEbx%,by% 2470 MOVEtx%,by% 2480 PLOT85,tx%,ty% 2490 MOVEbx%,ty% 2500 PLOT85,bx%,by% 2510 ENDPROC 2520 : 2530 DEF PROCoutlinerect(bx%,by%,tx%,ty%) 2540 MOVEbx%,by% 2550 DRAW tx%,by% 2560 DRAW tx%,ty% 2570 DRAW bx%,ty% 2580 DRAW bx%,by% 2590 ENDPROC 2600 : 2610 DEF PROCdis 2620 *FX229,1 2630 *FX4,2 2640 ENDPROC 2650 : 2660 DEF PROCenab 2670 *FX229 2680 *FX4 2690 ENDPROC