10 REM >SendMes 20 REM by Steven Flintham 30 REM 40 REM Version 0.93 50 REM 60 REM Thursday 20th May 1993 70 REM Friday 21st May 1993 80 REM Saturday 22nd May 1993 90 REM Sunday 23rd May 1993 100 REM Wednesday 26th May 1993 110 REM Friday 28th May 1993 120 REM Saturday 29th May 1993 130 REM Monday 31st May 1993 140 REM Tuesday 1st June 1993 150 REM Saturday 5th June 1993 160 REM Monday 14th June 1993 170 REM Saturday 19th June 1993 180 REM Monday 28th June 1993 190 REM Wednesday 30th June 1993 200 REM Thursday 1st July 1993 210 : 220 *FX119 230 MODE 7 240 PROCa 250 PROCb 260 PROCc 270 PROCd 280 REPEAT 290 e%=FNf 300 IF e%=1 THEN PROCg 310 IF e%=2 THEN PROCh 320 IF e%=3 THEN PROCi 330 IF e%=4 THEN PROCj 340 IF e%=5 THEN PROCk 350 UNTIL e%=6 360 MODE 7 370 PROCl 380 END 390 : 400 DEF PROCb 410 *FX225,3 420 *FX226,3 430 *FX227,3 440 *FX229,1 450 *FX4,1 460 ENDPROC 470 : 480 DEF PROCl 490 *FX225,1 500 *FX226,128 510 *FX227,144 520 *FX229,0 530 *FX4,0 540 ENDPROC 550 : 560 DEF PROCc 570 m%=4096 580 n%=25 590 DIM o%(n%), p%(6), q% 256, r% m% 600 ON ERROR VDU 6:MODE 7:REPORT:PRINT " at line ";ERL:CLOSE #0:PROCs("KEY0 LIST "+STR$(ERL)+"|M"):PROCs("FX21"):PROCs("FX138,0,128"):PROCl:END 610 PROCt 620 PROCu 630 PROCv 640 ENDPROC 650 : 660 DEF PROCa 670 VDU 23,1,0;0;0;0; 680 ENDPROC 690 : 700 DEF PROCw 710 VDU 23,1,1;0;0;0; 720 ENDPROC 730 : 740 DEF FNS 750 ="SendMes" 760 : 770 DEF PROCt 780 x%=6 790 y%=3 800 z%=3 810 aa%=7 820 ba%=7 830 ca%=3 840 da%=7 850 ea%=4 860 fa%=3 870 ga%=7 880 ha%=7 890 ia%=2 900 ja%=3 910 ka%=3 920 la%=7 930 ma%=3 940 na%=7 950 oa%=7 960 pa%=3 970 qa%=3 980 k%=7 990 ra%=3 1000 sa%=3 1010 ta%=7 1020 ENDPROC 1030 : 1040 DEF PROCu 1050 LOCAL ua% 1060 VDU 26,12 1070 PRINT " ";CHR$(144+x%);"ÿ¯¯¯¯¯¯¯¥ÿ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ÿ"; 1080 PRINT CHR$(144+x%);"ÿ¯¯¯¯¯¯¯¯¯¯¯ª¯¯¯¯¯¯¯¯ ";CHR$(144+x%);"ÿ"; 1090 PRINT CHR$(144+x%);"ÿ";CHR$(144+y%);"êë µ €µ ê£àðàðê ° °ð°ðàð   ";CHR$(144+x%);"ÿ"; 1100 PRINT CHR$(144+x%);"ÿ";CHR$(144+y%);"ê뢡·µµ· ¢ëêêê€ê¡µŽµœµµê® ";CHR$(144+x%);"ÿ"; 1110 PRINT CHR$(144+x%);"";CHR$(144+y%);"¢£ £¡¡£¡ ¢£¢£¢ ¢¡££¡¡¡¡¢£   ";CHR$(145);" "; 1120 FOR ua%=1 TO 18 1130 PRINT CHR$(144+x%);"ÿ";SPC(36);CHR$(144+x%);"ÿ"; 1140 NEXT 1150 PRINT CHR$(144+x%);"ÿüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÿ"; 1160 VDU 28,2,22,37,5 1170 ENDPROC 1180 : 1190 DEF PROCs($q%) 1200 LOCAL X%,Y% 1210 X%=q% MOD 256 1220 Y%=q% DIV 256 1230 CALL &FFF7 1240 ENDPROC 1250 : 1260 DEF PROCd 1270 CLS 1280 PROCz("8BS messaging system") 1290 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..." 1300 PRINT'CHR$(128+aa%);"The disc must be in the drive at"'CHR$(128+aa%);"all times when using this program." 1310 *FX21 1320 REPEAT UNTIL GET=32 1330 IF FNva=8 THEN PROCs("MOUNT 0") ELSE PROCs("DRIVE 0") 1340 IF NOT FNwa("!Mess") THEN PROCba ELSE PROCxa 1350 ENDPROC 1360 : 1370 DEF PROCz(z$) 1380 PRINTTAB(17-LEN(z$)/2,0);CHR$(128+z%);z$ 1390 ENDPROC 1400 : 1410 DEF FNva 1420 LOCAL A%,Y% 1430 A%=0 1440 Y%=0 1450 =(USR(&FFDA) AND &FF) 1460 : 1470 DEF FNwa(ya$) 1480 LOCAL za% 1490 za%=OPENIN(ya$) 1500 IF za%=0 THEN =FALSE 1510 CLOSE #za% 1520 =TRUE 1530 : 1540 DEF PROCba 1550 LOCAL za% 1560 CLS 1570 PROCz("8BS messaging system") 1580 PRINTTAB(0,2);CHR$(128+ba%);"Please enter your three-digit user"'CHR$(128+ba%);"ID:";CHR$(128+ca%); 1590 ab$=FNbb(FNca(3,3)) 1600 za%=OPENOUT("!Mess") 1610 PRINT #za%,ab$ 1620 cb%=PTR #za% 1630 PRINT #za%,0 1640 CLOSE #za% 1650 ENDPROC 1660 : 1670 DEF PROCxa 1680 LOCAL za% 1690 za%=OPENIN("!Mess") 1700 INPUT #za%,ab$ 1710 cb%=PTR #za% 1720 CLOSE #za% 1730 ENDPROC 1740 : 1750 DEF FNbb(db$) 1760 LOCAL eb$,fb%,gb% 1770 eb$="" 1780 FOR fb%=1 TO LEN(db$) 1790 gb%=ASC(MID$(db$,fb%,1)) 1800 IF gb%>=ASC("a") AND gb%<=ASC("z") THEN gb%=gb%-32 1810 eb$=eb$+CHR$(gb%) 1820 NEXT 1830 =eb$ 1840 : 1850 DEF FNca(hb%,ib%) 1860 LOCAL fb%,jb%,db$,kb% 1870 fb%=POS 1880 jb%=VPOS 1890 db$="" 1900 REPEAT 1910 REPEAT 1920 *FX21 1930 kb%=GET 1940 UNTIL kb%=13 OR (kb%>=32 AND kb%<=127) 1950 IF kb%=127 AND LEN(db$)>0 THEN VDU 127:db$=LEFT$(db$,LEN(db$)-1) 1960 IF kb%<>127 AND kb%<>13 AND LEN(db$)=hb%) 1980 =db$ 1990 : 2000 DEF FNf 2010 LOCAL lb%,kb% 2020 CLS 2030 PROCz("8BS messaging system") 2040 PRINTTAB(3,2);CHR$(128+da%);"Start a new message";TAB(32,2);"N" 2050 PRINTTAB(3,3);CHR$(128+da%);"View/edit the messages";TAB(32,3);"V" 2060 PRINTTAB(3,4);CHR$(128+da%);"Tidy the messages";TAB(32,4);"T" 2070 PRINTTAB(3,5);CHR$(128+da%);"Re-enter your user ID";TAB(32,5);"R" 2080 PRINTTAB(3,6);CHR$(128+da%);"Undelete deleted messages";TAB(32,6);"U" 2090 PRINTTAB(3,7);CHR$(128+da%);"Quit to BASIC";TAB(32,7);"Q" 2100 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" 2110 lb%=1 2120 PRINTTAB(1,lb%+1);CHR$(128+ea%);CHR$(157);CHR$(128+fa%);TAB(35,lb%+1);CHR$156; 2130 REPEAT 2140 REPEAT 2150 *FX21 2160 kb%=GET 2170 UNTIL INSTR("NVTRUQnvtruq"+CHR$(138)+CHR$(139)+CHR$(13),CHR$(kb%))>0 2180 PRINTTAB(1,lb%+1);CHR$(128+da%);" " 2190 IF kb%=138 THEN IF lb%<6 THEN lb%=lb%+1 2200 IF kb%=139 THEN IF lb%>1 THEN lb%=lb%-1 2210 IF kb%>=ASC("a") AND kb%<=ASC("z") THEN kb%=kb%-32 2220 IF kb%=ASC("N") THEN lb%=1 2230 IF kb%=ASC("V") THEN lb%=2 2240 IF kb%=ASC("T") THEN lb%=3 2250 IF kb%=ASC("R") THEN lb%=4 2260 IF kb%=ASC("U") THEN lb%=5 2270 IF kb%=ASC("Q") THEN lb%=6 2280 PRINTTAB(1,lb%+1);CHR$(128+ea%);CHR$(157);CHR$(128+fa%);TAB(35,lb%+1);CHR$156; 2290 UNTIL kb%=13 2300 =lb% 2310 : 2320 DEF PROCg 2330 LOCAL fb%,jb%,mb$,nb%,ob$ 2340 CLS 2350 PROCz("8BS messaging system") 2360 za%=OPENIN("!Mess") 2370 PTR #za%=cb% 2380 INPUT #za%,nb% 2390 CLOSE #za% 2400 IF nb%=n% THEN PRINT CHR$(128+ha%);"Sorry - you already have ";n%'CHR$(128+ha%);"messages!"''CHR$(128+ha%);"Press SPACE to return to the menu..";:PROCs("FX21"):REPEAT UNTIL GET=32:ENDPROC 2410 PROCpb 2420 PRINTTAB(0,2);CHR$(128+ha%);"Please enter the user ID of the"'CHR$(128+ha%);"recipient:";CHR$(128+ca%); 2430 fb%=POS 2440 jb%=VPOS 2450 PRINT''CHR$(128+ha%);"(Use 999 for all users and CCC for"'CHR$(128+ha%);"program comments)" 2460 PRINTTAB(fb%,jb%); 2470 mb$=FNbb(FNca(3,3)) 2480 IF mb$="999" THEN ob$=" (all members)" ELSE ob$="" 2490 IF mb$<>"CCC" THEN PROCqb(CHR$(128+ia%)+"To: "+CHR$(128+ja%)+mb$+ob$,r%):PROCqb(CHR$(128+ia%)+"Subject:"+CHR$(128+ja%),r%+80) 2500 IF mb$="CCC" THEN PROCqb(CHR$(128+ia%)+"Program:"+CHR$(128+ja%),r%+40) 2510 PROCqb(CHR$(128+ia%)+"From: "+CHR$(128+ja%)+ab$,r%+(40*ABS(mb$<>"CCC"))) 2520 mb$=FNrb(mb$,10,2+(mb$="CCC")) 2530 PROCsb(mb$) 2540 PROCu 2550 ENDPROC 2560 : 2570 DEF PROCqb(tb$,ub%) 2580 LOCAL vb% 2590 FOR vb%=ub% TO ub%+LEN(tb$)-1 2600 ?vb%=ASC(MID$(tb$,vb%-ub%+1,1)) 2610 NEXT 2620 ENDPROC 2630 : 2640 DEF PROCpb 2650 !&70=r% 2660 !&72=r%+m%+1 2670 CALL pb 2680 ENDPROC 2690 : 2700 DEF FNrb(mb$,wb%,xb%) 2710 LOCAL kb%,yb%,kb%,zb%,ac%:REM MORE 2720 VDU 26,12 2730 yb%=0 2740 bc%=FALSE 2750 PROCcc(yb%) 2760 PROCdc(bc%) 2770 PROCw 2780 REPEAT 2790 PRINTTAB(wb%,xb%); 2800 REPEAT 2810 *FX21 2820 kb%=GET 2830 UNTIL (kb%>=3 AND kb%<=13) OR kb%=27 OR kb%>=32 2840 zb%=INKEY(-1) 2850 ac%=INKEY(-2) 2860 IF NOT bc% AND kb%>=3 AND kb%<=12 THEN wb%=FNec(wb%,xb%,yb%,kb%) 2870 IF kb%=12 AND NOT zb% AND NOT ac% THEN bc%=NOT bc%:PROCa:PROCdc(bc%):PROCw 2880 IF NOT bc% AND kb%=12 AND zb% AND NOT ac% THEN PROCa:mb$=FNfc(mb$):VDU 26,12:PROCcc(yb%):PROCdc(bc%):PROCw 2890 IF NOT bc% AND (kb%>=32 AND kb%<=126) THEN VDU kb%:r%?FNgc(wb%,xb%,yb%)=kb%:wb%=wb%+1 2900 IF bc% AND INSTR("QWASZX",CHR$(kb% AND &DF))<>0 THEN r%?FNgc(wb%,xb%,yb%)=FNhc(r%?FNgc(wb%,xb%,yb%),kb% AND &DF) 2910 IF kb%=127 AND wb%>0 THEN wb%=wb%-1:PROCic(wb%,xb%,yb%):PROCa:VDU 31,0,xb%:PROCjc(yb%+xb%):PROCw 2920 IF kb%=13 THEN wb%=0:xb%=xb%+1 2930 IF kb%=136 THEN wb%=wb%-1:IF zb% THEN wb%=0 2940 IF kb%=137 THEN wb%=wb%+1:IF zb% THEN wb%=39 2950 IF kb%=138 THEN xb%=xb%+1:IF zb% THEN xb%=xb%-1:PROCa:yb%=FNkc(yb%+12):PROCcc(yb%):PROCdc(bc%):PROCw 2960 IF kb%=139 THEN xb%=xb%-1:IF zb% THEN xb%=xb%+1:PROCa:yb%=FNkc(yb%-12):PROCcc(yb%):PROCdc(bc%):PROCw 2970 IF wb%<0 THEN wb%=39:xb%=xb%-1 2980 IF xb%<0 THEN xb%=0:IF yb%>0 THEN PROCa:yb%=yb%-1:VDU 28,0,23,39,0,30,11,26,30:PROCjc(yb%):PROCdc(bc%):PROCw 2990 IF wb%>39 THEN wb%=0:xb%=xb%+1 3000 IF xb%>23 THEN xb%=23:IF yb%<(((m%-40) DIV 40)-23) THEN PROCa:yb%=yb%+1:VDU 28,0,23,39,0,31,0,23,10,26,31,0,23:PROCjc(yb%+23):PROCdc(bc%):PROCw 3010 UNTIL kb%=27 3020 PROCa 3030 =mb$ 3040 : 3050 DEF PROCic(wb%,xb%,yb%) 3060 !&70=r%+FNgc(0,xb%,yb%) 3070 ?&72=wb%+1 3080 CALL ic 3090 ENDPROC 3100 : 3110 DEF PROClc(wb%,xb%,yb%) 3120 IF wb%=39 THEN r%?FNgc(39,xb%,yb%)=32:ENDPROC 3130 !&70=r%+FNgc(0,xb%,yb%) 3140 ?&72=wb% 3150 CALL lc 3160 ENDPROC 3170 : 3180 DEF FNkc(yb%) 3190 IF yb%<0 THEN yb%=0 3200 IF yb%>(((m%-40) DIV 40)-23) THEN yb%=(((m%-40) DIV 40)-23) 3210 =yb% 3220 : 3230 DEF FNec(wb%,xb%,yb%,kb%) 3240 LOCAL mc% 3250 IF kb%>=3 AND kb%<=9 AND NOT zb% AND NOT ac% THEN VDU 126+kb%:r%?FNgc(wb%,xb%,yb%)=126+kb%:wb%=wb%+1 3260 IF kb%>=3 AND kb%<=9 AND zb% AND NOT ac% THEN VDU 142+kb%:r%?FNgc(wb%,xb%,yb%)=142+kb%:wb%=wb%+1 3270 IF NOT zb% AND ac% AND kb%=12 THEN PROCa:PROCnc:VDU 26,12:PROCcc(yb%):PROCdc(bc%):PROCw 3280 IF kb%>=10 AND kb%<=11 AND NOT zb% AND NOT ac% THEN VDU 126+kb%:r%?FNgc(wb%,xb%,yb%)=126+kb%:wb%=wb%+1 3290 IF kb%>=10 AND kb%<=11 AND zb% AND NOT ac% THEN VDU 167-kb%:r%?FNgc(wb%,xb%,yb%)=167-kb%:wb%=wb%+1 3300 IF kb%>=3 AND kb%<=4 AND NOT zb% AND ac% THEN VDU 150+kb%:r%?FNgc(wb%,xb%,yb%)=150+kb%:wb%=wb%+1 3310 IF kb%>=5 AND kb%<=6 AND NOT zb% AND ac% THEN VDU 153+kb%:r%?FNgc(wb%,xb%,yb%)=153+kb%:wb%=wb%+1 3320 IF kb%>=7 AND kb%<=8 AND NOT zb% AND ac% THEN VDU 148-kb%:r%?FNgc(wb%,xb%,yb%)=148-kb%:wb%=wb%+1 3330 IF kb%=9 AND NOT zb% AND ac% THEN PROClc(wb%,xb%,yb%):PROCa:VDU 31,0,xb%:PROCjc(yb%+xb%):PROCw 3340 =wb% 3350 : 3360 DEF PROCdc(bc%) 3370 IF NOT bc% THEN PRINTTAB(0,24);CHR$(128+ka%);"Press CTRL";CHR$(129);"f9";CHR$(128+ka%);"for help... "; ELSE PRINTTAB(0,24);CHR$(128+ka%);"Press";CHR$(129);"f9";CHR$(128+ka%);"to exit pixel editing..."; 3380 ENDPROC 3390 : 3400 DEF PROCcc(yb%) 3410 PRINTTAB(0,0); 3420 !&70=r%+FNgc(0,0,yb%) 3430 !&72=r%+FNgc(0,0,yb%)+960 3440 CALL cc 3450 ENDPROC 3460 : 3470 DEF PROCjc(yb%) 3480 !&70=r%+FNgc(0,0,yb%) 3490 CALL jc 3500 ENDPROC 3510 : 3520 DEF FNgc(wb%,xb%,yb%) 3530 =wb%+(xb%+yb%)*40 3540 : 3550 DEF FNhc(mc%,kb%) 3560 IF mc%>128 THEN mc%=mc%-128 3570 mc%=mc%-32 3580 p%(1)=(mc% AND 1)=1 3590 p%(2)=(mc% AND 2)=2 3600 p%(3)=(mc% AND 4)=4 3610 p%(4)=(mc% AND 8)=8 3620 p%(5)=(mc% AND 16)=16 3630 p%(6)=(mc% AND 64)=64 3640 IF kb%=ASC("Q") THEN p%(1)=NOT p%(1) 3650 IF kb%=ASC("W") THEN p%(2)=NOT p%(2) 3660 IF kb%=ASC("A") THEN p%(3)=NOT p%(3) 3670 IF kb%=ASC("S") THEN p%(4)=NOT p%(4) 3680 IF kb%=ASC("Z") THEN p%(5)=NOT p%(5) 3690 IF kb%=ASC("X") THEN p%(6)=NOT p%(6) 3700 mc%=160+ABS(p%(1))+ABS(p%(2))*2+ABS(p%(3))*4+ABS(p%(4))*8+ABS(p%(5))*16+ABS(p%(6))*64 3710 VDU mc%,8 3720 =mc% 3730 : 3740 DEF PROCsb(mb$) 3750 LOCAL za%,nb%,A%,X%,Y% 3760 VDU 26 3770 PRINTTAB(0,24);CHR$(128+ra%);"Please wait, saving message... "; 3780 za%=OPENUP("!Mess") 3790 PTR #za%=cb% 3800 INPUT #za%,nb% 3810 PTR #za%=cb% 3820 PRINT #za%,nb%+1 3830 PTR #za%=EXT #za% 3840 PRINT #za%,mb$ 3850 BPUT #za%,0 3860 q%?0=za% 3870 q%!1=r% 3880 q%!5=FNoc+1 3890 A%=2 3900 X%=q% MOD 256 3910 Y%=q% DIV 256 3920 CALL &FFD1 3930 BPUT #za%,152 3940 CLOSE #za% 3950 ENDPROC 3960 : 3970 DEF FNoc 3980 !&70=r%+m%+1 3990 !&72=r% 4000 CALL oc 4010 !&72=0 4020 =(!&70)-r% 4030 : 4040 DEF PROCh 4050 LOCAL za%,nb%,pc%,qc%,rc%,yb%,kb%,ha%,mb$,sc%,tc% 4060 za%=OPENUP("!Mess") 4070 PTR #za%=cb% 4080 INPUT #za%,nb% 4090 IF nb%=0 THEN CLOSE #za%:ENDPROC 4100 CLS 4110 PROCz("8BS messaging system") 4120 PRINTTAB(0,2);CHR$(128+ta%);"Please wait, loading message..." 4130 pc%=1 4140 tc%=TRUE 4150 REPEAT 4160 IF NOT tc% THEN VDU 26:PRINTTAB(0,24);CHR$(128+sa%);"Please wait, loading message... "; 4170 tc%=FALSE 4180 REPEAT 4190 qc%=PTR #za% 4200 INPUT #za%,mb$ 4210 rc%=BGET #za% 4220 PROCuc(za%) 4230 UNTIL rc%=0 4240 o%(pc%)=qc% 4250 VDU 26,12 4260 yb%=0 4270 PROCcc(yb%) 4280 PROCvc(mb$,pc%,nb%) 4290 REPEAT 4300 REPEAT 4310 *FX21 4320 kb%=GET 4330 IF kb%>=ASC("a") AND kb%<=ASC("z") THEN kb%=kb%-32 4340 UNTIL (kb%>=136 AND kb%<=139) OR kb%=27 OR kb%=ASC("E") OR kb%=ASC("D") OR kb%=3 4350 zb%=INKEY(-1) 4360 IF kb%=3 THEN PROCwc:VDU 26,12:PROCcc(yb%):PROCvc(mb$,pc%,nb%) 4370 ha%=FALSE 4380 IF kb%=136 AND pc%>1 THEN pc%=pc%-1:PTR #za%=o%(pc%):ha%=TRUE 4390 IF kb%=137 AND pc%0 THEN yb%=yb%-1:VDU 28,0,23,39,0,30,11,26,30:PROCjc(yb%) 4410 IF kb%=139 AND zb% THEN yb%=FNkc(yb%-12):VDU 26,12:PROCcc(yb%):PROCvc(mb$,pc%,nb%) 4420 IF kb%=138 AND NOT zb% AND yb%<(((m%-40) DIV 40)-23) THEN yb%=yb%+1:VDU 28,0,23,39,0,31,0,23,10,26,31,0,23:PROCjc(yb%+23) 4430 IF kb%=138 AND zb% THEN yb%=FNkc(yb%+12):VDU 26,12:PROCcc(yb%):PROCvc(mb$,pc%,nb%) 4440 IF kb%=ASC("D") THEN PRINTTAB(0,24);CHR$(128+pa%);"Are you sure you want to delete this?";:sc%=FNsc:PROCvc(mb$,pc%,nb%):IF NOT sc% THEN kb%=-1 4450 IF kb%=ASC("E") THEN PRINTTAB(0,24);CHR$(128+qa%);"Are you sure you want to edit this? ";:sc%=FNsc:PROCvc(mb$,pc%,nb%):IF NOT sc% THEN kb%=-1 4460 UNTIL kb%=27 OR ha% OR kb%=ASC("E") OR kb%=ASC("D") 4470 UNTIL kb%=27 OR kb%=ASC("E") OR kb%=ASC("D") 4480 IF kb%=ASC("D") THEN PTR #za%=o%(pc%):PROCxc(za%) 4490 IF kb%=ASC("E") THEN PTR #za%=o%(pc%):PROCxc(za%):CLOSE #za%:mb$=FNrb(mb$,0,4):PROCsb(mb$) 4500 IF kb%<>ASC("E") THEN CLOSE #za% 4510 PROCu 4520 ENDPROC 4530 : 4540 DEF FNsc 4550 LOCAL kb$ 4560 REPEAT 4570 kb$=CHR$(GET AND &DF) 4580 UNTIL kb$="Y" OR kb$="N" 4590 =(kb$="Y") 4600 : 4610 DEF PROCuc(za%) 4620 LOCAL A%,X%,Y% 4630 q%?0=za% 4640 q%!1=r% 4650 q%!5=m%+1 4660 A%=4 4670 X%=q% MOD 256 4680 Y%=q% DIV 256 4690 CALL &FFD1 4700 !&70=r%-1 4710 !&72=r%+m%+1 4720 CALL yc 4730 !&76=0 4740 PTR #za%=PTR #za%-((m%-q%!5)-(!&74-r%)) 4750 ENDPROC 4760 : 4770 DEF PROCvc(zc$,ad%,bd%) 4780 LOCAL cd$ 4790 IF ad%>9 AND bd%>9 THEN cd$="" ELSE cd$=" " 4800 PRINTTAB(0,24);CHR$(128+ka%);"Message ";ad%;" of ";bd%;",";cd$;"to ";zc$;" -";CHR$(129);"f0";CHR$(128+ka%);"for help "; 4810 ENDPROC 4820 : 4830 DEF PROCxc(za%) 4840 LOCAL nb%,dd$ 4850 INPUT #za%,dd$ 4860 BPUT #za%,255 4870 PTR #za%=cb% 4880 INPUT #za%,nb% 4890 PTR #za%=cb% 4900 PRINT #za%,nb%-1 4910 ENDPROC 4920 : 4930 DEF PROCi 4940 LOCAL ed%,fd%,gd$,nb%,zc$,rc%,hd% 4950 CLS 4960 PROCz("8BS messaging system") 4970 PRINTTAB(0,2);CHR$(128+na%);"Please wait, tidying messages..." 4980 VDU 21 4990 IF FNwa("!MessB") THEN *id !jd 5000 *RENAME !Mess !MessB 5010 ed%=OPENIN("!MessB") 5020 fd%=OPENOUT("!Mess") 5030 INPUT #ed%,gd$ 5040 PRINT #fd%,gd$ 5050 INPUT #ed%,nb% 5060 PRINT #fd%,nb% 5070 IF EOF #ed% THEN VDU 6:CLOSE #ed%:CLOSE #fd%:PROCs("DELETE !MessB"):ENDPROC 5080 REPEAT 5090 INPUT #ed%,zc$ 5100 rc%=BGET #ed% 5110 IF rc%=0 THEN PRINT #fd%,zc$:BPUT #fd%,rc%:REPEAT:hd%=BGET #ed%:BPUT #fd%,hd%:UNTIL hd%=152 ELSE REPEAT UNTIL BGET #ed%=152 5120 UNTIL EOF #ed% 5130 CLOSE #ed% 5140 CLOSE #fd% 5150 *DELETE !MessB 5160 VDU 6 5170 ENDPROC 5180 : 5190 DEF PROCwc 5200 PROCu 5210 PROCz("8BS messaging system") 5220 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." 5230 PRINT'CHR$(128+la%);"Use the cursor left and right keys"'CHR$(128+la%);"to move between messages." 5240 PRINT'CHR$(128+la%);"Press D to delete the current"'CHR$(128+la%);"message and E to edit it." 5250 PRINT'CHR$(128+la%);"Press ESCAPE to return to the menu." 5260 PRINTTAB(0,16);CHR$(128+ma%);"Press ESCAPE to return to"'CHR$(128+ma%);"viewing..."; 5270 *FX21 5280 REPEAT UNTIL GET=27 5290 ENDPROC 5300 : 5310 DEF PROCnc 5320 LOCAL kb% 5330 PROCu 5340 PROCz("8BS messaging system") 5350 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." 5360 PRINT'CHR$(128+la%);"Use";CHR$(129);"f0-f6";CHR$(128+la%);"to set the text colour" 5370 PRINT CHR$(128+la%);"Use SHIFT";CHR$(129);"f0-f6";CHR$(128+la%);"to set the graphic"'CHR$(128+la%);"colour" 5380 PRINT CHR$(128+la%);"Use";CHR$(129);"f7/f8";CHR$(128+la%);"for steady/flashing" 5390 PRINT CHR$(128+la%);"Use SHIFT";CHR$(129);"f7/f8";CHR$(128+la%);"for coloured/black"'CHR$(128+la%);"background" 5400 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.."; 5410 REPEAT 5420 *FX21 5430 kb%=GET 5440 UNTIL (kb%=12 AND INKEY(-2)) OR kb%=27 5450 IF kb%=27 THEN ENDPROC 5460 CLS 5470 PROCz("8BS messaging system") 5480 PRINTTAB(0,2);CHR$(128+la%);"Use";CHR$(129);"f9";CHR$(128+la%);"to design a graphic block" 5490 PRINT CHR$(128+la%);"Use CTRL";CHR$(129);"f0/f1";CHR$(128+la%);"to set contiguous/"'CHR$(128+la%);"separated graphics" 5500 PRINT CHR$(128+la%);"Use CTRL";CHR$(129);"f2/f3";CHR$(128+la%);"to hold/release"'CHR$(128+la%);"graphics" 5510 PRINT CHR$(128+la%);"Use CTRL";CHR$(129);"f4/f5";CHR$(128+la%);"for double/single"'CHR$(128+la%);"height" 5520 PRINT CHR$(128+la%);"Use SHIFT";CHR$(129);"f9";CHR$(128+la%);"to change the"'CHR$(128+la%);"recipient of the message" 5530 PRINT CHR$(128+la%);"Use CTRL";CHR$(129);"f6";CHR$(128+la%);"to insert a space" 5540 PRINT'CHR$(128+la%);"Press ESCAPE to finish editing" 5550 PRINTTAB(0,17);CHR$(128+ma%);"Press ESCAPE to continue editing.."; 5560 *FX21 5570 REPEAT UNTIL GET=27 5580 ENDPROC 5590 : 5600 DEF PROCv 5610 DIM mc% 208 5620 PROCs("LOAD SendAss "+STR$~mc%) 5630 pb=mc% 5640 cc=mc%+&20 5650 oc=mc%+&41 5660 jc=mc%+&63 5670 yc=mc%+&70 5680 ic=mc%+&AB 5690 lc=mc%+&BE 5700 ENDPROC 5710 : 5720 DEF PROCj 5730 LOCAL za% 5740 CLS 5750 PROCz("8BS messaging system") 5760 PRINTTAB(0,2);CHR$(128+ba%);"Your user ID is currently entered"'CHR$(128+ba%);"as ";ab$ 5770 PRINT'CHR$(128+ba%);"Please enter your three-digit user"'CHR$(128+ba%);"ID:";CHR$(128+ca%); 5780 ab$=FNbb(FNca(3,3)) 5790 za%=OPENUP("!Mess") 5800 PTR #za%=0 5810 PRINT #za%,ab$ 5820 CLOSE #za% 5830 ENDPROC 5840 : 5850 DEF FNfc(mb$) 5860 LOCAL fb%,jb% 5870 PROCu 5880 PROCz("8BS messaging system") 5890 PRINTTAB(0,2);CHR$(128+oa%);"This message is currently going"'CHR$(128+oa%);"to ";mb$ 5900 PRINT'CHR$(128+oa%);"Please enter the user ID of the"'CHR$(128+oa%);"recipient:";CHR$(128+ca%); 5910 fb%=POS 5920 jb%=VPOS 5930 PRINT''CHR$(128+oa%);"(Use 999 for all users and CCC for"'CHR$(128+oa%);"program comments)" 5940 PRINTTAB(fb%,jb%); 5950 =FNbb(FNca(3,3)) 5960 : 5970 DEF PROCk 5980 LOCAL za%,gd$,nb%,zc$,rc%,ib% 5990 CLS 6000 PROCz("8BS messaging system") 6010 PRINTTAB(0,2);CHR$(128+k%);"Are you sure you want to undelete?" 6020 IF NOT FNsc THEN ENDPROC 6030 PRINT'CHR$(128+k%);"Please wait..." 6040 ib%=FALSE 6050 za%=OPENUP("!Mess") 6060 INPUT #za%,gd$ 6070 INPUT #za%,nb% 6080 IF EOF #za% THEN CLOSE #za%:ENDPROC 6090 REPEAT 6100 INPUT #za%,zc$ 6110 rc%=BGET #za% 6120 IF NOT ib% THEN IF rc%=255 THEN PTR #za%=PTR #za%-1:BPUT #za%,0:nb%=nb%+1 6130 IF nb%=n% THEN ib%=TRUE 6140 REPEAT UNTIL BGET #za%=152 6150 UNTIL EOF #za% 6160 PTR #za%=cb% 6170 PRINT #za%,nb% 6180 CLOSE #za% 6190 IF ib% THEN PRINT'CHR$(128+k%);"Warning - not all of the messages"'CHR$(128+k%);"have been recovered."''CHR$(128+k%);"Press SPACE to return to the menu..";:PROCs("FX21"):REPEAT UNTIL GET=32 6200 ENDPROC