2REM ***BBSMK 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 1350
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
660 o$="":GOSUB 2050: o$="return to Main Menu? ":GOSUB 2050: ln=1:GOSUB 240
665IF a$="N" OR a$="n" THEN 1350
670IF a$="Y" OR a$="y" THEN 680
675GOTO 650
680 o$="":GOSUB 2050: o$="    One moment please...":GOSUB 2050
685IF mc=1 THEN GOSUB 4000
690HTAB 1:? d$; "RUN BBSCB,D"; p
1350REM   ***Message Kill***
1380 o$="":GOSUB 2050: o$="Message Kill Section":GOSUB 2050: o$="":GOSUB 2050
1390IF hm=0 THEN GOTO 1630
1400 o$="":GOSUB 2050: o$="Current High Message # is "+STR$(hm):GOSUB 2050
1405 o$="":GOSUB 2050:GOSUB 2050
1410 o$="Enter msg # to kill or":GOSUB 2050
1415 o$="":GOSUB 2050
1420 o$="<RETURN> to abort ==>":GOSUB 2050: ln=3:GOSUB 240
1425 o$="":GOSUB 2050
1430IF a$="" OR VAL(a$)=0 THEN GOTO 650
1440 mk=VAL(a$)
1450IF mk<0 OR mk>hm THEN  o$="Incorrect Entry":GOSUB 2050:GOTO 1405
1460IF fm$(mk)="*****" THEN  o$="":GOSUB 2050: o$="Message Deleted":GOSUB 2050: o$="":GOSUB 2050:GOTO 1400
1465IF VAL(LEFT$(tm$(mk), 4))<1000 OR VAL(LEFT$(tm$(mk), 4))>3000 THEN 1470
1466IF VAL(LEFT$(tm$(mk), 4))<>id+1000 THEN  o$="This message can't be deleted":GOSUB 2050: o$="":GOSUB 2050:GOTO 1400
1470 o$="":GOSUB 2050: o$="Msg #"+STR$(mk)
1475 o$="":GOSUB 2050
1480 o$="From    :"+fm$(mk):GOSUB 2050
1485 o$="":GOSUB 2050
1490 o$="To      :"+tm$(mk):GOSUB 2050
1495 o$="":GOSUB 2050
1500 o$="Subject :"+ms$(mk):GOSUB 2050
1505 o$="":GOSUB 2050
1510 o$="":GOSUB 2050: o$="This message?":GOSUB 2050: ln=1:GOSUB 240
1515 o$="":GOSUB 2050
1520IF a$="n" OR a$="N" THEN 1400
1530IF a$<>"Y" AND a$<>"y" THEN 1510
1535 fm$(mk)="*****": tm$(mk)="*****"
1540 o$="":GOSUB 2050: o$="Message Deleted...":GOSUB 2050: o$="":GOSUB 2050
1545 mc=1
1550IF mk<hm THEN GOTO 1400
1560FOR i=50 TO 1 STEP -1
1570IF fm$(i)="*****" THEN  hm=i-1:NEXT i
1572IF hm=0 THEN 1630
1575IF fm$(i)="" OR fm$(i)="EOF" THEN NEXT i
1580 hm=i:GOTO 1400
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
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
