PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #152)

[PCjs Machine "ibm5160"]

Waiting for machine "ibm5160" to load....

Information about “RBBS FOR THE IBM PC”

This is a really nifty package from the Capital PC Users Group that
allows you to set up your own BBS. This was originally a CP/M BBS
Written in BASIC, many people have built onto it.  This one disk is all
that is necessary to run and modify a BBS.  For a less technical BBS,
read the sample bulletin BULLET1.

System Requirements: Two drives, one serial port, a Hayes
Smartmodem or equivalent.

How to Start:  After loading DOS, enter A:TYPE -README-.DOC for
instructions.  For the documentation check RBBS-PC.DOC.

Suggested Registration: $6.00

File Descriptions:

-README- DOC  Initial suggestions for starting out
BULLETIN      Menu for bulletins
BULLET1       Sample bulletin
DIR99         Description of most recent file uploads
DIR           Description of file directories
CONFIG   BAS  Sets up RBBS configuration
CAPITAL  PC   Capital IBM PC Users Group information
USRINIT2 BAS  Reads callers file & updates
USRINIT1 BAS  Clears user download/upload counts
STARTUP  BAT  Installs RBBS onto two diskettes
RBBS-PC  REM  Remarks used by RBBS-PC.xxx programs
RBBS-PC  EXE  Compiled version
RBBS-PC  DOC  Documentation
RBBS-PC  BAS  BASIC version
NEWUSER       Welcome message
MENU3G        Menu - RBBS files - with border
MENU3         Menu - RBBS files
MENU2G        Menu - main RBBS menu - with border
MENU2         Menu - main RBBS menu
MENU1G        Menu - SYSOP utilities - with border
MENU1         Menu - SYSOP utilities
HELP??        User help files (7 files)
FIXFILES BAS  Cleans up caller file
UTSPACE  OBJ  Part of RBBS-PC.xxx programs

-README-.DOC

Recommend you read the rbbs-pc.doc file first.....
Just copy the file to your printer or in DOS
A:TYPE RBBS-PC.DOC  (press Ctrl and PrtSc) at the same time
and then press enter and you will get the documentation on
your printer... Good luck......
to set up the disks for operation
format 2 Diskettes (1 with system and 1 for DATA only)
copy BASICA.COM to the 2nd DISKETTE (which you have formatted for data only)
and then Type B:STARTUP with CPC-11 (DISK-18) in "B"  drive......


CONFIG.BAS

