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