3 REM $linesize: 132 88 DEFINT A-Z:CLS:GOSUB 60200:IF MC>0 THEN DEF SEG=MC::PO=(&H64+PEEK(&H58)+256*PEEK(&H59)+&HC):IF PEEK(PO)=&H1 OR &H2 THEN POKE(PO),&H9 90 CLOSE:CLEAR:DEFINT A-Z:DIM LG$(5):GOSUB 64000:WIDTH 80:SCREEN 0,0,0:KEY OFF:PA$=CHR$(19):BA$=CHR$(7):BK2$=CHR$(8):XA$=CHR$(19):XON$=CHR$(17):CLS:DEF FNTI!=CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60)+(VAL(MID$(TIME$,4,2))*60)+(VAL(MID$(TIME$,7,2))*1))) 92 DEF FNCD$(A1$)=CHR$(VAL(MID$(A1$,7,2)))+CHR$(VAL(MID$(A1$,1,2)))+CHR$(VAL(MID$(A1$,4,2))):DEF FNUD$(A1$)=RIGHT$(STR$(ASC(MID$(A1$,2))),2)+"/"+RIGHT$(STR$(ASC(MID$(A1$,3))),2)+"/"+RIGHT$(STR$(ASC(A1$)),2) 96 DEF FNDC$(A1$)=RIGHT$(A1$,2)+LEFT$(A1$,2)+MID$(A1$,4,2):DEF FNSS$(A1$)=LEFT$(A1$+TC$,INSTR(A1$+TC$,TC$)-1):DEF SEG=0:GOSUB 60200:A!=FRE("A"):TI$=TIME$:ON ERROR GOTO 13000:DEF SEG 115 CR$=CHR$(13):LF$=CHR$(10):ABT$=CHR$(11):VA$="CPC12.2D (compilable)":CA$="RBBS-PC.DEF":DIM BUL$(6),SA(12),MD(18),UA(12),FS(8) 118 OPEN "I",#1,CA$:INPUT #1,FA$,RA$,PB$,PC$,NA$,NB$,CB,AA,AB,TV!,ME,LA,UB$,XPR,BC,BA,PRT,CE,MF$,MG$,MH$,MI$,MJ$,CQ$,CQ,OA,UE,PL,LW,GA,WA,MK$:INPUT#1,MES$,MN$,CF$,CG$,UF$,LB$,WB$,ND$,DIR$,CP$,OB,SD,TX$,DA,FGR,BGR,BDR,RC$,CH$,OC$,OD$ 119 INPUT#1,HE1$,HE2$,HE3$,HE4$,HE5$,HE6$,HE7$,HE8$,BUL$(0),BUL$(1),BUL$(2),BUL$(3),BUL$(4),BUL$(5),BUL$(6),RD,BD:INPUT#1,MO,DB,SE,FB$,SF,KA$,VB,SA(1),SA(2),SA(3),SA(4),SA(5),SA(6),SA(7),SA(8),SA(9),SA(10),SA(11),SA(12),PD$,MP,CHS,UPS,MTERM,DAY 121 INPUT#1,MD(1),MD(2),MD(3),MD(4),MD(5),MD(6),MD(7),MD(8),MD(9),MD(10),MD(11),MD(12),MD(13),MD(14),MD(15),MD(16),MD(17),MD(18),FS(1),FS(2),FS(3),FS(4),FS(5),FS(6),FS(7),FS(8),UA(1),UA(2),UA(3),UA(4),UA(5),UA(6),UA(7),UA(8),UA(9),UA(10),UA(11),UA(12) 122 IF CE THEN MID$(VA$,10)="--(compiled) 123 PRINT VB$;VA$:PRINT"Free memory: ";FRE("A"):PRINT:PRINT"Enter:":FOR I=1 TO 11:INPUT#1,A$:PRINT A$:NEXT:A$="":FOR I=1 TO 10:KEY I,"" 125 NEXT:IF MC THEN GOSUB 60450:GOSUB 60310:GOSUB 60240 127 BK$=CHR$(8)+CHR$(32)+CHR$(8):BK1$=CHR$(29)+CHR$(32)+CHR$(29):MQ=72:TY!=3*60:TAA=120:IF CP$="COM2"THEN LSB=&H2F8:MSB=&H2F9:LCR=&H2FB:MCR=&H2FC:LSR=&H2FD:MSR=&H2FE ELSE LSB=&H3F8:MSB=&H3F9:LCR=&H3FB:MCR=&H3FC:LSR=&H3FD:MSR=&H3FE 130 DIM M(250,2),A$(30),B$(128):GOSUB 135:GOTO 175 135 CLOSE 2:LC=0:R=2:GOSUB 167:IF LOF(1)=0 THEN LSET R$=" 1 -1 0"+SPACE$(39)+"-1 0 0":PUT 1 ELSE GET 1 147 LE=VAL(LEFT$(R$,8)):AVA=VAL(MID$(R$,9,2)):AC=VAL(MID$(R$,52,2)):SG=VAL(MID$(R$,54,2)):LH=VAL(MID$(R$,56,2)) 150 GET 1,R:IF MID$(R$,116,1)=CHR$(226)THEN DD=-1 155 RR=VAL(MID$(R$,118)):IF DD THEN 165 ELSE IF RR<1 THEN RR=1:IF EOF(1)THEN FC=M(1,2):RETURN 160 LC=LC+1:M(LC,1)=R:M(LC,2)=VAL(MID$(R$,2,4)) 165 R=R+RR:DD=0:GOTO 150 167 CLOSE 1:OPEN "R",1,MES$ 170 FIELD 1,128 AS R$:RETURN 175 SOH$=CHR$(1):EOT$=CHR$(4):ACK$=CHR$(6):NAK$=CHR$(21):CAN$=CHR$(24):ESC$=CHR$(27):STP$=CHR$(0)+CHR$(112):NE=&H100:FD=0:TBA=NOT FD:BE=FD:EB=10:GOSUB 56000:CDX=LOF(2)/64 181 GET 2,CDX:IF LEFT$(CL$,13) = STRING$(13,CHR$(0)) THEN CDX=CDX-1 187 IF LH THEN GOSUB 480:LPRINT:LPRINT"RBBS-PC Version ";VA$;" up at "TIM$+TH$+DATE$:GOSUB 50500 200 IF INP(MSR)>127 THEN OPEN CP$+T5$ AS 3:GOSUB 44000:GOTO 440 ELSE OUT MCR,&H4:CLOSE 3:GOSUB 50500 201 OPEN CP$+TN$ AS #3:PRINT#3,"ATZ":GOSUB 50510:IF SD THEN MB$="M1" ELSE MB$="M0 220 IF CB >0 THEN PRINT#3,"ATS2=255Q1S0=255S10=20";MB$ ELSE PRINT#3,"ATS2=255Q1S10=20";MB$ 221 GOSUB 480:PRINT:PRINT"RBBS-PC ready for calls at "TIM$+TH$+DATE$:PRINT:PRINT"<< Screen clears to prevent display burn-in. >>":PRINT:IF NOT PRT THEN LOCATE,,0 235 TCA!=FNTI!:GOSUB 49000 239 RB!=0:IF CB>0 THEN RB!=FNTI!:COLOR 7,0,0 ELSE COLOR FGR,BGR,BDR 240 X=1:WHILE(INP(MSR)AND &H40)=0:X$=INKEY$:FK$=X$:GOSUB 60000 250 IF X$=CHR$(27) OR SG THEN 253 ELSE 256 253 TI!=FNTI!:GOSUB 14500:LJ=-1:IF KA$<>"NONE" THEN LOCATE 24,1:INPUT "Enter PASSWORD";Z$:GOSUB 5000:IF Z$ <> KA$ THEN 13549 255 LOCATE 24,1:PRINT "Sysop in.":BE=-1:GR=-1:CI$="LOCAL":UG=SE:GOTO 470 256 IF X$=STP$ THEN SYSTEM 260 IF RB!>0 THEN IF FNTI!-RB!>45 THEN RB!=0:RBC=0:IF(PRT AND CB)THEN PRINT"Ringback timeout 265 MMM!=FNTI!-TCA!:IF MMM!>TAA THEN LOCATE,,0:CLS:TCA!=FNTI! 270 WEND:IF CB=0 THEN 320 275 WHILE(INP(MSR)AND &H40):IF PRT THEN SOUND 3000,1:SOUND 4000,2:SOUND 32767,6 277 WEND:IF LOC(3)THEN X$=INPUT$(LOC(3),3) 280 PRINT#3,"ATS1? 290 INPUT#3,X$:IF LEN(X$)=0 THEN 290 ELSE IF RBC=0 THEN RBC=2 ELSE IF VAL(X$)127 THEN 333 331 IF FNTI!-TCC!>30 THEN 10595 ELSE GOTO 330 333 GOSUB 21280:GOSUB 50500:OUT LCR,&H3:BE=TBA:TCC!=FNTI! 335 IF INP(MSR)<128 THEN 10595 ELSE IF FNTI!-TCC!>30 THEN 10595 ELSE IF EOF(3)THEN 335 340 A=ASC(INPUT$(LOC(3),3)):IF A=13 THEN 350 ELSE IF A=141 THEN OUT LCR,&H1A:BE=FD:GOTO 350 345 SWAP Q,QQ:GOSUB 1654:OUT LCR,&H3:BE=TBA:IF FNTI!-TCC!>30 THEN 10595 ELSE 335 350 I=0:GOSUB 480:IF Q=&H60 THEN BPS=-3 ELSE BPS=-1 355 TI!=FNTI!:IF TI!>CTI!THEN GOSUB 42000:GOSUB 21280 360 UC=0:PRINT#3,LF$:PRINT#3,"CAN YOUR TERMINAL DISPLAY LOWER CASE";:GOSUB 1500:Z$=B$(1):GOSUB 5000:PRINT#3,TA$:IF BE THEN PE$="NO PARITY, 8 DATA BITS, 1 STOP BIT." ELSE PE$="EVEN PARITY, 7 DATA BITS, 1 STOP BIT. 365 IF BPS=-3 THEN BF$="1200 BAUD, " ELSE BF$="300 BAUD, 366 A$=VB$+VA$:GOSUB 1400:A$=LF$+"OPERATING AT "+BF$+PE$:CR=2:GOSUB 1400:IF NO THEN UC=-1 ELSE IF NOT YES THEN 360 369 F$=WB$:GR=0:IF BE AND GA THEN A$="Do you want graphics":GOSUB 1500:IF YES THEN GR=-1:GOSUB 43030 370 TV!=TV!*60:STI=OA:CR=0:GOSUB 6000:CR=2:STI=0:GOSUB 1400:TDA=0:TV!=TV!/60 400 A1$="What is your ":GOSUB 12500:IF TEX THEN I=1:GOTO 10620 440 IF FE$=PB$AND LK$=PC$THEN CI$="REMOTE":GOTO 470 445 IF INSTR(NAM$,"SYSOP") OR INSTR(NAM$,NA$+TB$+NB$) THEN I=1:GOTO 10620 455 FOR J=1 TO LEN(NAM$):X=ASC(MID$(NAM$,J,1)):IF(X<65 OR X>90)AND(X<>32 AND X<>39 AND X<>45 AND X<>46)THEN 400 465 NEXT:GOTO 500 470 FE$=NA$:LK$=NB$:NAM$="SYSOP":UG=SE:SH=-1:PRT=TBA:MQ=72:GOSUB 480:IF LJ THEN SG=FD:GOSUB 15010:GOTO 830 ELSE 830 480 TI$=TIME$:D$=LEFT$(DATE$,6)+RIGHT$(DATE$,2) 482 TIM$=TIME$:IF VAL(LEFT$(TIM$,2))=12 THEN MID$(TIM$,1,2)=RIGHT$(STR$(VAL(LEFT$(TIM$,2))),2):TIM$=LEFT$(TIM$,5)+" PM":RETURN 483 IF VAL(LEFT$(TIM$,2))>11 THEN MID$(TIM$,1,2)=RIGHT$(STR$(VAL(LEFT$(TIM$,2))-12),2):TIM$=LEFT$(TIM$,5)+" PM":RETURN ELSE TIM$=LEFT$(TIM$,5)+" AM":RETURN 500 GET 1,1:IF NAM$=MID$(R$,21,LEN(NAM$))THEN LL=-1:A$="Welcome back, "+FE$+".":GOSUB 1400 540 TEA$=NAM$:GOSUB 12600:IF NOT FG THEN 700 ELSE UG=CVI(SL$):IF UG=SE THEN GOSUB 1400:A$="You have SYSOP privileges":CR=2:GOSUB 1400 ELSE GOSUB 41070 645 NF=0:LM$=FNDC$(FNUD$(LND$)):IF MID$(LM$,3,1)=TB$ THEN MID$(LM$,3,1)="0 655 IF MID$(LM$,5,1)=TB$ THEN MID$(LM$,5,1)="0 660 GOTO 800 665 IF KEE$=PW$ THEN PF=0:RETURN 667 TDA=0 670 TDA=TDA+1:IF TDA>MR THEN PF=-1:RETURN 675 A$=P$+" (dots will echo)":GOSUB 45010:Z$=B$(1) 677 GOSUB 5000:Z$=Z$+SPACE$(15-LEN(Z$)):IF KEE$=Z$ THEN PF=0:RETURN 680 IF MES THEN A$="Sorry, wrong password":GOSUB 1400:GOTO 670 ELSE 670 700 NF=-1:GOSUB 12630:UG=DB: IF UG < MO THEN I=3:GOTO 10620 710 A1$=" are you calling from":GOSUB 12950:A$=NAM$+" from "+Z$:GOSUB 1400:LSET CS$=Z$:CI$=Z$+TC$:A$="Is this correct":GOSUB 1500:GOSUB 1400:IF NOT YES THEN 400 755 GOSUB 12800:A$="Type PASSWORD again for double check":GOSUB 45010:SWAP Z$,B$(1):GOSUB 5000:IF B$(1)<>Z$THEN A$=P$+"s don't match!":GOSUB 1400:GOTO 755 760 GOSUB 5000:LSET PW$=Z$:GOSUB 1400:A$=FE$+", your password is needed to logon again.":CR=2:GOSUB 1400:LSET N$=NAM$:TFA=UG:GOSUB 12900 800 HUG=UG:GOSUB 1400:A$="Logging "+NAM$+" to disk...":GOSUB 1400:TGA=CVI(MID$(OP$,1,2))+1:LO=CVI(MID$(OP$,3,2)):LF=CVI(MID$(OP$,5,2)):MQ=CVI(MID$(OP$,7,2)):BA=CVI(MID$(OP$,9,2)):XPR=CVI(MID$(OP$,11,2)):PL=ASC(MID$(OP$,13)) 802 IF D$<>LEFT$(TD$,8) THEN ET=0 ELSE ET=CVI(ET$) 805 DLD=CVI(UDL$):ULD=CVI(UUL$):IF LO>LE THEN LO=0 815 LSET OP$=MKI$(TGA)+MID$(OP$,3):LSET TD$=D$+TB$+TI$:PUT 2,UIX#:IF NOT NF THEN A$="You have signed on"+STR$(TGA)+" times.":CR=2:GOSUB 1400 817 IF UE THEN A$="You have downloaded"+STR$(DLD)+" files & uploaded"+STR$(ULD)+" files":CR=2:GOSUB 1400 825 JJ=INSTR(CI$,TC$):CI$=LEFT$(CI$,(JJ-1)) 830 IF UG<>DB THEN Z$=TA$:Z=0:GOSUB 5140:IF FG THEN TV!=TJA 835 IF LJ THEN 843:IF BE THEN PE$="N,8,1" ELSE PE$="E,7,1 837 Z$=NAM$+" on at "+D$+", "+TIM$+" from "+CI$+", "+BF$+PE$:NG$=Z$+SPACE$(128-LEN(Z$)) 841 IF LH THEN LPRINT TC$+Z$ 843 TV!=(TV!+DAY*ET)*60:IF TV!<0 THEN A$="Daily time limit exceeded! Try tomorrow.":GOSUB 1400:GOTO 10698 844 GET 1,1:CJ=VAL(MID$(R$,11,10))+1:IF NOT SH THEN MID$(R$,21,31)=NAM$+SPACE$(31-LEN(NAM$)):MID$(R$,11,10)=STR$(CJ):MID$(R$,58,17)=" 0 0 0 0 0 0 0":PUT 1,1:IF UG>=SE THEN SH=-1 845 IF LL THEN 948 850 GOSUB 950:IF BC<1 THEN A$="Sorry, "+FE$+TI1$:GOSUB 1400:GOTO 900 851 IF SH THEN 900 855 IF OB THEN A$=FE$+", there are "+STR$(BC)+" bulletins today. Skip them":GOSUB 1500:IF YES THEN 900 860 F$=BUL$(0):GOSUB 1790:STI=-1:GOSUB 9710:STI=0:CR=2:GOSUB 1400 900 A$=TA$:GOSUB 1400:A$="Checking message file...":CR=2:IF NOT LJ THEN GOSUB 1400 910 T=0:FOR R=1 TO LC:GET 1,M(R,1):IF INSTR(MID$(R$,37,31),NAM$)=0 THEN IF NOT SH THEN 929 922 IF NOT SH THEN IF T THEN 927 ELSE 925 923 IF INSTR(MID$(R$,37,31),NAM$)=0 AND INSTR(MID$(R$,37,31),NA$+TB$+NB$)=0 THEN 929 ELSE IF T THEN 927 925 A$="The following message(s) may be for you.":GOSUB 1400:A$=K1$:CR=2:GOSUB 1400:T=-1 927 A$=LEFT$(R$,5):CR=1:GOSUB 1400 929 NEXT:IF NOT T THEN A$="Sorry, "+FE$+", no mail for you today.":GOSUB 1400 930 IF NOT RD THEN A$=TA$:GOTO 948 931 T=0:FOR R=1 TO LC:GET 1,M(R,1):IF INSTR(MID$(R$,6,31),NAM$)=0 THEN IF NOT SH THEN 940 932 IF NOT SH THEN IF T THEN 938 ELSE 935 934 IF INSTR(MID$(R$,6,31),NAM$)=0 AND INSTR(MID$(R$,6,31),NA$+TB$+NB$)=0 THEN 940 ELSE IF T THEN 938 935 GOSUB 1400:A$="You have left these message(s).":GOSUB 1400:A$=K1$:CR=2:GOSUB 1400:T=-1 938 A$=LEFT$(R$,5):CR=1:GOSUB 1400 940 NEXT:IF T THEN GOSUB 1400:A$="Thanks, "+FE$+", for deleting any messages.":GOSUB 1400 948 CR=2:GOSUB 1400:A$="Entering message subsystem...":GOSUB 1400:GOSUB 950:GOTO 955 950 IF NOT PRT THEN RETURN 953 C.C=CSRLIN:C.L=POS(0):JJ=LEN(NAM$)+LEN(CI$)+LEN(FH$)+11 954 LOCATE 25,1:PRINT FH$+SPACE$(79-JJ)+NAM$+TB$+CI$+TB$+TI$;:LOCATE C.C,C.L:RETURN 955 GOSUB 4900:STI=-1:IF NF THEN F$=ND$:GOSUB 1790:GOSUB 1700:NF=FD 1200 AM$="M":GOSUB 49000:STI=-1:Q=0:GOSUB 1400:IF UG12 THEN GOSUB 1350:GOTO 1200 1274 IF UG < SA(FF) THEN VD$="Sysop "+Z$:GOSUB 1380:GOTO 1200 1276 ON FF GOSUB 10070,10090,10110,10280,10390,10490,10530,11000,9500,12000,10700,10930:GOTO 1200 1280 FF=INSTR("BCEFGHIKLOPQRSUWX?",Z$): IF FF=0 THEN GOSUB 1350:GOTO 1200 ELSE IF UGTY!THEN 10595 1530 Y$=INKEY$:FK$=Y$:GOSUB 60000 1531 IF Y$<>TA$ THEN 1545 1535 WEND:IF INP(MSR)<128 THEN 10595 1540 Y$=INPUT$(1,3):IF Y$=CHR$(127)THEN 1635 1545 IF Y$=BK2$ OR Y$=BA$ THEN 1635 1550 IF Y$CR$THEN 1525 1553 IF Y$="^" THEN 1525 1555 IF PRT THEN PRINT Y$; 1557 IF NOT SI THEN PRINT#3,Y$; ELSE PRINT#3,"."; 1560 IF Y$=CR$THEN 1570 1563 IF LEN(B$)=>254 THEN A$="Input too long!":GOSUB 1400:GOTO 1500 1565 B$=B$+Y$:GOTO 1525 1570 IF LF THEN PRINT#3,LF$; 1575 A=INSTR(B$,";"):IF A=0 THEN 1620 1580 B$(1)=LEFT$(B$,A-1):A=A+1 1585 B=INSTR(A,B$,";"):C=B-A:IF C<1 THEN EOL=-1:C=128 1595 BB$=MID$(B$,A,C):IF BB$<>TA$ THEN Q=Q+1:B$(Q)=BB$ 1605 IF NOT EOL AND Q<10 THEN A=B+1:GOTO 1585 1610 IF LEN(B$)>64 THEN A$="Try again, "+FE$+".":GOSUB 1400:GOTO 1500 ELSE 1625 1620 B$(1)=B$:Q=1:IF B$=TA$ THEN Q=0:RETURN 1625 SWAP Z$,B$:GOSUB 5000:SWAP Z$,B$:IF LEFT$(B$,1)="Y" THEN YES=-1 ELSE IF LEFT$(B$,1)="N" THEN NO=-1 1628 IF B$(Q)="NS" OR B$(Q)="ns" THEN NO=0:NH=-1:B$(Q)=TA$:IF Q>1 THEN Q=Q-1 1629 IF B$="RE" THEN RE=-1 ELSE IF B$="K" THEN KB=-1 1630 RETURN 1635 IF LEN(B$)=0 THEN 1525 1640 B$=LEFT$(B$,LEN(B$)-1):IF PRT THEN PRINT BK1$; 1650 PRINT#3,BK$;:GOTO 1525 1654 R1=INP(LCR):K2=INP(MSB):OUT MSB,0:OUT LCR,R1 OR 128:IF Q=384 THEN OUT LSB,&H80:OUT MSB,&H1:GOTO 1684 1662 IF Q=256 THEN OUT LSB,&H0:OUT MSB,&H1:GOTO 1684 1664 IF Q=96 THEN OUT LSB,&H60:OUT MSB,&H0 1684 OUT LCR,R1:OUT MSB,K2:RETURN 1700 F$=HE2$:GOTO 1790 1720 IF BC<1 THEN A$="Sorry, "+FE$+TI1$:GOTO 2210 1730 F$=BUL$(0):EC=0:GOSUB 1790:IF EC<>53 THEN GOSUB 9710 1735 RETURN 1740 F$=HE1$:GOTO 1790 1760 F$=WB$:GOTO 1790 1780 F$=HE8$ 1790 GOSUB 43030:GOSUB 6000:RETURN 1800 GOSUB 1400:A$="Comments are readable by Sysop only, Do you wish to leave a comment":GOSUB 1500:MQ=72:IF NOT YES THEN A$="No comment.":GOTO 2210 1840 T$="SYSOP":SUB$="COMMENT":SC=TBA:GOTO 2007 1900 IF LJ THEN RETURN 1910 GOSUB 50510:OUT MCR,INP(MCR) AND 254:GOSUB 50500:OUT MCR,INP(MCR) OR 1:RETURN 1940 CLOSE 2:OPEN "A",2,CG$:GOSUB 1400:A$="Thanks for the comments, "+FE$+" !":GOSUB 1400:GOSUB 482:PRINT#2,NAM$,D$,TIM$:FOR X=1 TO LI:PRINT#2,A$(X):NEXT:FOR X=1 TO 2:PRINT#2,CR$:NEXT:CLOSE 2:RETURN 2000 GOSUB 1400:IF LC=ME THEN A$="Too many active messages -- try tomorrow.":GOSUB 1400:GOTO 3650 2006 PAS$=TA$:SC=FD:IF NOT RE THEN T$=TA$ 2007 IF SC THEN F$="COMMENT" ELSE F$="MESSAGE 2008 Z$=MES$:GOSUB 52000:IF VAL(AD$)<2000 THEN A$="Not enough room for "+F$+"!":GOSUB 1400:GOTO 3650 2010 LI=0:L=0:X=0:FOR I=1 TO 30:A$(I)=TA$:NEXT:IF SC THEN 2100 2015 A$="Message will be # "+STR$(LE+1):GOSUB 1400:IF RE THEN 2050 2020 A$="To (C/R For All)":GOSUB 1500:IF LEN(B$(1))>30 THEN A$="30"+TM$:GOSUB 1400:GOTO 2020 2030 IF Q=0 THEN T$=TP$ ELSE Z$=B$(1):GOSUB 5000:T$=Z$ 2035 A$="Subject":GOSUB 1500:IF LEN(B$(1))>25 THEN A$="25"+TM$:GOSUB 1400:GOTO 2035 2045 IF Q=0 THEN 20095 ELSE Z$=B$(1):GOSUB 5000:SUB$=Z$ 2050 A$="Security ":IF XPR THEN 2060 2055 A$="Security < K)ill, P)assword, R)eceiver, N)one, H)elp > 2060 GOSUB 1500:IF Q=0 THEN 2050 ELSE Z$=LEFT$(B$(1),1):GOSUB 5000:ON INSTR("RKNPH?",Z$) GOTO 2075,2090,2100,2088,2070,2055:GOTO 2050 2070 F$=HE3$:GOSUB 1790:GOTO 2050 2075 IF T$=TP$ THEN A$="MESSAGE CANNOT BE PROTECTED":GOSUB 1400:GOTO 2050 2084 PAS$=TU$:GOTO 2100 2085 A$=P$:GOSUB 1500:IF Q=0 THEN 2085 ELSE IF LEN(B$(1))>L THEN A$=STR$(L)+" Chars. max.":GOSUB 1400:GOTO 2085 ELSE IF L=15 AND MID$(B$(1),1,1)="!" THEN A$=P$+" can't begin with '!'":GOSUB 1400:GOTO 2085 ELSE RETURN 2088 A$="Callers must KNOW PASSWORD TO READ message. Is this what you want":GOSUB 1500: IF NO THEN 2070 ELSE L=14:A1$="!":GOTO 2092 2090 L=15:A1$=" 2092 GOSUB 2085:Z$=B$(1):GOSUB 5000:PAS$=A1$+Z$ 2100 GOSUB 1400:IF NOT XPR THEN A$="To enter message, type in text.":GOSUB 1400:A$=" to end (19 lines max.).":GOSUB 1400 2120 GOSUB 3200 2125 LI=LI+1:A$=RIGHT$(STR$(LI),2)+": "+A$(LI):CR=1:GOSUB 1400:GOSUB 3700:IF A$(LI)=TA$ THEN LI=LI-1:GOTO 2300 2140 J=LI:GOSUB 2200:IF X THEN 2300 ELSE 2125 2200 X=0:IF J<17 OR SH THEN RETURN ELSE IF J=17 THEN A$="Two lines left..." ELSE IF J=18 THEN A$="Last line" ELSE A$="Message full.":X=-1 2210 GOSUB 1400:RETURN 2220 GOSUB 1400:GOTO 20095 2300 GOSUB 1400:IF NOT XPR THEN GOSUB 50400 2315 GOSUB 1400:A$="Subfunction ":GOSUB 1500:IF Q=0 THEN 2315 ELSE Z$=B$(1):GOSUB 5000 2325 IF Q>1 AND Z$<>"M"THEN L=VAL(B$(Q)):GOSUB 3320 2330 ON INSTR("ACDEILMS?",Z$) GOTO 2400,2340,2500,2600,2800,3000,3100,3400,2345:GOTO 2300 2340 GOSUB 3200:GOTO 2140 2345 F$=HE4$:GOSUB 1790:GOTO 2315 2400 GOSUB 1400:A$="Abort message":GOSUB 1500:IF NOT YES THEN 2300 2430 GOSUB 1400:A$="Aborted":GOSUB 1400:GOTO 3650 2500 GOSUB 1400:IF Q=1 THEN A$="Delete ":CR=1:GOSUB 1400:GOSUB 3300 2520 A$="Line #"+STR$(L):GOSUB 1400:A$=A$(L):CR=2:GOSUB 1400:A$="Delete this line":GOSUB 1500:IF NOT YES THEN A$="Line #"+STR$(L)+" NOT Deleted.":GOSUB 1400:GOTO 2300 2550 LI=LI-1:FOR X=L TO LI:A$(X)=A$(X+1):NEXT:A$(LI+1)=TA$:A$="Line #"+STR$(L)+" Deleted.":GOSUB 1400:GOTO 2300 2600 GOSUB 1400:IF Q=1 THEN GOSUB 3300 2620 A$="Line #"+STR$(L)+" is:":GOSUB 1400:A$=A$(L):CR=2:GOSUB 1400:A$="Enter or C/R for no change.":GOSUB 1400:GOSUB 1400:B$(2)=TA$:GOSUB 1500:IF Q=0 THEN 2300 2660 X=INSTR(1,A$(L),B$(1)):IF X=0 THEN 2710 2670 LB1=LEN(B$(1)):LB2=LEN(B$(2)):IF LB1=LB2 THEN MID$(A$(L),X)=B$(2):GOTO 2620 2690 C$=MID$(A$(L),X+LB1):CC$=LEFT$(A$(L),X-1):A$(L)=CC$+B$(2)+C$:GOTO 2620 2710 A$="String <"+B$(1)+"> not found in line"+STR$(L)+".":GOSUB 1400:GOTO 2300 2800 IF LI=>19 AND NOT SH THEN A$="Message full.":GOSUB 1400:GOTO 2920 2820 GOSUB 1400:IF Q=1 THEN A$="Before ":CR=1:GOSUB 1400:GOSUB 3300 2830 W=LI:K=LI-L:FOR X=L TO LI:B$(X+1-L)=A$(X):A$(X)=TA$:NEXT:LI=L 2840 A$=RIGHT$(STR$(LI),2)+": ":CR=1:GOSUB 1400:GOSUB 3700:IF A$(LI)=TA$ THEN 2920 2870 LI=LI+1:J=LI+K-1:GOSUB 2200:IF X THEN 2920 ELSE 2840 2920 FOR X=1 TO K+1:A$(LI+X-1)=B$(X):NEXT:LI=W+LI-L:GOTO 2300 3000 STI=-1:GOSUB 1400:IF Q=1 THEN L=1:A$="To: "+T$+" Re: "+SUB$:GOSUB 1400:GOSUB 3200 3020 FOR X=L TO LI:IF RET THEN 2300 ELSE A$=RIGHT$(STR$(X),2)+": "+A$(X) 3030 GOSUB 1400:NEXT:GOTO 2300 3100 GOSUB 1400:IF Q<>1 THEN B$(1)=B$(Q):GOTO 3130 3115 A$="Right-Margin is"+STR$(MQ):GOSUB 1400:A$="Set to (8,16,24,32,40,48,56,64,72)":GOSUB 1500 3130 X=VAL(B$(1)):IF X>0 AND X<81 AND X MOD 8=0 THEN 3150 3140 A$="Invalid - Margin remains "+STR$(MQ)+".":GOSUB 1400:IF MS THEN RETURN ELSE 2300 3150 MQ=VAL(B$(1)):A$="Margin now"+STR$(MQ)+".":GOSUB 1400:IF MS THEN RETURN ELSE 2300 3200 GOSUB 1400:A$=" ["+STRING$(MQ-2,45)+"]":GOTO 2210 3300 A$="Line #":GOSUB 1500:L=VAL(B$(1)) 3320 IF L=>1 AND L=
  • 127 THEN LSET R$=N$:PUT 1:N$=MID$(N$,129) 3630 NEXT:IF LEN(N$)>0 THEN LSET R$=N$:PUT 1 3640 GOSUB 1400 3650 IF RE THEN RETURN ELSE 20095 3700 RS$=A$(LI):COL=LEN(RS$):STI=0 3720 COL=COL+1 3730 IF LJ THEN X$=INPUT$(1):GOTO 3740 3732 THA!=FNTI!:WHILE EOF(3):MMM!=FNTI!-THA!:IF MMM!>TY!THEN 10595 3733 GOSUB 42000:X$=INKEY$:FK$=X$:GOSUB 60000 3734 IF LEN(X$)=1 THEN 3740 3736 WEND:X$=INPUT$(1,3):IF X$=LF$THEN 3730 3738 IF X$=CHR$(127)THEN 3870 3740 IF X$=BK2$ OR X$=BA$ THEN 3870 3750 A$=X$:CR=1:GOSUB 1400:IF X$=CR$THEN 3850 3770 IF COL>MQ-3 AND X$=TB$ THEN GOSUB 1400:GOTO 3850 3780 RS$=RS$+X$:IF COL1 THEN MM=VAL(B$(Q)):GOTO 3950 3930 A$="Msg # to Kill":GOSUB 1500:MM=VAL(B$(Q)):GOSUB 1400 3950 FOR QX=1 TO LC:IF M(QX,2)=MM AND MM>=1 THEN 3970 3955 NEXT:GOSUB 3965:GOTO 4040 3965 A$="There is no message # "+STR$(MM)+".":GOTO 2210 3970 GET 1,M(QX,1):R=VAL(MID$(R$,118)):IF SH THEN 4030 3980 Z=15:Z$=MID$(R$,101,15):GOSUB 8100:IF LEN(Z$)=0 THEN 4030 3990 IF Z$=TU$ THEN IF INSTR(R$,NAM$) THEN 4030 ELSE MES=-1:MR=0:GOSUB 680:GOTO 4040 4000 IF LEFT$(Z$,1)="!" THEN Z$=MID$(Z$,2) 4010 KEE$=Z$+SPACE$(15-LEN(Z$)):MR=1:MES=-1:GOSUB 667:IF PF THEN 4040 4030 LSET R$=LEFT$(R$,115)+CHR$(226)+MID$(R$,117):PUT 1,LOC(1):A$="Msg # "+STR$(MM)+" Killed.":GOSUB 1400 4040 IF KB THEN RETURN ELSE 20095 4100 GOSUB 1400:LF=NOT LF:A$="Line Feeds ":IF LF THEN A$=A$+"On" ELSE A$=A$+"Off 4130 GOTO 4300 4200 GOSUB 1400:BA=NOT BA:A$="Prompting Bell ":IF BA THEN A$=A$+"On" ELSE A$=A$+"Off 4230 GOTO 4300 4240 GOSUB 1400:XPR=NOT XPR:IF XPR THEN A$="Expert Mode" ELSE A$="Novice Mode 4300 GOSUB 1400:GOSUB 50500:RETURN 4320 QU=-1:RT=0:SU=0:GOTO 4350 4330 QU=0:RT=-1:SU=0:GOTO 4350 4340 QU=0:RT=0:SU=-1 4350 QAH=-RT-QU-SU*5:IF Q>2 AND VAL(B$(Q))=0 THEN Z$=B$(Q):Q=Q-1 ELSE Z$=TA$ 4360 GOSUB 5000:SC$=Z$:L=1:LI=Q:MU=0 4370 L=L+1:IF L<=LI THEN MM=VAL(B$(L)):GOTO 4415 4380 NH=0:MU=0:A$="Msg # ("+STR$(FC)+" to"+STR$(M(LC,2))+", *, elp)":IF XPR THEN 4400 4390 IF RT THEN A$=A$+" to Retrieve (C/R to end)" ELSE A$="Starting at "+A$ 4400 GOSUB 1500:IF Q=0 THEN 20095 ELSE IF INSTR("Hh",LEFT$(B$(1),1))THEN F$=HE7$:GOSUB 1790:RETURN ELSE L=0:LI=Q:GOTO 4370 4415 FOW=0:REV=0:IF B$(L)="*"THEN MM=LO+1:FOW=-1:GOTO 4430 4416 IF INSTR("Mm",B$(L)) THEN MU=-1:GOTO 4370 ELSE IF MM=0 THEN 20095 ELSE GOSUB 1400 4430 IF RIGHT$(B$(L),1)="+"THEN FOW=-1 ELSE IF RIGHT$(B$(L),1)="-"THEN REV=-1:GOTO 4490 4450 FOR R=1 TO LC:IF RT AND M(R,2)=MM THEN 4520 4470 IF((RT AND FOW)OR QU OR SU)AND M(R,2)=>MM THEN 4520 4480 NEXT:GOTO 4515 4490 FOR R=LC TO 1 STEP-1:IF M(R,2)<=MM THEN 4540 4510 NEXT 4515 GOSUB 3965:GOTO 4370 4520 QQQ=R:IF RT AND NOT FOW THEN 4560 4530 QQ=R:QQQ=LC:QA=1:GOTO 4550 4540 QQ=R:QQQ=1:QA=-1 4550 FOR R=QQ TO QQQ STEP QA 4560 GET 1,M(R,1):PF=0:UH=0:Z$=MID$(R$,101,15):IF INSTR(R$,NAM$)>0 THEN UH=-1 4561 IF NOT SH THEN IF INSTR(R$,TU$)>0 AND NOT UH THEN PF=-1:IF FOW OR REV THEN 4635 4562 MM=VAL(MID$(R$,2,4)):IF MU AND NOT UH THEN 4625 4580 IF INSTR(R$,SC$)=0 THEN 4635 4581 IF MID$(R$,116,1)=CHR$(226) THEN 4625 4582 PG=0:IF MID$(Z$,1,1)="!" THEN IF NOT SH THEN PG=-1:KEE$=MID$(Z$,2)+" ":MR=0:GOSUB 665 4584 IF PF AND (QU OR (SU AND NOT PG)) THEN 4635 4585 IF PF THEN IF PG THEN SJ$="" ELSE SJ$="" ELSE SJ$=MID$(R$,76,25) 4590 IF QU THEN Z$=LEFT$(R$,5)+TB$+SJ$:Z=31:GOSUB 8100:A$=Z$:GOSUB 1400:GOTO 4630 4600 GOSUB 8000:IF SU OR RET THEN 4630 ELSE IF M(R,2)>LO THEN LO=M(R,2) 4610 IF NOT PF THEN 4613 ELSE IF PG THEN MR=2:GOSUB 667 4611 IF PF THEN GOSUB 4670:GOSUB 1400:GOTO 4625 4613 GOSUB 9000:GOSUB 1400:IF Q AND PL<>0 THEN 62500 4625 IF NOT FOW AND NOT REV THEN 4370 4630 IF PL=0 THEN 4631 ELSE Q=Q+QAH:IF QAA AND TIATA$ THEN 4800 4795 WEND 4797 A$=INPUT$(1,3):IF A$=BK2$ OR A$=BA$ THEN 4805 ELSE IF A$=CR$AND LF THEN PRINT#3,LF$; 4800 CR=1:GOSUB 1400:GOTO 4775 4805 IF POS(0)>1 THEN PRINT BK1$;:PRINT#3,BK$; 4810 GOTO 4775 4820 IF AM$="U" THEN RETURN 1330 ELSE IF AM$="F" THEN RETURN 20020 ELSE GOTO 20095 4900 GOSUB 1400:A$="RBBS-PC Version "+VA$:GOSUB 1400:A$="You are caller # ->"+STR$(CJ):GOSUB 1400:A$="# of Active msgs ->"+STR$(LC):GOSUB 1400:IF LO>0 THEN A$="Last msg you read ->"+STR$(LO):GOSUB 1400 4950 A$="Next msg # will be->"+STR$(LE+1):GOTO 2210 5000 FOR Z=1 TO LEN(Z$):MID$(Z$,Z,1)=CHR$(ASC(MID$(Z$,Z,1))+32*(ASC(MID$(Z$,Z,1))>96)):NEXT:RETURN 5100 Z1$=TA$:FOR Z=1 TO LEN(Z$):IF ASC(MID$(Z$,Z,1))<65 OR ASC(MID$(Z$,Z,1))>90 THEN 5105 ELSE Z1$=Z1$+MID$(Z$,Z,1) 5105 NEXT:Z$=Z1$:RETURN 5110 A$="Enter a new password":GOSUB 45010:IF Q=0 THEN RETURN ELSE IF LEN(B$(1))>15 THEN 5110 ELSE Z$=B$(1):GOSUB 5000 5120 A$="Reenter new password":GOSUB 45010:IF Q=0 THEN RETURN ELSE SWAP Z$,B$(1):GOSUB 5000:IF Z$<>B$(1)THEN A$=P$+"s don't match.":GOTO 2210 5125 IF MP AND NCH>MP AND NOT SH THEN A$="No changes permitted" ELSE Z=1:GOSUB 5140:IF NOT FG THEN 5130 ELSE A$="Temporary change":PW$=TPW$:TV!=TJA*60:UG=TFA:GOSUB 41070:GOSUB 41050:IF UG15 THEN 5150 ELSE TPW$=TPW$+SPACE$(15-LEN(TPW$)):IF Z$<>TPW$ THEN 5150 ELSE IF Z THEN FG=-1 ELSE IF UG=TFA THEN FG=-1 ELSE 5150 5160 RETURN 5200 IF Q>1 THEN 5230 5220 A$="Page length is"+STR$(PL)+". Enter new length (0=continuous)":GOSUB 1500:IF Q=0 THEN 1200 5230 A=VAL(B$(Q)):IF A<0 OR A>255 THEN 5220 ELSE PL=A:GOTO 1200 5500 IF BPS=-3 THEN A$="Sorry, 1200 baud connect cannot change speed.":GOTO 2210 5507 A$=T1$:GOSUB 1500:IF NOT YES THEN RETURN 5510 A$=T1$+" and enter until I respond...":GOSUB 1400:FOR I=1 TO 3:GOSUB 50510:NEXT:C=0:SWAP Q,NE:GOSUB 1654:SWAP Q,NE 5530 C=C+1:GOSUB 42000:IF C=20 THEN 10595 ELSE GOSUB 50500 5535 IF NOT EOF(3)THEN IF ASC(INPUT$(1,3))=13 THEN 5540 5537 GOTO 5530 5538 GOSUB 56000:LSET CL$=Z$:CDX=CDX+1:PUT 2,CDX:IF LH THEN LPRINT Z$ 5539 RETURN 5540 Z$=T2$+T1$+" completed.":GOSUB 5538:A$=Z$:GOSUB 1400:BPS=-2:RETURN 5600 GOSUB 41000:IF NH THEN RETURN ELSE A$="More (Y),N,NS":GOSUB 1500:RETURN 6000 IF STI THEN GOSUB 1400:A$=TJ$:CR=2:GOSUB 1400 6020 CLOSE 2:OPEN "I",2,F$:Q=0:GOTO 6040 6030 Q=-1 6040 IF EOF(2)OR(INP(MSR)<128 AND NOT LJ)THEN 6060 6045 IF PL AND Q>=0 THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:IF NO THEN 6060 ELSE Q=0 6050 LINE INPUT #2,A$:A$=A$+NUL$:GOSUB 1400:IF NOT RET THEN 6040 6060 Q=0:CLOSE 2:IF NOT LJ THEN GOSUB 42000 6070 RETURN 6080 A$="Please tell the SYSOP file <"+F$+"> is missing!":GOTO 2210 7000 A$="Scanning "+MID$(F$,3):GOSUB 1400:NJ=-1:CLOSE 2:OPEN "I",2,F$:Q=0 7040 IF EOF(2)OR(INP(MSR)<128 AND NOT LJ)THEN 7200 7045 IF PL AND Q>=0 THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:IF NO THEN 7200 ELSE Q=0 7050 LINE INPUT #2,A$:A$=A$+NUL$:IF LEN(A$)<2 THEN 7100 7057 IF INSTR(A$,"--") THEN 7100 7060 A=INSTR(9,MID$(A$,1,32),"/"):IF A>0 THEN 7070 7065 A=INSTR(9,MID$(A$,1,32),"-"):IF A=0 THEN 7100 7070 A=A-2:IF A>0 THEN PAD$=FNDC$(MID$(A$,A,8)) ELSE Q=Q-1:GOTO 7040 7075 IF MID$(PAD$,3,1)=TB$ THEN MID$(PAD$,3,1)="0 7085 IF MID$(PAD$,5,1)=TB$ THEN MID$(PAD$,5,1)="0 7089 IF PAD$=>LM$ AND NJ THEN NJ=0:CLOSE 2:OPEN "I",2,F$:Q=0:GOTO 7040 7090 IF PAD$=>LM$ THEN 7100 ELSE Q=Q-1:GOTO 7040 7100 IF NJ THEN 7040 7101 GOSUB 1400:IF NOT RET THEN 7040 ELSE 7200 7200 A$=TA$:Q=0:CLOSE 2:IF NOT LJ THEN GOSUB 42000 7210 RETURN 8000 GOSUB 1400:IF RET THEN RETURN 8020 IF MID$(R$,37,3)=TP$ THEN T$=TP$:GOTO 8040 8030 Z=22:Z$=MID$(R$,37,Z):GOSUB 8100:T$=Z$ 8040 Z=25:Z$=MID$(R$,76,Z):GOSUB 8100:SUB$=Z$:IF PF THEN SUB$=SJ$ 8050 Z=31:Z$=MID$(R$,6,Z):GOSUB 8100:FI$=Z$:A$="Msg # "+LEFT$(R$,5)+" Dated "+MID$(R$,68,8)+TB$+MID$(R$,59,8):GOSUB 1400:IF NOT RET THEN A$="From: "+FI$ 8070 GOSUB 1400:IF NOT RET THEN A$=" To: "+T$:GOSUB 1400:A$=" Re: "+SUB$:GOSUB 1400 8080 RETURN 8100 Z=LEN(Z$):FOR I=1 TO LEN(Z$):IF MID$(Z$,Z,1)<>TB$ THEN 8110 8105 Z=Z-1:NEXT 8110 Z$=MID$(Z$,1,Z):RETURN 9000 GOSUB 1400:Q=4:FOR X=2 TO VAL(MID$(R$,118)):CR=1:GOSUB 1400:EOL=0:J=1:GET 1 9050 B=INSTR(J,R$,CHR$(227)):IF RET THEN RETURN 9060 C=B-J:IF C<1 THEN C=128:EOL=-1 9070 A$=MID$(R$,J,C):IF EOL THEN 9090 9075 GOSUB 1400:J=B+1:IF PL THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:Q=0:IF NO THEN RETURN 9085 GOTO 9050 9090 NEXT:A$=TA$:RETURN 9100 GOSUB 1400:H=VAL(LEFT$(TI$,2)):M=VAL(MID$(TI$,4,2)):S=VAL(MID$(TI$,7,2)):HH=VAL(LEFT$(TIME$,2)):MM=VAL(MID$(TIME$,4,2)):SS=VAL(MID$(TIME$,7,2)):IF S=0 THEN A$=STR$(HHH)+" Hours":CR=1:GOSUB 1400 9200 A$=STR$(MMM)+" Min. and"+STR$(SSS)+" Sec.":GOTO 2210 9300 NK=NOT NK:A$=" ":IF NK THEN NUL$=CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0):A$=A$+"on" ELSE NUL$="":A$=A$+"off" 9320 GOTO 2210 9400 CLOSE 2:OPEN "R",2,UF$,128:FIELD 2,31 AS N$,15 AS PW$,2 AS SL$,14 AS OP$,24 AS CS$,19 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$,2 AS ET$:RETURN 9500 AVA=NOT AVA:IF PRT THEN GOSUB 49000 9530 GET 1,1:MID$(R$,9,2)=STR$(AVA):PUT 1,1:RETURN 9710 NH=0:GOSUB 1400:A$="Bulletin # <1 through"+STR$(BC)+", L)ist or C/R to end>":GOSUB 1500:IF Q=0 THEN RETURN 9711 Z$=B$(1):GOSUB 5000:FF=INSTR("L123456",Z$):IF FF=0 THEN 9710 9745 F$=BUL$(FF-1):GOSUB 1790:GOTO 9710 10070 F$=CG$:GOSUB 6000:RETURN 10090 A$=CR$+"List - sers, ecent callers, C/R to return":CR=2:GOSUB 1500:IF Q=0 THEN RETURN ELSE Z$=B$(1):GOSUB 5000:ON INSTR("UR",Z$)+1 GOTO 10090,10096,10100 10096 GOSUB 9400:STI=-1:Q=0:FOR I=1 TO (INT(LOF(2)/128)):GET 2,I:A$=LEFT$(N$,20)+CS$+MA$+TD$:GOSUB 1400:IF RET THEN RETURN 10098 IF PL AND Q>=0 THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:IF NO THEN RETURN ELSE Q=0 10099 NEXT:STI=0:RETURN 10100 F$=CF$:GOSUB 57000:RETURN 10110 A$="Pack MESSAGES file":GOSUB 1500:IF NO THEN 20095 10112 OK=0:NAME MN$ AS MN$ 10113 IF NOT OK THEN 10120 10115 KILL MN$ 10120 CLOSE 1,2:NAME MES$ AS MN$:Q=0:OPEN "R",1,MN$:GOSUB 170:OPEN "R",2,MES$:FIELD 2,128 AS RR$:GET 1:GOTO 10240 10150 GET 1 10160 IF INSTR(R$,CHR$(225)) THEN 10220 10170 IF INSTR(R$,CHR$(227)) THEN 10240 10180 IF INSTR(R$,CHR$(226)) THEN 10250 10185 IF NOT EOF(1)THEN 10150 10190 GOSUB 1400:A$="# of Msgs Purged :"+STR$(Q):GOSUB 1400:A$="# of Bytes Purged:"+STR$(CSNG(LOC(1)*128)-CSNG(LOC(2)*128)):GOSUB 1400 10210 A$="Re-Loading Msg File...":GOSUB 1400:GOSUB 135:GOTO 20095 10220 A$="Msg #"+LEFT$(R$,5)+TF$:GOSUB 1400 10240 LSET RR$=R$:PUT 2:GOTO 10150 10250 Q=Q+1:A$="Msg #"+LEFT$(R$,5)+" purged...":GOSUB 1400:GET 1,LOC(1)+VAL(MID$(R$,118)):GOTO 10160 10280 A$="Renumber starting with OLD msg #":GOSUB 1500:MM=VAL(B$(1)):IF Q=0 OR MM<1 THEN 20095 10300 A$="Start with NEW #":GOSUB 1500:Y=VAL(B$(1)):IF Q=0 THEN 10280 10310 FOR Q=1 TO LC:IF M(Q,2)=MM THEN R=M(Q,1):GOTO 10340 10330 NEXT:A$="No Msg #"+STR$(MM):GOTO 2220 10340 GET 1,R:RR=VAL(MID$(R$,118)):IF RR<1 THEN GET 1,1:Y=LC:LSET R$=STR$(Y+1)+SPACE$(8-LEN(STR$(Y)))+MID$(R$,9):PUT 1,1:GOTO 10210 10360 LSET R$=STR$(Y)+SPACE$(5-LEN(STR$(Y)))+MID$(R$,6):IF MID$(R$,101,6)=TU$ THEN MID$(R$,1,1)="*" 10370 PUT 1,LOC(1):Y=Y+1:R=R+RR:GOTO 10340 10390 A$="Msg # to Recover":GOSUB 1500:MM=VAL(B$(1)):IF MM<1 THEN 1450 10410 R=2:GOSUB 1400 10420 GET 1,R:RR=VAL(MID$(R$,118)):IF RR<1 THEN A$="No Msg #"+STR$(MM):GOTO 2210 10440 IF VAL(MID$(R$,2,4))<>MM THEN R=R+RR:GOTO 10420 10450 IF INSTR(R$,CHR$(226))<>0 THEN LSET R$=LEFT$(R$,115)+CHR$(225)+MID$(R$,117):PUT 1,LOC(1):A$="Msg #"+STR$(MM)+" is restored.":GOSUB 1400:GOTO 10210 10480 A$="Msg #"+STR$(MM)+" is not Dead.":GOTO 2210 10490 R=2 10510 GET 1,R:RR=VAL(MID$(R$,118)):IF RR<1 THEN RETURN 10520 A$=R$:GOSUB 1400:R=R+RR:GOTO 10510 10530 A$="Delete all comments":GOSUB 1500:IF YES THEN CLOSE 2:OPEN "O",2,CG$:CLOSE 2 10550 GOTO 20095 10555 IF KG THEN RETURN 10560 GOSUB 9100:IF HHH>0 THEN CLOSE 2:OPEN "A",2,LB$:WRITE#2,NAM$,D$,HHH,MMM:CLOSE 2 10590 A$="Thanks for calling, "+FE$+"!":GOSUB 1400 10595 IF CINT(UIX#)<1 THEN CLS:GOTO 13540 10600 SH=0:GOSUB 9400:GET 2,UIX#:LSET OP$=MKI$(TGA)+MKI$(LO)+MKI$(LF)+MKI$(MQ)+MKI$(BA)+MKI$(XPR)+CHR$(PL)+STRING$(1,0):IF LD THEN LSET LND$=FNCD$(D$) 10605 LSET UDL$=MKI$(DLD):LSET UUL$=MKI$(ULD):GOSUB 41010:LSET ET$=MKI$(ET+(TV!/60)-TR!):PUT 2,UIX#:GOTO 13540 10620 Z$=SPACE$(5)+LG$(I):GOSUB 5538:Z$=NAM$+" on at "+D$+", "+TIM$+"***** LOGON DENIED *****"+", "+BF$+PE$:NG$=Z$+SPACE$(128-LEN(Z$)):IF LH THEN LPRINT Z$ 10698 GOSUB 1400:A$="You are denied access.":CR=2:GOSUB 1400:GOTO 13540 10700 GOSUB 1400:A$="Enter filespec(s) as d:filespec.ext ":GOSUB 1500:GOSUB 5000:IF B$(1)=TA$ THEN 1200 ELSE Z$=B$(1) 10715 A$="Reading directory...":GOSUB 1400:G=0 10720 CLS:FILES B$(J):LP=CSRLIN:IF CE THEN W=13:P=1 ELSE W=18:P=2 10725 LOCATE P,1,1:FOR I=P TO LP:FOR B=1 TO 66 STEP W:G=G+1:B$(G)=TA$:FOR JJ=0 TO 11:H=SCREEN(I,(B+JJ)):B$(G)=B$(G)+CHR$(H):NEXT:IF INSTR(B$(G),".")>0 THEN 10840 10733 IF LN AND OC$="YES" AND B$(G) = DIR$+SPACE$(12-LEN(DIR$)) THEN G=G-1:GOTO 10840 10737 IF LN AND OD$="YES" AND B$(G) = UB$+SPACE$(12-LEN(UB$)) THEN G=G-1:GOTO 10840 10740 IF LEFT$(B$(G),1)=TB$ THEN G=G-1:GOTO 10845 10840 NEXT:NEXT 10845 IF LN THEN RETURN 10850 CLS:GOSUB 1400:A$="Sorting filenames...":GOSUB 1400:FOR X=1 TO G-1:FOR Y=X+1 TO G:IF B$(Y)32 THEN W$=W$+L$ 10920 NEXT:B$(I)=W$:A$=B$(I):GOSUB 1400:W$=TA$:NEXT:FOR I=1 TO 128:B$(I)=TA$:NEXT:GOTO 1200 10925 MS=-1:GOSUB 3100:MS=0:RETURN 10930 IF DA<2 THEN A$="Unsupported by current level of DOS.":GOTO 1200 10932 IF LJ THEN A$="Only for remote SYSOP's":GOTO 1200 10934 CLOSE 2:OPEN "O",2,CH$:PRINT#2,"ECHO OFF":PRINT#2,"CTTY "+CP$:PRINT#2,"ECHO RBBS-PC "+VA$:PRINT#2,"ECHO SYSOP in Remote Console Mode at "+TIME$+TH$+DATE$:PRINT#2,"COMMAND ":PRINT#2,"CTTY CON":PRINT#2,RC$:GOSUB 56000 10950 GOSUB 480:LSET CL$=" Exited to DOS 2.0 at "+TIM$:IF LH THEN LPRINT CL$ 10960 GOTO 10992 10970 IF NOT BE THEN A$="Windows require N,8,1 for proper operation.":GOTO 2220 10972 IF NOT WA THEN A$="All RBBS-PC windows are closed.":GOSUB 1400:GOTO 1200 10974 F$=MJ$:GOSUB 43030:GOSUB 45000:A$="Which window would you like opened? (C/R to end)":GOSUB 1500:Z$=B$(1):GOSUB 5000:IF B$(1)=""THEN 1200 10976 CLOSE 2:OPEN "I",2,F$ 10978 IF EOF(2)THEN A$="There is no "+Z$+" window!.":GOSUB 1400:GOTO 1200 10980 IF INP(MSR)<128 AND NOT LJ THEN 10595 10982 LINE INPUT#2,A$:IF LEN(A$)":GOTO 11100 11020 A$=A$+"Pw="+PW$+" Times on="+STR$(CVI(MID$(OP$,1,2))) 11025 IF QQ THEN LPRINT A$ 11027 GOSUB 1400:RH=RET:IF OF>=SE THEN A$=" (SYSOP) " ELSE A$=" " 11030 A$=A$+TD$+TB$+CS$+MA$ 11100 IF QQ THEN LPRINT A$ 11101 GOSUB 1400:RH=RET:A$=" DOWNLOADS="+STR$(CVI(UDL$)):A$=A$+SPACE$(30-LEN(A$))+"UPLOADS="+STR$(CVI(UUL$)):A$=A$+SPACE$(60-LEN(A$))+"TIME USED="+STR$(CVI(ET$))+" Min.":IF QQ THEN LPRINT A$ 11105 GOSUB 1400:IF STI THEN 11300 11110 A$="D)elete, F)ind, M)enu, N)ew pswrd, P)rint, Q)uit, S)ecurity, #)user":GOSUB 1500:IF Q=0 THEN 11310 11115 Z$=LEFT$(B$(1),1):GOSUB 5000:X=INSTR("DNPQFSM",Z$):ON X GOTO 11130,11160,11220,11320,11340,11390,11330 11125 Z=VAL(B$):XY#=LOF(2)/128:IF Z<1 OR Z>XY#THEN 11310 ELSE 11010 11130 LSET N$=STRING$(31,0):GOTO 11290 11160 GOSUB 12800:GOTO 11290 11220 QQ=NOT QQ:GOTO 11015 11290 PUT 2,LOC(2):GOTO 11015 11300 IF RH THEN 11330 11310 NEXT 11320 CLOSE 2:GOTO 20095 11330 CLOSE 2:GOTO 11000 11340 GOSUB 1400:A$="Enter full name to find":GOSUB 1500:Z$=B$(1):GOSUB 5000:TEA$=Z$:GOSUB 12600:IF FG THEN 11015 11380 A$=TEA$+" not found.":CR=2:GOSUB 1400:GOTO 11015 11390 GOSUB 11395:LSET SL$=MKI$(OF):GOTO 11290 11395 A$="Enter security level":GOSUB 1500:Z$=B$(1):GOSUB 5000:OF=VAL(Z$):RETURN 12000 A$="Pack USERS file":GOSUB 1500:IF NO THEN 20095 12005 OK=0:UI$=UF$+".BAK":NOW=VAL(LEFT$(DATE$,2)):NAME UI$ AS UI$ 12010 IF NOT OK THEN 12030 12020 KILL UI$ 12030 NAME UF$ AS UI$:Q=0:CLOSE 1:OPEN "R",1,UI$,128:FIELD 1,31 AS O.N$,15 AS OG$,2 AS OH$,14 AS OI$,24 AS OJ$,19 AS OL$,14 AS OM$,3 AS OO$,2 AS OQ$,2 AS OS$,2 AS OT$:GOSUB 9400:A!=LOF(1)/128:FOR J=1 TO A!:GET 1,J:IF ASC(O.N$)=0 THEN 12220 12080 OF=CVI(OH$):OU=VAL(LEFT$(OM$,2)):LQ=NOW-OU:IF LQ<0 THEN LQ=LQ+12 12085 IF OF<=MO THEN 12200 12090 IF LQ>LA THEN 12220 12200 A$=STR$(LOC(1))+": "+O.N$+TF$:GOSUB 1400:LSET N$=O.N$:LSET PW$=OG$:LSET SL$=OH$:LSET OP$=OI$:LSET CS$=OJ$:LSET MA$=OL$:LSET TD$=OM$:LSET LND$=OO$:LSET UDL$=OQ$:LSET UUL$=OS$:LSET ET$=OT$ 12210 PUT 2:GOTO 12230 12220 Q=Q+1:A$=STR$(LOC(1))+": "+O.N$+" purged...":GOSUB 1400 12230 NEXT:GOSUB 1400:A$="# users purged:"+STR$(Q):GOSUB 1400:A$="Reloading files...":GOSUB 1400:CLOSE 1,2:GOSUB 135:GOSUB 9400:GOTO 20095 12300 A1$=TA$:TDA=0:T6$=FE$:T7$=LK$:T8$=NAM$:GOSUB 12500:TEA$=NAM$:GOSUB 12600:GOSUB 12630:IF FG THEN PRINT "User already exists...":GOTO 12320 12310 GOSUB 12800:GOSUB 11395:TFA=OF:GOSUB 12900:LSET TD$=D$+TB$+TI$:GOSUB 12950:LSET CS$=Z$:LSET ET$=MKI$(0) 12320 PUT 2,UIX#:UIX#=0:FE$=T6$:LK$=T7$:NAM$=T8$:GOTO 11000 12500 IF TDA>5 THEN TEX=-1:RETURN 12510 TDA=TDA+1:GOSUB 1400:A$=A1$+"FIRST Name":GOSUB 1500:IF Q=0 THEN 12500 ELSE Z$=B$(1):GOSUB 5000:GOSUB 5100:FE$=FNSS$(Z$):IF Q=1 THEN 12530 12520 Z$=B$(2):GOTO 12540 12530 A$=A1$+"LAST Name":GOSUB 1500:Z$=B$(1) 12540 GOSUB 5000:GOSUB 5100:LK$=FNSS$(Z$):IF LEN(FE$)<2 OR LEN(LK$)<2 OR (LEN(FE$)+LEN(LK$))>30 THEN 12500 12550 NAM$=MID$(FE$+TB$+LK$,1,31):RETURN 12600 A$="Checking User File...":CR=2:GOSUB 1400:GOSUB 9400:X$=TEA$+SPACE$(31-LEN(TEA$)):UIX#=0 12610 GET 2:IF EOF(2) THEN FG=0:RETURN ELSE IF ASC(N$)=0 THEN UIX#=LOC(2):GOTO 12610 12620 IF X$<>N$ THEN 12610 ELSE FG=-1:RETURN 12630 IF UIX# THEN GET 2,UIX# ELSE UIX#=LOC(2) 12631 RETURN 12800 A$="For future calls, set your PASSWORD (not IBMPC)":GOSUB 1500:IF Q=0 THEN 12800 ELSE IF LEN(B$(1))>15 THEN A$="15"+TM$:GOSUB 1400:GOTO 12800 ELSE Z$=B$(1):GOSUB 5000:LSET PW$ = Z$:RETURN 12900 LSET N$=NAM$:LSET OP$=MKI$(0)+MKI$(0)+MKI$(-1)+MKI$(64)+STRING$(4,0)+CHR$(PL)+STRING$(1,0):LSET UDL$=MKI$(0):LSET UUL$=MKI$(0):LSET SL$=MKI$(TFA):LSET ET$=MKI$(0):RETURN 12950 A$="Type of system (C/R if IBMPC)"+A1$:GOSUB 1500:IF Q=0 THEN LSET MA$="IBMPC" ELSE LSET MA$=B$(1) 12960 A$="CITY and STATE"+A1$:GOSUB 1500:IF Q=0 THEN 12960 ELSE Z$=B$(1):GOSUB 5000:RETURN 13000 IF ERR=7 THEN 13650 13010 IF ERL=181 AND ERR=63 THEN RESUME 187 13020 IF ERL=187 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LH=FD:RESUME 187 13030 IF ERL=841 THEN LH=FD:RESUME 841 13033 IF ERL=825 AND ERR=5 THEN RESUME 830 13035 IF ERL=954 AND ERR=5 THEN JJ=JJ-LEN(FH$):FH$=TA$:RESUME 954 13040 IF ERL=4744 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LH=FD:RESUME 4744 13045 IF ERL=5130 AND ERR=63 THEN RESUME 5160 13047 IF ERL=5150 AND ERR=62 THEN RESUME 5160 13050 IF ERL=5538 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LH=FD:RESUME 5539 13060 IF ERL=11025 THEN QQ=FD:RESUME 11025 13070 IF ERL=11100 THEN QQ=FD:RESUME 11100 13080 IF ERL=13110 THEN LH=FD:RESUME 13110 13085 IF ERL=20231 THEN LH=FD:RESUME 20233 13087 IF ERL=20242 AND ERR=62 THEN RESUME 20247 13090 IF ERR=58 THEN 13130 13100 IF(ERR=EC AND(FNTI!-TKA!<5))THEN EA=EA+1:IF EA>EB THEN 50000 13110 IF(ERR<>53 AND ERR<>57 AND ERR<> 61 AND ERR<> 64 AND ERR<> 69 AND LH)THEN LPRINT TK$;ERR;" in line ";ERL" occurred at "TIME$+TH$+DATE$ 13115 IF (ERR<>53 AND ERR<>57 AND ERR<>61 AND ERR<>64 AND ERR<>69) THEN A$=TK$+STR$(ERR)+" line "+STR$(ERL)+" at "+TIME$+TH$+DATE$:GOSUB 13670 13120 EC=ERR:IF FNTI!-TKA!>5 THEN EA=0 ELSE TKA!=FNTI! 13130 IF ERL=118 AND ERR=53 THEN 13550 13135 IF ERL=121 AND ERR=62 THEN 13550 13140 IF ERL=220 THEN RESUME 220 13150 IF(ERL=340 AND NOT BE)THEN OUT LCR,&H3:RESUME 335 13160 IF ERL=340 THEN RESUME 345 13170 IF ERL<1200 THEN RESUME 10595 13180 IF ERL=1420 AND ERR=57 THEN R1=INP(LSR):RESUME 1425 13190 IF ERL=1540 OR ERL=3736 OR ERL=20840 OR ERL=21280 OR ERL=21360 OR ERL=21420 THEN GOSUB 50500:IF INP(MSR)<128 THEN RESUME 10595 13200 IF ERL=1540 THEN RESUME 1540 13210 IF ERL=3530 THEN RESUME 3550 13220 IF ERL=3736 THEN RESUME 3736 13230 IF ERL=4797 THEN GOSUB 50500:GOSUB 13670:IF INP(MSR)<128 THEN RESUME 10595 ELSE RESUME 4797 13235 IF ERL=5140 AND ERR=53 THEN Z$=SPACE$(5)+"FILE <"+PD$+"> missing!":GOSUB 5538:IF Z=1 THEN Z$=B$(1):GOSUB 5000:RESUME 5160 ELSE RESUME 5160 13240 IF ERL=5535 AND ERR=57 THEN R1=INP(LSR):RESUME 20015 13250 IF ERL=5535 THEN RESUME 5530 13260 IF ERL=6020 THEN RESUME 6080 13270 IF ERL=6050 AND ERR=52 THEN RESUME 6060 13280 IF ERL=10600 AND ERR=63 THEN 10595 13290 IF ERL=10112 THEN IF ERR=58 THEN OK=-1:RESUME 10113 ELSE RESUME 10113 13300 IF ERL=10115 THEN RESUME 10120 13310 IF ERL=10720 THEN IF ERR=53 OR ERR=64 THEN IF LN THEN RESUME 10845 ELSE A$="File doesn't exist or filespec invalid!":GOSUB 1400:RESUME 10700 13312 IF ERL=10986 AND ERR=58 THEN RESUME 10987 13314 IF ERL=10986 THEN A$="Tell the SYSOP that the "+Z$+" window is closed.":GOSUB 1400:RESUME 1200 13320 IF ERL=12005 THEN IF ERR=58 THEN OK=-1:RESUME 12010 ELSE RESUME 12010 13330 IF ERL=12020 THEN RESUME 12030 13340 IF ERL=12210 AND ERR=61 THEN GOSUB 13600:RESUME 1200 13350 IF ERL=10240 AND ERR=61 THEN GOSUB 13610:RESUME 1200 13355 IF ERL=20165 AND ERR=58 THEN RESUME 20167 13357 IF ERL=20165 THEN RESUME 20170 13360 IF ERL=20220 AND ERR=53 THEN RESUME 20225 13370 IF ERL=20220 AND ERR=58 THEN OK=-1:RESUME 20225 13372 IF ERL=20220 AND ERR=64 THEN A$="Invalid file name":GOSUB 1400:RESUME 20200 13375 IF ERL=20240 AND ERR=53 THEN Z$=SPACE$(5)+"FILE <"+FB$+"> missing!":GOSUB 5538:RESUME 20247 13380 IF ERL=20440 AND ERR=53 THEN OK=-1:RESUME 20450 13385 IF ERL=20440 THEN IF ERR=64 OR ERR=69 THEN RESUME 20420 ELSE RESUME 20450 13390 IF ERL=20450 THEN OK=0:RESUME 20455 13400 IF ERL=20620 THEN OK=0:RESUME 20621 13405 IF ERL=20735 AND ERR=53 THEN RESUME 20737 13410 IF ERL=20840 THEN RESUME 20840 13420 IF ERL=21130 THEN OK=0:RESUME 21131 13430 IF ERL=21280 THEN RESUME 21280 13440 IF ERL=21360 THEN RESUME 21360 13442 IF ERL=21420 THEN RESUME 21420 13443 IF ERL=43030 AND ERR=58 THEN OK=-1:RESUME 43031 13445 IF ERL=43030 AND ERR=53 THEN RESUME 43031 13447 IF ERL=52000 AND ERR=53 THEN A$="Upload directory file is missing! Please inform sysop.":GOSUB 1400:RESUME 1200 13450 IF 65535!=ERL THEN 50000 13460 IF ERR=5 THEN 10595 13470 IF ERR=57 OR ERR=24 OR ERR=25 THEN GOSUB 50500:R1=INP(MSR):IF R1<128 THEN RESUME 10595 13480 IF ERR=61 THEN GOSUB 1400:A$="<< Disk is full -- operation terminated. >>":CR=2:GOSUB 1400:RESUME 1200 13490 IF ERR=71 THEN GOSUB 13630:RESUME 20020 13500 A$="Software bug found.":GOSUB 1400:A$="Tell the SYSOP that":GOSUB 1400:A$="Error "+STR$(ERR)+" occured in Line "+STR$(ERL)+".":GOSUB 1400:PRINT:RESUME 1200 13540 IF LJ THEN 13549 13543 IF NOT SH THEN IF CINT(UIX#)<1 THEN 13549 13545 GOSUB 56000:GOSUB 43050 13549 GOSUB 1900:CLOSE:OUT MCR,&H4:GOSUB 50510:OUT MCR,&H0:RUN 90 13550 CLS:LOCATE,,0:PRINT CA$+" file not found/invalid. Create one with "+VA$+"'s utility program -- CONFIG.":GOSUB 50510:SYSTEM 13590 RETURN 13600 A$=TQ$+"USERS file.":GOSUB 1400:CLOSE 1,2:KILL UF$:NAME UI$ AS UF$:GOSUB 9400:RETURN 13610 A$=TQ$+"MESSAGES file.":GOSUB 1400:CLOSE 1,2:KILL MES$:NAME MN$ AS MES$:GOSUB 135:RETURN 13630 A$="The SYSOP left the drive door open.":GOSUB 1400:A$="File Menu not available.":GOSUB 1400:RETURN 13650 CLS:LOCATE,,0:PRINT"Not enough memory for RBBS-PC":GOSUB 50510:SYSTEM 13670 CLOSE 2:OPEN "R",2,CF$,64:FIELD 2,64 AS CL$:A$=STRING$(5,TB$)+A$:LSET CL$=A$:CDX=CDX+1:PUT 2,CDX:A$=TA$:RETURN 14000 RETURN 320 14500 PRINT#3,"ATQ1E1C0H1M0":GOSUB 50510:CLOSE 3:RETURN 15000 SG=NOT SG:IF PRT THEN GOSUB 49000 15010 GET 1,1:MID$(R$,54,2)=STR$(SG):PUT 1,1:GOTO 43080 20000 GOSUB 1400:A$="Entering File Subsystem...":GOSUB 1400 20015 GOSUB 49000:IF LJ GOTO 20020 ELSE GOSUB 1400 20020 AM$="F":GOSUB 41050:NH=0:IF NOT XPR THEN F$=MH$:GOSUB 43030:GOSUB 45000 20030 GOSUB 1400:A$="File Function ":CR=1:GOSUB 1500:IF Q=0 THEN 20015 20050 LN=FD:Z$=B$(1):GOSUB 5000:FF=INSTR("DGHLNQU?",Z$):IF FF=0 THEN J=1:GOSUB 1360:GOTO 20015 ELSE IF UGQX THEN 2210 20162 FOR SM=1 TO ED:F$=MID$(FA$,SM,1)+":"+DIR$+B$(X) 20165 GOSUB 43030:NAME F$ AS F$ 20167 IF LN THEN GOSUB 7000:GOTO 20175 ELSE GOSUB 6000:GOTO 20175 20170 NEXT:A$="Directory # "+B$(X)+" unavailable!.":CR=2:GOSUB 1400 20175 X=X+1:GOTO 20161 20180 IF Q>1 THEN B=2:GOTO 20202 20200 A$=F8$+"download":GOSUB 1500:B=1:IF Q=0 THEN RETURN 20202 A=1:IF Q>B THEN A=VAL(B$(B+1)):IF A<1 THEN A=1 20205 Z$=B$(B):VD$="Download ":FOR X=A TO LEN(FA$)-1:GOSUB 20741:ON A GOTO 20220,20231 20220 OK=0:NAME F$ AS F$ 20225 IF OK THEN 20235 20230 NEXT 20231 A$="<"+B$(B)+"> not found! Type L for directory.":CR=2:GOSUB 1400:IF LH THEN LPRINT" File "+B$(B)+" not found. 20233 RETURN 20020 20235 Z$=F$:A$=MES$:GOSUB 43040:A$=MN$:GOSUB 43040:A$=CG$:GOSUB 43040:A$=UF$:GOSUB 43040:A$=UF$+".BAK":GOSUB 43040:A$=CF$:GOSUB 43040:A$=RC$:GOSUB 43040:A$=CH$:GOSUB 43040:A$=PD$:GOSUB 43040:A$=FB$:GOSUB 43040:FH$="(D) "+Z$ 20240 CLOSE 2:OPEN FB$ FOR INPUT AS 2:N$=Z$:GOSUB 20282:D1$=DR$:P1$=PRE$:S1$=EXT$ 20242 IF EOF(2) THEN 20247 ELSE INPUT #2,N$,FJ,FPW$:GOSUB 20282 20243 IF DR$<>"" AND DR$<>D1$ THEN 20242 ELSE A$=P1$:Z$=PRE$:GOSUB 20285:IF OK THEN 20242 ELSE A$=S1$:Z$=EXT$:GOSUB 20285:IF OK THEN 20242 ELSE 20244 20244 IF UG2 THEN Z$=B$(3):Q=2:GOTO 20260 20252 A$="Download"+FU$:CR=1:GOSUB 1500:IF Q=0 THEN 20252 ELSE Z$=B$(1) 20260 FT$=Z$:GOSUB 5000:ON INSTR("XAQ",Z$) GOTO 20290,20340,20289:GOTO 20252 20282 Z$=N$:GOSUB 5000:IF MID$(Z$,2,1)=":" THEN DR$=LEFT$(Z$,1):S=3 ELSE DR$="":S=1 20283 P=INSTR(Z$+".","."):PRE$=MID$(Z$,S,P-S):EXT$=MID$(Z$,P+1):IF LEN(EXT$)>3 THEN EXT$=LEFT$(EXT$,3) 20284 RETURN 20285 OK=0:K=0:L=LEN(A$) 20286 K=K+1:IF K>L THEN 20288 ELSE B$=MID$(Z$,K,1):IF B$="*" THEN 20289 20287 IF B$<>"?" AND MID$(A$,K,1)<>B$ THEN OK=-1:GOTO 20289 ELSE 20286 20288 IF L"*" THEN OK=-1 20289 RETURN 20290 CLOSE 2:OPEN "R",2,F$,128:TLA=165:GOSUB 20750:IF NOT BE THEN GOSUB 1400:A$=T3$+".":GOSUB 1400:CR=2:GOSUB 50510 20310 A$="Ready to send. Enter to abort transfer...":GOSUB 1400:GOSUB 50510:GOSUB 21300:CR=2:A$=TA$:GOTO 20390 20340 IF BL THEN 20235 ELSE CLOSE 2:OPEN "I",2,F$:TLA=139:GOSUB 20750:A$=TJ$:MID$(A$,9,1)="X":CR=2:GOSUB 1400:A$="Ready to send. Open download file. Enter to start":CR=1:GOSUB 1500 20380 ABT$=CAN$:STI=-1:GOSUB 6030:ABT$=CHR$(11):CR=2:IF RET THEN A$="<*>Download aborted<*>":SN=FD:GOTO 20390 20381 A$=CHR$(26):GOSUB 1400:IF NOT LJ THEN FOR X=1 TO 5:PRINT#3,BA$:GOSUB 50510:NEXT 20385 A$="<*>End of file<*>":SN=TBA 20390 GOSUB 1400:GOSUB 50600:RETURN 20400 IF Q>1 THEN B$(1)=B$(2):GOTO 20430 20420 CR=1:A$=F8$+"upload":GOSUB 1500:IF Q=0 THEN RETURN 20430 Z$=B$(1):VD$="Upload ":FOR X=1 TO LEN(FA$):GOSUB 20741:ON A GOTO 20440,20420 20440 OK=0:NAME F$ AS F$ 20450 IF NOT OK THEN 20460 20455 NEXT 20460 IF NOT OK AND UG>=UPS THEN A$="File exists, overwrite it":GOSUB 1500:IF YES THEN OK=-1:KILL F$:GOTO 20475 20465 F$=RIGHT$(FA$,1)+":"+Z$:IF NOT OK THEN CLOSE 2:A$="File <"+Z$+"> exists! Use a unique name.":CR=2:GOSUB 1400:GOTO 20420 20475 Z$=LEFT$(F$,2)+UB$:CR=2:GOSUB 1400:GOSUB 52000:A$="Upload disk has"+AD$:CR=2:GOSUB 1400:FH$="(U) "+F$:GOSUB 950 20477 IF Q>2 THEN Z$=B$(3):GOTO 20500 20480 A$="Upload"+FU$:CR=1:GOSUB 1500:IF Q=0 THEN 20480 ELSE Z$=B$(1) 20500 FT$=Z$:GOSUB 5000:ON INSTR("XAQ",Z$) GOTO 20530,20560,20735:GOTO 20480 20530 IF NOT BE THEN GOSUB 1400:A$=T3$+", then start XMODEM.":CR=2:GOSUB 1400 20540 A$="Ready to receive. Enter to abort transfer...":GOSUB 1400:GOSUB 50500:OK=-1:GOSUB 20860:X#=0:IF OK THEN 20700 ELSE 20730 20560 A$="NOTE--transfer MUST Terminate with a .":CR=2:GOSUB 1400:A$="Ready to receive ...":GOSUB 1400:OK=0:X=FD:CLOSE 2:OPEN "O",2,F$:IF PRT THEN PRINT" from SYSOP will abort. 20600 WHILE NOT EOF(3):GOSUB 42000:IF LOF(3)<128 THEN PRINT#3,XA$;:X=TBA 20610 X$=INPUT$(LOC(3),3):IF INSTR(X$,ABT$)THEN 20650 20620 OK=-1:PRINT#2,X$; 20621 IF NOT OK THEN 20670 20630 WEND:GOSUB 42000:IF X THEN X=FD:PRINT#3,XON$; 20640 IF INKEY$=ESC$THEN 20745 ELSE 20600 20650 X=INSTR(X$,ABT$):IF X<>1 THEN PRINT#2,LEFT$(X$,X-1) ELSE IF NOT OK THEN 20730 20660 A$="Upload complete.":GOSUB 1400:X#=128:GOTO 20700 20670 A$=XA$+"System error! Upload aborted. Enter to continue 20675 GOSUB 1400:GOSUB 50510:PRINT#3,XON$; 20680 WHILE NOT EOF(3):X$=INPUT$(LOC(3),3):IF INSTR(X$,CHR$(11))THEN 20730 20685 GOSUB 42000:WEND:GOTO 20680 20700 X#=(CDBL(LOC(2))*128#)+X#:CLOSE 2:OPEN "A",2,RIGHT$(FA$,1)+":"+UB$:F$=MID$(F$,3) 20710 A$="Enter 40 char. description of "+F$+"(begin with / if for SYSOP only).":GOSUB 1400:A$=" |----+---1+0---+---2+0---+---3+0---+---4+0":GOSUB 1400:GOSUB 1500:IF LEN(B$(1))>40 THEN 20710 20720 IF LEFT$(B$(1),1)="/"THEN 20725 ELSE PRINT#2,USING"\ \######## & &";F$;X#;LEFT$(DATE$,6)+RIGHT$(DATE$,2);B$(1) 20725 CLOSE 2:Y$=" >> uploaded << ":ULD=ULD+1:GOSUB 50610:RETURN 20730 A$="Upload aborted.":GOSUB 1400 20735 CLOSE 2:KILL F$ 20737 RETURN 20741 A=1:GOSUB 5000:F$=MID$(FA$,X,1)+":"+Z$:IF INSTR(F$,"?") OR INSTR(F$,"*") OR INSTR(F$,TB$) OR INSTR(F$,CA$) OR INSTR(3,F$,":") OR MID$(F$,LEN(F$),1)= "." THEN A=2:RETURN 20742 IF LEN(Z$)=>3 THEN IF INSTR("COM1:COM2:LPT1:LPT2:LPT3:PRN:CON:AUX:",Z$) THEN NI=VB:VD$=VD$+Z$:GOSUB 1380 20743 RETURN 20745 A$=XA$+"SYSOP aborted upload. Stop transmission. Enter to continue":GOTO 20675 20750 CNT#=FIX(LOF(2)/128):X#=LOF(2)/128:IF CNT#<>X#THEN X#=X#+1 20780 GOSUB 1400:A$="File size is"+STR$(INT(X#))+" blocks.":FH$=FH$+RIGHT$(A$,(LEN(A$)-12)):GOSUB 1400:IF BPS=-2 THEN X#=X#*TLA/45 ELSE IF BPS=-3 THEN X#=X#*TLA/120 ELSE X#=X#*TLA/30 20785 IF LOF(2)<1 THEN 20015 20790 GOSUB 950:A$="Transfer time:"+STR$(INT(X#/60))+" min.,"+STR$(X#MOD 60)+" sec.":GOSUB 1400:GOSUB 41000:IF(INT(X#/60)+1)>INT(TR!)THEN A$="Insufficient time left!":GOSUB 1400:GOSUB 20015 ELSE RETURN 20810 GOSUB 42000:Y$=TA$:DE!=FNTI!+2 20840 IF NOT EOF(3)THEN Y$=INPUT$(LOC(3),3):RETURN 20850 IF FNTI!TA$ THEN GOSUB 21280:GOTO 20920 20970 NEXT:PRINT#3,NAK$;:IF PRT THEN PRINT"Timeout 20990 GOTO 20920 21000 GOSUB 20810:IF Y$=TA$ THEN PRINT"Timeout":GOTO 21040 21020 X$=X$+Y$:IF LEN(X$)<132 THEN 21000 21040 IF LEN(X$)=132 THEN 21090 21050 IF LEN(X$)>132 THEN 21180 21060 IF X$=EOT$THEN 21220 21070 IF X$=CAN$THEN 21230 21080 GOTO 21170 21090 IF SEC<>ASC(MID$(X$,2,1))THEN 21200 21100 IF(SEC XOR 255)<>ASC(MID$(X$,3,1))THEN 21210 21110 CK=0:FOR I=1 TO 128:CK=CK+ASC(MID$(X$,I+3,1)):NEXT:CK=(CK AND 255):IF CK<>ASC(MID$(X$,132,1))THEN 21190 21120 SO=SO+1:IF PRT THEN PRINT"Received Block #"SO; 21130 PRINT#3,ACK$; 21131 LSET Z$=MID$(X$,4):PUT 2:IF NOT OK THEN 21230 21145 SEC=255 AND(SEC+1):IF PRT THEN PRINT"- verified 21150 X$=TA$:CK=0:GOTO 20920 21155 IF PRT THEN PRINT XEM$; 21160 SO=SO+1:IF PRT THEN PRINT SO 21165 PRINT#3,NAK$;:SO=SO-1:GOTO 21150 21170 XEM$="Short Block in #":GOTO 21155 21180 XEM$="Long Block in #":GOTO 21155 21190 XEM$="Checksum"+E1$:GOTO 21155 21200 XEM$="Block #"+E1$:GOTO 21155 21210 XEM$="Complement"+E1$:GOTO 21155 21220 IF PRT THEN PRINT"File Closed. 21225 PRINT#3,ACK$;:GOTO 21250 21230 IF PRT THEN PRINT"Transfer Aborted. 21240 OK=FD:PRINT#3,CAN$;CAN$; 21250 IF NOT BE THEN GOSUB 21280:A$="Enter C/R after switching to E,7,1":GOSUB 1400:GOSUB 50510:OUT LCR,26:GOSUB 1500 21265 RETURN 21270 IF PRT THEN PRINT TT$ 21275 GOSUB 21280:GOTO 21240 21280 WHILE NOT EOF(3):DF$=INPUT$(LOC(3),3):WEND:RETURN 21300 IF PRT THEN PRINT:PRINT TW$ 21320 IF NOT BE THEN GOSUB 50510:OUT LCR,3 21330 SEC=0:GOSUB 21280:FIELD 2,128 AS X$:SO=0 21350 WHILE NOT EOF(3) 21360 Y$=INPUT$(1,3):IF Y$=CAN$THEN 21560 21380 IF Y$=NAK$THEN 21480 21390 WEND:GOSUB 42000:Y$=INKEY$:IF Y$=ESC$THEN 21540 ELSE 21350 21410 WHILE NOT EOF(3) 21420 Y$=INPUT$(1,3):IF Y$=ACK$THEN 21470 21440 IF Y$<>NAK$ THEN 21450 21443 IF PRT THEN PRINT "- transmission error":PRINT"***Re-"; 21445 SO=SO-1:GOTO 21490 21450 IF Y$=CAN$THEN 21560 21460 WEND:GOSUB 42000:Y$=INKEY$:IF Y$=ESC$THEN 21540 ELSE 21410 21470 IF PRT THEN PRINT "- verified 21480 IF LOC(2)256 THEN CK=CK-256:GOTO 21504 21510 PRINT#3,CHR$(CK);:GOSUB 21280:GOTO 21410 21530 PRINT#3,EOT$;:FOR X=1 TO 100:GOSUB 20810:IF Y$=ACK$THEN 21550 ELSE Y$=INKEY$:IF Y$=ESC$ THEN 21540 21535 NEXT:GOTO 21230 21540 IF PRT THEN PRINT TT$ 21545 Y$=CAN$:PRINT#3,CAN$;CAN$;:GOTO 21250 21550 IF PRT THEN PRINT"Transmission Ended. 21555 SN=TBA:GOTO 21250 21560 SN=FD:IF PRT THEN PRINT"Receiver aborted transmission":GOTO 21250 ELSE RETURN 30000 A$=CHR$(12)+"SYSOP is active....Now in CHAT mode...":CR=2:GOSUB 1400:GOSUB 50500:A$="Hello, this is "+NA$+TB$+NB$+". Sorry to break in but....":CR=2:GOSUB 1400:GOSUB 4770:RETURN 31000 ON ERROR GOTO 0:CLS:IF MC THEN GOSUB 60400 31010 SYSTEM 32000 IF MC THEN GOSUB 60400 32010 CLS:CLEAR:END 33000 LH=NOT LH:IF PRT THEN GOSUB 49000 33010 GET 1,1:MID$(R$,56,2)=STR$(LH):PUT 1,1:GOTO 43080 33040 AC=NOT AC:IF PRT THEN GOSUB 49000 33050 GET 1,1:MID$(R$,52,2)=STR$(AC):PUT 1,1:GOTO 43080 39000 IF PRT THEN PRT=FD:LOCATE,,0:CLS:RETURN 39020 LOCATE 23,1,0:PRINT"SNOOP ON... FREE SPACE="FRE("A"):PRINT"F1-DOS F2-BASC F3-PRNT F4-PGE F5-ON/LN F6-AVA F7-S NX F8-TMP S F9-SNOP F10-CHAT";:GOSUB 953:PRT=TBA:RETURN 41000 GOSUB 41010:IF TR!<0 THEN TR!=0:RETURN 10555 ELSE RETURN 41010 A!=FRE("A"):IF FNTI!>TI!THEN TMA!=FNTI!-TI! ELSE TMA!=FNTI!+86400!-TI! 41020 TR!=(TV!-TMA!)/60:TR$=STR$(INT(TR!)):RETURN 41050 GOSUB 41000:A$="Time remaining = "+TR$+" min.":GOTO 2210 41070 CR=2:GOSUB 1400:A$="Access level"+STR$(UG)+" granted.":GOTO 2210 42000 IF LJ THEN RETURN:IF CTI!>TI!THEN CTI!=TI!+(10*60) 42010 IF INP(MSR)<128 THEN 10595 42020 RETURN 43000 IF NOT GA THEN A$=TZ$:GOTO 43020 43005 IF NOT BE THEN A$=TZ$+" in 7 bit mode":GOTO 43020 43010 GR=NOT GR:A$="Graphics mode ":IF GR THEN A$=A$+"on" ELSE A$=A$+"off 43020 GOTO 2210 43030 OK=0:IF (BE AND GA AND GR AND LEN(F$)<10) THEN GF$=F$+"G":NAME GF$ AS GF$ 43031 IF OK THEN F$=GF$ 43035 RETURN 43040 IF LEFT$(Z$,LEN(A$))=A$ THEN RETURN 20245 ELSE RETURN 43050 FIELD 2,55 AS CL$,3 AS HHH$,3 AS MMM$, 3 AS SSS$:LSET CL$=MID$(NG$,65,55):LSET HHH$=STR$(HHH):LSET MMM$=STR$(MMM):LSET SSS$=STR$(SSS):CDX=CDX+1:PUT 2,CDX:FIELD 2,64 AS CL$:LSET CL$=LEFT$(NG$,64):CDX=CDX+1:PUT 2,CDX 43060 IF FE$=NA$ AND LK$=NB$ THEN SH=-1 ELSE SH=0 43070 GET 1,1:MID$(R$,58,2)=STR$(WI):MID$(R$,60,2)=STR$(BE):MID$(R$,62,2)=STR$(BPS):MID$(R$,64,2)=STR$(UC):MID$(R$,66,5)=" ":KG=-1:GOSUB 41000:MID$(R$,66,5)=STR$(TR!):MID$(R$,71,2)=STR$(GR):MID$(R$,73,2)=STR$(SH) 43080 PUT 1,1:RETURN 44000 GET 1,1:WI=VAL(MID$(R$,58,2)):BE=VAL(MID$(R$,60,2)):BPS=VAL(MID$(R$,62,2)):UC=VAL(MID$(R$,64,2)):TV!=VAL(MID$(R$,66,5)):GR=VAL(MID$(R$,71,2)):SH=VAL(MID$(R$,73,2)):IF BPS=-3 THEN Q=&H60:GOSUB 1654 44010 TI!=FNTI!:IF TV!<60 THEN TV!=120 44015 IF NOT BE THEN OUT LCR,&H1A 44020 IF SH THEN FE$=PB$:LK$=PC$:RETURN 44030 FE=INSTR(21,R$," "):JJ=INSTR(FE+1,R$," "):FE$=MID$(R$,21,FE-21):LK$=MID$(R$,FE+1,JJ-(FE+1)):GOSUB 12550:RETURN 45000 STI=0:GOSUB 6000:STI=-1:RETURN 45010 SI=-1:GOSUB 1500:SI=0:GOTO 2210 49000 IF AVA THEN FH$="AVL " ELSE FH$=TE$ 49010 IF AC THEN FH$=FH$+"ANY " ELSE FH$=FH$+TE$ 49020 IF LH THEN FH$=FH$+"LPT " ELSE FH$=FH$+T2$ 49030 IF SG THEN FH$=FH$+"SYS 49040 GOSUB 950:RETURN 50000 A$="Fatal error...System going down":GOSUB 1400:GOTO 10595 50400 A$=TB$:GOSUB 1400:A$="bort, ontinue, elete, dit, nsert, ist, argin, ave":GOTO 2210 50500 DE!=FNTI!+1:GOTO 50520 50510 DE!=FNTI!+3 50520 IF FNTI!1 THEN 52040 ELSE RETURN 52040 DR=INSTR("ABCDEFGHI",LEFT$(Z$,1)):IF DR=0 THEN RETURN 52060 CALL UTSPACE(DR,AE,TNA,BH,SP):AE!=AE:BH!=BH:SP!=SP:TOA!=AE!*BH!*SP!:AD$=STR$(TOA!)+" Bytes free":RETURN 53000 IF Q>1 THEN 53030 53010 A$="Enter directory to be searched or ALL":GOSUB 1500:IF Q=0 THEN RETURN 53020 B$(2)=B$(1):Q=2 53030 ED=LEN(FA$)-1:LD=TBA:LN=TBA:Z$=B$(2):GOSUB 5000:IF Z$=TP$ OR Z$="ALL" THEN 53070 53060 GOSUB 20160:LN=FD:RETURN 53070 G=2:J=2:FOR SM=1 TO ED:B$(2)=MID$(FA$,SM,1)+":"+DIR$+"???.":GOSUB 10720:CLS:NEXT:GOSUB 49000:QX=G:X=3:SV$=DIR$:DIR$=TA$:GOSUB 20161:DIR$=SV$:LN=FD:RETURN 56000 CLOSE 2:OPEN "R",2,CF$,64:FIELD 2,64 AS CL$:RETURN 57000 A$=TA$:GOSUB 1400:GOSUB 56000:UDX=CDX 57005 IF UDX <1 OR RET THEN RETURN 57010 GET 2,UDX:A$=CL$:IF LEFT$(A$,3)=T2$ THEN 57030 57015 IF INSTR(A$,"on at")=0 THEN 57030 57025 UDX=UDX-1:GET 2,UDX:A1$=LEFT$(CL$,15):IF SH OR LEFT$(A1$,3)<>T2$ THEN A$=A$+A1$ 57027 GOTO 57035 57030 IF NOT SH THEN 57045 57035 GOSUB 1400:IF PL AND Q>=0 THEN Q=Q+1:IF Q>=PL THEN GOSUB 5600:IF NO THEN RETURN ELSE Q=0 57045 UDX=UDX-1:GOTO 57005 58000 SH=NOT SH:C.C=CSRLIN:C.L=POS(0):LOCATE 25,1:PRINT SPACE$(79);:LOCATE 25,1:IF SH THEN UG=SE:PRINT TS$+"GRANTED"; ELSE UG=HUG:PRINT TS$+"REMOVED"; 58020 GOSUB 50510:LOCATE C.C,C.L:GOSUB 49000:RETURN 60000 IF LEN(FK$) <> 2 THEN RETURN 60010 IX=ASC(RIGHT$(FK$,1)):IF IX<59 OR IX>68 THEN RETURN ELSE IX=IX-58:ON IX GOSUB 31000,32000,33000,33040,14000,9500,15000,58000,39000,30000:RETURN 60200 DEF SEG=0:MC=PEEK(&H1FE)+256*PEEK(&H1FF):RETURN 60240 BX=-4:AX=&H1:IF CP$="COM2" THEN BX=-3 60270 GOTO 60510 60310 AX=&H701:BX=0:GOTO 60510 60400 BX=-4:AX=&H100:IF CP$="COM2" THEN BX=-3 60410 GOTO 60510 60430 AX=&HB01:BX=0:GOTO 60510 60450 AX=&HB00:BX=0:GOTO 60510 60510 DEF SEG=MC:IF CE THEN 60550 60520 PRINT"Make statement # 60540 executable." 60540 'CALL CO(AX,BX):RETURN:' Required to be executable under the interperter but will cause errors if left executable and run through the BASIC compiler. 60550 CALL ABSOLUTE(AX,BX,CO):RETURN 62500 GOSUB 41000:KB=0:RE=0:IF NH THEN 4625 62501 IF UH THEN A$="More (Y),N,NS,RE,K" ELSE A$="More (Y),N,NS,RE 62502 GOSUB 1500:IF NO THEN 4650 62505 IF KB AND (UH OR SH) THEN IF UG>=MD(8) THEN GOSUB 62520:GOSUB 3950:GOSUB 62530:GOTO 4625 ELSE VD$="MainMenu R) Func 8":GOSUB 1380:GOTO 4625 62510 IF NOT RE THEN 4625 62515 IF UG"(R)" THEN SUB$="(R)"+LEFT$(SUB$,22) 62516 T$=FI$:FI$=NAM$:GOSUB 62520:GOSUB 2000:GOSUB 62530:GOTO 4625 62520 SQ=Q:SB$=B$:SLI=LI:SL=S:SNS=NH:SR=R:RETURN 62530 Q=SQ:B$=SB$:LI=SLI:S=SL:NH=SNS:R=SR:KB=0:RETURN 64000 LF=-1:TA$="":TB$=" ":TC$=" ":T2$=" ":TE$=" ":TF$=" copied...":TG$=" is available between":TH$=" on ":TI1$=" there are no bulletins today.":TJ$="* to abort. to suspend *":TK$="+++ Error 64010 TM$=" Char. Max.":TN$=":300,E,7,1,RS,CD,DS":TW$=" by SYSOP causes early termination. <<<":TP$="All":TQ$="Disk full--restoring ":TZ$="Graphics unavailable":T1$="Change to 450 baud":T5$=":300,N,8,1,RS,CD,DS" 64020 T3$="Switching to N,8,1 for binary transfer. You do the same":TS$="Temporary SYSOP Privileges ":TT$="Transfer aborted by key":TU$="^READ^":E1$=" Error in #":F8$="Enter full filename to ":FU$=" type modem, scii, uit 64025 LG$(1)="Registration Check Failed":LG$(2)="Sysop name attempted":LG$(3)="Locked out attempt":LG$(4)="Password Attempt Failed":P$="Password":VB$="RBBS-PC VERSION ":K1$="ill unneeded ones.":LG$(5)="Automatic Lockout completed":RETURN y levels required to issue the commands in the SYSOP,