300 : 310 *FX119 320 MODE7 330 PROCa 340 PROCb 350 PROCc 360 PROCd 370 ONERRORIFERR=17THENPROCe("FX229,1"):GOTO380ELSEVDU6:CLOSE#0:MODE7:REPORT:PRINT" at line ";ERL:PROCe("KEY0 LIST "+STR$(ERL)+"|M"):PROCe("FX21"):PROCe("FX138,0,128"):PROCf:END 380 REPEAT 390 g%=FNh 400 IFg%=1THENPROCi 410 IFg%=2THENPROCj 420 IFg%=3THENPROCk 430 IFg%=4THENPROCl 440 IFg%=5THENPROCm 450 UNTILg%=6 460 MODE7 470 PROCf 480 END 490 : 500 DEFPROCb 510 *FX225,3 520 *FX226,3 530 *FX227,3 540 *FX229,1 550 *FX4,1 560 ENDPROC 570 : 580 DEFPROCf 590 *FX225,1 600 *FX226,128 610 *FX227,144 620 *FX229,0 630 *FX4,0 640 ENDPROC 650 : 660 DEFPROCc 670 n%=4096 680 o%=25 690 DIMp%(o%),q%(6),r%256,s%n% 700 PROCt 710 PROCu 720 PROCv 730 ENDPROC 740 : 750 : 760 DEFPROCa 770 VDU23,1,0;0;0;0; 780 ENDPROC 790 : 800 DEFPROCw 810 VDU23,1,1;0;0;0; 820 ENDPROC 830 : 840 DEFFNS 850 ="SendMes" 860 : 870 DEFPROCt 880 x%=6 890 y%=3 900 z%=3 910 aa%=7 920 ba%=7 930 ca%=3 940 da%=7 950 ea%=4 960 fa%=3 970 ga%=7 980 ha%=7 990 ia%=2 1000 ja%=3 1010 ka%=3 1020 la%=7 1030 ma%=3 1040 na%=7 1050 oa%=7 1060 pa%=3 1070 qa%=3 1080 m%=7 1090 ra%=3 1100 sa%=3 1110 ta%=7 1120 ENDPROC 1130 : 1140 DEFPROCu 1150 LOCALua% 1160 VDU26,12 1170 PRINT" ";CHR$(144+x%);"ÿ¯¯¯¯¯¯¯¥ÿ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ÿ"; 1180 PRINTCHR$(144+x%);"ÿ¯¯¯¯¯¯¯¯¯¯¯ª¯¯¯¯¯¯¯¯ ";CHR$(144+x%);"ÿ"; 1190 PRINTCHR$(144+x%);"ÿ";CHR$(144+y%);"êë ·Ž€µ ê£àðàðê ° °ð°ðàð   ";CHR$(144+x%);"ÿ"; 1200 PRINTCHR$(144+x%);"ÿ";CHR$(144+y%);"ê뢡·Žµ· ¢ëêêê€ê¡µŽµœµµê® ";CHR$(144+x%);"ÿ"; 1210 PRINTCHR$(144+x%);"";CHR$(144+y%);"¢£ £ ¡£¡ ¢£¢£¢ ¢¡££¡¡¡¡¢£   ";CHR$(145);" "; 1220 FORua%=1TO18 1230 PRINTCHR$(144+x%);"ÿ";SPC(36);CHR$(144+x%);"ÿ"; 1240 NEXT 1250 PRINTCHR$(144+x%);"ÿüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÿ"; 1260 VDU28,2,22,37,5 1270 ENDPROC 1280 : 1290 DEFPROCe($r%) 1300 LOCALX%,Y% 1310 X%=r%MOD256 1320 Y%=r%DIV256 1330 CALL&FFF7 1340 ENDPROC 1350 : 1360 DEFPROCd 1370 REPEAT 1380 CLS 1390 PROCz 1400 PRINTTAB(0,2);CHR$(128+aa%);"Please insert your 8BS submissions"'CHR$(128+aa%);"disc into drive 0 and press SPACE"'CHR$(128+aa%);"when you are ready..." 1410 PRINT'CHR$(128+aa%);"The disc must be in the drive at"'CHR$(128+aa%);"all times when using this program." 1420 *FX21 1430 REPEATUNTILGET=32 1440 IFFNva=8THENPROCe("MOUNT 0")ELSEPROCe("DRIVE 0") 1450 IFFNwa("!Mess")THENPRINT'CHR$(128+aa%);"This disc has a !Mess file. You may";CHR$(128+aa%);"wish to read the accompanying"'CHR$(128+aa%);"article before continuing." 1460 IFFNwa("!Mess")THENPRINT'CHR$(128+aa%);"Press SPACE to continue...":PROCe("FX21"):REPEATUNTILGET=32 1470 IFNOTFNwa("!Mesg")THENPROCbaELSEPROCxa 1480 UNTILya%=0 1490 ENDPROC 1500 : 1510 DEFPROCxa 1520 PROCza 1530 IFya%=0THENENDPROC 1540 PRINT'CHR$(128+aa%);"This program can only handle"'CHR$(128+aa%);"version 0 files." 1550 PRINT'CHR$(128+aa%);"Press SPACE to continue..." 1560 *FX21 1570 REPEATUNTILGET=32 1580 ENDPROC 1590 : 1600 DEFPROCz 1610 PRINTTAB(5,0);CHR$(128+z%);"8BS messaging system 1.04" 1620 ENDPROC 1630 : 1640 DEFFNva 1650 LOCALA%,Y% 1660 A%=0 1670 Y%=0 1680 =(USR(&FFDA)AND&FF) 1690 : 1700 DEFFNwa(ab$) 1710 LOCALbb% 1720 bb%=OPENIN(ab$) 1730 IFbb%=0THEN=FALSE 1740 CLOSE#bb% 1750 =TRUE 1760 : 1770 DEFPROCba 1780 LOCALbb%,cb% 1790 CLS 1800 PROCz 1810 PRINTTAB(0,2);CHR$(128+ba%);"Please enter your three-digit user"'CHR$(128+ba%);"ID:";CHR$(128+ca%); 1820 db$=FNeb(FNca(3,3)) 1830 PRINT''CHR$(128+ba%);"Please enter your name as you wish"'CHR$(128+ba%);"it to appear in message headings:"'';:cb%=VPOS 1840 PRINT''CHR$(128+ba%);"(just press RETURN if you wish to"'CHR$(128+ba%);"remain anonymous)" 1850 PRINTTAB(0,cb%);CHR$(128+ca%); 1860 fb$=FNca(0,20) 1870 bb%=OPENOUT("!Mesg") 1880 BPUT#bb%,0:ya%=0 1890 PRINT#bb%,db$ 1900 PRINT#bb%,LEFT$(fb$+STRING$(20," "),20) 1910 gb%=PTR#bb% 1920 PRINT#bb%,0 1930 CLOSE#bb% 1940 ENDPROC 1950 : 1960 DEFPROCza 1970 LOCALbb% 1980 bb%=OPENIN("!Mesg") 1990 ya%=BGET#bb% 2000 IFya%<>0THENCLOSE#bb%:ENDPROC 2010 INPUT#bb%,db$ 2020 INPUT#bb%,fb$ 2030 REPEAT 2040 IFRIGHT$(fb$,1)=" "THENfb$=LEFT$(fb$,LEN(fb$)-1) 2050 UNTILRIGHT$(fb$,1)<>" " 2060 gb%=PTR#bb% 2070 CLOSE#bb% 2080 ENDPROC 2090 : 2100 DEFFNeb(hb$) 2110 LOCALib$,jb%,kb% 2120 ib$="" 2130 FORjb%=1TOLEN(hb$) 2140 kb%=ASC(MID$(hb$,jb%,1)) 2150 IFkb%>=ASC("a")ANDkb%<=ASC("z")THENkb%=kb%-32 2160 ib$=ib$+CHR$(kb%) 2170 NEXT 2180 =ib$ 2190 : 2200 DEFFNca(lb%,mb%) 2210 LOCALjb%,nb%,hb$,ob% 2220 jb%=POS 2230 nb%=VPOS 2240 hb$="" 2250 REPEAT 2260 REPEAT 2270 *FX21 2280 ob%=GET 2290 UNTILob%=13OR(ob%>=32ANDob%<=127) 2300 IFob%=127ANDLEN(hb$)>0THENVDU127:hb$=LEFT$(hb$,LEN(hb$)-1) 2310 IFob%<>127ANDob%<>13ANDLEN(hb$)=lb%) 2330 =hb$ 2340 : 2350 DEFFNh 2360 LOCALpb%,ob% 2370 CLS 2380 PROCz 2390 PRINTTAB(3,2);CHR$(128+da%);"Start a new message";TAB(32,2);"N" 2400 PRINTTAB(3,3);CHR$(128+da%);"View/edit the messages";TAB(32,3);"V" 2410 PRINTTAB(3,4);CHR$(128+da%);"Tidy the messages";TAB(32,4);"T" 2420 PRINTTAB(3,5);CHR$(128+da%);"Re-enter your user ID/name";TAB(32,5);"R" 2430 PRINTTAB(3,6);CHR$(128+da%);"Undelete deleted messages";TAB(32,6);"U" 2440 PRINTTAB(3,7);CHR$(128+da%);"Quit to BASIC";TAB(32,7);"Q" 2450 PRINTTAB(0,9);CHR$(128+ga%);"Use the cursor keys to move the bar";CHR$(128+ga%);"and press RETURN to select, or use"'CHR$(128+ga%);"the appropriate key shortcut." 2460 pb%=1 2470 PRINTTAB(1,pb%+1);CHR$(128+ea%);CHR$(157);CHR$(128+fa%);TAB(35,pb%+1);CHR$156; 2480 REPEAT 2490 REPEAT 2500 *FX21 2510 ob%=GET 2520 UNTILINSTR("NVTRUQnvtruq"+CHR$(138)+CHR$(139)+CHR$(13),CHR$(ob%))>0 2530 PRINTTAB(1,pb%+1);CHR$(128+da%);" " 2540 IFob%=138THENIFpb%<6THENpb%=pb%+1 2550 IFob%=139THENIFpb%>1THENpb%=pb%-1 2560 IFob%>=ASC("a")ANDob%<=ASC("z")THENob%=ob%-32 2570 IFob%=ASC("N")THENpb%=1 2580 IFob%=ASC("V")THENpb%=2 2590 IFob%=ASC("T")THENpb%=3 2600 IFob%=ASC("R")THENpb%=4 2610 IFob%=ASC("U")THENpb%=5 2620 IFob%=ASC("Q")THENpb%=6 2630 PRINTTAB(1,pb%+1);CHR$(128+ea%);CHR$(157);CHR$(128+fa%);TAB(35,pb%+1);CHR$156; 2640 UNTILob%=13 2650 =pb% 2660 : 2670 DEFPROCi 2680 LOCALjb%,nb%,qb$,rb%,sb$ 2690 CLS 2700 PROCz 2710 bb%=OPENIN("!Mesg") 2720 PTR#bb%=gb% 2730 INPUT#bb%,rb% 2740 CLOSE#bb% 2750 IFrb%=o%THENPRINTCHR$(128+ha%);"Sorry - you already have ";o%'CHR$(128+ha%);"messages!"''CHR$(128+ha%);"Press SPACE to return to the menu..";:PROCe("FX21"):REPEATUNTILGET=32:ENDPROC 2760 PROCtb 2770 PRINTTAB(0,2);CHR$(128+ha%);"Please enter the user ID of the"'CHR$(128+ha%);"recipient:";CHR$(128+ca%); 2780 jb%=POS 2790 nb%=VPOS 2800 PRINT''CHR$(128+ha%);"(Use 999 for all users and CCC for"'CHR$(128+ha%);"program comments)" 2810 PRINTTAB(jb%,nb%); 2820 *FX229,0 2830 qb$=FNeb(FNca(3,3)) 2840 *FX229,1 2850 IFqb$="999"THENsb$=" (all members)"ELSEsb$="" 2860 IFqb$<>"CCC"THENPROCub(CHR$(128+ia%)+"To: "+CHR$(128+ja%)+qb$+sb$,s%):PROCub(CHR$(128+ia%)+"Subject:"+CHR$(128+ja%),s%+80) 2870 IFqb$="CCC"THENPROCub(CHR$(128+ia%)+"Program:"+CHR$(128+ja%),s%+40) 2880 PROCub(CHR$(128+ia%)+"From: "+CHR$(128+ja%)+db$,s%+(40*ABS(qb$<>"CCC"))) 2890 IFfb$<>""THENPROCub("("+fb$+")",s%+(40*ABS(qb$<>"CCC"))+14) 2900 qb$=FNvb(qb$,10,2+(qb$="CCC")) 2910 PROCwb(qb$) 2920 PROCu 2930 ENDPROC 2940 : 2950 DEFPROCub(xb$,yb%) 2960 LOCALzb% 2970 FORzb%=yb%TOyb%+LEN(xb$)-1 2980 ?zb%=ASC(MID$(xb$,zb%-yb%+1,1)) 2990 NEXT 3000 ENDPROC 3010 : 3020 DEFPROCtb 3030 !&70=s% 3040 !&72=s%+n%+1 3050 CALLtb 3060 ENDPROC 3070 : 3080 DEFFNvb(qb$,ac%,bc%) 3090 LOCALob%,cc%,dc% 3100 VDU26,12 3110 ec%=0 3120 fc%=FALSE 3130 gc%=0 3140 hc%=FALSE 3150 PROCic(ec%) 3160 PROCjc(fc%) 3170 PROCw 3180 REPEAT 3190 PRINTTAB(ac%,bc%); 3200 REPEAT 3210 *FX21 3220 IFgc%=0THENob%=GETELSEob%=BGET#gc%:hc%=INKEY(-113) 3230 IFhc%ANDgc%>0THENCLOSE#gc%:gc%=0:hc%=FALSE 3250 UNTIL(ob%>=3ANDob%<=13)ORob%=20ORob%=27ORob%>=32 3260 cc%=INKEY(-1) 3270 dc%=INKEY(-2) 3280 IFgc%<>0THENIFEOF#gc%THENCLOSE#gc%:gc%=0 3290 IFgc%<>0ANDob%=10THENob%=13 3300 IFNOTfc%ANDob%>=3ANDob%<=12THENac%=FNkc(ac%,bc%,ec%,ob%,cc%,dc%) 3310 IFob%=20THENgc%=FNlc(qb$):PROCjc(fc%) 3320 IFob%=12ANDNOTcc%ANDNOTdc%THENfc%=NOTfc%:PROCa:PROCjc(fc%):PROCw 3330 IFNOTfc%ANDob%=10ANDNOTcc%ANDdc%THENPROCa:PROCmc(bc%,ec%):VDU26,12:PROCic(ec%):PROCjc(fc%):PROCw 3340 IFNOTfc%ANDob%=11ANDNOTcc%ANDdc%THENPROCa:PROCnc(bc%,ec%):VDU26,12:PROCic(ec%):PROCjc(fc%):PROCw 3350 IFNOTfc%ANDob%=12ANDcc%ANDNOTdc%THENPROCa:qb$=FNoc(qb$):VDU26,12:PROCic(ec%):PROCjc(fc%):PROCw 3360 IFNOTfc%AND(ob%>=32ANDob%<=126)THENVDUob%:s%?FNpc(ac%,bc%,ec%)=ob%:ac%=ac%+1 3370 IFfc%ANDINSTR("QWASZX",CHR$(ob%AND&DF))<>0THENs%?FNpc(ac%,bc%,ec%)=FNqc(s%?FNpc(ac%,bc%,ec%),ob%AND&DF) 3380 IFob%=127ANDac%>0THENac%=ac%-1:PROCrc(ac%,bc%,ec%):PROCa:VDU31,0,bc%:PROCsc(ec%+bc%):PROCw 3390 IFob%=13THENac%=0:bc%=bc%+1 3400 IFob%=136THENac%=ac%-1:IFcc%THENac%=0 3410 IFob%=137THENac%=ac%+1:IFcc%THENac%=39 3420 IFob%=138THENbc%=bc%+1:IFcc%THENbc%=bc%-1:PROCa:ec%=FNtc(ec%+12):PROCic(ec%):PROCjc(fc%):PROCw 3430 IFob%=139THENbc%=bc%-1:IFcc%THENbc%=bc%+1:PROCa:ec%=FNtc(ec%-12):PROCic(ec%):PROCjc(fc%):PROCw 3440 IFac%<0THENac%=39:bc%=bc%-1 3450 IFbc%<0THENbc%=0:IFec%>0THENPROCa:ec%=ec%-1:VDU28,0,23,39,0,30,11,26,30:PROCsc(ec%):PROCjc(fc%):PROCw 3460 IFac%>39ANDFNuc(s%?FNpc(39,bc%,ec%))THENPROCvc 3470 IFac%>39THENac%=0:bc%=bc%+1 3480 IFbc%>23THENbc%=23:IFec%<(((n%-40)DIV40)-23)THENPROCa:ec%=ec%+1:VDU28,0,23,39,0,31,0,23,10,26,31,0,23:PROCsc(ec%+23):PROCjc(fc%):PROCw 3490 IF(ob%=13OR(ob%=32ANDac%=0))ANDFNwc(s%?FNpc(0,bc%-1,ec%))THENxc%=s%?FNpc(0,bc%-1,ec%):PRINTTAB(ac%,bc%);CHR$(xc%);:s%?FNpc(0,bc%,ec%)=xc%:ac%=ac%+1 3500 UNTILob%=27 3510 IFgc%>0THENCLOSE#gc% 3520 PROCa 3530 =qb$ 3540 : 3550 DEFPROCvc 3560 LOCAL 3570 IFFNpc(0,bc%+1,ec%)>=(n%-40)THENENDPROC 3580 yc$="" 3590 ac%=ac%-1 3600 pc%=FNpc(ac%,bc%,ec%) 3610 REPEAT 3620 yc$=CHR$(s%?pc%)+yc$ 3630 ac%=ac%-1 3640 pc%=pc%-1 3650 UNTILNOTFNuc(s%?pc%) 3660 PRINTTAB(ac%+1,bc%); 3670 FORzc%=pc%+1TOFNpc(39,bc%,ec%) 3680 s%?zc%=32:VDU32 3690 NEXT 3700 bc%=bc%+1 3710 ac%=0 3720 IFFNwc(s%?FNpc(0,bc%-1,ec%))THENxc%=s%?FNpc(0,bc%-1,ec%):PRINTTAB(ac%,bc%);CHR$(xc%);:s%?FNpc(0,bc%,ec%)=xc%:ac%=ac%+1 3730 PRINTTAB(ac%,bc%);yc$; 3740 ad%=FNpc(ac%,bc%,ec%) 3750 FORbd%=0TOLEN(yc$)-1 3760 s%?(bd%+ad%)=ASC(MID$(yc$,bd%+1,1)) 3770 NEXT 3780 ac%=ac%+LEN(yc$) 3790 ENDPROC 3800 : 3810 DEFFNwc(xc%) 3820 =(xc%>=129ANDxc%<=135) 3830 : 3840 DEFFNuc(xc%) 3850 =(xc%>=33ANDxc%<=126) 3860 : 3870 DEFPROCmc(bc%,ec%) 3880 LOCALcd%,dd% 3890 cd%=FNed 3900 IFcd%>=(((n%-40)DIV40)*40)THENPROCfd:ENDPROC 3910 IFFNpc(0,bc%,ec%)>cd%THENENDPROC 3920 !&70=s%+FNpc(0,bc%,ec%)-40 3930 !&72=s%+(cd%DIV40)*40 3940 CALLmc 3950 FORdd%=FNpc(0,bc%,ec%)TOFNpc(39,bc%,ec%) 3960 s%?dd%=32 3970 NEXT 3980 ENDPROC 3990 : 4000 DEFPROCnc(bc%,ec%) 4010 LOCALcd%,dd% 4020 cd%=FNed 4030 IFFNpc(0,bc%,ec%)>cd%THENENDPROC 4040 IFcd%>=FNpc(0,bc%,ec%)ANDcd%<=FNpc(39,bc%,ec%)THENFORdd%=FNpc(0,bc%,ec%)TOFNpc(39,bc%,ec%):s%?dd%=32:NEXT:ENDPROC 4050 !&70=s%+FNpc(0,bc%,ec%) 4060 !&72=s%+(cd%DIV40)*40 4070 CALLnc 4080 FORdd%=(cd%DIV40)*40TO(cd%DIV40)*40+40 4090 s%?dd%=32 4100 NEXT 4110 ENDPROC 4120 : 4130 DEFPROCfd 4140 SOUND1,-10,101,5 4150 ENDPROC 4160 : 4170 DEFPROCrc(ac%,bc%,ec%) 4180 !&70=s%+FNpc(0,bc%,ec%) 4190 ?&72=ac%+1 4200 CALLrc 4210 ENDPROC 4220 : 4230 DEFPROCgd(ac%,bc%,ec%) 4240 IFac%=39THENs%?FNpc(39,bc%,ec%)=32:ENDPROC 4250 !&70=s%+FNpc(0,bc%,ec%) 4260 ?&72=ac% 4270 CALLgd 4280 ENDPROC 4290 : 4300 DEFFNtc(ec%) 4310 IFec%<0THENec%=0 4320 IFec%>(((n%-40)DIV40)-23)THENec%=(((n%-40)DIV40)-23) 4330 =ec% 4340 : 4350 DEFFNkc(ac%,bc%,ec%,ob%,cc%,dc%) 4360 LOCALxc% 4370 IFob%>=3ANDob%<=9ANDNOTcc%ANDNOTdc%THENVDU126+ob%:s%?FNpc(ac%,bc%,ec%)=126+ob%:ac%=ac%+1 4380 IFob%>=3ANDob%<=9ANDcc%ANDNOTdc%THENVDU142+ob%:s%?FNpc(ac%,bc%,ec%)=142+ob%:ac%=ac%+1 4390 IFNOTcc%ANDdc%ANDob%=12THENPROCa:PROChd:VDU26,12:PROCic(ec%):PROCjc(fc%):PROCw 4400 IFob%>=10ANDob%<=11ANDNOTcc%ANDNOTdc%THENVDU126+ob%:s%?FNpc(ac%,bc%,ec%)=126+ob%:ac%=ac%+1 4410 IFob%>=10ANDob%<=11ANDcc%ANDNOTdc%THENVDU167-ob%:s%?FNpc(ac%,bc%,ec%)=167-ob%:ac%=ac%+1 4420 IFob%>=3ANDob%<=4ANDNOTcc%ANDdc%THENVDU150+ob%:s%?FNpc(ac%,bc%,ec%)=150+ob%:ac%=ac%+1 4430 IFob%>=5ANDob%<=6ANDNOTcc%ANDdc%THENVDU153+ob%:s%?FNpc(ac%,bc%,ec%)=153+ob%:ac%=ac%+1 4440 IFob%>=7ANDob%<=8ANDNOTcc%ANDdc%THENVDU148-ob%:s%?FNpc(ac%,bc%,ec%)=148-ob%:ac%=ac%+1 4450 IFob%=9ANDNOTcc%ANDdc%THENPROCgd(ac%,bc%,ec%):PROCa:VDU31,0,bc%:PROCsc(ec%+bc%):PROCw 4460 =ac% 4470 : 4480 DEFPROCjc(fc%) 4490 IFNOTfc%THENPRINTTAB(0,24);CHR$(128+ka%);"Press CTRL";CHR$(129);"f9";CHR$(128+ka%);"for help... ";ELSEPRINTTAB(0,24);CHR$(128+ka%);"Press";CHR$(129);"f9";CHR$(128+ka%);"to exit pixel editing..."; 4500 ENDPROC 4510 : 4520 DEFFNlc(qb$) 4530 LOCALid$,bb% 4540 PRINTTAB(0,24);CHR$(128+ka%);"Load text file - are you sure?";CHR$(128+ca%); 4550 IFNOTFNjdTHEN=0 4560 PRINTTAB(0,24);SPC(35);TAB(0,24);CHR$(128+ka%);"Filename:";CHR$(128+ca%); 4570 id$=FNca(0,20) 4580 IFid$=""THEN=0 4610 ONERRORPROCa:PROCfd:PROCwb(qb$):PROCu:GOTO370 4620 bb%=OPENIN(id$) 4630 IFbb%=0THENPROCfd 4640 =bb% 4650 : 4660 DEFPROCic(ec%) 4670 PRINTTAB(0,0); 4680 !&70=s%+FNpc(0,0,ec%) 4690 !&72=s%+FNpc(0,0,ec%)+960 4700 CALLic 4710 ENDPROC 4720 : 4730 DEFPROCsc(ec%) 4740 !&70=s%+FNpc(0,0,ec%) 4750 CALLsc 4760 ENDPROC 4770 : 4780 DEFFNpc(ac%,bc%,ec%) 4790 =ac%+(bc%+ec%)*40 4800 : 4810 DEFFNqc(xc%,ob%) 4820 IFxc%>128THENxc%=xc%-128 4830 xc%=xc%-32 4840 q%(1)=(xc%AND1)=1 4850 q%(2)=(xc%AND2)=2 4860 q%(3)=(xc%AND4)=4 4870 q%(4)=(xc%AND8)=8 4880 q%(5)=(xc%AND16)=16 4890 q%(6)=(xc%AND64)=64 4900 IFob%=ASC("Q")THENq%(1)=NOTq%(1) 4910 IFob%=ASC("W")THENq%(2)=NOTq%(2) 4920 IFob%=ASC("A")THENq%(3)=NOTq%(3) 4930 IFob%=ASC("S")THENq%(4)=NOTq%(4) 4940 IFob%=ASC("Z")THENq%(5)=NOTq%(5) 4950 IFob%=ASC("X")THENq%(6)=NOTq%(6) 4960 xc%=160+ABS(q%(1))+ABS(q%(2))*2+ABS(q%(3))*4+ABS(q%(4))*8+ABS(q%(5))*16+ABS(q%(6))*64 4970 VDUxc%,8 4980 =xc% 4990 : 5000 DEFPROCwb(qb$) 5010 LOCALbb%,rb%,A%,X%,Y% 5020 VDU26 5030 PRINTTAB(0,24);CHR$(128+ra%);"Please wait, saving message... "; 5040 bb%=OPENUP("!Mesg") 5050 PTR#bb%=gb% 5060 INPUT#bb%,rb% 5070 PTR#bb%=gb% 5080 PRINT#bb%,rb%+1 5090 PTR#bb%=EXT#bb% 5100 PRINT#bb%,qb$ 5110 BPUT#bb%,0 5120 r%?0=bb% 5130 r%!1=s% 5140 r%!5=FNed+1 5150 A%=2 5160 X%=r%MOD256 5170 Y%=r%DIV256 5180 CALL&FFD1 5190 BPUT#bb%,152 5200 CLOSE#bb% 5210 ENDPROC 5220 : 5230 DEFFNed 5240 !&70=s%+n%+1 5250 !&72=s% 5260 CALLed 5270 !&72=0 5280 =(!&70)-s% 5290 : 5300 DEFPROCj 5310 LOCALbb%,rb%,kd%,ld%,md%,ec%,ob%,ha%,qb$,jd%,nd% 5320 bb%=OPENUP("!Mesg") 5330 PTR#bb%=gb% 5340 INPUT#bb%,rb% 5350 IFrb%=0THENCLOSE#bb%:ENDPROC 5360 CLS 5370 PROCz 5380 PRINTTAB(0,2);CHR$(128+ta%);"Please wait, loading message..." 5390 kd%=1 5400 nd%=TRUE 5410 REPEAT 5420 IFNOTnd%THENVDU26:PRINTTAB(0,24);CHR$(128+sa%);"Please wait, loading message... "; 5430 nd%=FALSE 5440 REPEAT 5450 ld%=PTR#bb% 5460 INPUT#bb%,qb$ 5470 md%=BGET#bb% 5480 PROCod(bb%) 5490 UNTILmd%=0 5500 p%(kd%)=ld% 5510 VDU26,12 5520 ec%=0 5530 PROCic(ec%) 5540 PROCpd(qb$,kd%,rb%) 5550 REPEAT 5560 REPEAT 5570 *FX21 5580 ob%=GET 5590 IFob%>=ASC("a")ANDob%<=ASC("z")THENob%=ob%-32 5600 UNTIL(ob%>=136ANDob%<=139)ORob%=27ORob%=ASC("E")ORob%=ASC("D")ORob%=3 5610 cc%=INKEY(-1) 5620 IFob%=3THENPROCqd:VDU26,12:PROCic(ec%):PROCpd(qb$,kd%,rb%) 5630 ha%=FALSE 5640 IFob%=136ANDkd%>1THENkd%=kd%-1:PTR#bb%=p%(kd%):ha%=TRUE 5650 IFob%=137ANDkd%0THENec%=ec%-1:VDU28,0,23,39,0,30,11,26,30:PROCsc(ec%) 5670 IFob%=139ANDcc%THENec%=FNtc(ec%-12):VDU26,12:PROCic(ec%):PROCpd(qb$,kd%,rb%) 5680 IFob%=138ANDNOTcc%ANDec%<(((n%-40)DIV40)-23)THENec%=ec%+1:VDU28,0,23,39,0,31,0,23,10,26,31,0,23:PROCsc(ec%+23) 5690 IFob%=138ANDcc%THENec%=FNtc(ec%+12):VDU26,12:PROCic(ec%):PROCpd(qb$,kd%,rb%) 5700 IFob%=ASC("D")THENPRINTTAB(0,24);CHR$(128+pa%);"Are you sure you want to delete this? ";:jd%=FNjd:PROCpd(qb$,kd%,rb%):IFNOTjd%THENob%=-1 5710 IFob%=ASC("E")THENPRINTTAB(0,24);CHR$(128+qa%);"Are you sure you want to edit this? ";:jd%=FNjd:PROCpd(qb$,kd%,rb%):IFNOTjd%THENob%=-1 5720 UNTILob%=27ORha%ORob%=ASC("E")ORob%=ASC("D") 5730 UNTILob%=27ORob%=ASC("E")ORob%=ASC("D") 5740 IFob%=ASC("D")THENPTR#bb%=p%(kd%):PROCrd(bb%) 5750 IFob%=ASC("E")THENPTR#bb%=p%(kd%):PROCrd(bb%):CLOSE#bb%:qb$=FNvb(qb$,0,4):PROCwb(qb$) 5760 IFob%<>ASC("E")THENCLOSE#bb% 5770 PROCu 5780 ENDPROC 5790 : 5800 DEFFNjd 5810 LOCALob$ 5820 REPEAT 5830 ob$=CHR$(GETAND&DF) 5840 UNTILob$="Y"ORob$="N" 5850 =(ob$="Y") 5860 : 5870 DEFPROCod(bb%) 5880 LOCALA%,X%,Y% 5890 r%?0=bb% 5900 r%!1=s% 5910 r%!5=n%+1 5920 A%=4 5930 X%=r%MOD256 5940 Y%=r%DIV256 5950 CALL&FFD1 5960 !&70=s%-1 5970 !&72=s%+n%+1 5980 CALLsd 5990 !&76=0 6000 PTR#bb%=PTR#bb%-((n%-r%!5)-(!&74-s%)) 6010 ENDPROC 6020 : 6030 DEFPROCpd(td$,ud%,vd%) 6040 LOCALwd$ 6050 IFud%>9ANDvd%>9THENwd$=""ELSEwd$=" " 6060 PRINTTAB(0,24);CHR$(128+ka%);"Message ";ud%;" of ";vd%;",";wd$;"to ";td$;" -";CHR$(129);"f0";CHR$(128+ka%);"for help "; 6070 ENDPROC 6080 : 6090 DEFPROCrd(bb%) 6100 LOCALrb%,xd$ 6110 INPUT#bb%,xd$ 6120 BPUT#bb%,255 6130 PTR#bb%=gb% 6140 INPUT#bb%,rb% 6150 PTR#bb%=gb% 6160 PRINT#bb%,rb%-1 6170 ENDPROC 6180 : 6190 DEFPROCk 6200 LOCALyd%,zd%,ae$,rb%,td$,md%,be%,ya% 6210 CLS 6220 PROCz 6230 PRINTTAB(0,2);CHR$(128+na%);"Are you sure you want to tidy the"'CHR$(128+na%);"messages?":IFNOTFNjdTHENENDPROC 6240 PRINT'CHR$(128+na%);"Please wait, tidying messages..." 6250 VDU21 6260 IFFNwa("!MesgB")THEN*ce!de 6270 *RENAME !Mesg !MesgB 6280 yd%=OPENIN("!MesgB") 6290 zd%=OPENOUT("!Mesg") 6300 ya%=BGET#yd% 6310 BPUT#zd%,ya% 6320 INPUT#yd%,ae$ 6330 PRINT#zd%,ae$ 6340 INPUT#yd%,ae$ 6350 PRINT#zd%,ae$ 6360 INPUT#yd%,rb% 6370 PRINT#zd%,rb% 6380 IFEOF#yd%THENVDU6:CLOSE#yd%:CLOSE#zd%:PROCe("DELETE !MesgB"):ENDPROC 6390 REPEAT 6400 INPUT#yd%,td$ 6410 md%=BGET#yd% 6420 IFmd%=0THENPRINT#zd%,td$:BPUT#zd%,md%:REPEAT:be%=BGET#yd%:BPUT#zd%,be%:UNTILbe%=152ELSEREPEATUNTILBGET#yd%=152 6430 UNTILEOF#yd% 6440 CLOSE#yd% 6450 CLOSE#zd% 6460 *DELETE !MesgB 6470 VDU6 6480 ENDPROC 6490 : 6500 DEFPROCqd 6510 PROCu 6520 PROCz 6530 PRINTTAB(0,2);CHR$(128+la%);"Use the cursor up and down keys to"'CHR$(128+la%);"scroll through the displayed"'CHR$(128+la%);"message. Use SHIFT to scroll"'CHR$(128+la%);"quickly." 6540 PRINT'CHR$(128+la%);"Use the cursor left and right keys"'CHR$(128+la%);"to move between messages." 6550 PRINT'CHR$(128+la%);"Press D to delete the current"'CHR$(128+la%);"message and E to edit it." 6560 PRINT'CHR$(128+la%);"Press ESCAPE to return to the menu." 6570 PRINTTAB(0,16);CHR$(128+ma%);"Press ESCAPE to return to"'CHR$(128+ma%);"viewing..."; 6580 *FX21 6590 REPEATUNTILGET=27 6600 ENDPROC 6610 : 6620 DEFPROChd 6630 LOCALob% 6640 PROCu 6650 PROCz 6660 PRINTTAB(0,2);CHR$(128+la%);"Use the cursor keys to move around"'CHR$(128+la%);"the message. Use SHIFT to move more";CHR$(128+la%);"quickly. Use the keyboard to enter"'CHR$(128+la%);"text and DELETE to delete"'CHR$(128+la%);"characters." 6670 PRINT'CHR$(128+la%);"Use";CHR$(129);"f0-f6";CHR$(128+la%);"to set the text colour" 6680 PRINTCHR$(128+la%);"Use SHIFT";CHR$(129);"f0-f6";CHR$(128+la%);"to set the graphic"'CHR$(128+la%);"colour" 6690 PRINTCHR$(128+la%);"Use";CHR$(129);"f7/f8";CHR$(128+la%);"for steady/flashing" 6700 PRINTCHR$(128+la%);"Use SHIFT";CHR$(129);"f7/f8";CHR$(128+la%);"for coloured/black"'CHR$(128+la%);"background" 6710 PRINTTAB(0,16);CHR$(128+ma%);"Press CTRL";CHR$(129);"f9";CHR$(128+ma%);"for more help or"'CHR$(128+ma%);"press ESCAPE to continue editing.."; 6720 REPEAT 6730 *FX21 6740 ob%=GET 6750 UNTIL(ob%=12ANDINKEY(-2))ORob%=27 6760 IFob%=27THENENDPROC 6770 CLS 6780 PROCz 6790 PRINTTAB(0,2);CHR$(128+la%);"Use";CHR$(129);"f9";CHR$(128+la%);"to design a graphic block" 6800 PRINTCHR$(128+la%);"Use CTRL";CHR$(129);"f0/f1";CHR$(128+la%);"to set contiguous/"'CHR$(128+la%);"separated graphics" 6810 PRINTCHR$(128+la%);"Use CTRL";CHR$(129);"f2/f3";CHR$(128+la%);"to hold/release"'CHR$(128+la%);"graphics" 6820 PRINTCHR$(128+la%);"Use CTRL";CHR$(129);"f4/f5";CHR$(128+la%);"for double/single"'CHR$(128+la%);"height" 6830 PRINTCHR$(128+la%);"Use SHIFT";CHR$(129);"f9";CHR$(128+la%);"to change the"'CHR$(128+la%);"recipient of the message" 6840 PRINTCHR$(128+la%);"Use CTRL";CHR$(129);"f6";CHR$(128+la%);"to insert a space" 6850 PRINTCHR$(128+la%);"Use CTRL";CHR$(129);"f7/f8";CHR$(128+la%);"to insert/delete a"'CHR$(128+la%);"line" 6870 PRINT'CHR$(128+la%);"Press ESCAPE to finish editing" 6880 PRINTTAB(0,17);CHR$(128+ma%);"Press ESCAPE to continue editing.."; 6890 *FX21 6900 REPEATUNTILGET=27 6910 ENDPROC 6920 : 6930 DEFPROCv 6940 DIMxc%308 6950 PROCe("LOAD SendMC "+STR$~xc%) 6960 tb=xc% 6970 ic=xc%+&20 6980 ed=xc%+&41 6990 sc=xc%+&63 7000 sd=xc%+&70 7010 rc=xc%+&AB 7020 gd=xc%+&BE 7030 mc=xc%+&D0 7040 nc=xc%+&102 7050 ENDPROC 7060 : 7070 DEFPROCl 7080 LOCALbb%,ee$,fe$ 7090 CLS 7100 PROCz 7110 PRINTTAB(0,2);CHR$(128+ba%);"Your user ID is currently entered"'CHR$(128+ba%);"as ";db$ 7120 PRINT'CHR$(128+ba%);"Please enter your three-digit user"'CHR$(128+ba%);"ID:";CHR$(128+ca%); 7130 *FX229,0 7140 ee$=FNeb(FNca(3,3)) 7150 *FX229,1 7160 PRINT''CHR$(128+ba%);"Your name is currently entered as"'CHR$(128+ba%);fb$ 7170 PRINT'CHR$(128+ba%);"Please enter your name:"'CHR$(128+ca%); 7180 *FX229,0 7190 fe$=FNca(0,20) 7200 *FX229,1 7210 db$=ee$ 7220 fb$=fe$ 7230 bb%=OPENUP("!Mesg") 7240 PTR#bb%=0 7250 BPUT#bb%,0 7260 PRINT#bb%,db$ 7270 PRINT#bb%,LEFT$(fb$+STRING$(20," "),20) 7280 CLOSE#bb% 7290 ENDPROC 7300 : 7310 DEFFNoc(qb$) 7320 LOCALjb%,nb% 7330 PROCu 7340 PROCz 7350 PRINTTAB(0,2);CHR$(128+oa%);"This message is currently going"'CHR$(128+oa%);"to ";qb$ 7360 PRINT'CHR$(128+oa%);"Please enter the user ID of the"'CHR$(128+oa%);"recipient:";CHR$(128+ca%); 7370 jb%=POS 7380 nb%=VPOS 7390 PRINT''CHR$(128+oa%);"(Use 999 for all users and CCC for"'CHR$(128+oa%);"program comments)" 7400 PRINTTAB(jb%,nb%); 7410 =FNeb(FNca(3,3)) 7420 : 7430 DEFPROCm 7440 LOCALbb%,rb%,td$,md%,mb% 7450 CLS 7460 PROCz 7470 PRINTTAB(0,2);CHR$(128+m%);"Are you sure you want to undelete?" 7480 IFNOTFNjdTHENENDPROC 7490 PRINT'CHR$(128+m%);"Please wait, undeleting messages..." 7500 mb%=FALSE 7510 bb%=OPENUP("!Mesg") 7520 PTR#bb%=gb% 7530 INPUT#bb%,rb% 7540 IFEOF#bb%THENCLOSE#bb%:ENDPROC 7550 REPEAT 7560 INPUT#bb%,td$ 7570 md%=BGET#bb% 7580 IFNOTmb%ANDmd%=255THENPTR#bb%=PTR#bb%-1:BPUT#bb%,0:rb%=rb%+1 7590 REPEATUNTILBGET#bb%=152 7600 IFrb%=o%ANDNOTEOF#bb%THENmb%=TRUE 7610 UNTILEOF#bb% 7620 PTR#bb%=gb% 7630 PRINT#bb%,rb% 7640 CLOSE#bb% 7650 IFmb%THENPRINT'CHR$(128+m%);"Warning - not all of the messages"'CHR$(128+m%);"have been recovered."''CHR$(128+m%);"Press SPACE to return to the menu..";:PROCe("FX21"):REPEATUNTILGET=32 7660 ENDPROC