1 ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINES 25-44
2 ' CONFIG.BAS (RBBS-PC ver. CPC12.1)
3 REM $LINESIZE: 132
4 'by D. Thomas Mack
5 '   The Second Ring
6 '   10210 Oxfordshire Road
7 '   Great Falls, Virginia 22066
8 '
9 ' *******************************NOTICE*************************************
10 ' *  A limited license is granted to all users of this program and it's   *
11 ' *  companion program, RBBS-PC (ver. CPC12.1), to make copies of this    *
12 ' *  program and distribute the copies to other users, on the following   *
13 ' *  conditions:                                                          *
14 ' *    1.   The notices contained in lines 25 through 44 of the programs  *
15 ' *         are not altered, bypassed, or removed.                        *
16 ' *    2.   The program is not to be disrtibuted to others in modified    *
17 ' *         form (i.e. the line numbers must remain the same).            *
18 ' *    3.   No fee is to be charged (or any other consideration received) *
19 ' *         for coping or distributing these programs without an express  *
20 ' *         written agreement with D. Thomas Mack, The Second Ring, 10210 *
21 ' *         Oxfordshire Road, Great falls, Virginia 22006                 *
22 ' *                                                                       *
23 ' *   Copyright (c) 1983 D. Thomas Mack, The Second Ring                  *
24 ' *************************************************************************
25 SCREEN 0,1,0:WIDTH 80:CLS:KEY OFF:LOCATE ,,0
26 PRINT TAB(60)"tm":PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
27 PRINT:PRINT TAB(17)"Capital PC User Group User-Supported Software":PRINT:PRINT TAB(7) CHR$(214)STRING$(62,196)CHR$(183)
28 FOR I=1 TO 12:READ A$:PRINT TAB(7) CHR$(186);A$;SPACE$(62-LEN(A$));CHR$(186):NEXT
29 PRINT TAB(7) CHR$(211)STRING$(62,196)CHR$(189):PRINT TAB(27)"Copyright (c) 1983 Tom Mack, 10210 Oxfordshire Rd., Great Falls, Virginia 22066"
30 DATA"    If you are using RBBS-PC CPC12.1 and find it of value, I
31 DATA"    would like to suggest you consider a contribution to
32 DATA"
33 DATA"                 Capital PC Software Exchange
34 DATA"                     Post Office Box 6128
35 DATA"                Silver Spring, Maryland  20906
36 DATA"
37 DATA"    Feel free to copy and share RBBS-PC CPC12 with other
38 DATA"    users on these three conditions:
39 DATA"    1.  RBBS-PC CPC12 is not distributed in modified form.
40 DATA"    2.  No fee or consideration is charged.
41 DATA"    3.  This notice is not bypassed or removed.
42 DEF FNTI!=CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60)+(VAL(MID$(TIME$,4,2))*60)+(VAL(MID$(TIME$,7,2))*1))) ' CPC10
43 IWAIT!=FNTI!+5
44 IF FNTI!<IWAIT! THEN LOCATE 22,15:PRINT TIME$;" ";:COLOR 0,7:PRINT " Reading Data, Wait a sec !!! ";:COLOR 7,0:GOTO 44
99 ' *************************************************************************
1000 DEFINT A-Z:DIM A$(5)
1100 ON ERROR GOTO 56100
1200 FALSE=0
1300 TRUE=NOT FALSE
1310 MAXPAGE=4
1320 MINPAGE=1
1400 CONFIG$="RBBS-PC.DEF"
1500 NEWFILE=-1
1600 MESSAGES$="MESSAGES"
1700 MESSAGES.BAK$="MESSAGES.BAK"
1800 CALLERS$="CALLERS"
1900 COMMENTS$="COMMENTS"
2000 USERS$="USERS"
2100 LONGCALR$="LONGCALR"
2200 R$="LASTCALR"
2300 HELP01$="HELP01"
2400 HELP02$="HELP02"
2500 HELP03$="HELP03"
2600 HELP04$="HELP04"
2700 HELP05$="HELP05"
2800 HELP06$="HELP06"
2900 HELP07$="HELP07"
3000 BULLETIN$="BULLETIN"
3100 BULLET1$="BULLET1"
3200 BULLET2$="BULLET2"
3300 BULLET3$="BULLET3"
3400 BULLET4$="BULLET4"
3500 BULLET5$="BULLET5"
3600 BULLET6$="BULLET6"
3700 WELCOME$="WELCOME"
3800 NEWUSER$="NEWUSER"
3810 MENU1$="MENU1"
3820 MENU2$="MENU2"
3830 MENU3$="MENU3"
3840 MENU4$="MENU4"
3850 OPTWEL=TRUE
3860 UPLDDLD=FALSE
3870 PL=23
3880 LW=80
3890 GRAPHICS=FALSE
3895 WINDW=FALSE
3900 DIR$="DIR"
4000 FGR=7
4100 BGR=0
4200 BDR=0
4210 TDEV$="A"
4300 DOSVER%=1
4400 NFIR$="TOM"
4500 NLAS$="MACK"
4600 PASS1$="RBBS-PC"
4700 PASS2$="CPC12"
4800 XPR=0
4900 CBACK=0
5000 FDEV$="ABB"
5100 RDEV$="A"
5110 MDEV$="A"
5200 UDIR$="DIR99"
5205 RBBS$=RDEV$+":RBBS.BAT"
5210 CTTY$=RDEV$+":RCTTY.BAT"
5220 OMIT.DIR$="NO"
5230 OMIT.UDIR$="NO"
5300 BELL=0
5400 PRT=TRUE
5500 TIME.MAX!=72
5600 MESSAGE.MAX=250
5700 LAPSE.MAX=1
5800 ANNOY.ON=800
5900 ANNOY.OFF=2200
5950 COMPILED=FALSE
5960 OPTBUL=TRUE
5970 SPEAKER=0
5980 M13$="COM1"
5990 REMIND=TRUE
5995 BTOK=TRUE
6000 B=1
6100 ' RBBS-PC Configuration Program for Compilable RBBS-PC
6110 OPEN "I",#1,CONFIG$
6120 INPUT #1,FDEV$,RDEV$,PASS1$,PASS2$,NFIR$,NLAS$,CBACK,ANNOY.ON,ANNOY.OFF,TIME.MAX!,MESSAGE.MAX,LAPSE.MAX,UDIR$,XPR,B,BELL,PRT,COMPILED,MENU1$,MENU2$,MENU3$,MENU4$,OPTWEL,UPLDDLD,PL,LW,GRAPHICS,WINDW,MDEV$
6122 INPUT #1,MESSAGES$,MESSAGES.BAK$,CALLERS$,COMMENTS$,USERS$,LONGCALR$,WELCOME$,NEWUSER$,DIR$,M13$,OPTBUL,SPEAKER,TDEV$,DOSVER%,FGR,BGR,BDR,RBBS$,CTTY$,OMIT.DIR$,OMIT.UDIR$
6124 INPUT #1,HELP01$,HELP02$,HELP03$,HELP04$,HELP05$,HELP06$,HELP07$,BULLETIN$,BULLET1$,BULLET2$,BULLET3$,BULLET4$,BULLET5$,BULLET6$,REMIND,BTOK
6126 MESSAGES$=RIGHT$(MESSAGES$,(LEN(MESSAGES$)-2))
6128 MESSAGES.BAK$=RIGHT$(MESSAGES.BAK$,(LEN(MESSAGES.BAK$)-2))
6130 CALLERS$=RIGHT$(CALLERS$,(LEN(CALLERS$)-2))
6132 COMMENTS$=RIGHT$(COMMENTS$,(LEN(COMMENTS$)-2))
6134 USERS$=RIGHT$(USERS$,(LEN(USERS$)-2))
6136 LONGCALR$=RIGHT$(LONGCALR$,(LEN(LONGCALR$)-2))
6138 R$=RIGHT$(R$,(LEN(R$)-2))
6140 BULLETIN$=RIGHT$(BULLETIN$,(LEN(BULLETIN$)-2))
6142 BULLET1$=RIGHT$(BULLET1$,(LEN(BULLET1$)-2))
6144 BULLET2$=RIGHT$(BULLET2$,(LEN(BULLET2$)-2))
6146 BULLET3$=RIGHT$(BULLET3$,(LEN(BULLET3$)-2))
6148 BULLET4$=RIGHT$(BULLET4$,(LEN(BULLET4$)-2))
6150 BULLET5$=RIGHT$(BULLET5$,(LEN(BULLET5$)-2))
6152 BULLET6$=RIGHT$(BULLET6$,(LEN(BULLET6$)-2))
6154 HELP01$=RIGHT$(HELP01$,(LEN(HELP01$)-2))
6156 HELP02$=RIGHT$(HELP02$,(LEN(HELP02$)-2))
6158 HELP03$=RIGHT$(HELP03$,(LEN(HELP03$)-2))
6160 HELP04$=RIGHT$(HELP04$,(LEN(HELP04$)-2))
6162 HELP05$=RIGHT$(HELP05$,(LEN(HELP05$)-2))
6164 HELP06$=RIGHT$(HELP06$,(LEN(HELP06$)-2))
6166 HELP07$=RIGHT$(HELP07$,(LEN(HELP07$)-2))
6168 WELCOME$=RIGHT$(WELCOME$,(LEN(WELCOME$)-2))
6170 NEWUSER$=RIGHT$(NEWUSER$,(LEN(NEWUSER$)-2))
6173 MENU1$=RIGHT$(MENU1$,(LEN(MENU1$)-2))
6174 MENU2$=RIGHT$(MENU2$,(LEN(MENU2$)-2))
6175 MENU3$=RIGHT$(MENU3$,(LEN(MENU3$)-2))
6176 MENU4$=RIGHT$(MENU4$,(LEN(MENU4$)-2))
6199 CLOSE #1
6200 IF XPR=0 THEN M5$="NOVICE"
6300 IF XPR=-1 THEN M5$="EXPERT"
6400 M6$=RIGHT$(FDEV$,1)
6500 M7$=LEFT$(FDEV$,(LEN(FDEV$)-1))
6800 IF BELL=0 THEN M10$="OFF"
6900 IF BELL=-1 THEN M10$="ON"
7000 IF PRT=TRUE THEN M11$="YES"
7100 IF PRT=FALSE THEN M11$="NO"
7110 IF COMPILED=TRUE THEN M12$="COMPILED"
7115 IF COMPILED=FALSE THEN M12$="BASICA"
7120 IF OPTBUL=TRUE THEN M15$="YES"
7125 IF OPTBUL=FALSE THEN M15$="NO"
7130 IF SPEAKER=0 THEN M14$="OFF"
7135 IF SPEAKER=-1 THEN M14$="ON"
7140 IF REMIND=TRUE THEN M16$="YES"
7145 IF REMIND=FALSE THEN M16$="NO"
7150 IF BTOK=TRUE THEN M17$="YES"
7155 IF BTOK=FALSE THEN M17$="NO"
7160 IF OPTWEL=FALSE THEN M18$="NO"
7165 IF OPTWEL=TRUE THEN M18$="YES"
7170 IF UPLDDLD=TRUE THEN M19$="YES"
7175 IF UPLDDLD=FALSE THEN M19$="NO"
7180 IF GRAPHICS=TRUE THEN M20$="YES"
7185 IF GRAPHICS=FALSE THEN M20$="NO"
7190 IF WINDW=TRUE THEN M21$="YES"
7195 IF WINDW=FALSE THEN M21$="NO"
7200 Y$=""
7300 KEY OFF
7400 FOR I=1 TO 10:KEY I,"  ":NEXT
7500 COLOR FGR,BGR,BDR:CLS
7600 COLOR 0,7,0:LOCATE 3,22:PRINT"RBBS-PC CPC12 CONFIGURATION PROGRAM":COLOR FGR,BGR,BDR:PRINT
7700 LOCATE 7,17,0:PRINT "(C) COPYRIGHT 1983 CAPITAL PC USER GROUP, INC.":PRINT
7800 LOCATE 25,27:PRINT"Press Enter to continue...";
7900 Y$=INKEY$
8000 IF Y$=CHR$(13) THEN 8200
8100 GOTO 7900
8200 CLS:COLOR 0,7,0:LOCATE 1,23:PRINT"RBBS-PC CPC12.1 Default Configuration";:COLOR FGR,BGR,BDR
8210 CURPAGE=1
8220 LOCATE 1,68:PRINT"Page "+STR$(CURPAGE)+" of "+STR$(MAXPAGE)
8300 LOCATE  3,10:PRINT" 1. SYSOP's First Name --------------------------- "+NFIR$
8400 LOCATE  4,10:PRINT" 2. SYSOP's Last Name ---------------------------- "+NLAS$
8500 LOCATE  5,10:PRINT" 3. SYSOP's Password # 1 ------------------------- "+PASS1$
8600 LOCATE  6,10:PRINT" 4. SYSOP's Password # 2 ------------------------- "+PASS2$
8700 LOCATE  7,10:PRINT" 5. SYSOP's default sign-on mode ----------------- "+M5$
8800 LOCATE  8,10:PRINT" 6. SYSOP's office hours ------------------------ "STR$(ANNOY.ON);" to "STR$(ANNOY.OFF)
8900 LOCATE  9,10:PRINT" 7. Ring-back count set at -----------------------"STR$(CBACK)
9000 LOCATE 10,10:PRINT" 8. Drive available for Uploading ---------------- "+M6$
9100 LOCATE 11,10:PRINT" 9. Drive(s) available for Downloading ----------- "+M7$
9200 LOCATE 12,10:PRINT"10. Drive with RBBS-PC system files -------------- "+RDEV$
9300 LOCATE 13,10:PRINT"11. Name of directory for uploading -------------- "+UDIR$
9400 LOCATE 14,10:PRINT"12. Prompt bell default is ----------------------- "+M10$
9500 LOCATE 15,10:PRINT"13. Maximum time on system (in minutes) ----------"STR$(TIME.MAX!)
9600 LOCATE 16,10:PRINT"14. Maximum number of messages allowed -----------"STR$(MESSAGE.MAX)
9700 LOCATE 17,10:PRINT"15. # Months of inactivty before user deleted ----"STR$(LAPSE.MAX)
9800 LOCATE 18,10:PRINT"16. # Of System Bulletins ------------------------"STR$(B)
9900 LOCATE 19,10:PRINT"17. Display user sessions on screen (SNOOP) ------ "+M11$
9950 LOCATE 20,10:PRINT"18. Execution type (COMPILED/BASICA) ------------- "+M12$
9960 LOCATE 21,10:PRINT"19. Communications port to be used by RBBS-PC ---- "+M13$
9970 LOCATE 22,10:PRINT"20. Select another page number.  Current page # is"STR$(CURPAGE)
10000 LOCATE 24,5:PRINT"Select number of configuration parameter to change (99 to update): ";:LOCATE 24,70:PRINT STRING$(10,32);
10100 TFGR=FGR+16:COLOR TFGR,BGR,BDR:LOCATE 24,70:PRINT"  ";:GOSUB 57300
10200 LOCATE 24,70
10300 COLOR FGR,BGR,BDR
10400 LINE INPUT;HJ$:IF HJ$="" THEN GOTO 10200
10500 LOCATE 24,5:PRINT STRING$(75,32);
10600 IF HJ$="1"THEN GOTO 12700
10700 IF HJ$="2" THEN GOTO 13400
10800 IF HJ$="3" THEN GOTO 14100
10900 IF HJ$="4" THEN GOTO 14800
11000 IF HJ$="5" THEN GOTO 15500
11100 IF HJ$="6" THEN GOTO 16200
11200 IF HJ$="7" THEN GOTO 17600
11300 IF HJ$="8" THEN GOTO 18100
11400 IF HJ$="9" THEN GOTO 18800
11500 IF HJ$="10" THEN GOSUB 20000: GOTO 8200
11600 IF HJ$="11" THEN GOTO 20700
11700 IF HJ$="12" THEN GOTO 21600
11800 IF HJ$="13" THEN GOTO 22500
11900 IF HJ$="14" THEN GOTO 23000
12000 IF HJ$="15" THEN GOTO 23500
12100 IF HJ$="16" THEN GOTO 24000
12200 IF HJ$="17" THEN GOTO 24500
12250 IF HJ$="18" THEN GOTO 25305
12260 IF HJ$="19" THEN GOTO 25350
12270 IF HJ$="20" THEN GOTO 25386
12300 IF HJ$="99" THEN GOTO 25400
12400 GOTO 10000
12500 LOCATE 24,5:PRINT HJ$+" not supported at this time.  Please try again."
12600 GOTO 10000
12700 LOCATE 24,5:PRINT"What is the SYSOP's FIRST name? ";
12800 LINE INPUT;HJ$
12900 IF HJ$="" THEN GOTO 12700
13000 IF LEN(HJ$)<3 GOTO 12700
13100 GOSUB 57400
13200 NFIR$=HJ$
13300 GOTO 8200
13400 LOCATE 24,5:PRINT"What is the SYSOP's LAST name? ";
13500 LINE INPUT;HJ$
13600 IF HJ$="" THEN GOTO 13400
13700 IF LEN(HJ$)<3 GOTO 13400
13800 GOSUB 57400
13900 NLAS$=HJ$
14000 GOTO 8200
14100 LOCATE 24,5:PRINT"What is the SYSOP's Password #1? ";
14200 LINE INPUT;HJ$
14300 IF HJ$="" THEN GOTO 14100
14400 IF LEN(HJ$)<3 GOTO 14100
14500 GOSUB 57400
14600 PASS1$=HJ$
14700 GOTO 8200
14800 LOCATE 24,5:PRINT"What is the SYSOP's Password #2? ";
14900 LINE INPUT;HJ$
15000 IF HJ$="" THEN GOTO 14800
15100 IF LEN(HJ$)<3 GOTO 14800
15200 GOSUB 57400
15300 PASS2$=HJ$
15400 GOTO 8200
15500 LOCATE 24,5:PRINT"SYSOP's default sign-on mode (EXPERT/NOVICE)? ";
15600 LINE INPUT;HJ$
15700 IF LEN(HJ$)=6 OR LEN(HJ$)=1 THEN GOTO 15800 ELSE GOTO 15500
15800 GOSUB 57400
15900 IF HJ$="E" OR HJ$="EXPERT" THEN M5$="EXPERT":GOTO 8200
16000 IF HJ$="N" OR HJ$="NOVICE" THEN M5$="NOVICE":GOTO 8200
16100 GOTO 15500
16200 LOCATE 24,5:PRINT"What is the earliest SYSOP wants to be paged? -- HHMM ";
16300 LINE INPUT;HJ$
16400 IF LEN(HJ$)<>4 GOTO 16200
16500 IF FIX(VAL(MID$(HJ$,1,2)))<0 OR FIX(VAL(MID$(HJ$,1,2)))>24 OR FIX(VAL(MID$(HJ$,3,2)))<0 OR FIX(VAL(MID$(HJ$,3,2)))>59 THEN GOTO 16200
16600 ANNOY.ON=VAL(HJ$)
16700 IF ANNOY.ON<0 OR IN!>2400 THEN GOTO 16200
16800 LOCATE 25,5:PRINT"What is the latest SYSOP wants to be paged? ---- HHMM ";
16900 LINE INPUT;HJ$
17000 IF LEN(HJ$)<>4 GOTO 16800
17100 IF FIX(VAL(MID$(HJ$,1,2)))<0 OR FIX(VAL(MID$(HJ$,1,2)))>24 OR FIX(VAL(MID$(HJ$,3,2)))<0 OR FIX(VAL(MID$(HJ$,3,2)))>59 THEN GOTO 16800
17200 ANNOY.OFF=VAL(HJ$)
17300 IF ANNOY.OFF<0 OR ANNOY.OFF>2400 THEN GOTO 16800
17400 IF ANNOY.ON>ANNOY.OFF THEN SWAP ANNOY.ON,ANNOY.OFF
17500 GOTO 8200
17600 LOCATE 24,5:PRINT"Set number of rings to ring-back on voice grade line ";
17700 LINE INPUT;HJ$
17800 CBACK=FIX(VAL(HJ$))
17900 IF CBACK<0 OR CBACK>99 THEN GOTO 17600
18000 GOTO 8200
18100 LOCATE 24,5:PRINT"Specify single drive in the range A->M for uploading. ";
18200 LINE INPUT;HJ$
18300 IF LEN(HJ$)<>1 THEN GOTO 18100
18400 GOSUB 57400
18500 IF HJ$<"A" OR HJ$>"M" THEN GOTO 18100
18600 M6$=HJ$
18700 GOTO 8200
18800 LOCATE 24,5:PRINT"Specify drives (max of 5) in the range A-M for download files. ";
18900 LINE INPUT;HJ$
19000 IF LEN(HJ$)<1 OR LEN(HJ$)>5 THEN GOTO 18800
19100 GOSUB 57400
19200 FOR I=1 TO LEN(HJ$)
19300 A$(I)=MID$(HJ$,I,1)
19400 NEXT
19500 FOR I=1 TO LEN(HJ$)
19600 IF A$(I)<"A" OR A$(I)>"M" THEN GOTO 18800
19700 NEXT
19800 M7$=HJ$
19900 GOTO 8200
20000 LOCATE 24,5:PRINT"Specify drive in the range A->M where system files will be located. ";
20100 LINE INPUT;HJ$
20200 IF LEN(HJ$)<>1 THEN GOTO 20000
20300 GOSUB 57400
20400 IF HJ$<"A" OR HJ$>"M" THEN GOTO 20000
20500 RDEV$=HJ$
20600 RETURN
20700 LOCATE 24,5:PRINT"Directory ID (max of 5 characters) for upload directory.";
20800 LINE INPUT;HJ$:GOSUB 57400
20900 IF LEN(HJ$)<1 OR LEN(HJ$)>5 THEN GOTO 20700
20910 FOR J=1 TO LEN(HJ$)
20920     X=ASC(MID$(HJ$,J,1))
20930     IF (X>64 AND X<91) THEN GOTO 21010
20940     IF (X>47 AND X<58) THEN GOTO 21010
20950     IF (X=33) THEN GOTO 21010
20960     IF (X>34 AND X<42) THEN GOTO 21010
20970     IF (X>43 AND X<46) THEN GOTO 21010
20980     IF (X>96 AND X<124) THEN GOTO 21010
20990     IF (X=125) THEN GOTO 21010
21000 GOTO 20700
21010 NEXT
21400 UDIR$="DIR"+HJ$
21500 GOTO 8200
21600 LOCATE 24,5:PRINT"Prompt bell default? (ON or OFF) ";
21700 LINE INPUT;HJ$
21800 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 21600
21900 GOSUB 57400
22000 IF HJ$="ON" THEN GOTO 22300
22100 IF HJ$="OFF" THEN GOTO 22300
22200 GOTO 21600
22300 M10$=HJ$
22400 GOTO 8200
22500 LOCATE 24,5:PRINT"Set maximum minutes a user can stay on the system ";
22600 LINE INPUT;HJ$
22700 TIME.MAX!=VAL(HJ$)
22800 IF TIME.MAX!<0 OR TIME.MAX!>1440 THEN GOTO 22500
22900 GOTO 8200
23000 LOCATE 24,5:PRINT"Set maximum number of messages allowed (MAX=250) ";
23100 LINE INPUT;HJ$
23200 MESSAGE.MAX=VAL(HJ$)
23300 IF MESSAGE.MAX<1 OR MESSAGE.MAX>250 THEN GOTO 23000
23400 GOTO 8200
23500 LOCATE 24,5:PRINT"Set number of months before an inactive user is purged. ";
23600 LINE INPUT;HJ$
23700 LAPSE.MAX=VAL(HJ$)
23800 IF LAPSE.MAX<1 OR LAPSE.MAX>12 THEN GOTO 23500
23900 GOTO 8200
24000 LOCATE 24,5:PRINT"How many system bulletins are available? (MAX=6) ";
24100 LINE INPUT;HJ$
24200 B=VAL(HJ$)
24300 IF B<0 OR B>6 THEN GOTO 24000
24400 GOTO 8200
24500 LOCATE 24,5:PRINT"Display user sessions on the screen? (YES or NO) ";
24600 LINE INPUT;HJ$
24700 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 24500
24800 GOSUB 57400
24900 IF HJ$="NO" THEN GOTO 25200
25000 IF HJ$="YES" THEN GOTO 25200
25100 GOTO 24500
25200 M11$=HJ$
25300 GOTO 8200
25305 LOCATE 24,5:PRINT"Execution type (COMPILED OR BASICA)? ";
25310 LINE INPUT;HJ$
25315 IF LEN(HJ$)<1 OR LEN(HJ$)>8 THEN GOTO 25305
25320 GOSUB 57400
25325 IF HJ$="COMPILED" THEN GOTO 25340
25330 IF HJ$="BASICA" THEN GOTO 25340
25335 GOTO 25305
25340 M12$=HJ$
25345 GOTO 8200
25350 CP1=1
25355 CP2=2
25360 LOCATE 24,5:PRINT"Number of communication port to be used ("+STR$(CP1)+" or"+STR$(CP2)+" )? ";
25365 LINE INPUT;HJ$
25370 IF LEN(HJ$)<>1 THEN GOTO 25350
25375 IF FIX(VAL(MID$(HJ$,1,1)))<CP1 OR FIX(VAL(MID$(HJ$,1,1)))>CP2 THEN GOTO 25350
25380 M13$="COM"+HJ$
25385 GOTO 8200
25386 LOCATE 24,5:PRINT"Which page number do you want ("+STR$(MINPAGE)+" thru"+STR$(MAXPAGE)+" )? ";
25388 LINE INPUT;HJ$
25390 IF LEN(HJ$)<>1 THEN GOTO 25386
25391 IF FIX(VAL(MID$(HJ$,1,1)))<MINPAGE OR FIX(VAL(MID$(HJ$,1,1)))>MAXPAGE THEN GOTO 25386
25392 IF FIX(VAL(MID$(HJ$,1,1)))=1 THEN GOTO 8200
25393 IF FIX(VAL(MID$(HJ$,1,1)))=2 THEN GOTO 27000
25394 IF FIX(VAL(MID$(HJ$,1,1)))=3 THEN GOTO 40000
25396 GOTO 49400
25400 LOCATE 24,5:PRINT"Are you Satisfied with all Changes ? (Y/N) or <Q)uit ";
25500 LINE INPUT;HJ$
25600 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 25400
25700 GOSUB 57400
25800 IF HJ$="NO" THEN GOTO 8200
25805 IF HJ$="N" THEN GOTO 8200
25900 IF HJ$="YES" THEN GOTO 50000
25905 IF HJ$="Y" THEN GOTO 50000
25906 IF HJ$="QUIT" THEN GOTO 57200
25907 IF HJ$="Q" THEN GOTO 57200
26000 GOTO 25400
27000 CLS:COLOR 0,7,0:LOCATE 1,23:PRINT"RBBS-PC CPC12.1 Default Configuration";:COLOR FGR,BGR,BDR
27100 CURPAGE=2
27200 LOCATE 1,68:PRINT"Page "+STR$(CURPAGE)+" of "+STR$(MAXPAGE)
27300 LOCATE  3,10:PRINT"21. Drive with the following RBBS-PC text files -- "+TDEV$
27400 LOCATE  4,10:PRINT"22. Text file describing the bulletins is named -- "+BULLETIN$
27500 LOCATE  5,10:PRINT"23. Text file of first bulletin is named --------- "+BULLET1$
27600 LOCATE  6,10:PRINT"24. Text file of second bulletin is named -------- "+BULLET2$
27700 LOCATE  7,10:PRINT"25. Text file of third bulletin is named --------- "+BULLET3$
27800 LOCATE  8,10:PRINT"26. Text file of fourth bulletin is named -------- "+BULLET4$
27900 LOCATE  9,10:PRINT"27. Text file of fifth bulletin is named --------- "+BULLET5$
28000 LOCATE 10,10:PRINT"28. Text file of sixth bulletin is named --------- "+BULLET6$
28100 LOCATE 11,10:PRINT"29. Text file of first 'HELP' file is named ------ "+HELP01$
28200 LOCATE 12,10:PRINT"30. Text file of second 'HELP' file is named ----- "+HELP02$
28300 LOCATE 13,10:PRINT"31. Text file of third 'HELP' file is named ------ "+HELP03$
28400 LOCATE 14,10:PRINT"32. Text file of fourth 'HELP' file is named ----- "+HELP04$
28500 LOCATE 15,10:PRINT"33. Text file of fifth 'HELP' file is named ------ "+HELP05$
28600 LOCATE 16,10:PRINT"34. Text file of sixth 'HELP' file is named ------ "+HELP06$
28700 LOCATE 17,10:PRINT"35. Text file of seventh 'HELP' file is named ---- "+HELP07$
28800 LOCATE 18,10:PRINT"36. Text file of general welcome file is named --- "+WELCOME$
28900 LOCATE 19,10:PRINT"37. Text file for first time users is named ------ "+NEWUSER$
29000 LOCATE 20,10:PRINT"38. Text file listing file directories is named -- "+DIR$
29100 LOCATE 21,10:PRINT"39. Version of DOS that RBBS-PC will run under ---"STR$(DOSVER%)
29200 LOCATE 22,10:PRINT"40. Select another page number.  Current page # is"STR$(CURPAGE)
29300 LOCATE 24,5:PRINT"Select number of configuration parameter to change (99 to update): ";:LOCATE 24,70:PRINT STRING$(10,32);
29400 TFGR=FGR+16:COLOR TFGR,BGR,BDR:LOCATE 24,70:PRINT"  ";:GOSUB 57300
29500 LOCATE 24,70
29600 COLOR FGR,BGR,BDR
29700 LINE INPUT;HJ$:IF HJ$="" THEN GOTO 29500
29800 LOCATE 24,5:PRINT STRING$(75,32);
29900 IF HJ$="21"THEN GOTO 34100
30000 IF HJ$="22" THEN GOSUB 32100: BULLETIN$=HJ$: GOTO 27000
30100 IF HJ$="23" THEN GOSUB 32100: BULLET1$=HJ$: GOTO 27000
30200 IF HJ$="24" THEN GOSUB 32100: BULLET2$=HJ$: GOTO 27000
30300 IF HJ$="25" THEN GOSUB 32100: BULLET3$=HJ$: GOTO 27000
30400 IF HJ$="26" THEN GOSUB 32100: BULLET4$=HJ$: GOTO 27000
30500 IF HJ$="27" THEN GOSUB 32100: BULLET5$=HJ$: GOTO 27000
30600 IF HJ$="28" THEN GOSUB 32100: BULLET6$=HJ$: GOTO 27000
30700 IF HJ$="29" THEN GOSUB 32100: HELP01$=HJ$: GOTO 27000
30800 IF HJ$="30" THEN GOSUB 32100: HELP02$=HJ$: GOTO 27000
30900 IF HJ$="31" THEN GOSUB 32100: HELP03$=HJ$: GOTO 27000
31000 IF HJ$="32" THEN GOSUB 32100: HELP04$=HJ$: GOTO 27000
31100 IF HJ$="33" THEN GOSUB 32100: HELP05$=HJ$: GOTO 27000
31200 IF HJ$="34" THEN GOSUB 32100: HELP06$=HJ$: GOTO 27000
31300 IF HJ$="35" THEN GOSUB 32100: HELP07$=HJ$: GOTO 27000
31400 IF HJ$="36" THEN GOSUB 32100: WELCOME$=HJ$: GOTO 27000
31500 IF HJ$="37" THEN GOSUB 32100: NEWUSER$=HJ$: GOTO 27000
31600 IF HJ$="38" THEN GOSUB 32100: DIR$=HJ$: GOTO 27000
31700 IF HJ$="39" THEN GOTO 36800
31800 IF HJ$="40" THEN GOTO 25386
31900 IF HJ$="99" THEN GOTO 25400
32000 GOTO 29300
32100 X$=HJ$
32200 LOCATE 24,5:PRINT SPC(74):LOCATE 24,5:PRINT"Specify name of the file for option "+X$+". ";
32300 LINE INPUT;HJ$:GOSUB 57400
32400 IF LEN(HJ$)<1 OR LEN(HJ$)>12 THEN GOTO 32200
32500 L1=INSTR(HJ$,"."):IF L1=0 THEN IF LEN(HJ$)<9 THEN GOTO 33000 ELSE GOTO 32200
32600 IF L1>9 THEN GOTO 32200
32700 IF L1<2 THEN GOTO 32200
32800 IF LEN(HJ$)-L1>3 THEN GOTO 32200
33000 FOR J=1 TO LEN(HJ$)
33100     X=ASC(MID$(HJ$,J,1))
33200     IF (X>63 AND X<91) THEN GOTO 34000
33300     IF (X>47 AND X<58) THEN GOTO 34000
33400     IF (X=33) THEN GOTO 34000
33500     IF (X>34 AND X<42) THEN GOTO 34000
33600     IF (X>43 AND X<47) THEN GOTO 34000
33700     IF (X>96 AND X<124) THEN GOTO 21010
33800     IF (X=125) THEN GOTO 34000
33900 GOTO 32200
34000 NEXT: RETURN
34100 LOCATE 24,5:PRINT"Specify drive in the range A->M where text files will be located. ";
34200 LINE INPUT;HJ$
34300 IF LEN(HJ$)<>1 THEN GOTO 34100
34400 GOSUB 57400
34500 IF HJ$<"A" OR HJ$>"M" THEN GOTO 34100
34600 TDEV$=HJ$
34700 GOTO 27000
36800 LOCATE 24,5:PRINT"What version of DOS will RBBS-PC be running under (1 or 2)?";
36900 LINE INPUT;HJ$
37000 B1%=VAL(HJ$)
37100 IF B1%<1 OR B1%>2 THEN GOTO 36800
37200 DOSVER%=B1%:GOTO 27000
40000 CLS:COLOR 0,7,0:LOCATE 1,23:PRINT"RBBS-PC CPC12.1 Default Configuration";:COLOR FGR,BGR,BDR
40100 CURPAGE=3
40200 LOCATE 1,68:PRINT"Page "+STR$(CURPAGE)+" of "+STR$(MAXPAGE)
40300 LOCATE  3,10:PRINT"41. Drive with the following RBBS-PC system files- "+RDEV$
40400 LOCATE  4,10:PRINT"42. System file containing messages is named ----- "+MESSAGES$
40500 LOCATE  5,10:PRINT"43. System file for packing messages is named ---- "+MESSAGES.BAK$
40600 LOCATE  6,10:PRINT"44. System file for 'callers' is named ----------- "+CALLERS$
40700 LOCATE  7,10:PRINT"45. System file for comments to SYSOP is named --- "+COMMENTS$
40800 LOCATE  8,10:PRINT"46. System file for recording users is named ----- "+USERS$
40900 LOCATE  9,10:PRINT"47. System file of 'long' callers is named ------- "+LONGCALR$
41000 LOCATE 10,10:PRINT"48. Are system bulletins to be 'optional'? ------- "+M15$
41100 LOCATE 11,10:PRINT"49. Foreground color (for color monitors) is -----"STR$(FGR)
41200 LOCATE 12,10:PRINT"50. Background color (for color monitors) is -----"STR$(BGR)
41300 LOCATE 13,10:PRINT"51. The border color (for color monitors) is -----"STR$(BDR)
41310 LOCATE 14,10:PRINT"52. The modem speaker default is ----------------- "+M14$
41320 LOCATE 15,10:PRINT"53. Remind users of messages that they left ------ "+M16$
41330 LOCATE 16,10:PRINT"54. BASIC files are to be considered TOKENIZED --- "+M17$
41340 LOCATE 17,10:PRINT"55. Name of the 'BATCH' file to start RBBS-PC ---- "+RBBS$
41350 LOCATE 18,10:PRINT"56. Name of the 'BATCH' file for CTTY command ---- "+CTTY$
41360 LOCATE 19,10:PRINT"57. Omit ";DIR$;" from N)ew command ";STRING$(22-LEN(DIR$),"-");" ";OMIT.DIR$
41370 LOCATE 20,10:PRINT"58. Omit ";UDIR$;" from N)ew command ";STRING$(22-LEN(UDIR$),"-");" ";OMIT.UDIR$
41380 LOCATE 21,10:PRINT"59. Is system 'welcome' interruptable? ----------- "+M18$
41400 LOCATE 22,10:PRINT"60. Select another page number.  Current page # is"STR$(CURPAGE)
41500 LOCATE 24,5:PRINT"Select number of configuration parameter to change (99 to update): ";:LOCATE 24,70:PRINT STRING$(10,32);
41600 TFGR=FGR+16:COLOR TFGR,BGR,BDR:LOCATE 24,70:PRINT"  ";:GOSUB 57300
41700 LOCATE 24,70
41800 COLOR FGR,BGR,BDR
41900 LINE INPUT;HJ$:IF HJ$="" THEN GOTO 41700
42000 LOCATE 24,5:PRINT STRING$(75,32);
42100 IF HJ$="41" THEN GOSUB 20000: GOTO 40000
42200 IF HJ$="42" THEN GOSUB 32100: GOTO 40000
42300 IF HJ$="43" THEN GOSUB 32100: GOTO 40000
42400 IF HJ$="44" THEN GOSUB 32100: GOTO 40000
42500 IF HJ$="45" THEN GOSUB 32100: GOTO 40000
42600 IF HJ$="46" THEN GOSUB 32100: GOTO 40000
42700 IF HJ$="47" THEN GOSUB 32100: GOTO 40000
42800 IF HJ$="48" THEN GOTO 48200
42900 IF HJ$="49" THEN GOSUB 43500: GOTO 43600
43000 IF HJ$="50" THEN GOSUB 43500: GOTO 44200
43100 IF HJ$="51" THEN GOSUB 43500: GOTO 44800
43110 IF HJ$="52" THEN GOTO 46400
43120 IF HJ$="53" THEN GOTO 47300
43130 IF HJ$="54" THEN GOTO 49100
43140 IF HJ$="55" THEN GOTO 49145
43150 IF HJ$="56" THEN GOTO 49195
43160 IF HJ$="57" THEN GOTO 49245
43170 IF HJ$="58" THEN GOTO 49290
43180 IF HJ$="59" THEN GOTO 49335
43200 IF HJ$="60" THEN GOTO 25386
43300 IF HJ$="99" THEN GOTO 25400
43400 GOTO 41500
43500 LOCATE 24,5:PRINT"(See the description of the COLOR statement in Basic.)";:RETURN
43600 LOCATE 25,5:PRINT"Enter foreground color (a value between 0 and 15)";
43700 LINE INPUT;HJ$
43800 B1=VAL(HJ$)
43900 IF B1<0 OR B1>15 THEN GOTO 43600
44000 FGR=B1
44100 GOTO 40000
44200 LOCATE 25,5:PRINT"Enter background color (a value between 0 and 7)";
44300 LINE INPUT;HJ$
44400 B1=VAL(HJ$)
44500 IF B1<0 OR B1>7 THEN GOTO 44200
44600 BGR=B1
44700 GOTO 40000
44800 LOCATE 25,5:PRINT"Enter the border color (a value between 0 and 7)";
44900 LINE INPUT;HJ$
45000 B1=VAL(HJ$)
45100 IF B1<0 OR B1>7 THEN GOTO 44800
45200 BDR=B1
45300 GOTO 40000
45400 L1=VAL(X$)
45500 FF=L1-41
45600 ON FF GOSUB 45700,45800,45900,46000,46100,46200,46300
45700 MESSAGES$=HJ$:GOTO 40000
45800 MESSAGES.BAK$=HJ$:GOTO 40000
45900 CALLERS$=HJ$:GOTO 40000
46000 COMMENTS$=HJ$:GOTO 40000
46100 USERS$=HJ$:GOTO 40000
46200 LONGCALR$=HJ$:GOTO 40000
46300 R$=HJ$:GOTO 40000
46400 LOCATE 24,5:PRINT"Modem speaker default? (ON or OFF) ";
46500 LINE INPUT;HJ$
46600 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 46400
46700 GOSUB 57400
46800 IF HJ$="ON" THEN GOTO 47100
46900 IF HJ$="OFF" THEN GOTO 47100
47000 GOTO 46400
47100 M14$=HJ$
47200 GOTO 40000
47300 LOCATE 24,5:PRINT"Remind users of the messages they left? (YES or NO) ";
47400 LINE INPUT;HJ$
47500 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 47300
47600 GOSUB 57400
47700 IF HJ$="NO" THEN GOTO 48000
47800 IF HJ$="YES" THEN GOTO 48000
47900 GOTO 47300
48000 M16$=HJ$
48100 GOTO 40000
48200 LOCATE 24,5:PRINT"Are system bulletins to be optional? (YES or NO) ";
48300 LINE INPUT;HJ$
48400 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 48200
48500 GOSUB 57400
48600 IF HJ$="NO" THEN GOTO 48900
48700 IF HJ$="YES" THEN GOTO 48900
48800 GOTO 48200
48900 M15$=HJ$
49000 GOTO 40000
49100 LOCATE 24,5:PRINT"Are BASIC files to be considered TOKENIZED? (YES or NO) ";
49105 LINE INPUT;HJ$
49110 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49100
49115 GOSUB 57400
49120 IF HJ$="NO" THEN GOTO 49135
49125 IF HJ$="YES" THEN GOTO 49135
49130 GOTO 49100
49135 M17$=HJ$
49140 GOTO 40000
49145 X$=HJ$:LOCATE 24,5:PRINT"Specify drive (A->M) where file for option "+X$+" will be located. ";
49150 LINE INPUT;HJ$
49155 IF LEN(HJ$)<>1 THEN GOTO 49145
49160 GOSUB 57400
49165 IF HJ$<"A" OR HJ$>"M" THEN GOTO 49145
49170 TDEV$=HJ$
49175 GOSUB 32200
49180 EXT$=RIGHT$(HJ$,4)
49185 IF EXT$=".BAT" THEN RBBS$=TDEV$+":"+HJ$:GOTO 40000
49190 GOTO 49175
49195 X$=HJ$:LOCATE 24,5:PRINT"Specify drive (A->M) where file for option "+X$+" will be located. ";
49200 LINE INPUT;HJ$
49205 IF LEN(HJ$)<>1 THEN GOTO 49195
49210 GOSUB 57400
49215 IF HJ$<"A" OR HJ$>"M" THEN GOTO 49195
49220 TDEV$=HJ$
49225 GOSUB 32200
49230 EXT$=RIGHT$(HJ$,4)
49235 IF EXT$=".BAT" THEN CTTY$=TDEV$+":"+HJ$:GOTO 40000
49240 GOTO 49225
49245 LOCATE 24,5:PRINT"Is ";DIR$;" omitted from the N)ew command? (YES or NO) ";
49250 LINE INPUT;HJ$
49255 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49245
49260 GOSUB 57400
49265 IF HJ$="NO" THEN GOTO 49280
49270 IF HJ$="YES" THEN GOTO 49280
49275 GOTO 49245
49280 OMIT.DIR$=HJ$
49285 GOTO 40000
49290 LOCATE 24,5:PRINT"Is ";UDIR$;" omitted from the N)ew command? (YES or NO) ";
49295 LINE INPUT;HJ$
49300 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49290
49305 GOSUB 57400
49310 IF HJ$="NO" THEN GOTO 49325
49315 IF HJ$="YES" THEN GOTO 49325
49320 GOTO 49290
49325 OMIT.UDIR$=HJ$
49330 GOTO 40000
49335 LOCATE 24,5:PRINT"Is system 'welcome' interruptable (YES OR NO) ";
49340 LINE INPUT;HJ$
49345 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49335
49350 GOSUB 57400
49355 IF HJ$="NO" THEN GOTO 49370
49360 IF HJ$="YES" THEN GOTO 49370
49365 GOTO 49335
49370 M18$=HJ$
49375 GOTO 40000
49400 CLS:COLOR 0,7,0:LOCATE 1,23:PRINT"RBBS-PC CPC12.1 Default Configuration";:COLOR FGR,BGR,BDR
49401 CURPAGE=4
49402 LOCATE 1,68:PRINT"Page "+STR$(CURPAGE)+" of "+STR$(MAXPAGE)
49403 LOCATE  3,10:PRINT"61. Drive with RBBS menues (RAM recommended) ----- "+MDEV$
49404 LOCATE  4,10:PRINT"62. The SYSOP's command menu is named ------------ "+MENU1$
49405 LOCATE  5,10:PRINT"63. The main messages subsystem menu is named ---- "+MENU2$
49406 LOCATE  6,10:PRINT"64. The file subsystem menu is named ------------- "+MENU3$
49407 LOCATE  7,10:PRINT"65. The window subsystem menu is named ----------- "+MENU4$
49408 LOCATE  8,10:PRINT"66. Is the window subsystem available? ----------- "+M21$
49409 LOCATE  9,10:PRINT"67. Are graphics menues available? --------------- "+M20$
49410 LOCATE 10,10:PRINT"68. Remind users of # uploads and downloads? ----- "+M19$
49411 LOCATE 11,10:PRINT"69. Default user page length is ------------------"STR$(PL)
49412 LOCATE 12,10:PRINT"70. Default user line width is -------------------"STR$(LW)
49430 LOCATE 22,10:PRINT"80. Select another page number.  Current page # is"STR$(CURPAGE)
49432 LOCATE 24,5:PRINT"Select number of configuration parameter to change (99 to update): ";:LOCATE 24,70:PRINT STRING$(10,32);
49434 TFGR=FGR+16:COLOR TFGR,BGR,BDR:LOCATE 24,70:PRINT"  ";:GOSUB 57300
49436 LOCATE 24,70
49438 COLOR FGR,BGR,BDR
49440 LINE INPUT;HJ$:IF HJ$="" THEN GOTO 49436
49442 LOCATE 24,5:PRINT STRING$(75,32);
49444 IF HJ$="61" THEN GOTO 49548
49446 IF HJ$="62" THEN GOSUB 32100: IF LEN(HJ$)>7 OR INSTR(HJ$,".") THEN HJ$="62":GOTO 49446 ELSE MENU1$=HJ$:GOTO 49400
49448 IF HJ$="63" THEN GOSUB 32100: IF LEN(HJ$)>7 OR INSTR(HJ$,".") THEN HJ$="63":GOTO 49448 ELSE MENU2$=HJ$:GOTO 49400
49450 IF HJ$="64" THEN GOSUB 32100: IF LEN(HJ$)>7 OR INSTR(HJ$,".") THEN HJ$="64":GOTO 49450 ELSE MENU3$=HJ$:GOTO 49400
49452 IF HJ$="65" THEN GOSUB 32100: IF LEN(HJ$)>7 OR INSTR(HJ$,".") THEN HJ$="65":GOTO 49452 ELSE MENU4$=HJ$:GOTO 49400
49454 IF HJ$="66" THEN GOTO 49470
49456 IF HJ$="67" THEN GOTO 49488
49458 IF HJ$="68" THEN GOTO 49506
49460 IF HJ$="69" THEN GOTO 49524
49462 IF HJ$="70" THEN GOTO 49536
49464 IF HJ$="80" THEN GOTO 25386
49466 IF HJ$="99" THEN GOTO 25400
49468 GOTO 49432
49470 LOCATE 24,5:PRINT"Is the window subsystem available? (YES or NO) ";
49472 LINE INPUT;HJ$
49474 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49470
49476 GOSUB 57400
49478 IF HJ$="NO" THEN GOTO 49484
49480 IF HJ$="YES" THEN GOTO 49484
49482 GOTO 49470
49484 M21$=HJ$
49486 GOTO 49400
49488 LOCATE 24,5:PRINT"Are graphics menues available? (YES or NO) ";
49490 LINE INPUT;HJ$
49492 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49488
49494 GOSUB 57400
49496 IF HJ$="NO" THEN GOTO 49502
49498 IF HJ$="YES" THEN GOTO 49502
49500 GOTO 49488
49502 M20$=HJ$
49504 GOTO 49400
49506 LOCATE 24,5:PRINT"Remind users of # uploads and downloads? (YES or NO) ";
49508 LINE INPUT;HJ$
49510 IF LEN(HJ$)<1 OR LEN(HJ$)>3 THEN GOTO 49506
49512 GOSUB 57400
49514 IF HJ$="NO" THEN GOTO 49520
49516 IF HJ$="YES" THEN GOSUB 57300:LOCATE 25,5:PRINT"Remember to use the RBBS utility programs RBBSUTIL1 and RBBSUTIL2!!";:IWAIT!=FNTI!+5:GOSUB 58000
49520 M19$=HJ$
49522 GOTO 49400
49524 LOCATE 24,5:PRINT"Default user page length?(a value between 0 and 255)";
49526 LINE INPUT;HJ$
49528 B1=VAL(HJ$)
49530 IF B1<0 OR B1>255 THEN GOTO 49524
49532 PL=B1
49534 GOTO 49400
49536 LOCATE 24,5:PRINT"Default user line width? (a value between 0 and 255)";
49538 LINE INPUT;HJ$
49540 B1=VAL(HJ$)
49542 IF B1<0 OR B1>255 THEN GOTO 49536
49544 LW=B1
49546 GOTO 49400
49548 LOCATE 24,5:PRINT"Specify drive in the range A->M where text files will be located. ";
49550 LINE INPUT;HJ$
49552 IF LEN(HJ$)<>1 THEN GOTO 49548
49554 GOSUB 57400
49556 IF HJ$<"A" OR HJ$>"M" THEN GOTO 49548
49558 MDEV$=HJ$
49560 GOTO 49400
50000 IF M5$="NOVICE" THEN XPR=0
50100 IF M5$="EXPERT" THEN XPR=-1
50200 FDEV$=M7$+M6$
50300 IF M10$="OFF" THEN BELL=0
50400 IF M10$="ON" THEN BELL=-1
50500 IF M11$="YES" THEN PRT=TRUE
50600 IF M11$="NO" THEN PRT=FALSE
50700 IF M12$="COMPILED" THEN COMPILED=TRUE
50800 IF M12$="BASICA" THEN COMPILED=FALSE
50900 IF M14$="OFF" THEN SPEAKER=0
51000 IF M14$="ON" THEN SPEAKER=-1
51100 IF M15$="YES" THEN OPTBUL=TRUE
51200 IF M15$="NO" THEN OPTBUL=FALSE
51300 IF M16$="YES" THEN REMIND=TRUE
51400 IF M16$="NO" THEN REMIND=FALSE
51500 IF M17$="YES" THEN BTOK=TRUE
51600 IF M17$="NO" THEN BTOK=FALSE
51700 IF M18$="YES" THEN OPTWEL=TRUE
51800 IF M18$="NO" THEN OPTWEL=FALSE
51900 IF M19$="YES" THEN UPLDDLD=TRUE
52000 IF M19$="NO" THEN UPLDDLD=FALSE
52100 IF M20$="YES" THEN GRAPHICS=TRUE
52200 IF M20$="NO" THEN GRAPHICS=FALSE
52300 IF M21$="YES" THEN WINDW=TRUE
52400 IF M21$="NO" THEN WINDW=FALSE
52500 OPEN "O",#1,CONFIG$
52600 IF INSTR(RDEV$,":")<1 THEN RDEV$=RDEV$+":"
52610 IF INSTR(MDEV$,":")<1 THEN MDEV$=MDEV$+":"
52700 IF INSTR(TDEV$,":")<1 THEN TDEV$=TDEV$+":"
52710 MENU1$=MDEV$+MENU1$
52720 MENU2$=MDEV$+MENU2$
52730 MENU3$=MDEV$+MENU3$
52740 MENU4$=MDEV$+MENU4$
52800 WRITE #1,FDEV$,RDEV$,PASS1$,PASS2$,NFIR$,NLAS$,CBACK,ANNOY.ON,ANNOY.OFF,TIME.MAX!,MESSAGE.MAX,LAPSE.MAX,UDIR$,XPR,B,BELL,PRT,COMPILED,MENU1$,MENU2$,MENU3$,MENU4$,OPTWEL,UPLDDLD,PL,LW,GRAPHICS,WINDW,MDEV$
52900 MESSAGES$=RDEV$+MESSAGES$
53000 MESSAGES.BAK$=RDEV$+MESSAGES.BAK$
53100 CALLERS$=RDEV$+CALLERS$
53200 COMMENTS$=RDEV$+COMMENTS$
53300 USERS$=RDEV$+USERS$
53400 LONGCALR$=RDEV$+LONGCALR$
53500 R$=RDEV$+R$
53600 BULLETIN$=TDEV$+BULLETIN$
53700 BULLET1$=TDEV$+BULLET1$
53800 BULLET2$=TDEV$+BULLET2$
53900 BULLET3$=TDEV$+BULLET3$
54000 BULLET4$=TDEV$+BULLET4$
54100 BULLET5$=TDEV$+BULLET5$
54200 BULLET6$=TDEV$+BULLET6$
54300 HELP01$=TDEV$+HELP01$
54400 HELP02$=TDEV$+HELP02$
54500 HELP03$=TDEV$+HELP03$
54600 HELP04$=TDEV$+HELP04$
54700 HELP05$=TDEV$+HELP05$
54800 HELP06$=TDEV$+HELP06$
54900 HELP07$=TDEV$+HELP07$
55000 WELCOME$=TDEV$+WELCOME$
55100 NEWUSER$=TDEV$+NEWUSER$
55200 WRITE #1,MESSAGES$,MESSAGES.BAK$,CALLERS$,COMMENTS$,USERS$,LONGCALR$,WELCOME$,NEWUSER$,DIR$,M13$,OPTBUL,SPEAKER,TDEV$,DOSVER%,FGR,BGR,BDR,RBBS$,CTTY$,OMIT.DIR$,OMIT.UDIR$
55300 WRITE #1,HELP01$,HELP02$,HELP03$,HELP04$,HELP05$,HELP06$,HELP07$,BULLETIN$,BULLET1$,BULLET2$,BULLET3$,BULLET4$,BULLET5$,BULLET6$,REMIND,BTOK
55400 CLOSE #1
55500 CLS:LOCATE 12,1,1:PRINT "RBBS-PC configuration description file, RBBS-PC.DEF, now on default drive.":GOSUB 57300
55600 PRINT "NOTE:  RBBS-PC CPC12.1 corrects the problem that caused the CALLERS file to":GOSUB 57300
55700 PRINT "       grow rapidly.  If you wish to continue using your 12.0 CALLERS file,'":GOSUB 57300
55800 PRINT "       run the utility FIXFILES.BAS once (and only once) against it.":GOSUB 57300
55900 GOTO 57000
56000 REM
56100 REM * HANDLE ERROR CONDITIONS *
56200 IF ERR=53 AND ERL=6110 THEN PRINT CONFIG$+" file not found.  A new one will be created.":IWAIT!=FNTI!+5:GOSUB 57900:GOTO 6200
56300 IF ERR=62 AND (ERL=6120 OR ERL=6122 OR ERL=6124) THEN PRINT CONFIG$+" from a version earlier than CPC12.1 on default drive.":PRINT "Please delete and rerun CONFIG.":GOSUB 57000
56400 IF ERR=61 THEN PRINT "ERROR - IBM DOS DISKETTE FULL ":GOTO 57000
56500 IF ERR=67 THEN PRINT "ERROR - IBM DOS DIRECTORY FULL":GOTO 57000
56600 IF ERR=70 THEN PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED":GOTO 57000
56700 IF ERR=71 THEN PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE":GOTO 57000
56800 IF ERR=72 THEN PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE":GOTO 57000
56900 PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
57000 IWAIT!=FNTI!+30
57100 GOSUB 57900
57200 SYSTEM
57300 FOR WQ=1 TO 3:SOUND 1000*WQ,1:NEXT:RETURN
57400 ' Convert Lower Case to Upper Case -------
57500 FOR Z=1 TO LEN(HJ$)
57600 MID$(HJ$,Z,1)=CHR$(ASC(MID$(HJ$,Z,1))+32*(ASC(MID$(HJ$,Z,1))>96))
57700 NEXT Z
57800 RETURN
57900 ' wait routine
58000 IF FNTI!<IWAIT! THEN GOTO 58000
58100 RETURN

