1 ' Remote Bulletin Board System V 3.8A 6 ' By Dennis Recla Lillypond Softwares 10 DEFINT A-Z 30 DIM A$(25),M(200,2) 90 VERS1$="RBBS v 3.8 without (BOOTPWD) and (pwds) files." 110 VERS2$="Lillypond Software RBBS v 3.8A (07/30/85)" 130 SYS1$="dennis" 150 SYS2$="recla" 170 SYS3$="SYSOP" 190 P2$="supersysop" 210 P1$="goto-cpm" 230 P3$="ddt" 250 VAP$="password" 270 PC$="What is the DRI debugger? " 290 DSK$="A:" 310 DSK2$="A:" 330 DSK3$="A:" 350 DSK4$="A:" 370 DSK5$="A:" 380 DSK6$=DSK$ 390 DFIL$="DUMMY" 400 EPRG$="NOFILE" 410 ANS1$=" >> You can not do that << " 420 NSP$="No spaces." 430 EXIT$="BYE.COM" 440 ERS$=CHR$(8)+" "+CHR$(8) 450 BSL$=CHR$(8)+"/"+CHR$(8) 460 TWIT=-1 470 DATIM=0 490 BEEP=20000 510 SIZE=15 530 WHEEL=0 570 MSYS=0 610 NNUM=0 630 HNUM=0 650 SEC=-1 670 SKIP=-1 690 LMSG=3 710 GOCPM=3 730 SHOLOC=0 750 LOGALL=0 770 SHOALL=0 810 POKE 0,&HCD 840 INC=1 850 ON ERROR GOTO 7390 860 RFLG=PEEK(&H5D):POKE &H5D,&H20 870 RTNOKFLG=PEEK(&H5B):POKE &H5B,120 910 MSGS=1:CALLS=MSGS+1:MNUM=CALLS+1:NW=0 920 BK=0:GOSUB 7130 960 OPEN "I",1,DSK$+"BOOTPWD":IF EOF(1) THEN 1000 980 INPUT #1,DSK2$,DSK3$,DSK4$,DSK5$,SYS1$,SYS2$,VERS1$,TWIT 985 INPUT #1,DATIM,SEC,SHOLOC,DFIL$,EPRG$,WHEEL 1000 CLOSE #1 1020 PRINT VERS1$ 1040 GOSUB 7130:GOSUB 7130 1080 OPEN "I",1,DSK2$+"pwds":IF EOF(1) THEN 1130 1100 INPUT #1,P1$,P2$,P3$,PC$,VAP$,EXIT$,LOGALL,SHOALL 1110 INPUT #1,BEEP,SIZE,MSYS,NNUM,HNUM,SKIP,LMSG,GOCPM 1130 CLOSE #1 1150 BEL=-1:XPR=0 1160 NEWUSER=0 1170 PRINT VERS2$ 1190 GOSUB 7130:GOSUB 7130:SAV$="" 1200 IF RFLG<>ASC("P") THEN 1300 1210 IF RTNOKFLG<>ASC("x") THEN 1300 1220 V=0:INC=0 1230 OPEN "I",1,DSK3$+"LASTCALR":INPUT #1,N$,O$,D$:CLOSE 1240 A$="Welcome back, " 1250 IF N$<>SYS3$ THEN 1270 1260 CN$=N$:O$="":CO$=O$:A$=A$+N$+".":GOSUB 7130:GOSUB 7130:V=1:GOTO 2160 1270 GOSUB 9450:V=1 1280 A$=A$+CN$+" "+CO$+".":GOSUB 7130:GOSUB 7130 1290 T01$=N$:T02$=O$:GOSUB 8800:MF$=MFJ$:GOTO 2160 1300 GOSUB 3580:IF NOT BK THEN NW=1:GOSUB 3540 1310 GOSUB 7130:BK=0 1330 R=0 1340 S=0:IF R=3 THEN 1690 ELSE 1360 1360 S=S+1:A1$="Enter your FIRST Name: ":N=1:GOSUB 7130 1370 C=1:GOSUB 7260:N$=B$:IF N$="" THEN 1360 1380 IF P1$="NOPASS" THEN 1400 1390 IF N$=P1$ AND P1$<>"NOPASS" THEN POKE &H5B,0:GOTO 3440 1400 IF N$<"A" OR LEN(N$)=1 THEN 1360 1440 IF INSTR(N$," ")>0 THEN A1$=NSP$:N=1:GOSUB 7130:GOSUB 7130:GOTO 1360 1460 A1$="Enter your LAST Name: ":N=1:GOSUB 7130 1470 C=1:IF N$=SYS3$ THEN C=2 1480 GOSUB 7260:O$=B$:IF O$="" THEN 1360 1490 IF O$<"A" OR LEN(O$)=1 THEN 1360 1510 IF N$=SYS3$ AND O$=P2$ THEN GOSUB 10310:GOTO 1820 1530 IF N$=SYS3$ THEN GOSUB 7130:A1$="Not the SYSOP!":GOSUB 7130:GOTO 6370 1570 IF INSTR(O$," ")>0 THEN A1$=NSP$:N=1:GOSUB 7130:GOSUB 7130:GOTO 1460 1590 GOSUB 7130:A$="Checking File...":GOSUB 7130 1600 V=0:T01$=N$:T02$=O$:OK=0:GOSUB 8800:IF OK THEN MF$=MFJ$:GOTO 1610 ELSE 1650 1610 T=0 1620 T=T+1:IF T=4 THEN 1690 ELSE A1$="Enter your PASSWORD: " 1630 N=1:GOSUB 7130:C=2:GOSUB 7260:UPW$=B$:IF UPW$="" THEN 1620 1640 IF UPW$=S04$ THEN 1820 ELSE 1620 1650 IF S=3 THEN 1690 ELSE:GOSUB 7130:A1$="First time caller? (Y/N) ":GOSUB 9030 1660 IF NOT OK THEN A$="Try again.":GOSUB 7130:GOSUB 7130:GOTO 1360 1670 IF NOT SEC THEN 1700 1680 GOSUB 7130:A$="Private system!":GOSUB 7130:GOTO 6370 1690 GOSUB 7130:A1$="Too many errors!":GOSUB 7130:GOTO 6370 1700 V=1:GOSUB 8560 1710 A1$="Enter your LOCATION (City, State): ":N=1:GOSUB 7130 1720 C=1:GOSUB 7260:S03$=B$:IF S03$="" THEN 1710 1730 GOSUB 9450 1740 GOSUB 7130:A$=CN$+" "+CO$+" from "+S03$:GOSUB 7130 1750 R=R+1:A1$="All Correct? (Y/N) ":GOSUB 9030:IF NOT OK THEN 1340 1760 HM=0:S05$=STR$(HM):S$=" "+N$+";"+O$+";"+S03$+";"+S04$+";"+S05$ 1770 OPEN "R",1,DSK3$+"USERS",62:FIELD #1,62 AS RR$ 1780 RL=62:GOSUB 7580:NU=NU+1:PUT #1,NU+1:S$=STR$(NU):GOSUB 7580:PUT #1,1:CLOSE 1800 FIL$="NEWCOM":NW=1:GOSUB 7810:MF$=" ":NEWUSER=-1 1820 GOSUB 7130:A$="Logging to disk...":GOSUB 7130:GOSUB 7130:RE=1 1860 OPEN "I",1,DSK$+"DATE.DAT":IF EOF(1) THEN 1910 1870 INPUT #1,D$ 1880 IF DATIM THEN 1950 1885 IF MF$=" " OR MF$="*" THEN CLOSE #1:GOTO 1990 1890 A1$="Is "+D$+" todays date? (Y/N) ":GOSUB 9030:IF NOT OK THEN 1910 1900 CLOSE #1:GOTO 1990 1910 A1$="Enter todays date: (MM/DD/YY) ":N=1:GOSUB 7130 1920 C=1:GOSUB 7260:IF B$="" OR LEN(B$)<>8 THEN 1910 1930 CLOSE #1:OPEN "O",1,DSK$+"DATE.DAT":PRINT #1,B$ 1940 D$=B$ 1950 CLOSE #1 1990 IF N$=SYS3$ THEN 2140 2010 IF MF$="*" THEN 2140 2030 IF MF$=" " AND NOT LOGALL THEN 2140 2050 OPEN "R",1,DSK3$+"CALLERS",60:FIELD #1,60 AS RR$:GET #1,1:RE=VAL(RR$)+1 2060 S$=STR$(RE):RL=60:GOSUB 7580:PUT #1,1:RE=RE+1 2070 IF SHOLOC THEN LOC$=S03$ ELSE LOC$=" " 2100 S$=N$+" "+O$+" "+LOC$+" "+D$:GOSUB 7580:PUT #1,RE:CLOSE #1 2140 OPEN "O",1,DSK3$+"LASTCALR":PRINT #1,N$;",";O$;",";D$:CLOSE 2160 PRINT 2190 IF MG$="#" THEN GOSUB 7730:GOSUB 7770 2200 IF MF$="*" AND TWIT THEN 10090 2250 IF V=0 THEN IF N$<>SYS3$ THEN GOSUB 9450 2260 BK=0:CN=1:M=0:U=0 2270 OPEN "R",1,DSK2$+"COUNTERS",5:FIELD #1,5 AS RR$ 2280 GET #1,CALLS:IF N$=SYS3$ THEN CN=VAL(RR$) ELSE CN=VAL(RR$)+INC 2290 GET #1,MSGS:M=VAL(RR$) 2300 GET #1,MNUM:U=VAL(RR$) 2310 A$="Caller number: ":N=1:GOSUB 7130 2320 A$=STR$(CN):LSET RR$=A$ 2330 A$=SPACE$(4-LEN(STR$(CN)))+STR$(CN):PUT #1,CALLS:GOSUB 7130 2340 A$="Active messages: ":N=1:GOSUB 7130 2350 A$=SPACE$(4-LEN(STR$(M)))+STR$(M):GOSUB 7130 2360 A$="Highest message number: ":N=1:GOSUB 7130 2370 A$=SPACE$(4-LEN(STR$(U)))+STR$(U):GOSUB 7130:CLOSE 2390 IF N$=SYS3$ THEN 2500 2410 IF SKIP THEN 2500 2430 IF HM=0 THEN 2500 2440 IF HM<=U THEN 2460 ELSE HM=0 2445 A$="Messages have been renumbered: ":N=1:GOSUB 7130:GOTO 2500 2460 A$="Highest message read: ":N=1:GOSUB 7130 2480 A$=SPACE$(4-LEN(STR$(HM)))+STR$(HM):GOSUB 7130 2500 GOSUB 7130:A$=" ":GOSUB 7130:IHM=HM 2540 FT=-1:MX=0:MZ=0:IU=0:CNT=0:G=0 2550 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD #1,28 AS RR$ 2560 BK=0:GET #1,RE:IF EOF(1) THEN 2700 2570 G=VAL(RR$):MZ=MZ+1:M(MZ,1)=G:IF G=0 THEN 2690 2580 IF IU=0 THEN IU=G 2590 IF G>9998 THEN MZ=MZ-1:GOTO 2700 2600 GET #1,RE+3:GOSUB 7630 2610 I=INSTR(S$," "):IF I=0 THEN S1$=S$:S2$="":GOTO 2630 2620 S1$=LEFT$(S$,I-1):S2$=MID$(S$,I+1) 2630 IF S1$=N$ AND S2$=O$ THEN 2660 2640 IF N$<>SYS3$ THEN 2690 2650 IF S1$=SYS1$ AND S2$=SYS2$ THEN 2660 ELSE 2690 2660 IF NOT FT THEN 2680 2670 A$="You have mail...":GOSUB 7130:GOSUB 7130:FT=0 2680 RX=RE:GOSUB 5820:RE=RX:CNT=CNT+1 2690 GET #1,RE+5:M(MZ,2)=VAL(RR$):MX=MX+M(MZ,2)+6:RE=RE+6:GOTO 2560 2700 IF CNT=0 THEN 2715 2710 GOSUB 7130 2715 CLOSE 2730 IF NEWUSER THEN GOSUB 3620 2760 A$=CN$+" "+CO$+" ? Your command: " 2765 IF XPR THEN A1$=A$ ELSE GOSUB 7130 2770 IF NOT XPR THEN A1$=A1$+" B,E,F,R,S,K,L,G,H,I,J,U,T,X,P,C,N,D ( or ? ): " 2780 N=1:GOSUB 7130:C=1:GOSUB 7260 2790 IF B$="" THEN 2760 2800 FF=INSTR("BER?SKGIJUTXPDCFNLH",B$):GOSUB 2810:GOTO 2760 2810 IF FF=0 THEN 2980 2820 ON FF GOTO 3540,3660,4980,3620,5460,6500,6040,3580,3100,6800,7770,7730,8680,3630,9490,6260,9960,7900,10180 2980 IF B$="Z" AND N$=SYS3$ THEN GOSUB 8200:RETURN 3000 IF B$="XL" AND N$=SYS3$ THEN GOSUB 10140:RETURN 3020 IF B$="UALL" AND N$=SYS3$ THEN 6800 3040 GOSUB 7130 3050 A$="I do not understand ("+B$+").":GOSUB 7130:GOSUB 7130 3060 SAV$="":RETURN 3100 T=0 3120 IF N$=SYS3$ THEN 3440 3140 IF MF$="#" THEN 3340 3160 IF GOCPM=3 THEN 3240 3180 IF MF$<>"*" AND GOCPM=1 THEN 3290 3200 IF MF$="!" AND GOCPM=2 THEN 3290 3240 GOSUB 7130 3250 A$=ANS1$:GOSUB 7130:GOSUB 7130:SAV$="":RETURN 3290 IF P3$="NOPASS" THEN 3340 3310 T=T+1:IF T=2 THEN GOSUB 7130:GOSUB 7130:RETURN 3320 A1$=PC$:N=1:GOSUB 7130:C=2:GOSUB 7260 3330 IF B$="" OR B$<>P3$ THEN 3310 3340 IF XPR THEN 3400 3380 FIL$="ENTERCPM":NW=1:GOSUB 7810 3400 IF IHM<>HM THEN MFJ$=MF$:GOSUB 8970 3420 GOSUB 6220 3440 POKE 4,0 3460 IF N$=SYS3$ THEN GOSUB 7130:A$="Entering CP/M...":GOSUB 7130 3480 POKE 0,&HC3 3485 IF N$=SYS3$ AND WHEEL THEN POKE &H3E,255:PRINT:PRINT "Setting Wheel BYTE" 3490 IF EPRG$="NOFILE" THEN 3500 ELSE RUN EPRG$ 3500 SYSTEM 3540 FIL$="BULLETIN":NW=1:GOSUB 7810:RETURN 3580 FIL$="INFO":NW=1:GOSUB 7810:RETURN 3620 IF N$=SYS3$ THEN FIL$="SYOPMENU" ELSE FIL$="MENURBBS" 3625 NW=1:GOSUB 7810:RETURN 3630 IF MF$=" " OR MF$="*" THEN 3250 3635 FIL$=DFIL$:NW=1:GOSUB 7810:RETURN 3660 IF N$=SYS3$ THEN 3810 3680 IF MF$="#" THEN 3810 3700 IF LMSG=3 THEN 3780 3720 IF MF$<>"*" AND LMSG=1 THEN 3810 3740 IF MF$="!" AND LMSG=2 THEN 3810 3780 GOSUB 7130 3790 GOTO 3250 3810 F=0:GOSUB 7130:V=0 3820 OPEN "R",1,DSK2$+"COUNTERS",5 3830 FIELD #1,5 AS RR$:GET #1,MNUM:V=VAL(RR$) 3840 A$="Msg # will be ":N=1:GOSUB 7130 3850 A$=STR$(V+1):GOSUB 7130:CLOSE 3860 GOSUB 7130 3870 A1$="To (RETURN for ALL): ":N=1:GOSUB 7130 3880 C=1:GOSUB 7260:IF B$="" THEN T$="ALL" ELSE T$=B$ 3890 GOSUB 9290:IF NOT OK THEN 3870 3900 GOSUB 9400 3910 A1$="Subject: ":N=1:GOSUB 7130 3920 C=0:GOSUB 7260:IF B$="" THEN 3910 ELSE K$=B$: 3930 IF LEN(K$)>26 THEN PRINT "Too long, 25 character limit":GOTO 3910 3940 PW$="":IF T$="ALL" THEN 3980 3950 A1$="Private? (Y/N) ":GOSUB 9030 3960 IF NOT OK THEN 3980 3970 PW$="*" 3980 IF XPR THEN 4020 3990 GOSUB 7130 4000 A$="Enter up to"+STR$(SIZE)+" lines of text (NO semicolons).":GOSUB 7130 4010 A$="When done, hit two RETURNs.":GOSUB 7130 4020 GOSUB 7130:F=0 4030 IF F=SIZE THEN A$="Message full.":GOSUB 7130:GOTO 4100 4040 F=F+1 4050 A1$=SPACE$(3-LEN(STR$(F)))+STR$(F)+"> ":N=1:GOSUB 7130 4060 GOSUB 7260:IF B$="" THEN F=F-1:IF F=0 THEN 4320 ELSE 4100 4070 IF F=SIZE-2 THEN PRINT "(2 lines left)" 4080 IF F=SIZE-1 THEN PRINT "(Last line)" 4090 A$(F)=B$+" ":GOTO 4030 4100 GOSUB 7130 4110 A1$="Select: (A)bort, (C)ontinue, (E)dit, (H)eader, (L)ist, (S)ave: " 4120 IF XPR THEN A1$="(A,C,E,H,L,S) " 4130 N=1:GOSUB 7130:C=1:GOSUB 7260 4140 IF B$="" THEN 4110 4150 FF=INSTR("HLEACS",B$):IF FF=0 THEN 4110 4160 ON FF GOTO 4360,4200,4530,4320,4030,4660 4200 GOSUB 7080:GOSUB 7130 4210 A$="Date: "+D$:GOSUB 7130 4220 A$="To: "+TX$:GOSUB 7130 4230 A$="Re: "+K$:GOSUB 7130 4240 IF PW$="*" THEN A$=" ":GOSUB 7130 4250 GOSUB 7140 4260 FOR L=1 TO F:A$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": "+A$(L) 4270 IF BK THEN 4100 ELSE GOSUB 7130:NEXT L 4280 GOSUB 7130:GOTO 4100 4320 GOSUB 7130:A$="Aborted":GOSUB 7130:GOSUB 7130:RETURN 4360 GOSUB 7130:A$="Enter new data or RETURN for no change.":GOSUB 7130 4370 A1$="To: "+TX$+": ":N=1:GOSUB 7130:C=1:GOSUB 7260 4380 IF B$="" THEN 4410 4390 TSV$=T$:T$=B$:GOSUB 9290:IF NOT OK THEN T$=TSV$:GOTO 4370 4400 GOSUB 9400 4410 A1$="Re: "+K$+": ":N=1:GOSUB 7130:C=0:GOSUB 7260 4420 IF B$<>"" THEN K$=B$ 4430 IF T$="ALL" THEN PW$="":GOTO 4100 4440 IF PW$="*" THEN A$="Yes" ELSE A$="No" 4450 A1$="Private ("+A$+"): ":N=1:GOSUB 7130:C=1:GOSUB 7260 4460 IF B$=" " AND A$="Y" THEN 4100 4470 IF B$=" " AND A$="N" THEN 4100 4480 IF B$="Y" THEN PW$="*":GOTO 4100 4490 B$=" ":GOTO 4100 4530 IF XPR THEN 4570 4540 GOSUB 7130 4550 A$="Enter Line Number to change or RETURN to end.":GOSUB 7130 4560 A$="Then enter new line or RETURN for no change.":GOSUB 7130 4570 GOSUB 7130:A1$="Line Number: ":N=1:GOSUB 7130:C=3:GOSUB 7260 4580 L=VAL(B$):IF L=0 OR L>F THEN GOSUB 7130:GOTO 4100 4590 A$=" was:":GOSUB 7130 4600 A$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": "+A$(L):GOSUB 7130 4610 A1$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": ":N=1:GOSUB 7130:GOSUB 7260 4620 IF B$="" THEN 4570 ELSE A$(L)=B$+" ":GOTO 4570 4660 IF PW$<>"" THEN PW$=";"+PW$ 4670 GOSUB 7130:A$="Saving message...":N=1:GOSUB 7130 4680 OPEN "R",1,DSK2$+"SUMMARY",30 4690 RE=1:FIELD #1,30 AS RR$:RL=30 4700 RE=MZ*6+1:S$=STR$(V+1)+PW$:GOSUB 7580:PUT #1,RE 4710 RE=RE+1:S$=D$:GOSUB 7580:PUT #1,RE 4720 RE=RE+1:S$=N$+" "+O$:GOSUB 7580:PUT #1,RE 4730 RE=RE+1:S$=T$:GOSUB 7580:PUT #1,RE 4740 RE=RE+1:S$=K$:GOSUB 7580:PUT #1,RE 4750 RE=RE+1:S$=STR$(F):GOSUB 7580:PUT #1,RE 4760 RE=RE+1:S$=" 9999":GOSUB 7580:PUT #1,RE 4770 CLOSE #1 4780 VV=0 4790 OPEN "R",1,DSK2$+"COUNTERS",5:FIELD #1,5 AS RR$:GET #1,MNUM 4800 LSET RR$=STR$(V+1):PUT #1,MNUM 4810 GET #1,MSGS:VV=VAL(RR$) 4820 LSET RR$=STR$(VV+1):PUT #1,MSGS:CLOSE #1 4830 OPEN "R",1,DSK2$+"MESSAGES",65 4840 RL=65:FIELD #1,65 AS RR$:RE=MX+1 4850 S$=STR$(V+1)+PW$:GOSUB 7580:PUT #1,RE 4860 RE=RE+1:S$=D$:GOSUB 7580:PUT #1,RE 4870 RE=RE+1:S$=N$+" "+O$:GOSUB 7580:PUT #1,RE 4880 RE=RE+1:S$=T$:GOSUB 7580:PUT #1,RE 4890 RE=RE+1:S$=K$:GOSUB 7580:PUT #1,RE 4900 RE=RE+1:S$=STR$(F):GOSUB 7580:PUT #1,RE 4910 RE=RE+1 4920 FOR P=1 TO F:S$=A$(P):GOSUB 7580:PUT #1,RE:RE=RE+1:NEXT P:SS$=" 9999" 4930 GOSUB 7580:PUT #1,RE:CLOSE #1:MX=MX+F+6:MZ=MZ+1:M(MZ,1)=V+1:M(MZ,2)=F 4940 GOSUB 7130:GOSUB 7130:U=U+1:RETURN 4980 FT=-1:G=0 4990 GOSUB 7130 5000 A2$="Read ":GOSUB 5400 5010 IF LEN(B$)=0 THEN M=0 ELSE M=VAL(B$) 5020 IF M<1 THEN GOSUB 7130:RETURN 5030 IF M>U THEN GOSUB 9090:GOTO 4990 5040 OPEN "R",1,DSK2$+"MESSAGES",65 5050 RE=1:FIELD #1,65 AS RR$:MI=0 5060 MI=MI+1:IF (MI>MZ) OR BK THEN 5350 ELSE G=M(MI,1) 5070 IF GM THEN 5300 5090 GOSUB 8040:IF OK OR NOT PERS THEN 5100 ELSE RE=RE+M(MI,2):GOTO 5060 5100 RE=RE+1:GET #1,RE:GOSUB 7630:DM$=S$ 5110 RE=RE+1:GET #1,RE:GOSUB 7630:NO$=S$ 5120 RE=RE+1:GET #1,RE:GOSUB 7630:T$=S$ 5130 RE=RE+1:GET #1,RE:GOSUB 7630:GOSUB 8150:K$=S$ 5140 RE=RE+1:GET #1,RE:J=VAL(RR$):GOSUB 7130 5150 IF FT THEN GOSUB 7080:GOSUB 7130:FT=0 5160 A$="Msg #:"+STR$(G):GOSUB 7130 5170 A$="Date: "+DM$:GOSUB 7130 5180 T01$=NO$:T02$="":TX$=NO$ 5190 I=INSTR(NO$," "):IF I>0 THEN T01$=LEFT$(NO$,I-1):T02$=MID$(NO$,I+1) 5200 IF T01$<>SYS3$ THEN GOSUB 9410 5210 A$="From: "+TX$:GOSUB 7130 5220 T01$=T$:T02$="":TX$=T$ 5230 I=INSTR(T$," "):IF I>0 THEN T01$=LEFT$(T$,I-1):T02$=MID$(T$,I+1) 5240 GOSUB 9400 5250 A$="To: "+TX$:GOSUB 7130 5260 A$="Re: "+K$:GOSUB 7130:GOSUB 7130 5270 RE=RE+1:FOR P=1 TO J:GET #1,RE:GOSUB 7630:A$=S$:GOSUB 7130 5280 IF BK THEN BK=0:GOTO 5300 5290 RE=RE+1:NEXT P:GOSUB 7130 5300 IF RIGHT$(B$,1)="+" THEN 5330 5310 IF G>HM THEN HM=G 5320 CLOSE:GOTO 4990 5330 M=M+1:MI=0:RE=1 5340 IF M<=U AND NOT BK THEN 5060 5350 IF G>HM THEN HM=G 5360 CLOSE:A$="End of Messages.":GOSUB 7130:GOSUB 7130:DM$="":NO$="":RETURN 5400 A1$="Message Number: ("+STR$(IU)+"-"+STR$(U)+")" 5410 IF NOT XPR THEN A1$=A1$+" to "+A2$+" (RETURN to quit)" 5420 A1$=A1$+" : ":N=1:GOSUB 7130:GOSUB 7260:GOSUB 7130:RETURN 5460 GOSUB 7130 5470 A2$="Start at":GOSUB 5400 5480 IF LEN(B$)=0 THEN M=0:GOSUB 7130:RETURN ELSE M=VAL(B$):GOSUB 7210 5490 IP=INSTR(B$,","):IF IP>0 THEN B$=MID$(B$,IP+1) ELSE ST=0:GOTO 5540 5500 IF LEN(B$)<3 THEN RETURN 5510 IF MID$(B$,2,1)<>"=" THEN RETURN 5520 SV$=MID$(B$,3):B$=LEFT$(B$,1):ST=INSTR("FTS",B$) 5530 IF ST=0 THEN RETURN 5540 IF M<1 THEN RETURN 5550 IF M>U THEN GOSUB 9090:RETURN 5560 GOSUB 7080:GOSUB 7130 5570 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD #1,28 AS RR$ 5580 GET #1,RE 5590 GOTO 5650 5600 IF PERS THEN A$=SPACE$(4-LEN(STR$(G)))+STR$(G)+": ":GOSUB 7130 5610 GOTO 5630 5620 IF (RE+5)/69998 THEN 5760 5670 IF G=0 THEN 5620 5680 IF G0 THEN S$=MID$(S$,I+1) 5890 IF LEN(S$) > 8 THEN S$=LEFT$(S$,8) 5900 IF S$<>SYS3$ THEN CX$=S$:GOSUB 9130:S$=CX$ 5910 A$=A$+S$+SPACE$(8-LEN(S$))+" to => " 5920 RE=RE+1:GET #1,RE:GOSUB 7630 5930 I=INSTR(S$," "):IF I>0 THEN S$=MID$(S$,I+1) 5940 IF S$<>SYS3$ AND S$<>"ALL" THEN CX$=S$:GOSUB 9130:S$=CX$ 5950 IF LEN(S$) > 8 THEN S$=LEFT$(S$,8) 5960 A$=A$+S$+SPACE$(8-LEN(S$))+" " 5970 RE=RE+1:GET #1,RE:GOSUB 7630 5980 GOSUB 8150 5990 A$=A$+S$:GOSUB 7130 6000 RETURN 6040 GOSUB 7130:BK=0:GOSUB 6220 6110 A$=" Goodbye...":GOSUB 7130 6150 IF N$=SYS3$ GOTO 6400 6170 GOSUB 7130:GOSUB 7130:IF IHM<>HM THEN MFJ$=MF$:GOSUB 8970 6180 GOTO 6400 6220 IF XPR THEN GOSUB 7130 6230 IF N$=SYS3$ THEN RETURN 6240 A$="Leave comments for SYSOP? (Y/N or (R)eturn to RBBS) :":N=1:GOSUB 7130 6245 C=1:GOSUB 7260:IF B$=" " OR LEFT$(B$,1)="R" THEN 2760 6250 IF LEFT$(B$,1)="N" THEN 6360 6260 RE=2:RL=65:OPEN "R",1,DSK2$+"COMMENTS",65:FIELD #1,65 AS RR$ 6270 GET #1,1:RE=VAL(RR$)+1:IF RE=1 THEN RE=2 6280 S$=" ":GOSUB 7580:PUT #1,RE:RE=RE+1 6290 S$="From: "+CN$+" "+CO$+" "+D$:GOSUB 7580:PUT #1,RE 6300 GOSUB 7130:A$="Enter text - type two RETURNs to end.":GOSUB 7130 6310 A1$="> ":N=1:GOSUB 7130:GOSUB 7260 6320 IF B$<>"" THEN RE=RE+1:S$=B$:RL=65:GOSUB 7580:PUT #1,RE:GOTO 6310 6330 GOSUB 7130:A1$="Done? (Y/N) ":GOSUB 9030 6340 IF NOT OK THEN 6310 6350 S$=STR$(RE):RL=65:GOSUB 7580:PUT #1,1:CLOSE 6360 GOSUB 7130:RETURN 6370 A1$=" Goodbye..." 6380 GOSUB 7130:GOSUB 7130 6400 POKE 0,&HC3 6420 POKE &H5B,0 6440 RUN EXIT$ 6460 SYSTEM 6500 GOSUB 7130 6510 A2$="Kill":GOSUB 5400 6520 IF LEN(B$)=0 THEN M=0 ELSE M=VAL(B$) 6530 IF M<1 THEN GOSUB 7130:RETURN 6540 IF M>U THEN GOSUB 9090:GOTO 6500 6550 A$="Searching...":N=1:GOSUB 7130 6560 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD #1,30 AS RR$:RL=30 6570 GET #1,RE 6580 IF EOF(1) THEN 6750 ELSE G=VAL(RR$) 6590 IF G>9998 THEN 6750 6600 IF GM THEN 6750 6620 GOSUB 8040:IF OK OR NOT PERS THEN 6630 ELSE 6750 6630 GET #1,RE:GOSUB 7630:PW=INSTR(S$,";"):PW$="" 6640 IF N$=SYS3$ OR PERS OR OK THEN PERS=0:GOTO 6660 6650 IF PW=0 THEN PRINT " Protected.":CLOSE #1:PRINT:RETURN 6660 S$=" 0"+":"+STR$(G):GOSUB 7580:PUT #1,RE:CLOSE 6670 OPEN "R",1,DSK2$+"MESSAGES",65:RE=1:FIELD #1,65 AS RR$:MI=0 6680 MI=MI+1:IF MI>MZ THEN 6750 ELSE G=M(MI,1) 6690 IF GSYS3$ AND NOT SHOLOC THEN 7010 6990 A$=S1$+" "+S2$+", "+S3$:GOSUB 7130 7000 IF N$=SYS3$ OR SHOLOC THEN 7020 7010 A$=S1$+" "+S2$:GOSUB 7130 7020 IF BK THEN 7040 7030 NEXT J 7040 CLOSE:GOSUB 7130:RETURN 7080 GOSUB 7130 7090 A$="CTRL-S to PAUSE, CTRL-K to ABORT":GOSUB 7130 7130 IF SAV$<>"" AND A1$<>"" THEN A1$="":RETURN 7140 IF A1$<>"" THEN A$=A1$:A1$="" 7150 IF N=1 THEN PRINT A$;:PP$=A$:GOTO 7200 7160 BI=ASC(INKEY$+" ") 7170 IF BI=&H13 OR BI=&H53 OR BI=&H73 THEN BI=ASC(INPUT$(1)):GOTO 7190 7180 IF BI=&HB OR BI=&H4B OR BI=&H6B THEN BK=-1:GOTO 7210 7190 PRINT A$ 7200 A=A+LEN(A$) 7210 A$="":N=0 7220 RETURN 7260 IF BEL AND SAV$="" THEN PRINT CHR$(7); 7270 B$="":BK=0 7280 IF SAV$="" THEN GOSUB 8250:IF C<>3 THEN PRINT 7290 SP=INSTR(SAV$,";"):IF SP=0 THEN B$=SAV$:SAV$="":GOTO 7310 7300 B$=LEFT$(SAV$,SP-1):SAV$=MID$(SAV$,SP+1) 7310 IF LEN(B$)=0 THEN C=0:RETURN 7320 IF C=0 THEN 7340 7330 CY$=B$:GOSUB 9210:B$=CY$ 7340 D=D+LEN(B$):C=0 7350 RETURN 7390 IF ERL=960 THEN RESUME 1000 7400 IF ERL=1080 THEN RESUME 1130 7410 IF ERL=1870 THEN RESUME 1910 7420 IF ERL=2050 THEN RE=0:RESUME 2060 7430 IF ERL=2270 THEN RESUME 2310 7440 IF ERL=2550 THEN RESUME 2700 7450 IF ERL=3820 THEN RESUME 3840 7460 IF ERL=4790 THEN RESUME 4800 7470 IF ERL=4810 THEN RESUME 4820 7480 IF ERL=5040 THEN RESUME 5360 7490 IF ERL=5570 THEN RESUME 5760 7500 IF ERL=6260 THEN RESUME 6290 7510 IF ERL=7810 THEN RESUME 7860 7520 IF ERL=8800 THEN RESUME 8910 7540 RESUME NEXT 7580 LSET RR$=LEFT$(S$+SPACE$(RL-2),RL-2)+CHR$(13)+CHR$(10) 7590 RETURN 7630 ZZ=LEN(RR$)-2 7640 WHILE MID$(RR$,ZZ,1)=" " 7650 ZZ=ZZ-1:IF ZZ=1 THEN 7670 7660 WEND 7670 S$=LEFT$(RR$,ZZ) 7680 IF MID$(S$,ZZ,1)="?" THEN S$=S$+" " 7690 RETURN 7730 XPR=NOT XPR:RETURN 7770 BEL=NOT BEL:RETURN 7810 OPEN "I",1,DSK$+FIL$:BK=0:IF EOF(1) THEN 7860 7820 IF NW=0 THEN GOSUB 7080 ELSE NW=0 7830 GOSUB 7130 7840 IF EOF(1) OR BK THEN 7860 ELSE LINE INPUT #1,A$:GOSUB 7130:GOTO 7840 7850 GOSUB 7130 7860 CLOSE #1:GOSUB 7130:RETURN 7900 GOSUB 7080 7910 GOSUB 7130 7920 OPEN "R",1,DSK3$+"CALLERS",60:FIELD #1,60 AS RR$:GET #1,1:SIZ=VAL(RR$) 7930 CA=CN 7940 FOR CNT=SIZ+1 TO 2 STEP -1 7950 GET #1,CNT:GOSUB 7630 7960 A$=SPACE$(5-LEN(STR$(CA)))+STR$(CA)+" "+S$:GOSUB 7130:IF BK THEN 7990 7970 CA=CA-1 7980 NEXT CNT 7990 CLOSE:GOSUB 7130 8000 A$=" End ":GOSUB 7130:GOSUB 7130:RETURN 8040 PERS=0:OK=-1:GET #1,RE:IF INSTR(RR$,";*")<>0 THEN PERS=-1 8050 IF N$=SYS3$ THEN 8080 8060 GET #1,RE+3:GOSUB 8120:IF OK THEN 8080 8070 GET #1,RE+2:GOSUB 8120 8080 RETURN 8120 GOSUB 7630:I=INSTR(S$," "):S1$=LEFT$(S$,I-1):S2$=MID$(S$,I+1) 8130 IF S1$=N$ AND S2$=O$ THEN OK=-1 ELSE OK=0 8140 RETURN 8150 IF PERS THEN S$="("+S$:S$=S$+")":PERS=0 8160 RETURN 8200 FIL$="COMMENTS":NW=0:DSK$=DSK2$:GOSUB 7810 8210 DSK$=DSK6$:RETURN 8250 CHC=0: SAV$="":DC=0:IC=&H30 8260 NCH=ASC(INPUT$(1)) 8270 IF NCH=13 THEN RETURN 8280 IF NCH=127 THEN 8360 8290 IF NCH<32 THEN 8380 8300 IF CHC>=63 THEN PRINT CHR$(7);:GOTO 8260 8310 SAV$=SAV$+CHR$(NCH): CHC=CHC+1 :IC=IC+1:IF IC=&H3A THEN IC=&H30 8320 IF DC THEN PRINT CHR$(10); 8330 IF C<>2 THEN PRINT CHR$(NCH); ELSE PRINT CHR$(IC); 8340 IF CHC=55 THEN PRINT CHR$(7); 8350 DC=0:GOTO 8260 8360 IF CHC=0 THEN 8260 ELSE PRINT BSL$;:DC=-1 8370 CHC=CHC-1:IC=IC-1: SAV$=LEFT$(SAV$,CHC): GOTO 8260 8380 IF CHC=0 THEN 8260 8390 IF NCH=8 THEN PRINT ERS$;:DC=0:GOTO 8370 8400 IF NCH=12 THEN GOSUB 8460:GOTO 8470 8410 IF NCH=18 THEN PRINT:PRINT PP$;:GOTO 8470 8420 IF NCH=21 THEN PRINT " #": PRINT PP$;:DC=0:GOTO 8250 8430 IF NCH<>24 THEN 8260 8440 GOSUB 8460 8450 GOTO 8250 8460 FOR BCC=1 TO CHC: PRINT ERS$;: NEXT BCC: RETURN 8470 IF C<>2 THEN PRINT SAV$;: GOTO 8520 8510 IC=&H30:FOR BCC=1 TO CHC: IC=IC+1: PRINT CHR$(IC);: NEXT BCC 8520 DC=0:GOTO 8260 8560 GOSUB 7130 8570 A$="Enter at least six alphanumeric characters":GOSUB 7130 8580 A1$="for your PASSWORD: " 8590 N=1:GOSUB 7130:C=2:GOSUB 7260:S04$=B$:IF S04$="" THEN 8560 8595 IF INSTR(S04$," ")>0 THEN A1$=NSP$:N=1:GOSUB 7130:GOTO 8560 8600 IF LEN(S04$)<6 THEN 8560 8610 A1$="Enter it again: " 8620 N=1:GOSUB 7130:C=2:GOSUB 7260 8630 IF S04$<>B$ THEN A1$="No match, try again.":GOSUB 7130:GOTO 8560 8640 GOSUB 7130:A$="Please remember it.":GOSUB 7130:GOSUB 7130:RETURN 8680 GOSUB 7130 8690 IF N$<>SYS3$ THEN 8950 8700 GOSUB 7130 8710 A1$="FIRST Name: ":N=1:GOSUB 7130 8720 C=1:GOSUB 7260:T01$=B$:IF T01$="" THEN GOSUB 7130:GOSUB 7130:RETURN 8730 A1$="LAST Name: ":N=1:GOSUB 7130 8740 C=1:GOSUB 7260:T02$=B$:IF T02$="" THEN RETURN 8750 OK=0:GOSUB 8800:IF OK THEN GOSUB 9680:GOTO 8700 8760 GOSUB 7130:A$="Not found.":GOSUB 7130:GOTO 8700 8800 OPEN "R",1,DSK3$+"USERS",62:FIELD #1,62 AS RR$:GET #1,1:NU=VAL(RR$) 8810 FOR J=2 TO NU+1:GET #1,J:GOSUB 7630:S00$=MID$(S$,3) 8820 I=INSTR(S00$,";"): S01$=LEFT$(S00$,I-1):S02$=MID$(S00$,I+1) 8830 I=INSTR(S02$,";"): S03$=MID$(S02$,I+1):S02$=LEFT$(S02$,I-1) 8840 I=INSTR(S03$,";"): S04$=MID$(S03$,I+1):S03$=LEFT$(S03$,I-1) 8850 I=INSTR(S04$,";"): IF I=0 THEN S05$="0":GOTO 8870 8860 S05$=MID$(S04$,I+1):S04$=LEFT$(S04$,I-1) 8870 HM=VAL(S05$) 8880 IF T01$<>S01$ OR T02$<>S02$ THEN 8900 8890 MFJ$=LEFT$(S$,1):GOSUB 7130:UJ=J:OK=-1:CLOSE:RETURN 8900 NEXT J 8910 CLOSE:RETURN 8950 MFJ$=MF$ 8960 GOSUB 8560 8970 OPEN "R",1,DSK3$+"USERS",62:FIELD #1,62 AS RR$ 8980 S$=MFJ$+" "+S01$+";"+S02$+";"+S03$+";"+S04$+";"+STR$(HM) 8990 RL=62:GOSUB 7580:PUT #1,UJ:CLOSE:RETURN 9030 A2$=A1$:OK=0 9040 A1$=A2$:N=1:GOSUB 7130:C=1:GOSUB 7260:ANS$=LEFT$(B$,1) 9050 IF ANS$="" THEN 9040 ELSE IF ANS$="Y" THEN OK=-1:RETURN 9060 IF ANS$="N" THEN RETURN 9070 A$="":GOSUB 7130:GOTO 9030 9090 A$="Invalid message number.":GOSUB 7130:SAV$="":RETURN 9130 FOR ZZ=2 TO LEN(CX$) 9140 ZA=ASC(MID$(CX$,ZZ,1)):IF ZA<&H41 OR ZA>&H5A THEN 9160 9150 MID$(CX$,ZZ,1)=CHR$(ZA+&H20) 9160 NEXT ZZ 9170 RETURN 9210 FOR ZZ=1 TO LEN(CY$) 9220 ZA=ASC(MID$(CY$,ZZ,1)):IF ZA<&H61 OR ZA>&H7A THEN 9240 9230 MID$(CY$,ZZ,1)=CHR$(ZA-&H20) 9240 NEXT ZZ 9250 RETURN 9290 T01$=T$:T02$="" 9300 IF T$=SYS3$ OR T$="ALL" THEN OK=-1:RETURN 9310 U01$=S01$:U02$=S02$:U03$=S03$:U04$=S04$:SHM=HM:SUJ=UJ:SMF$=MF$ 9320 I=INSTR(T$," "): IF I=0 THEN OK=0:GOTO 9350 9330 T01$=LEFT$(T$,I-1):T02$=MID$(T$,I+1):OK=0:GOSUB 8800 9340 S01$=U01$:S02$=U02$:S03$=U03$:S04$=U04$:HM=SHM:UJ=SUJ:MF$=SMF$ 9350 IF NOT OK THEN:GOSUB 7130:A1$="Not a known user.":GOSUB 7130:GOSUB 7130:GOTO 2760 9360 RETURN 9400 IF T$=SYS3$ OR T$="ALL" THEN TX$=T$:RETURN 9410 CX$=T01$:GOSUB 9130:T01$=CX$:CX$=T02$:GOSUB 9130:T02$=CX$ 9420 TX$=T01$+" "+T02$ 9430 RETURN 9450 CX$=N$:GOSUB 9130:CN$=CX$:CX$=O$:GOSUB 9130:CO$=CX$:RETURN 9490 A$=" ":GOSUB 7130:GOSUB 7130 9500 A$="> "+CN$+" "+CO$+", you have entered the CHAT mode":GOSUB 7130 9510 A1$="Page the SYSOP? (Y/N) ":GOSUB 9030 9520 IF NOT OK THEN RETURN 9530 FOR T1=1 TO 5 9540 PRINT CHR$(7); 9550 FOR T2=1 TO BEEP:NEXT T2 9560 NEXT T1 9570 GOSUB 7130:GOSUB 7130 9580 A$="Type /EX to Exit CHAT":GOSUB 7130 9590 A$="":GOSUB 7130 9600 BELS=BEL:BEL=0 9610 A1$=">":N=1:GOSUB 7130:GOSUB 7260 9620 IF B$="/EX" OR B$="/ex" THEN BEL=BELS:RETURN 9630 GOTO 9610 9640 GOTO 2760 9680 IF N$<>SYS3$ THEN 2760 9690 A$=S01$+" "+S02$+","+" password -> "+S04$+" -->> ":N=1:GOSUB 7130 9700 IF MFJ$=" " THEN A$="Unvalidated User":GOTO 9750 9710 IF MFJ$="!" THEN A$="Validated User":GOTO 9750 9720 IF MFJ$="#" THEN A$="SUPER User":GOTO 9750 9730 IF MFJ$="*" THEN A$="TWIT Status":GOTO 9750 9740 PRINT "User log error.":RETURN 9750 N=1:GOSUB 7130 9760 A$=" ":GOSUB 7130 9810 IF VAP$="NOPASS" GOTO 9850 9820 GOSUB 7130:A1$="Enter your validation Password -> ":N=1:GOSUB 7130 9830 C=2:GOSUB 7260:IF B$=VAP$ THEN 9850 9840 GOTO 8700 9850 GOSUB 7130:A1$="

