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