240 : 250 MODE7 260 PROCa 270 : 300 b$=FNc 310 ONERRORPROCd:b$=" ":GOTO320 320 IFb$=" "ANDFNb=4THENb$="D" 330 IFb$=" "ANDFNb=8THENb$="A" 340 IFb$="A"THENPROCe 350 IFb$="D"THENPROCf 360 ONERRORVDU3:PROCg("FX3"):CLOSE#0:IFERR=17THENPROCg("FX229,1"):GOTO420ELSEMODE7:REPORT:PRINT" at line ";ERL:PROCh:END 370 : 380 DIMM%-1 390 IFHIMEM-M%<256THENPROCi("There are less than 256 bytes of RAM free. The program will run but you will keep receiving warnings about the shortage of RAM.") 400 : 410 IFFNj("!Mesg")THENPROCkELSEPROCl 420 REPEAT 430 PROCm 440 n%=FNo 450 IFn%=1THENPROCp 460 IFn%=2THENPROCq 470 IFn%=3THENPROCr 480 IFn%=4THENPROCs 490 IFn%=5THENPROCt 500 IFn%=6THENPROCu 510 UNTILn%=7 520 : 530 MODE7 540 PROCh 550 END 560 : 570 DEFPROCv 580 *FX229,1 590 *FX4,1 600 *FX225,200 610 *FX226,210 620 *FX227,220 630 *FX202,48 640 ENDPROC 650 : 660 DEFPROCh 670 *FX202,32 680 *FX118 690 *FX225,1 700 *FX226,128 710 *FX227,144 720 *FX229 730 *FX4 740 ENDPROC 750 : 760 DEFPROCa 770 ONERRORMODE7:REPORT:PRINT" at line ";ERL:PROCh:END 780 CLOSE#0 790 PROCv 800 PROCw 810 PROCx 820 PROCy 830 PROCz 840 aa%=4096 850 ba%=25 860 ca%=TRUE 870 da%=TRUE 880 DIMea%32,fa%aa%,ga$(ba%),ha%(ba%),ia$(ba%) 890 ja%=1 900 PROCka 910 ENDPROC 920 : 930 DEFFNS="SendMes" 940 : 950 DEFPROCe 960 *ADFS 970 *MOUNT 0 980 *DIR $ 990 ENDPROC 1000 : 1010 DEFPROCf 1020 *DISC 1030 *DRIVE 0 1040 *DIR $ 1050 ENDPROC 1060 : 1070 DEFPROCw 1080 VDU23,1,0;0;0;0; 1090 ENDPROC 1100 : 1110 DEFPROCla 1120 VDU23,1,1;0;0;0; 1130 ENDPROC 1140 : 1150 DEFPROCg($ea%) 1160 LOCALX%,Y% 1170 X%=ea%MOD256 1180 Y%=ea%DIV256 1190 CALL&FFF7 1200 ENDPROC 1210 : 1220 DEFPROCx 1230 ma%=150 1240 na%=147 1250 oa%=135 1260 pa%=131 1270 qa%=131 1280 ra%=132 1290 sa%=135 1300 ta%=130 1310 ua%=131 1320 va%=135 1330 wa%=131 1340 xa%=135 1350 ya%=135 1360 za%=135 1370 ab%=135 1380 bb%=135 1390 cb%=135 1400 db%=135 1410 eb%=135 1420 ENDPROC 1430 : 1440 DEFPROCy 1450 LOCALfb% 1460 VDU26,12 1470 PRINTTAB(0,23);CHR$(ma%);"ÿüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÿ"; 1480 VDU30,11,30 1490 PRINT" ";CHR$(ma%);"ÿ¯¯¯¯¯¯¯¥ÿ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ÿ"; 1500 PRINTCHR$(ma%);"ÿ¯¯¯¯¯¯¯¯¯¯¯ª¯¯¯¯¯¯¯¯ ";CHR$(ma%);"ÿ"; 1510 PRINTCHR$(ma%);"ÿ";CHR$(na%);"êë ·´¤µ ê£àðàðê ° °ð°ðàð   ";CHR$(ma%);"ÿ"; 1520 PRINTCHR$(ma%);"ÿ";CHR$(na%);"ê뢡·´µ· ¢ëêêê¤ê¡µ´µ½µµê® ";CHR$(ma%);"ÿ"; 1530 PRINTCHR$(ma%);"";CHR$(na%);"¢£ £ ¡£¡ ¢£¢£¢ ¢¡££¡¡¡¡¢£   "; 1540 FORfb%=1TO19 1550 PRINTCHR$(ma%);"ÿ";SPC(36);CHR$(ma%);"ÿ"; 1560 NEXT 1570 PRINTTAB(7,5);CHR$(na%-16);"8BS messaging system 2.00" 1580 VDU28,2,23,37,7 1590 ENDPROC 1600 : 1610 DEFPROCz 1620 IF?&7C28=ma%THENENDPROC 1630 PROCi("Sorry, this program uses direct screen access and the screen RAM is not at &7C00. If you have them, try disabling your shadow RAM and/or second processor.") 1640 VDU26,12 1650 PROCla 1660 PROCh 1670 END 1680 : 1690 DEFPROCka 1700 PRINTCHR$(oa%);"Please wait, loading..." 1710 DIMgb%452 1720 OSCLI"Load SendMMC "+STR$~gb% 1730 hb%=gb%+&1F 1740 ib%=gb%+&A4 1750 jb%=gb%+&B7 1760 kb%=gb%+&C9 1770 lb%=gb%+&EB 1780 mb%=gb%+&126 1790 nb%=gb%+&158 1800 ob%=gb%+&18A 1810 pb%=gb%+&1AA 1820 ENDPROC 1830 : 1840 DEFPROCqb(T$) 1850 PROCrb(T$,oa%,TRUE) 1860 ENDPROC 1870 : 1880 DEFPROCsb(T$) 1890 PROCrb(T$,oa%,FALSE) 1900 ENDPROC 1910 : 1930 DEFPROCrb(T$,C%,N%) 1940 REPEAT 1950 IFLEN(T$)<36THENPRINTCHR$(C%);T$;SPC((35-LEN(T$))*-N%);:T$=""ELSEA%=INSTR(T$," ",37):A%=A%+(A%=0)*-36:REPEAT:A%=A%-1:UNTILMID$(T$,A%,1)=" ":PRINTCHR$(C%);LEFT$(T$,A%-1);SPC(36-A%);:T$=MID$(T$,A%+1) 1960 UNTILT$="" 1970 ENDPROC 1980 : 1990 DEFPROCi(tb$) 2000 CLS 2010 PROCqb(tb$) 2020 PRINT'CHR$(oa%);"Press SPACE to continue..." 2030 *FX21 2040 REPEATUNTILGET=32 2050 ENDPROC 2060 : 2070 DEFPROCub(tb$) 2080 CLS 2090 PROCqb(tb$) 2100 PRINT'CHR$(oa%);"Press SPACE to return to BASIC" 2110 *FX21 2120 REPEATUNTILGET=32 2130 VDU26,12 2140 PROCla 2150 PROCh 2160 END 2170 : 2180 DEFFNc 2190 LOCALvb%,vb$ 2200 CLS 2210 PROCqb("Please insert your submission disc in drive 0. This disc should remain in the drive at all times when you are using this program.") 2220 PRINT 2230 PROCqb("When you have done this, press A if it an ADFS disc, D if it is a DFS disc or SPACE to use the current filing system.") 2240 PRINT 2250 PROCqb("If in doubt, just press SPACE.") 2260 REPEAT 2270 *FX21 2280 vb%=GET 2290 vb$=CHR$((vb%AND&DF)-32*(vb%=32)) 2300 UNTILINSTR(" AD",vb$)<>0 2310 =vb$ 2320 : 2330 DEFFNb 2340 LOCALA%,Y% 2350 A%=0 2360 Y%=0 2370 =(USR(&FFDA)AND&FF) 2380 : 2390 DEFPROCd 2400 SOUND1,-10,52,5 2410 ENDPROC 2420 : 2430 DEFFNj(wb$) 2440 LOCALxb% 2450 xb%=OPENIN(wb$) 2460 IFxb%<>0THENCLOSE#xb% 2470 =(xb%<>0) 2480 : 2490 DEFPROCk 2500 LOCALxb%,yb%,zb% 2510 CLS 2520 PRINTCHR$(oa%);"Please wait..." 2530 xb%=OPENIN("!Mesg") 2540 yb%=BGET#xb% 2550 IFyb%<>0THENPROCub("The !Mesg file on this disc is a version "+STR$(yb%)+" file. This program can only handle version 0 files.") 2560 INPUT#xb%,ac$ 2570 INPUT#xb%,bc$ 2580 bc$=FNcc(bc$) 2590 dc%=PTR#xb% 2600 INPUT#xb%,zb% 2610 ec%=PTR#xb% 2620 CLOSE#xb% 2630 ENDPROC 2640 : 2650 DEFFNcc(fc$) 2660 REPEAT 2670 IFRIGHT$(fc$,1)=" "THENfc$=LEFT$(fc$,LEN(fc$)-1) 2680 UNTILRIGHT$(fc$,1)<>" " 2690 =fc$ 2700 : 2710 DEFPROCl 2720 LOCALxb% 2730 ac$="":bc$="" 2740 PROCgc 2750 xb%=OPENOUT("!Mesg") 2760 BPUT#xb%,0 2770 PRINT#xb%,ac$ 2780 PRINT#xb%,LEFT$(bc$+STRING$(20," "),20) 2790 dc%=PTR#xb% 2800 PRINT#xb%,0 2810 ec%=PTR#xb% 2820 CLOSE#xb% 2830 ENDPROC 2840 : 2850 DEFPROCgc 2860 CLS 2870 PROCqb("Please enter your three-character ID. If you don't know it, it is shown in the top left hand corner of the menu.") 2880 PRINT'CHR$(oa%);"ID:";CHR$(pa%); 2890 ac$=FNhc(FNpa(3,3,ac$)) 2900 PRINT' 2910 PROCqb("Please enter your name as you wish it to appear in message headings. Just enter a blank name if you wish to remain anonymous.") 2920 PRINT'CHR$(pa%); 2930 bc$=FNpa(0,20,bc$) 2940 ENDPROC 2950 : 2960 DEFFNpa(ic%,jc%,oa$) 2970 LOCALkc%,lc%,vb% 2980 kc%=POS 2990 lc%=VPOS 3000 PRINTLEFT$(oa$+STRING$(jc%,"."),jc%);TAB(kc%+LEN(oa$),lc%); 3010 REPEAT 3020 REPEAT 3030 *FX21 3040 vb%=GET 3050 UNTILvb%=13OR(vb%>=32ANDvb%<=127) 3060 IFvb%=127ANDLEN(oa$)>0THENVDU8,46,8:oa$=LEFT$(oa$,LEN(oa$)-1) 3070 IFvb%<>127ANDvb%<>13ANDLEN(oa$)=ic%) 3090 =oa$ 3100 : 3110 DEFFNhc(mc$) 3120 LOCALnc$,oc%,pc% 3130 nc$="" 3140 IFmc$=""THEN="" 3150 FORoc%=1TOLEN(mc$) 3160 pc%=ASC(MID$(mc$,oc%,1)) 3170 IFpc%>=ASC"a"ANDpc%<=ASC"z"THENpc%=pc%-32 3180 nc$=nc$+CHR$(pc%) 3190 NEXT 3200 =nc$ 3210 : 3220 DEFFNo 3230 LOCALqc%,rc$,vb% 3240 CLS 3250 PRINTFNsc("Start a new message","N");FNsc("View/edit/print messages","V");FNsc("Print all the messages","P");FNsc("Tidy the messages","T");FNsc("Re-enter your user ID/name","R");FNsc("Undelete deleted messages","U"); 3260 PRINTFNsc("Quit the program","Q") 3270 PROCqb("Use the up and down cursor keys to move the bar, or press the key shown after the option you want. Press RETURN to select the highlighted option.") 3280 PRINT 3290 PROCsb("If you select an option by mistake, pressing ESCAPE will usually return you to this menu.") 3300 qc%=ja% 3310 rc$="NVPTRUQ" 3320 PRINTTAB(1,ja%-1);CHR$(ra%);CHR$157;CHR$(sa%) 3330 REPEAT 3340 REPEAT 3350 *FX21 3360 vb%=GETAND&DF 3370 UNTILINSTR(CHR$138+CHR$139+CHR$13+rc$,CHR$(vb%))<>0 3380 ja%=INSTR(rc$,CHR$(vb%)):IFja%=0THENja%=qc% 3390 IFvb%=138ANDja%1THENja%=ja%-1 3410 IFja%<>qc%THENPRINTTAB(1,qc%-1);" ";CHR$(qa%);TAB(1,ja%-1);CHR$(ra%);CHR$157;CHR$(sa%):qc%=ja% 3420 UNTILvb%=13 3430 =ja% 3440 : 3450 DEFFNsc(tc$,rc$)=" "+CHR$(qa%)+tc$+STRING$(28-LEN(tc$)," ")+rc$+" "+CHR$156 3460 : 3470 DEFPROCp 3480 LOCALuc$,vc% 3490 CLS 3500 IFFNwc>=ba%THENPROCi("Sorry, there is a limit of "+STR$(ba%)+" messages."):ENDPROC 3510 PROCqb("Please enter the 3-character ID of the person who will receive the message. Messages to individual members are private and will not be published. Enter 999 to send a message to everyone or CCC to send in a comment for publication.") 3520 PRINT'CHR$(oa%);"ID:";CHR$(pa%); 3530 *FX229 3540 uc$=FNhc(FNpa(3,3,"")) 3550 *FX229,1 3560 PROCob 3570 vc%=(uc$<>"CCC") 3580 IFuc$="999"THENxc$="(all members)"ELSExc$="" 3590 IFvc%THENPROCyc(CHR$(ta%)+"To: "+CHR$(ua%)+uc$+" "+xc$,fa%) 3600 IFbc$=""THENzc$=""ELSEzc$="("+bc$+")" 3610 PROCyc(CHR$(ta%)+"From: "+CHR$(ua%)+ac$+" "+zc$,fa%-40*vc%) 3620 PROCyc(CHR$(ta%)+"Subject:"+CHR$(ua%),fa%+40-40*vc%) 3630 uc$=FNad(10,1-vc%,uc$) 3640 PROCbd(uc$) 3650 ENDPROC 3660 : 3670 DEFPROCbd(cd$) 3680 LOCALxb%,zb% 3690 PRINTTAB(0,0);CHR$(eb%);"Please wait, saving message..."; 3700 xb%=OPENUP("!Mesg") 3730 PTR#xb%=EXT#xb% 3740 PRINT#xb%,cd$ 3750 BPUT#xb%,0 3760 PROCdd(FNkb+1,xb%) 3770 PTR#xb%=dc% 3780 INPUT#xb%,zb% 3790 PTR#xb%=dc% 3800 PRINT#xb%,zb%+1 3810 CLOSE#xb% 3820 ca%=TRUE 3830 ENDPROC 3840 : 3850 DEFFNkb 3860 !&70=fa%+aa%+1 3870 !&72=fa% 3880 CALLkb% 3890 !&72=0 3900 =(!&70)-fa% 3910 : 3920 DEFPROCdd(ed%,xb%) 3930 LOCALA%,X%,Y% 3940 ea%?0=xb% 3950 ea%!1=fa% 3960 ea%!5=ed% 3970 A%=2 3980 X%=ea%MOD256 3990 Y%=ea%DIV256 4000 CALL&FFD1 4010 BPUT#xb%,152 4020 ENDPROC 4030 : 4040 DEFFNwc 4050 LOCALxb% 4060 IFNOTca%ANDNOTda%THEN=fd% 4070 xb%=OPENIN("!Mesg") 4080 PTR#xb%=dc% 4090 INPUT#xb%,fd% 4100 CLOSE#xb% 4110 da%=FALSE 4120 =fd% 4130 : 4140 DEFPROCyc(gd$,hd%) 4150 LOCALid% 4160 id%=hd%?LEN(gd$) 4170 $hd%=gd$ 4180 hd%?LEN(gd$)=id% 4190 ENDPROC 4200 : 4210 DEFPROCob 4220 !&70=fa% 4230 !&72=fa%+aa%+1 4240 CALLob% 4250 ENDPROC 4260 : 4270 DEFFNad(jd%,kd%,cd$) 4280 LOCALld%,md%,nd%,od%,vb% 4290 VDU22,7 4300 ld%=0:md%=0:nd%=(aa%DIV40)-25 4310 od%=FALSE 4320 PROCcb(cd$,od%) 4330 PROCpd(ld%) 4340 *FX21 4350 REPEAT 4360 VDU31,jd%,kd% 4370 REPEAT 4380 vb%=GET 4390 UNTIL(vb%>=32ANDvb%<=127)OR(vb%>=136ANDvb%<=139)OR(vb%>=200ANDvb%<=229)ORvb%=13ORvb%=27ORvb%=20 4410 IFvb%=ASC"£"THENvb%=35ELSEIFvb%=ASC"#"THENvb%=95ELSEIFvb%=ASC"_"THENvb%=96 4430 IFvb%>=32ANDvb%<=126ANDNOTod%THEN?(jd%+kd%*40+&7C00)=vb%:fa%?(jd%+(kd%+ld%)*40)=vb%:jd%=jd%+1:IFjd%=40ANDNOT(ld%=nd%ANDkd%=23)ANDvb%<>32THENjd%=FNqd(kd%,ld%):kd%=kd%+1:md%=-1 4440 IFvb%=32ANDjd%=40THENjd%=39:vb%=13 4450 IFvb%>=200ANDvb%<=229THENrd%=FNsd(vb%,jd%,kd%):jd%=jd%-rd%:IFjd%=40ANDNOT(ld%=nd%ANDkd%=23)THENjd%=0:kd%=kd%+1:md%=-1 4460 IFvb%=127ANDjd%>0THEN!&70=fa%+(kd%+ld%)*40:?&72=jd%:CALLib%:!&70=&7C00+kd%*40:?&72=jd%:CALLib%:jd%=jd%-1 4470 IFvb%=13THENIFNOT(ld%=nd%ANDkd%=23)THENfa%?((kd%+1+ld%)*40)=fa%?((kd%+ld%)*40):jd%=1:kd%=kd%+1:md%=-1 4480 IFvb%=209THENod%=NOTod%:PROCcb(cd$,od%) 4490 IFvb%=219THENcd$=FNtd(cd$):PROCcb(cd$,od%) 4500 IFINSTR("QWASZXqwaszx",CHR$(vb%))<>0ANDod%THENPROCod(jd%,kd%,ld%,vb%) 4510 IFvb%=226THENPROCjb(jd%,kd%,ld%) 4520 IFvb%=227THENPROCmb(kd%,ld%):md%=-1 4530 IFvb%=228THENPROCnb(kd%,ld%):md%=-1 4540 IFvb%=20THENPROCud(jd%,kd%,ld%,nd%):md%=-1 4550 IFvb%=136THENjd%=jd%-1 4560 IFvb%=137THENjd%=jd%+1 4570 IFvb%=138THENkd%=kd%+1 4580 IFvb%=139THENkd%=kd%-1 4590 IFjd%<0THENjd%=39:kd%=kd%-1 4600 IFjd%>39THENjd%=0:kd%=kd%+1 4610 IFkd%<0THENkd%=0:ld%=ld%+(ld%>0) 4620 IFkd%>23THENkd%=23:ld%=ld%-(ld%ld%THENPROCpd(ld%):md%=ld%:PROCcb(cd$,od%) 4640 UNTILvb%=27ANDNOTod% 4650 PROCw 4660 PROCy 4670 =cd$ 4680 : 4690 DEFPROCjb(jd%,kd%,ld%) 4700 IFjd%=39THENfa%?(39+(kd%+ld%)*40)=32:?(&7C00+39+kd%*40)=32:ENDPROC 4710 !&70=fa%+(kd%+ld%)*40 4720 ?&72=jd% 4730 CALLjb% 4740 !&70=&7C00+kd%*40 4750 ?&72=jd% 4760 CALLjb% 4770 ENDPROC 4780 : 4790 DEFPROCmb(kd%,ld%) 4800 LOCALvd%,wd% 4810 vd%=FNkb 4820 IFvd%>=aa%-80THENPROCd:ENDPROC 4830 IF(kd%+ld%)*40>vd%THENENDPROC 4840 !&70=fa%+(kd%+ld%-1)*40 4850 !&72=fa%+(vd%DIV40)*40 4860 CALLmb% 4870 FORwd%=(kd%+ld%)*40TO39+(kd%+ld%)*40 4880 fa%?wd%=32 4890 NEXT 4900 ENDPROC 4910 : 4920 DEFPROCnb(kd%,ld%) 4930 LOCALvd%,wd% 4940 vd%=FNkb 4950 IF(kd%+ld%)*40>vd%THENENDPROC 4960 IFvd%>=(kd%+ld%)*40ANDvd%<=39+(kd%+ld%)*40THENFORwd%=(kd%+ld%)*40TO39+(kd%+ld%)*40:fa%?wd%=32:NEXT:ENDPROC 4970 !&70=fa%+(kd%+ld%)*40 4980 !&72=fa%+(vd%DIV40)*40 4990 CALLnb% 5000 FORwd%=(vd%DIV40)*40TO(vd%DIV40)*40+40 5010 fa%?wd%=32 5020 NEXT 5030 ENDPROC 5040 : 5050 DEFPROCcb(cd$,od%) 5060 PRINTTAB(0,24);SPC(39);TAB(0,24);CHR$(cb%);"Message to ";cd$;TAB(29,24); 5070 IFod%THENPRINT"Pixel edit";ELSEPRINTSPC(10); 5080 ENDPROC 5090 : 5100 DEFFNqd(kd%,ld%) 5110 LOCALxd%,yd% 5120 xd%=40 5130 REPEAT 5140 xd%=xd%-1 5150 UNTILfa%?(xd%+(kd%+ld%)*40)=32ORxd%=0 5160 IFfa%?(xd%+(kd%+ld%)*40)<>32THENfa%?((kd%+1+ld%)*40)=fa%?((kd%+ld%)*40):=1 5170 FORyd%=xd%+1TO39 5180 fa%?(yd%-xd%+(kd%+1+ld%)*40)=fa%?(yd%+(kd%+ld%)*40) 5190 fa%?(yd%+(kd%+ld%)*40)=32 5200 NEXT 5210 fa%?((kd%+1+ld%)*40)=fa%?((kd%+ld%)*40) 5220 =40-xd% 5230 : 5240 DEFPROCpd(ld%) 5250 !&70=fa%+ld%*40 5260 CALLpb% 5270 ENDPROC 5280 : 5290 DEFFNsd(vb%,jd%,kd%) 5300 LOCALzd% 5310 zd%=-1 5320 IFvb%>=200ANDvb%<=208THENzd%=vb%-71 5330 IFvb%>=210ANDvb%<=216THENzd%=vb%-65 5340 IFvb%>=217ANDvb%<=218THENzd%=vb%-61 5350 IFvb%>=220ANDvb%<=221THENzd%=vb%-67 5360 IFvb%>=222ANDvb%<=223THENzd%=vb%-64 5370 IFvb%>=224ANDvb%<=225THENzd%=365-vb% 5380 IFzd%<>-1THEN?(jd%+kd%*40+&7C00)=zd%:fa%?(jd%+(kd%+ld%)*40)=zd%:=TRUE 5390 =FALSE 5400 : 5410 DEFFNtd(cd$) 5420 PRINTTAB(0,24);SPC(39);TAB(0,24);CHR$(db%);"Send this message to:";CHR$(pa%); 5430 =FNhc(FNpa(3,3,cd$)) 5440 : 5450 DEFPROCod(jd%,kd%,ld%,vb%) 5460 LOCALae%,be%,nc% 5470 ae%=2^((INSTR("QWASZ X",CHR$(vb%AND&DF)))-1) 5480 be%=fa%+jd%+(kd%+ld%)*40 5490 IF(?be%AND160)<>160THEN?be%=?be%OR160 5500 IF(?be%ANDae%)=ae%THENnc%=?be%AND(255-ae%)ELSEnc%=?be%ORae% 5510 ?be%=nc% 5520 ?(&7C00+jd%+kd%*40)=nc% 5530 ENDPROC 5540 : 5550 DEFPROCud(jd%,kd%,ld%,nd%) 5560 LOCALed%,oa$ 5570 PROCw 5580 PROCy 5590 PRINTCHR$(oa%);"Are you sure you want to read in"'CHR$(oa%);"a text file?";CHR$(pa%); 5600 IFNOTFNceTHENVDU22,7:ENDPROC 5610 PRINT' 5620 PROCqb("Please insert the disc containing the text file into drive 0 and press SPACE...") 5630 *FX21 5640 REPEATUNTILGET=32 5650 ed%=10 5660 IFFNb=4THENPROCf:ed%=7 5670 IFFNb=8THENPROCe 5680 PRINT 5690 PRINTCHR$(oa%);"Filename:";CHR$(pa%); 5700 oa$=FNpa(0,ed%,"") 5710 IFoa$<>""THENPROCde(jd%,kd%,ld%,nd%,oa$) 5720 PROCqb("Please insert your submission disc in drive 0 and press SPACE...") 5730 *FX21 5740 REPEATUNTILGET=32 5750 IFFNb=4THENPROCf 5760 IFFNb=8THENPROCe 5770 VDU22,7 5780 ENDPROC 5790 : 5800 DEFPROCde(jd%,kd%,ld%,nd%,oa$) 5810 LOCALxb%,ee$,id%,fe% 5820 xb%=OPENIN(oa$) 5830 IFxb%=0THENPRINT':PROCqb("Sorry, the file "+oa$+" is not present on this disc."):PRINT:ENDPROC 5840 IFEOF#xb%THENCLOSE#xb%:ENDPROC 5850 PRINT''CHR$(oa%);"Please wait..."' 5860 REPEAT 5870 ee$="" 5880 REPEAT 5890 id%=BGET#xb% 5910 IFid%=ASC"£"THENid%=35ELSEIFid%=ASC"#"THENid%=95ELSEIFid%=ASC"_"THENid%=96 5920 IFid%>=33ANDid%<=126THENee$=ee$+CHR$(id%) 5930 UNTILid%<33ORid%>126OREOF#xb% 5940 fe%=-1 5950 IFjd%+LEN(ee$)<=39THENfe%=jd%:ge%=kd%:he%=ld%:jd%=jd%+LEN(ee$)+1 5960 IFfe%=-1THENjd%=1:kd%=kd%+1:gb%=?(fa%+(kd%-1+ld%)*40):IFgb%>=129ANDgb%<=135THEN?(fa%+(kd%+ld%)*40)=gb% 5970 IFkd%>23THENkd%=23:ld%=ld%-(ld%=129ANDgb%<=135THEN?(fa%+(kd%+ld%)*40)=gb% 6010 UNTILEOF#xb% 6020 CLOSE#xb% 6030 ENDPROC 6040 : 6050 DEFPROCie 6060 LOCALxb%,zb%,je%,ke%,le%,me$,ne%,cd$ 6070 xb%=OPENIN("!Mesg") 6080 PTR#xb%=dc% 6090 INPUT#xb%,zb% 6100 PTR#xb%=ec% 6110 FORje%=1TOzb% 6120 REPEAT 6130 ke%=PTR#xb% 6140 INPUT#xb%,cd$ 6150 le%=BGET#xb%:le%=(le%<>0) 6160 ne%=FNoe(xb%) 6170 me$=FNpe(22) 6180 UNTILNOTle% 6190 ga$(je%)=cd$ 6200 ha%(je%)=ke% 6210 ia$(je%)=me$ 6220 NEXT 6230 CLOSE#xb% 6240 ENDPROC 6250 : 6260 DEFFNpe(qe%) 6270 LOCALre$ 6280 fa%?128=13 6290 re$="Subject:" 6300 IFINSTR($fa%,re$)=0THENre$="Article:" 6310 IFINSTR($fa%,re$)=0THEN="No subject?" 6320 =MID$($fa%,INSTR($fa%,re$)+9,qe%) 6330 : 6340 DEFPROCq 6350 LOCALzb%,se%,qc%,te%,ue%,ve%,we%,xe%,vb%,ye% 6360 CLS 6370 zb%=FNwc 6380 IFzb%=0THENPROCi("Sorry, there are no messages to view."):ENDPROC 6390 REPEAT 6400 CLS 6410 IFca%THENPROCqb("Please wait, scanning messages..."):PROCie:ca%=FALSE 6420 se%=1 6430 qc%=1 6440 te%=1 6450 ue%=-1 6460 REPEAT 6470 REPEAT 6480 IFte%=ue%THENqc%=1:te%=1 6490 CLS 6500 PRINTTAB(0,16);CHR$(va%);"Use:";CHR$(wa%);"V";CHR$(va%);"iew,";CHR$(wa%);"E";CHR$(va%);"dit,";CHR$(wa%);"P";CHR$(va%);"rint,";CHR$(wa%);"D";CHR$(va%);"elete"; 6510 VDU30 6520 ve%=se%+13:IFve%>zb%THENve%=zb% 6530 FORwe%=se%TOve% 6540 PRINTFNsc(ga$(we%)+": "+LEFT$(ia$(we%),22)," "); 6550 NEXT 6560 xe%=ve%-se%+1:ue%=xe%+1 6570 IFzb%>14THENPRINTFNsc("More messages..."," ");:xe%=xe%+1 6580 PRINTTAB(1,te%-1);CHR$(ra%);CHR$157;CHR$(sa%) 6590 REPEAT 6600 REPEAT 6610 *FX21 6620 vb%=GETAND&DF 6630 UNTILINSTR(CHR$138+CHR$139+CHR$13+CHR$27+"PVED",CHR$(vb%))<>0 6640 IFvb%=138ANDte%1THENte%=te%-1 6660 IFte%<>qc%THENPRINTTAB(1,qc%-1);" ";CHR$(qa%);TAB(1,te%-1);CHR$(ra%);CHR$157;CHR$(sa%):qc%=te% 6670 UNTILINSTR(CHR$13+CHR$27+"PVED",CHR$(vb%))<>0 6680 IFte%=ue%THENse%=se%+14:IFse%>zb%THENse%=1 6690 UNTILte%0THENed%=ed%+(40-(ed%MOD40)) 7120 =ed%-&3C0 7130 : 7160 DEFFNcf(ef%) 7170 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(za%);"Delete this - are you sure?";CHR$(pa%); 7180 IFNOTFNceTHEN=FALSE 7190 PROCgf(ef%,FALSE) 7200 =TRUE 7210 : 7220 DEFPROCgf(ef%,hf%) 7230 LOCALxb%,cd$ 7240 xb%=OPENUP("!Mesg") 7250 PTR#xb%=ha%(ef%) 7260 INPUT#xb%,cd$ 7270 IFhf%THENBPUT#xb%,128ELSEBPUT#xb%,255 7280 PTR#xb%=dc% 7290 INPUT#xb%,zb% 7300 PTR#xb%=dc% 7310 PRINT#xb%,zb%-1 7320 CLOSE#xb% 7330 ENDPROC 7340 : 7370 DEFFNdf(ef%) 7380 LOCALed%,cd$ 7390 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(bb%);"Edit this - are you sure?";CHR$(pa%); 7400 IFNOTFNceTHEN=FALSE 7410 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ya%);"Loading message, please wait..."; 7420 ed%=FNze(ef%) 7450 cd$=FNad(1,4,ga$(ef%)) 7460 PROCbd(cd$) 7470 PROCgf(ef%,TRUE) 7480 =TRUE 7490 : 7500 DEFFNce 7510 LOCALvb% 7520 REPEAT 7530 *FX21 7540 vb%=GETAND&DF 7550 UNTILvb%=ASC("Y")ORvb%=ASC("N") 7560 IFvb%=ASC("Y")THENPRINT"Yes";:=TRUE 7570 PRINT"No"; 7580 =FALSE 7590 : 7600 DEFPROCbf(ef%) 7610 LOCALed% 7620 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ab%);"Print this - are you sure?";CHR$(pa%); 7630 *FX229 7640 IFNOTFNceTHENPROCg("FX229,1"):ENDPROC 7650 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ya%);"Loading message, please wait..."; 7660 ed%=FNze(ef%) 7670 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ab%);"Printing, please wait..."; 7680 PROCif(ed%) 7690 *FX229,1 7700 ENDPROC 7710 : 7720 DEFPROCr 7730 LOCALzb%,qb% 7740 CLS 7750 zb%=FNwc 7760 IFzb%=0THENPROCi("Sorry, there are no messages to print."):ENDPROC 7770 PRINTCHR$(oa%);"Are you sure you want to print the"'CHR$(oa%);"messages?";CHR$(pa%); 7780 *FX229 7790 IFNOTFNceTHENPROCg("FX229,1"):ENDPROC 7800 PRINT' 7810 IFca%THENPRINTCHR$(oa%);"Please wait, scanning messages..."':PROCie:ca%=FALSE 7820 PROCqb("Please wait, printing - press ESCAPE to stop...") 7830 FORqb%=1TOzb% 7840 PROCif(FNze(qb%)) 7850 NEXT 7860 *FX229,1 7870 ENDPROC 7880 : 7890 DEFPROCif(ed%) 7900 LOCALqb%,pc% 7910 *FX3,10 7920 FORqb%=0TOed%-1 7930 pc%=fa%?qb% 7940 IFpc%>=32ANDpc%<=126THENVDUpc%ELSEVDU32 7950 IF(qb%MOD40)=39ORqb%=ed%-1THENPRINT 7960 NEXT 7970 PRINT 7980 *FX3 7990 ENDPROC 8000 : 8010 DEFPROCt 8020 LOCALjf$,kf$,xb% 8030 jf$=ac$:kf$=bc$ 8040 PROCgc 8050 IFac$=jf$ANDbc$=kf$THENENDPROC 8060 xb%=OPENUP("!Mesg") 8070 PTR#xb%=1 8080 PRINT#xb%,ac$ 8090 PRINT#xb%,LEFT$(bc$+STRING$(20," "),20) 8100 CLOSE#xb% 8110 ENDPROC 8120 : 8130 DEFPROCs 8140 LOCALzb%,lf%,mf%,nf$,of$,yd%,cd$,le%,ed% 8150 CLS 8160 PRINTCHR$(oa%);"Are you sure you want to tidy the"'CHR$(oa%);"messages?";CHR$(pa%); 8170 *FX229 8180 IFNOTFNceTHENPROCg("FX229,1"):ENDPROC 8190 *FX229,1 8200 PRINT''CHR$(oa%);"Please wait..."; 8210 ca%=TRUE 8220 IFFNj("!MesgB")THENPROCg("Delete !MesgB") 8230 *Rename !Mesg !MesgB 8240 lf%=OPENIN("!MesgB") 8250 mf%=OPENOUT("!Mesg") 8260 BPUT#mf%,BGET#lf% 8270 INPUT#lf%,nf$:PRINT#mf%,nf$ 8280 INPUT#lf%,of$:PRINT#mf%,of$ 8290 INPUT#lf%,zb%:PRINT#mf%,zb% 8300 IFzb%=0THENCLOSE#lf%:CLOSE#mf%:PROCg("Delete !MesgB"):ENDPROC 8310 FORyd%=1TOzb% 8320 REPEAT 8330 INPUT#lf%,cd$ 8340 le%=BGET#lf%:le%=(le%<>0) 8350 ed%=FNoe(lf%) 8360 IFNOTle%THENPRINT#mf%,cd$:BPUT#mf%,0:PROCdd(ed%+1,mf%) 8370 UNTILNOTle% 8380 NEXT 8390 CLOSE#lf% 8400 CLOSE#mf% 8410 *Delete !MesgB 8420 ENDPROC 8430 : 8440 DEFPROCu 8450 LOCALzb%,ue$,xb%,ke%,le%,ne%,me$,pf% 8460 CLS 8470 zb%=FNwc 8480 IFzb%=ba%THENPROCi("Sorry, there is a limit of "+STR$(ba%)+" messages."):ENDPROC 8490 *FX229 8500 PRINTCHR$(oa%);"Please wait..."' 8510 ue$="" 8520 xb%=OPENUP("!Mesg") 8530 PTR#xb%=ec% 8540 IFEOF#xb%THENPROCi("Sorry, there are no messages to undelete."):CLOSE#xb%:ENDPROC 8550 REPEAT 8560 REPEAT 8570 INPUT#xb%,cd$ 8580 ke%=PTR#xb% 8590 le%=BGET#xb% 8600 le%=(le%=255) 8610 ne%=FNoe(xb%) 8620 me$=FNcc(FNpe(30)) 8630 pf%=(PTR#xb%=EXT#xb%) 8660 UNTILle%ORpf% 8670 IFle%THENue$="more ":zb%=FNqf(xb%,ke%,cd$,me$,zb%) 8680 UNTILpf%ORzb%=ba% 8690 CLOSE#xb% 8700 *FX229,1 8710 IFzb%=ba%THENPROCqb("There are now the maximum "+STR$(ba%)+" messages. Press SPACE to continue...")ELSEPROCqb("There are no "+ue$+"deleted messages. Press SPACE to continue...") 8720 *FX21 8730 REPEATUNTILGET=32 8740 ENDPROC 8750 : 8760 DEFFNqf(xb%,ke%,cd$,me$,zb%) 8770 LOCALrf% 8780 PROCsb("Undelete the message to "+cd$+" with subject '"+me$+"'?") 8790 IFPOS>31THENPRINT 8800 VDUpa% 8810 IFNOTFNceTHENPRINT':=zb% 8820 PRINT' 8830 *FX229,1 8840 rf%=PTR#xb% 8850 PTR#xb%=ke% 8860 BPUT#xb%,0 8870 PTR#xb%=dc% 8880 PRINT#xb%,zb%+1 8890 PTR#xb%=rf% 8900 *FX229 8910 ca%=TRUE 8920 =zb%+1 8930 : 8940 DEFPROCm 8950 DIMM%-1 8960 IFHIMEM-M%>=256THENENDPROC 8970 IFHIMEM-M%>=128THENPROCi("There are less than 256 bytes of RAM free. I recommend quitting the program and restarting, as a crash may occur if RAM is exhausted."):ENDPROC 8980 PROCi("There are less than 128 bytes of RAM free. You should quit the program and restart it very soon, otherwise a crash may occur due to lack of RAM.") 8990 ENDPROC