assword, wit, alidate, nvalidate or uper user -> ":N=1:GOSUB 7130 9860 C=1:GOSUB 7260 9865 IF B$="P" THEN 8960 9870 IF B$="T" THEN MFJ$="*":GOTO 9920 9880 IF B$="V" THEN MFJ$="!":GOTO 9920 9890 IF B$="S" THEN MFJ$="#":GOTO 9920 9900 IF B$="U" THEN MFJ$=" ":GOTO 9920 9910 GOSUB 7130:RETURN 9920 GOSUB 7130:GOTO 8970 9960 FIL$="NEWS":NW=0:DSK$=DSK5$:GOSUB 7810 9980 IF NNUM=0 THEN DSK$=DSK6$:RETURN 10000 A1$="News file number 1 -" 10010 A1$=A1$+STR$(NNUM)+", "+STR$(NNUM+1)+" to Exit --> " 10020 N=1:GOSUB 7130:C=1:GOSUB 7260 10030 IF B$="" THEN 10000 10040 FQ=VAL(B$):IF FQ<1 OR FQ>NNUM THEN DSK$=DSK6$:RETURN 10050 FIL$="NEWS"+MID$(STR$(FQ),2):NW=0:DSK$=DSK5$:GOSUB 7810:GOTO 9960 10090 FIL$="TWIT":NW=1:GOSUB 7810 10100 GOTO 6400 10140 FIL$="XMODEM.LOG":NW=0:GOSUB 7810: RETURN 10180 FIL$="HELP":NW=0:DSK$=DSK4$:GOSUB 7810 10200 IF HNUM=0 THEN DSK$=DSK6$:RETURN 10220 A1$="HELP File number 1 -" 10230 A1$=A1$+STR$(HNUM)+", "+STR$(HNUM+1)+" to exit -->" 10240 N=1:GOSUB 7130:C=1:GOSUB 7260 10250 IF B$="" THEN 10220 10260 FQ=VAL(B$):IF FQ<1 OR FQ>HNUM THEN DSK$=DSK6$:RETURN 10270 FIL$="HELP"+MID$(STR$(FQ),2):NW=0:DSK$=DSK4$:GOSUB 7810:GOTO 10180 10310 IF NOT MSYS THEN O$="":GOTO 10360 10330 GOSUB 7130:A1$="Which SYSOP are you -> ":N=1:GOSUB 7130 10340 C=1:GOSUB 7260:IF B$="" THEN 10330 10350 O$=B$ 10360 CN$=N$:CO$=O$:GOSUB 7730:GOSUB 7770:INC=0:RETURN