10 REM maxline%=60 for Datac 72 for Epson 20 IFE%:maxline%=72 ELSE maxline%=60 30 PROCinit 32 *KEY10"*EXEC !BOOT|M" 40 ONERROR:CALLS%:*FX229,1 50 : 60 REPEAT 70 !start%=buffer%+stlinpnt%*80 80 IFdisplay%:VDU23,1,0;0;0;0;:CALLC%:PRINT" ";STRING$(78,"-");:VDU23,1,1;0;0;0;:display%=0 90 PRINTTAB(pos%,vpos%); 100 a%=GET:A%=a% 110 IFA%<>27:PROCkeys 120 UNTILA%=27 130 PROCsave 140 PROCexit:CHAIN"TelMenu" 150 : 160 DEFPROCkeys 170 IFA%=3:PROCzap:CALLS%:ENDPROC 180 IFA%=12:PROCload:ENDPROC 190 IFA%=13:PROCnewline:ENDPROC 200 IFA%=16:PROCprint:ENDPROC 210 IFA%=19:PROCsave:CALLS%:ENDPROC 220 IFA%=23:PROCscrup:ENDPROC 230 IFA%=24:PROCscrdown:ENDPROC 240 IFINSTR("QWASZXqwaszx",CHR$(a%))<>0ANDt%:PROCpixel:ENDPROC 250 IFA%=135ORA%=127:PROCdelete:ENDPROC 260 IFA%=136:PROCleft:ENDPROC 270 IFA%=137:PROCright:ENDPROC 280 IFA%=138:PROCdown:ENDPROC 290 IFA%=139:PROCup:ENDPROC 300 IFa%>=200ANDa%<=229:PROCfkeys 310 IFA%=226:PROCinspc:ENDPROC 320 IFA%=227:PROCinsline:ENDPROC 330 IFA%=228:PROCdelline:ENDPROC 340 IFA%=209:PROCptog:ENDPROC 350 IFA%=219ORA%=229:?&7B=?&7B EOR1:display%=1:ENDPROC 360 IFt%=0ANDA%>31:?(buffer%+line%*80+col%)=A%:PROCright:display%=1 370 ENDPROC 380 : 390 DEFPROCfkeys 400 IFa%>=200ANDa%<=208:A%=a%-71 410 IFa%>=210ANDa%<=216:A%=a%-65 420 IFa%>=217ANDa%<=218:A%=a%-61 430 IFa%>=220ANDa%<=221:A%=a%-67 440 IFa%>=222ANDa%<=223:A%=a%-64 450 IFa%>=224ANDa%<=225:A%=365-a% 460 ENDPROC 470 : 480 DEFPROCzap 490 PROCask("Clear text") 500 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 510 CALLZ% 520 ENDPROC 530 : 540 DEFPROCnewline 550 IFline%=maxline%:VDU7:ENDPROC 560 PROCdown 570 IFcol%<>0:REPEAT:PROCleft:UNTILcol%=0 580 ENDPROC 590 : 600 DEFPROCpixel 610 LOCALW% 620 W%=2^((INSTR("QWASZ X",CHR$(a%AND223)))-1) 630 K%=buffer%+line%*80+col% 640 IF(?K%AND160)<>160:?K%=?K%OR160 650 IF?(K%ANDW%)=W%:?K%=?K%AND(255-W%)ELSE?K%=?K%EORW% 660 display%=1 670 ENDPROC 680 : 690 DEFPROCptog 700 t%=t%EOR1 710 IFt%:VDU23;10,&67;0;0;0 ELSE VDU23;10,&60;0;0;0 720 ENDPROC 730 : 740 DEFPROCleft 750 IFpos%>0:pos%=pos%-1:col%=col%-1:ENDPROC 760 IFline%=0:VDU7:ENDPROC 770 line%=line%-1:pos%=79:col%=79 780 IFvpos%>0:vpos%=vpos%-1:ENDPROC 790 stlinpnt%=stlinpnt%-1:display%=1 800 ENDPROC 810 : 820 DEFPROCright 830 IFpos%<79:pos%=pos%+1:col%=col%+1:ENDPROC 840 IFline%=maxline%:VDU7:ENDPROC 850 line%=line%+1:pos%=0:col%=0 860 IFvpos%<18:vpos%=vpos%+1:ENDPROC 870 stlinpnt%=stlinpnt%+1:display%=1 880 ENDPROC 890 : 900 DEFPROCdown 910 IFline%=maxline%:VDU7:ENDPROC 920 line%=line%+1 930 IFvpos%<18:vpos%=vpos%+1:ENDPROC 940 stlinpnt%=stlinpnt%+1:display%=1 950 ENDPROC 960 : 970 DEFPROCscrdown 980 IFstlinpnt%>=maxline%-18:VDU7:ENDPROC 990 stlinpnt%=stlinpnt%+1:line%=line%+1 1000 display%=1 1010 ENDPROC 1020 : 1030 DEFPROCup 1040 IFline%=0:VDU7:ENDPROC 1050 line%=line%-1 1060 IFvpos%>0:vpos%=vpos%-1:ENDPROC 1070 stlinpnt%=stlinpnt%-1:display%=1 1080 ENDPROC 1090 : 1100 DEFPROCscrup 1110 IFstlinpnt%=0:VDU7:ENDPROC 1120 stlinpnt%=stlinpnt%-1:line%=line%-1 1130 display%=1 1140 ENDPROC 1150 : 1160 DEFPROCdelete 1170 IFA%=127:IFcol%=0:VDU7:ENDPROC 1180 IFA%=127:PROCleft 1190 org%=buffer%+line%*80 1200 FORI%=col% TO 79:?(org%+I%)=?(org%+I%+1):NEXT 1210 org%?79=32:display%=1 1220 ENDPROC 1230 : 1240 DEFPROCinspc 1250 org%=buffer%+line%*80+col% 1260 dest%=buffer%+line%*80+79 1270 diff%=dest%-org% 1280 FORI%=0TOdiff% 1290 ?(dest%-I%)=?(dest%-I%-1) 1300 NEXT 1310 ?org%=32:display%=1 1320 ENDPROC 1330 : 1340 DEFPROCinsline 1350 LOCALP% 1360 org%=&80:dest%=&84:end%=&88:stop%=&8C 1370 !org%=buffer%+(maxline%-1)*80+79 1380 !dest%=buffer%+maxline%*80+79 1390 !end%=buffer%+line%*80 1400 !stop%=buffer%+line%*80+79 1410 FORI%=0TO2STEP2 1420 P%=&980 1430 [OPTI% 1440 LDY#0 1450 .loop 1460 LDA(org%),Y:STA(dest%),Y 1470 LDAorg%::BNEd1 1480 DECorg%+1 1490 .d1 1500 DECorg% 1510 LDAdest%:BNEd2 1520 DECdest%+1 1530 .d2 1540 DECdest% 1550 LDAorg%+1:CMPend%+1:BNEloop 1560 LDAorg%:CMPend%:BCSloop 1570 RTS 1580 ]NEXT 1590 CALL&980 1600 REPEAT 1610 ?!end%=32 1620 !end%=!end%+1 1630 UNTIL!end%=!stop%+1 1640 display%=1 1650 ENDPROC 1660 : 1670 DEFPROCdelline 1680 LOCALP% 1690 org%=&80:dest%=&84:end%=&88:stop%=&8C 1700 !org%=buffer%+(line%+1)*80 1710 !dest%=buffer%+line%*80 1720 !end%=buffer%+maxline%*80+79 1730 !stop%=buffer%+maxline%*80 1740 FORI%=0TO2STEP2 1750 P%=&980 1760 [OPTI% 1770 LDY#0 1780 .loop 1790 LDA(org%),Y:STA(dest%),Y 1800 INCorg%::BNEd1:INCorg%+1 1810 .d1 1820 INCdest%:BNEd2:INCdest%+1 1830 .d2 1840 LDAend%+1:CMPorg%+1:BNEloop 1850 LDAend%:CMPorg%:BCSloop 1860 RTS 1870 ]NEXT 1880 CALL&980 1890 REPEAT 1900 ?!end%=32 1910 !end%=!end%-1 1920 UNTIL!end%=!stop%-1 1930 display%=1 1940 ENDPROC 1950 : 1960 DEFPROCprint 1970 PROCask("Print text") 1980 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 1990 O%=buffer%:M%=maxline% 2000 CHAIN"PRINTER" 2010 : 2020 DEFPROCask(message$) 2030 VDU26 2040 VDU28,0,1,40,1 2050 REPEAT 2060 CLS 2070 PRINTTAB(6)message$" y/n ? "; 2080 Q%=GET:IFINSTR("YyNn ",CHR$(Q%))=0ANDQ%<>13ANDQ%<>27:VDU7 2090 UNTILINSTR("YyNn ",CHR$(Q%))<>0ORQ%=13ORQ%=27 2100 CALLR% 2110 VDU12,26 2120 VDU28,0,21,79,2 2130 display%=1 2140 ENDPROC 2150 : 2160 DEFPROCload 2170 PROCask("Load file") 2180 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 2190 PROCfile("Load file") 2200 OSCLI("LOAD "+f$+" "+STR$~(buffer%)) 2210 PROCinit 2220 ENDPROC 2230 : 2240 DEFPROCsave 2250 PROCask("Save file") 2260 IFINSTR("Yy",CHR$(Q%))=0:ENDPROC 2270 PROCfile("Save file") 2280 OSCLI("SAVE "+f$+" "+STR$~(buffer%)+"+"+STR$~((maxline%+1)*80)) 2290 ENDPROC 2300 : 2310 DEFPROCfile(message$) 2320 *FX229,0 2330 REPEAT 2340 CLS 2350 PRINTTAB(10)message$ 2360 PRINTTAB(10)"---------" 2370 PRINT 2380 OSCLI(".") 2390 REPEAT 2400 INPUTLINE'"OS command or Filename ? "f$ 2410 UNTILf$<>"" 2420 IFINSTR(f$,"*"):OSCLIf$ 2430 UNTILINSTR(f$,"*")=0 2440 *FX229,1 2450 ENDPROC 2460 : 2470 DEFPROCinit 2480 *FX18 2490 *FX21 2500 *FX4,1 2510 *FX229,1 2520 *FX225,200 2530 *FX226,210 2540 *FX227,220 2550 stlinpnt%=0 2560 pos%=0:vpos%=0:line%=0:col%=0 2570 start%=&70 2580 t%=0 2600 buffer%=&6700 2610 display%=1 2620 VDU23;10,&60;0;0;0 2630 CALLS% 2640 ENDPROC 2650 : 2660 DEFPROCexit 2670 *FX4,0 2680 *FX229,0 2690 VDU23;10,&67;0;0;0 2700 CALLR% 2710 VDU26,12 2720 ENDPROC