Bulletin board system for the Timex/Sinclair 2068.
Gallery
Source Code
1 REM T/S Tinyboard by FLASHWARE \* 1986 Randy/Lucy Gordon Timex-SinclairUsers Group of Cincinnati, Oh. 10 GO TO 9000 1000 REM autoans 1001 OUT 119,34 1002 OUT 119,0 1010 REM ansloop 1015 LET a=IN 119 1016 IF CODE INKEY$=195 THEN GO TO edit 1020 IF a=5 THEN GO TO ansloop 1066 FOR x=1 TO 5: BEEP .1,40: NEXT x 1070 OUT 119,2 1080 OUT 119,34 1090 PAUSE 300 2000 REM warmstart 2001 FOR x=1 TO 3: BEEP .1,x: NEXT x: OUT 119,64: OUT 119,123: OUT 119,55: POKE 23674,0: POKE 23673,0: POKE 23672,0: REM set online timer 2002 REM menu 2003 PAUSE 120: CLS : GO SUB logonbull: LET x=IN 115: LET p$="Full name: ": FOR x=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(x): PRINT p$(x);: NEXT x: GO SUB inname: LPRINT u$ 2004 LET y=0: REM set message number to read 2005 REM inputcom 2006 RESTORE 2007 2007 DATA "T/S TINYBOARD MAIN MENU","<R>ead messages","<L>eave message","<C>hat mode","<T>ime on","<G>oodbye"," ","Choice?:" 2008 RANDOMIZE USR output: OUT 115,13: PRINT 2020 FOR p=1 TO 8: PRINT : RANDOMIZE USR output: OUT 115,13: READ p$: FOR x=1 TO LEN p$: POKE 23692,255: PRINT p$(x);: RANDOMIZE USR output: OUT 115,CODE p$(x): NEXT x 2035 NEXT p 2036 ON ERR GO TO quit: LET c$=CHR$ USR input: PRINT c$: PRINT 2040 IF c$="r" OR c$="R" THEN FOR x=1 TO 2: RANDOMIZE USR output: OUT 115,13: NEXT x: GO TO read 2041 IF c$="t" OR c$="T" THEN GO SUB timer: LET p$="Connect time ": LET p$=p$+x$: RANDOMIZE USR output: OUT 115,13: PRINT : FOR x=1 TO LEN p$: PRINT p$(x);: RANDOMIZE USR output: OUT 115,CODE p$(x): NEXT x: GO TO 2006 2045 IF c$="c" OR c$="C" THEN GO TO chat 2047 IF c$="g" OR c$="G" THEN PAUSE 30: GO TO quit 2050 IF c$="l" OR c$="L" THEN GO TO leave 2070 GO TO inputcom 3000 REM read messages 3015 LET y=y+1: IF y>20 THEN LET y=1 3018 IF m$(y,1)=" " THEN GO TO read 3019 PRINT AT 21,0;" ": PRINT AT 21,0;y: LET c$=SCREEN$ (21,0): LET c$=c$+SCREEN$ (21,1): LET p$="MESSAGE NUMBER: "+c$: RANDOMIZE USR output: OUT 115,13: FOR x=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(x): PRINT p$(x);: NEXT x: PRINT : RANDOMIZE USR output: OUT 115,13 3024 FOR v=1 TO 1000: POKE 23692,255 3025 IF CODE m$(y,v)=3 THEN LET v=1000: NEXT v: GO TO inputcom 3030 PRINT m$(y,v);: RANDOMIZE USR output: OUT 115,CODE m$(y,v) 3031 IF v>64 THEN NEXT v 3032 IF (v>32 AND CODE m$(y,v)=13) THEN LET v=64: RANDOMIZE USR output: OUT 115,13 3033 IF (v<32 AND CODE m$(y,v)=13) THEN LET v=32 3035 NEXT v 3036 RANDOMIZE USR output: OUT 115,13: PRINT 3040 GO TO inputcom 4000 REM leave message 4010 LET y1=y1+1: IF y1>20 THEN LET y1=1 4011 DIM l$(1000): LET m$(y1)=l$ 4012 RANDOMIZE USR output: OUT 115,13: LET p$="Who gets message?: ": FOR x=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(x): PRINT p$(x);: NEXT x: ON ERR GO TO quit: LET m$(y1,1 TO 4)="TO: ": FOR x=5 TO 32: LET m$(y1,x)=CHR$ USR input: PRINT m$(y1,x); 4013 IF CODE m$(y1,x)=13 THEN LET x=32 4014 NEXT x 4015 LET m$(y1,33 TO 38)="FROM: ": LET m$(y1,39 TO 64)=u$ 4018 RANDOMIZE USR output: OUT 115,13: PRINT : LET p$="Input message (900 chars max)..<CTRL C> to save...": PRINT : RANDOMIZE USR output: OUT 115,13 4019 FOR x=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(x): PRINT p$(x);: NEXT x: FOR x=1 TO 2: RANDOMIZE USR output: OUT 115,13: PRINT : NEXT x 4020 ON ERR GO TO quit: FOR v=65 TO 1000: POKE 23692,255: LET m1=USR input: REM ctrl C=03h=ETX 4050 LET m$(y1,v)=CHR$ m1: PRINT m$(y1,v);: IF m1=3 THEN LET v=1000: NEXT v: GO TO inputcom 4055 NEXT v 4070 GO TO inputcom 5000 REM quit message base 5001 ON ERR RESET 5100 RANDOMIZE USR output: OUT 115,13 5105 CLS : PAUSE 10 5110 LET p$="Thank you for calling the T/S TINYBOARD.... Hang up now!!!" 5115 PAUSE 30: CLS : RANDOMIZE USR output: OUT 115,28: RANDOMIZE USR output: OUT 115,31 5120 FOR x=1 TO LEN p$: RANDOMIZE USR output: OUT 115,CODE p$(x): PRINT p$(x);: NEXT x 5121 PAUSE 120 5125 OUT 119,64: OUT 119,0: OUT 119,0 5130 PAUSE 60: CLS : FOR x=60 TO 1 STEP -5: BEEP .1,x: NEXT x: GO TO autoans 6000 REM logonbull 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 6005 RANDOMIZE USR output: OUT 115,28: RANDOMIZE USR output: OUT 115,31 6008 RANDOMIZE USR 65200: OUT 115,28 6010 FOR x=1 TO 10: RANDOMIZE USR 65200: OUT 115,13: PRINT : NEXT x 6020 FOR x=1 TO LEN t$: POKE 23692,255: PRINT t$(x);: RANDOMIZE USR 65200: OUT 115,CODE t$(x): NEXT x 6030 FOR x=1 TO 5: RANDOMIZE USR 65200: OUT 115,13: PRINT : NEXT x 6040 RETURN 7000 REM chat 7001 ON ERR GO TO quit 7005 PRINT : RANDOMIZE USR 65200: OUT 115,13: LET p$="Paging sysop...................": FOR x=1 TO 10: BEEP .1,1: NEXT x: FOR x=1 TO LEN p$: POKE 23692,255: PRINT p$(x);: RANDOMIZE USR 65200: OUT 115,CODE p$(x): NEXT x: PRINT : RANDOMIZE USR 65200: OUT 115,13 7006 FOR x=1 TO 128: IF INKEY$="" THEN PRINT ".";: RANDOMIZE USR 65200: OUT 115,46: BEEP .1,10: NEXT x: LET p$="The sysop is not available.....": FOR x=1 TO 10: BEEP .1,1: NEXT x: FOR x=1 TO LEN p$: POKE 23692,255: PRINT p$(x);: RANDOMIZE USR 65200: OUT 115,CODE p$(x): NEXT x: PRINT : RANDOMIZE USR 65200: OUT 115,13: GO TO inputcom 7008 RANDOMIZE USR 65200: OUT 115,13: LET p$="You are now in chat mode:": FOR x=1 TO 10: BEEP .1,1: NEXT x: FOR x=1 TO LEN p$: POKE 23692,255: PRINT p$(x);: RANDOMIZE USR 65200: OUT 115,CODE p$(x): NEXT x: PRINT : RANDOMIZE USR 65200: OUT 115,13 7009 CLS : PRINT "You are in chat mode with ";u$: PRINT : PRINT "SYMBL SHIFT/NOT to escape..." 7010 IF CODE INKEY$=195 THEN GO TO inputcom: REM 195=NOT 7011 POKE 23692,255 7020 LET RxRDY=0: LET TxRDY=0 7100 LET a=USR 65000: 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 65100: PRINT CHR$ k;: IF k=13 THEN PRINT ">"; 7140 IF TxRDY AND INKEY$<>"" THEN GO SUB 7160 7150 GO TO 7010 7160 IF TxRDY THEN LET i$=INKEY$: PRINT i$;: OUT 115,CODE i$: FOR x=1 TO 5: NEXT x: IF CODE i$=13 THEN PRINT ">"; 7161 IF INKEY$<>"" THEN GO TO 7161 7162 RETURN 8000 REM inname 8001 DIM u$(32): LET u=1 8002 RANDOMIZE USR output: OUT 115,5 8005 ON ERR GO TO quit: LET v$=CHR$ USR input: PRINT v$; 8010 LET u$(u)=v$ AND u<32: LET u=u+1 8011 IF CODE v$=13 THEN RETURN 8100 GO TO 8005 8500 REM edit 8510 PRINT AT 0,0;"SYSOP EDITOR";AT 2,0;"<R>ead messages";AT 4,0;"<D>elete messages";AT 6,0;"<L>eave messages";AT 8,0;"<Q>uit editor";AT 10,0;"<S>ave message base" 8520 LET i$=INKEY$ 8525 IF i$="" THEN GO TO 8520 8526 IF i$="s" OR i$="S" THEN GO TO 9999 8530 IF i$="r" OR i$="R" THEN INPUT ;"message #?: ";x: PRINT "Message # ";x: PRINT m$(x): PAUSE 0: GO TO edit 8540 IF i$="d" OR i$="D" THEN INPUT ;"message #?: ";x: PRINT "Message # ";x;" deleted.": LET m$(x)=l$: PAUSE 0: GO TO edit 8550 IF i$="l" OR i$="L" THEN LET y1=y1+1: PRINT "Message # ";y1: PRINT : FOR x=1 TO 1000: PAUSE 0: LET m$(y1,x)=INKEY$: PRINT m$(y1,x); 8554 IF i$="l" OR i$="L" THEN IF CODE INKEY$=195 THEN LET m$(y1,x)=CHR$ 3: GO TO edit: REM 195=NOT 8560 IF i$="l" OR i$="L" THEN NEXT x: PAUSE 0: GO TO edit 8570 IF i$="q" OR i$="Q" THEN GO TO quit 8599 CLS : GO TO edit 9000 REM init 9001 REM 20 meesage base 9004 PAPER 0: BORDER 0: INK 7: CLS 9005 CLEAR 64999: GO SUB 9500 9006 DIM y(1,1): LET y1=0: DIM l$(1000): DIM m$(20,1000): LET m$(1)="No messages found..."+CHR$ 3: FOR x=1 TO 3: BEEP .1,25: NEXT x: PRINT "Do you wish to load a message base?": INPUT x$: IF x$="y" OR x$="Y" THEN PRINT "Start MESSAGE BASE tape... ( 2 Part LOAD... )": LOAD "" DATA m$(): LOAD "" DATA y(): LET y1=y(1,1) 9007 LET t$="T/S Tinyboard FLASHWARE <c> 1985": FOR x=1 TO 3: BEEP .1,25: NEXT x: PRINT "Do you wish to load a logon bulletin?": INPUT x$: IF x$="y" OR x$="Y" THEN PRINT "Start LOGON BULLETIN tape... ( with data as t$ )": LOAD "" DATA t$() 9008 PRINT : PRINT "<NOT> from most modes will exit to SYSOP control mode.": BEEP .1,35: BEEP .1,35: PAUSE 180 9009 LET y=0: LET edit=8500: LET timer=9990 9010 LET chat=7000: LET menu=2002: LET warmstart=2000: LET logonbull=6000: LET statchk=65000: LET input=65100: LET output=65200: LET ansloop=1010: LET inputcom=2005: LET autoans=1000: LET read=3000: LET leave=4000: LET quit=5000 9011 LET inname=8000 9012 PRINT "Now going to AUTOANSWER MODE": FOR x=1 TO 3: BEEP .1,10: NEXT x: PAUSE 180: CLS 9100 GO TO quit 9500 REM code 9510 RESTORE 9515: FOR x=65000 TO 65008: READ x1: POKE x,x1: NEXT x 9515 DATA 175,219,119,230,3,79,6,0,201 9520 RESTORE 9525: FOR x=65100 TO 65132: READ x1: POKE x,x1: NEXT x 9525 DATA 219,119,230,128,200,175,219,119,230,2,40,244,219,115,6,0,79,219,119,230,128,200,175,219,119,230,1,40,244,121,211,115,201 9530 RESTORE 9535: FOR x=65200 TO 65212: READ x1: POKE x,x1: NEXT x 9535 DATA 219,119,230,128,200,175,219,119,230,1,40,244,201 9540 RETURN 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 21,0;"0" AND hr<10;hr;":";"0" AND min<10;min: FOR x=1 TO 5: LET x$(x)=SCREEN$ (21,x-1): NEXT x 9993 RETURN 9995 INK 7: BORDER 0: PAPER 0: CLS : PRINT AT 3,10;"T/S Tinyboard";AT 14,8;"FLASHWARE \* 1986": CIRCLE 123,110,20: PLOT 127,133: DRAW 20,0: DRAW -5,-20: DRAW -15,0: DRAW -5,-10: DRAW -8,0: DRAW -6,-17: DRAW 0,23: DRAW 6,0: DRAW 4,9: DRAW 6,0: DRAW 2,15: BEEP .2,10: BEEP .2,5: BEEP .2,2: PAUSE 4: BEEP .2,10: BEEP .2,5: BEEP .2,2: PAUSE 8: BEEP .2,10: BEEP .2,5: BEEP .2,2: BEEP .2,5: BEEP .2,10: BEEP .2,10 9996 GO TO 10 9997 SAVE "tinyboard" LINE 9995: REM T/S Tinyboard/Flashware \* 1986 rev. date 01/21/86 9998 STOP 9999 SAVE "messbase" DATA m$(): LET y(1,1)=y1: SAVE "msgcntr" DATA y(): GO TO edit