10 DEFFNS="LfontEd" 20 REM PAGE+&600 on BBC B 30 IF PAGE<>&1F00:PAGE=&1F00:CHAIN"Lfonted" 40 *FX20,6 50 MODE4 60 VDU28,0,4,39,0 70 VDU24,0;0;1180;848; 80 VDU23,1,0;0;0;0; 90 *FX4,1 100 VDU19,0,4;0; 110 VDU19,1,3;0; 120 ONERROR: 130 CLS:CLG:PRINT"Do you want to see the demo? y/n " 140 A$=GET$ 150 IFA$="Y"ORA$="y":CLS:PROCdemo 160 a%=194:d%=840 170 : 180 ONERROR 190 CLS:VDU23,1,0;0;0;0; 200 REPEAT 210 PROCtitle 220 PLOT4,a%-8,d%-70:PLOT5,a%-56,d%-70 230 D%=GET 240 PLOT7,a%-8,d%-70 250 IFD%>31 AND D%<127:PROCplotchar 260 PROCkeys 270 UNTILFALSE 280 : 290 DEFPROCtitle 300 VDU30 310 PRINT" **** Large Font Text Editor ****" 320 PRINT 330 PRINT" Ctrl+ lear ont oad" 340 PRINT"

rint ave" 350 ENDPROC 360 : 370 DEFPROCplotchar 380 ?&70=D% 390 X%=&70:Y%=0:A%=10:Q%=USR(&FFF1) 400 FOR f%=0 TO 7 410 C%=?(&71+f%) 420 h1%=d%-f%*8 430 h2%=h1%-4 440 FOR i%=0 TO 7 450 p1%=a%-i%*8 460 p2%=p1%-8 470 IFC%AND1:ltype%=5 ELSE ltype%=7 480 PLOT4,p1%,h1% 490 PLOTltype%,p2%,h1% 500 PLOT4,p1%,h2% 510 PLOTltype%,p2%,h2% 520 C%=C%DIV2 530 NEXT:NEXT 540 PROCright 550 ENDPROC 560 : 570 DEFPROCright 580 a%=a%+64+8 590 IF a%>1130 AND d%>168:PROCnewline 600 IF a%>1130 AND d%=168:a%=1130 610 ENDPROC 620 : 630 DEFPROCnewline 640 d%=d%-64-32:a%=194 650 ENDPROC 660 : 670 DEFPROCdelete 680 IFa%>194:a%=a%-64-8:PROCdodel:ENDPROC 690 IFd%=840:ENDPROC 700 a%=1130:d%=d%+64+32 710 PROCdodel:ENDPROC 720 : 730 DEFPROCdodel 740 IFa%=1130:adj%=1 ELSE adj%=0 750 D%=32:PROCplotchar 760 IFadj%:a%=1130:d%=d%+64+32 ELSE a%=a%-64-8 770 ENDPROC 780 : 790 DEFPROCkeys 800 IF D%=3:PROCclear 810 IF D%=6:PROCchfont 820 IF D%=12:PROCload 830 IF D%=13 AND d%>168:PROCnewline 840 IF D%=16:PROCprint 850 IF D%=19:PROCsave 860 IF D%=127:PROCdelete 870 IF D%=136 AND a%>194:a%=a%-64-8 880 IF D%=137 AND a%<1130:a%=a%+64+8 890 IF D%=138 AND d%>168:d%=d%-64-32 900 IF D%=139 AND d%<832:d%=d%+64+32 910 ENDPROC 920 : 930 DEFPROCchfont 940 PROCgetfile("Change Font","F.*") 950 IFf$="":f$="BBC" 960 IFINSTR(f$,"."):f$=MID$(f$,INSTR(f$,".")+1) 970 F%=OPENIN("F."+f$) 980 PROCdofont 990 CLOSE#F% 1000 ENDPROC 1010 : 1020 DEFPROCdofont 1030 FORch%=32TO126 1040 VDU23,ch% 1050 FORI%=0TO7:VDUBGET#F%:NEXT 1060 NEXT 1070 ENDPROC 1080 : 1090 DEFPROCload 1100 PROCgetfile("Load Screen","S.*") 1110 IFf$="":f$="INTRO" 1120 IFINSTR(f$,"."):f$=MID$(f$,INSTR(f$,".")+1) 1130 OSCLI("LOAD S."+f$) 1140 a%=194:d%=840 1150 ENDPROC 1160 : 1170 DEFPROCgetfile(Q$,T$) 1180 VDU12,14 1190 PRINTQ$;" y/n" 1200 A$=GET$ 1210 IF A$<>"Y" AND A$<>"y":VDU12,15:end 1220 VDU23,1,1;0;0;0; 1230 CLS 1240 PRINT"Shift to scroll until the filename" 1250 PRINT"prompt appears." 1260 PRINT 1270 OSCLI("INFO "+T$) 1280 PRINT 1290 PRINT"Return on its own will cause the" 1300 PRINT"default file to be loaded." 1310 PRINT 1320 INPUT"Filename "f$ 1330 VDU23,1,0;0;0;0; 1340 VDU12,15 1350 ENDPROC 1360 : 1370 DEFPROCsave 1380 VDU12 1390 PRINT"Save Screen y/n" 1400 A$=GET$ 1410 IF A$<>"Y" AND A$<>"y":VDU12:ENDPROC 1420 VDU23,1,1;0;0;0; 1430 INPUT"Filename "f$ 1440 IFINSTR(f$,"."):f$=MID$(f$,INSTR(f$,".")+1) 1450 VDU23,1,0;0;0;0; 1460 VDU12 1470 OSCLI("SAVE S."+f$+" 5800 7FFF") 1480 ENDPROC 1490 : 1500 DEFPROCclear 1510 VDU12 1520 PRINT"Clear Screen y/n " 1530 A$=GET$ 1540 IF A$<>"Y" AND A$<>"y":VDU12:ENDPROC 1550 VDU12 1560 CLG:a%=194:d%=840 1570 ENDPROC 1580 : 1590 DEFPROCprint 1600 VDU12 1610 PRINT"Print Screen y/n " 1620 A$=GET$ 1630 IF A$<>"Y" AND A$<>"y":VDU12:ENDPROC 1640 CLS:PRINT"Printer Ready? Hit a Key" 1650 A$=GET$ 1660 PROCdoprint 1670 VDU12 1680 ENDPROC 1690 : 1700 DATA" ************ ",0 1710 DATA"",0 1720 DATA" 8 ",0 1730 DATA" BIT ",0 1740 DATA" SOFTWARE ",0 1750 DATA"",0 1760 DATA" ************ ",1000 1770 DATA"The characters",0 1780 DATA"are plotted in",0 1790 DATA"MODE4 graphics",0 1800 DATA"using each ",0 1810 DATA"character's ",0 1820 DATA"definition as ",0 1830 DATA"the plot data.",1000 1840 DATA"This provides ",0 1850 DATA"a quick method",0 1860 DATA"of producing ",0 1870 DATA"title pages in",0 1880 DATA"a chosen font,",0 1890 DATA"which may be ",0 1900 DATA"saved/printed",1000 1910 DATA"When this text",0 1920 DATA"has finished ",0 1930 DATA"or ",0 1940 DATA"takes you into",0 1950 DATA"scrn-edit mode",0 1960 DATA" ",1000 1970 DATA"",0 1980 DATA"Use |- ",0 1990 DATA"",0 2000 DATA"arrow keys to ",0 2010 DATA"move about. ",0 2020 DATA" ",500 2030 DATA" left ",0 2040 DATA"",0 2050 DATA"ctrl+C = clear",0 2060 DATA"ctrl+F = font ",0 2070 DATA"ctrl+P = print",0 2080 DATA"ctrl+L = load ",0 2090 DATA"ctrl+S = save",1000 2100 DATA" ************ ",0 2110 DATA"* ********** *",0 2120 DATA"** Large **",0 2130 DATA"** Font **",0 2140 DATA"** Text **",0 2150 DATA"** Editor **",0 2160 DATA"* ********** *",0 2170 DATA" ************",0 2180 DATA"XXX",0 2190 : 2200 DEFPROCdemo 2210 F%=OPENIN("F.SPACE") 2220 PROCdofont 2230 CLOSE#F% 2240 READ line$,time% 2250 a%=194:d%=840 2260 : 2270 REPEAT 2280 pnt%=0 2290 REPEAT 2300 pnt%=pnt%+1 2310 D%=ASC(MID$(line$,pnt%,1)) 2320 IF D%=32:PROCright 2330 IFD%<>32:PROCplotchar 2340 UNTILpnt%=LEN(line$) 2350 IFtime%:Z%=INKEY(time%):CLG:a%=194:d%=840 2360 READ line$,time% 2370 IFline$="":REPEAT:READ line$,time%:PROCnewline:UNTIL line$<>"" 2380 UNTIL line$="XXX" 2390 ENDPROC 2400 : 2410 DEFPROCdoprint 2420 CLS:S%=&900 2430 VDU26 2440 passnumber=S% 2450 pattern0=S%+1 2460 !pattern0=&0300 2470 pattern4=S%+3 2480 !pattern4=&3F00 2490 pattern1=S%+5 2500 !pattern1=&3F260400 2510 pattern2=S%+9 2520 !pattern2=&49841000 2530 !(pattern2+4)=&FF6FB966 2540 S%=S%+17 2550 PROClimits 2560 PROCassemble 2570 VDU2,1,27,1,65,1,8 2580 VDU1,10,1,10,1,10 2590 FOR Y%=1023 TO 0 STEP -16 2600 VDU1,27,1,76,1,n1,1,n2 2610 FOR X%=0 TO 1279 STEP stepsize 2620 !Xlo=X%+Y%*&10000 2630 ?pass=0 2640 CALL pixel 2650 NEXT 2660 VDU1,10 2670 NEXT 2680 VDU1,27,1,65,1,12,1,12,3 2690 VDU28,0,4,39,0 2700 VDU24,0,0,1279,848 2710 ENDPROC 2720 : 2730 DEFPROClimits 2740 user=&A00:A%=&87 2750 !user=USR(&FFF4) 2760 mode=user?2 2770 n1=192:n2=3 2780 stepsize=4:?passnumber=3:?&80=pattern4 MOD 256:?&81=pattern4 DIV 256 2790 ENDPROC 2800 : 2810 DEFPROCassemble 2820 osword=&FFF1 2830 oswrch=&FFEE 2840 Xlo=S% 2850 Xhi=S%+1 2860 Ylo=S%+2 2870 Yhi=S%+3 2880 value=S%+4 2890 byte=S%+5 2900 pass=S%+6 2910 count4=S%+7 2920 S%=S%+8 2930 FOR opt=0 TO 2 STEP 2 2940 P%=S% 2950 [OPT opt 2960 .point 2970 LDX #Xlo MOD 256 2980 LDY #Xlo DIV 256 2990 LDA #9 3000 JSR osword 3010 RTS 3020 .printchar 3030 LDA #1 3040 JSR oswrch 3050 LDA byte 3060 JSR oswrch 3070 RTS 3080 .decy4 3090 SEC 3100 LDA Ylo 3110 SBC #4 3120 STA Ylo 3130 BCC decYhi 3140 RTS 3150 .decYhi 3160 DEC Yhi 3170 RTS 3180 .incy16 3190 CLC 3200 LDA Ylo 3210 ADC #16 3220 STA Ylo 3230 BCS incYhi 3240 RTS 3250 .incYhi 3260 INC Yhi 3270 RTS 3280 .twobits 3290 LDA (&80),Y 3300 CPX #0 3310 BEQ rotatein 3320 .rotateout 3330 ROR A 3340 ROR A 3350 DEX 3360 BNE rotateout 3370 .rotatein 3380 ROR A 3390 ROL byte 3400 ROR A 3410 ROL byte 3420 RTS 3430 .onebyte 3440 JSR point 3450 LDY value 3460 LDA pass 3470 AND #3 3480 TAX 3490 JSR twobits 3500 JSR decy4 3510 DEC count4 3520 BNE onebyte 3530 JSR printchar 3540 RTS 3550 .pixel 3560 LDA #4 3570 STA count4 3580 JSR onebyte 3590 JSR incy16 3600 INC pass 3610 LDA pass 3620 CMP passnumber 3630 BNE pixel 3640 RTS 3650 ] 3660 NEXT 3670 ENDPROC