10 MODE7 20 DIM code% 200 30 buffer%=&6400 40 HIMEM=buffer% 50 PROCinit 60 PROCassemble:CALLZ% 70 : 80 VDU23;10,&60;0;0;0 90 VDU23,1,0;0;0;0; 100 D%=0:E%=1:REM Datac Epson 110 CLS 120 PRINT' 130 PRINTTAB(4)CHR$130CHR$141"80 Column Teletext Editor" 140 PRINTTAB(4)CHR$131CHR$141"80 Column Teletext Editor" 150 PRINTTAB(5)CHR$146"`````````````````````````" 160 PRINT 170 PRINTTAB(4)CHR$130CHR$141"H to load help screen" 180 PRINTTAB(4)CHR$131CHR$141"H to load help screen" 190 PRINT 200 PRINTTAB(4)CHR$130CHR$141"Any other key for a new page" 210 PRINTTAB(4)CHR$131CHR$141"Any other key for a new page" 220 Q%=GET 230 IFQ%=27:PROCexit:CHAIN"TelMenu" 240 VDU23,1,1;0;0;0; 250 IFQ%=ASC"D"ORQ%=ASC"d":D%=1:E%=0:REM Datac Epson 260 IFQ%=ASC"H"ORQ%=ASC"h":OSCLI("LOAD Help72 "+STR$~(buffer%)):PROCinit 270 : 280 REM maxline%=60 for Datac 72 for Epson 290 IFE%:maxline%=72 ELSE maxline%=60 300 ONERROR:*FX229,1 310 REPEAT 320 PRINTTAB(pos%,vpos%); 330 !start%=buffer%+(stlinpnt%*80)+stcolpnt% 340 CALLT% 350 a%=GET:A%=a% 360 IFA%<>27:PROCkeys 370 UNTILA%=27 380 PROCsave 390 PROCexit:CHAIN"TelMenu" 400 : 410 DEFPROCkeys 420 IFA%=1:PROCscrleft:ENDPROC 430 IFA%=3:PROCzap:ENDPROC 440 IFA%=4:PROCscrright:ENDPROC 450 IFA%=12:PROCload:ENDPROC 460 IFA%=13:PROCnewline:ENDPROC 470 IFA%=16:PROCprint:ENDPROC 480 IFA%=19:PROCsave:ENDPROC 490 IFA%=23:PROCscrup:ENDPROC 500 IFA%=24:PROCscrdown:ENDPROC 510 IFINSTR("QWASZXqwaszx",CHR$(a%))<>0ANDt%:PROCpixel:ENDPROC 520 IFA%=135ORA%=127:PROCdelete:ENDPROC 530 IFA%=136:PROCleft:ENDPROC 540 IFA%=137:PROCright:ENDPROC 550 IFA%=138:PROCdown:ENDPROC 560 IFA%=139:PROCup:ENDPROC 570 IFa%>=200ANDa%<=229:PROCfkeys 580 IFA%=226:PROCinspc:ENDPROC 590 IFA%=227:PROCinsline:ENDPROC 600 IFA%=228:PROCdelline:ENDPROC 610 IFA%=209ORA%=219ORA%=229:PROCptog:ENDPROC 620 IFt%=0ANDA%>31:?(buffer%+line%*80+col%)=A%:PROCright 630 ENDPROC 640 : 650 DEFPROCfkeys 660 IFa%>=200ANDa%<=208:A%=a%-71 670 IFa%>=210ANDa%<=216:A%=a%-65 680 IFa%>=217ANDa%<=218:A%=a%-61 690 IFa%>=220ANDa%<=221:A%=a%-67 700 IFa%>=222ANDa%<=223:A%=a%-64 710 IFa%>=224ANDa%<=225:A%=365-a% 720 ENDPROC 730 : 740 DEFPROCexit 750 *FX4,0 760 *FX229,0 770 VDU23;10,&70;0;0;0 780 ENDPROC 790 : 800 DEFPROCzap 810 PROCask("Clear text") 820 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 830 CALLZ% 840 ENDPROC 850 : 860 DEFPROCnewline 870 IFline%=maxline%:VDU7:ENDPROC 880 PROCdown 890 IFcol%<>0:REPEAT:PROCleft:UNTILcol%=0 900 ENDPROC 910 : 920 DEFPROCpixel 930 LOCALW% 940 W%=2^((INSTR("QWASZ X",CHR$(a%AND223)))-1) 950 K%=buffer%+line%*80+col% 960 IF(?K%AND160)<>160:?K%=?K%OR160 970 IF?(K%ANDW%)=W%:?K%=?K%AND(255-W%)ELSE?K%=?K%EORW% 980 ENDPROC 990 : 1000 DEFPROCptog 1010 t%=t%EOR1 1020 IFt%:VDU23;10,&70;0;0;0 ELSE VDU23;10,&60;0;0;0 1030 ENDPROC 1040 : 1050 DEFPROCleft 1060 IFpos%>0:pos%=pos%-1:col%=col%-1:ENDPROC 1070 IFcol%>0:col%=col%-1:stcolpnt%=stcolpnt%-1:ENDPROC 1080 IFline%=0:VDU7:ENDPROC 1090 line%=line%-1:pos%=39:col%=79:stcolpnt%=40 1100 IFvpos%>0:vpos%=vpos%-1:ENDPROC 1110 stlinpnt%=stlinpnt%-1 1120 ENDPROC 1130 : 1140 DEFPROCscrleft 1150 IFstcolpnt%=0:VDU7:ENDPROC 1160 stcolpnt%=stcolpnt%-1:col%=col%-1 1170 ENDPROC 1180 : 1190 DEFPROCright 1200 IFpos%<39:pos%=pos%+1:col%=col%+1:ENDPROC 1210 IFcol%<79:col%=col%+1:stcolpnt%=stcolpnt%+1:ENDPROC 1220 IFline%=maxline%:VDU7:ENDPROC 1230 line%=line%+1:pos%=0:col%=0:stcolpnt%=0 1240 IFvpos%<24:vpos%=vpos%+1:ENDPROC 1250 stlinpnt%=stlinpnt%+1 1260 ENDPROC 1270 : 1280 DEFPROCscrright 1290 IFstcolpnt%=40:VDU7:ENDPROC 1300 stcolpnt%=stcolpnt%+1:col%=col%+1 1310 ENDPROC 1320 : 1330 DEFPROCdown 1340 IFline%=maxline%:VDU7:ENDPROC 1350 line%=line%+1 1360 IFvpos%<24:vpos%=vpos%+1:ENDPROC 1370 stlinpnt%=stlinpnt%+1 1380 ENDPROC 1390 : 1400 DEFPROCscrdown 1410 IFstlinpnt%>=maxline%-24:VDU7:ENDPROC 1420 stlinpnt%=stlinpnt%+1:line%=line%+1 1430 ENDPROC 1440 : 1450 DEFPROCup 1460 IFline%=0:VDU7:ENDPROC 1470 line%=line%-1 1480 IFvpos%>0:vpos%=vpos%-1:ENDPROC 1490 stlinpnt%=stlinpnt%-1 1500 ENDPROC 1510 : 1520 DEFPROCscrup 1530 IFstlinpnt%=0:VDU7:ENDPROC 1540 stlinpnt%=stlinpnt%-1:line%=line%-1 1550 ENDPROC 1560 : 1570 DEFPROCdelete 1580 IFA%=127:IFcol%=0:VDU7:ENDPROC 1590 IFA%=127:PROCleft 1600 org%=buffer%+line%*80 1610 FORI%=col% TO 79:?(org%+I%)=?(org%+I%+1):NEXT 1620 org%?79=32 1630 ENDPROC 1640 : 1650 DEFPROCinspc 1660 org%=buffer%+line%*80+col% 1670 dest%=buffer%+line%*80+79 1680 diff%=dest%-org% 1690 FORI%=0TOdiff% 1700 ?(dest%-I%)=?(dest%-I%-1) 1710 NEXT 1720 ?org%=32 1730 ENDPROC 1740 : 1750 DEFPROCinsline 1760 LOCALP% 1770 org%=&70:dest%=&74:end%=&78:stop%=&7C 1780 !org%=buffer%+(maxline%-1)*80+79 1790 !dest%=buffer%+maxline%*80+79 1800 !end%=buffer%+line%*80 1810 !stop%=buffer%+line%*80+79 1820 FORI%=0TO2STEP2 1830 P%=&980 1840 [OPTI% 1850 LDY#0 1860 .loop 1870 LDA(org%),Y:STA(dest%),Y 1880 LDAorg%::BNEd1 1890 DECorg%+1 1900 .d1 1910 DECorg% 1920 LDAdest%:BNEd2 1930 DECdest%+1 1940 .d2 1950 DECdest% 1960 LDAorg%+1:CMPend%+1:BNEloop 1970 LDAorg%:CMPend%:BCSloop 1980 RTS 1990 ]NEXT 2000 CALL&980 2010 REPEAT 2020 ?!end%=32 2030 !end%=!end%+1 2040 UNTIL!end%=!stop%+1 2050 ENDPROC 2060 : 2070 DEFPROCdelline 2080 LOCALP% 2090 org%=&70:dest%=&74:end%=&78:stop%=&7C 2100 !org%=buffer%+(line%+1)*80 2110 !dest%=buffer%+line%*80 2120 !end%=buffer%+maxline%*80+79 2130 !stop%=buffer%+maxline%*80 2140 FORI%=0TO2STEP2 2150 P%=&980 2160 [OPTI% 2170 LDY#0 2180 .loop 2190 LDA(org%),Y:STA(dest%),Y 2200 INCorg%::BNEd1:INCorg%+1 2210 .d1 2220 INCdest%:BNEd2:INCdest%+1 2230 .d2 2240 LDAend%+1:CMPorg%+1:BNEloop 2250 LDAend%:CMPorg%:BCSloop 2260 RTS 2270 ]NEXT 2280 CALL&980 2290 REPEAT 2300 ?!end%=32 2310 !end%=!end%-1 2320 UNTIL!end%=!stop%-1 2330 ENDPROC 2340 : 2350 DEFPROCprint 2360 PROCask("Print text") 2370 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 2380 PRINT'TAB(4)CHR$130CHR$141"Printing text please wait" 2390 PRINTTAB(4)CHR$131CHR$141"Printing text please wait" 2400 O%=buffer%:o%=0:graphic%=0:sep%=0 2410 datac%=D%:epson%=E% 2420 VDU2 2430 IFepson%:VDU1,27,1,48 2440 IFdatac%:VDU1,27,1,65,1,11 2450 FORl%=0TOmaxline% 2460 FORc%=1TO80 2470 d%=?(O%+o%) 2480 IFd%<32:d%=32 2490 IF(epson%+datac%)=0 AND (d%<32ORd%>126):d%=32 2500 IFd%>127AND(epson%+datac%):PROCeprint 2510 VDU1,d% 2520 o%=o%+1 2530 NEXT 2540 IFepson%:VDU1,10 2550 VDU1,13:graphic%=0:sep%=0 2560 NEXT 2570 VDU1,27,1,50 2580 VDU1,13,1,12,3 2590 ENDPROC 2600 : 2610 DEFPROCeprint 2620 IFd%=&80:d%=32:ENDPROC 2630 IFd%>&80 AND d%<&88:graphic%=0:d%=32:ENDPROC 2640 IFd%>&87 AND d%<&91:d%=32:ENDPROC 2650 IFd%>&90 AND d%<&98:graphic%=1:d%=32:ENDPROC 2660 IFd%=&99:sep%=0 2670 IFd%=&9A:sep%=1 2680 IFd%>&97 AND d%<&A0:d%=32:ENDPROC 2690 IFd%>&BF AND d%<&E0:d%=32:ENDPROC 2700 IFgraphic%=0:d%=32:ENDPROC 2710 IFepson%:PROCepson 2720 IFdatac%:PROCdatac 2730 d%=0 2740 ENDPROC 2750 : 2760 DEFPROCdatac 2770 VDU1,27,1,54 2780 VDU1,d% 2790 VDU1,27,1,55 2800 ENDPROC 2810 : 2820 DEFPROCepson 2830 flag%=0 2840 FORn%=0TO6 2850 flag%=flag%+(d%AND2^n%) 2860 NEXT 2870 : 2880 VDU1,27,1,ASC"^",1,0,1,6,1,0 2890 pr%=0 2900 IFflag%AND1:pr%=pr%+&E0-(sep%*&20) 2910 IFflag%AND4:pr%=pr%+&1C-(sep%*&04) 2920 IFflag%AND16:pr%=pr%+&8003-(sep%*&8000) 2930 IFsep%:VDU1,0,1,0 2940 FORn%=sep%TO2 2950 VDU1,pr%AND&FF 2960 VDU1,(pr%AND&FF00)DIV&100 2970 NEXT 2980 pr%=0 2990 IFflag%AND2:pr%=pr%+&E0-(sep%*&20) 3000 IFflag%AND8:pr%=pr%+&1C-(sep%*&04) 3010 IFflag%AND64:pr%=pr%+&8003-(sep%*&8000) 3020 IFsep%:VDU1,0,1,0 3030 FORn%=sep%TO2 3040 VDU1,pr%AND&FF 3050 VDU1,(pr%AND&FF00)DIV&100 3060 NEXT 3070 ENDPROC 3080 : 3090 DEFPROCask(message$) 3100 REPEAT 3110 CLS 3120 PRINT'TAB(8)CHR$130CHR$141message$" y/n ? " 3130 PRINTTAB(8)CHR$131CHR$141message$" y/n ? " 3140 Q%=GET 3150 UNTILINSTR("YyNn ",CHR$(Q%))<>0ORQ%=13ORQ%=27 3160 ENDPROC 3170 : 3180 DEFPROCload 3190 PROCask("Load file") 3200 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 3210 PROCfile("Load file") 3220 OSCLI("LOAD "+f$+" "+STR$~(buffer%)) 3230 PROCinit 3240 ENDPROC 3250 : 3260 DEFPROCsave 3270 PROCask("Save file") 3280 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 3290 PROCfile("Save file") 3300 OSCLI("SAVE "+f$+" "+STR$~(buffer%)+"+"+STR$~((maxline%+1)*80)) 3310 ENDPROC 3320 : 3330 DEFPROCfile(message$) 3340 *FX229,0 3350 REPEAT 3360 CLS 3370 PRINTTAB(10)CHR$130CHR$141message$ 3380 PRINTTAB(10)CHR$131CHR$141message$ 3390 PRINTTAB(11)CHR$146"`````````" 3400 PRINT 3410 OSCLI(".") 3420 REM PRINT'"ƒOS command or" 3430 REPEAT 3440 INPUTLINE'"ƒ*command or Filename ? "f$ 3450 UNTILf$<>"" 3460 IFINSTR(f$,"*"):OSCLIf$ 3470 UNTILINSTR(f$,"*")=0 3480 *FX229,1 3490 ENDPROC 3500 : 3510 DEFPROCinit 3520 *FX18 3530 *FX21 3540 *FX4,1 3550 *FX229,1 3560 *FX225,200 3570 *FX226,210 3580 *FX227,220 3590 stcolpnt%=0:stlinpnt%=0 3600 pos%=0:vpos%=0:line%=0:col%=0 3610 start%=&70 3620 t%=0 3622 *KEY10"*EXEC !BOOT|M" 3630 ENDPROC 3640 : 3650 PROCexit 3660 *FX229,0 3670 *FX4,0 3680 ENDPROC 3690 : 3700 DEFPROCassemble 3710 begin=&80 3720 source=&82 3730 dest=&84 3740 FORI%=0TO2STEP2 3750 P%=code% 3760 [OPTI% 3770 .T% 3780 LDX#0:STXcounter:STXcounter+1 3790 LDAstart%:STAbegin 3800 LDAstart%+1:STAbegin+1 3810 .loop1 3820 LDAbegin:STAsource 3830 LDAbegin+1:STAsource+1 3840 LDA#0:STAdest 3850 LDA#&7C:STAdest+1 3860 CLC:LDAsource:ADCcounter:STAsource 3870 BCCnc1:INCsource+1 3880 .nc1 3890 CLC:LDAsource+1:ADCcounter+1:STAsource+1 3900 CLC:LDAdest:ADCcounter:STAdest 3910 BCCnc2:INCdest+1 3920 .nc2 3930 CLC:LDAdest+1:ADCcounter+1:STAdest+1 3940 LDY#0:LDA(source),Y:STA(dest),Y 3950 INX:CPX#40:BNEnotx 3960 .addloop 3970 INCbegin:BNEnc4:INCbegin+1 3980 .nc4 3990 DEX:BNEaddloop 4000 .notx 4010 INCcounter 4020 BNEnc3:INCcounter+1 4030 .nc3 4040 LDAcounter+1:CMP#4:BNEloop1 4050 RTS 4060 .Z% 4070 LDA#buffer%MOD256:STAdest 4080 LDA#buffer%DIV256:STAdest+1 4090 LDA#32:LDY#0 4100 .zaploop 4110 STA(dest),Y 4120 INCdest:BNEnc5:INCdest+1 4130 .nc5 4140 LDXdest+1:CPX#&7C:BNEzaploop 4150 RTS 4160 .counter 4170 EQUW0 4180 ]NEXT 4190 ENDPROC