Willie’s BBS

Developer(s): Willie Jones
Date: 198x
Type: Program
Platform(s): TS 2068

Willie Jones’ bulletin board system.

Source Code

   10 CLS 
   20 PRINT AT 5,0;"Load BBSMC tape and press ""PLAY"""
   30 LOAD "bbsmc"CODE 
   35 PRINT "Loaded...Enter Date"
   37 INPUT "DATE: DD/MM ";d$
   40 PRINT ,,"PRESS ANY KEY TO GO ONLINE..."
   50 PAUSE 0
 1000 REM ANSWER PHONE
 1002 OUT 119,34
 1004 OUT 119,0
 1006 PRINT AT 5,4;"SCANNING PHONE LINE..."
 1010 PRINT AT 10,6;"PRESS ""S"" to update cassette"
 1012 PRINT TAB 6;"PRESS ""C"" ANYTIME TO FORCE    CALLER INTO CHAT MODE"
 1020 LET a=IN 119
 1025 IF INKEY$="S" OR INKEY$="s" THEN SAVE "tsbbs" LINE 10
 1030 IF a=5 THEN GO TO 1020
 1080 REM RING IN
 1090 OUT 119,2: OUT 119,34
 2000 REM WARM START
 2001 OUT 119,64: OUT 119,123: OUT 119,55
 2002 REM SET ONLINE TIMER
 2003 POKE 23672,0: POKE 23673,0: POKE 23674,0
 2004 GO SUB logonbull: GO SUB inname
 2005 REM MAIN MENU
 2006 GO SUB cls
 2007 DATA "      Willie's TS-BBS"," ","<R>ead your messages","<L>eave a message","<C>hat with SYSOP","<U>tilities Menu","<T>ime on since logon","<H>ang Up"," ","Choice?:"
 2010 RESTORE 2007
 2020 FOR p=1 TO 10: READ p$: GO SUB nl: GO SUB sm: NEXT p
 2036 ON ERR GO TO quit: GO SUB getkey: LET c$=r$
 2037 IF c$="U" OR c$="u" THEN GO TO 6100
 2040 IF c$="r" OR c$="R" THEN FOR x=1 TO 2: GO SUB nl: NEXT x: GO TO read
 2041 IF c$="t" OR c$="T" THEN GO SUB timer: LET p$="Connect time  HH/MM: ": LET p$=p$+x$: GO SUB nl: GO SUB sm: PAUSE 100: GO TO inputcom
 2045 IF c$="c" OR c$="C" THEN GO TO chat
 2047 IF c$="H" OR c$="h" THEN GO TO quit
 2050 IF c$="l" OR c$="L" THEN GO TO leave
 2070 GO TO inputcom
 3000 REM read messages
 3007 LET w(un)=0
 3010 LET p$="Scanning message base.....": GO SUB sm
 3020 FOR u=1 TO 50
 3025 LET r$=m$(u,5 TO (LEN u$+4)): IF r$=u$ THEN GO TO 3070
 3030 NEXT u
 3040 REM DONE SCANNING MESSAGES
 3045 GO SUB nl: GO SUB nl
 3050 LET p$="message scan completed...": GO SUB sm: PAUSE 100: GO TO inputcom
 3060 REM MESSAGE #X FOUND
 3070 GO SUB cls: LET p$="Message #"+STR$ u: GO SUB sm: GO SUB nl
 3080 LET p$=m$(u): GO SUB sm
 3085 GO SUB nl: GO SUB nl: LET p$="N=Next One  D=Delete  Q=Quit: ": GO SUB sm
 3090 GO SUB getkey: LET c$=r$
 3095 IF c$="N" OR c$="n" THEN GO SUB cls: GO TO 3030
 3100 IF c$="D" OR c$="d" THEN FOR x=1 TO 400: LET m$(u,x)="": NEXT x: GO SUB nl: LET p$="*DELETED*": LET m(u)=0: GO SUB sm: PAUSE 100: GO SUB cls: RETURN 
 3105 IF c$="Q" OR c$="q" THEN GO TO inputcom
 3110 GO TO 3090
 4000 REM leave message
 4010 LET y=1
 4015 IF m(y)=0 THEN GO TO 4025
 4020 LET y=y+1: GO TO 4015
 4025 GO SUB cls
 4030 LET p$="Message #"+STR$ y: GO SUB sm
 4032 GO SUB nl: GO SUB nl
 4035 LET p$="Who gets message?: ": GO SUB sm
 4040 GO SUB getkey: LET a$=r$
 4042 LET i$="": LET k$=""
 4045 FOR x=1 TO LEN a$
 4050 IF a$(x)<>" " THEN LET i$=i$+a$(x)
 4055 IF a$(x)=" " THEN GO TO 4065
 4060 NEXT x
 4065 LET k$=a$(x+1 TO )
 4066 FOR x=1 TO tu: IF f$(x,1 TO LEN i$)=i$ AND l$(x,1 TO LEN k$)=k$ THEN GO TO 4070
 4067 NEXT x
 4070 LET w(x)=w(x)+1
 4072 LET m$(y,1 TO 32)="To: "+a$
 4075 LET p$="From: "+u$: GO SUB sm: LET m$(y,33 TO 64)=p$
 4080 GO SUB nl
 4085 LET p$="Input message (400 chars max)...<CTRL C> to save...": GO SUB sm: GO SUB nl
 4090 LET wm=1: GO SUB getkey: LET wm=0: LET p$="*DONE*": GO SUB sm: LET m$(y,65 TO )=r$
 4095 LET m$(y,LEN r$+65)=CHR$ 3
 4110 GO SUB nl: GO SUB nl
 4120 LET p$="R=Redo S=Save A=Abort: (R,S,A)": GO SUB sm
 4125 GO SUB getkey: LET c$=r$
 4130 IF c$="R" OR c$="r" THEN GO TO 4025
 4135 IF c$="S" OR c$="s" THEN LET m(y)=1: LET p$="*STORED*": GO SUB sm: PAUSE 100: GO TO inputcom
 4140 IF c$="A" OR c$="a" THEN GO TO inputcom
 4145 GO TO 4125
 5000 REM quit message base
 5001 ON ERR RESET 
 5100 GO SUB nl
 5110 LET p$="Thank you for calling!"
 5115 GO SUB cls
 5120 GO SUB sm
 5125 OUT 119,64: OUT 119,0: OUT 119,0
 5130 PAUSE 100: GO TO autoans
 6000 REM LOGON MESSAGE
 6001 PAUSE 30: FOR x=1 TO 30: RANDOMIZE USR output: OUT 115,0: NEXT x
 6002 IF IN 119<128 THEN GO TO quit
 6008 RANDOMIZE USR output: OUT 115,28
 6010 GO SUB cls
 6020 LET P$="      Willie's TS2068 BBS       c/o Indiana Sinclair-Timex               User Group": GO SUB sm
 6030 FOR x=1 TO 5: GO SUB nl: NEXT x
 6040 RETURN 
 6100 REM Utilities Sub-Menu
 6102 GO SUB cls
 6105 DATA "       Utility Sub-Menu","<C>hange Personal UserFile","<L>ist of users","<R>eturn to Main Menu"
 6110 RESTORE 6105
 6115 FOR p=1 TO 4: READ p$: GO SUB sm: GO SUB nl: NEXT p
 6117 GO SUB nl: GO SUB nl: LET p$="Choice? (C,L, or R): ": GO SUB sm
 6120 GO SUB getkey
 6125 IF r$="C" OR r$="c" THEN GO TO 6200
 6130 IF r$="L" OR r$="l" THEN GO TO 6300
 6135 IF r$="R" OR r$="r" THEN GO TO inputcom
 6140 GO TO 6120
 6199 REM CHANGE user file
 6200 GO SUB cls
 6205 LET p$="First Name: "+f$(un): GO SUB sm
 6207 IF LEN f$(un)<20 THEN GO SUB nl
 6210 LET p$="Last Name : "+l$(un): GO SUB sm
 6213 IF LEN l$(un)<20 THEN GO SUB nl
 6215 LET p$="PASSWORD  : "+w$(un): GO SUB sm
 6220 GO SUB nl
 6225 LET p$="Change line? (1-3, 0=Exit): ": GO SUB sm: GO SUB getkey
 6227 LET c$=r$
 6230 IF c$="0" THEN GO TO 6100
 6235 IF c$="3" THEN LET p$="New Password: ": GO SUB sm: GO SUB getkey: IF LEN r$>8 THEN LET p$="Must be 1-8 characters!": GO SUB sm: GO TO 6235
 6237 IF c$="3" THEN LET w$(un)=r$
 6240 IF c$="2" THEN LET p$="New Last Name: ": GO SUB sm: GO SUB getkey: LET l$(un)=r$
 6245 IF c$="1" THEN LET p$="New First Name: ": GO SUB sm: GO SUB getkey: LET f$(un)=r$
 6250 GO TO 6200
 6300 REM transmit userfile list
 6305 GO SUB cls
 6310 LET p$="Press ENTER when ready:": GO SUB sm
 6315 LET c=USR input
 6316 IF c<>13 THEN GO TO 6315
 6317 GO SUB nl
 6320 FOR x=1 TO tu
 6322 LET p$="User File #"+STR$ x
 6323 GO SUB sm: GO SUB nl
 6325 LET p$="Last  name: "+l$(x): GO SUB sm
 6327 IF LEN l$(x)<20 THEN GO SUB nl
 6330 LET p$="First name: "+f$(x): GO SUB sm
 6335 GO SUB nl: NEXT x
 6340 GO SUB nl: LET p$="Press any key to go to main menu": GO SUB sm: LET c=USR input: GO TO inputcom
 7000 REM chat
 7001 ON ERR GO TO quit
 7005 GO SUB nl: LET p$="Paging sysop...................": FOR x=1 TO 10: BEEP .1,1: NEXT x: GO SUB sm: GO SUB nl
 7006 FOR x=1 TO 128: IF INKEY$="" THEN LET p$=".": GO SUB sm: BEEP .1,10: NEXT x: LET p$="The sysop is not available.....": GO TO inputcom
 7008 GO SUB nl: LET p$="You are now in chat mode:": GO SUB sm: GO SUB nl
 7009 CLS : PRINT "You are in chat mode with       ";u$: PRINT : PRINT "SYMBL SHIFT/NOT to escape..."
 7015 POKE 23692,255
 7020 LET RxRDY=0: LET TxRDY=0
 7100 LET a=USR statchk: LET TxRDY=1 AND (a=1 OR a=3): LET RxRDY=1 AND (a=2 OR a=3)
 7130 IF RxRDY THEN LET k=USR input: PRINT CHR$ k;: IF k=13 THEN PRINT ">";
 7135 IF RxRDY THEN IF k=3 THEN GO TO inputcom
 7140 IF TxRDY AND INKEY$<>"" THEN GO SUB 7160
 7150 GO TO 7010
 7160 IF TxRDY THEN LET i$=INKEY$: PRINT i$;: IF CODE i$<>12 THEN OUT 115,CODE i$: IF CODE i$=13 THEN PRINT ">";
 7161 IF CODE i$=195 THEN GO TO inputcom
 7162 IF INKEY$<>"" THEN GO TO 7162
 7163 RETURN 
 7200 FOR d=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(d): PRINT p$(d);
 7202 IF CODE p$(d)=3 THEN GO TO 7210
 7205 NEXT d
 7210 RETURN 
 7220 REM Send a CHR$ 13
 7230 POKE 23692,255: PRINT : RANDOMIZE USR output: OUT 115,13: RETURN 
 7235 REM input subroutine
 7237 LET r$=""
 7240 LET c=USR input
 7241 IF c=3 AND wm=1 THEN RETURN 
 7242 IF c=13 AND wm=1 THEN LET r$=r$+CHR$ 13: GO TO 7240
 7245 IF c=13 THEN LET wm=0: RETURN 
 7250 IF c=8 THEN LET r$=r$( TO (LEN r$-(LEN r$>0))): GO TO 7240
 7255 IF c<>13 AND c<>8 AND (c<32 OR c>122) THEN GO TO 7240
 7260 LET r$=r$+CHR$ c: PRINT CHR$ c;
 7265 GO TO 7240
 7400 CLS : RANDOMIZE USR output: OUT 115,28: RANDOMIZE USR output: OUT 115,31: RETURN 
 8000 REM user input subroutine
 8010 LET p$="First Name: ": GO SUB sm
 8020 GO SUB getkey: LET a$=r$
 8050 LET p$="Last Name : ": GO SUB sm
 8060 GO SUB getkey: LET b$=r$
 8065 GO SUB nl: LET p$="Above correct? (Y/N): ": GO SUB sm: GO SUB getkey: IF r$="n" OR r$="N" THEN GO TO 8000
 8075 LET u$=a$+" "+b$
 8080 FOR x=1 TO tu
 8085 IF l$(x,1 TO LEN b$)=b$ AND f$(x,1 TO LEN a$)=a$ THEN GO TO 8300
 8090 NEXT x
 8120 LET p$="You are a new user....": GO SUB sm
 8125 REM new user
 8127 LET tu=tu+1: IF tu>50 THEN LET tu=tu-1: LET p$="Sorry! Total number of users    allowed access to this system   has been reached. Please call   back in a few days, by then a   new spot should be open: THANKS!"
 8128 GO SUB sm: PAUSE 300: GO TO quit
 8130 GO SUB cls
 8132 LET un=x
 8135 LET p$="          WELCOME!": GO SUB sm: GO SUB nl: GO SUB nl
 8140 GO SUB nl: GO SUB nl
 8145 LET p$="I do hope you enjoy your visit  with my BBS and please feel freeto leave any comments you wish  addressed to SYSOP": GO SUB sm
 8150 GO SUB nl: GO SUB nl
 8155 LET p$="Please enter a 1-8 character    password for further protection of your private mail-": GO SUB sm
 8160 GO SUB nl
 8165 GO SUB nl: LET p$="PASSWORD: ": GO SUB sm
 8170 GO SUB getkey: LET c$=r$: IF LEN c$>8 THEN LET p$="Must be 1-8 characters ONLY!": GO SUB sm: GO TO 8165
 8175 LET p$="Your password is "+c$: GO SUB sm: LET w$(un)=c$
 8180 GO SUB nl: LET p$="Change password? (Y/N):": GO SUB sm
 8185 GO SUB getkey
 8190 IF r$="Y" OR r$="y" THEN GO TO 8160
 8195 LET l$(un)=b$: LET f$(un)=a$
 8200 LET z$(un)=d$
 8205 LET t(un)=1
 8250 PAUSE 150: GO TO inputcom
 8300 REM old user
 8305 GO SUB nl
 8310 LET un=x
 8315 LET p$="PASSWORD  : ": GO SUB sm
 8320 GO SUB getkey
 8407 GO SUB nl
 8410 IF r$<>w$(un,1 TO LEN r$) THEN LET p$="Incorrect password -- Try again": GO SUB sm: GO TO 8300
 8415 LET p$="You have called this system "+STR$ t(un): GO SUB sm: GO SUB nl: LET p$="times before.": GO SUB sm
 8417 GO SUB nl
 8420 LET p$="Last time called was on "+z$(un): GO SUB sm
 8425 IF w(un)>0 THEN LET p$="You have "+STR$ w(un)+" messages waiting.": GO SUB sm
 8430 LET z$(un)=d$
 8435 LET t(un)=t(un)+1
 8440 PAUSE 200: GO TO inputcom
 9990 REM timer
 9992 DIM x$(5): LET time=INT ((PEEK 23672+256*PEEK 23673+256*256*PEEK 23674)/60): LET hr=INT (time/60/60): LET min=INT ((time-(hr*60*60))/60): PRINT AT 20,0;"0" AND hr<10;hr;":";"0" AND min<10;min: FOR x=1 TO 5: LET x$(x)=SCREEN$ (20,x-1): NEXT x
 9993 RETURN 
Scroll to Top