FIXFILES.BAS

100 'FIXFILES.BAS   -  Cleans up CALLERS file & ADDS A NEW FIELD TO USERS.
101 ' by Jon Martin       12/08/83.
102 DEFINT A-Z
103 DEF FNCD$(A1$)=CHR$(VAL(MID$(A1$,7,2)))+CHR$(VAL(MID$(A1$,1,2)))+CHR$(VAL(MID$(A1$,4,2)))
104 DEF FNUD$(A1$)=RIGHT$(STR$(ASC(MID$(A1$,2))),2)+"/"+RIGHT$(STR$(ASC(MID$(A1$,3))),2)+"/"+RIGHT$(STR$(ASC(A1$)),2)
105 DEF FNDC$(A1$)=RIGHT$(A1$,2)+LEFT$(A1$,2)+MID$(A1$,4,2)
106 KEY OFF
107 CLS
108 PRINT "THIS PROGRAM IS INTENDED TO BE USED TO ELIMINATE THE EXTRA"
109 PRINT "RECORDS IN THE CALLERS FILE AND ALSO TO ADD A NEW FIELD TO"
110 PRINT "THE USERS FILE.  THIS PROGRAM ASSUMES THAT THE FILENAME OF"
111 PRINT "THE CALLERS FILE IS (CALLERS) AND THAT THE NAME OF THE USER"
112 PRINT "FILE IS (USERS).  THIS PROGRAM WILL CREATE A NEW FILE WITH"
113 PRINT "FILENAME OF CALLERS.NEW.  THIS NEW FILE SHOULD BE USED TO"
114 PRINT "REPLACE YOUR OLD CALLERS FILE."
115 PRINT:PRINT:INPUT"ARE YOU READY TO PROCEED WITH THE CONVERSION";Y$
116 IF LEFT$(Y$,1) = "Y" OR LEFT$(Y$,1) = "y" THEN 118
117 PRINT "CONVERSION ABORTED.  NO FILES WERE MODIFIED":GOTO 1000
118 CLS:PRINT "CONVERSION OF CALLERS FILE STARTED AT ";TIME$
128 OPEN"R",1,"CALLERS",64:FIELD 1,64 AS DATA1$
129 OPEN"R",2,"CALLERS.NEW",64:FIELD 2,64 AS DATA2$
130 FILE.END = (LOF(1)/64 +1)
133 PRINT:PRINT "CALLERS FILE CONTAINS ";FILE.END-1;" RECORDS"
134 LOCATE 5,1:PRINT "CURRENT RECORD BEING PROCESSED =";
135 INDEX1 = 1:INDEX2=1
140 WHILE INDEX1 <> FILE.END
150   GET 1,INDEX1
160   LOCATE 5,34:PRINT INDEX1;
170   IF LEFT$(DATA1$,13) = STRING$(13,CHR$(0)) THEN  210
175   LSET DATA2$=DATA1$
180   PUT 2,INDEX2
190   INDEX2=INDEX2+1
210   INDEX1=INDEX1+1
220 WEND
230 CLOSE 1,2
280 LOCATE 7,1:PRINT "THE CALLERS.NEW FILE RECORD COUNT IS ";INDEX2-1
290 PRINT "CONVERSION OF CALLERS FILE ENDED AT ";TIME$
300 PRINT:PRINT:INPUT"ARE YOU READY TO PROCEED WITH USER FILE CONVERSION";Y$
310 IF LEFT$(Y$,1) = "Y" OR LEFT$(Y$,1) = "y" THEN 330
320 PRINT "CONVERSION ABORTED.  USER FILE WAS NOT MODIFIED":GOTO 1000
330 CLS:PRINT "CONVERSION OF USERS FILE STARTED AT ";TIME$
540 OPEN "R",2,"USERS",128:FIELD 2,31 AS N$,15 AS PW$,1 AS ST$,14 AS OP$,1 AS SCL$,24 AS CS$,20 AS MA$,14 AS TD$,3 AS LND$
550 ENDFILE=LOF(2)/128
560 UIX=UIX+1
570 IF UIX>ENDFILE THEN 670
580 GET 2,UIX
630 IF LEFT$(TD$,1)=" " THEN MID$(TD$,1,1)="0"
640 LSET LND$=FNCD$(LEFT$(TD$,8))
650 PUT 2,UIX
660 GOTO 560
670 CLOSE 2
680 PRINT "CONVERSION OF USERS FILE ENDED AT ";TIME$
1000 END

RBBS-PC.BAS

