2REM  ***BBSCB 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)
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
100GOTO 650
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
640REM  ***Main Options***
650 o$="":?:GOSUB 2050: o$="Main Options (B,C,E,K,L,T,V)":GOSUB 2050
660 o$="==> ":GOSUB 2050: ln=1:GOSUB 240
670IF a$="T" OR a$="t" THEN GOTO 1890
680IF a$="c" OR a$="C" THEN 1800
690IF a$="v" OR a$="V" THEN GOSUB 9000:GOTO 1620
700IF a$="e" OR a$="E" THEN GOSUB 9000:GOTO 940
705IF a$="L" OR a$="l" THEN 8000
710IF a$="B" OR a$="b" THEN 840
720IF a$="k" OR a$="K" THEN GOSUB 9000:GOTO 1380
730 o$="":GOSUB 2050: o$="Command Options:":GOSUB 2050
740 o$="":GOSUB 2050: o$=" B - Bulletin Section":GOSUB 2050
750 o$="":GOSUB 2050: o$=" C - Chat with SYSOP":GOSUB 2050
760 o$="":GOSUB 2050: o$=" E - Enter a message":GOSUB 2050
770 o$="":GOSUB 2050: o$=" K - Kill a message":GOSUB 2050
775 o$="":GOSUB 2050: o$=" L - Data Library":GOSUB 2050
780 o$="":GOSUB 2050: o$=" T - Terminate ":GOSUB 2050
790 o$="":GOSUB 2050: o$=" V - View messages":GOSUB 2050
800GOTO 650
820REM  ***Bulletin Display***
840 o$="":?:GOSUB 2050: o$="Bulletin Section":GOSUB 2050
841 o$="":GOSUB 2050
845HTAB 1:? d$; "OPEN BULLETIN,D"; db
850HTAB 1:? d$; "READ BULLETIN"
855GET x$:IF ASC(x$)=13 THEN 870
860 o$=o$+x$:GOTO 855
870IF o$="EOF" THEN 880
875GOSUB 2050: o$="":GOSUB 2050:GOTO 855
880HTAB 1:? d$; "CLOSE BULLETIN,D"; db
900 o$="":GOSUB 2050: o$="End of Bulletin":GOSUB 2050:GOTO 650
940GOSUB 1000:HTAB 1:? d$; "RUN BBSME,D"; p
1000 o$="":?:GOSUB 2050
1005 o$="   One moment please...":GOSUB 2050: o$="":?:GOSUB 2050
1010RETURN
1380GOSUB 1000:HTAB 1:? d$; "RUN BBSMK,D"; p
1620GOSUB 1000:HTAB 1:? d$; "RUN BBSMV,D"; p
1790REM  ***SYSOP Chat Section***
1800 o$="":GOSUB 2050: o$="Chat Section":GOSUB 2050: o$="":GOSUB 2050
1802GOTO 2500
1803IF PEEK(27956)=1 THEN 1810
1804IF PEEK(27956)=0 THEN 1805
1805 o$="Sorry... the SYSOP":GOSUB 2050
1806 o$=" is not here right now... ":GOSUB 2050
1807 o$="Try again later... ":GOSUB 2050
1809GOTO 650
1810 o$="":GOSUB 2050: o$=" ON-LINE WITH SYSOP ":GOSUB 2050:HOME
1811 o$="":?:GOSUB 2050: o$="Set computer to HALF DUPLEX ":GOSUB 2050
1812 o$=" The SYSOP is... "+sy$:GOSUB 2050
1815POKE 64885, 0
1816GOSUB 1980
1818IF PEEK(64885)=0 THEN 1850
1820GOTO 5500
1822 y=PEEK(64885):POKE chrout, y
1824IF y=163 THEN  y=8:POKE chrout, y:POKE 64885, 0
1826IF filter=1 AND PEEK(64885)>=128 THEN POKE 64885, 0:GOTO 1850
1828CALL dump
1830IF dp=1 THEN ? CHR$(y); 
1832POKE 64885, 0
1840REM                                     
1850CALL ustat
1852IF PEEK(cin)=0 THEN 1816
1854IF PEEK(cin)=10 THEN POKE cin, 0:GOTO 1816
1856IF filter=1 AND PEEK(cin)>=128 THEN POKE cin, 0:GOTO 1816
1858 q=PEEK(cin)
1860IF q=16 THEN  q=64:REM           ***FILTER***
1862? CHR$(q); 
1864POKE cin, 0
1866GOTO 1816
1880REM  ***Hang up***
1890 o$="":GOSUB 2050: o$="Are you sure you want to ":GOSUB 2050
1900 o$="Hang-up? ":GOSUB 2050: ln=1:GOSUB 240
1910IF a$="n" OR a$="N" THEN 650
1920IF a$<>"y" AND a$<>"Y" THEN 1900
1930 o$="":?:GOSUB 2050
1940 o$="Thanks for calling "+n$(id):GOSUB 2050
1945 o$="":?:GOSUB 2050
1950 o$="Call again soon!":GOSUB 2050
1955 o$="":?:GOSUB 2050
1960REM    ***RUN BBS***
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!":POKE numbout, 37:CALL cntrl:GOTO 1965
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
2500REM  ***Checks to see if SYSOP is in***
2505IF PEEK(64885)=129 THEN POKE 27956, 1
2510IF PEEK(64885)=130 THEN POKE 27956, 0
2525POKE 64885, 0:GOTO 1803
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
5500REM  ***Key Set for CHAT Mode***
5510IF PEEK(64885)=145 THEN  filter=1:?:?:? "-+->FILTER ON":?:POKE 64885, 0:GOTO 1850
5515IF PEEK(64885)=153 THEN  filter=0:?:?:? "-+-> FILTER OFF":POKE 64885, 0:GOTO 1850
5520IF PEEK(64885)=134 THEN  dp=0:POKE 64885, 0:?:?:? "-+-> FULL DUPLEX":?:GOTO 1850
5525IF PEEK(64885)=142 THEN  dp=1:POKE 64885, 0:?:?:? "-+-> HALF DUPLEX":?:GOTO 1850
5530IF PEEK(64885)=27 AND dp=1 THEN  o$="Reset to FULL DUPLEX!!!":?:GOSUB 2050:GOTO 650
5999GOTO 1822
8000REM    ***DATA LIBRARY***
8005GOSUB 1000
8010HTAB 1:? d$; "RUN BBSDL,D"; p
9000&  ***CHOOSE MESSAGE SECTION***
9010 o$="":GOSUB 2050: o$="Enter # to choose ":GOSUB 2050: o$="":GOSUB 2050
9020 o$="Message Section==> ":GOSUB 2050: ln=1:GOSUB 240: o$="":GOSUB 2050
9030IF VAL(a$)<1 OR VAL(a$)>5 THEN GOTO 9100
9040 y=ASC(a$):POKE 27956, y
9050GOTO 9500
9100& ***ENTER NAMES OF MESSAGE SECTIONS HERE***
9110 o$="":GOSUB 2050: o$="        MESSAGE SECTIONS:":GOSUB 2050: o$="":GOSUB 2050
9120 o$="":GOSUB 2050: o$="1 - Message Section #1":GOSUB 2050: o$="":GOSUB 2050
9130 o$="2 - Message Section #2":GOSUB 2050: o$="":GOSUB 2050
9140 o$="3 - Message Section #3":GOSUB 2050: o$="":GOSUB 2050
9150 o$="4 - Message Section #4":GOSUB 2050: o$="":GOSUB 2050
9160 o$="5 - Message Section #5":GOSUB 2050: o$="":GOSUB 2050
9200GOTO 9000
9500 y=VAL(a$)
9510IF y=1 THEN  a$="Message Section #1"
9520IF y=2 THEN  a$="Message Section #2"
9530IF y=3 THEN  a$="Message Section #3"
9540IF y=4 THEN  a$="Message Section #4"
9550IF y=5 THEN  a$="Message Section #5"
9600 o$="":GOSUB 2050: o$="Loading "+a$:GOSUB 2050: o$="":GOSUB 2050:RETURN
