2REM  ***BBSME 1.4***
3REM  ***Program by Alan Neeley***
5LOMEM :29000
6DIM n$(400)
10FOR i=1 TO 20: y=PEEK(27920+i)
12IF y=13 THEN 15
14 sy$=sy$+CHR$(y):NEXT i
15FOR i=1 TO 5: y=PEEK(27944+i)
16IF y=13 THEN  id=VAL(id$):GOTO 20
18 id$=id$+CHR$(y):NEXT i
20FOR i=1 TO 20: y=PEEK(27899+i)
22IF y=13 THEN 25
24 n$(id)=n$(id)+CHR$(y):NEXT i
25 db=PEEK(27955): p=PEEK(27950): dm=PEEK(27951)
30 mf$=CHR$(PEEK(27956))
50 fetch=28000: cin=28061: cntrl=28007: numbout=28013: dump=28062: chrout=28075
55 d$=CHR$(4)
60 ustat=28048: cdstat=28037: carrier=28047:POKE 16149, 255:POKE 16150, 255
70DIM fm$(50), tm$(50), ms$(50), t$(50, 10)
80DIM ml(50)
90GOSUB 4500
95GOSUB 6000
100GOTO 920
240POKE cin, 0: a$=""
250CALL ustat:IF PEEK(cin)=0 THEN GOSUB 1980:CALL ustat:IF PEEK(cin)=0 THEN 250
255GOSUB 5000
260 y=PEEK(cin):IF y=13 THEN ?:RETURN
265IF y=163 THEN  y=8
270IF y=8 AND LEN(a$)=1 THEN POKE cin, 0:GOTO 250
280IF y<8 OR y>128 THEN POKE cin, 0:GOTO 250
290IF y=8 THEN  a$=LEFT$(a$, (LEN(a$)-1)):POKE chrout, y:CALL dump:GOTO 320
300 a$=a$+CHR$(y):POKE chrout, y:CALL dump
320? CHR$(y); 
325IF LEN(a$)=ln THEN RETURN
330GOSUB 1980
340POKE cin, 0:GOTO 250
650REM     ***EXIT OR CONTINUE***
660 o$="":GOSUB 2050: o$="Would you like to":GOSUB 2050
665 o$="":GOSUB 2050: o$="return to Main Menu? ":GOSUB 2050: ln=1:GOSUB 240
670IF a$="N" OR a$="n" THEN  o$="":GOSUB 2050:GOTO 940
675IF a$="Y" OR a$="y" THEN  o$="":GOSUB 2050:GOTO 690
680GOTO 650
690 o$="    One moment please...":GOSUB 2050: o$="":GOSUB 2050
692IF mc=1 THEN GOSUB 4000
695HTAB 1:? d$; "RUN BBSCB,D"; p
920REM  ***Message Entry***
940 o$="":GOSUB 2050: o$="Message Entry":GOSUB 2050: o$="":GOSUB 2050
950 o$="Current High Message # is "+STR$(hm):GOSUB 2050: o$="":GOSUB 2050
960FOR i=1 TO 50:IF fm$(i)="*****" THEN 990
964IF hm=0 THEN 980
965IF i=hm THEN 980
970NEXT i: o$="Message File is full.":GOSUB 2050:GOTO 650
980 m5=hm+1:IF m5<50 THEN 1000
990 m5=i
1000 o$="Subject? ":GOSUB 2050: ln=15:GOSUB 240
1005 o$="":GOSUB 2050
1010IF a$="" THEN  o$="Mesg. Aborted":GOSUB 2050:GOTO 650
1020 ms$(m5)=a$
1030 o$="Enter your Last Name or ID#":GOSUB 2050: ln=15:GOSUB 240
1035 o$="":GOSUB 2050
1040IF a$="" THEN GOTO 1010
1045IF RIGHT$(a$, 5)=RIGHT$(n$(id), 5) THEN  fm$(m5)=n$(id)
1050IF RIGHT$(a$, 5)<>RIGHT$(n$(id), 5) THEN  fm$(m5)=n$(id)+" "+a$
1060 o$="":?:GOSUB 2050: o$="Enter Full name or ID# of":GOSUB 2050
1065 o$="":GOSUB 2050
1070 o$="the person you are sending":GOSUB 2050
1075 o$="":GOSUB 2050
1080 o$="the message to:":GOSUB 2050: ln=15:GOSUB 240
1090IF a$="" THEN GOTO 1010
1100 tm$(m5)=a$: o$="":GOSUB 2050
1110 o$="From    :"+fm$(m5):GOSUB 2050
1115 o$="":GOSUB 2050
1120 o$="To      :"+tm$(m5):GOSUB 2050
1125 o$="":GOSUB 2050
1130 o$="Subject :"+ms$(m5):GOSUB 2050: o$="":GOSUB 2050
1135 o$="":GOSUB 2050
1140 o$="Correct?":GOSUB 2050: ln=1:GOSUB 240
1145 o$="":GOSUB 2050
1150IF a$="n" OR a$="N" THEN GOTO 1000
1160IF a$<>"y" AND a$<>"Y" THEN 1140
1170 mx=1: t$(m5, mx)=""
1180 o$="Enter text. You have a maximum":GOSUB 2050
1185 o$="":GOSUB 2050
1190 o$="of 10 lines at 40 characters":GOSUB 2050
1195 o$="":GOSUB 2050
1200 o$="per line. Press <RET> when done":GOSUB 2050
1205 o$="":GOSUB 2050
1210 o$="":GOSUB 2050: o$="Line "+STR$(mx)+">":GOSUB 2050: ln=40:GOSUB 240
1220IF a$="" THEN 1250
1230 t$(m5, mx)=a$: mx=mx+1:IF mx=11 THEN 1250
1240GOTO 1210
1250 mx=mx-1: ml(m5)=mx
1260IF mx=0 THEN  o$="Aborted":GOSUB 2050:GOTO 650
1270 o$="":GOSUB 2050: o$="Listing...":GOSUB 2050
1275 o$="":GOSUB 2050
1280FOR i=1 TO mx: o$=t$(m5, i):GOSUB 2050: o$="":GOSUB 2050:NEXT i
1290 o$="":GOSUB 2050: o$="Save Message?":GOSUB 2050: ln=1:GOSUB 240
1300IF a$="N" OR a$="n" THEN  o$="Aborted":GOSUB 2050:GOTO 650
1310IF a$<>"Y" AND a$<>"y" THEN GOTO 1290
1320 o$="":?:GOSUB 2050: o$="Message Saved... ":GOSUB 2050
1330IF m5>hm THEN  hm=m5
1340 mc=1:GOTO 650
1960IF mc=1 THEN GOSUB 4000
1965POKE numbout, 37:CALL cntrl
1970HTAB 1:? d$; "RUN BBS,D"; p
1980REM         ***CARRIER CHECK***
2010CALL cdstat
2020IF PEEK(carrier)=255 THEN POKE carrier, 0:RETURN
2030?:?:? "CARRIER LOST!":GOTO 1960
2040RETURN
2050REM         ***OUT TO CALLER***
2080IF o$="" THEN POKE chrout, 13:CALL dump:? o$:RETURN
2090GOSUB 1980:REM          check for carrier
2100FOR k=1 TO LEN(o$)
2110 q=ASC(MID$(o$, k))
2120POKE chrout, q:CALL dump:? CHR$(q); 
2130NEXT k
2140RETURN
4000REM  ***Save Message to Disk***
4015HTAB 1:? d$; "DELETE MESSAGE"; mf$; ",D"; dm
4016HTAB 1:? d$; "OPEN MESSAGE"; mf$
4020HTAB 1:? d$; "WRITE MESSAGE"; mf$
4024FOR d=50 TO 1 STEP -1
4025IF fm$(d)="*****" THEN  hm=d-1:NEXT d
4026IF hm=0 THEN ? "EOF":GOTO 4065
4027IF fm$(d)="" OR fm$(d)="EOF" THEN NEXT d
4028 hm=d: k=hm
4030FOR j=1 TO k
4035? fm$(j):? tm$(j):? ms$(j)
4040? ml(j)
4045FOR i=1 TO ml(j)
4050? t$(j, i)
4055NEXT i
4060IF j=k THEN ? "EOF":GOTO 4065
4063NEXT j:? "EOF"
4065HTAB 1:? d$; "CLOSE MESSAGE"; mf$
4100 mc=0:RETURN
4500REM  ***Read Message from Disk***
4520HTAB 1:? d$; "OPEN MESSAGE"; mf$; ",D"; dm
4525HTAB 1:? d$; "READ MESSAGE"; mf$
4528FOR j=1 TO 50
4530INPUT fm$(j):IF fm$(j)="EOF" THEN  hm=j-1:GOTO 4550
4535INPUT tm$(j), ms$(j), ml(j)
4540FOR i=1 TO ml(j)
4545INPUT t$(j, i):NEXT i
4546IF hm=1 THEN 4550
4547NEXT j
4550HTAB 1:? d$; "CLOSE MESSAGE"; mf$; ",D"; dm
4600RETURN
5000REM  ***Key set for BBS mode***
5005IF PEEK(64885)=131 THEN  o$="GREETINGS!!! From your SYSOP... "+sy$:GOSUB 2050
5010IF PEEK(64885)=130 THEN POKE 27956, 0:POKE 64885, 0:RETURN
5020IF PEEK(64885)=129 THEN POKE 27956, 1:POKE 64885, 0:RETURN
5025IF PEEK(64885)=132 THEN  o$="Choose OPTION C from ":GOSUB 2050
5030IF PEEK(64885)=132 THEN  o$="MAIN OPTION list to CHAT ":GOSUB 2050
5035IF PEEK(64885)=132 THEN  o$="with SYSOP... ":GOSUB 2050
5100IF PEEK(64885)=133 THEN HTAB 2:? d$; "MON C,I,O":?:?:? "-+-> MONITOR ON":?
5110IF PEEK(64885)=141 THEN HTAB 1:? d$; "NOMON C,I,O":?:?:? "-+-> MONITOR OFF":?
5499POKE 64885, 0:RETURN
6000REM  ***Message Alert***
6010FOR i=1 TO hm
6015IF fm$(i)="*****" THEN 6030
6020IF LEFT$(n$(id), 4)=LEFT$(tm$(i), 4) THEN 6050
6025IF VAL(LEFT$(tm$(i), 4))=id+1000 THEN 6050
6030NEXT i
6040RETURN
6050 o$="You have message(s) waiting...":GOSUB 2050: o$="":GOSUB 2050
6055 o$="#'s ":GOSUB 2050
6060FOR j=1 TO hm
6065IF fm$(j)="*****" THEN 6080
6070IF LEFT$(n$(id), 4)=LEFT$(tm$(j), 4) THEN  o$=STR$(j)+",":GOSUB 2050:GOTO 6080
6075IF VAL(LEFT$(tm$(j), 4))=id+1000 THEN  o$=STR$(j)+",":GOSUB 2050:GOTO 6080
6080NEXT j
6085 o$="":?:GOSUB 2050
6100RETURN