3 REM $linesize: 132
25 SCREEN 0,1,0:WIDTH 80:CLS:KEY OFF:LOCATE,,0:PRINT TAB(60)"tm":PRINT TAB(16)STRING$(15,205)" U S E R W A R E "STRING$(15,205):PRINT:PRINT TAB(17)"Capital PC User Group User-Supported Software":PRINT:PRINT TAB(7)CHR$(214)STRING$(62,196)CHR$(183)
28 FOR I=1 TO 10:READ A$:PRINT TAB(7)CHR$(186);A$;SPACE$(62-LEN(A$));CHR$(186):NEXT:PRINT TAB(7)CHR$(211)STRING$(62,196)CHR$(189):PRINT TAB(27)"Copyright (c) 1983 Tom Mack, 10210 Oxfordshire Rd., Great Falls, Virginia  22066
30 DATA"    RBBS-PC CPC12.1 users should consider a contribution to":DATA"":DATA"                 Capitol PC Software Exchange":DATA"                     Post Office Box 6128
35 DATA"                Silver Spring, Maryland  20906":DATA"":DATA"    RBBS-PC CPC12.1 may be freely distributed providing":DATA"    1.  RBBS-PC CPC12 is not distributed in modified form.
40 DATA"    2.  No fee or consideration is charged.":DATA"    3.  This notice is not bypassed or removed.":DEF FNTX!=CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60)+(VAL(MID$(TIME$,4,2))*60)+(VAL(MID$(TIME$,7,2))*1))):IWAIT!=FNTX!+10
43 DEFINT A-Z:DEF SEG=0:MLSW%=PEEK(&H1FE)+256*PEEK(&H1FF):IF MLSW%=0 THEN GOTO 44 ELSE PRINT "RBBS-PC running under MultiLink
44 IF FNTX!<IWAIT! THEN 44
90 CLOSE:CLEAR:WIDTH 80:SCREEN 0,0,0:KEY OFF:PAUSE$=CHR$(19):BELL$=CHR$(7):BK2$=CHR$(8):XOFF$=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$+"  ",INSTR(A1$+"  ","  ")-1):DEF SEG=0:MLSW%=PEEK(&H1FE)+256*PEEK(&H1FF):A!=FRE("A"):TI$=TIME$:ON ERROR GOTO 13000:DEF SEG
104 IF MLSW% THEN GOTO 115
105 ON KEY(1)GOSUB 31000:ON KEY(2) GOSUB 32000:ON KEY(3) GOSUB 33000:ON KEY(4) GOSUB 33040:ON KEY(5) GOSUB 14000:ON KEY(6) GOSUB 9500:ON KEY(7) GOSUB 15000:ON KEY(8) GOSUB 58000:ON KEY(9) GOSUB 39000:ON KEY(10) GOSUB 30000
115 DEFINT A-Z:CR$=CHR$(13):LF$=CHR$(10):ABT$=CHR$(11):VERSION$="CPC12.1F (compilable)":CONFIG$="RBBS-PC.DEF
118 OPEN "I",#1,CONFIG$:INPUT #1,FDEV$,RDEV$,PASS1$,PASS2$,NFIR$,NLAS$,CBACK,ANNOY.ON,ANNOY.OFF,TIME.MAX!,MESSAGE.MAX,LAPSE.MAX,UDIR$,XPR,BULL,BELL,PRT,COMPILED,MENU1$,MENU2$,MENU3$,MENU4$,OPTWEL,ULDDLD,PL,LW,GRAPHICS,WINDW,MDEV$
120 INPUT#1,MESSAGES$,MESSAGES.BAK$,CALLERS$,COMMENTS$,USERS$,LONGCALR$,WELCOME$,NEWUSER$,DIR$,CP$,OPTBUL,SPEAKER,TDEV$,DOSVER,FGR,BGR,BDR,RBBS$,CTTY$,OMIT.DIR$,OMIT.UDIR$
121 INPUT#1,HELP01$,HELP02$,HELP03$,HELP04$,HELP05$,HELP06$,HELP07$,BULLETIN$,BULLET1$,BULLET2$,BULLET3$,BULLET4$,BULLET5$,BULLET6$,REMIND,BTOK:CLOSE#1:LOCATE ,,1:IF COMPILED THEN MID$(VERSION$,10)="--(compiled)
123 FOR I=1 TO 10:KEY I,"":IF MLSW=0 THEN KEY(I) ON
124 NEXT I:IF MLSW THEN GOSUB 60200
125 BK$=CHR$(8)+CHR$(32)+CHR$(8):BK1$=CHR$(29)+CHR$(32)+CHR$(29):TIME.MAX!=TIME.MAX!*60:MARGIN=72:ERR.COUNT=0:ERR.MAX=10:TIME.OUT!=3*60:TSCRN.MAX=120
129 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$(30),C$(30),FLS$(128):GOSUB 135:GOTO 175
135 CLOSE#1,2:LASTR=0:R=2:OPEN "R",#1,MESSAGES$:FIELD #1,128 AS R$:IF LOF(1)=0 THEN LSET R$="     1  -1 0"+SPACE$(39)+"-1 0-1":PUT 1 ELSE GET 1
147 LASTM=VAL(LEFT$(R$,8)):AVAILABLE=VAL(MID$(R$,9,2)):ANNOY=VAL(MID$(R$,52,2)):SYSOPNEXT=VAL(MID$(R$,54,2)):LPRT=VAL(MID$(R$,56,2))
150 GET 1,R:IF MID$(R$,116,1)=CHR$(226)THEN DEAD=-1
155 RR=VAL(MID$(R$,118)):IF DEAD THEN 165 ELSE IF RR<1 THEN RR=1:IF EOF(1)THEN 170
160 LASTR=LASTR+1:M(LASTR,1)=R:M(LASTR,2)=VAL(MID$(R$,2,4))
165 R=R+RR:DEAD=0:GOTO 150
170 FIRSTM=M(1,2):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):BPS=&H180:NBPS=&H100:FALSE=0:TRUE=NOT FALSE:BIT.8=FALSE:ONLINE=FALSE:GOSUB 56000:CDX=LOF(2)/64
181 GET 2,CDX:IF LEFT$(CALRINFO$,13) = STRING$(13,CHR$(0)) THEN CDX=CDX-1
183 PRINT"RBBS-PC Version ";VERSION$:PRINT"Free memory: ";FRE("A")
187 IF LPRT THEN GOSUB 480:LPRINT:LPRINT:LPRINT"RBBS-PC Version ";VERSION$;" up at "TIM$" on "DATE$:GOSUB 50500
189 PRINT:PRINT"Enter:":PRINT"       <ESC> for sysop sign-on maintenance/page.":PRINT"       <F1>  to return to DOS.":PRINT"       <F2>  to return to BASIC.
191 PRINT"       <F3>  to toggle Line Printer on/off.":PRINT"       <F4>  to toggle SYSOP Page Bell on/off.":PRINT"       <F5>  to force on-line state.":PRINT"       <F6>  to toggle SYSOP Available.
194 PRINT"       <F7>  SYSOP gets system after this caller.":PRINT"       <F8>  Grant temporary SYSOP privileges.":PRINT"       <F9>  Toggle SNOOP on/off.":PRINT"      <F10>  Force CHAT - (ESC) to end.
200 OUT MCR,&H4:CLOSE#3:GOSUB 50500:IF INP(MSR)<128 THEN 201 ELSE 200
201 OPEN CP$+":300,E,7,1,RS,CD,DS" AS #3:PRINT#3,"ATZ":GOSUB 50510:IF SPEAKER THEN MB$="M1" ELSE MB$="M0
212 PRINT#3,"ATS2="CHR$(255);
220 PRINT#3,MB$;"Q1 S4=13 S5=130 S10=20 S0=255 S1?":INPUT#3,X$:GOSUB 480:PRINT:PRINT"RBBS-PC is ready for calls at "TIM$" on "DATE$:PRINT:PRINT"<< Screen will clear after time delay to prevent burn-in of display. >>":PRINT:IF NOT PRT THEN LOCATE,,0
235 TSCRN!=FNTI!:GOSUB 49000:GOSUB 950
239 RB=2:IF CBACK>0 THEN RB=2400:COLOR 7,0,0 ELSE COLOR FGR,BGR,BDR
240 X=1:WHILE(INP(MSR)AND &H40)=0:X$=INKEY$:IF MLSW THEN FK$=X$:GOSUB 60000:IF X$=CHR$(63) OR SYSOPNEXT THEN GOTO 255
250 IF X$=CHR$(27) OR SYSOPNEXT THEN GOTO 255 ELSE GOTO 256
255 LOCATE 24,1:PRINT"Sysop is in.":TI!=FNTI!:GOSUB 14500:LOCAL=-1:CLLRCS$="LOCAL":GOTO 470
256 IF X$=STP$ THEN SYSTEM
260 IF RB THEN RB=RB-1:IF(RB=0 AND PRT AND CBACK<>0)THEN PRINT"Ringback timeout
265 MMM!=FNTI!-TSCRN!:IF MMM!>TSCRN.MAX THEN LOCATE,,0:CLS:TSCRN!=FNTI!
270 WEND:IF CBACK=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 PRT THEN PRINT"Ring ";X$
300 IF RB AND(VAL(X$)<=X)AND(VAL(X$)<>0)THEN 320 ELSE X=VAL(X$)
310 IF X<CBACK THEN 239
320 CLOSE 3:OPEN CP$+":300,E,7,1,RS,CD,DS" AS #3:PRINT#3,"ATQ1E1S0=0A":CLOSE#3:OPEN CP$+":300,N,8,1,CD,DS,CS" AS 3:Q=&H180:QQ=&H60:IF PRT THEN LOCATE,,1
331 FOR JJ=1 TO 600:SOUND 32767,1:IF INP(MSR)>127 THEN 333
332 NEXT JJ:GOTO 13540
333 GOSUB 21280:GOSUB 50500:OUT LCR,&H3:BIT.8=TRUE
335 IF INP(MSR)<128 THEN 13540 ELSE IF EOF(3)THEN 335
340 A=0:A=ASC(INPUT$(LOC(3),3)):IF A=13 THEN 350 ELSE IF A=141 THEN OUT LCR,&H1A:BIT.8=FALSE:GOTO 350
345 SWAP Q,QQ:GOSUB 1654:OUT LCR,&H3:BIT.8=TRUE:GOTO 335
350 I=0:GOSUB 480:IF Q=&H60 THEN BPS=TRUE ELSE BPS=FALSE
355 TI!=FNTI!:IF TI!>CTI!THEN GOSUB 42000:ONLINE=TRUE:GOSUB 21280
360 LF=-1:UC=0:PRINT#3,LF$:PRINT#3,"CAN YOUR TERMINAL DISPLAY LOWER CASE";:GOSUB 1500:Z$=B$(1):GOSUB 5000:PRINT#3,"":IF BIT.8 THEN PARMS$="NO PARITY, 8 DATA BITS, 1 STOP BIT." ELSE PARMS$="EVEN PARITY, 7 DATA BITS, 1 STOP BIT.
365 IF BPS THEN BAUD$="1200 BAUD, " ELSE BAUD$="300 BAUD,
366 A$="RBBS-PC VERSION "+VERSION$:GOSUB 1400:A$=LF$+"OPERATING AT "+BAUD$+PARMS$:CR=2:GOSUB 1400:IF NO THEN UC=-1 ELSE IF NOT YES THEN 360
369 FILE$=WELCOME$:GR=0:IF BIT.8 AND GRAPHICS THEN A$="Do you want graphics":GOSUB 1500:IF YES AND LEN(WELCOME$)<8 THEN FILE$=FILE$+"G":GR=-1
370 IF OPTWEL THEN STI=-1 ELSE STI=0
380 CR=0:GOSUB 6000:CR=2:STI=0:GOSUB 1400:TRIES=0
400 IF TRIES>5 THEN 10620
410 TRIES=TRIES+1:GOSUB 1400:A$="What is your FIRST name":GOSUB 1500:IF Q=0 THEN 400 ELSE Z$=B$(1):GOSUB 5000:GOSUB 5100:FIRST$=FNSS$(Z$):IF Q=1 THEN 425
420 Z$=B$(2):GOTO 430
425 A$="     And your LAST Name":GOSUB 1500:Z$=B$(1)
430 GOSUB 5000:GOSUB 5100:LAST$=FNSS$(Z$):IF LEN(FIRST$)<2 OR LEN(LAST$)<2 OR (LEN(FIRST$)+LEN(LAST$))>30 THEN 400
440 IF FIRST$=PASS1$AND LAST$=PASS2$THEN CLLRCS$="REMOTE":GOTO 470
445 NAM$=MID$(FIRST$+" "+LAST$,1,31):IF INSTR(NAM$,"SYSOP")OR INSTR(NAM$,NFIR$+" "+NLAS$)THEN 10630
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 FIRST$=NFIR$:LAST$=NLAS$:NAM$="SYSOP":SYSOP=-1:PRT=TRUE:MARGIN=72:GOSUB 480:IF LOCAL THEN SYSOPNEXT=FALSE:GOSUB 15010:GOTO 850 ELSE 835
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 A$="Checking User File...":CR=2:GOSUB 1400:GET 1,1:IF NAM$<>MID$(R$,21,LEN(NAM$))THEN 600
540 LASTCALR=-1:A$="Welcome back, "+FIRST$+".":GOSUB 1400
600 GOSUB 9400:X$=NAM$+SPACE$(31-LEN(NAM$)):UIX#=0
615 GET 2:IF EOF(2)THEN 700 ELSE IF ASC(N$)=0 THEN UIX#=LOC(2):GOTO 615
620 IF X$<>N$ THEN 615 ELSE IF ST$<>"Y" THEN 10640 ELSE UIX#=LOC(2):CLLRCS$=CS$
625 I=0:IF Q=3 THEN Z$=B$(3):GOTO 635
630 GOSUB 1400:A$="Password (dots will echo) ":SECURE=-1:GOSUB 1500:SECURE=NOT SECURE:Z$=B$(1)
635 IF LEN(Z$)>15 THEN 630 ELSE GOSUB 5000:Z$=Z$+SPACE$(15-LEN(Z$))
640 IF Z$<>PW$ THEN I=I+1:IF I <4 THEN 630 ELSE 10650
643 IF SCL$="Y" THEN SYSOP=-1:GOSUB 1400:A$="You have been granted SYSOP privileges":CR=2:GOSUB 1400
645 NEWCALR=0:LCND$=FNDC$(FNUD$(LND$)):IF MID$(LCND$,3,1)=" " THEN MID$(LCND$,3,1)="0
655 IF MID$(LCND$,5,1)=" " THEN MID$(LCND$,5,1)="0
660 GOTO 800
700 NEWCALR=-1:IF UIX#THEN GET 2,UIX# ELSE UIX#=LOC(2)
710 A$="What type of system are you calling from":GOSUB 1500:IF Q=0 THEN 400 ELSE LSET MA$=B$(1)
715 A$="What CITY and STATE are you calling from":GOSUB 1500:IF Q=0 THEN 400 ELSE Z$=B$(1):GOSUB 5000
735 A$=NAM$+" from "+Z$:GOSUB 1400:A$="Is this correct":GOSUB 1500:GOSUB 1400:IF NOT YES THEN 400 ELSE LSET CS$=Z$:CLLRCS$=Z$+"
750 A$="Type in a message security PASSWORD (not IBMPC) ":GOSUB 1500:IF Q=0 THEN 750 ELSE IF LEN(B$(1))>15 THEN A$="15 Char. max":GOSUB 1400:GOTO 750 ELSE Z$=B$(1):GOSUB 5000
755 A$="Type in PASSWORD again for security double check":SECURE=-1:GOSUB 1500:SECURE=0:GOSUB 1400:SWAP Z$,B$(1):GOSUB 5000:IF B$(1)<>Z$THEN A$="Passwords don't match, start over !":GOSUB 1400:GOTO 750
760 GOSUB 5000:LSET PW$=Z$:GOSUB 1400:A$=FIRST$+", please remember your password for the next time you call.":CR=2:GOSUB 1400:LSET N$=NAM$:LSET ST$="Y
765 LSET N$=NAM$:LSET ST$="Y":LSET OP$=MKI$(0)+MKI$(0)+MKI$(-1)+MKI$(64)+STRING$(4,0)+CHR$(PL)+STRING$(1,0):LSET SCL$="N":LSET UDL$=MKI$(0):LSET UUL$=MKI$(0)
800 GOSUB 1400:A$="Logging "+NAM$+" to disk...":GOSUB 1400:TIMON=CVI(MID$(OP$,1,2))+1:LMSG=CVI(MID$(OP$,3,2)):LF=CVI(MID$(OP$,5,2)):MARGIN=CVI(MID$(OP$,7,2)):BELL=CVI(MID$(OP$,9,2)):XPR=CVI(MID$(OP$,11,2)):PL=ASC(MID$(OP$,13)):CL$=SCL$
805 DLD=CVI(UDL$):ULD=CVI(UUL$):IF LMSG>LASTM THEN LMSG=0
815 LSET OP$=MKI$(TIMON)+MID$(OP$,3):LSET TD$=D$+" "+TI$:PUT 2,UIX#:IF NOT NEWCALR THEN A$="You have signed on"+STR$(TIMON)+" times.":CR=2:GOSUB 1400
817 IF NOT ULDDLD THEN 825 ELSE A$="You have downloaded"+STR$(DLD)+" files and uploaded"+STR$(ULD)+" files":CR=2:GOSUB 1400
825 JJ=INSTR(CLLRCS$,"  "):CLLRCS$=LEFT$(CLLRCS$,(JJ-1))
835 IF BIT.8 THEN PARMS$="N,8,1" ELSE PARMS$="E,7,1
837 Z$=NAM$+" on at "+D$+", "+TIM$+" from "+CLLRCS$+", "+BAUD$+PARMS$:NAMSAV$=Z$+SPACE$(128-LEN(Z$))
841 IF LPRT THEN LPRINT"  "+Z$
845 IF LASTCALR THEN 945
850 GOSUB 950:IF BULL<1 THEN A$="Sorry, "+FIRST$+" there are no system bulletins today.":GOSUB 1400:GOTO 900
851 IF SYSOP THEN 900
853 IF NOT OPTBUL THEN 860
855 A$=FIRST$+", there are "+STR$(BULL)+" system bulletins today.  Do you wish to skip them":GOSUB 1500:IF YES THEN 900
860 FILE$=BULLETIN$:IF (BIT.8 AND GR AND LEN(BULLETIN$)<8) OR (LOCAL AND GR AND LEN(BULLETIN$)<8) THEN FILE$=FILE$+"G
865 GOSUB 6000:STI=-1:GOSUB 9700:STI=0:CR=2:GOSUB 1400:FIELD 1,10 AS A$,10 AS Y$,31 AS A$:GET 1,1:CALLN=VAL(Y$)+1
900 A$="":GOSUB 1400:A$="Checking message file...":CR=2:IF NOT LOCAL THEN GOSUB 1400
910 T=0:FOR R=1 TO LASTR:GET 1,M(R,1):IF INSTR(MID$(R$,37,31),NAM$)=0 THEN IF NOT SYSOP THEN 929
922 IF NOT SYSOP THEN IF T THEN 927 ELSE 925 ELSE 923
923 IF INSTR(MID$(R$,37,31),NAM$)=0 AND INSTR(MID$(R$,37,31),NFIR$+" "+NLAS$)=0 THEN 929 ELSE IF T THEN 927
925 A$="The following message(s) may be for you.":GOSUB 1400:A$="Please <K>ill those that would not interest other callers.":CR=2:GOSUB 1400:T=-1
927 A$=LEFT$(R$,5):CR=1:GOSUB 1400
929 NEXT:IF NOT T THEN A$="Sorry, "+FIRST$+", no personal mail for you today.":GOSUB 1400
930 T=0:FOR R=1 TO LASTR:GET 1,M(R,1):IF INSTR(MID$(R$,6,31),NAM$)=0 THEN IF NOT SYSOP THEN 940
931 IF NOT REMIND THEN A$="":GOTO 945
932 IF NOT SYSOP THEN IF T THEN 938 ELSE 935 ELSE 934
934 IF INSTR(MID$(R$,6,31),NAM$)=0 AND INSTR(MID$(R$,6,31),NFIR$+" "+NLAS$)=0 THEN 940 ELSE IF T THEN 938
935 GOSUB 1400:A$="You have left the following message(s).":GOSUB 1400:A$="Please <K>ill those that are no longer needed.":CR=2:GOSUB 1400:T=-1
938 A$=LEFT$(R$,5):CR=1:GOSUB 1400
940 NEXT:IF T THEN GOSUB 1400:A$="Thanks, "+FIRST$+", for deleting what messages you can.":GOSUB 1400
945 CR=2:GOSUB 1400:FIELD 1,10 AS A$,10 AS Y$,31 AS A$:GET 1,1:CALLN=VAL(Y$)+1:IF NOT SYSOP THEN LSET A$=NAM$:LSET Y$=STR$(CALLN):PUT 1,1
948 A$="Entering the 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(CLLRCS$)+LEN(FINFO$)+11
954 LOCATE 25,1:PRINT FINFO$+SPACE$(79-JJ)+NAM$+" "+CLLRCS$+" "+TI$;:LOCATE C.C,C.L:RETURN
955 GOSUB 4900:STI=-1:IF NEWCALR THEN FILE$=NEWUSER$:GOSUB 6000:GOSUB 1700:NEWCALR=FALSE
1200 GOSUB 49000:GOSUB 950:STI=-1:Q=0:GOSUB 1400:IF NOT SYSOP THEN 1235
1210 IF XPR THEN A$="Sysop <1,2,3,4,5,6,7,8,9,10,11,12>":GOSUB 1400:GOTO 1250
1220 IF (BIT.8 AND GR) OR (LOCAL AND GRAPHICS) THEN FILE$=MENU1$+"G" ELSE FILE$=MENU1$
1231 STI=0:GOSUB 6000:STI=-1:GOTO 1240
1235 GOSUB 1400:GOSUB 41000:A$="Time remaining = "+TR$+" min.":GOSUB 1400
1240 NOSTOP=0:IF XPR THEN 1250
1242 IF (BIT.8 AND GR) OR (LOCAL AND GRAPHICS) THEN FILE$=MENU2$+"G" ELSE FILE$=MENU2$
1245 STI=0:GOSUB 6000:STI=-1
1250 GOSUB 1400:A$="Function <B,C,E,F,G,GR,H,K,L,M,N,O,P,PL,PW,Q,R,S,T,U,W,X,#,?,!,$>":GOSUB 1500:IF Q=0 THEN 1250
1270 FOR J=1 TO Q:Z$=B$(J):GOSUB 5000:IF Z$="10"AND SYSOP THEN GOSUB 12000
1276 IF Z$="11"AND SYSOP THEN 10700
1277 IF Z$="12"AND SYSOP THEN 10930
1278 IF Z$="GR" THEN 43000
1280 IF Z$="PW"THEN 5110 ELSE IF Z$="PL"THEN 5200
1290 FF=INSTR("?BCEFGHKLMNOPQRSTWX#U!$123456789",Z$):IF FF=0 THEN 1350 ELSE IF FF>23 AND NOT SYSOP THEN 1350
1320 ON FF GOSUB 1700,1720,1800,2000,20000,10560,1740,3900,4100,10960,5500,4700,4200,4320,4330,4340,9100,1760,4240,4900,10090,900,9300,10070,10090,10110,10270,10390,10490,10530,11000,9500:NEXT J:GOTO 1200
1350 IF XPR THEN 1240 ELSE GOSUB 1400
1360 A$=FIRST$+", I don't understand "+B$(J)+".":GOSUB 1400:GOTO 1200
1400 RET=0:IF NOT STI OR CHAT THEN 1435
1410 Y$=INKEY$:IF MLSW THEN FK$=Y$:GOSUB 60000
1411 IF LOCAL THEN 1430
1415 IF EOF(3)THEN GOSUB 42000:GOTO 1430
1416 ON ERROR GOTO 13000
1420 Y$=INPUT$(1,#3)
1425 IF Y$=PAUSE$ THEN WHILE EOF(3):GOSUB 42000:WEND:GOTO 1420
1430 IF Y$=ABT$AND STI THEN 1475
1435 IF PRT THEN LOCATE,,1:PRINT A$;
1437 IF LOCAL THEN 1450
1440 IF UC THEN SWAP A$,Z$:GOSUB 5000:SWAP A$,Z$
1445 PRINT#3,A$;
1450 IF CR=1 THEN 1470
1455 PRINT:IF LOCAL THEN 1465
1460 PRINT#3,"":IF LF THEN PRINT#3,LF$;
1465 IF CR=2 THEN CR=0:GOTO 1455
1470 Y$="":A$="":CR=0:RETURN
1475 CLOSE 2:CR=2:A$="":RET=STI:STI=0:GOSUB 1410:STI=RET:RET=-1:GOTO 1470
1500 GOSUB 42000:A!=FRE("A"):TOUT!=FNTI!:A=0:B=0:C=0:Q=1:EOL=0:YES=0:B$="":NO=0:A$=A$+"? ":CR=1:GOSUB 1400:IF LOCAL THEN LINE INPUT"",B$:GOTO 1575 ELSE IF BELL THEN PRINT#3,BELL$;
1525 WHILE EOF(3):GOSUB 42000:MMM!=FNTI!-TOUT!:IF MMM!>TIME.OUT!THEN 13540
1530 Y$=INKEY$:IF MLSW THEN FK$=Y$:GOSUB 60000
1531 IF Y$<>""THEN 1545
1535 WEND:IF INP(MSR)<128 THEN 13540
1540 Y$=INPUT$(1,3):IF Y$=CHR$(127)THEN 1635
1545 IF Y$=BK2$THEN 1635
1550 IF Y$<" "AND Y$<>CR$THEN 1525
1555 IF PRT THEN PRINT Y$;
1557 IF NOT SECURE THEN PRINT#3,Y$; ELSE PRINT#3,".";
1560 IF Y$=CR$THEN 1570
1563 IF LEN(B$)=>254 THEN A$="Input string too long. Try again.":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$<>""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, "+FIRST$+".":GOSUB 1400:GOTO 1500
1615 GOTO 1625
1620 B$(1)=B$:Q=1:IF B$="" THEN Q=0:RETURN
1625 IF LEFT$(B$,1)="Y"OR LEFT$(B$,1)="y"THEN YES=-1
1627 IF LEFT$(B$,1)="N"OR LEFT$(B$,1)="n"THEN NO=-1
1628 IF B$(Q)="NS" OR B$(Q)="ns" THEN NO=0:NOSTOP=-1:B$(Q)="":IF Q>1 THEN Q=Q-1
1629 IF B$="RE" OR B$="re" THEN REPLY=-1 ELSE IF B$="K" OR B$="k" THEN KILLMSG=-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):K1=R1 OR 128:OUT LCR,K1:IF Q=384 THEN 1668
1662 IF Q=256 THEN 1674
1664 IF Q=96 THEN 1680
1666 RETURN
1668 OUT LSB,&H80:OUT MSB,&H1:GOTO 1684
1674 OUT LSB,&H0:OUT MSB,&H1:GOTO 1684
1680 OUT LSB,&H60:OUT MSB,&H0
1684 OUT LCR,R1:RETURN
1700 FILE$=HELP02$:GOSUB 6000:RETURN
1720 IF BULL<1 THEN A$="Sorry, "+FIRST$+" there are no system bulletins today.":GOSUB 1400:RETURN
1730 FILE$=BULLETIN$:IF (BIT.8 AND GR AND LEN(BULLETIN$)<8) OR (LOCAL AND GR AND LEN(BULLETIN$)<8) THEN FILE$=FILE$+"G
1735 ERR.LAST=0:GOSUB 6000:IF ERR.LAST<>53 THEN GOSUB 9700:RETURN ELSE RETURN
1740 FILE$=HELP01$:GOSUB 6000:RETURN
1760 FILE$=WELCOME$:IF (BIT.8 AND GR AND LEN(WELCOME$)<8) OR (LOCAL AND GR AND LEN(WELCOME$)<8) THEN FILE$=FILE$+"G
1765 GOSUB 6000:RETURN
1800 GOSUB 1400:A$="Comments are readable by Sysop only.":GOSUB 1400:MARGIN=72:A$="Do you wish to leave a comment":GOSUB 1500:IF NOT YES THEN A$="No comment.":GOSUB 1400:RETURN
1840 T$="SYSOP":SUB$="COMMENT":SC=TRUE:GOTO 2007
1900 IF LOCAL 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,COMMENTS$:GOSUB 1400:A$="Many thanks for the comments, "+FIRST$+" !":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 LASTR=MESSAGE.MAX THEN A$="Too many active messages -- try again another day.":GOSUB 1400:GOTO 3650
2006 PAS$="":SC=FALSE:IF NOT REPLY THEN T$="
2007 IF SC THEN FILE$="COMMENT" ELSE FILE$="MESSAGE
2008 Z$=MESSAGES$:GOSUB 52000:IF VAL(ACUM$)<2000 THEN A$="Not enough room to store another "+FILE$+" --try another day.":GOSUB 1400:GOTO 3650
2010 LI=0:L=0:X=0:FOR I=1 TO 30:A$(I)="":NEXT:IF SC THEN 2100
2015 A$="Message will be # "+STR$(LASTM+1):GOSUB 1400:IF REPLY THEN 2050
2020 A$="To (C/R  For All)":GOSUB 1500:IF LEN(B$(1))>30 THEN A$="30 Chars max.":GOSUB 1400:GOTO 2020
2030 IF Q=0 THEN T$="ALL" ELSE Z$=B$(1):GOSUB 5000:T$=Z$
2035 A$="Subject":GOSUB 1500:IF LEN(B$(1))>25 THEN A$="25 Chars max.":GOSUB 1400:GOTO 2035
2045 IF Q=0 THEN RETURN 1200 ELSE Z$=B$(1):GOSUB 5000:SUB$=Z$
2050 A$="Protect  <K,R,N,H,?>":IF XPR THEN 2060
2055 A$="Protect  < K)ill, R)ead, N)one, H)elp >
2060 GOSUB 1500:IF Q=0 THEN 2050 ELSE Z$=LEFT$(B$(1),1):GOSUB 5000:X=INSTR("KRNH?",Z$)
2065 ON X GOTO 2085,2075,2100,2070,2055:GOTO 2050
2070 FILE$=HELP03$:GOSUB 6000:GOTO 2050
2075 IF T$<>"ALL"THEN 2084
2080 A$="YOU CANNOT PROTECT THIS MESSAGE":GOSUB 1400:GOTO 2050
2084 PAS$="^READ^":GOTO 2100
2085 A$="Password":GOSUB 1500:IF LEN(B$(1))>15 THEN A$="15 Chars. max.":GOSUB 1400:GOTO 2085
2095 PAS$=B$(1)
2100 GOSUB 1400:IF XPR THEN 2120
2105 A$="To enter message, type in message text.":GOSUB 1400:A$="Type empty return 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)=""THEN LI=LI-1:GOTO 2300
2140 IF LI=17 THEN A$="Two lines left...":GOSUB 1400
2145 IF LI=18 THEN A$="Last line.":GOSUB 1400
2150 IF LI=19 AND NOT SYSOP THEN A$=FILE$+" full.":GOSUB 1400:GOTO 2300
2155 GOTO 2125
2300 GOSUB 1400
2310 IF XPR THEN 2315 ELSE GOSUB 50400
2315 GOSUB 1400:A$="Subfunction <A,C,D,E,I,L,M,S,?>":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 FF=INSTR("ACDEILMS?",Z$):IF FF<1 OR FF>9 THEN 2310
2335 ON FF GOTO 2400,2340,2500,2600,2800,3000,3100,3400,2345
2340 GOSUB 3200:GOTO 2140
2345 FILE$=HELP04$:GOSUB 6000:GOTO 2315
2400 GOSUB 1400:A$="Abort this 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)="":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 <Oldstring;Newstring> or C/R for no change.":GOSUB 1400:GOSUB 1400:B$(2)="":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 2690
2680 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 SYSOP 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:C$(X+1-L)=A$(X):A$(X)="":NEXT:LI=L
2840 A$=RIGHT$(STR$(LI),2)+": ":CR=1:GOSUB 1400:GOSUB 3700:IF A$(LI)=""THEN 2920
2870 LI=LI+1:IF LI+K=18 THEN A$="Two lines left...":GOSUB 1400
2890 IF LI+K=19 THEN A$="Last line.":GOSUB 1400
2900 IF LI+K=20 AND NOT SYSOP THEN A$="Message full.":GOSUB 1400:GOTO 2920
2910 GOTO 2840
2920 FOR X=1 TO K+1:A$(LI+X-1)=C$(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 set at"+STR$(MARGIN):GOSUB 1400:A$="Set Right-Margin 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 at"+STR$(MARGIN)+".":GOSUB 1400:IF MAINMARG THEN RETURN ELSE 2300
3150 MARGIN=VAL(B$(1)):A$="Margin now set to"+STR$(MARGIN)+".":GOSUB 1400:IF MAINMARG THEN RETURN ELSE 2300
3200 GOSUB 1400:A$="    ["+STRING$(MARGIN-2,45)+"]":GOSUB 1400:RETURN
3300 A$="Line #":GOSUB 1500:L=VAL(B$(1))
3320 IF L=>1 AND L=<LI THEN RETURN
3330 IF Q=0 THEN RETURN 2300
3340 A$="No such line, "+FIRST$+".":GOSUB 1400:RETURN 2300
3400 IF SC THEN 1940
3410 GOSUB 1400:A$="Updating Message file.":CR=1:GOSUB 1400:X#=0:REC=0:N$="":LASTM=LASTM+1:LASTR=LASTR+1:MNUM$=STR$(LASTM)+SPACE$(5-LEN(STR$(LASTM))):IF PAS$="^READ^"THEN MID$(MNUM$,1,1)="*
3460 FROM$=NAM$+SPACE$(31-LEN(NAM$)):T$=T$+SPACE$(31-LEN(T$)):MID$(T$,23,8)=TIME$:SUB$=SUB$+SPACE$(25-LEN(SUB$)):PAS$=PAS$+SPACE$(15-LEN(PAS$)):FOR J=1 TO LI:A$(J)=A$(J)+CHR$(227):REC=REC+LEN(A$(J)):NEXT
3510 IF REC MOD 128=0 THEN N$=STR$(REC\128+1) ELSE N$=STR$(REC\128+2)
3520 CLOSE 1:OPEN "R",1,MESSAGES$,128:FIELD 1,128 AS R$:X#=LOF(1)/128:GET 1:A$=SPACE$(8):LSET A$=STR$(LASTM):LSET R$=A$+MID$(R$,9):PUT 1,1
3530 GET 1,X#:M(LASTR,1)=X#+1:M(LASTR,2)=LASTM
3550 LSET R$=MNUM$+FROM$+T$+D$+SUB$+PAS$+CHR$(225)+N$:PUT 1,M(LASTR,1):N$="":FOR J=1 TO LI:A$=".":CR=1:GOSUB 1400:N$=N$+A$(J):IF LEN(N$)>127 THEN LSET R$=N$:PUT 1:N$=MID$(N$,129)
3630 NEXT J:IF LEN(N$)>0 THEN LSET R$=N$:PUT 1
3640 GOSUB 1400
3650 IF REPLY THEN RETURN ELSE RETURN 1200
3700 RS$=A$(LI):COL=LEN(RS$):STI=0
3720 COL=COL+1
3730 IF LOCAL THEN X$=INPUT$(1):GOTO 3740
3732 TOUT!=FNTI!:WHILE EOF(3):MMM!=FNTI!-TOUT!:IF MMM!>TIME.OUT!THEN GOTO 13540
3733 GOSUB 42000:X$=INKEY$:IF MLSW THEN 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$THEN 3870
3750 A$=X$:CR=1:GOSUB 1400:IF X$=CR$THEN 3850
3770 IF COL>MARGIN-3 AND X$=" "THEN GOSUB 1400:GOTO 3850
3780 RS$=RS$+X$:IF COL<MARGIN+1 THEN 3720
3800 Z=LEN(RS$):WHILE MID$(RS$,Z,1)<>" ":Z=Z-1:IF Z>0 THEN WEND ELSE Z=LEN(RS$)-1
3820 COL=MARGIN+1-Z:IF PRT THEN PRINT STRING$(COL,29);STRING$(COL,0);
3830 IF NOT LOCAL THEN PRINT#3,STRING$(COL,8);STRING$(COL,32);
3840 A$(LI)=LEFT$(RS$,Z):A$(LI+1)=RIGHT$(RS$,COL):GOSUB 1400:RETURN
3850 IF NOT LOCAL AND LF THEN PRINT#3,LF$;
3860 A$(LI)=RS$:RETURN
3870 IF COL=1 THEN 3730 ELSE COL=COL-2:RS$=LEFT$(RS$,LEN(RS$)-1)
3880 IF PRT THEN PRINT BK1$;
3885 IF NOT LOCAL THEN PRINT#3,BK$;
3890 GOTO 3720
3900 KILLMSG=0:GOSUB 1400:IF Q<>1 THEN MM=VAL(B$(Q)):GOTO 3950
3930 A$="Msg # to Kill":GOSUB 1500:MM=VAL(B$(Q)):GOSUB 1400:IF MM=0 THEN RETURN
3950 FOR Q=1 TO LASTR:IF M(Q,2)=MM THEN 3970 ELSE NEXT
3960 A$="There is no message # "+STR$(MM)+".":GOSUB 1400:GOTO 4040
3970 GET 1,M(Q,1):R=VAL(MID$(R$,118)):IF SYSOP THEN 4030
3980 Z=15:Z$=MID$(R$,101,15):GOSUB 8100:IF LEN(Z$)=0 THEN 4030
3990 IF Z$="^READ^"THEN IF INSTR(R$,NAM$)THEN 4030 ELSE 4020
4000 A$="Password (dots will echo)":SECURE=-1:GOSUB 1500:SECURE=0:GOSUB 1400:IF B$(1)=Z$THEN 4030
4020 A$="Sorry, wrong password. Message is protected.":GOSUB 1400:GOSUB 50510:GOTO 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 KILLMSG THEN RETURN ELSE GOSUB 135:RETURN 1200
4100 GOSUB 1400:LF=NOT LF:A$="Line Feeds ":IF LF THEN A$=A$+"On" ELSE A$=A$+"Off
4130 GOSUB 1400:GOSUB 50500:RETURN
4200 GOSUB 1400:BELL=NOT BELL:A$="Prompting Bell ":IF BELL THEN A$=A$+"On" ELSE A$=A$+"Off
4230 GOSUB 1400:GOSUB 50500:RETURN
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$="
4360 GOSUB 5000:SC$=Z$:L=1:LI=Q:MYMSGS=0
4370 L=L+1:IF L<=LI THEN MM=VAL(B$(L)):GOTO 4415
4380 NOSTOP=0:MYMSGS=0:A$="Msg # ("+STR$(FIRSTM)+" to"+STR$(M(LASTR,2))+", *, <H>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:Q=QAH:IF LEFT$(B$(1),1)="H"OR LEFT$(B$(1),1)="h"THEN FILE$=HELP07$:GOSUB 6000:RETURN 1200 ELSE IF Q=0 THEN RETURN 1200 ELSE L=0:LI=Q:GOTO 4370
4415 FOW=0:REV=0:IF B$(L)="*"THEN MM=LMSG+1:FOW=-1:GOTO 4430
4416 IF B$(L)="m" OR B$(L)="M" THEN MYMSGS=-1:GOTO 4370 ELSE IF MM=0 THEN RETURN 1200 ELSE GOSUB 1400
4430 IF RIGHT$(B$(L),1)="+"THEN FOW=-1
4440 IF RIGHT$(B$(L),1)="-"THEN REV=-1:GOTO 4490
4450 FOR R=1 TO LASTR: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=LASTR TO 1 STEP-1:IF M(R,2)<=MM THEN 4540
4510 NEXT
4515 A$="Sorry, "+FIRST$+", there is no message #"+STR$(MM)+".":GOSUB 1400:GOTO 4370
4520 QQQ=R:IF RT AND NOT FOW THEN 4560
4530 QQ=R:QQQ=LASTR:QQQQ=1:GOTO 4550
4540 QQ=R:QQQ=1:QQQQ=-1
4550 FOR R=QQ TO QQQ STEP QQQQ
4560 GET 1,M(R,1):PROTEC=0:USERMSG=0:IF INSTR(R$,NAM$)>0 THEN USERMSG=-1
4561 IF NOT SYSOP THEN IF INSTR(R$,"^READ^")>0 AND NOT USERMSG THEN PROTEC=-1:IF FOW OR REV THEN 4635
4562 MM=VAL(MID$(R$,2,4)):IF MYMSGS AND NOT USERMSG THEN 4625
4580 IF INSTR(R$,SC$)=0 THEN 4635
4585 IF PROTEC THEN SUBJ$="<PROTECTED>" ELSE SUBJ$=MID$(R$,76,25)
4590 IF QU THEN Z$=LEFT$(R$,5)+" "+SUBJ$:Z=31:GOSUB 8100:A$=Z$:GOSUB 1400:GOTO 4630
4600 GOSUB 8000:IF SU OR RET THEN 4630 ELSE IF M(R,2)>LMSG THEN LMSG=M(R,2)
4610 IF PROTEC THEN GOSUB 4670:GOSUB 1400:GOTO 4625 ELSE GOSUB 9000
4615 GOSUB 1400:IF Q AND PL<>0 THEN GOTO 62500
4625 IF NOT FOW AND NOT REV THEN 4370
4630 IF PL=0 THEN 4631 ELSE Q=Q+QAH:IF Q<PL THEN 4631 ELSE A$="MORE":GOSUB 1500:IF NO THEN Q=0:GOTO 4650 ELSE Q=QAH
4631 IF RET THEN RETURN 1200
4635 NEXT R:IF RT THEN 4370
4650 GOSUB 1400:A$="End of Msgs.":GOSUB 1400:RETURN 1200
4670 GOSUB 1400:A$="Sorry, "+FIRST$+", msg # "+LEFT$(R$,5)+" is read protected.":GOSUB 1400:RETURN
4700 IF NOT AVAILABLE GOTO 4708
4705 GOSUB 1400:A$="Chat... Remote Conversation Utility.":CR=2:GOSUB 1400:TRY.BELL=VAL(MID$(TIME$,1,2))*100+VAL(MID$(TIME$,4,2)):IF(TRY.BELL>ANNOY.ON AND TRY.BELL<ANNOY.OFF)OR ANNOY THEN 4710
4707 GOTO 4750
4708 A$=NFIR$+" is normally available between"+STR$(ANNOY.ON)+" and"+STR$(ANNOY.OFF)+",":GOSUB 1400:A$="but has been temporarily called away, "+FIRST$:GOSUB 1400:GOTO 4755
4710 A$="Program returns to command level within":GOSUB 1400:A$="30 seconds if operator is unavailable.":CR=2:GOSUB 1400:K=0:A$="Alerting operator now...":CR=1:GOSUB 1400:IWAIT!=FNTI!+30
4730 IWAT!=FNTI!+1
4731 IF FNTI!<IWAT!GOTO 4731
4735 K=K+1:IF INKEY$=ESC$THEN 4765
4740 A$=". ":IF K MOD 2 THEN A$=A$+BELL$
4744 IF LPRT THEN LPRINT BELL$;
4745 CR=1:GOSUB 1400:IF FNTI!<IWAIT!GOTO 4730 ELSE GOSUB 1400
4750 A$="Sorry "+FIRST$+", "+NFIR$+" is normally available between "+STR$(ANNOY.ON)+" and "+STR$(ANNOY.OFF)+",":GOSUB 1400
4755 A$="Please leave a message on the board or in the comments.":GOSUB 1400:RETURN
4765 GOSUB 1400:A$="Operator is available. Go ahead...":CR=2:GOSUB 1400
4770 CHAT=TRUE:GOSUB 950
4775 WHILE EOF(3):A$=INKEY$:IF MLSW THEN FK$=A$:GOSUB 60000
4776 IF A$=BK2$OR A$=CHR$(127)THEN 4805 ELSE IF A$=ESC$THEN CHAT=FALSE:CLS:IF MLSW THEN RETURN 1200 ELSE KEY(10)ON:RETURN 1200
4785 IF A$=CR$AND LF THEN PRINT#3,LF$;
4790 IF A$<>""THEN CR=1:GOSUB 1400:GOTO 4775
4795 WEND
4797 A$=INPUT$(1,#3):IF A$=BK2$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
4900 GOSUB 1400:A$="RBBS-PC Version "+VERSION$:GOSUB 1400:A$="You are caller #  ->"+STR$(CALLN):GOSUB 1400:A$="# of Active msgs  ->"+STR$(LASTR):GOSUB 1400:IF LMSG>0 THEN A$="Last msg you read ->"+STR$(LMSG):GOSUB 1400
4950 A$="Next msg # will be->"+STR$(LASTM+1):GOSUB 1400:RETURN
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 Z:RETURN
5100 Z1$="":FOR Z=1 TO LEN(Z$):IF ASC(MID$(Z$,Z,1))<65 OR ASC(MID$(Z$,Z,1))>90 THEN GOTO 5105 ELSE Z1$=Z1$+MID$(Z$,Z,1)
5105 NEXT:Z$=Z1$:RETURN
5110 A$="What would you like for a new password":SECURE=-1:GOSUB 1500:SECURE=0:GOSUB 1400:IF Q=0 THEN 1200 ELSE IF LEN(B$(1))>15 THEN 5110 ELSE Z$=B$(1):GOSUB 5000
5120 A$="Type new password again ":SECURE=-1:GOSUB 1500:SECURE=0:GOSUB 1400:IF Q=0 THEN 1200 ELSE SWAP Z$,B$(1):GOSUB 5000:IF Z$<>B$(1)THEN A$="Passwords don't match.":GOSUB 1400:GOTO 1200
5130 GOSUB 9400:GET 2,UIX#:LSET PW$=Z$:PUT 2,UIX#:CLOSE 2:GOSUB 1400:A$="Password change complete. ":GOSUB 1400:GOTO 1200
5200 IF Q>1 THEN 5230
5220 A$="Page length is"+STR$(PL)+". Enter new page length or zero for 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=-1 THEN A$="Sorry, 1200 baud connect cannot change speed.":GOSUB 1400:RETURN
5507 A$="Do you wish to change to 450 baud":GOSUB 1500:IF NOT YES THEN RETURN
5510 A$="Change baud rate to 450, then enter <c/r> until I respond...":GOSUB 1400:FOR I=1 TO 3:GOSUB 50510:NEXT:C=0:SWAP Q,NBPS:GOSUB 1654:SWAP Q,NBPS
5530 C=C+1:GOSUB 42000:IF C=20 THEN 13540 ELSE GOSUB 50500
5535 IF NOT EOF(3)THEN IF ASC(INPUT$(1,3))=13 THEN 5540
5537 GOTO 5530
5540 GOSUB 56000:Z$="   ==Switched to 450 baud==":LSET CALRINFO$=Z$:CDX=CDX+1:PUT 2,CDX
5551 IF LPRT THEN LPRINT Z$
5555 A$="You are now at 450 baud, "+FIRST$:GOSUB 1400:RETURN
5600 IF NOSTOP THEN RETURN ELSE A$="More (Y),N,NS":GOSUB 1500:RETURN
6000 IF STI THEN GOSUB 1400:A$="* Use <Ctrl K> to abort, <Ctrl S> to suspend *":CR=2:GOSUB 1400
6020 CLOSE#2:OPEN "I",#2,FILE$:Q=0:GOTO 6040
6030 Q=-1
6040 IF EOF(2)OR(INP(MSR)<128 AND NOT LOCAL)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 ELSE 6060
6060 Q=0:CLOSE 2:IF NOT LOCAL THEN GOSUB 42000:RETURN ELSE RETURN
6080 A$="Please let the SYSOP know that file <"+FILE$+"> is missing!":GOSUB 1400:RETURN
7000 GOSUB 1400:A$="* Use <Ctrl K> to abort, <Ctrl S> to suspend *":CR=2:GOSUB 1400:CLOSE#2:OPEN "I",#2,FILE$:Q=0:GOTO 7040
7040 IF EOF(2)OR(INP(MSR)<128 AND NOT LOCAL)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)=" " THEN MID$(PAD$,3,1)="0
7085 IF MID$(PAD$,5,1)=" " THEN MID$(PAD$,5,1)="0
7090 IF PAD$=>LCND$ THEN 7100 ELSE Q=Q-1:GOTO 7040
7100 GOSUB 1400:IF NOT RET THEN 7040 ELSE 7200
7200 A$="":Q=0:CLOSE 2:IF NOT LOCAL THEN GOSUB 42000:RETURN ELSE RETURN
8000 GOSUB 1400:IF RET THEN RETURN
8020 IF MID$(R$,37,3)="ALL"THEN T$="ALL":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 PROTEC THEN SUB$=SUBJ$
8050 Z=31:Z$=MID$(R$,6,Z):GOSUB 8100:FROM$=Z$:A$="Msg # "+LEFT$(R$,5)+" Dated "+MID$(R$,68,8)+" "+MID$(R$,59,8):GOSUB 1400:IF NOT RET THEN A$="From: "+FROM$
8070 GOSUB 1400:IF NOT RET THEN A$="  To: "+T$:GOSUB 1400:IF NOT RET THEN A$="  Re: "+SUB$:GOSUB 1400
8080 RETURN
8100 WHILE MID$(Z$,Z,1)=" ":Z=Z-1:IF Z>0 THEN WEND
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$="":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=<SS THEN SSS=SS-S ELSE SSS=60-(S-SS):M=M+1
9150 IF M=<MM THEN MMM=MM-M ELSE MMM=60-(M-MM):H=H+1
9160 IF H=<HH THEN HHH=HH-H ELSE HHH=24-(H-HH)
9170 GOSUB 482:A$="It is now "+TIM$+".":GOSUB 1400:A$="You have been on for":CR=1:GOSUB 1400:IF HHH>0 THEN A$=STR$(HHH)+" Hours":CR=1:GOSUB 1400
9200 A$=STR$(MMM)+" Minutes and"+STR$(SSS)+" Seconds.":GOSUB 1400:RETURN
9300 NULL=NOT NULL:IF NULL THEN NUL$=CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0)+CHR$(0):A$="<Nulls> on" ELSE NUL$="":A$="<Nulls> off":GOSUB 1400
9320 RETURN
9400 CLOSE 2:OPEN "R",2,USERS$,128:FIELD 2,31 AS N$,15 AS PW$,1 AS ST$,14 AS OP$,1 AS SCL$,24 AS CS$,20 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$:RETURN
9500 AVAILABLE=NOT AVAILABLE:IF PRT THEN GOSUB 49000:GOSUB 950
9530 GET 1,1:MID$(R$,9,2)=STR$(AVAILABLE):PUT 1,1:RETURN
9700 REM
9710 NOSTOP=0:GOSUB 1400:A$="Bulletin # <1 through"+STR$(BULL)+", L)ist or C/R to end>":GOSUB 1500:IF Q=0 THEN RETURN
9711 Z$=B$(1):GOSUB 5000:FF=INSTR("123456L",Z$):IF FF<1 THEN 9710
9745 IF Z$="L"GOTO 9750
9746 IF INT(VAL(Z$))>BULL GOTO 9710
9750 ON FF GOSUB 9760,9770,9780,9790,9800,9810,9820:RETURN
9760 FILE$=BULLET1$:GOSUB 6000:GOTO 9700
9770 FILE$=BULLET2$:GOSUB 6000:GOTO 9700
9780 FILE$=BULLET3$:GOSUB 6000:GOTO 9700
9790 FILE$=BULLET4$:GOSUB 6000:GOTO 9700
9800 FILE$=BULLET5$:GOSUB 6000:GOTO 9700
9810 FILE$=BULLET6$:GOSUB 6000:GOTO 9700
9820 FILE$=BULLETIN$:IF (BIT.8 AND GR AND LEN(BULLETIN$)<8) OR (LOCAL AND GR AND LEN(BULLETIN$)<8) THEN FILE$=FILE$+"G
9825 GOSUB 6000:GOTO 9700
10070 FILE$=COMMENTS$:GOSUB 6000:RETURN
10090 A$=CR$+"List - <U>sers, <R>ecent callers, <ENTER> 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 I:STI=0:RETURN
10100 FILE$=CALLERS$:GOSUB 57000:RETURN
10110 A$="Do you want to pack MESSAGES file":GOSUB 1500:IF NO THEN RETURN 1200
10112 OK=0:NAME MESSAGES.BAK$ AS MESSAGES.BAK$
10113 IF NOT OK THEN 10120
10115 KILL MESSAGES.BAK$
10120 CLOSE#1,2:NAME MESSAGES$ AS MESSAGES.BAK$:Q=0:OPEN "R",#1,MESSAGES.BAK$:FIELD #1,128 AS R$:OPEN "R",#2,MESSAGES$:FIELD #2,128 AS RR$:GET 1:GOTO 10240
10150 GET 1
10160 IF INSTR(R$,CHR$(225))>0 THEN 10220
10170 IF INSTR(R$,CHR$(227))>0 THEN 10240
10180 IF INSTR(R$,CHR$(226))>0 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$((LOC(1)*128)-(LOC(2)*128)):GOSUB 1400
10210 A$="Re-Loading Msg File...":GOSUB 1400:GOSUB 135:RETURN 1200
10220 A$="Msg #"+LEFT$(R$,5)+" copied...":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
10270 REM
10280 A$="Renumber starting with OLD msg #":GOSUB 1500:MM=VAL(B$(1)):IF Q=0 OR MM<1 THEN RETURN 1200
10300 A$="Start with NEW #":GOSUB 1500:Y=VAL(B$(1)):IF Q=0 THEN 10280
10310 FOR Q=1 TO LASTR:IF M(Q,2)=MM THEN R=M(Q,1):GOTO 10340
10330 NEXT:A$="No Msg #"+STR$(MM):GOSUB 1400:RETURN 1200
10340 GET 1,R:RR=VAL(MID$(R$,118)):IF RR<1 THEN GET 1,1:Y=LASTR:LSET R$=STR$(Y+1)+SPACE$(5-LEN(STR$(Y)))+MID$(R$,6):PUT 1,1:GOTO 10210
10360 LSET R$=STR$(Y)+SPACE$(5-LEN(STR$(Y)))+MID$(R$,6):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):GOSUB 1400:RETURN
10440 IF VAL(MID$(R$,2,4))<>MM THEN R=R+RR:GOTO 10420
10450 IF INSTR(R$,CHR$(226))=0 THEN 10480
10460 LSET R$=LEFT$(R$,115)+CHR$(225)+MID$(R$,117):PUT 1,LOC(1):A$="Msg #"+STR$(MM)+" is now alive and well.":GOSUB 1400:GOTO 10210
10480 A$="Msg #"+STR$(MM)+" is not Dead.":GOSUB 1400:RETURN
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,COMMENTS$:CLOSE#2
10550 RETURN 1200
10560 GOSUB 9100:IF HHH>0 THEN CLOSE#2:OPEN "A",#2,LONGCALR$:WRITE#2,NAM$,D$,HHH,MMM:CLOSE#2
10590 A$="Thanks for calling, "+FIRST$+"!":GOSUB 1400:IF SYSOP AND CINT(UIX#)=0 THEN CLS:GOTO 13540
10600 GOSUB 9400:GET 2,UIX#:LSET OP$=MKI$(TIMON)+MKI$(LMSG)+MKI$(LF)+MKI$(MARGIN)+MKI$(BELL)+MKI$(XPR)+CHR$(PL)+STRING$(1,0):LSET SCL$=CL$:IF LD THEN LSET LND$=FNCD$(D$)
10605 LSET UDL$=MKI$(DLD):LSET UUL$=MKI$(ULD):PUT 2,UIX#:GOTO 13540
10620 GOSUB 56000:LSET CALRINFO$="     REGISTRATION CHECK FAILED":GOTO 10660
10630 GOSUB 56000:LSET CALRINFO$="     SYSOP NAME ATTEMPTED":GOTO 10660
10640 GOSUB 56000:LSET CALRINFO$="     LOCKED OUT USER ATTEMPT":GOTO 10660
10650 GOSUB 56000:LSET CALRINFO$="     PASSWORD ATTEMPT FAILED
10660 IF LPRT THEN LPRINT CALRINFO$
10670 CDX=CDX+1:PUT 2,CDX:Z$=NAM$+" on at "+D$+", "+TIM$+"***** LOGON DENIED *****"+", "+BAUD$+PARMS$:NAMSAV$=Z$+SPACE$(128-LEN(Z$)):IF LPRT THEN LPRINT Z$
10698 GOSUB 1400:A$="You are denied access.":CR=2:GOSUB 1400:GOTO 13540
10700 GOSUB 1400:A$="Enter the filespec(s) as d:filespec.ext ":GOSUB 1500:GOSUB 5000:IF B$(1)=""THEN 1200 ELSE Z$=B$(1)
10715 A$="Reading directory don't despair...":GOSUB 1400:G=0
10720 CLS:FILES B$(J):LINECT=CSRLIN:IF COMPILED THEN W=13:P=1 ELSE W=18:P=2
10725 LOCATE P,1,1:FOR I=P TO LINECT:FOR B=1 TO 66 STEP W:G=G+1:FLS$(G)="":FOR JJ=0 TO 11:H=SCREEN(I,(B+JJ)):FLS$(G)=FLS$(G)+CHR$(H):NEXT JJ:IF INSTR(FLS$(G),".")>0 THEN 10840
10733 IF LN AND OMIT.DIR$="YES" AND FLS$(G) = DIR$+SPACE$(12-LEN(DIR$)) THEN G=G-1:GOTO 10840
10737 IF LN AND OMIT.UDIR$="YES" AND FLS$(G) = UDIR$+SPACE$(12-LEN(UDIR$)) THEN G=G-1:GOTO 10840
10740 IF LEFT$(FLS$(G),1)=" " THEN G=G-1:GOTO 10845
10840 NEXT B:NEXT I
10845 IF LN THEN RETURN
10850 CLS:GOSUB 1400:A$="Hang on... Alphabetizing filenames ":GOSUB 1400:FOR X=1 TO G-1:FOR Y=X+1 TO G:IF FLS$(Y)<FLS$(X)THEN SWAP FLS$(X),FLS$(Y)
10880 NEXT Y:A$=".":CR=1:GOSUB 1400:NEXT X:GOSUB 1400:A$="Filespecs":GOSUB 1400:FOR I=1 TO G:FOR MMM=1 TO LEN(FLS$(I)):L$=MID$(FLS$(I),MMM,1):IF ASC(L$)<>32 THEN W$=W$+L$
10920 NEXT MMM:FLS$(I)=W$:A$=FLS$(I):GOSUB 1400:W$="":NEXT I:FOR I=1 TO 128:FLS$(I)="":NEXT:GOTO 1200
10930 IF DOSVER<2 THEN A$="This is not supported for the current level of DOS.":GOTO 1200
10932 IF LOCAL THEN A$="This is supported only for remote SYSOP's":GOTO 1200
10934 CLOSE 2:OPEN "O",2,CTTY$:PRINT #2,"ECHO OFF":PRINT #2,"CTTY "+CP$:PRINT #2,"ECHO RBBS-PC "+VERSION$:PRINT #2,"ECHO SYSOP in Remote Console Mode at "+TIME$+" on "+DATE$:PRINT #2,"ECHO Copyright (c) 1983 by D. Thomas Mack,
10948 PRINT #2,"ECHO 10210 Oxfordshire Road, Great Falls, Va. 22066":PRINT #2,"COMMAND ":PRINT #2,"CTTY CON":PRINT #2,RBBS$:CLOSE:OUT MCR,INP(MCR) OR 1:SYSTEM
10960 MAINMARG=-1:GOSUB 3100:MAINMARG=0:RETURN
11000 A$="<L>ist, <P>rint, or <M>odify users":GOSUB 1500:IF Q=0 THEN RETURN 1200 ELSE QQ=0:Z$=LEFT$(B$(1),1):GOSUB 5000:IF Z$="M"THEN STI=0 ELSE IF Z$="P"THEN QQ=-1
11005 GOSUB 9400:Z=1
11010 XY#=LOF(2)/128:FOR J=Z TO XY#:GET 2,J
11015 IF ASC(N$)=0 THEN 11300 ELSE A$=STR$(LOC(2))+":"+N$:IF ST$<>"Y"THEN A$=A$+" <Locked out>":GOTO 11100
11020 A$=A$+"Pw="+PW$+" Times on="+STR$(CVI(MID$(OP$,1,2)))
11025 IF QQ THEN LPRINT A$
11027 GOSUB 1400:IF SCL$="Y" THEN A$="    (SYSOP)     " ELSE A$="
11030 A$=A$+TD$+" "+CS$+MA$
11100 IF QQ THEN LPRINT A$
11101 GOSUB 1400:A$="  DOWNLOADS="+STR$(CVI(UDL$)):A$=A$+SPACE$(30-LEN(A$))+"UPLOADS="+STR$(CVI(UUL$)):IF QQ THEN LPRINT A$
11105 GOSUB 1400:IF STI THEN 11300
11110 A$="<D>elete, <F>ind, <L>ockout, <M>enu, <N>ew pswrd, <P>rint, <S>ysop, <#>user":GOSUB 1500:IF Q=0 THEN 11310
11115 Z$=LEFT$(B$(1),1):GOSUB 5000:X=INSTR("DNLPMFS",Z$):ON X GOTO 11130,11160,11190,11220,11320,11340,11390
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 A$="Enter new password":GOSUB 1500:Z$=B$(1):GOSUB 5000:LSET PW$=Z$:GOTO 11290
11190 IF ST$="Y"THEN LSET ST$="L" ELSE LSET ST$="Y
11195 GOTO 11290
11220 QQ=NOT QQ:GOTO 11015
11290 PUT 2,LOC(2):GOTO 11015
11300 IF RET THEN 11320
11310 NEXT
11320 CLOSE 2:RETURN 1200
11340 GOSUB 1400:A$="Enter user name to find":GOSUB 1500:Z$=B$(1):GOSUB 5000:USERNAME$=Z$:X$=USERNAME$+SPACE$(31-LEN(USERNAME$)):GOSUB 9400
11360 GET 2:IF EOF(2)THEN 11380 ELSE IF ASC(N$)=0 THEN 11360
11370 IF X$<>N$THEN 11360 ELSE 11015
11380 A$=USERNAME$+" not found in USERS file.":CR=2:GOSUB 1400:GOTO 11015
11390 IF SCL$="Y" THEN LSET SCL$="N" ELSE LSET SCL$="Y
11400 GOTO 11290
12000 A$="Do you want to pack USERS file":GOSUB 1500:IF NO THEN RETURN 1200
12005 OK=0:USERS.BAK$=USERS$+".BAK":NOW=VAL(LEFT$(DATE$,2)):NAME USERS.BAK$ AS USERS.BAK$
12010 IF NOT OK THEN 12030
12020 KILL USERS.BAK$
12030 NAME USERS$ AS USERS.BAK$:Q=0:CLOSE 1:OPEN "R",1,USERS.BAK$,128:FIELD 1,31 AS OLD.N$,15 AS OLD.PW$,1 AS OLD.ST$,15 AS OLD.OP$,24 AS OLD.CS$,20 AS OLD.MA$,14 AS OLD.TD$,3 AS OLD.LND$,2 AS OLD.UDL$,2 AS OLD.UUL$
12050 CLOSE 2:OPEN "R",2,USERS$,128:FIELD 2,31 AS N$,15 AS PW$,1 AS ST$,15 AS OP$,24 AS CS$,20 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$:A!=LOF(1)/128:FOR J=1 TO A!:GET 1,J:IF ASC(OLD.N$)=0 THEN 12220
12080 ONLAST=VAL(LEFT$(OLD.TD$,2)):LAPSE=NOW-ONLAST:IF LAPSE<0 THEN LAPSE=LAPSE+12
12085 IF OLD.ST$="L" THEN GOTO 12200
12090 IF LAPSE>LAPSE.MAX THEN 12220
12200 A$=STR$(LOC(1))+": "+OLD.N$+" copied...":GOSUB 1400:LSET N$=OLD.N$:LSET PW$=OLD.PW$:LSET ST$=OLD.ST$:LSET OP$=OLD.OP$:LSET CS$=OLD.CS$:LSET MA$=OLD.MA$:LSET TD$=OLD.TD$:LSET LND$=OLD.LND$:LSET UDL$=OLD.UDL$:LSET UUL$=OLD.UUL$
12210 PUT 2:GOTO 12230
12220 Q=Q+1:A$=STR$(LOC(1))+": "+OLD.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:RETURN 1200
13000 IF ERR=7 THEN 13650
13010 IF ERL=181 AND ERR=63 THEN RESUME 183
13020 IF ERL=187 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 187
13030 IF ERL=841 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 841
13033 IF ERL=825 AND ERR=5 THEN RESUME 835
13035 IF ERL=954 AND ERR=5 THEN JJ=JJ-LEN(FINFO$):FINFO$="":RESUME 954
13040 IF ERL=4744 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 4744
13050 IF ERL=5551 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 5551
13060 IF ERL=11025 AND (ERR=24 OR ERR=25 OR ERR=27) THEN QQ=FALSE:RESUME 11025
13070 IF ERL=11100 AND (ERR=24 OR ERR=25 OR ERR=27) THEN QQ=FALSE:RESUME 11100
13080 IF ERL=13110 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 13110
13083 IF ERL=13580 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 13580
13085 IF ERL=20231 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 20233
13087 IF ERL=50615 AND (ERR=24 OR ERR=25 OR ERR=27) THEN LPRT=FALSE:RESUME 50615
13090 IF ERR=58 THEN 13130
13100 IF(ERR=ERR.LAST AND(FNTI!-TIMERR!<5))THEN ERR.COUNT=ERR.COUNT+1:IF ERR.COUNT>ERR.MAX THEN 50000
13110 IF(ERR<>53 AND ERR<>57 AND ERR<> 61 AND ERR<> 64 AND ERR<> 69 AND LPRT)THEN LPRINT"+++ Error";ERR;"  in line ";ERL" occurred at "TIME$" on "DATE$
13115 IF (ERR<>53 AND ERR<>57 AND ERR<>61 AND ERR<>64 AND ERR<>69) THEN A$="+++ Error"+STR$(ERR)+" line "+STR$(ERL)+" at "+TIME$+" on "+DATE$:GOSUB 13670
13120 ERR.LAST=ERR:IF FNTI!-TIMERR!>5 THEN ERR.COUNT=0 ELSE TIMERR!=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 BIT.8)THEN OUT LCR,&H3:RESUME 335
13160 IF ERL=340 THEN RESUME 345
13170 IF ERL<1200 THEN RESUME 13540
13180 IF ERL=1420 AND ERR=57 THEN R1=INP(LSR):RESUME 1425
13190 IF ERL=1540 OR ERL=3734 OR ERL=20840 OR ERL=21290 OR ERL=21360 OR ERL=21420 THEN GOSUB 50500:IF INP(MSR)<128 THEN RESUME 13540
13200 IF ERL=1540 THEN RESUME 1540
13210 IF ERL=3530 THEN RESUME 3550
13220 IF ERL=3734 THEN RESUME 3734
13230 IF ERL=4797 THEN GOSUB 50500:GOSUB 13670:IF INP(MSR)<128 THEN RESUME 13540 ELSE RESUME 4797
13240 IF ERL=5530 AND ERR=57 THEN R1=INP(LSR):RESUME 20015
13245 IF ((ERL=5540 OR ERL=57010 OR ERL=57025 OR ERL=13547 OR ERL=13548 OR ERL=50613) AND ERR=54) THEN PRINT "RBBS-PC "+VERSION$+" requires "+CALLERS$+" to be a random file.":PRINT "Please delete it and restart RBBS-PC "+VERSION$:RESUME 31000
13250 IF ERL=5530 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 13540
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$="That file doesn't exist or you gave an invalid filespec!":GOSUB 1400:RESUME 10700
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=53 THEN RESUME 20170
13357 IF ERL=20165 AND ERR=58 THEN RESUME 20167
13360 IF ERL=20220 AND ERR=53 THEN RESUME 20225
13370 IF ERL=20220 THEN IF ERR=58 THEN OK=-1:RESUME 20225 ELSE RESUME 20225
13380 IF ERL=20440 THEN IF 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
13410 IF ERL=20840 THEN RESUME 20840
13420 IF ERL=21130 THEN OK=0:RESUME 21131
13430 IF ERL=21290 THEN RESUME 21290
13440 IF ERL=21360 THEN RESUME 21360
13445 IF ERL=21420 THEN RESUME 21420
13447 IF ERL=52000 AND ERR=53 THEN A$="Please let the SYSOP know that the upload directory file is missing!":GOSUB 1400:RESUME 1200
13450 IF 65535!=ERL THEN 50000
13460 IF ERR=5 THEN 13540
13470 IF ERR=57 OR ERR=24 OR ERR=25 THEN GOSUB 50500:R1=INP(MSR):IF R1<128 THEN RESUME 13540 ELSE GOSUB 13580
13480 IF ERR=61 THEN GOSUB 1400:A$="<< Disk is full -- file operation abnormally terminated. >>":CR=2:GOSUB 1400:RESUME 1200
13490 IF ERR=71 THEN GOSUB 13630:RESUME 20020
13500 A$="You have located a software bug.":GOSUB 1400:A$="Please leave a comment or a msg for SYSOP that":GOSUB 1400:A$="Error "+STR$(ERR)+" occured in Line "+STR$(ERL)+".":GOSUB 1400:A$="Thank You...":GOSUB 1400:PRINT:RESUME 1200
13540 IF LOCAL THEN 13549
13543 IF NOT SYSOP AND CINT(UIX#)=0 THEN 13549
13545 GOSUB 56000:FIELD 2,55 AS CALRINFO$,3 AS HHH$,3 AS MMM$,3 AS SSS$:LSET CALRINFO$=MID$(NAMSAV$,65,55):LSET HHH$=STR$(HHH):LSET MMM$=STR$(MMM):LSET SSS$=STR$(SSS):CDX=CDX+1:PUT 2,CDX
13547 FIELD 2,64 AS CALRINFO$
13548 LSET CALRINFO$=LEFT$(NAMSAV$,64):CDX=CDX+1:PUT 2,CDX
13549 GOSUB 1900:CLOSE:OUT MCR,&H4:GOSUB 50510:OUT MCR,&H0:RUN 90
13550 CLS:LOCATE,,0:PRINT CONFIG$+" file not found or invalid.  Please create one using "+VERSION$+"'s utility program -- CONFIG.
13570 FOR I=1 TO 10:GOSUB 50510:NEXT:SYSTEM
13580 IF LPRT THEN LPRINT"+++ Modem status is: ";HEX$(R1);" and line status is: ";HEX$(INP(LSR));" Error";ERR;" in line ";ERL
13590 RETURN
13600 A$="Disk full -- restoring USERS file.":GOSUB 1400:CLOSE 1,#2:KILL USERS$:NAME USERS.BAK$ AS USERS$:GOSUB 9400:RETURN
13610 A$="Disk full -- restoring MESSAGES file.":GOSUB 1400:CLOSE 1,#2:KILL MESSAGES$:NAME MESSAGES.BAK$ AS MESSAGES$:GOSUB 135:RETURN
13630 A$="The SYSOP left the drive door open by mistake.":GOSUB 1400:A$="The File Menu is not available today.":GOSUB 1400:RETURN
13650 CLS:LOCATE,,0:PRINT"Not enough memory to initialize RBBS-PC":GOTO 13570
13670 CLOSE 2:OPEN "R",2,CALLERS$,64:FIELD 2,64 AS CALRINFO$:A$=STRING$(5," ")+A$:LSET CALRINFO$=A$:CDX=CDX+1:PUT 2,CDX:A$="":RETURN
14000 RETURN 320
14500 PRINT#3,"ATM1Q1E1S0=0C0H1M0":GOSUB 50510:CLOSE 3:RETURN
15000 SYSOPNEXT=NOT SYSOPNEXT:IF PRT THEN GOSUB 49000:GOSUB 950
15010 GET 1,1:MID$(R$,54,2)=STR$(SYSOPNEXT):PUT 1,1:RETURN
20000 GOSUB 1400:A$="Entering File Subsystem...":GOSUB 1400
20015 FINFO$="":GOSUB 950:IF LOCAL GOTO 20020 ELSE GOSUB 1400:GOSUB 41000:A$="Time remaining = "+TR$+" min.":GOSUB 1400
20020 NOSTOP=0:IF XPR THEN 20030
20022 IF (BIT.8 AND GR) OR (LOCAL AND GRAPHICS) THEN FILE$=MENU3$+"G" ELSE FILE$=MENU3$
20025 STI=0:GOSUB 6000:STI=-1
20030 GOSUB 1400:A$="File Function <G,H,L,N,D,U,M,?>":CR=1:GOSUB 1500:IF Q=0 THEN 20015
20050 LN=FALSE:Z$=B$(1):GOSUB 5000:FF=INSTR("LDUMGH?N",Z$):IF FF=0 THEN A$=FIRST$+" I don't understand "+B$(1)+".":GOSUB 1400:GOTO 20015
20070 ON FF GOSUB 20150,20180,20400,20090,20100,20110,20130,53000:GOTO 20015
20090 RETURN 20095
20095 RETURN 1200
20100 RETURN 10560
20110 FILE$=HELP05$:GOSUB 6000:RETURN
20130 FILE$=HELP06$:GOSUB 6000:RETURN
20150 IF SYSOP THEN ENDD=LEN(FDEV$) ELSE ENDD=LEN(FDEV$)-1
20153 LD=TRUE:IF Q>1 THEN 20160 ELSE Q=2:B$(Q)="
20160 FOR X=2 TO Q:FOR STARTD=1 TO ENDD:FILE$=MID$(FDEV$,STARTD,1)+":"+DIR$+B$(X)
20165 NAME FILE$ AS FILE$
20167 IF LN THEN GOSUB 7000:GOTO 20175 ELSE GOSUB 6000:GOTO 20175
20170 NEXT STARTD:A$="Directory # "+B$(X)+" is not available today.":CR=2:GOSUB 1400
20175 NEXT X:GOSUB 1400:RETURN
20180 IF Q>1 THEN B=2:GOTO 20202
20200 A$="Enter full filename to 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 FOR X=A TO LEN(FDEV$)-1:Z$=B$(B):GOSUB 5000:B$(B)=Z$:IF Z$=CONFIG$GOTO 20231
20215 FILE$=MID$(FDEV$,X,1)+":"+B$(B):IF INSTR(FILE$,"?") OR INSTR(FILE$,"*") OR INSTR(FILE$," ") OR MID$(FILE$,LEN(FILE$),1)= "." GOTO 20231
20220 OK=0:NAME FILE$ AS FILE$
20225 IF OK THEN 20235
20230 NEXT
20231 A$="File <"+B$(B)+"> was not found. Type L for directory.":CR=2:GOSUB 1400:IF LPRT THEN LPRINT"     File "+B$(B)+" was not found.
20233 GOTO 20020
20235 BBIN=0:EXT$=RIGHT$(FILE$,4):IF EXT$=".EXE" OR EXT$=".COM" OR EXT$=".OBJ" THEN GOSUB 1400:A$="This is a binary file and requires XMODEM transfer":GOSUB 1400:BBIN=-1
20236 IF BTOK AND EXT$=".BAS" THEN GOSUB 1400:A$="This is a binary file and requires XMODEM transfer":GOSUB 1400:BBIN=-1
20238 Z$=FILE$:IF(Z$=MESSAGES$OR Z$=MESSAGES.BAK$OR Z$=COMMENTS$OR Z$=USERS$OR Z$=USERS$+".BAK"OR Z$=CALLERS$OR Z$=RBBS$OR Z$=CTTY$)GOTO 20231
20239 FINFO$="(D) "+Z$
20240 A$="Download type <X>modem, <A>scii, <Q>uit":CR=1:GOSUB 1500:IF Q=0 THEN 20240 ELSE Z$=B$(1):FT$=Z$:GOSUB 5000
20260 FF=INSTR("XAQ",Z$):IF FF=0 THEN 20240
20270 ON FF GOTO 20290,20340,20280
20280 RETURN
20290 CLOSE 2:OPEN "R",2,FILE$,128:GOSUB 20750:IF NOT BIT.8 THEN GOSUB 1400:A$="Switching to N,8,1 for binary transfer. You do the same.":GOSUB 1400:CR=2:GOSUB 50510
20310 A$="Ready to send. Enter <Ctrl X> to abort transfer...":GOSUB 1400:GOSUB 50510:GOSUB 21300:CR=2:A$="":GOTO 20390
20340 IF BBIN THEN GOTO 20235 ELSE CLOSE 2:OPEN "I",#2,FILE$:GOSUB 20750:A$="Transfer can be suspended with <Ctrl-S>, aborted with <Ctrl-X>.":CR=2:GOSUB 1400:A$="Ready to send. Open download file then enter <C/R> to start":CR=1:GOSUB 1500
20380 ABT$=CAN$:STI=-1:GOSUB 6030:ABT$=CHR$(11):CR=2:IF RET THEN A$="<*>Download aborted<*>":STATUS=FALSE:GOTO 20390
20381 A$=CHR$(26):GOSUB 1400:IF NOT LOCAL THEN FOR II=1 TO 5:PRINT#3,BELL$:GOSUB 50510:NEXT II
20385 A$="<*>End of file<*>":STATUS=TRUE
20390 GOSUB 1400:GOSUB 50600:RETURN
20400 IF Q=2 THEN B$(1)=B$(2):GOTO 20430
20420 CR=1:A$="Enter full name of file to be uploaded":GOSUB 1500:IF Q=0 THEN RETURN
20430 Z$=B$(1):GOSUB 5000:FOR X=1 TO LEN(FDEV$):FILE$=MID$(FDEV$,X,1)+":"+Z$
20435 IF INSTR(FILE$,"?") OR INSTR(FILE$,"*") OR INSTR(FILE$," ") OR MID$(FILE$,LEN(FILE$),1)= "." GOTO 20420
20440 OK=0:NAME FILE$ AS FILE$
20450 IF NOT OK THEN 20460
20455 NEXT X
20460 IF NOT OK AND SYSOP THEN A$="File exists, overwrite or supersede":GOSUB 1500:IF YES THEN OK=-1
20465 IF OK THEN FILE$=RIGHT$(FDEV$,1)+":"+Z$:CLOSE 2:OPEN "R",2,FILE$,128
20470 IF NOT OK THEN CLOSE 2:A$="File <"+Z$+"> already exists. You must use a unique name.":CR=2:GOSUB 1400:GOTO 20420
20475 Z$=LEFT$(FILE$,2)+UDIR$:CR=2:GOSUB 1400:GOSUB 52000:A$="Upload disk has"+ACUM$:CR=2:GOSUB 1400:FINFO$="(U) "+FILE$:GOSUB 950
20480 A$="Upload type <X>modem, <A>scii, <Q>uit":CR=1:GOSUB 1500:IF Q=0 THEN 20480 ELSE Z$=B$(1):FT$=Z$:GOSUB 5000
20500 FF=INSTR("XAQ",Z$):IF FF=0 THEN 20480
20510 ON FF GOTO 20530,20560,20740:STOP
20530 IF NOT BIT.8 THEN GOSUB 1400:A$="Switching to N,8,1 for binary transfer. You do the same, then start XMODEM.":CR=2:GOSUB 1400
20540 A$="Ready to receive. Enter <Ctrl-X> to abort transfer...":GOSUB 1400:GOSUB 50500:OK=-1:GOSUB 20860:X#=0:IF OK THEN 20700 ELSE 20730
20560 A$="* Please note you MUST Terminate the transfer with a <Ctrl-K>.":CR=2:GOSUB 1400:A$="Ready to receive file......":GOSUB 1400:OK=0:X=FALSE:CLOSE 2:OPEN "O",2,FILE$:PRINT"<Esc> from SYSOP will abort.
20600 WHILE NOT EOF(3):GOSUB 42000:IF LOF(3)<128 THEN PRINT#3,XOFF$;:X=TRUE
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=FALSE: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$="File upload complete.":GOSUB 1400:X#=128:GOTO 20700
20670 A$=XOFF$+"System error, upload aborted, enter <Ctrl-K> 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,LEFT$(FILE$,2)+UDIR$:FILE$=MID$(FILE$,3)
20710 A$="Enter 40 character description of "+FILE$+"(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"\          \#######,  & - &";FILE$;X#;DATE$;B$(1)
20725 CLOSE 2:Y$=" >> uploaded << ":ULD=ULD+1:GOSUB 50610:RETURN
20730 A$="File upload abort. Partial file deleted from disk.":GOSUB 1400
20740 CLOSE 2:KILL FILE$:RETURN
20745 A$=XOFF$+"File upload aborted by SYSOP, stop transmission then enter <Ctrl-K> to continue":GOTO 20675
20750 CNT#=FIX(LOF(2)/128):X#=LOF(2)/128:IF CNT#<>X#THEN X#=X#+1
20770 IF Z$="X" THEN TIMMOD=165 ELSE TIMMOD=139
20780 GOSUB 1400:A$="File size is"+STR$(INT(X#))+" blocks.":FINFO$=FINFO$+RIGHT$(A$,(LEN(A$)-12)):GOSUB 1400:IF BPS=&H100 THEN X#=X#*TIMMOD/45 ELSE IF BPS=-1 THEN X#=X#*TIMMOD/120 ELSE X#=X#*TIMMOD/30
20790 GOSUB 950:A$="Transfer time:"+STR$(INT(X#/60))+" minutes,"+STR$(X#MOD 60)+" seconds.":GOSUB 1400:GOSUB 41000:IF(INT(X#/60)+1)>INT(TR!/60)THEN A$="Sorry, not enough time left to download.":GOSUB 1400:GOSUB 20015 ELSE RETURN
20810 GOSUB 42000:Y$="":DELAY!=FNTI!+2
20840 IF NOT EOF(3)THEN Y$=INPUT$(LOC(3),3):RETURN
20850 IF FNTI!<DELAY! THEN GOTO 20840 ELSE Y$="":RETURN
20860 IF PRT THEN PRINT:PRINT">>> SYSOP, enter <Esc> to cause early termination. <<<
20875 GOSUB 50510:IF NOT BIT.8 THEN OUT LCR,3:GOSUB 21280
20900 X$="":SEC=1:SECTOT=0:FIELD 2,128 AS Z$:PRINT#3,NAK$;
20920 FOR XB=1 TO 10:Y$=INKEY$:IF Y$=ESC$THEN 21270 ELSE GOSUB 20810
20930 IF LEFT$(Y$,1)=SOH$THEN 21020
20940 IF LEFT$(Y$,1)=EOT$THEN 21220
20950 IF LEFT$(Y$,1)=CAN$THEN 21230
20960 IF Y$<>""THEN GOSUB 21280:GOTO 20920
20970 NEXT XB:PRINT#3,NAK$;:IF PRT THEN PRINT"Timeout
20990 GOTO 20920
21000 GOSUB 20810:IF Y$=""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 >= 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 SECTOT=SECTOT+1:IF PRT THEN PRINT"Received Block #"SECTOT;
21130 PRINT#3,ACK$;
21131 LSET Z$=MID$(X$,4):PUT 2
21140 IF NOT OK THEN 21230
21145 SEC=255 AND(SEC+1):IF PRT THEN PRINT"- verified"
21150 X$="":CK=0:GOTO 20920
21160 SECTOT=SECTOT+1:IF PRT THEN PRINT SECTOT
21165 PRINT#3,NAK$;:SECTOT=SECTOT-1:GOTO 21150
21170 IF PRT THEN PRINT"Short Block in #";
21175 GOTO 21160
21180 IF PRT THEN PRINT"Long Block in #";
21185 GOTO 21160
21190 IF PRT THEN PRINT"Checksum Error in #";
21195 GOTO 21160
21200 IF PRT THEN PRINT"Block # Error in #";
21205 GOTO 21160
21210 IF PRT THEN PRINT"Complement Error in #";
21215 GOTO 21160
21220 IF PRT THEN PRINT"File Closed.
21225 PRINT#3,ACK$;:GOTO 21250
21230 IF PRT THEN PRINT"Transfer Aborted.
21240 OK=FALSE:PRINT#3,CAN$;CAN$;
21250 IF NOT BIT.8 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"Transfer aborted by <Esc> keyin
21275 GOSUB 21280:GOTO 21240
21280 REM
21290 WHILE NOT EOF(3):DUMMY$=INPUT$(LOC(3),3):WEND:RETURN
21300 IF PRT THEN PRINT:PRINT">>> SYSOP, enter <Esc> to cause early termination. <<<
21320 IF NOT BIT.8 THEN GOSUB 50510:OUT LCR,3
21330 SEC=0:GOSUB 21280:FIELD #2,128 AS X$:SECTOT=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 SECTOT=SECTOT-1:GOTO 21510
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)<LOF(2)/128 THEN 21490
21482 IF PRT THEN PRINT"End of file
21485 GOTO 21530
21490 GET 2:SEC=255 AND(SEC+1):A$=SOH$+CHR$(SEC)+CHR$(SEC >= 255)+X$:CK=0:FOR I=1 TO LEN(A$):CK=CK+ASC(MID$(A$,I,1)):NEXT:CK=(CK AND 255)
21502 IF CK>256 THEN CK=CK-256:GOTO 21502
21503 A$=A$+CHR$(CK)
21510 SECTOT=SECTOT+1:IF PRT THEN PRINT"Sending Block #"SECTOT;
21520 PRINT#3,A$;: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 NEXT:GOSUB 21280:GOTO 21530
21540 IF PRT THEN PRINT"Transfer aborted by <Esc> keyin
21545 Y$=CAN$:PRINT#3,CAN$;CAN$;:GOTO 21570
21550 IF PRT THEN PRINT"Transmission Ended.
21555 STATUS=TRUE:GOTO 21570
21560 STATUS=FALSE:IF PRT THEN PRINT"Transmission Aborted by receiver
21570 IF NOT BIT.8 THEN GOSUB 21280:A$="Enter C/R after switching to E,7,1":GOSUB 1400:GOSUB 50510:OUT LCR,26:GOSUB 1500
21585 RETURN
30000 A$=CHR$(12)+"SYSOP is active....You are now in CHAT mode...":CR=2:GOSUB 1400:GOSUB 50500:A$="Hello, this is "+NFIR$+" "+NLAS$+". Sorry to break in but....":CR=2:GOSUB 1400:GOSUB 4770:RETURN
31000 ON ERROR GOTO 0:CLS:IF MLSW THEN GOSUB 60400:SYSTEM ELSE SYSTEM
32000 IF MLSW THEN GOSUB 60400:END
32010 CLS:KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+STRING$(1,34):KEY 4,"SAVE"+STRING$(1,34):KEY ON:CLEAR:END
33000 LPRT=NOT LPRT:IF PRT THEN GOSUB 49000:GOSUB 950
33010 GET 1,1:MID$(R$,56,2)=STR$(LPRT):PUT 1,1:RETURN
33040 ANNOY=NOT ANNOY:IF PRT THEN GOSUB 49000:GOSUB 950
33050 GET 1,1:MID$(R$,52,2)=STR$(ANNOY):PUT 1,1:RETURN
39000 IF PRT THEN PRT=FALSE:LOCATE,,0:CLS:RETURN
39020 LOCATE 25,1,0:PRINT SPACE$(79-(LEN(NAM$)+11));NAM$"  "TI$;
39030 PRT=TRUE:LOCATE 25,1,1:PRINT"SNOOP ON...  FREE SPACE="FRE("A");:LOCATE 23,1,1:LOCATE 24,35:PRINT"--------------------------------------------":LOCATE 24,35:PRINT"| [F1] - SYSTEM       | [F2] - BASICA      |
39060 LOCATE 24,35:PRINT"| [F3] - PRINT TOGGLE | [F4] - PAGE TOGGLE |":LOCATE 24,35:PRINT"| [F5] - GO ON-LINE   | [F6] - AVAIL TOGGLE|":LOCATE 24,35:PRINT"| [F7] - SYSOP NEXT   | [F8] - TEMP SYSOP  |
39090 LOCATE 24,35:PRINT"| [F9] - SNOOP TOGGLE | [F10]- FORCE CHAT  |":LOCATE 24,35:PRINT"--------------------------------------------":RETURN
41000 IF FNTI!>TI!THEN TIME.ON.SYS!=FNTI!-TI! ELSE TIME.ON.SYS!=FNTI!+864000!
41010 TR!=TIME.MAX!-TIME.ON.SYS!:IF TR!<0 THEN 10560
41020 TR$=STR$(INT(TR!/60)):RETURN
42000 IF LOCAL THEN RETURN:IF CTI!>TI!THEN CTI!=TI!+(10*60)
42010 IF INP(MSR)<128 THEN 13540
42020 RETURN
43000 IF NOT BIT.8 THEN A$="Cannot change to graphics while in 7 bit mode":GOTO 43020
43010 GR=NOT GR:IF GR THEN A$="Graphics mode on" ELSE A$="Graphics mode off
43020 GOSUB 1400:GOTO 1200
49000 IF AVAILABLE THEN FINFO$="AVL " ELSE FINFO$="
49010 IF ANNOY THEN FINFO$=FINFO$+"ANY " ELSE FINFO$=FINFO$+"
49020 IF LPRT THEN FINFO$=FINFO$+"LPT " ELSE FINFO$=FINFO$+"
49030 IF SYSOPNEXT THEN FINFO$=FINFO$+"SYS
49040 RETURN
50000 A$="A Fatal error has occurred... System going down":GOSUB 1400:GOTO 13540
50400 A$=" ":GOSUB 1400:A$="<A>bort, <C>ontinue, <D>elete, <E>dit, <I>nsert, <L>ist, <M>argin, <S>ave":GOSUB 1400:RETURN
50500 DELAY!=FNTI!+1:GOTO 50520
50510 DELAY!=FNTI!+3
50520 IF FNTI!<DELAY! THEN 50520 ELSE RETURN
50600 IF STATUS=TRUE THEN Y$=" Downloaded " ELSE Y$=" Aborted
50605 IF STATUS=TRUE THEN DLD=DLD+1
50610 IF LOCAL THEN 50620 ELSE GOSUB 482:Y$=SPACE$(5)+FILE$+Y$+"at "+TIM$+" using "+FT$
50612 GOSUB 56000
50613 LSET CALRINFO$=Y$:CDX=CDX+1:PUT 2,CDX
50615 IF LPRT THEN LPRINT Y$
50620 RETURN
52000 ACUM$="":CLS:FILES Z$:CC=CSRLIN-2:FOR RICH=1 TO 25:T=SCREEN(CC,RICH):IF T>122 THEN 52023
52022 ACUM$=ACUM$+CHR$(T)
52023 NEXT RICH:GOSUB 950:LOCATE CC+2,1:IF NOT PRT THEN CLS
52024 IF INSTR(ACUM$,"Bytes free") THEN RETURN
52030 ACUM$=" 2010 -- free space unavailable":IF COMPILED AND DOSVER>1 THEN GOTO 52040 ELSE RETURN
52040 DR=INSTR("ABCDEF",LEFT$(Z$,1)):IF DR=0 THEN 52100
52060 CALL UTSPACE(DR,AVAIL,TOTAL,BYTES,SECTORS):DR!=DR:AVAIL!=AVAIL:BYTES!=BYTES:SECTORS!=SECTORS:TOTAL.BYTES!=AVAIL!*BYTES!*SECTORS!:ACUM$=STR$(TOTAL.BYTES!)+" Bytes free
52100 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 ENDD=LEN(FDEV$)-1:LD=TRUE:LN=TRUE:IF B$(2)="ALL" OR B$(2)="all" THEN 53070
53060 GOSUB 20160:LN=FALSE:RETURN
53070 G=0:J=2:FOR STARTD=1 TO ENDD:B$(2)=MID$(FDEV$,STARTD,1)+":"+DIR$+"???.":GOSUB 10720:CLS:NEXT:GOSUB 950:FOR J=1 TO G:B$(J+1)=FNSS$(FLS$(J)):NEXT:Q=G+1:SDIR$=DIR$:DIR$="":GOSUB 20160:DIR$=SDIR$:LN=FALSE:RETURN
56000 CLOSE 2:OPEN "R",2,CALLERS$,64:FIELD 2,64 AS CALRINFO$:RETURN
57000 A$="":GOSUB 1400:GOSUB 56000:UDX=CDX
57005 IF UDX <1 OR RET THEN RETURN
57010 GET 2,UDX:A$=CALRINFO$:IF LEFT$(A$,3)="   " THEN 57030
57025 UDX=UDX-1:GET 2,UDX:A$=A$+LEFT$(CALRINFO$,15):GOTO 57035
57030 IF NOT SYSOP 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 SYSOP=NOT SYSOP:C.C=CSRLIN:C.L=POS(0):LOCATE 25,1:PRINT SPACE$(79);:LOCATE 25,1:IF SYSOP THEN PRINT"TEMPORARY SYSOP PRIVILEGES GRANTED"; ELSE PRINT"TEMPORARY SYSOP PRIVILEGES REMOVED";
58020 GOSUB 50510:LOCATE C.C,C.L:GOSUB 950:RETURN
60000 IF LEN(FK$) < 2 THEN RETURN
60010 IF ASC(RIGHT$(FK$,1))= 59 THEN GOSUB 31000
60020 IF ASC(RIGHT$(FK$,1))= 60 THEN GOSUB 32000
60030 IF ASC(RIGHT$(FK$,1))= 61 THEN GOSUB 33000
60040 IF ASC(RIGHT$(FK$,1))= 62 THEN GOSUB 33040
60050 IF ASC(RIGHT$(FK$,1))= 63 THEN GOSUB 14000
60060 IF ASC(RIGHT$(FK$,1))= 64 THEN GOSUB 9500
60070 IF ASC(RIGHT$(FK$,1))= 65 THEN GOSUB 15000
60080 IF ASC(RIGHT$(FK$,1))=66 THEN GOSUB 58000
60090 IF ASC(RIGHT$(FK$,1))= 67 THEN GOSUB 39000
60100 IF ASC(RIGHT$(FK$,1))= 68 THEN GOSUB 30000
60110 RETURN
60200 DEF SEG=0:CALLSEG=PEEK(&H1FE)+256*PEEK(&H1FF):IF CALLSEG=0 THEN PRINT "MultiLink no longer active!":RETURN
60240 CALLOFF=0:BX=-4:AX=&H1:IF CP$="COM2" THEN BX=-3
60270 DEF SEG=CALLSEG:GOSUB 60510:IF AX=0 THEN PRINT "MLINK Enque Successful
60290 IF AX=1 THEN PRINT "MLINK Resource unavailable!
60300 IF AX=2 THEN PRINT "MLINK System error!
60310 RETURN
60400 BX=-4:AX=&H100:IF CP$="COM2" THEN BX=-3
60430 DEF SEG=0:CALLSEG=PEEK(&H1FE)+256*PEEK(&H1FF):IF CALLSEG=0 THEN PRINT "MultiLink no longer active!":RETURN
60450 CALLOFF=0:DEF SEG=CALLSEG:GOSUB 60510:IF AX=0 THEN PRINT "MLINK Deque Successful
60480 IF AX=2 THEN PRINT "MLINK System error!
60490 DEF SEG=0:RETURN
60510 IF COMPILED THEN GOTO 60550
60520 PRINT"When under the BASIC interperter.":PRINT"Make the BASIC source statement # 60540 an executable statement.
60540 'CALL CALLOFF(AX,BX):RETURN  This is 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,CALLOFF):RETURN
62500 KILLMSG=0:REPLY=0:IF NOSTOP THEN 4625 ELSE IF USERMSG THEN A$="More (Y),N,NS,RE,K" ELSE A$="More (Y),N,NS,RE
62501 GOSUB 1500:IF NO THEN 4650
62505 IF KILLMSG AND (USERMSG OR SYSOP) THEN GOSUB 62520:GOSUB 3950:GOSUB 62530:GOTO 4625
62515 IF NOT REPLY THEN GOTO 4625 ELSE IF LEFT$(SUB$,3)<>"(R)" THEN SUB$="(R)"+LEFT$(SUB$,22)
62516 T$=FROM$:FROM$=NAM$:GOSUB 62520:GOSUB 2000:GOSUB 62530:GOTO 4625
62520 SQ=Q:SB$=B$:SLI=LI:SL=S:SNS=NOSTOP:SR=R:RETURN
62530 Q=SQ:B$=SB$:LI=SLI:L=SL:NOSTOP=NS:R=SR:KILLMSG=0:REPLY=0:GOSUB 1575:RETURN
63000 'CPC12 - *** END OF PROGRAM ***

RBBS-PC.DOC

REMOTE BULLETIN BOARD SYSTEM

	   for the

    IBM Personal Computer

       Version CPC12.1

       Copyright 1983, 1984

	     by

       D. Thomas Mack
       10210 Oxfordshire Road
       Great Falls, Virginia 22066
       VOICE -- (703) 759-4357
       DATA  -- (703) 759-5049

	     AND

       Jon Martin
       4396 N. Prairie Willow Ct.
       Concord, California 94521
       DATA  -- (415) 689-2090

       January 29, 1984


      TABLE OF CONTENTS


 1.0  INTRODUCTION
      1.1  The Capital PC User Group
      1.2  The "contribution" requested for RBBS-PC
      1.3  The "history" behind RBBS-PC
      1.4  RBBS-PC Update Conventions
      1.5  What's new with CPC12.1

 2.0  RECOMMENDED MINIMUM SYSTEM CONFIGURATION

 3.0  MODEM CONTROLS

 4.0  MODEM CABLE REQUIREMENTS

 5.0  OPERATING SYSTEM REQUIREMENTS

 6.0  INSTALLING RBBS-PC CPC12

 7.0  USING THE "CONFIG" UTILITY TO CONFIGURE RBBS-PC CPC12

7.1   SYSOP's name and password for remote access.
7.2   Ring-back Feature.
7.3   Drive Available for Uploading.
7.4   Drives Available for Downloading.
7.5   Drive with RBBS-PC System Files.
7.6   RBBS-PC Files on the Default Drive.
7.7   Summary of RBBS-PC System Files.
7.8   Name of Directory to Update for Uploads
7.9   Prompt Sounds
7.10  Maximum Time on System.
7.11  Maximum Number of Messages Allowed.
7.12  Months of Inactivity before a User is Deleted.
7.13  Number of System Bulletins.
7.14  Echo User Sessions On Screen (SNOOP).
7.15  Execution Type
7.16  Communication Port to be Used
7.17  Selecting Alternate CONFIG Screens
7.18  RBBS-PC Text File Drive and File Names
7.19  Version of DOS RBBS-PC Will Run Under
7.20  RBBS-PC System File Drive and File Names
7.21  Making System Bulletins "Optional"
7.22  Color Monitor's Foreground/Background/Border
7.23  Selecting the Modem Speaker On or Off
7.24  Reminding Users of Messages They Left
7.25  Indicating .BAS Files Are Binary
7.26  Providing the Name of the .BAT file for RBBS-PC
7.27  Providing the Name of the .BAT file for CTTY
7.28  Omitting First Level Directory in "New" Command
7.29  Omitting Upload Directory in "New" Command
7.30  Making System "Welcome" Interruptable
7.31  RBBS-PC Menu Text File Drive and File Names
7.32  Graphic Menus
7.33  Remind Users of Uploads and Downloads
7.34  Default User Page Length
8.0  COMMUNICATION BUFFER
9.0  USING MULTIPLE FILE DIRECTORIES
10.0  SETTING UP ".BAT" FILES FOR RBBS-PC
11.0  GETTING A "FREE" TELEPHONE LINE FROM MA BELL
12.0  SYSOP FUNCTIONS
13.0  UPLOADED FILE TIPS
14.0  COMPILING AND LINKING RBBS-PC
15.0  LIMITED LICENSE
16.0  LIMITED WARRANTY
17.0  RBBS-PC UTILITY PROGRAMS
18.0  RBBS-PC FUTURE DIRECTIONS
APPENDIX A -- Running RBBS-PC CPC12.1 Under MultiLink
1.0 INTRODUCTION

 The RBBS-PC software is the result of many thousands of man-hours of effort
by members of the Capital PC Users group.  This work was done in the interest
of introducing as many people as possible to the communications capabilities
of the IBM PC family of personal computers.  As each new RBBS-PC system goes
on-line across the U.S., there will be more unattended communications systems
available for IBM PC users to call.  The source code also provides a
tremendous education in unattended communications software design.

 A new system operator is often frustrated because the system does not get
much activity at first.  This is especially true for hobbyists.  Some
operators get so frustrated that they shut down the system before it really
gets started.  This is unfortunate because it usually takes time for a new
system telephone number to get into circulation.  Most systems only receive a
few calls during the first two months of operation.  For system operators that
get beyond this "break in period", however, there are new experiences in
store.	You will begin to see the opportunities for new experiences as you
read further.

1.1 The Capital PC Users Group

The Capital PC User Group is a Maryland Corporation whose "legal
name" is the Capital PC User Group Inc.   The purpose of the
CPCUG is as follows:

 a.  To provide a forum for member of the IBM PC community for their mutual
benefit, increased understanding, and utilization of the IBM PC.
 b.  To encourage experimentation and research in the current and potential
use of the IBM PC.
 c.  To provide an opportunity for all users of the IBM PC to exchange ideas,
knowledge, and experience for the enrichment of all concerned.
 d.  To provide an opportunity for both formal and informal education in
computer applications, hardware, and software technologies.
 e.  To provide a medium of communication with user groups in other areas
(location and orientation).
 f.  To provide an opportunity for the formation of special interest groups.
 g.  To provide a medium for the software exchange of public domain and
contributed programs.  The illegal copying, use, or distribution of software
is specifically prohibited.
h.  To assist members in acquiring computer hardware and software.

 The CPCUG is a non-profit organization according to Section 501C4, Social
Welfare, of federal law.  All revenues are re-invested in and applied to the
CPCUG education programs.

1.2  The "contributions" requested for RBBS-PC

 The "logo" of RBBS-PC requests contributions.  This is because the RBBS-PC
may be perceived as an advantage to user-groups, businesses, or government
agencies.  It is hard to put a value on the RBBS-PC as it varies from
organization to organization and from time-frame to time-frame.

 The first and most desirable level of "contribution" is public domain
software sent to the Capital PC Software Exchange (P.O.  Box 6128, Silver
Spring, MD 20906).  This requires that you or your organization take the time
and trouble to document whatever you wish to share.  I would advise you to be
prepared to convince your organization's legal department that IBM PC
utilities, "peeks/pokes", etc.  are shareable with the world in general.
Often these are perceived as "proprietary" and lawyers tend to view software
contributions to the "public domain" as the needless jeopardizing of your
organization's technical dominance.  This legal myopia overlooks the fact that
"public domain" software can be used to establish your organization's
technical dominance.  If you have a new PC hardware product, a "public domain"
software that demonstrates it's potential may be just the marketing strategy
to create a demand for the product.  If you are a consulting organization,
your technical reputation may be widely spread through "public domain"
software.

 Independent of whether you can donate public domain software, If you wish to
become a member of CPCUG, simply send your name, address, home/work phone
numbers along with $25 to CPCUG, P.O.  Box 3189, Gaithersburg, MD 20878.

If in the final analysis you feel that you can do none of the
above,

     o remember those who have,
     o enjoy what they have nurtured, and
     o keep the faith with those who have gone before you.

1.3 The "history" behind RBBS-PC

 This version of the Remote Bulletin Board System RBBS-PC contains some
revisions and new features, but the basic structure of the program is the same
as it was originally written by Russ Lane and modified by Brad Hanson.	Brad
Hanson found it on the Dallas R/CPM\CBBS system and added many fixes and
modifications.	Capital PC Communication SIG members have added several other
enhancements beyond those added by Brad.  Contributors to the RBBS-PC software
and to this documentation are:

Jim Fry 	Larry Jordan	   Wes Meier
Kent Galbraith	Robert Jueneman    Rich Schinnell
Ken Goosens	Scott Loftesness   Dorn Stickle
Gary Horwith	Harry Logan	   Terry Steichen
Read Gilgen	Jon Martin	   Arnold Thomsen
Loren Jones	Tom Mack	   Clark Walker
Sidney Markowitz



To those whose names have not been mentioned -- apologies are
extended.  Take comfort in knowing that you live on in the work
that you have wrought.

 I first obtained RBBS-PC from Rich Schinnell in late June of 1983.  It was
Larry Jordan's CPC 9.0 and I subsequently made it compilable (CPC10.0) in July
of 1983.  In August of 1983, I put out CPC11.0 which included the use of the
CONFIG.BAS utility that created a separate "definition" file with the SYSOP's
predilections for RBBS-PC parameters -- this allowed the RBBS-PC.EXE to be
downloadable without revealing the SYSOP's passwords.  After that the releases
where as follows:

Release Date  Version Number  Significant Enhancements

  09/15/83	CPC11.1       1.  Contains UTSPACE.OBJ to
			       determine the amount of space
			       available for uploading.
			      2.  Gives a "busy" signal when the
			       SYSOP is on.
  10/01/83	CPC11.2       3.  A complete re-write of RBBS-PC
			       error recovery (line numbers 13xxx)
			       that I screwed up when I made
			       RBBS-PC "compilable."
			      4.  All references to the
			       communications are made symbolic
			       so that either COM1 or COM2 can
			       be used for RBBS-PC.
  10/28/83	CPC12.0       5.  RBBS-PC is enhanced to know
	   (formerly CPC11.3)  when it is operating under Multi-
			       Link and dynamically adjusts its
			       activities accordingly.
			      6.  Callers file becomes a random
			       file and the callers log is listed
			       beginning with the latest one.
			      7.  RBBS-PC can have an unlimited
			       number of file directories.
  12/18/83	CPC12.1       8.  RBBS-PC will allow the SYSOP
			       to drop into DOS via the CTTY
			       command when he logs on remotely.
			      9.  Provides a "New" command to
			       allow a user to find out what is on
			       the download directories since the
			       last time he was on.

 Jon Martin was the primary author of CPC12.0 and my co-author of CPC12.1
Obviously the follow-on to CPC12.0 and CPC12.1 would be the same thing under a
multi-tasking DOS (3.0).  However, Multi-Link is the only thing currently
available and, depending on how DOS 3.0 is priced/marketed, may always be the
"poor man's multi-user DOS." It is because of this that I went ahead with
CPC12.0 and CPC12.1.

 All the above changes have been "ADDITIVE." By that I mean CPC12.1 will run
in the same environment and in the same way as CPC11.0.  I felt that users
should not be forced to choose between features (i.e.  I can run either the
features on CPC11.2 or the features on CPC12.1).

1.4  RBBS-PC Updates Conventions

 As you know RBBS-PC is the work of many hands.  The quality of the source
code ranges from the elegant to the primitive.	In a very real sense it is a
"patchwork quilt." As RBBS-PC continues to evolve and be "debugged" the
following coding conventions have been helpful in the past and you are
requested to observe them in the future:

     --  Updates consist of two ASCII files.  One called
     xxxxxx.MRG which are the BASIC source statements to be
     merged into CPC12.1 as released by the Capital PC Software
     exchange.	The second file is called xxxxxx.DOC  which
     groups each line number in xxxxx.MRG into the specific
     functions added and describes the general feature added
     or bug that was fixed.  Obviously xxxxxx can be anything
     you wish to name it.  The second file will help the poor
     soul that must integrate several .MRG files and resolve
     whatever conflicts that may exist.

     --  Naming conventions of CPCxx.x are roughly as follows:

     1.  If a "bug" is being fixed CPCxx.x will be given a .MRG
     file name such as CPC12-1B.MRG with a corresponding
     CPC12-1B.DOC file describing the changes on a line number
     by line number basis.  The first version of CPCxx.x is always
     "A".  When you logon to RBBS-PC the version will be
     displayed.

     2.  If a new feature or enhancement is added the last digit
     in the CPCxx.x will be incremented by one (i.e. CPC12.0 was
     followed by CPC12.1).

     3.  If a significant change to source code or logic occurs,
     the first two digits of the release level will change (i.e.
     CPC11.2 was followed by CPC12.0)

 The purpose of these conventions is to allow everyone to know what RBBS-PC
level they are running under (users as well as SYSOP's) and understand the
logic behind the changes/fixes as they occur so each SYSOP can evaluate them
for his own needs.  If you have comments or fixes please let us know so that
they can be reflected in the RBBS-PC program and shared with all other users.
You can do that by sending your changes by mail to:

		   Capital PC Software Exchange
			  PO Box 6128
		      Silver Spring MD 20906

or uploading the changes to the CPCUG's Software Exchange's BBS
maintained by Rich Schinnell at (301) 949-8848. PASSWORD ="IBMPC"

While comments and suggestions are always welcome, those that are
accompanied by the RBBS-PC source code changes that implement
them  carry a lot more weight than those that don't.

1.5  What's New With CPC12.1

CPC12.1 represents several incremental enhancements to earlier
version of RBBS-PC.  The new features are:

 - One major accomplishment for RBBS-PC CPC12.1 was a correction to the random
CALLERS file.  In CPC12.0 the callers file used 128 bytes to store a 64 byte
record.  This was caused by an inconsistency in the way DOS 1.1 and DOS 2.0
keep track of bytes in use for random files.

 Before installing CPC12.1 the sysop must run a conversion program
(FIXFILES.BAS) to correct the oversized CALLERS file and eliminate all the
extra records.	Alternatively, the CALLERS file may simply be deleted.

 - Another major accomplishment for RBBS-PC CPC12.1 was a new SYSOP function,
12.  This allows SYSOPS that logon remotely to drop into DOS 2.0 to do system
maintenance from their remote terminals.  This feature requires that RBBS-PC
be started via a "batch" file that contains an "IF" statement that checks for
the dynamically built "batch" file for option 12 and which then executes it if
it exists.

-  Callers can be reminded of messages they have left for
others, and asked to kill those that are no longer needed.
This option is provided for in CONFIG.

-  COM, EXE & OBJ files have always required XMODEM
transmission.  A new option in CONFIG will prompt callers that
BAS programs also require XMODEM.  RBBS-PC will not allow any
"binary" files to be downloaded unless XMODEM is used.

 - A new function has been added to the files menu to allow a list new
function (N).  The user may stack the DIR files or may list them one at a
time.  The user may also request "ALL" to display new filenames on "all" dir
files.	The conversion program mentioned earlier (FIXFILES.BAS) initializes
each record in the USERS file for the new function and should be run against
your old users file.  Additionally three HELP files had to be changed to
include a description of this new user function -- HELP02, HELP05, and HELP07.
You should replace the old HELP files with these new ones.

 - Callers using the O)perator option outside of normal office hours will be
presented with the sysops' normal available hours.

 - The hours, minutes & seconds a caller is logged on during each session has
been added to the caller record written to the CALLERS file.  This information
will be useful to those SYSOP's that want to show the telephone company the
amount of revenue that their board is generating for them from long distance
phone calls.

 - The maximum input field length has been expanded from 32 bytes maximum to
64 bytes maximum (this especially useful when nesting multiple commands such
as reading multiple directories.

-  Selected error messages will now be sent to the CALLERS
file.

-  All timing loops have been modified to use the clock
for time keeping purposes instead of loop counts to allow
for consistent times whether running compiled or interpretive.

-  When "packing" the USER file, users that have been "locked out"
will not be purged.

 - Correct the time of day function to show 5 minutes after noon as 12:05PM.

 - Prevents the use of DOS 2.0 "global" file names for downloading or
uploading.

-  The SYSOP can grant a user SYSOP privileges for the duration of
the users session.

-  All RBBS-PC menus have been made external to RBBS-PC.  They are
text files that can be tailored to the SYSOP's tastes.

 - The RBBS-PC menus as well as the WELCOME and BULLETIN text files can
contain graphics characters.  These files are recognized by RBBS as being the
same name as the non-graphics text file appended by a "G".  These graphics
files are displayed instead of the non-graphics files when a user logs on with
no parity/8 data bits, requests graphics and the SYSOP has indicated that the
graphics files are available in the RBBS-PC.DEF file via the CONFIG.BAS
program.

 - The SYSOP can elect to remind users of the number of uploads and downloads
that they have done.  To use an existing USERS file, the SYSOP must run the
utility USRINIT1.BAS to zero out the counters for each user in the USERS file.
To obtain the counts of the uploads prior to release CPC12.1F, the SYSOP must
run the utility USRINIT2.  BAS against all CPC12.1 CALLERS files.  This
utility will update the counts in the USERS file based on the activity
recorded in the CALLERS file.  USRINIT2.BAS should not be run again as
CPC12-1F keeps a dynamic count of upload and download activity.

-  When files are listed, the MORE prompt allows both YES (the default),
NO, or NS (Non-stop listing) as responses.

 - When reading or scanning messages, a user can elect not only NS when he
gets the MORE prompt, but also RE (to enter a message in response to the
current message), and K (to kill the current message).	Additionally the user
can scan or read messages only to or from him by entering the command R;M.



2.0 RECOMMENDED MINIMUM SYSTEM CONFIGURATION

For RBBS-PC CPC12 the following equipment and software is
recommended:
IBM PC or IBM PC XT
80 column monitor
Asynchronous communications adapter (serial port)
Hayes Smartmodem 300, 1200, or 1200b or Rixon PC212A
Voice grade telephone connection for modem
25 pin RS-232-C modem cable (for stand alone modem)
128K RAM
Two double sided drives
Printer
PC-DOS 2.0
BASICA 2.0

It is possible to run RBBS-PC CPC12.1 under DOS1.1.  Also
you may choose to run it on only a single double sided drive or
two single sided drives.  However the less disk space available
the more file maintenance the SYSOP must do.

Note: You do not need a data grade line for operation of this
RBBS-PC. If you have a second telephone installed specifically
for RBBS-PC, ask for a second voice grade telephone line. Data
lines are very expensive and are not necessary.

3.0 MODEM CONTROLS

The program requires the use of a Hayes Smartmodem 300 or 1200 in
order to function properly.  The switch settings on the modem are
important and are described in the first few lines.  The settings
are as follows:

	      switch -- 12345678
	      setting - UUDDDUUD

 NOTE!	-- Setting switch 1 down was a requirement for CPC12-1A through
CPC12-1E only!	With the release of CPC12-1F switch 1 can be in the up
position (as it had been for all previous version of RBBS-PC earlier than
CPC12-1A).  CPC12-1F does not depend on the escape sequence of the HAYES modem
to maintain carrier when dropping into DOS2.0.

 These switch settings do not have to be changed for most other communications
software packages.  (You can leave the switches set as shown above if you use
PC-TALK for your smart terminal communications.  However, you will be advised
to give the modem an "ATZ" command before using PC-TALK in order to reset the
registers correctly.) The modem cards now available for the IBM PC can be used
without changing any of their switch settings as long as they have a Hayes
compatible command mode.  Be sure you put the modem card in the Hayes mode
before you boot up RBBS-PC or the software will not work.  The Hayes 1200b and
the Rixon PC212A have been tested successfully with RBBS-PC using the standard
card switch settings.

 RBBS-PC should only be used with versions 123 and above of the Hayes
Smartmodem 1200.  Earlier versions do not answer the telephone properly.  The
ATI command will cause the Smartmodem to tell you its version.	(ATI is
available on 1200 and 1200B only.)

 The answering portion of RBBS-PC is done internal to the program; it
'watches' for the ring in on the modem and then issues an 'A' to answer the
phone.	This was due to the original coding of a ringback feature.  If the
line is not a dedicated data line, a ring-back value of 6 or greater should be
entered when configuring RBBS-PC using the "CONFIG" utility (see parameter
number 7.) The RBBS will answer the phone at the ring number specified or will
answer on the first ring if the telephone is allowed to ring only once then
the call is placed again within 50 seconds.

 Callers who come in at even parity and 7 data bits, then try to change to no
parity and 8 data bits to use XMODEM may have a problem if they are using
PC-TALK and a Hayes Smartmodem.  Switch 1 has to be down (the factory default
position) or the carrier will be dropped when the communication parameters are
switched.  To avoid this the PC-TALK caller will have to enter the escape code
(factory setting "+++"), reset the modem parameters with Alt-P and/or Alt-F,
and then return to the "connect" state with the command "ATO." Callers who
wish to communicate at 450 baud have to call in at 300 baud then switch to 450
using the N)ew baud selection from the main menu.

4.0 MODEM CABLE REQUIREMENTS

 For the program to be activated, you have to have PIN 22 hooked up on the
RS-232-C cable (that runs between the modem and the computer).	If you do not
have PIN 22 hooked up between the modem and the computer, then you will get a
loop in lines 275 and 277 of the RBBS program, and even though the modem
answers the phone,the program will never respond due to the fact that it is
not aware that the phone has rung and the modem has answered.  PIN 22 is the
ring indicator coming from the modem going to the computer.

 The most common problem that I have been called about is that RBBS-PC "won't
answer the phone." The universal solution for each and every caller has been
to tell him to trade in his $55 12-pin Computerland RS232 cable for about $8
in parts from Radio Shack and put together you own RS232 cable with all the
pins connected.

5.0 OPERATING SYSTEM REQUIREMENTS

 Under the basic interpreter RBBS-PC uses the FILES function to determine the
amount of free space available on the disks for comments, messages, uploads,
and the SYSOP.	Under DOS1.1's BASICA this FILES function does not return the
amount of free space or file sizes and, hence, this information is
unavailable.  Under the compiler available free space is returned by the use
of an assembler subroutine (UTSPACE).

6.0 INSTALLING RBBS-PC CPC12

 RBBS-PC can be obtained from the Capital PC Software Exchange, P.O.  Box
6128, Silver Spring MD 20906 by sending a check for $6.  RBBS-PC is
distributed on one double-sided, 8-sector, diskette with a batch file,
SETUP.BAT, to install the system.  Prior to installation or running of
SETUP.BAT, a user should have formatted one double-sided diskette with his
operating system on it (DOS 1.1 or DOS 2.0).  This first diskette is referred
to as disk RBBS-SYS.  Also prior to installation or running of SETUP.BAT, a
user should have formatted a second double-sided diskette with BASICA.COM on
it.  This second diskette is referred to as disk RBBS-DATA01.

 To install RBBS-PC, first load your operating system into your PC.  Place the
RBBS-PC distribution diskette, labeled RBBS-PC, in the B drive of your system.
Place RBBS-SYS in the A drive of your system.  With the default drive as the A
drive, execute the batch utility for installing RBBS-PC by issuing the
following command:

		B:SETUP.BAT

The batch utility will tell you when to place the second diskette
in the A drive of your system and will automatically invoke the
"CONFIG" utility.  The distribution diskette for RBBS-PC CPC12
contain the following 33 files as shown:

RBBS-PC.EXE  CONFIG.BAS
DIR	     REMREM.BAS
BULLET1      ADDLF.BAS
SETUP.BAT    UNWS.BAS
WELCOME      FC.BAS
HELP01	     RBBS-PC.DOC
HELP02	     DIR
HELP03	     RBBS.BAS
HELP04	     UTSPACE.OBJ
HELP05	     FIXFILES.BAS
HELP06	     USRINIT1.BAS
HELP07	     USRINIT2.BAS
NEWUSER      MENU1
BULLETIN     MENU1G
MENU2	     MENU3
MENU2G	     MENU3G
WELCOMEG

 The exigencies of RBBS-PC software releases may mean that diskette 18
contains an earlier version of RBBS-PC than CPCxx.x (either you bought
diskette 18 awhile ago or there has been not enough time for diskette 18 to be
updated to this most current version).	Not to fear!  Your $6 has not been
wasted.  At least two bulletin boards keep the most current copies of RBBS-PC
CPCxx.x for downloading.  They are:

(703) 759-5049 -- East Coast (Great Falls, Virginia), and
(415) 689-2090 -- West Coast (Concord, California).

All the files on diskette 18 (even if it has an earlier version
than CPC12.1) are usable with CPC12.1 with the exception of:

RBBS-PC.BAS   -- The BASIC source code for RBBS-PC CPC12.1
RBBS-PC.REM   -- The remarks file that can be "merged" into
		 RBBS-PC.BAS to document the program's flow/routines
CONFIG.BAS    -- The BASIC source code for the configuration
		 utility that is required for CPC12.1 (note:
		 CPC12.1 will not run with earlier versions of
		 CONFIG.BAS)
 USRINIT1.BAS -- Utility to zero up/download counters in the USERS
		 file.
 USRINIT2.BAS -- Utility to scan existing CPC12.1 CALLERS files and
		 update the USERS file with up/download activity.
 MENU1	      -- Menu of commands for SYSOP's only.
 MENU1G       -- Graphics version of MENU1
 MENU2	      -- Main message subsystem menu of commands
 MENU2G       -- Graphics version of MENU2
 MENU3	      -- File subsystem menu of commands
 MENU3G       -- Graphics version of MENU3
 WELCOMEG     -- Graphics version of WELCOME

 If you don't have these three files on your diskette 18, feel free to
download them from the above two RBBS-PC bulletin boards.  Alternatively, you
can wait until CPC12.1 is on diskette 18.  Generally speaking, diskette 18 is
one to three months behind the "latest" release of RBBS-PC.  This is because
the Software Exchange prefers to wait until the RBBS-PC software has survived
on more than the two or three bulletin boards that are involved in "beta"
testing RBBS-PC for the Capital PC Users Group.  Additionally, it also takes
time to "package" each new diskette 18 and make sure that it "works".  To all
of this is the added delay of making multiple copies of diskette 18.  As you
can see a one to three month "delay" in getting new releases onto diskette 18
isn't all that long a time to squeeze all this activity into (especially for
an all-volunteer organization!).

7.0 USING THE "CONFIG" UTILITY TO CONFIGURE RBBS-PC CPC12

 The RBBS-PC.DEF file you get (which, if you don't have it originally, is
created for you by the CONFIG.BAS program) contains the program's default
operating parameters and values.  When you run the Config.bas program to
either create RBBS-PC.DEF or to update it, you can change many of these
parameters to meet your needs.	Certain parameters which control critical
operations of the programs are embedded in the RBBS program and should not be
normally be changed by the system operator.  Unless a value or parameter is
noted here, it should be changed only with great forethought and caution.  The
CONFIG utility is invoked by placing the RBBS system files in the default
drive (which is assumed here to be A:  -- this is important because when the
configuration process is finished, the program will write the RBBS-PC.DEF file
to the RBBS disk) and invoking the command:

		  BASICA  B:CONFIG

7.1 SYSOP's name and password for remote access.

 Parameters 1-4 request the RBBS system operator's (SYSOP) name and dual
passwords.  When logging onto the system remotely, SYSOP can log on using
Password #1 for his first name and Password #2 for his last name,in which case
the system will recognize him as SYSOP and allow him to perform all the SYSOP
functions even as a remote user.

 Parameter 5 sets the system operator's sign-on mode as EXPERT or NOVICE.
Unless you a very familiar with the RBBS-PC CPC12's command structure, the
SYSOP's sign-on mode should be NOVICE.  Parameter 6 is the SYSOP's "office
hours" (i.e.  when he can be paged by a user).  The IBM PC's bell is rather
insistent, and these hours should be set to match when you will be within
ear-shot of the RBBS-PC.  The times are set using a 24-hour military clock
(i.e.  10:00 P.M.  is 2200 hours).  NOTE:  These hours can be overridden by
activating the page bell (F4).

7.2 Ring-back Feature

 Parameter 7 specifies the number of rings to answer the phone on after a
caller rings once and then calls back within 50 seconds.  This is normally of
use on non-dedicated lines.  In a non-dedicated line situation, the line is
used for both voice and the RBBS-PC.  Therefore if someone wants to logon to
the RBBS-PC, he calls and lets the phone ring once.  Then he calls back within
50 seconds and the RBBS-PC CPC12 software will answer the phone after the
number rings specified in this parameter.  This is a very shakey feature of
RBBS-PC CPC12 and anyone who is considering seriously using RBBS-PC CPC12
should consider a separate voice grade telephone line dedicated just to the
RBBS-PC.

7.3 Drive Available for Uploading
 Parameter 8 specifies the letter of the single drive available for uploading
files to.  When a file is uploaded, the DIR file, specified by CONFIG
parameter 11, will be automatically updated with the file name, file size,
date of upload, and short description as specified by the user.

7.4 Drives Available for Downloading
 Parameter 9 specifies the letter of the drives from which files can be
downloaded.  The order in which they are specified is the order in which the
drives will be searched.  If the order is BAC, then drive B will be searched
first for the file, then drive A, and finally drive C.	While there can be
duplicate files on each of the drives, the first file found, will be the one
downloaded to the user.

7.5 Drive with RBBS-PC System Files
Parameter 10 (like parameter 41, discussed below) specifies the
letter of the drive which is to contain the RBBS-PC system files.
The RBBS-PC system files are:

USERS
USERS.BAK (backup of users file)
MESSAGES
MESSAGES.BAK (backup of messages file)
CALLERS
COMMENTS
LONGCALR

These files can not be downloaded by anyone and are described as
follows:

 USERS - The users file is a random access file that has a record for each
user that used the system.  The record contains a profile for the user that
includes the users name, password, city, state, type of machine, the last time
and date signed on, the last message read, the number of times signed on, the
state of the expert, line feed, prompt, sysop and lockout flags, and page
length.  The records are 128 bytes in length and are automatically maintained
by RBBS-PC.  The SYSOP can do some limited editing using function 8.  To
initialize the system simply ERASE this file.  If RBBS-PC does not find the
file on the system it will create it.  Because of the fixed length records in
this file, it should not be created or edited outside RBBS-PC.	When the SYSOP
"packs" the user file, the file USERS.BAK is created to hold the old users in
case the "pack" is unsuccessful (i.e not enough space to duplicate the users
file).	If the disk fills up during the pack function RBBS-PC will recover the
USER file with USERS.BAK.

 MESSAGES - This file is a random file that contains the message text for the
RBBS-PC system.  The first record in the file contains the number of the last
message entered, the name of the last caller, the sysop available flag, the
printer active flag, the sysop-next flag and the operator page on/off flag.
It is used to find the next message number when a new message is added to the
system.  The rest of the file consists of message header records which are
followed by the message text for that header.The headers are linked through
forward relative record pointers that are also used to determine the number of
text records for the message.  The header contains the message number, from,
to, subject, password (^READ^ if a private message - which can be entered by a
user as a password!), date, status and pointer.  The status can be either
active or killed.  Killed messages are retained until either they are
recovered or the file is packed by the SYSOP.  If RBBS-PC does not find the
MESSAGES file it will create it and initialize it with no messages.  Because
of the fixed length records in this file, it should not be created or edited
outside RBBS-PC.  When the SYSOP "packs" the message file, the file
MESSAGES.BAK is created to hold the old messages in case the "pack" is
unsuccessful (i.e.  not enough space to duplicate the message file).  If the
disk fills up during the pack function RBBS-PC will recover the message file
using MESSAGES.BAK.

 CALLERS - This file is a random file that contains a log of all callers as
they sign-on the system along with callers city and state, the date and the
time.  The names are added to the end of the file as well as are the names of
the files uploaded/downloaded by the caller.  If the file is not found RBBS-PC
will create a new one.	The file should be ERASED to clear the log.

 COMMENTS - This file is a sequential file that contains any comments that
have been left by users for the SYSOP.	The file can be scanned by a SYSOP
function or it can be TYPEd or edited outside the RBBS system.	A SYSOP
function is available to delete this file, or it can be emptied outside of
DOS.  While the file will be created by RBBS-PC if it is not found, it is
recommended that an empty file be present at all times.

 LONGCALR - Contains a log of any caller whose session was longer than Maximum
Time On System.  (CONFIG Utility parameter # 13) This file is appended to and
will be created if not found on the system.

7.6  Drive with RBBS-PC Text Files
 Only RBBS-PC.DEF is automatically assumed to be located on the default system
drive (drive A is suggested).  Parameter 21 specifies the letter of the drive
which is to contain the main RBBS-PC text files.  The main RBBS-PC text files
are:

WELCOME
WELCOMEG
BULLETIN (see description below)
BULLET1
BULLET2
BULLET3
BULLET4
BULLET5
BULLET6
NEWUSERS
HELP01
HELP02
HELP03
HELP04
HELP05
HELP06
HELP07
DIR

Additionally the menus for the various commands and subsystems
are also RBBS-PC text files external to RBBS-PC.  They are:

MENU1
MENU1G
MENU2
MENU2G
MENU3
MENU3G

Parameter 61 specifies the letter of the drive which is to contain
the menu text files.  It is recommended that these be place on an
electronic disk drive (i.e. RAM) rather than on diskettes.

Except for RBBS-PC.DEF, these files can be downloaded by anyone
and are described as follows:

WELCOME - This is a text file that is printed when a user first
enters the system.  It must be present, and it should be modified
to identify your system.

WELCOMEG - This is a text file that is printed in lieu of WELCOME
if the SYSOP has indicated via parameter 67 of CONFIG.BAS that
graphics are available.  It should contain the same information
as WELCOME.

 BULLETIN - This is a text menu file that is printed following the WELCOME
file when a user first enters the system.  It must be present, if "CONFIG
Utility parameter # 16" is greater than 1.  It can also be called from the
main menu with the <B>ulletins command.  If the SYSOP has indicated via
parameter 67 of CONFIG.BAS that graphics are available AND the name for this
file given by the SYSOP via parameter 22 of CONFIG.BAS is less than 8
characters long, a G will be appended to this file name when someone logs on
8/N and requests graphics.  The file name with the G appended to it should
contain the same information as the file name without the G.

BULLET1 - This is the first bulletin file referenced in the BULLETIN file.
BULLET2 - This is the second bulletin file referenced in the  BULLETIN file.
BULLET3 - This is the 3rd bulletin file referenced in the BULLETIN file.
BULLET4 - This is the 4th bulletin file referenced in the  BULLETIN file.
BULLET5 - This is the 5th bulletin file referenced in the BULLETIN file.
BULLET6 - This is the 6th bulletin file referenced in the BULLETIN file.
NEWUSERS - This is a text file that is displayed for new users
just before going to the main message menu and prompt.
HELP01 - text file that is printed when <H>elp is requested on
the main function prompt.  It contains	command information.
HELP02 - text file that is printed when a <?> is entered on the main function
prompt.  It is also printed following the NEWUSER file for new users and tells
users what functions the RBBS supports.
HELP03 - text file that describes the message protection options
when <?> is entered after the message <E>nter command is executed
at the main message menu.
HELP04 - text file that describes the message entry subfunctions
when <?> is entered at the subfunction prompt.
HELP05 - text file that is printed when <H>elp is entered in the
filing subsystem function prompt.
HELP06 - text file that is printed when a <?> is entered in the
filing subsystem function prompt.
HELP07 - text file printed when <H>elp is requested at the message read prompt.

 DIR - Option 38 specifies the name of the text file describing the names of
the directory files that contain the description of the files available for
downloading.  At least one DIR file has to be present on one of the diskettes
available for downloading.  Sub directories should be numbered and should be
reflected in the DIR file.

 RBBS-PC.DEF - This is an ASCII text file created as output by the CONFIG.BAS
file.  It contains the configuration parameters for the RBBS.  It is read by
RBBS to determine the configuration settings tailored to your RBBS-PC.

7.7 Summary of RBBS-PC CPC12 System Files

The following table shows the status of the RBBS-PC CPC12 system
and text files (system files are automatically created):

File Name	    Resides on		      File Type
USERS	     CONFIG specified drive    RBBS-PC system file
USERS.BAK	      /|\	       RBBS-PC system file
MESSAGES	       |	       RBBS-PC system file
MESSAGES.BAK	       |	       RBBS-PC system file
CALLERS 	       |	       RBBS-PC system file
COMMENTS	       |	       RBBS-PC system file
LONGCALR	       |	       RBBS-PC system file
WELCOME 	       |	       text file
WELCOMEG	       |		   /|\
MENU1		       |		    |
MENU1G		       |		    |
MENU2		       |		    |
MENU2G		       |		    |
MENU3		       |		    |
MENU3G		       |		    |
BULLETIN	       |		    |
BULLET1 	       |		    |
BULLET2 	       |		    |
BULLET3 	       |		    |
BULLET4 	       |		    |
BULLET5 	       |		    |
BULLET6 	       |		    |
NEWUSER 	       |		    |
HELP01		       |		    |
HELP02		       |		    |
HELP03		       |		    |
HELP04		       |		    |
HELP05		       |		    |
HELP06		       |		    |
HELP07		      \|/		    |
DIR	     CONFIG specified drive	   \|/
RBBS-PC.DEF  default system drive      text file

7.8 Name of Directory to Update for Uploads
 Parameter # 11 of the CONFIG program asks for the name of the directory into
which they want to record the file name, file size, and file description of
files they upload to RBBS-PC.  The default name is DIR99 and it must be a text
file on one of the diskettes available for uploading.

7.9 Prompt Sounds (can be changed by SYSOP from keyboard, too)
Parameter # 12 is the SYSOP'S preference for prompt sounds when
input is required.  This applies to remote and local.

7.10 Maximum Time on System
 Parameter # 13 of the CONFIG program asks for the maximum amount of time each
user is to be allowed on the system.  Set the number of minutes to whatever
you are comfortable with, but 72 minutes is a good setting for starting up.
Subsequently you may have to lower this number once your number of callers
increases, in order to keep callers' waiting times reasonable.

7.11 Maximum Number of Messages Allowed
 Parameter # 14 lets you set the maximum number of messages on the system that
you will allow.  The number will have to based on the size of the average
message on your bulletin board.  Most messages require about 600 bytes on the
average.  The absolute upper limit of number of messages is 250.  If you
specify 250 messages, you can expect that the MESSAGES file could grow to 160K
before the maximum number of messages was exceeded.

7.12 Months of Inactivity Before a User is Deleted
 Parameter # 15 sets the number of months inactivity that must elapse before a
user is deleted from the USERS file when the SYSOP "packs" the user file (see
function 10 under section 9).

7.13 Number of System Bulletins
 Parameter # 16 indicates the number of system bulletins that are available to
the users.  The maximum number is six.	For each bulletin there should be a
description of it associated with it's number in the text file BULLETIN.  For
each bulletin (1->6) there is an associated text file (i.e.  BULLET1 for
bulletin # 1).

7.14 Echo User Sessions on Screen (SNOOP)
 Parameter # 17 indicates whether to "SNOOP" on the RBBS-PC users by echoing
what they see on you PC's screen.  For the start up of a RBBS-PC, it is a good
idea to "SNOOP" in order to see how users use the system.  This function can
also be changed at keyboard.

7.15 Execution Type
Parameter # 18 informs RBBS-PC as to whether to use BASICA or
Compiler Basic constructs for determining space available.

7.16 Communication Port to be Used
Parameter # 19 requests the user to specify the communication port
that RBBS-PC will be using in order to determine if it is device
COM1 or device COM2 (the later is valid only for DOS 2.0).

7.17 Selecting Alternate CONFIG Screens
 The configuration program, beginning with CPC12.0, consists of multiple
screens of parameters.	The last parameter on each of the screens (20, 40, and
60) allow the user to switch to any one of the other screens.  In this way a
SYSOP can "browse" through and change literally any RBBS-PC parameter until he
is satisfied that his RBBS-PC definition file is tailored to his system.

7.18 RBBS-PC Text File Drive and File Names
 Parameters 21 through 38, on the second screen, allow the SYSOP to specify
the diskette his text files are going to be located on (see section 7.6 for a
description of these files).  Additionally, these files may be given any valid
DOS 2.0 file name.

7.19 Version of DOS RBBS-PC Will Run Under
 Parameter 39 on the second allows the SYSOP to specify the version of DOS
that RBBS-PC will be running under.  When RBBS-PC is running this is the ONLY
indicator used by RBBS-PC when it has to determine what level of DOS it is
running under.	The correctness of this parameter will is very significant
when RBBS-PC options are invoked using commands specific to DOS 2.0 (i.e.  the
CTTY command).

7.20 RBBS-PC System File Drive and File Names
 Parameter 41 performs the identical function performed by parameter 10, which
is to specify the drive in which the system files will be located.  Parameters
42 through 47, also on the third screen, allow the SYSOP to change the names
of the system files.  If not used, the files revert to the default filenames
described in section 7.5.  The SYSOP may use any valid DOS 2.0 filename for
these files.

7.21 Making System Bulletins "Optional"
Parameter 48, is intended to allow the SYSOP to indicate if the
system bulletins are to be an option for users when they log on.

7.22 Color Monitor's Foreground/Background/Border
 Parameters 49 through 51 on the third screen allow the SYSOP to specify the
colors he wishes for the foreground, background, and border.  When specifying
these options the BASIC manual's section describing the COLOR command in text
mode should be consulted.  This is useful when running under a multi-tasking
DOS and you want the RBBS-PC screen to be different when you call it up.

7.23 Selecting the Modem Speaker On or Off
 There are times when the SYSOP no longer wants the speaker to be activated
when a user logs on.  The noise can drive anyone nutty on a busy RBBS-PC
bulletin board (especially late at night).  Option 52 allows the SYSOP to keep
the Hayes speaker turned off at all times.

7.24 Reminding Users of Messages They Left
 Option 53 allows the SYSOP to remind users not only of the messages that
might be for them but also messages that they may have left.  This should be
enough of a nuisance to insure that users do delete some of the message that
they have left and help to keep the MESSAGES file to a minimum.

7.25 Indicating .BAS Files Are Binary
 Option 54 allows the SYSOP to tell RBBS-PC that files ending in binary files
to be downloaded unless the user selects XMODEM.  This will hopefully
eliminate some user problems before they occur.  IBM's BASIC interpreter's
default to the SAVE command is to save the files 'tokenized' because they
require much less disk space.

7.26 Providing the Name of the .BAT file for RBBS-PC
 Option 55 requests the name of the batch file that RBBS is to re-invoked with
after the SYSOP who has signed on remotely and dropped into DOS 2.0 exits DOS
2.0.  Section 10.0 has a further description of these files and how they
interact.

7.27 Providing the Name of the .BAT file for CTTY
 Option 56 requests the name of the batch file that RBBS is to build
dynamically when the SYSOP who has signed on remotely requests to drop into
DOS 2.0.  See section 10.0 for a complete discussion of these files.

7.28 Omitting First Level Directory in "New" Command
 Option 57 allows the SYSOP to exclude the primary directory (DIR) from the
search done by the New command.  If you have multiple directories (i.e.  DIR1
through DIR20), any dates in the primary directory would not be of files.  The
"New" command (as in "What new files have been put on the download directories
since I was last on?") search each line of each file beginning with DIR for a
date field.

7.29 Omitting Upload Directory in "New" Command
 Option 58 allows the SYSOP to exclude the directory on which users place the
information on their uploads (i.e.  DIR99) from the "New" command.  As some
SYSOP's wish to preview or otherwise keep private the uploads before putting
them on the other download directories, this acts as a further insurance
against unauthorized access of a "private" upload directory.

7.30 Making System Welcome Interruptable
 Option 59 allows the SYSOP to make the system WELCOME file interruptable.
The default is that YES it is interruptable.  However, if the SYSOP feels too
many people are bypassing it and it contains essential information, the SYSOP
can set this parameter to NO (i.e.  the user can not suspend or cancel the
listing of this file at his terminal with a CTRL S or CTRL K).

7.31 RBBS-PC Menu Text File Drive and File Names
 Parameters 61 through 64, on the fourth screen, allow the SYSOP to specify
the disk drive for the RBBS-PC menus (a RAM disk is highly recommended) to be
found on.  Additionally these files may be up to 7 characters long.  If
graphics is indicated in parameter 67, a "G" is appended to these file names
when displaying the RBBS-PC menus.

7.32 Graphic Menus
 Parameter 67 allows the SYSOP to indicate that graphic menus are available
for those users who logon as 8/n/1 and request graphics.  They should be on
the drive indicated in parameter 61.

7.33 Remind Users of Uploads and Downloads
 Parameter 68 allows the SYSOP to elect to remind users of how many files that
they have downloaded and uploaded.  In conjunction with this option a user who
has an existing USERS file that is at the CPC12.x level must run USRINIT1.BAS
in order to zero out the counters in his existing USERS file.  Additionally,
if you have a CALLERS file at the CPC12.1x level, the utility USRINIT2.BAS
will count the upload/download activity in the CALLERS file and record it on
the USERS file.  USRINIT.BAS and USRINIT2.BAS should not have to be run after
installing CPC12-1F as CPC12-1F will dynamically keep the up/download counts
current.

7.34 Default User Page Length
 Parameter 69 allows the SYSOP to establish a default page length for users
when they logon.  A 23 line page length is the default, but the SYSOP can set
it to a number between 0 and 255.  If set to 0, the user will set continuous
output.

NOTE! -- Parameters 65, 66, and 70 are included to accomodate future
RBBS-PC features and are not utilized by CPC12-1F or it's early versions.


8.0 COMMUNICATION BUFFER
 RBBS-PC should be operated with a 4096 byte communications receive buffers.
It will run at 300 baud with a smaller buffer, but 450 and 1200 baud operation
requires 4096, especially for uploads of large files to the system.  The BASIC
command to execute RBBS is as follows:

   BASICA RBBS-PC /C:4096

When compiling RBBS-PC CPC12, the compiler command is as follows:

   BASCOM RBBS.BAS /E/V/C:4096/S/O;

Operation with a smaller buffer may result in communication
buffer overflows and loss of data except in the XMODEM mode.

XMODEM use only requires only a 256 byte buffer because of the
handshake file transfer technique employed.

 When setting up the communications buffer, be sure you leave enough free
memory for string manipulation.  BASICA needs at least 2048 bytes free to
operate properly with this program.  Anything less may cause the program to
run out of string space, especially when a message is being written.  When
specifying the size of the communications buffer, remember that the amount of
memory that will be reserved will be the number specified times the total
number of communication ports.	Therefore if you have a system with two
communications ports and specify 4096, 4096 bytes will be allocated for EACH
communications port even though RBBS-PC CPC12.1 only uses one communications
port.  Thus, the total reduction in string space will be 8K and not the 4K you
might have expected.

9.0  USING MULTIPLE FILE DIRECTORIES
 With the advent of CPC12.0, multiple file directories for downloads were
possible.  A file directory is simply a text file that the SYSOP has created
that has a one-line entry for each file available for downloading in the
format:

file name   extension  mm-dd-yy  x,xxx	description

 that associates a date, size and description for each file name/extension.
Their has been great effort made to not force any rigid naming conventions or
format on the file directories on the theory that each SYSOP should be free to
tailor his RBBS-PC to his own tasks.  However, there are a few conventions
regarding download directories.  They are as follows:

o  The file directories must be text files.
o  The file directories must have the first three characters
   of their name designation equal to DIR (the remaining
   suffix can be anything you want as long as it is a valid
   DOS file name.
o  Their is only one file directory for uploads and it
   must be on the disk drive designated for uploads.

Most SYSOP's tend to organize their file directories according to
subject.  The primary file directory usually tells how you list
the other directories.	Logically, it looks like a tree structure
as follows:

			      DIR
			       |
			       |
  --------------------------------------------------------------
  |	  |	   |	   |	  |	  |	 |	 |     |
DIRaa	DIRbb  .............................................DIRzz

 The suffixes aa through bb can be anything you want.  Most uses use numbers
(i.e.  DIR1, DIR2, etc.).  The command L;2 would list directory 2.

 The SYSOP has the option of letting his users know the name of the file
directory for uploads.	Some SYSOPS do and some don't.  You may exclude both
the primary directory and the upload directory from the list new function (N)
within the file subsystem.

10.0  SETTING UP ".BAT" FILES FOR RBBS-PC
 Many SYSOPS have set up batch files to automatically invoke RBBS-PC and to
re-invoke RBBS-PC should their be a power outage.  These files range from the
simple to the sublime in terms of complexity.  The new SYSOP option 12 which
allows a SYSOP who is signed on remotely to drop into DOS 2.0 requires that:

1.  RBBS-PC be executed from a batch file.
2.  That the batch file which is executing RBBS-PC contain
    an "IF" statement that checks for the existence of the
    batch file which RBBS-PC CPC12.1 dynamically builds when
    the SYSOP function 12 is invoked.
3.  Within the "IF" statement, the logic exists such that the
    batch file dynamically built by RBBS-PC for function
    12 will be invoked if it exists.

As a very simple example, let us assume

1.  that the batch file that invokes RBBS-PC is named RBBS.BAT,
    and
2.  that the name of the batch file that RBBS-PC will build
    dynamically for SYSOP function 12 is RCTTY.BAT
3.  the compiled version of CPC12.1 is being executed and is
    named RBBS-PC.EXE.

Then RBBS.BAT would contain the following:

IF EXIST RCTTY.BAT DEL RCTTY.BAT
RBBS-PC.EXE
IF EXIST RCTTY.BAT RCTTY.BAT
RBBS.BAT

Obviously the RBBS.BAT file could be as complex as you wanted it
to be, but at the very least it would need the "IF" statement.

11.0  GETTING A "FREE" TELEPHONE LINE FROM MA BELL
Sorry this section removed for space reduction-

12.0 SYSOP FUNCTIONS
 The SYSOP functions are not described in the HELP files, so the following
narrative will shed some light on these functions.  The SYSOP functions are
available at the main system function prompt.  These functions are not
available to the general user, and it should be noted that the SYSOP should
not use some of the user functions either because the code will not work right
if called from the main console, or the function is not for use by the SYSOP.
Such functions are the <O>perator, <N>ewbaud, <PW> password, and file
upload/download using XMODEM.  File download using ASCII can be used to "type"
files available for download so they scroll across your screen.  File upload
enables you to create files from the keyboard.

SYSOP Mode

 To enter the SYSOP mode press the ESC key locally or enter the special 'pass'
and 'word' first and last name from a remote terminal.  The following
operations can then be performed by entering a number only at the command
prompt:

1 - Type comments file.  The contents of the COMMENTS file is
displayed.  This file can also be inspected using a TYPE command
from DOS.  It is a ASCII sequential text file.

 2 - Type CALLERS file.  A log is maintained of all persons who have called
the system.  This function will list the file showing the users name and the
date and time signed on as well as the files he upload/downloads.  This is a
random access file of 64 byte records.

 3 - Pack MESSAGES file.  The message file contains all messages for the
RBBS-PC system.  As messages are killed they are only flagged as inactive.
This function should be used periodically to recover the space occupied by the
killed messages.  A summary of the space recovered will be printed when the
pack is complete.  After completion, only the text of active messages will be
present and the old file will remain on the system with the name of
MESSAGES.BAK.  Also, you will need enough free disk space for the MESSAGES and
MESSAGES.BAK files when packing the MESSAGES file or the packing cannot be
performed; if enough space is not found the packing will abnormally terminate
and the MESSAGES file will be recovered.

 4 - Renumber the messages.  This function permits messages to be renumbered
sequentially starting from a specified message using whatever starting number
you wish.  Please note that there is not much error checking to be sure that
the new numbers do not duplicate those of lower numbered active messages.
When complete, the next message to be created will be the next higher number
from the resequence.

 5 - Resurrect a message.  This function will return a message that has been
killed to an inactive state.  If function 3 has been used, the killed messages
are no longer recoverable.  The function will ask for the message number to be
recovered.

 6 - Print message headers.  This function will display the message headers of
all messages, active and killed, that are present in the message file.	This
is useful to obtain the message number for use with function 5.

 7 - Erase the comments file.  This function will erase the comments file by
creating an empty file.  This could also be done from DOS by a:  'COPY CON:
COMMENTS' command followed by a 'F6' key to create a empty file.

 8 - USERS file maintenance.  The users file contains entries for each user
registered with the system.  This function permits the SYSOP to list the file
on the display, print the file on the printer (LPT1:) or to perform limited
editing of the user file records.

In <M>odify mode the following subfunctions are available:
M - Return to the <M>ain menu or function prompt.
P - Toggle the printer flag to print entries on the printer.
L - Toggle user lockout.  This will toggle the status of
the lockout flag for the particular user.  If the
lockout is set the user will be logged off the system as
soon as the user name is checked.  A second <L> will
clear the lockout flag.
N - New password.  Permits the SYSOP to change the
password for the user.
F - Find User.	Permits the SYSOP to locate a user by
entering the users name.
S - Toggle SYSOP clearance.  This option grants SYSOP
privileges to the user specified.
 In <M>odify mode a record will be displayed followed by a subfunction prompt
for action.  To get to a specific record the record number can be entered at
the prompt and if valid that record will be displayed.	If the record number
is invalid or an empty c/r is entered then the next record in the file will be
displayed.

9 - Toggles the operator page bell on/off.

 10 - Pack USERS file.	This removes deleted users and users who have not been
on the system for over one month.  You should have enough free disk space for
USERS and USERS.BAK or the packing will abnormally terminate (the USERS file
will be restored).

 11 - SYSOP can view all file specifications.  This operates correctly only
under the BASICA interpreter of DOS 2.0 as it uses the FILES function to
obtain the file specifications.  FILES under the compiler or DOS1.1's BASICA
does not function like DOS 2.0 and hence this does not function when running
under either DOS1.1 or the RBBS-PC.EXE compiled version.

12 - If the SYSOP has logged on remotely and is running on DOS 2.0
or greater, this function will dynamically setup a batch file to
assign the SYSOPS terminal as the main console.  It then returns
to DOS 2.0 and if

      a.  RBBS was invoked via a batch file and
      b.  that batch file is checking for the batch
	  file is dynamically setup by option 12 and
      c.  that batch file executes the batch file dynamically
	  created by option 12, then

the SYSOP will see the DOS 2.0 prompt at his terminal and can do
whatever functions he chooses.

 Two areas of caution are advised when using option 12 under DOS 2.0.  First,
each SYSOP should test what he can do remotely.  Software that directly reads
and writes to the video BIOS and does other things that bypass the standard
input and output of DOS 2.0 simply won't function correctly.  Second, you
should be aware that you are in DOS 2.0 and can only return to RBBS by issuing
the EXIT command.  This will return to the dynamically built batch file that
was built by RBBS-PC.  This file will then continue executing and is designed
to reassigned the keyboard as the console and then re-invoke RBBS-PC.  If you
get disconnected while in DOS 2.0, you system will be locked up.  The console
will be assigned to your communication port and your Hayes modem will have
dropped the line and will have been set not to auto-answer.  The only way to
re-boot the system is a manual power on/off sequence.

This problem is solved when a function is added to DOS that:

  1.  Checks to see if the standard input and output console
      have been assigned to an auxiliary console such as a
      communication port.
  2.  If condition 1 is true, checks to see if the carrier
      detect signal is lost by intercepting each interrupt
      from the communication port the auxiliary console
      has been assigned to.
  3.  If BOTH conditions 1 and 2 are true, this function would
      cause DOS to switch back to the standard screen and keyboard
      for its operations AND then continue processing whatever
      batch file that had been executing (if one was).

 This function (or device driver) would provide a "fail safe" feature to the
CTTY command that would greatly enhance the future options of RBBS-PC.	With
it future RBBS-PC CPCxx.x releases might allow users to exit RBBS-PC to use
whatever other software the SYSOP chose to make available (i.e.  relation
databases for complex inquiries -- bibliographic, sports, games, etc.).

 The following function keys (ten keys on left side of keyboard) are designed
to give the SYSOP special local controls that can be actuated without entering
the SYSOP mode (using the ESC entry key).

F1 - Return to DOS.  This will terminate a session if a caller is
     on-line.

F2 - Return to BASIC.  This will also terminate a session.
     This returns to DOS under the compiled version.

F3 - Printer toggle on/off.  This changes the printer on-line
     status.  When on-line the printer will print callers names
     and file names uploaded/downloaded.  It will also print all
     error messages except the ERROR 68 used to check that a file
     exists. This function should match the condition of the printer.
     If the printer is going to be left off, the PRINTER toggle
     should be left off.

F4 - Operator page toggle.  This changes the status of operator
     annoy and records the change to the top of the MESSAGES
     file.  This is set by the CONFIG program parameter # 6
     which establishes the SYSOP's office hours.
F5 - Forces a ring back system to answer the phone.
F6 - Sysop available toggle.  This changes the status of operator
     available and records the change to the top of the MESSAGES
     file.  Off returns "Sysop not available" to the caller.

F7 - SYSOP gets control of the system after current user is off

F8 - Allows the SYSOP to grant an on-line user temporary SYSOP
     privileges.  This is a toggle on/off switch.

F9 - SNOOP toggle.  This changes the SNOOP from the default value
     the first time it is pressed and toggles it on/off
     thereafter. SNOOP off clears the screen and turns the cursor off.
     It also keeps the download beeps from sounding.  The SNOOP
     should be left off for normal use to keep the system startup
     screen from "burning into" the monitor.  If the SNOOP is
     left on, the monitor should be physically turned off except
     when you are observing the RBBS in action.  Leaving the monitor
     off will not affect performance of the RBBS.

F10 - This is the forced chat switch.  It announces your forced
     chat and who you are before turning the keyboard over to you
     and the caller.  Along with the ESC key (which ends the chat
     mode) this is the same key you use to answer a page.

 ?  - The ? key is the special SYSOP key.  It allows the SYSOP
     to takeover for system maintenance when no one is on-line.
     It also allows the SYSOP to answer a page.

 The SYSOP can also enter commands on the command prompt line while a caller
is on-line.  The command entered will cause the system to respond just as it
would had the caller entered the command.  This should be used with caution
because it could confuse a new system user -- users are often timid enough
without knowing that big brother is actually watching them!  Let the caller
page you then tell him that you can assist with commands if he gets into
trouble.

13.0 UPLOADED FILE TIPS
 If someone uploads a BASIC file to you, and it will not list on your screen
using the DOS TYPE command, you should go into BASIC, load the file, list it,
then resave it using the same name.  If you get a `Direct Statement In File'
error printed on the screen when you load the file, that means that you
downloaded a text statement with the file (one that has no line number, one
that was edited on a word processor which created a carriage return without a
linefeed -- thus overwriting two lines and giving the appearance of a direct
statement in the file).  This will not interfere with the resaving of the file
unless the direct statement is at the beginning of the file; if the file lists
ok, then the direct statement is at the end of the file.  If the file does not
list properly, then the direct statement is at the beginning of the file and
has to be removed using a text editor (Edlin) before the program can be loaded
and run.

 Do not attempt to save a BASIC file after getting the `Direct Statement In
File' error during loading without listing the program first; you will destroy
the file otherwise.  If you wish to load an uploaded file (a BASIC program or
any other text file) into a text editor to change the content of the file, you
will have to first add line feeds to the end of each line (after each carriage
return) using the BASIC program ADDLF.BAS (see the section on utility
programs).

14.0 COMPILING AND LINKING RBBS-PC (CPC12)
Because of the size of the RBBS.BAS (version CPC12) the BASIC
compiler command should be:

     BASCOM  RBBS-PC.BAS,, /E/V/C:4096/S/O;

 NOTE:
 With this version of RBBS-PC (CPC12-1E) it is necessary to use the "V" option
when compiling.  This is different from all previous versions of RBBS-PC and
is necessary in order to trap "device timeout" (as well as other errors) on a
statement basis rather than simply a line number basis.  Otherwise, with
multiple I/O's on a single line to a device, when a device timeout error
occurs and subsequent I/O's are done to that device prior to trapping and
handling the error, the .EXE version will return to the next higher level that
called it -- either DOS or the .BAT file that invoked RBBS-PC.

The output will be RBBS-PC.OBJ with a size of about 161,726
bytes.

Remember to include IBMCOM.OBJ & UTSPACE.OBJ when linking RBBS.
The sequence of statements that I used when linking RBBS-PC.OBJ
was as follows (my inputs are underlined):

 B>
 LINK
 IBM Personal Computer Linker
 Version 2.00 (C) Copyright IBM Corp 1982, 1983
 Object Modules (.OBJ): RBBS-PC+IBMCOM+UTSPACE

 Run File (RBBS-PC.EXE): /MAP
			-----
 List File (NUL.MAP): RBBS-PC.MAP /line

  Libraries (.LIB): A:

The floppy disk in drive A contained only the following BASIC
compiler libraries:

   BASRUN.EXE
   BASCOM.LIB

The output will be RBBS-PC.EXE with a size of about 109,952 bytes
(or about 107K). It runs very, very fast.
15.0 LIMITED LICENSE
The software is copyrighted but A LIMITED LICENSE IS GRANTED
and you are free to use and share it under the following
conditions:

1. RBBS-PC CPC12 is not distributed in modified form,
2. No fee or other consideration is charged, and
3. Reference to the authors is retained.

 Please distribute the original version (or update thereof) of the program.
If you have changes either add a new file with that copy or supply a file to
be MERGED with the original to create it.  This is done so that future
revisions can be easily added to the system without requiring the entire
program.

 Please do NOT resequence the program.	All revisions will be as files that
can be MERGED with the base program or update thereof to incorporate the new
fixes and enhancements.

16.0 LIMITED WARRANTY
 The RBBS-PC CPC12 program is provided "as is" without warranty of any kind,
either expressed or implied, including, but not limited to the implied
warranties of merchantability and fitness for a particular purpose.  The
entire risk as to the the quality and performance of the program is with the
user and should the program prove defective the user and not the authors will
assume the entire cost of all necessary remedies.  None of the authors warrant
that the functions contained in the program will meet any users requirements
or that the operation of the program will be uninterrupted or error free.  In
any case, each author's entire liability will be limited to the total amount
of money the individual user paid directly and explicitly to each author for
the use of RBBS-PC.

17.0 RBBS-PC UTILITY PROGRAMS
Three utility programs are supplied with RBBS-PC CPC12:

1.  FIXFILES.BAS  -  Reads CALLERS files generated by
		  RBBS-PC level CPC12.0 and removes the
		  "extra" records that were inadvertently
		  written to it (cuts the size by about
		  50%).
2.  USRINIT1.BAS  -  Read the USERS file and zeroes out the
		  counts for the numbers of uploads and
		  downloads.  CPC12-1 automatically increments
		  these counts whenever a user does an upload
		  or download.
3.  USRINIT2.BAS  -  Reads the file CALLERS.DAT (presumably a
		  copy of an existing CPC12-x level CALLERS
		  file) and counts the number of uploads and
		  downloads that a user did.  It then updates
		  the cumulative counts in the USERS file.  It
		  assumes that USRINIT1.bas was already run
		  against the USERS file.

18.0 RBBS-PC FUTURE DIRECTIONS
 RBBS-PC CPC12 can be a lot of fun to operate and can be a useful tool for
information exchange.  Pass copies of it along to others, so more of these
systems will spring up all over the country!  RBBS-PC seems to be meeting a
need within the IBM-compatible PC user community.  As you can see from the
brief history of RBBS-PC CPCxx.x outlined in section 1.3, it has had a rapid
evolution in the past year of it's existence.  However, their are some future
directions that I see for it and I would like to share them with you.

 ADDITIONAL PROTOCOLS -- there is at least one additional protocol that should
be added to RBBS-PC.  It is one that makes use of CRC16 (cyclic redundancy
check).  A "public domain" one exists for the IBM PC in "C" and in Macro
Assembler Language called KERMIT.  KERMIT presently exists for IBM's VM/CMS
and DEC's VAX and UNIX and adds a error correction protocol that doesn't rely
on control character sequences being exchanged.  I expect it to be
incorporated into RBBS-PC in BASIC.

 MARKING DATE AND TIME MESSAGES ARE LAST READ -- If the date and time a
message was last read was included in the message header for each message, a
SYSOP command could be written to purge messages based on this information
(i.e.  purge all messages that have never been read and are over 30 days old).

 MAKING RBBS-PC FILES A "FIXED" SIZE -- All the RBBS-PC files that are
"random" files would each have a "fixed" size set by the SYSOP that they could
not exceed.  When they reached that size they would either issue a "disk full"
message or "wrap around" on themselves.  For those without 10MB hard disks or
trying to run RBBS-PC on a single disk drive, this would prevent RBBS-PC from
filling up the disk (i.e.  the callers log, etc.) and RBBS-PC could be left
for even longer periods unattended.

 CONVERTING RBBS-PC TO GW-BASIC -- GW-BASIC seems to have been adopted for the
IBM-compatible PC's as a standard.  Rearranging the RBBS-PC source to be both
compatible with IBM's BASIC and GW-BASIC would further widen the use RBBS-PC
CPCxx.x

CONVERTING RBBS-PC TO "C" --  This would bring RBBS-PC almost
full  circle back to it's beginnings.  I believe that this
conversion is  already under way by Lynn Long, et. al.

These are only just a few of the ideas that come to mind for
RBBS-PC in 1984.  It will be interesting to see how it evolves.

 Appendix A -- Running RBBS-PC CPC12.1 Under MultiLink If you wish to receive
a copy of this section, Please write the following individual and enclose a
formatted disk and a Mailer with sufficient postage (at least $.54) in stamps,
All requests without this mailer,disk and postage will not be honored.	and
probably thrown away as we do not have the facilities to copy and pay for your
disk...

D. Thomas Mack
10201 Oxfordshire Road
Great Falls, Virginia 22066
Voice: (703) 759-4357
Data:  (703) 759-5049

or:   Capital PC Software Exchange
      PO Box 6128
      Silver Spring MD 20906
      (ATTN: Multilink Documentation)

 Note:	MultiLink is a software product of The Software Link, Incorporated
located at 6700 23-B Roswell Road, Atlanta, GA 30328.  Their voice phone is
(404) 255-1254 and their data phone is (404) 252-9438.	All discussions in
this appendix relate to Release 2.0.4 of MultiLink.

 Certain Portions of this documentation were removed in order to get all the
files required on a dos 1.1 disk.  Sorry if something which you desired was
removed.  Much effort was expended to keep the size down.  Rich Schinnell,
Capital PC Software Exchange.
========E N D	O F   CPC 12.1	 D O C U M E N T A T I O N========



USRINIT1.BAS

100 'USRINIT.BAS   -  CLEARS THE USER FILE DOWNLOAD/UPLOAD COUNTS
101 ' by Jon Martin       12/19/83.
102 DEFINT A-Z
106 KEY OFF
299 CLS
300 PRINT:PRINT:INPUT"ARE YOU READY TO PROCEED WITH USER FILE CONVERSION";Y$
310 IF LEFT$(Y$,1) = "Y" OR LEFT$(Y$,1) = "y" THEN 330
320 PRINT "CONVERSION ABORTED.  USER FILE WAS NOT MODIFIED":GOTO 680
330 CLS:PRINT "CONVERSION OF USERS FILE STARTED AT ";TIME$
540 OPEN "R",2,"USERS",128:FIELD 2,31 AS N$,15 AS PW$,1 AS ST$,14 AS OP$,1 AS SCL$,24 AS CS$,20 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$
550 ENDFILE=LOF(2)/128
560 UIX=UIX+1
570 IF UIX>ENDFILE THEN 670
580 GET 2,UIX
600 LOCATE 5,1:PRINT N$
610 LOCATE 6,1:PRINT CS$
620 LSET UDL$=MKI$(0):LSET UUL$=MKI$(0)
650 PUT 2,UIX
660 GOTO 560
670 CLOSE 2
680 PRINT "CONVERSION OF USERS FILE ENDED AT ";TIME$
700 END

USRINIT2.BAS

100 'USRINIT2.BAS  -  Reads the CALLERS fileand updates dl/ul info on user file
101 ' by Jon Martin       12/19/83.
102 DEFINT A-Z
199 KEY OFF
299 CLS
300 PRINT:PRINT:INPUT"ARE YOU READY TO PROCEED WITH USRINIT2";Y$
310 IF LEFT$(Y$,1) = "Y" OR LEFT$(Y$,1) = "y" THEN 330
320 PRINT "USRINIT2 RUN ABORTED.":GOTO 700
330 CLS:PRINT "USRINIT2 RUN STARTED AT ";TIME$
340 OPEN "R",1,"USERS",128:END.UIX=LOF(1)/128
350 FIELD 1,31 AS N$,15 AS PW$,1 AS ST$,14 AS OP$,1 AS SCL$,24 AS CS$,20 AS MA$,14 AS TD$,3 AS LND$,2 AS UDL$,2 AS UUL$
400 OPEN "R",2,"CALLERS.DAT",64:FIELD 2,64 AS CALRINFO$:UDX=LOF(2)/64
410 IF UDX <1 THEN CLOSE 1,2:GOTO 700
420 GET 2,UDX
425 LOCATE 3,1:PRINT "CALLERS FILE INDEX IS CURRENTLY ";:PRINT USING"#####";UDX
430 A$=CALRINFO$
440 IF LEFT$(A$,3)="   " THEN 500
445 IF MID$(A$,1,1)=CHR$(0) THEN 470
450 UDX=UDX-1:GET 2,UDX
453 X=INSTR(A$,"on")
455 IF X=0 THEN PRINT "CALLERS NAME SEARCH FAILED";:STOP
456 NAMEHOLD$=NAMESAVE$
457 NAMESAVE$=SPACE$(31)
459 X=X-2:MID$(NAMESAVE$,1,X)=LEFT$(A$,X)
470 UDX=UDX-1:DNLD=0:UPLD=0:GOTO 410
500 X=INSTR(A$,"Downloaded"):IF X<> 0 THEN DNLD=-1:GOTO 600
505 X=INSTR(A$,"downloaded"):IF X<> 0 THEN DNLD=-1:GOTO 600
510 X=INSTR(A$,"Uploaded"):IF X<> 0 THEN UPLD=-1:GOTO 600
515 X=INSTR(A$,"uploaded"):IF X<> 0 THEN UPLD=-1:GOTO 600
520 GOTO 470
600 'FIND USERS
605 LOCATE 5,1:PRINT "SEARCHING FOR ";NAMESAVE$
607 LOCATE 7,1:PRINT"STATUS WAS ";
610 IF NAMESAVE$=NAMEHOLD$ THEN 685
620 UIX=0
630 UIX=UIX+1
640 IF UIX> END.UIX THEN PRINT "NOT FOUND";:NAMEHOLD$=NAMESAVE$:OK=0:GOTO 470
660 GET 1,UIX
670 IF NAMESAVE$<>N$ THEN 630
675 NAMEHOLD$=NAMESAVE$
680 OK=-1
685 IF NOT OK THEN 470
687 GET 1,UIX
690 IF DNLD THEN WKDNLD=CVI(UDL$)+1:LSET UDL$=MKI$(WKDNLD)
695 IF UPLD THEN WKUPLD=CVI(UUL$)+1:LSET UUL$=MKI$(WKUPLD)
696 PRINT "FOUND    ";
697 PUT 1,UIX:GOTO 470
700 'END PROGRAM
710 PRINT "USRINIT2 RUN ENDED AT ";TIME$
720 CLOSE:END

Directory of PC-SIG Library Disk #0152

 Volume in drive A has no label
 Directory of A:\

-README- DOC       489   9-03-83   6:28p
BULLET1           3282   8-28-83  11:00a
BULLETIN           293   8-22-83   8:46a
CAPITAL  PC       6958   1-30-84   9:44p
CONFIG   BAS     29056   1-13-84   1:12p
DIR                 61   1-03-84   6:44a
DIR99               73   1-03-84   6:45a
FIXFILES BAS      2176  12-10-83  11:15a
HELP01            1125   1-29-84   7:28a
HELP02             844   1-29-84   7:31a
HELP03             528   6-12-83   9:29p
HELP04             476   6-12-83   9:31p
HELP05             381   1-29-84   7:33a
HELP06            8832  12-10-83  11:14a
HELP07            1880   1-29-84   8:00a
MENU1              384   1-11-84   8:07a
MENU1G             640   1-11-84   8:08a
MENU2              512   1-21-84   2:34a
MENU2G             896   1-21-84   2:35a
MENU3              384   1-11-84   8:06a
MENU3G             640   1-11-84   8:07a
NEWUSER             68   6-12-83   9:37p
RBBS-PC  BAS     51755   1-29-84   8:34a
RBBS-PC  DOC     74313   2-02-84  10:07a
RBBS-PC  EXE    109952   1-25-84  11:03a
RBBS-PC  REM      5877   1-30-84   6:55p
STARTUP  BAT      1669   1-30-84   7:05p
USRINIT1 BAS       768  12-30-83   6:28p
USRINIT2 BAS      1664  12-30-83   6:29p
UTSPACE  OBJ       128   9-12-83   6:45p
       30 file(s)     306104 bytes
                           0 bytes free