280 MODE7 290 PROCa 330 b$=FNc 340 ONERRORPROCd:b$=" ":GOTO350 350 IFb$=" "ANDFNb=4THENb$="D" 360 IFb$=" "ANDFNb=8THENb$="A" 370 IFb$="A"THENPROCe 380 IFb$="D"THENPROCf 390 ONERRORVDU3:PROCg("FX3"):CLOSE#0:IFERR=17THENPROCg("FX229,1"):GOTO460ELSEMODE7:REPORT:PRINT" at line ";ERL:PROCh:END 410 DIMM%-1 420 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.") 440 IFFNj("!Mesg")THENPROCkELSEPROCl 450 PROCm 460 REPEAT 470 PROCn 480 o%=FNp 490 IFo%=1THENPROCq 500 IFo%=2THENPROCr 510 IFo%=3THENPROCs 520 IFo%=4THENPROCt 530 IFo%=5THENPROCu 540 UNTILo%=6 560 MODE7 570 PROCh 580 END 600 DEFPROCv 610 *FX229,1 620 *FX4,1 630 *FX225,200 640 *FX226,210 650 *FX227,220 660 *FX202,48 670 ENDPROC 690 DEFPROCh 700 *FX202,32 710 *FX118 720 *FX225,1 730 *FX226,128 740 *FX227,144 750 *FX229 760 *FX4 770 ENDPROC 790 DEFPROCa 800 ONERRORMODE7:REPORT:PRINT" at line ";ERL:PROCh:END 810 CLOSE#0 820 PROCv 830 PROCw 840 PROCx 850 PROCy 860 PROCz 870 aa%=4080 880 ba%=25 900 DIMca%32,da%aa%,ea$(ba%-1),fa$(ba%-1),ga%(ba%-1) 910 ha%=1 920 PROCia 930 ENDPROC 950 DEFFNS="SendMes" 970 DEFPROCe 980 *ADFS 990 *MOUNT 0 1000 *DIR $ 1010 ENDPROC 1030 DEFPROCf 1040 *DISC 1050 *DRIVE 0 1060 *DIR $ 1070 ENDPROC 1090 DEFPROCw 1100 VDU23,1,0;0;0;0; 1110 ENDPROC 1130 DEFPROCja 1140 VDU23,1,1;0;0;0; 1150 ENDPROC 1170 DEFPROCg($ca%) 1180 LOCALX%,Y% 1190 X%=ca%MOD256 1200 Y%=ca%DIV256 1210 CALL&FFF7 1220 ENDPROC 1240 DEFPROCx 1250 ka%=150 1260 la%=147 1270 ma%=135 1280 na%=131 1290 oa%=131 1300 pa%=132 1310 qa%=135 1320 ra%=130 1330 sa%=131 1340 ta%=135 1350 ua%=131 1360 va%=135 1370 wa%=135 1380 xa%=135 1390 ya%=135 1400 za%=135 1410 ab%=135 1420 bb%=135 1430 cb%=135 1440 ENDPROC 1460 DEFPROCy 1470 LOCALdb% 1480 VDU26,12 1490 PRINTTAB(0,23);CHR$(ka%);"ÿüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÿ"; 1500 VDU30,11,30 1510 PRINT" ";CHR$(ka%);"ÿ¯¯¯¯¯¯¯¥ÿ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ÿ"; 1520 PRINTCHR$(ka%);"ÿ¯¯¯¯¯¯¯¯¯¯¯ª¯¯¯¯¯¯¯¯ ";CHR$(ka%);"ÿ"; 1530 PRINTCHR$(ka%);"ÿ";CHR$(la%);"¶£´ ·é¨è° ¶© °à¤ôà à ° °à    ";CHR$(ka%);"ÿ"; 1540 PRINTCHR$(ka%);"ÿ";CHR$(la%);"¶£´¡·éêê  ²éêê꡵êèêàîê ½¡ ";CHR$(ka%);"ÿ"; 1550 PRINTCHR$(ka%);"";CHR$(la%);"¢£ £¡¢ ¡ ¢¡ ¡¢ ¢ ¡¡ £¢ ¢¡   " 1560 FORdb%=1TO19 1570 PRINTCHR$(ka%);"ÿ";SPC(36);CHR$(ka%);"ÿ"; 1580 NEXT 1590 PRINTTAB(7,5);CHR$(la%-16);"8BS messaging system 2.10" 1600 VDU28,2,23,37,7 1610 ENDPROC 1630 DEFPROCz 1640 IF?&7C28=ka%THENENDPROC 1650 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.") 1660 VDU26,12 1670 PROCja 1680 PROCh 1690 END 1710 DEFPROCia 1720 PRINTCHR$(ma%);"Please wait, loading..." 1730 DIMeb%452 1740 OSCLI"Load SendMMC "+STR$~eb% 1750 fb%=eb%+&1F 1760 gb%=eb%+&A4 1770 hb%=eb%+&B7 1780 ib%=eb%+&C9 1790 jb%=eb%+&EB 1800 kb%=eb%+&126 1810 lb%=eb%+&158 1820 mb%=eb%+&18A 1830 nb%=eb%+&1AA 1840 ENDPROC 1860 DEFPROCob(T$) 1870 PROCpb(T$,ma%,TRUE) 1880 ENDPROC 1900 DEFPROCqb(T$) 1910 PROCpb(T$,ma%,FALSE) 1920 ENDPROC 1950 DEFPROCpb(T$,C%,N%) 1960 REPEAT 1970 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) 1980 UNTILT$="" 1990 ENDPROC 2010 DEFPROCi(rb$) 2020 CLS 2030 PROCob(rb$) 2040 PRINT'CHR$(ma%);"Press SPACE to continue..." 2050 *FX21 2060 REPEATUNTILGET=32 2070 ENDPROC 2090 DEFPROCsb(rb$) 2100 CLS 2110 PROCob(rb$) 2120 PRINT'CHR$(ma%);"Press SPACE to return to BASIC" 2130 *FX21 2140 REPEATUNTILGET=32 2150 VDU26,12 2160 PROCja 2170 PROCh 2180 END 2200 DEFFNc 2210 LOCALtb%,tb$ 2220 CLS 2230 PROCob("Please insert your submission disc in drive 0. This disc should remain in the drive at all times when you are using this program.") 2240 PRINT 2250 PROCob("When you have done this, press A if it is an ADFS disc, D if it is a DFS disc or SPACE to use the current filing system.") 2260 PRINT 2270 PROCob("If in doubt, just press SPACE.") 2280 REPEAT 2290 *FX21 2300 tb%=GET 2310 tb$=CHR$((tb%AND&DF)-32*(tb%=32)) 2320 UNTILINSTR(" AD",tb$)<>0 2330 =tb$ 2350 DEFFNb 2360 LOCALA%,Y% 2370 A%=0 2380 Y%=0 2390 =(USR(&FFDA)AND&FF) 2410 DEFPROCd 2420 SOUND1,-10,52,5 2430 ENDPROC 2450 DEFFNj(ub$) 2460 LOCALvb% 2470 vb%=OPENIN(ub$) 2480 IFvb%<>0THENCLOSE#vb% 2490 =(vb%<>0) 2510 DEFPROCk 2520 LOCALvb%,wb% 2530 CLS 2540 PRINTCHR$(ma%);"Please wait, scanning messages..." 2550 vb%=OPENIN("!Mesg") 2560 wb%=BGET#vb% 2570 IFwb%<>1THENPROCsb("The !Mesg file on this disc is a version "+STR$(wb%)+" file. This program can only handle version 1 files.") 2580 INPUT#vb%,xb$ 2590 INPUT#vb%,yb$ 2600 yb$=FNzb(yb$) 2610 CLOSE#vb% 2620 ENDPROC 2660 DEFFNzb(ac$) 2670 LOCALeb% 2680 eb%=ASC(RIGHT$(ac$,1)) 2690 REPEAT 2700 IFeb%<33OReb%>126THENac$=LEFT$(ac$,LEN(ac$)-1) 2710 eb%=ASC(RIGHT$(ac$,1)) 2720 UNTIL(eb%>=33ANDeb%<=126)ORac$="" 2730 =ac$ 2750 DEFPROCl 2760 LOCALvb%,bc% 2770 xb$="":yb$="" 2780 PROCcc 2790 PRINT''CHR$(ma%);"Please wait..." 2800 vb%=OPENOUT("!Mesg") 2810 BPUT#vb%,1 2820 PRINT#vb%,xb$ 2830 PRINT#vb%,LEFT$(yb$+STRING$(20," "),20) 2840 FORbc%=0TOba%-1 2850 PTR#vb%=256+bc%*4096 2860 PRINT#vb%,"XXX" 2870 BPUT#vb%,1 2880 NEXT 2890 PTR#vb%=256+ba%*4096 2900 CLOSE#vb% 2910 ENDPROC 2930 DEFPROCcc 2940 CLS 2950 PROCob("Please enter your three-character ID. If you don't know it, it is shown in the top left hand corner of the menu.") 2960 PRINT'CHR$(ma%);"ID:";CHR$(na%); 2970 xb$=FNdc(FNna(3,3,xb$)) 2980 PRINT' 2990 PROCob("Please enter your name as you wish it to appear in message headings. Just enter a blank name if you wish to remain anonymous.") 3000 PRINT'CHR$(na%); 3010 yb$=FNna(0,20,yb$) 3020 ENDPROC 3040 DEFFNna(ec%,fc%,ma$) 3050 LOCALgc%,hc%,tb% 3060 gc%=POS 3070 hc%=VPOS 3080 PRINTLEFT$(ma$+STRING$(fc%,"."),fc%);TAB(gc%+LEN(ma$),hc%); 3090 REPEAT 3100 REPEAT 3110 *FX21 3120 tb%=GET 3130 UNTILtb%=13OR(tb%>=32ANDtb%<=127) 3140 IFtb%=127ANDLEN(ma$)>0THENVDU8,46,8:ma$=LEFT$(ma$,LEN(ma$)-1) 3150 IFtb%<>127ANDtb%<>13ANDLEN(ma$)=ec%) 3170 =ma$ 3190 DEFFNdc(ic$) 3200 LOCALjc$,kc%,lc% 3210 jc$="" 3220 IFic$=""THEN="" 3230 FORkc%=1TOLEN(ic$) 3240 lc%=ASC(MID$(ic$,kc%,1)) 3250 IFlc%>=ASC"a"ANDlc%<=ASC"z"THENlc%=lc%-32 3260 jc$=jc$+CHR$(lc%) 3270 NEXT 3280 =jc$ 3300 DEFFNp 3310 LOCALmc%,nc$,tb% 3320 CLS 3330 PRINTFNoc("Start a new message","N");FNoc("View/edit/print messages","V");FNoc("Print all the messages","P");FNoc("Re-enter your user ID/name","R");FNoc("Undelete deleted messages","U"); 3340 PRINTFNoc("Quit the program","Q") 3350 PROCob("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.") 3360 PRINT 3370 PROCqb("If you select an option by mistake, pressing ESCAPE will usually return you to this menu.") 3380 mc%=ha% 3390 nc$="NVPRUQ" 3400 PRINTTAB(1,ha%-1);CHR$(pa%);CHR$157;CHR$(qa%) 3410 REPEAT 3420 REPEAT 3430 *FX21 3440 tb%=GETAND&DF 3450 IFINKEY-1ANDtb%=27THENmc%=LEN(nc$):tb%=13 3460 UNTILINSTR(CHR$138+CHR$139+CHR$13+nc$,CHR$(tb%))<>0 3470 ha%=INSTR(nc$,CHR$(tb%)):IFha%=0THENha%=mc% 3480 IFtb%=138ANDha%1THENha%=ha%-1 3500 IFha%<>mc%THENPRINTTAB(1,mc%-1);" ";CHR$(oa%);TAB(1,ha%-1);CHR$(pa%);CHR$157;CHR$(qa%):mc%=ha% 3510 UNTILtb%=13 3520 =ha% 3540 DEFFNoc(pc$,nc$)=" "+CHR$(oa%)+pc$+STRING$(28-LEN(pc$)," ")+nc$+" "+CHR$156 3560 DEFPROCq 3570 LOCALqc$,rc% 3580 CLS 3590 IFsc%>=ba%THENPROCi("Sorry, there is a limit of "+STR$(ba%)+" messages."):ENDPROC 3600 PROCob("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.") 3610 PRINT'CHR$(ma%);"ID:";CHR$(na%); 3620 *FX229 3630 qc$=FNdc(FNna(3,3,"")) 3640 *FX229,1 3650 PROCmb 3660 rc%=(qc$<>"CCC") 3670 IFqc$="999"THENtc$="(all members)"ELSEtc$="" 3680 IFrc%THENPROCuc(CHR$(ra%)+"To: "+CHR$(sa%)+qc$+" "+tc$,da%) 3690 IFyb$=""THENvc$=""ELSEvc$="("+yb$+")" 3700 PROCuc(CHR$(ra%)+"From: "+CHR$(sa%)+xb$+" "+vc$,da%-40*rc%) 3710 PROCuc(CHR$(ra%)+"Subject:"+CHR$(sa%),da%+40-40*rc%) 3720 qc$=FNwc(10,1-rc%,qc$) 3730 PROCxc(qc$,FNyc) 3740 sc%=sc%+1 3750 ENDPROC 3780 DEFPROCxc(zc$,ad%) 3790 LOCALvb% 3800 PRINTTAB(0,0);CHR$(cb%);"Please wait, saving message..."; 3810 vb%=OPENUP("!Mesg") 3820 PTR#vb%=256+ad%*4096 3830 PRINT#vb%,zc$ 3840 BPUT#vb%,0 3850 PROCbd(FNib+1,vb%) 3860 CLOSE#vb% 3870 ea$(ad%)=zc$ 3880 fa$(ad%)=FNcd(30) 3890 ga%(ad%)=0 3900 ENDPROC 3930 DEFFNyc 3940 LOCALdd%,ed% 3950 dd%=-1 3960 FORed%=0TOba%-1 3970 IFga%(ed%)=255THENdd%=ed% 3980 IFga%(ed%)=1THENdd%=ed%:ed%=ba% 3990 NEXT 4000 IFdd%=-1THENPROCi("An attempt was made to add a new message when no space was free"):PROCg("FX125") 4010 =dd% 4030 DEFFNib 4040 !&70=da%+aa%+1 4050 !&72=da% 4060 CALLib% 4070 !&72=0 4080 =(!&70)-da% 4100 DEFPROCbd(fd%,vb%) 4110 LOCALA%,X%,Y% 4120 ca%?0=vb% 4130 ca%!1=da% 4140 ca%!5=fd% 4150 A%=2 4160 X%=ca%MOD256 4170 Y%=ca%DIV256 4180 CALL&FFD1 4190 BPUT#vb%,152 4200 ENDPROC 4220 DEFPROCuc(gd$,hd%) 4230 LOCALid% 4240 id%=hd%?LEN(gd$) 4250 $hd%=gd$ 4260 hd%?LEN(gd$)=id% 4270 ENDPROC 4290 DEFPROCmb 4300 !&70=da% 4310 !&72=da%+aa%+1 4320 CALLmb% 4330 ENDPROC 4350 DEFFNwc(jd%,kd%,zc$) 4360 LOCALld%,md%,nd%,od%,tb% 4370 VDU22,7 4380 ld%=0:md%=0:nd%=(aa%DIV40)-25 4390 od%=FALSE 4400 PROCab(zc$,od%) 4410 PROCpd(ld%) 4420 *FX21 4430 REPEAT 4440 VDU31,jd%,kd% 4450 REPEAT 4460 tb%=GET 4470 UNTIL(tb%>=32ANDtb%<=127)OR(tb%>=136ANDtb%<=139)OR(tb%>=200ANDtb%<=229)ORtb%=13ORtb%=27ORtb%=20 4490 IFtb%=ASC"£"THENtb%=35ELSEIFtb%=ASC"#"THENtb%=95ELSEIFtb%=ASC"_"THENtb%=96 4510 IFtb%>=32ANDtb%<=126ANDNOTod%THEN?(jd%+kd%*40+&7C00)=tb%:da%?(jd%+(kd%+ld%)*40)=tb%:jd%=jd%+1:IFjd%=40ANDNOT(ld%=nd%ANDkd%=23)ANDtb%<>32THENjd%=FNqd(kd%,ld%):kd%=kd%+1:md%=-1 4520 IFtb%=32ANDjd%=40THENjd%=39:tb%=13 4530 IFtb%>=200ANDtb%<=229THENrd%=FNsd(tb%,jd%,kd%):jd%=jd%-rd%:IFjd%=40ANDNOT(ld%=nd%ANDkd%=23)THENjd%=0:kd%=kd%+1:md%=-1 4540 IFtb%=127ANDjd%>0THEN!&70=da%+(kd%+ld%)*40:?&72=jd%:CALLgb%:!&70=&7C00+kd%*40:?&72=jd%:CALLgb%:jd%=jd%-1 4550 IFtb%=13THENIFNOT(ld%=nd%ANDkd%=23)THENda%?((kd%+1+ld%)*40)=da%?((kd%+ld%)*40):jd%=1:kd%=kd%+1:md%=-1 4560 IFtb%=209THENod%=NOTod%:PROCab(zc$,od%) 4570 IFtb%=219THENzc$=FNtd(zc$):PROCab(zc$,od%) 4580 IFINSTR("QWASZXqwaszx",CHR$(tb%))<>0ANDod%THENPROCod(jd%,kd%,ld%,tb%) 4590 IFtb%=226THENPROChb(jd%,kd%,ld%) 4600 IFtb%=227THENPROCkb(kd%,ld%):md%=-1 4610 IFtb%=228THENPROClb(kd%,ld%):md%=-1 4620 IFtb%=20THENPROCud(jd%,kd%,ld%,nd%):md%=-1 4630 IFtb%=136THENjd%=jd%-1 4640 IFtb%=137THENjd%=jd%+1 4650 IFtb%=138THENkd%=kd%+1 4660 IFtb%=139THENkd%=kd%-1 4670 IFjd%<0THENjd%=39:kd%=kd%-1 4680 IFjd%>39THENjd%=0:kd%=kd%+1 4690 IFkd%<0THENkd%=0:ld%=ld%+(ld%>0) 4700 IFkd%>23THENkd%=23:ld%=ld%-(ld%ld%THENPROCpd(ld%):md%=ld%:PROCab(zc$,od%) 4720 UNTILtb%=27ANDNOTod% 4730 PROCw 4740 PROCy 4750 =zc$ 4770 DEFPROChb(jd%,kd%,ld%) 4780 IFjd%=39THENda%?(39+(kd%+ld%)*40)=32:?(&7C00+39+kd%*40)=32:ENDPROC 4790 !&70=da%+(kd%+ld%)*40 4800 ?&72=jd% 4810 CALLhb% 4820 !&70=&7C00+kd%*40 4830 ?&72=jd% 4840 CALLhb% 4850 ENDPROC 4870 DEFPROCkb(kd%,ld%) 4880 LOCALvd%,wd% 4890 vd%=FNib 4900 IFvd%>=aa%-80THENPROCd:ENDPROC 4910 IF(kd%+ld%)*40>vd%THENENDPROC 4920 !&70=da%+(kd%+ld%-1)*40 4930 !&72=da%+(vd%DIV40)*40 4940 CALLkb% 4950 FORwd%=(kd%+ld%)*40TO39+(kd%+ld%)*40 4960 da%?wd%=32 4970 NEXT 4980 ENDPROC 5000 DEFPROClb(kd%,ld%) 5010 LOCALvd%,wd% 5020 vd%=FNib 5030 IF(kd%+ld%)*40>vd%THENENDPROC 5040 IFvd%>=(kd%+ld%)*40ANDvd%<=39+(kd%+ld%)*40THENFORwd%=(kd%+ld%)*40TO39+(kd%+ld%)*40:da%?wd%=32:NEXT:ENDPROC 5050 !&70=da%+(kd%+ld%)*40 5060 !&72=da%+(vd%DIV40)*40 5070 CALLlb% 5080 FORwd%=(vd%DIV40)*40TO(vd%DIV40)*40+40 5090 da%?wd%=32 5100 NEXT 5110 ENDPROC 5130 DEFPROCab(zc$,od%) 5140 PRINTTAB(0,24);SPC(39);TAB(0,24);CHR$(ab%);"Message to ";zc$;TAB(29,24); 5150 IFod%THENPRINT"Pixel edit";ELSEPRINTSPC(10); 5160 ENDPROC 5180 DEFFNqd(kd%,ld%) 5190 LOCALxd%,yd% 5200 xd%=40 5210 REPEAT 5220 xd%=xd%-1 5230 UNTILda%?(xd%+(kd%+ld%)*40)=32ORxd%=0 5240 IFda%?(xd%+(kd%+ld%)*40)<>32THENda%?((kd%+1+ld%)*40)=da%?((kd%+ld%)*40):=1 5250 FORyd%=xd%+1TO39 5260 da%?(yd%-xd%+(kd%+1+ld%)*40)=da%?(yd%+(kd%+ld%)*40) 5270 da%?(yd%+(kd%+ld%)*40)=32 5280 NEXT 5290 da%?((kd%+1+ld%)*40)=da%?((kd%+ld%)*40) 5300 =40-xd% 5320 DEFPROCpd(ld%) 5330 !&70=da%+ld%*40 5340 CALLnb% 5350 ENDPROC 5370 DEFFNsd(tb%,jd%,kd%) 5380 LOCALzd% 5390 zd%=-1 5400 IFtb%>=200ANDtb%<=208THENzd%=tb%-71 5410 IFtb%>=210ANDtb%<=216THENzd%=tb%-65 5420 IFtb%>=217ANDtb%<=218THENzd%=tb%-61 5430 IFtb%>=220ANDtb%<=221THENzd%=tb%-67 5440 IFtb%>=222ANDtb%<=223THENzd%=tb%-64 5450 IFtb%>=224ANDtb%<=225THENzd%=365-tb% 5460 IFzd%<>-1THEN?(jd%+kd%*40+&7C00)=zd%:da%?(jd%+(kd%+ld%)*40)=zd%:=TRUE 5470 =FALSE 5490 DEFFNtd(zc$) 5500 PRINTTAB(0,24);SPC(39);TAB(0,24);CHR$(bb%);"Send this message to:";CHR$(na%); 5510 =FNdc(FNna(3,3,zc$)) 5530 DEFPROCod(jd%,kd%,ld%,tb%) 5540 LOCALae%,be%,jc% 5550 ae%=2^((INSTR("QWASZ X",CHR$(tb%AND&DF)))-1) 5560 be%=da%+jd%+(kd%+ld%)*40 5570 IF(?be%AND160)<>160THEN?be%=?be%OR160 5580 IF(?be%ANDae%)=ae%THENjc%=?be%AND(255-ae%)ELSEjc%=?be%ORae% 5590 ?be%=jc% 5600 ?(&7C00+jd%+kd%*40)=jc% 5610 ENDPROC 5630 DEFPROCud(jd%,kd%,ld%,nd%) 5640 LOCALfd%,ma$ 5650 PROCw 5660 PROCy 5670 PRINTCHR$(ma%);"Are you sure you want to read in"'CHR$(ma%);"a text file?";CHR$(na%); 5680 IFNOTFNceTHENVDU22,7:ENDPROC 5690 PRINT' 5700 PROCob("Please insert the disc containing the text file into drive 0 and press SPACE...") 5710 *FX21 5720 REPEATUNTILGET=32 5730 fd%=10 5740 IFFNb=4THENPROCf:fd%=7 5750 IFFNb=8THENPROCe 5760 PRINT 5770 PRINTCHR$(ma%);"Filename:";CHR$(na%); 5780 ma$=FNna(0,fd%,"") 5790 IFma$<>""THENPROCde(jd%,kd%,ld%,nd%,ma$) 5800 PROCob("Please insert your submission disc in drive 0 and press SPACE...") 5810 *FX21 5820 REPEATUNTILGET=32 5830 IFFNb=4THENPROCf 5840 IFFNb=8THENPROCe 5850 VDU22,7 5860 ENDPROC 5880 DEFPROCde(jd%,kd%,ld%,nd%,ma$) 5890 LOCALvb%,ee$,id%,fe% 5900 vb%=OPENIN(ma$) 5910 IFvb%=0THENPRINT':PROCob("Sorry, the file "+ma$+" is not present on this disc."):PRINT:ENDPROC 5920 IFEOF#vb%THENCLOSE#vb%:ENDPROC 5930 PRINT''CHR$(ma%);"Please wait..."' 5940 REPEAT 5950 ee$="" 5960 REPEAT 5970 id%=BGET#vb% 5990 IFid%=ASC"£"THENid%=35ELSEIFid%=ASC"#"THENid%=95ELSEIFid%=ASC"_"THENid%=96 6000 IFid%>=33ANDid%<=126THENee$=ee$+CHR$(id%) 6010 UNTILid%<33ORid%>126OREOF#vb% 6020 fe%=-1 6030 IFjd%+LEN(ee$)<=39THENfe%=jd%:ge%=kd%:he%=ld%:jd%=jd%+LEN(ee$)+1 6040 IFfe%=-1THENjd%=1:kd%=kd%+1:eb%=?(da%+(kd%-1+ld%)*40):IFeb%>=129ANDeb%<=135THEN?(da%+(kd%+ld%)*40)=eb% 6050 IFkd%>23THENkd%=23:ld%=ld%-(ld%=129ANDeb%<=135THEN?(da%+(kd%+ld%)*40)=eb% 6090 UNTILEOF#vb% 6100 CLOSE#vb% 6110 ENDPROC 6130 DEFPROCm 6140 LOCALvb%,ed%,zc$,ie% 6150 vb%=OPENIN("!Mesg") 6160 FORed%=0TOba%-1 6170 PTR#vb%=256+ed%*4096 6180 INPUT#vb%,zc$ 6190 ga%(ed%)=BGET#vb% 6200 IFga%(ed%)<>1THENie%=FNje(vb%,FALSE):fa$(ed%)=FNcd(30):ea$(ed%)=zc$ 6210 NEXT 6220 CLOSE#vb% 6230 sc%=FNke 6240 ENDPROC 6260 DEFFNke 6270 LOCALsc%,ed% 6280 sc%=0 6290 FORed%=0TOba%-1 6300 IFga%(ed%)=0THENsc%=sc%+1 6310 NEXT 6320 =sc% 6340 DEFFNcd(le%) 6350 LOCALme$ 6360 da%?128=13 6370 me$="Subject:" 6380 IFINSTR($da%,me$)=0THENme$="Article:" 6390 IFINSTR($da%,me$)=0THEN="No subject?" 6400 =FNzb(MID$($da%,INSTR($da%,me$)+9,le%)) 6420 DEFPROCr 6430 LOCALne%,mc%,oe%,pe%,qe%,re%,se%,tb%,te%,ue% 6440 CLS 6450 IFsc%=0THENPROCi("Sorry, there are no messages to view."):ENDPROC 6460 ne%=1 6470 mc%=1 6480 oe%=1 6490 pe%=-1 6500 REPEAT 6510 REPEAT 6520 PROCve 6530 IFoe%=pe%THENmc%=1:oe%=1 6540 CLS 6550 PRINTTAB(0,16);CHR$(ta%);"Use:";CHR$(ua%);"V";CHR$(ta%);"iew,";CHR$(ua%);"E";CHR$(ta%);"dit,";CHR$(ua%);"P";CHR$(ta%);"rint,";CHR$(ua%);"D";CHR$(ta%);"elete"; 6560 VDU30 6570 IFne%>sc%THENne%=1 6580 qe%=ne%+13:IFqe%>sc%THENqe%=sc% 6590 FORre%=ne%TOqe% 6600 PRINTFNoc(ea$(ca%?re%)+": "+LEFT$(fa$(ca%?re%),22)," "); 6610 NEXT 6620 se%=qe%-ne%+1:pe%=se%+1 6630 IFsc%>14THENPRINTFNoc("More messages..."," ");:se%=se%+1 6640 IFoe%>se%THENoe%=se% 6650 PRINTTAB(1,oe%-1);CHR$(pa%);CHR$157;CHR$(qa%) 6660 REPEAT 6670 REPEAT 6680 *FX21 6690 tb%=GETAND&DF 6700 UNTILINSTR(CHR$138+CHR$139+CHR$13+CHR$27+"PVED",CHR$(tb%))<>0 6710 IFtb%=138ANDoe%1THENoe%=oe%-1 6730 IFoe%<>mc%THENPRINTTAB(1,mc%-1);" ";CHR$(oa%);TAB(1,oe%-1);CHR$(pa%);CHR$157;CHR$(qa%):mc%=oe% 6740 UNTILINSTR(CHR$13+CHR$27+"PVED",CHR$(tb%))<>0 6750 IFoe%=pe%THENne%=ne%+14:IFne%>sc%THENne%=1 6760 UNTILoe%0THENfd%=fd%+(40-(fd%MOD40)) 7300 =fd%-&3C0 7320 DEFPROCze(ad%) 7330 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(xa%);"Delete this - are you sure?";CHR$(na%); 7340 IFNOTFNceTHENENDPROC 7350 PROCdf(ad%) 7360 ENDPROC 7380 DEFPROCdf(ad%) 7390 LOCALvb% 7400 vb%=OPENUP("!Mesg") 7410 PTR#vb%=256+ad%*4096+5 7420 BPUT#vb%,255 7430 CLOSE#vb% 7440 ga%(ad%)=255 7450 sc%=sc%-1 7460 ENDPROC 7480 DEFPROCaf(ad%) 7490 LOCALfd%,zc$ 7500 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(za%);"Edit this - are you sure?";CHR$(na%); 7510 IFNOTFNceTHENENDPROC 7520 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(wa%);"Loading message, please wait..."; 7530 fd%=FNwe(ad%) 7560 zc$=FNwc(1,4,ea$(ad%)) 7570 PROCxc(zc$,ad%) 7580 ENDPROC 7600 DEFFNce 7610 LOCALtb% 7620 REPEAT 7630 *FX21 7640 tb%=GETAND&DF 7650 UNTILtb%=ASC("Y")ORtb%=ASC("N") 7660 IFtb%=ASC("Y")THENPRINT"Yes";:=TRUE 7670 PRINT"No"; 7680 =FALSE 7700 DEFPROCye(ad%) 7710 LOCALfd% 7720 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ya%);"Print this - are you sure?";CHR$(na%); 7730 *FX229 7740 IFNOTFNceTHENPROCg("FX229,1"):ENDPROC 7750 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(wa%);"Loading message, please wait..."; 7760 fd%=FNwe(ad%) 7770 PRINTTAB(0,16);SPC(35);TAB(0,16);CHR$(ya%);"Printing, please wait..."; 7780 PROCef(fd%) 7790 *FX229,1 7800 ENDPROC 7820 DEFPROCs 7830 LOCALob% 7840 CLS 7850 IFsc%=0THENPROCi("Sorry, there are no messages to print."):ENDPROC 7860 PRINTCHR$(ma%);"Are you sure you want to print the"'CHR$(ma%);"messages?";CHR$(na%); 7870 *FX229 7880 IFNOTFNceTHENPROCg("FX229,1"):ENDPROC 7890 PRINT' 7900 PROCob("Please wait, printing - press ESCAPE to stop...") 7910 FORob%=0TOba%-1 7920 IFga%(ob%)=0THENPROCef(FNwe(ob%)) 7930 NEXT 7940 *FX229,1 7950 ENDPROC 7970 DEFPROCef(fd%) 7980 LOCALob%,lc% 7990 *FX3,10 8000 FORob%=0TOfd%-1 8010 lc%=da%?ob% 8020 IFlc%>=32ANDlc%<=126THENVDUlc%ELSEVDU32 8030 IF(ob%MOD40)=39ORob%=fd%-1THENPRINT 8040 NEXT 8050 PRINT 8060 *FX3 8070 ENDPROC 8090 DEFPROCt 8100 LOCALff$,gf$,vb% 8110 ff$=xb$:gf$=yb$ 8120 PROCcc 8130 IFxb$=ff$ANDyb$=gf$THENENDPROC 8140 vb%=OPENUP("!Mesg") 8150 PTR#vb%=1 8160 PRINT#vb%,xb$ 8170 PRINT#vb%,LEFT$(yb$+STRING$(20," "),20) 8180 CLOSE#vb% 8190 ENDPROC 8210 DEFPROCu 8220 LOCALhf%,if% 8230 CLS 8240 *FX229 8250 hf%=FALSE 8260 FORif%=0TOba%-1 8270 IFga%(if%)=255THENhf%=TRUE:PROCif(if%) 8280 NEXT 8290 *FX229,1 8300 IFNOThf%THENPROCi("Sorry, there are no messages to undelete.") 8310 ENDPROC 8330 DEFPROCif(ad%) 8340 LOCALvb% 8350 PROCqb("Undelete the message to "+ea$(ad%)+" with subject '"+fa$(ad%)+"'?") 8360 IFPOS>31THENPRINT 8370 VDUna% 8380 IFNOTFNceTHENPRINT':ENDPROC 8390 PRINT' 8400 *FX229,1 8410 vb%=OPENUP("!Mesg") 8420 PTR#vb%=256+ad%*4096+5 8430 BPUT#vb%,0 8440 CLOSE#vb% 8450 *FX229 8460 ga%(ad%)=0 8470 sc%=sc%+1 8480 ENDPROC 8500 DEFPROCn 8510 DIMM%-1 8520 IFHIMEM-M%>=256THENENDPROC 8530 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 8540 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.") 8550 ENDPROC