2REM ***BBSMV 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 1600
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***
655 o$="":GOSUB 2050: o$="Do you want to":GOSUB 2050
670 o$="":GOSUB 2050: o$="return to Main Menu? ":GOSUB 2050: ln=1:GOSUB 240
675IF a$="N" OR a$="n" THEN 1600
680IF a$="Y" OR a$="y" THEN 690
685GOTO 650
690 o$="":GOSUB 2050: o$="     One moment please...":GOSUB 2050
695HTAB 1:? d$; "RUN BBSCB,D"; p
1600REM   ***Message View***
1620 o$="":GOSUB 2050: o$="Message View Section":GOSUB 2050: o$="":GOSUB 2050
1630IF hm=0 THEN  o$="No messages in file":GOSUB 2050:GOTO 650
1639 o$="":GOSUB 2050
1640 o$="Current High message is "+STR$(hm):GOSUB 2050
1645 o$="":GOSUB 2050
1646GOSUB 6000
1650 o$="":GOSUB 2050: o$="Enter message number to read":GOSUB 2050
1655 o$="":GOSUB 2050
1660 o$="or <RET> to abort  ==>":GOSUB 2050: ln=3:GOSUB 240
1661 o$="":GOSUB 2050
1665IF a$="a" OR a$="A" THEN 6200
1670IF a$="" THEN GOTO 650
1680 mv=VAL(a$):IF mv<1 OR mv>hm THEN  o$="Invalid Entry...":GOSUB 2050:GOTO 1639
1690IF fm$(mv)="*****" THEN  o$="That message does not exist.":GOSUB 2050: o$="":GOSUB 2050:GOTO 1640
1695IF VAL(LEFT$(tm$(mv), 4))<1000 OR VAL(LEFT$(tm$(mv), 4))>3000 THEN 1700
1696IF VAL(LEFT$(tm$(mv), 4))<>id+1000 THEN  o$="This is a Private Message":GOSUB 2050: o$="":GOSUB 2050:GOTO 1640
1700 o$="":GOSUB 2050: o$="Message # "+STR$(mv):GOSUB 2050
1705 o$="":GOSUB 2050
1710 o$="From    :"+fm$(mv):GOSUB 2050
1715 o$="":GOSUB 2050
1720 o$="To      :"+tm$(mv):GOSUB 2050
1725 o$="":GOSUB 2050
1730 o$="Subject :"+ms$(mv):GOSUB 2050
1735 o$="":GOSUB 2050
1740?:FOR i=1 TO ml(mv)
1750 o$=t$(mv, i):GOSUB 2050: o$="":GOSUB 2050:NEXT i
1760 o$="":GOSUB 2050:GOTO 1640
1960POKE numbout, 37:CALL cntrl
1965HTAB 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
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
6200REM   ***Print all Messages***
6210FOR i=1 TO hm
6220IF fm$(i)="*****" THEN 6250
6221IF VAL(LEFT$(tm$(i), 4))<1000 OR VAL(LEFT$(tm$(i), 4))>3000 THEN 6224
6222IF VAL(LEFT$(tm$(i), 4))<>id+1000 THEN 6250
6224 o$="":?:GOSUB 2050
6225 o$="From    :"+fm$(i):GOSUB 2050
6226 o$="":?:GOSUB 2050
6230 o$="To      :"+tm$(i):GOSUB 2050
6231 o$="":?:GOSUB 2050
6235 o$="Subject :"+ms$(i):GOSUB 2050
6236 o$="":?:GOSUB 2050
6237FOR j=1 TO ml(i)
6240 o$=t$(i, j):GOSUB 2050
6245 o$="":?:GOSUB 2050:NEXT j
6250NEXT i:GOTO 650
