home *** CD-ROM | disk | FTP | other *** search
/ Monster Disc 2: The Best of 1992 / MONSTER1.ISO / bbs / rbbs / rbbs-bas.zip / CONFIG.BAS < prev    next >
BASIC Source File  |  1992-06-20  |  158KB  |  4,307 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG 17.4, Copyright 1983-92 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC VERSION 17.4)
  5.       'by D. Thomas Mack, 39 Cranbury Drive, Trumbull, CT 06611 (up to 16)
  6.       '  Jon Martin, 4396 N Prairie Willow Ct, Concord, CA 94521 (up to 17.2B)
  7.       '  Ken Goosens, 5020 Portsmouth Road, Fairfax, VA 22032
  8.       '  Doug Azzarito, 5480 Eagle Lake Drive, Palm Beach Gardens, FL 33418
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. 17.4), to make copies of this     *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with the authors.                          *
  22.       ' *                                                                     *
  23.       ' *      Copyright (c) 1983-1992 D. Thomas Mack, The Second Ring        *
  24.       ' ***********************************************************************
  25. '     $INCLUDE: 'CNFG-VAR.BAS'
  26.       CLEAR
  27. '
  28. ' ****************************************************************************
  29. ' *  DISPLAY THE CONFIG TITLE PAGE
  30. ' ****************************************************************************
  31. '
  32.       WIDTH 80
  33.       CLS
  34.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  35.       NONE.PICKED$ = "<none>"    ' Standardized message
  36.       NUM.FILES = 8
  37.       NUM.GLOBAL = 4
  38.       NUM.MAIN = 18
  39.       NUM.SYSOP = 7
  40.       NUM.UTILITY = 12
  41.       NUM.LIBRARY = 7
  42.       VERSION.NUMBER$ = "17.4"
  43.       I! = FRE(C$)
  44.       KEY OFF
  45.       CALL CNFGINIT
  46.       PRINT TAB(60)"tm"
  47.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  48.       PRINT
  49.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  50.       PRINT
  51.       X$ = "    "
  52.       PRINT "Copyright (c) 1983-1992 D. Thomas Mack, 39 Cranbury Dr., Trumbull, CT. 06611"
  53.       PRINT
  54.       PRINT X$;"    If you use RBBS-PC " + CONFIG.VERSION$ + " and find"
  55.       PRINT X$;"    it valuable, consider contributing to"
  56.       PRINT ""
  57.       PRINT X$;"                 Capital PC User Group"
  58.       PRINT X$;"                 51 Monroe Street"
  59.       PRINT X$;"                 Plaza East Two"
  60.       PRINT X$;"                 Rockville, Maryland  20850"
  61.       PRINT
  62.       PRINT X$;"    You are free to copy and share RBBS-PC provided"
  63.       PRINT X$;"      1.  This program is not distributed in modified form."
  64.       PRINT X$;"      2.  No fee or consideration is charged for RBBS-PC itself."
  65. 10230 PRINT X$;"      3.  This notice is not bypassed or removed."
  66.       PRINT
  67. '
  68. ' *  DEFINE THE FUNCTIONS USED BY CONFIG
  69. '
  70.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2)) * 60 * 60) _
  71.                          + (VAL(MID$(TIME$,4,2)) * 60) _
  72.                          + (VAL(MID$(TIME$,7,2)) * 1)))
  73.       DEF FNHSH(X$) = ((ASC(X$) * 100  _
  74.                          + ASC(MID$(X$,(LEN(X$)/2) + .1,1)) * 10  _
  75.                          + ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
  76.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1)) * 10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  77.       DELAY! = FNTI! + 5
  78. 10480 GOSUB 60440
  79. 10490 LOCATE 22,15
  80.       PRINT SPC(64)
  81.       NODE.ID$ = ""
  82.       IF COMMAND$ <> "" THEN _
  83.         CONFIG.FILENAME$ = COMMAND$: _
  84.         GOTO 10530
  85.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  86.       CALL GETNUMYN ("Will you be running multiple copies of RBBS-PC",AB)
  87.       IF NOT AB THEN _
  88.          GOTO 10530
  89. 10510 GOSUB 22480
  90. '
  91. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS
  92. '
  93. 10530 ON ERROR GOTO 60010
  94.       FILE$ = CONFIG.FILENAME$
  95.       GOSUB 30000
  96.       M$ = "Z"
  97.       NO.DEF.FILE = FALSE
  98.       SUBBOARD = FALSE
  99.       IF OKAY THEN _
  100.          CALL CNFGINIT : _
  101.          GOTO 10536
  102.       IF LEN(CONFIG.FILENAME$) > 7 OR _
  103.          INSTR(CONFIG.FILENAME$,".") <> 0 THEN _
  104.          GOTO 10531
  105.       FILE$ = FILE$ + "C.DEF"
  106.       GOSUB 30000
  107.       IF OKAY THEN _
  108.          CALL CNFGINIT : _
  109.          CONFIG.FILENAME$ = FILE$ : _
  110.          GOTO 10536
  111.       CALL GETNUMYN ("Are you setting up a 'sub-board'",AB)
  112.       IF NOT AB THEN _
  113.          GOTO 10531
  114.       SUBBOARD = TRUE
  115.       BASE.NAME$ = CONFIG.FILENAME$
  116.       CONFIG.FILENAME$   = CONFIG.FILENAME$+"C.DEF"
  117. 10531 A$ = "Configuration file " + CONFIG.FILENAME$ + " not found.  Create new one"
  118.       CALL GETNUMYN (A$,AB)
  119.       IF NOT AB THEN _
  120.          SYSTEM
  121. 10532 X$ = "default location for RBBS files"
  122.       GOSUB 15205
  123.       DD$ = HJ$
  124.       CALL CNFGINIT
  125.       GOSUB 15790
  126.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  127.                        BULLETIN.MENU$
  128.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  129.                          BULLETIN.PREFIX$
  130.       NO.DEF.FILE = TRUE
  131.       GOTO 11710
  132. 10536 OPEN "I",#1,CONFIG.FILENAME$
  133. '
  134. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE
  135. '
  136. 11600 INPUT #1,CONFIG.FILE.VER$, _
  137.                DOWNLOAD.DRIVES$, _
  138.                SYSOP.PASSWORD.1$, _
  139.                SYSOP.PASSWORD.2$, _
  140.                SYSOP.FIRST.NAME$, _
  141.                SYSOP.LAST.NAME$, _
  142.                REQUIRED.RINGS, _
  143.                START.OFFICE.HOURS, _
  144.                END.OFFICE.HOURS, _
  145.                MINUTES.PER.SESSION!, _
  146.                MAX.ALLOWED.MSGS.FRM.DEF, _
  147.                ACT.MNTHS.B4.DELETING, _
  148.                UPLOAD.DIRECTORY$, _
  149.                DF, _
  150.                ACTIVE.BULLETINS, _
  151.                PROMPT.BELL, _
  152.                PCJR, _
  153.                MENUS.CAN.PAUSE, _
  154.                MENU$(1), _
  155.                MENU$(2), _
  156.                MENU$(3), _
  157.                MENU$(4), _
  158.                MENU$(5), _
  159.                MENU$(6), _
  160.                CONFERENCE.MENU$, _
  161.                TEST.ANSI.TIME, _
  162.                WELCOME.INTERRUPTABLE, _
  163.                REMIND.FILE.TRANSFERS, _
  164.                PAGE.LENGTH, _
  165.                MAX.MESSAGE.LINES, _
  166.                DOORS.AVAILABLE, _
  167.                MO$
  168.       IF CONFIG.FILE.VER$ > LEFT$(VERSION.NUMBER$,5) OR _
  169.          CONFIG.FILE.VER$ < "17.1A" THEN _
  170.          PRINT "Config DEF file, " + CONFIG.FILENAME$ + " not " + CONFIG.VERSION$ : _
  171.          END
  172.       GOSUB 22340
  173. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _
  174.                MAIN.MESSAGE.BACKUP$, _
  175.                CALLERS.FILE$, _
  176.                COMMENTS.FILE$, _
  177.                MAIN.USER.FILE$, _
  178.                WELCOME.FILE$, _
  179.                NEWUSER.FILE$, _
  180.                DIRECTORY.EXTENTION$, _
  181.                COM.PORT$, _
  182.                BULLETINS.OPTIONAL, _
  183.                USER.INIT.COMMAND$, _
  184.                RTS$, _
  185.                ZCallersLst$, _
  186.                FG, _
  187.                BG, _
  188.                BORDER, _
  189.                RBBS.BAT$, _
  190.                RCTTY.BAT$
  191.       GOSUB 22340
  192. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _
  193.                FIRST.NAME.PROMPT$, _
  194.                HELP$(3), _
  195.                HELP$(4), _
  196.                HELP$(7), _
  197.                HELP$(9), _
  198.                BULLETIN.MENU$, _
  199.                BULLETIN.PREFIX$, _
  200.                DRIVE.FOR.BULLETINS$, _
  201.                MESSAGE.REMINDER, _
  202.                REQUIRE.NON.ASCII, _
  203.                ASK.EXTENDED.DESC, _
  204.                MAXIMUM.NUMBER.OF.NODES, _
  205.                NETWORK.TYPE, _
  206.                RECYCLE.TO.DOS, _
  207.                MAX.USR.FILE.SIZE.FRM.DEF, _
  208.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  209.                TRASHCAN.FILE$
  210.       DONT.ASK = TRUE
  211.       GOSUB 21895
  212.       DONT.ASK = FALSE
  213.       GOSUB 22340
  214. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _
  215.                DEFAULT.SECURITY.LEVEL, _
  216.                SYSOP.SECURITY.LEVEL, _
  217.                FILESEC.FILE$, _
  218.                SYSOP.MENU.SECURITY.LEVEL, _
  219.                CONFMAIL.LIST$, _
  220.                MAXIMUM.VIOLATIONS, _
  221.                SYSOP.FUNCTION(1), _
  222.                SYSOP.FUNCTION(2), _
  223.                SYSOP.FUNCTION(3), _
  224.                SYSOP.FUNCTION(4), _
  225.                SYSOP.FUNCTION(5), _
  226.                SYSOP.FUNCTION(6), _
  227.                SYSOP.FUNCTION(7), _
  228.                PASSWORD.FILE$, _
  229.                MAXIMUM.PASSWORD.CHANGES, _
  230.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  231.                OVERWRITE.SECURITY.LEVEL, _
  232.                DOORS.TERMINAL.TYPE, _
  233.                MAX.PER.DAY
  234.       GOSUB 22340
  235. 11680 INPUT #1,MAIN.FUNCTION(1), _
  236.                MAIN.FUNCTION(2), _
  237.                MAIN.FUNCTION(3), _
  238.                MAIN.FUNCTION(4), _
  239.                MAIN.FUNCTION(5), _
  240.                MAIN.FUNCTION(6), _
  241.                MAIN.FUNCTION(7), _
  242.                MAIN.FUNCTION(8), _
  243.                MAIN.FUNCTION(9), _
  244.                MAIN.FUNCTION(10), _
  245.                MAIN.FUNCTION(11), _
  246.                MAIN.FUNCTION(12), _
  247.                MAIN.FUNCTION(13), _
  248.                MAIN.FUNCTION(14), _
  249.                MAIN.FUNCTION(15), _
  250.                MAIN.FUNCTION(16), _
  251.                MAIN.FUNCTION(17), _
  252.                MAIN.FUNCTION(18), _
  253.                MIN.NEWCALLER.BAUD, _
  254.                WAIT.BEFORE.DISCONNECT
  255.       GOSUB 22340
  256. 11700 INPUT #1,FILES.FUNCTION(1), _
  257.                FILES.FUNCTION(2), _
  258.                FILES.FUNCTION(3), _
  259.                FILES.FUNCTION(4), _
  260.                FILES.FUNCTION(5), _
  261.                FILES.FUNCTION(6), _
  262.                FILES.FUNCTION(7), _
  263.                FILES.FUNCTION(8), _
  264.                UTILITY.FUNCTION(1), _
  265.                UTILITY.FUNCTION(2), _
  266.                UTILITY.FUNCTION(3), _
  267.                UTILITY.FUNCTION(4), _
  268.                UTILITY.FUNCTION(5), _
  269.                UTILITY.FUNCTION(6), _
  270.                UTILITY.FUNCTION(7), _
  271.                UTILITY.FUNCTION(8), _
  272.                UTILITY.FUNCTION(9), _
  273.                UTILITY.FUNCTION(10), _
  274.                UTILITY.FUNCTION(11), _
  275.                UTILITY.FUNCTION(12), _
  276.                GLOBAL.FUNCTION(1), _
  277.                GLOBAL.FUNCTION(2), _
  278.                GLOBAL.FUNCTION(3), _
  279.                GLOBAL.FUNCTION(4), _
  280.                UPLOAD.TIME.FACTOR!, _
  281.                COMPUTER.TYPE, _
  282.                REMIND.PROFILE, _
  283.                RBBS.NAME$, _
  284.                COMMANDS.BETWEEN.RINGS, _
  285.                ZCopyrightSecs, _
  286.                PAGING.PRINTER.SUPPORT$, _
  287.                MODEM.INIT.BAUD$
  288.       GOSUB 22340
  289. 11705 INPUT #1,TURN.PRINTER.OFF, _
  290.                DIRECTORY.PATH$, _
  291.                MIN.SEC.TO.VIEW, _
  292.                LIMIT.SEARCH.TO.FMS, _
  293.                DEFAULT.CATEGORY.CODE$, _
  294.                DIR.CATEGORY.FILE$, _
  295.                NEW.FILES.CHECK, _
  296.                MAX.DESC.LEN, _
  297.                SHOW.SECTION, _
  298.                COMMANDS.IN.PROMPT, _
  299.                NEWUSER.SETS.DEFAULTS, _
  300.                HELP.PATH$, _
  301.                HELP.EXTENSION$, _
  302.                MAIN.COMMANDS$, _
  303.                FILE.COMMANDS$, _
  304.                UTIL.COMMANDS$, _
  305.                GLOBAL.COMMANDS$, _
  306.                SYSOP.COMMANDS$
  307.       GOSUB 22340
  308. 11706 INPUT #1,RECYCLE.WAIT, _
  309.                LIBRARY.FUNCTION(1), _
  310.                LIBRARY.FUNCTION(2), _
  311.                LIBRARY.FUNCTION(3), _
  312.                LIBRARY.FUNCTION(4), _
  313.                LIBRARY.FUNCTION(5), _
  314.                LIBRARY.FUNCTION(6), _
  315.                LIBRARY.FUNCTION(7), _
  316.                LIBRARY.DRIVE$, _
  317.                LIBRARY.DIRECTORY.PATH$, _
  318.                LIBRARY.DIRECTORY.EXTENTION$, _
  319.                LIBRARY.WORK.DISK.PATH$, _
  320.                LIBRARY.MAX.DISK, _
  321.                LIBRARY.MAX.DIRECTORY, _
  322.                LIBRARY.MAX.SUBDIR, _
  323.                LIBRARY.SUBDIR.PREFIX$, _
  324.                LIBRARY.ARCHIVE.PATH$, _
  325.                LIBRARY.ARCHIVE.PROGRAM$, _
  326.                LIBRARY.COMMANDS$
  327.       GOSUB 22340
  328.       INPUT #1,UPLOAD.PATH$, _
  329.                FMS.DIRECTORY$, _
  330.                ANS.MENU$,_
  331.                REQUIRED.QUESTIONNAIRE$,_
  332.                REMEMBER.NEW.USERS, _
  333.                SURVIVE.NOUSER.ROOM, _
  334.                PROMPT.HASH$, _
  335.                START.HASH, _
  336.                LEN.HASH, _
  337.                PROMPT.INDIV$, _
  338.                START.INDIV, _
  339.                LEN.INDIV
  340.       GOSUB 22340
  341.       INPUT #1,BYPASS.MSGS, _
  342.                MUSIC, _
  343.                RESTRICT.BY.DATE, _
  344.                DAYS.TO.WARN, _
  345.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  346.                VOICE.TYPE, _
  347.                RESTRICT.VALID.CMDS, _
  348.                ZMinSecPersUpld, _
  349.                ZDistriHelp$, _
  350.                ZDistriPath$, _
  351.                FAST.FILE.LIST$, _
  352.                FAST.FILE.LOCATOR$, _
  353.                MESSAGES.CAN.GROW, _
  354.                WRAP.CALLERS.FILE$, _
  355.                REDIRECT.IO.METHOD, _
  356.                AUTO.UPGRADE.SEC, _
  357.                HALT.ON.ERROR, _
  358.                NEW.PUBLIC.MSGS.SECURITY, _
  359.                NEW.PRIVATE.MSGS.SECURITY, _
  360.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  361.                SL.CATEGORIZE.UPLOADS, _
  362.                ZNoQuoting, _
  363.                TIME.TO.DROP.TO.DOS, _
  364.                EXPIRED.SECURITY, _
  365.                DTR.DROP.DELAY, _
  366.                ASK.IDENTITY, _
  367.                MAX.REG.SEC, _
  368.                BUFFER.SIZE, _
  369.                MLCOM, _
  370.                SHOOT.YOURSELF, _
  371.                EXTENSION.LIST$, _
  372.                ZEnableCC, _
  373.                ZMaxBank, _
  374.                NET.MAIL$, _
  375.                MASTER.DIRECTORY.NAME$, _
  376.                PROTO.DEF$, _
  377.                UPCAT.HELP$, _
  378.                ALWAYS.STREW.TO$, _
  379.                LAST.NAME.PROMPT$
  380.       GOSUB 22340
  381.       INPUT #1,PERSONAL.DRVPATH$, _
  382.                PERSONAL.DIR$, _
  383.                PERSONAL.BEGIN, _
  384.                PERSONAL.LEN, _
  385.                PERSONAL.PROTOCOL$, _
  386.                PERSONAL.CONCAT , _
  387.                PRIVATE.READ.SEC, _
  388.                PUBLIC.READ.SEC, _
  389.                SEC.CHANGE.MSG, _
  390.                KEEP.INIT.BAUD, _
  391.                MAIN.PUI$, _
  392.                DEFAULT.ECHOER$, _
  393.                HOST.ECHO.ON$, _
  394.                HOST.ECHO.OFF$, _
  395.                SWITCH.BACK, _
  396.                DEFAULT.LINE.ACK$, _
  397.                ALTDIR.EXTENSION$, _
  398.                DIRECTORY.PREFIX$
  399.       GOSUB 22340
  400.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  401.                MODEM.INIT.WAIT.TIME, _
  402.                MODEM.COMMAND.DELAY.TIME, _
  403.                TURBO.RBBS
  404.       GOSUB 22340
  405. 11707 INPUT #1,DNLD.SUB, _
  406.                WILL.SUBDIRS.B.USED, _
  407.                UPLOAD.TO.SUBDIR, _
  408.                DOWNLOAD.TO.SUBDIR, _
  409.                UPLOAD.SUBDIR$, _
  410.                MIN.OLDCALLER.BAUD, _
  411.                MAX.WORK.VAR, _
  412.                DISKFULL.GO.OFFLINE, _
  413.                EXTENDED.LOGGING, _
  414.                USER.RESET.COMMAND$, _
  415.                USER.COUNT.RINGS.COMMAND$, _
  416.                USER.ANSWER.COMMAND$, _
  417.                USER.GO.OFFHOOK.COMMAND$, _
  418.                DISK.FOR.DOS$, _
  419.                DUMB.MODEM, _
  420.                COMMENTS.AS.MESSAGES, _
  421.                LSB, _
  422.                MSB, _
  423.                LINE.CONTROL.REGISTER, _
  424.                MODEM.CONTROL.REGISTER, _
  425.                LINE.STATUS.REGISTER, _
  426.                MODEM.STATUS.REGISTER
  427.       GOSUB 22340
  428.       INPUT #1,KEEP.TIME.CREDITS, _
  429.                XON.XOFF, _
  430.                ALLOW.CALLER.TURBO, _
  431.                USE.DEVICE.DRIVER$, _
  432.                PRELOG$, _
  433.                NEW.USER.QUESTIONNAIRE$, _
  434.                EPILOG$, _
  435.                REGISTRATION.PROGRAM$, _
  436.                QUES.PATH$, _
  437.                USER.LOCATION$, _
  438.                USER.INITIALIZE.COMMAND$, _
  439.                USER.FIRMWARE.CLEAR.CMND$, _
  440.                USER.FIRMWARE.WRITE.CMND$, _
  441.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  442.                SIZE.OF.STACK, _
  443.                SECURITY.EXEMPT.FROM.EPILOG, _
  444.                USE.BASIC.WRITES, _
  445.                DOSANSI, _
  446.                ESCAPE.INSECURE, _
  447.                DF, _
  448.                ADD.DIR.SECURITY, _
  449.                MAX.EXTENDED.LINES, _
  450.                DF$
  451.       GOSUB 22340
  452.       INPUT #1,LOGON.MAIL.LEVEL$, _
  453.                MACRO.DRVPATH$, _
  454.                MACRO.EXTENSION$, _
  455.                EMPHASIZE.ON.DEF$, _
  456.                EMPHASIZE.OFF.DEF$, _
  457.                FG.1.DEF$, _
  458.                FG.2.DEF$, _
  459.                FG.3.DEF$, _
  460.                FG.4.DEF$, _
  461.                SECVIO.HLP$, _
  462.                FOSSIL, _
  463.                MAX.CARRIER.WAIT, _
  464.                CALLER.BKGRD, _
  465.                SMART.TEXT, _
  466.                TIME.LOCK, _
  467.                WRITE.BUF.DEF, _
  468.                SEC.KILL.ANY, _
  469.                DOORS.DEF$, _
  470.                SCREEN.OUT.MSG$, _
  471.                AUTOPAGE.DEF$
  472.       GOSUB 21905
  473.       GOSUB 22340
  474.       IF MAX.CARRIER.WAIT < 1 THEN _
  475.          MAX.CARRIER.WAIT = 30
  476.       CALL ANSIDECODE (FG.1.DEF$)
  477.       CALL ANSIDECODE (FG.2.DEF$)
  478.       CALL ANSIDECODE (FG.3.DEF$)
  479.       CALL ANSIDECODE (FG.4.DEF$)
  480.       IF LEFT$(MACRO.EXTENSION$,1) = "." THEN _
  481.          MACRO.EXTENSION$ = RIGHT$(MACRO.EXTENSION$,LEN(MACRO.EXTENSION$)-1)
  482.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  483.          GOTO 11710
  484.       FOR I = 1 TO DNLD.SUB
  485.          INPUT #1,DNLD$(I)
  486.       NEXT
  487.       GOSUB 22340
  488. '
  489. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED
  490. '
  491. 11710 IF CALLERS.FILE$ = "" THEN _
  492.          CALLERS.FILE$ = NONE.PICKED$
  493.       IF ALTDIR.EXTENSION$ = "" THEN _
  494.          ALTDIR.EXTENSION$ = NONE.PICKED$
  495.       IF ALWAYS.STREW.TO$ = "" THEN _
  496.          ALWAYS.STREW.TO$ = NONE.PICKED$
  497.       IF QUES.PATH$ = "" THEN _
  498.          QUES.PATH$ = NONE.PICKED$
  499.       IF NEW.USER.QUESTIONNAIRE$ = "" THEN _
  500.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$
  501.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  502.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  503.       IF NET.MAIL$ = "NONE" THEN _
  504.          NET.MAIL$ = NONE.PICKED$
  505.       IF CONFMAIL.LIST$ = "" THEN _
  506.          CONFMAIL.LIST$ = NONE.PICKED$
  507.       X$ = BULLETIN.MENU$
  508.       CALL BRKFNAME (X$,Z$,BULLETIN.MENU$,Y$,-1)
  509.       IF Y$ <> "" THEN _
  510.          BULLETIN.MENU$ = BULLETIN.MENU$ + Y$
  511.       X$ = BULLETIN.PREFIX$
  512.       CALL BRKFNAME (X$,Z$,BULLETIN.PREFIX$,Y$,-1)
  513.       IF RECYCLE.TO.DOS = 0 THEN _
  514.          RECYCLE.TO.DOS$ = "INTERNAL" _
  515.       ELSE RECYCLE.TO.DOS$ = "SYSTEM
  516.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3)) - 1)
  517.       SF = SYSOP.FUNCTION(1)
  518.       GOSUB 16062
  519.       FOR I = 2 TO NUM.SYSOP
  520.          IF SYSOP.FUNCTION(I) > SF THEN _
  521.             GOTO 11790
  522.          SF = SYSOP.FUNCTION(I)
  523. 11790 NEXT
  524.       MM = MAIN.FUNCTION(1)
  525.       FOR I = 1 TO NUM.MAIN
  526.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  527.          IF MAIN.FUNCTION(I)    > MM THEN _
  528.             GOTO 11810
  529.          MM = MAIN.FUNCTION(I)
  530. 11810 NEXT
  531.       FC = FILES.FUNCTION(1)
  532.       FOR I = 1 TO NUM.FILES
  533.          FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  534.          IF FILES.FUNCTION(I) > FC THEN _
  535.             GOTO 11830
  536.          FC = FILES.FUNCTION(I)
  537. 11830 NEXT
  538.       UE = UTILITY.FUNCTION(1)
  539.       FOR I = 1 TO NUM.UTILITY
  540.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  541.          IF UTILITY.FUNCTION(I) > UE THEN _
  542.             GOTO 11850
  543.          UE = UTILITY.FUNCTION(I)
  544. 11850 NEXT
  545.       PS = LIBRARY.FUNCTION(1)
  546.       FOR I = 1 TO NUM.LIBRARY
  547.          LIBRARY.FUNCTION$(I,2) = MID$(LIBRARY.COMMANDS$,I,1)
  548.          IF LIBRARY.FUNCTION(I) > PS THEN _
  549.            GOTO 11860
  550.          PS = LIBRARY.FUNCTION(I)
  551. 11860 NEXT
  552.       FOR I = 1 TO NUM.GLOBAL
  553.          GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  554.       NEXT
  555.       CLOSE #1
  556.       GOSUB 50480
  557.       GOSUB 50530
  558. 11870 DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  559.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$) - 1))
  560.       PROMPT.BELL$ = "ON"
  561.       IF PROMPT.BELL = 0 THEN _
  562.          PROMPT.BELL$ = "OFF
  563.       GOSUB 15780
  564.       IF SYSOP.PASSWORD.1$ = "" OR SYSOP.PASSWORD.2$ = "" THEN _
  565.          MN1$ = "<Disabled>" : _
  566.          MN2$ = "" _
  567.       ELSE MN1$ = SYSOP.PASSWORD.1$ : _
  568.            MN2$ = SYSOP.PASSWORD.2$
  569.       M11$ = "NO"
  570.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  571.          M11$ = "YES"
  572.       IF START.HASH < 1 THEN _
  573.          START.HASH = 1
  574.       IF LEN.HASH < 2 THEN _
  575.          LEN.HASH = 31
  576.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  577.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  578.       GOSUB 18002
  579.       GOSUB 18102
  580.       I = 1
  581.       GOSUB 13030
  582.       IF NO.DEF.FILE = FALSE THEN _
  583.          GOTO 12151
  584.       IF NOT SUBBOARD THEN _
  585.          GOTO 12151
  586.       MAIN.MESSAGE.FILE$ = BASE.NAME$+"M.DEF"
  587.       MAIN.USER.FILE$    = BASE.NAME$+"U.DEF"
  588. 12151 CONFERENCE.MODE = 0
  589.       SUBBOARD = FALSE
  590.       MAINMSG$ = MAIN.MESSAGE.FILE$
  591.       MAINUSR$ = MAIN.USER.FILE$
  592.       I = INSTR(EXTENSION.LIST$,".")
  593.       IF I = 0 THEN _
  594.          DEFAULT.EXTENSION$ = EXTENSION.LIST$ : _
  595.          COMPRESSED.EXT$ = NONE.PICKED$ _
  596.       ELSE _
  597.          DEFAULT.EXTENSION$ = LEFT$(EXTENSION.LIST$,I-1) : _
  598.          COMPRESSED.EXT$ = MID$(EXTENSION.LIST$,I)
  599. 12160 KEY OFF
  600. '
  601. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  602. '
  603.       FILE$ = MAIN.MESSAGE.FILE$
  604.       GOSUB 30000
  605.       NO.OLD.FILE = FALSE
  606.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  607.          GOTO 12170
  608.       NO.OLD.FILE = TRUE
  609.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  610.       CALL GETNUMYN (A$,AB)
  611.       IF NOT AB THEN _
  612.          IF CONFERENCE.MODE > 0 THEN _
  613.             MAIN.MESSAGE.FILE$ = MAINMSG$ : _
  614.             MAIN.USER.FILE$ = MAINUSR$ : _
  615.             GOTO 12151 _
  616.          ELSE _
  617.             SYSTEM
  618.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  619.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  620.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  621.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  622.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  623.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  624.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  625.                                + 1 _
  626.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  627.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  628.       B1 = MAXIMUM.NUMBER.OF.NODES
  629.       B3! = HIGHEST.MESSAGE.RECORD
  630.       GOSUB 22080
  631.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  632. 12170 GOSUB 30040                        ' READ THE CHECKPOINT RECORD
  633.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  634.       MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD - FIRST.MESSAGE.RECORD) / 5) + 1
  635.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  636.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  637.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  638.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  639.          GOSUB 30450                     ' READ THE CHECKPOINT RECORD
  640.       FILE$ = MAIN.USER.FILE$            ' Check for USERS file
  641.       GOSUB 30000
  642.       NO.OLD.FILE = FALSE
  643.       IF OKAY THEN _
  644.          GOSUB 50500 : _
  645.          GOTO 12189
  646.       NO.OLD.FILE = TRUE
  647.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  648.       A$ = MAIN.USER.FILE$
  649.       GOSUB 22140
  650.       GOSUB 22150
  651. 12189 FOR I = 1 TO 10
  652.          KEY I,""
  653.       NEXT
  654.       NO.OLD.FILE = FALSE
  655.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  656.       GOSUB 22140
  657.       IF NO.DEF.FILE = FALSE THEN  _
  658.          GOTO 12190
  659.       GOSUB 18700
  660.       NO.DEF.FILE = FALSE
  661. '
  662. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU
  663. '
  664. 12190 IF KSTACKED$ = "" THEN _
  665.          IX = 0
  666. 12320 CALL DISPLAY
  667.       IF IX = 21 THEN _
  668.          GOTO 22350
  669.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (part 1)
  670.                     12624, _  ' 2        F2 - Global Parameters (part 2)
  671.                     12626, _  ' 3        F3 - Global Parameters (part 3)
  672.                     12628, _  ' 4        F4 - RBBS-PC System Files (part 1)
  673.                     12630, _  ' 5        F5 - RBBS-PC System Files (part 2)
  674.                     12632, _  ' 6        F6 - RBBS-PC "doors"
  675.                     12634, _  ' 7        F7 - RBBS-PC security (part 1)
  676.                     12636, _  ' 8        F8 - RBBS-PC security (part 2)
  677.                     12640, _  ' 9        F9 - Multiple RBBS-PC parameters
  678.                     12641, _  '10       F10 - RBBS-PC's Utilities
  679.                     12642, _  '11  Shift-F1 - RBBS-PC File Manager
  680.                     12643, _  '12  Shift-F2 - RBBS-PC comm. parameters (part 1)
  681.                     12644, _  '13  Shift-F3 - RBBS-PC comm. parameters (part 2)
  682.                     12645, _  '14  Shift-F4 - RBBS-PC Net Mail
  683.                     12646, _  '15  Shift-F5 - New user's parameters
  684.                     12647, _  '16  Shift-F6 - Library parameters
  685.                     12648     '17  Shift-F7 - RBBS-PC Color parameters
  686. '
  687. ' *  HANDLE UNSUPPORTED REQUEST
  688. '
  689. 12325 IX = IPAGE
  690.       GOTO 12320
  691. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  692.                        12910, _  '   2 SYSOP's last name
  693.                        12325, _  '   3
  694.                        13210, _  '   4 SYSOP's office hours
  695.                        13224, _  '   5 Page SYSOP with printer's bell
  696.                        13249, _  '   6 Go off-line when disk is full
  697.                        13750, _  '   7 Prompt bell
  698.                        13840, _  '   8 Maximum minutes per session
  699.                        16650, _  '   9 Maximum minutes per day
  700.                        15234, _  '  10 Factor to extend time for uploads
  701.                        13940, _  '  11 Months of inactivity before deleted
  702.                        13131, _  '  12 Name of this RBBS-PC
  703.                        15530, _  '  13 Foreground color
  704.                        15590, _  '  14 Background color
  705.                        15650, _  '  15 Border color
  706.                        13320, _  '  16 ANSI.SYS in CONFIG.SYS?
  707.                        13330, _  '  17 Control code for Smart Text
  708.                        17725, _  '  18 AutoPage def file
  709.                        13000, _  '  19 Level of logon mail report
  710.                        13340     '  20 Seconds to wait for ANSI detect
  711.       GOTO 12325
  712. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  713.                        16690, _  '  22 Remind users of uploads and downloads
  714.                        16722, _  '  23 Remind users of their profile
  715.                        17600, _  '  24 Enable download of new files at logon
  716.                        16730, _  '  25 Specify default page length
  717.                        16790, _  '  26 Set maximum number of lines/message
  718.                        16000, _  '  27 Is system "welcome" interruptable?
  719.                        15840, _  '  28 Are the system bulletins optional?
  720.                        16040, _  '  29 Type of PC running RBBS-PC
  721.                        17230, _  '  30 Symbols for SYSOP's commands
  722.                        17240, _  '  31 Symbols for main menu's commands
  723.                        17250, _  '  32 Symbols for file menu's commands
  724.                        17260, _  '  33 Symbols for utilities menu's commands
  725.                        17264, _  '  34 Symbols for "global" commands
  726.                        17500, _  '  35 Show section at command prompt?
  727.                        17550, _  '  36 Show commands at command prompt?
  728.                        15830, _  '  37 Restrict valid cmnds to current section
  729.                        15820, _  '  38 Use machine language subroutines?
  730.                        15825, _  '  39 Use BASIC PRINT for screen writes?
  731.                        16795     '  40 Set max # of lines for extended desc
  732.       GOTO 12325
  733. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  734.                        18100, _  '  42 Field to distinguish users with same id
  735.                        17800, _  '  43 Where personal id begins in user rec
  736.                        17810, _  '  44 Length of personal id in user rec
  737.                        17830, _  '  45 First Name prompt
  738.                        17840, _  '  46 Last Name prompt
  739.                        17850, _  '  47 Enforce upload/download ratios
  740.                        17630, _  '  48 Restrict users by date
  741.                        18510, _  '  49 Security level when subscription expires
  742.                        18530, _  '  50 Days before expiration to warn user
  743.                        18520, _  '  51 Days a newuser gets when registers
  744.                        17610, _  '  52 Turn printer off on recycle
  745.                        17620, _  '  53 Play music for RBBS themes?
  746.                        21760, _  '  54 Buffer size for text files
  747.                        16032, _  '  55 Size of stack space to use
  748.                        22550, _  '  56 Notify users when SYSOP wants system?
  749.                        17845, _  '  57 Ask users their (city/state)
  750.                        12325, _  '  58
  751.                        21770, _  '  59 Buffer size on writes
  752.                        21900     '  60 Voice synthesizer support
  753.       GOTO 12325
  754. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  755.                        15290, _  '  62 Number of active bulletins
  756.                        14800, _  '  63 Prefix used to name bulletin files
  757.                        14810, _  '  64 Drive and path for 'help' files
  758.                        14820, _  '  65 Prefix of nine major help files
  759.                        14825, _  '  66 Extension for individual help files
  760.                        14915, _  '  67 Help file for categorizing uploads
  761.                        14830, _  '  68 Name of 'newuser' file
  762.                        14840, _  '  69 Name of 'welcome" file
  763.                        14860, _  '  70 Name of SYSOP's commands menu
  764.                        14870, _  '  71 Name of main message command menu
  765.                        14880, _  '  72 Name of file subsystem command menu
  766.                        14890, _  '  73 Name of utilities command menu
  767.                        14900, _  '  74 Menu listing available conferences
  768.                        14905, _  '  75 Menu of questionnaires
  769.                        14815, _  '  76 Drive/path for optional questionnaires
  770.                        18310, _  '  77 Name of main PUI
  771.                        15835, _  '  78 Can menus pause in the middle?
  772.                        15850, _  '  79 Macro drive/path
  773.                        15860     '  80 Macro extension
  774.       GOTO 12325
  775. 12630 ON ILOOKUP GOSUB 14910, _  '  81 File of unacceptable user names
  776.                        17700, _  '  82 Name of required questionnaire
  777.                        17710, _  '  83 Name of "prelog" file
  778.                        17720, _  '  84 Name of New User questionnaire
  779.                        17730, _  '  85 Name of "epilog" questionnaire
  780.                        15460, _  '  86 Name of 'message' file
  781.                        15500, _  '  87 Name of 'user' file
  782.                        15464, _  '  88 Name of 'comments' file
  783.                        15993, _  '  89 Record comments as private messages?
  784.                        15461, _  '  90 Name of 'callers' file
  785.                        15991, _  '  91 Extened logging to 'callers' file?
  786.                        22550, _  '  92 Wrap-around the 'callers' file?
  787.                        12670, _  '  93 Conferences to search for new mail
  788.                        21780, _  '  94 Max # of work variables
  789.                        17715, _  '  95 List of callers files for nodes
  790.                        21785, _  '  96 Seconds to display copyright
  791.                        13297, _  '  97 Disallow msg quoting
  792.                        12325, _  '  98
  793.                        12325, _  '  99
  794.                        12325     ' 100
  795.       GOTO 12325
  796. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  797.                        16130, _  ' 102 Name of menu listing available doors
  798.                        16140, _  ' 103 Name of file built dynamically for doors
  799.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  800.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  801.                        16170, _  ' 106 Enable CTTY command for doors
  802.                        18640, _  ' 107 Name of program to invoke at logon
  803.                        17215, _  , 108 Who subject to logon door
  804.                        18625, _  ' 109 Doors control file
  805.                        12325, _  ' 110
  806.                        12325, _  ' 111
  807.                        12325, _  ' 112
  808.                        12325, _  ' 113
  809.                        12325, _  ' 114
  810.                        12325, _  ' 115
  811.                        12325, _  ' 116
  812.                        12325, _  ' 117
  813.                        12325, _  ' 118
  814.                        12325, _  ' 119
  815.                        12325     ' 120
  816.       GOTO 12325
  817. 12634 ON ILOOKUP GOSUB 12980, _  ' 121 Pseudonym to sign on remotely as SYSOP
  818.                        12990, _  ' 122 Escape logs on with no security
  819.                        17160, _  ' 123 Minimum security level to logon
  820.                        17170, _  ' 124 Default security level for new users
  821.                        17180, _  ' 125 SYSOP's security level
  822.                        17200, _  ' 126 Minimum security to see SYSOP's menu
  823.                        17210, _  ' 127 Min security to add extended desc
  824.                        17220, _  ' 128 Max # security violations allowed
  825.                        17230, _  ' 129 Security levels for SYSOP commands
  826.                        17240, _  ' 130 Security levels for main commands
  827.                        17250, _  ' 131 Security levels for file commands
  828.                        17260, _  ' 132 Security levels for utilities commands
  829.                        17264, _  ' 133 Security level for 'global' commands'
  830.                        17290, _  ' 134 Max # password changes allowed
  831.                        17300, _  ' 135 Min. security for temp. passwords
  832.                        17310, _  ' 136 Min. security to overwrite on uploads
  833.                        17316, _  ' 137 User's security exempted from packing
  834.                        15310, _  ' 138 Default security to read new Priv. Msg.
  835.                        15320, _  ' 139 Default security to read new Public Msg.
  836.                        15330     ' 140 Min. security to change msg.'s security
  837.       GOTO 12325
  838. 12636 ON ILOOKUP GOSUB 22550, _  ' 141 Call back verification of all/new users
  839.                        18630, _  ' 142 Drive/path for personal files
  840.                        12750, _  ' 143 Name of personal directory
  841.                        17820, _  ' 144 What protocol required for personal dnld
  842.                        17190, _  ' 145 File listing download-secured files
  843.                        17270, _  ' 146 File name with privileged passwords
  844.                        17645, _  ' 147 Concatenate ASCII files in pers. dnld?
  845.                        18515, _  ' 148 Security level to categorize uploads
  846.                        18500, _  ' 149 Min. security to view new uploads
  847.                        16033, _  ' 150 Security level exempt from "epilog"
  848.                        18545, _  ' 151 Min. security to automatically add users
  849.                        18340, _  ' 152 Min. security to use turbo logon
  850.                        18345, _  ' 153 Min. security to add dir entry
  851.                        17280, _  ' 154 Help file for security violation
  852.                        18330, _  ' 155 Time Lock Selection
  853.                        17640, _  ' 156 Auto upgrade security from main
  854.                        17635, _  ' 157 Min sec to read/kill all msgs
  855.                        13010, _  ' 158 How screen out lines from msg
  856.                        18335, _  ' 159 Min sec to personal upload
  857.                        17605     ' 160 Enable carbon copy for msgs
  858.       GOTO 12325
  859. 12640 ON ILOOKUP GOSUB 21750, _  ' 161 Maximum number of concurrent RBBS-PC's
  860.                        21810, _  ' 162 Environment running RBBS-PC
  861.                        21950, _  ' 163 Method that RBBS-PC re-cycles with
  862.                        21910, _  ' 164 Number of records in 'user' file
  863.                        22040, _  ' 165 Number of records in 'message' file
  864.                        13890, _  ' 166 Maximum number of messages allowed
  865.                        25040, _  ' 167 Conference file maintenance
  866.                        14845, _  ' 168 Default extension compressed files
  867.                        14930, _  ' 169 Additional compressed extensions
  868.                        22030, _  ' 170 Can messages grow
  869.                        14917, _  ' 171 Distribution list help file name
  870.                        14817, _  ' 172 Drive/path for distribution lists
  871.                        14940, _  ' 173 Message securities allowed
  872.                        12325, _  ' 174
  873.                        12325, _  ' 175
  874.                        12325, _  ' 176
  875.                        12325, _  ' 177
  876.                        12325, _  ' 178
  877.                        12325, _  ' 179
  878.                        12325     ' 180
  879.       IF REFRESH = 1 THEN _
  880.          REFRESH = 0 : _
  881.          GOTO 12151
  882.       IF REFRESH = 2 THEN _
  883.          REFRESH = 0 : _
  884.          GOTO 12160
  885.       GOTO 12325
  886. 12641 ON ILOOKUP GOSUB 23160, _  ' 181 Pack the 'messages' file
  887.                        22570, _  ' 182 Rebuild the 'user' file
  888.                        23630, _  ' 183 Print the message headers
  889.                        23740, _  ' 184 Renumber messages
  890.                        23620, _  ' 185 Repair the 'message' file
  891.                        24050, _  ' 186 Require users to answer questionnaire
  892.                        24790, _  ' 187 Check FMS directory
  893.                        13180, _  ' 188 Check Personal Download directory
  894.                        18700, _  ' 189 Check critical parameters
  895.                        18800, _  ' 190 Set New parameters
  896.                        24795, _  ' 191 Reset active printers for all nodes
  897.                        24040, _  ' 192 Set Highlight to match graphics
  898.                        12325, _  ' 193
  899.                        12325, _  ' 194
  900.                        12325, _  ' 195
  901.                        12325, _  ' 196
  902.                        12325, _  ' 197
  903.                        12325, _  ' 198
  904.                        12325, _  ' 199
  905.                        12325     ' 200
  906.       GOTO 12325
  907. 12642 ON ILOOKUP GOSUB 14920, _  ' 201 Drive available for uploading
  908.                        12730, _  ' 202 Name of directory for uploading
  909.                        18550, _  ' 203 Drive/path for upload dir
  910.                        13470, _  ' 204 Drive(s) available for downloading
  911.                        25380, _  ' 205 Are DOS subdirectories used?
  912.                        25420, _  ' 206 Upload to a DOS subdirectory?
  913.                        25460, _  ' 207 Are downloads from DOS subdirectories?
  914.                        25495, _  ' 208 List, change, add, delete subdir.?
  915.                        14850, _  ' 209 Extension for file directories
  916.                        14855, _  ' 210 Alternate directory extension
  917.                        14857, _  ' 211 Name (prefix) of dir of dir
  918.                        15920, _  ' 212 Omit directory list from N>ew command?
  919.                        18350, _  ' 213 Copy upload descriptions to another file
  920.                        12740, _  ' 214 FMS directory name
  921.                        17590, _  ' 215 Limit file searches to upload dir
  922.                        18200, _  ' 216 Default category codes for uploads
  923.                        18300, _  ' 217 File name with valid category codes
  924.                        18360, _  ' 218 Restrict dir search for 'ALL' to
  925.                        18400, _  ' 219 Length of description of uploads
  926.                        18600     ' 220 Drive/path directory files
  927.       GOTO 12325
  928. 12643 ON ILOOKUP GOSUB 14120, _  ' 221 Communications Port being used
  929.                        15240, _  ' 222 Seconds for modem to initalize
  930.                        15250, _  ' 223 Seconds to wait before issuing cmds.
  931.                        13228, _  ' 224 Number of rings to answer on
  932.                        15710, _  ' 225 Use standard RBBS-PC modem commands
  933.                        12325, _  ' 226 Microcom's MNP available?
  934.                        16121, _  ' 227 Issue modem commands between rings?
  935.                        16124, _  ' 228 Baud rate to initially open modem at
  936.                        16031, _  ' 229 Seconds to wait before disconnecting
  937.                        16725, _  ' 230 Is a dumb modem being used?
  938.                        23731, _  ' 231 Initialize Hayes 2400 firmware
  939.                        18540, _  ' 232 DTR drop delay time
  940.                        18620, _  ' 233 Where external protocol pgms are
  941.                        17650, _  ' 234 Always check for autodownload support
  942.                        15880, _  ' 235 Require non-ASCII protocol?
  943.                        13280, _  ' 236 If no calls, recycle after
  944.                        13290, _  ' 237 Leave modem at initial baud
  945.                        12325, _  ' 238
  946.                        12325, _  ' 239
  947.                        12325     ' 240
  948.       GOTO 12325
  949. 12644 ON ILOOKUP GOSUB 13295, _  ' 241 Switch back when change comm. parms.
  950.                        13238, _  ' 242 Min. baud for new callers
  951.                        13242, _  ' 243 Min. baud for old callers
  952.                        13260, _  ' 244 Use CTS for modem flow control?
  953.                        13310, _  ' 245 Use XON/XOFF for flow control
  954.                        13270, _  ' 246 Max time to wait for carrier
  955.                        12325, _  ' 247
  956.                        12325, _  ' 248
  957.                        12325, _  ' 249
  958.                        12325, _  ' 250
  959.                        12325, _  ' 251
  960.                        12325, _  ' 252
  961.                        12325, _  ' 253
  962.                        12325, _  ' 254
  963.                        12325, _  ' 255
  964.                        12325, _  ' 256
  965.                        12325, _  ' 257
  966.                        12325, _  ' 258
  967.                        12325, _  ' 259
  968.                        12325     ' 260
  969.       GOTO 12325
  970. 12645 ON ILOOKUP GOSUB 26040, _  ' 261 Time of day to drop to DOS
  971.                        26070, _  ' 262 NET-MAIL driver to invoke
  972.                        26100, _  ' 263 Echo on command for host
  973.                        26110, _  ' 264 Echo off command for host
  974.                        13285, _  ' 265 Echo remote input?
  975.                        26105, _  ' 266 ASCII upload line acknowledge
  976.                        15466, _  ' 267 Up/download list
  977.                        15468, _  ' 268 Up/download locator
  978.                        12325, _  ' 269
  979.                        12325, _  ' 270
  980.                        12325, _  ' 271
  981.                        12325, _  ' 272
  982.                        12325, _  ' 273
  983.                        12325, _  ' 274
  984.                        12325, _  ' 275
  985.                        12325, _  ' 276
  986.                        12325, _  ' 277
  987.                        12325, _  ' 278
  988.                        12325, _  ' 279
  989.                        12325     ' 280
  990.       GOTO 12325
  991. 12646 ON ILOOKUP GOSUB 17560, _  ' 281 Prompt new users for their preferences
  992.                        22550, _  ' 282 New users default sign-on mode
  993.                        22550, _  ' 283 New users default file-transfer mode
  994.                        22550, _  ' 284 Line feeds for new users default to
  995.                        22550, _  ' 285 Nulls for new users default to
  996.                        22550, _  ' 286 Prompt bell for new users defaults to
  997.                        22550, _  ' 287 New users 'graphics' ability is
  998.                        22550, _  ' 288 New users upper/lower case
  999.                        22550, _  ' 289 New users margins defaults are
  1000.                        17570, _  ' 290 Remember new users
  1001.                        17580, _  ' 291 Survive no user room
  1002.                        17295, _  ' 292 Max # of mins can bank
  1003.                        12325, _  ' 293
  1004.                        12325, _  ' 294
  1005.                        12325, _  ' 295
  1006.                        12325, _  ' 296
  1007.                        12325, _  ' 297
  1008.                        12325, _  ' 298
  1009.                        12325, _  ' 299
  1010.                        12325     ' 300
  1011.       GOTO 12325
  1012. 12647 ON ILOOKUP GOSUB 20000, _  ' 301 Drive for Library
  1013.                        20010, _  ' 302 Drive/path for directory
  1014.                        20020, _  ' 303 Extension for directory lists
  1015.                        20030, _  ' 304 Drive/path for work disk
  1016.                        20040, _  ' 305 # of disks in Library
  1017.                        20050, _  ' 306 # of Master directories
  1018.                        20060, _  ' 307 # of subdirectories in each master
  1019.                        20070, _  ' 308 Prefix of subdirectory on Library
  1020.                        20080, _  ' 309 Name of subsystem command menu
  1021.                        20090, _  ' 310 Symbols to use for menu commands
  1022.                        20090, _  ' 311 Security levels for menu functions
  1023.                        20100, _  ' 312 Drive/path of ARCHIVE utility
  1024.                        20110, _  ' 313 Name of ARCHIVE utility
  1025.                        12325, _  ' 314
  1026.                        12325, _  ' 315
  1027.                        12325, _  ' 316
  1028.                        12325, _  ' 317
  1029.                        12325, _  ' 318
  1030.                        12325, _  ' 319
  1031.                        12325     ' 320
  1032.       GOTO 12325
  1033. 12648 ON ILOOKUP GOSUB 26115, _  ' 321 Turn on Emphasis
  1034.                        26120, _  ' 322 Restore text to normal
  1035.                        12850, _
  1036.                        12860, _
  1037.                        12870, _
  1038.                        12880, _
  1039.                        12890, _  ' 327 Caller Background Color
  1040.                        12325, _  ' 328
  1041.                        12325, _  ' 329
  1042.                        12325, _  ' 330
  1043.                        12325, _  ' 331
  1044.                        12325, _  ' 332
  1045.                        12325, _  ' 333
  1046.                        12325, _  ' 334
  1047.                        12325, _  ' 335
  1048.                        12325, _  ' 336
  1049.                        12325, _  ' 337
  1050.                        12325, _  ' 338
  1051.                        12325, _  ' 339
  1052.                        12325     ' 340
  1053.       GOTO 12325
  1054. '
  1055. ' * LIST OF CONFERENCES TO SEARCH FOR NEW MAIL
  1056. '
  1057. 12670 CALL GETNUMYN ("Do you want to notify callers of conference mail",X)
  1058.       IF NOT X THEN _
  1059.          CONFMAIL.LIST$ = NONE.PICKED$ : _
  1060.          RETURN
  1061.       GOSUB 17340
  1062.       GOSUB 17740
  1063.       CONFMAIL.LIST$ = HJ$
  1064.       RETURN
  1065. '
  1066. ' * PROCESS NAME OF UPLOAD DIRECTORY
  1067. '
  1068. 12730 CALL ASKRO("Name of upload directory (8 char. max)?",24,HJ$)
  1069.       IF LEN(HJ$) < 1 OR _
  1070.          LEN(HJ$) > 8 THEN _
  1071.          GOTO 12730
  1072.       CALL ALLCAPS (HJ$)
  1073.       UPLOAD.DIRECTORY$ = HJ$
  1074.       RETURN
  1075. '
  1076. ' * Get the File Management System Directory
  1077. '
  1078. 12740 CALL ASKRO("Name of File Management System (or NONE) directory (8 char. max)?",24,HJ$)
  1079.       IF LEN(HJ$) > 8 THEN _
  1080.          GOTO 12740
  1081.       CALL ALLCAPS (HJ$)
  1082.       FMS.DIRECTORY$ = HJ$
  1083.       IF FMS.DIRECTORY$ = "NONE" THEN _
  1084.          FMS.DIRECTORY$ = ""
  1085.       RETURN
  1086. 12750 CALL ASKRO("Name (prefix, optional extension) of Personal directory",24,HJ$)
  1087.       IF LEN(HJ$) < 1 THEN RETURN
  1088.       CALL ALLCAPS (HJ$)
  1089.       CALL BRKFNAME (HJ$,STRNG$,PREFIX$,EXTENSION$,TRUE)
  1090.       IF STRNG$ = "" THEN _
  1091.          HJ$ = PERSONAL.DRVPATH$ + HJ$ _
  1092.       ELSE GOSUB 60470 : _
  1093.            IF NOT IS.OK THEN _
  1094.               GOTO 12750
  1095.       IF EXTENSION$ = "." THEN _
  1096.          HJ$ = HJ$ + ".DEF"
  1097.       PERSONAL.DIR$ = HJ$
  1098.       RETURN
  1099. '
  1100. ' * GET THE SYSOP'S FIRST NAME
  1101. '
  1102. 12840 CALL ASKRO("What is the SYSOP's FIRST Name?",24,HJ$)
  1103.       IF LEN(HJ$) < 3 THEN _
  1104.          GOTO 12840
  1105.       CALL ALLCAPS (HJ$)
  1106.       SYSOP.FIRST.NAME$ = HJ$
  1107.       RETURN
  1108. 12850 CALL GETANSI (FG.1.DEF$," 1st")
  1109.       RETURN
  1110. 12860 CALL GETANSI (FG.2.DEF$," 2nd")
  1111.       RETURN
  1112. 12870 CALL GETANSI (FG.3.DEF$," 3rd")
  1113.       RETURN
  1114. 12880 CALL GETANSI (FG.4.DEF$," 4th")
  1115.       RETURN
  1116. 12890 CALL GETCOLOR("Caller's BACKGROUND color",CALLER.BKGRD)
  1117.       RETURN
  1118. '
  1119. ' * PROCESS THE SYSOP'S LAST NAME
  1120. '
  1121. 12910 CALL ASKRO("What is the SYSOP's LAST Name?",24,HJ$)
  1122.       IF LEN(HJ$) < 3 THEN _
  1123.          GOTO 12840
  1124.       CALL ALLCAPS (HJ$)
  1125.       SYSOP.LAST.NAME$ = HJ$
  1126.       RETURN
  1127. '
  1128. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY
  1129. '
  1130. 12980 CALL ASKRO("Secret first name that lets remote caller on as SYSOP is?",24,SYSOP.PASSWORD.1$)
  1131.       CALL ALLCAPS (SYSOP.PASSWORD.1$)
  1132.       IF SYSOP.PASSWORD.1$ = "" THEN _
  1133.          GOTO 12985
  1134.       MN1$ = SYSOP.PASSWORD.1$
  1135.       CALL ASKRO("Secret last name for remote SYSOP ([ENTER] disables)?",24,SYSOP.PASSWORD.2$)
  1136.       CALL ALLCAPS (SYSOP.PASSWORD.2$)
  1137.       IF SYSOP.PASSWORD.2$ = "" THEN _
  1138.          GOTO 12985
  1139.       MN2$ = SYSOP.PASSWORD.2$
  1140.       RETURN
  1141. 12985 MN1$ = "(Disabled)"
  1142.       MN2$ = ""
  1143.       SYSOP.PASSWORD.1$ = ""
  1144.       SYSOP.PASSWORD.2$ = ""
  1145.       RETURN
  1146. 12990 CALL GETNUMYN ("ESCAPE immediately lets on locally (NO=require name)",ESCAPE.INSECURE)
  1147.       RETURN
  1148. '
  1149. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM
  1150. '
  1151. 13000 CALL ASKRO ("Mail to caller to report on logon: A)ll, N)ew only, S)kip (none)",24,HJ$)
  1152.       IF LEN(HJ$) < 1 THEN _
  1153.          GOTO 13000
  1154.       LOGON.MAIL.LEVEL$ = LEFT$(HJ$,1)
  1155.       CALL ALLCAPS (LOGON.MAIL.LEVEL$)
  1156.       IF INSTR("ANS",LOGON.MAIL.LEVEL$) = 0 THEN _
  1157.          GOTO 13000
  1158.       RETURN
  1159. 13010 CALL ASKRO ("Exclude lines from msg display that begin with",24,SCREEN.OUT.MSG$)
  1160.       RETURN
  1161. 13030 IF BYPASS = 0 THEN _
  1162.          BYPASS$ = "Any user" : _
  1163.          RETURN
  1164.       IF BYPASS = 1 THEN _
  1165.          BYPASS$ = "All but new users" : _
  1166.          RETURN
  1167.       IF BYPASS = 2 THEN _
  1168.          BYPASS$ = "Only EXPERT users" : _
  1169.          RETURN
  1170.       IF I = 0 THEN _
  1171.          CALL GETINIT ("Specify the security level required to bypass messages. ",24,-32767,32767,X,CR) : _
  1172.          X$=STR$(X)
  1173.       BYPASS$ = "Security >" + _
  1174.                 STR$(VAL(X$)) + _
  1175.                 " users"
  1176.       RETURN
  1177. '
  1178. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME
  1179. '
  1180. 13131 CALL ASKRO("Enter name for this RBBS-PC (19 characters or less) ",24,HJ$)
  1181.       IF LEN(HJ$) > 19 THEN _
  1182.          GOTO 13131
  1183.       CALL ALLCAPS (HJ$)
  1184.       RBBS.NAME$ = HJ$
  1185.       RETURN
  1186. 13180 CALL CHKPERSDIR (PERSONAL.DIR$,MAX.DESC.LEN,PERSONAL.LEN)
  1187.       RETURN
  1188. '
  1189. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"
  1190. '
  1191. 13210 CALL GETINIT ("What is the earliest SYSOP wants to be paged? -- HHMM ",24,0,2359,START.OFFICE.HOURS,CR)
  1192.       IF CR THEN _
  1193.          GOTO 13210
  1194. 13216 CALL GETINIT ("What is the latest SYSOP wants to be paged? -- HHMM ",24,0,2359,END.OFFICE.HOURS,CR)
  1195.       IF CR THEN _
  1196.          GOTO 13216
  1197.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1198.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1199.       RETURN
  1200. '
  1201. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING
  1202. '
  1203. 13224 CALL GETYESNO ("Use on-line printer's bell to the page SYSOP?",M11$)
  1204.       RETURN
  1205. '
  1206. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING
  1207. '
  1208. 13228 A$ = ""
  1209.       IF INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  1210.          USER.INIT.COMMAND$ = USER.INIT.COMMAND$ + "S0=001"
  1211. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  1212.       IF CR THEN _
  1213.          GOTO 13229
  1214.       IF REQUIRED.RINGS = 0 THEN _
  1215.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "001" : _
  1216.          RETURN
  1217. 13233 CALL GETNUMYN ("Next call answered after" + _
  1218.              STR$(REQUIRED.RINGS) + _
  1219.              " rings. Do you want ringback?",AB)
  1220.       IF NOT AB THEN _
  1221.          GOTO 13237
  1222. 13235 IF REQUIRED.RINGS > 5 THEN _
  1223.          A$ = "(<6 for ringback)" : _
  1224.          GOTO 13229
  1225.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "255"
  1226.       RETURN
  1227. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "254"
  1228.       RETURN
  1229. 13238 CALL MMINTEGER ("Minimum BPS rate required for NEW callers",0,32000,MIN.NEWCALLER.BAUD)
  1230.       RETURN
  1231. 13242 CALL MMINTEGER ("Minimum BPS rate required for OLD callers",0,32000,MIN.OLDCALLER.BAUD)
  1232.       RETURN
  1233. 13249 CALL GETNUMYN ("Should RBBS-PC go off-line when DISK FULL occurs ",DISKFULL.GO.OFFLINE)
  1234.       RETURN
  1235. '
  1236. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE
  1237. '
  1238. 13253 CALL ASKRO ("Specify single drive in the range A->" + _
  1239.             M$ + _
  1240.             " for "+A$,24,HJ$)
  1241.       IF LEN(HJ$) <> 1 THEN _
  1242.          GOTO 13253
  1243.       CALL ALLCAPS (HJ$)
  1244.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1245.          GOTO 13253
  1246.       RETURN
  1247. '
  1248. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL
  1249. '
  1250. 13260 CALL GETYESNO ("Does your modem use the CTS signal for flow control",RTS$)
  1251.       RETURN
  1252. 13270 CALL MMINTEGER ("Seconds to wait for carrier after detecting a call",5,999,MAX.CARRIER.WAIT)
  1253.       RETURN
  1254. 13280 CALL MMINTEGER ("Wait how many minutes before recycling if no calls (0=forever)",0,32400,RECYCLE.WAIT)
  1255.       RETURN
  1256. 13285 CALL ASKRO ("What caller types is ECHOed by R)BBS, I)nter host, C)aller's pgm",24,DEFAULT.ECHOER$)
  1257.       IF LEN(DEFAULT.ECHOER$) < 1 THEN _
  1258.          GOTO 13285
  1259.       DEFAULT.ECHOER$ = LEFT$(DEFAULT.ECHOER$,1)
  1260.       CALL ALLCAPS (DEFAULT.ECHOER$)
  1261.       IF INSTR("ICR",DEFAULT.ECHOER$) < 1 THEN _
  1262.          GOTO 13285
  1263.       RETURN
  1264. 13290 CALL GETNUMYN ("Leave modem at init BPS rate (don't match caller)",KEEP.INIT.BAUD)
  1265.       RETURN
  1266. 13295 CALL GETNUMYN ("Switch back comm settings if changed for up/down load",SWITCH.BACK)
  1267.       RETURN
  1268. 13297 CALL GETNUMYN ("Disable message quoting in replies",ZNoQuoting)
  1269.       RETURN
  1270. 13310 CALL GETNUMYN ("Always respect XON/XOFF for flow control",XON.XOFF)
  1271.       RETURN
  1272. 13320 CALL GETNUMYN ("CONFIG.SYS includes an ANSI device driver",DOSANSI)
  1273.       RETURN
  1274. 13330 CALL MMINTEGER ("ASCII value for SMART TEXT control (0=NONE)",0,255,SMART.TEXT)
  1275.       RETURN
  1276. 13340 CALL MMINTEGER ("Seconds to wait for ANSI detect (0=disable, 10=max)?",0,10,TEST.ANSI.TIME)
  1277.       RETURN
  1278. '
  1279. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED
  1280. '
  1281. 13470 CALL ASKRO ("Specify download drives (max of" + _
  1282.             STR$(MAXD) + _
  1283.             " in the range A-> " + M$ + "). ",24,HJ$)
  1284.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1285.          GOTO 13470
  1286.       CALL ALLCAPS (HJ$)
  1287.       FOR I = 1 TO LEN(HJ$)
  1288.          A$(I) = MID$(HJ$,I,1)
  1289.       NEXT
  1290.       FOR I = 1 TO LEN(HJ$)
  1291.          IF A$(I) < "A" OR A$(I) > M$ THEN _
  1292.             GOTO 13470
  1293.       NEXT
  1294.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1295.       IF DNLD.SUB < 1 THEN _
  1296.          RETURN
  1297.       FOR I = 1 TO DNLD.SUB
  1298.          IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1299.             DNLD$(I) = ""
  1300.       NEXT
  1301.       STOPIT = DNLD.SUB
  1302.       FOR I = 1 TO STOPIT
  1303.          IF DNLD$(I) <> "" THEN _
  1304.             GOTO 13583
  1305.          DNLD$(I) = DNLD$(I + 1)
  1306.          DNLD$(I + 1) = ""
  1307. 13583 NEXT
  1308.       DNLD.SUB = 0
  1309.       FOR I = 1 TO STOPIT
  1310.          IF DNLD$(I) <> "" THEN _
  1311.             DNLD.SUB = DNLD.SUB + 1
  1312.       NEXT
  1313.       RETURN
  1314. 13593 MAX = 3
  1315. 13599 CALL ASKRO (A$,24,HJ$)
  1316.       CALL ALLCAPS (HJ$)
  1317.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1318.          GOTO 13599
  1319.       I = 0
  1320.       GOSUB 25920
  1321.       IF I = 0 THEN _
  1322.          RETURN
  1323.       GOTO 13599
  1324. '
  1325. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?
  1326. '
  1327. 13750 CALL ASKRO ("Prompt bell default? (ON or OFF) ",24,PROMPT.BELL$)
  1328.       IF LEN(PROMPT.BELL$) < 1 OR _
  1329.          LEN(PROMPT.BELL$) > 3 THEN _
  1330.          GOTO 13750
  1331.       CALL ALLCAPS (PROMPT.BELL$)
  1332.       IF PROMPT.BELL$ = "ON"  THEN _
  1333.          RETURN
  1334.       IF PROMPT.BELL$ = "OFF" THEN _
  1335.          RETURN
  1336.       GOTO 13750
  1337. '
  1338. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)
  1339. '
  1340. 13840 CALL GETINIT ("Maximum minutes per session a user can stay on the system ",24,0,1440,MIN,CR)
  1341.       IF CR THEN _
  1342.          GOTO 13840
  1343.       MINUTES.PER.SESSION! = MIN
  1344.       RETURN
  1345. '
  1346. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED
  1347. '
  1348. 13890 J = 999
  1349.       IF NOT MESSAGES.CAN.GROW THEN _
  1350.          IF ((MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIUM.NUMBER.OF.NODES) / 5) < J THEN _
  1351.             J = (MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIMUM.NUMBER.OF.NODES) / 5
  1352.       CALL GETINIT ("Set maximum number of messages allowed (MAX = " + _
  1353.             STR$(FIX(J)) + _
  1354.             ")",24,1,999,MAX.ALLOWED.MSGS.FRM.DEF,CR)
  1355.       IF CR THEN _
  1356.          GOTO 13890
  1357.       IF MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1358.          GOTO 13929
  1359.       IF MESSAGES.CAN.GROW THEN _
  1360.          GOTO 13929
  1361.       CALL GETNUMYN ("Increase the " + _
  1362.                       MAIN.MESSAGE.FILE$ + _
  1363.                      " file to " + _
  1364.                        STR$((MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES) + _
  1365.                      " records?",AB)
  1366.       IF NOT AB THEN _
  1367.          GOTO 13890
  1368. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1369.       GOSUB 30450
  1370.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1371.       GOSUB 22080
  1372.       RETURN
  1373. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1374.       GOSUB 30450
  1375.       RETURN
  1376. 13940 CALL MMINTEGER ("# of months of inactivity before user purged (1-59)",1,59,ACT.MNTHS.B4.DELETING)
  1377.       RETURN
  1378. 14120 COMMIN = 1
  1379.       COMMAX = 8
  1380.       CALL ANYINTEGER ("# of communication port to use (" + _
  1381.                    MID$(STR$(COMMIN),2) + _
  1382.                   "-" + _
  1383.                   MID$(STR$(COMMAX),2) + _
  1384.                   ", or 0 for LOCAL WORKSTATION)? ",X)
  1385.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1386.          GOTO 14120
  1387.       COM.PORT$ = "COM" + MID$(STR$(X),2)
  1388.       IF X = 0 THEN _
  1389.          LSB = 1016 : _
  1390.          RETURN
  1391. 14121 CALL GETNUMYN ("Use FOSSIL driver support",FOSSIL)
  1392.       IF FOSSIL THEN _
  1393.          GOTO 14125
  1394.       IF X < 3 THEN _
  1395.          GOTO 14123
  1396.       CALL GETNUMYN("BASIC does not support " + COM.PORT$ + ".  Do you wish to change it?",AB)
  1397.       IF AB THEN _
  1398.          GOTO 14120
  1399.       GOTO 14121
  1400. 14123 IF X = 1 THEN _
  1401.          LSB = 1016 _
  1402.       ELSE IF X = 2 THEN _
  1403.               LSB = 760
  1404.       IF PCJR THEN _
  1405.          LSB = 760
  1406.       RETURN
  1407. 14125 CALL ASKRO("Enter port address. e.g. 3F8? ",24,HJ$)
  1408.       B = LEN(HJ$)
  1409.       IF B < 3 OR B > 4 THEN _
  1410.          GOTO 14125
  1411. 14130 CALL ALLCAPS (HJ$)
  1412.       B = 3
  1413.       GOSUB 14789
  1414.       IF A < 0 THEN _
  1415.          GOTO 14125
  1416.       LSB = A
  1417.       B = 2
  1418.       GOSUB 14789
  1419.       IF A < 0 THEN _
  1420.          GOTO 14125
  1421.       LSB = LSB + A * 16
  1422.       B = 1
  1423.       GOSUB 14789
  1424.       IF A < 0 THEN _
  1425.          GOTO 14125
  1426.       LSB = LSB + A * 256
  1427.       RETURN
  1428. 14789 A = INSTR("0123456789ABCDEF",MID$(HJ$,B,1)) - 1
  1429.       RETURN
  1430. '
  1431. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES
  1432. '
  1433. 14790 GOSUB 15200
  1434.       DRIVE.FOR.BULLETINS$ = HJ$
  1435.       GOSUB 14970
  1436.       BULLETIN.MENU$ = HJ$
  1437.       RETURN
  1438. '
  1439. ' *  PREFIX USED TO NAME BULLETIN FILES
  1440. '
  1441. 14800 GOSUB 14970
  1442.       IF LEN(HJ$) > 6 THEN _
  1443.          RETURN
  1444.       BULLETIN.PREFIX$ = HJ$
  1445.       RETURN
  1446. '
  1447. ' *  DRIVE AND PATH FOR THREE MAJOR 'HELP' FILES
  1448. '
  1449. 14810 GOSUB 15200
  1450.       HELP.PATH$ = HJ$
  1451.       RETURN
  1452. 14815 GOSUB 15200
  1453.       QUES.PATH$ = HJ$
  1454.       RETURN
  1455. 14817 GOSUB 15200
  1456.       ZDistriPath$ = HJ$
  1457.       RETURN
  1458. '
  1459. ' *  PREFIX FOR FOR FOUR MAJOR 'HELP' FILES
  1460. '
  1461. 14820 GOSUB 14970
  1462.       IF LEN(HJ$) > 7 THEN _
  1463.          RETURN
  1464.       HELP.FILE.PREFIX$ = HJ$
  1465.       HELP$(3) = HELP.FILE.PREFIX$ + "3"
  1466.       HELP$(4) = HELP.FILE.PREFIX$ + "4"
  1467.       HELP$(7) = HELP.FILE.PREFIX$ + "7"
  1468.       HELP$(9) = HELP.FILE.PREFIX$ + "9"
  1469.       RETURN
  1470. '
  1471. ' *  NAME OF 'NEWUSER' FILE
  1472. '
  1473. 14825 A$ = "File extension for help files (max 3 chars)"
  1474.       GOSUB 13593
  1475.       HELP.EXTENSION$ = HJ$
  1476.       RETURN
  1477. 14830 GOSUB 17340
  1478.       NEWUSER.FILE$ = HJ$
  1479.       RETURN
  1480. '
  1481. ' *  NAME OF 'WELCOME' FILE
  1482. '
  1483. 14840 GOSUB 17340
  1484.       WELCOME.FILE$ = HJ$
  1485.       RETURN
  1486. 14845 CALL ASKRO ("Extension for compressed files",24,HJ$)
  1487.       IF LEN(HJ$) > 3 THEN _
  1488.          GOTO 14845
  1489.       CALL ALLCAPS (HJ$)
  1490.       DEFAULT.EXTENSION$ = HJ$
  1491.       RETURN
  1492. '
  1493. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION
  1494. '
  1495. 14850 A$ = "Extension for RBBS directory files (3 char. max)."
  1496.       GOSUB 13593
  1497.       DIRECTORY.EXTENTION$ = HJ$
  1498.       RETURN
  1499. 14855 CALL ASKRO ("Alternate extension for RBBS directory files ",24,HJ$)
  1500.       IF LEN(HJ$) > 3 THEN _
  1501.          GOTO 14855
  1502.       CALL ALLCAPS (HJ$)
  1503.       ALTDIR.EXTENSION$ = HJ$
  1504.       RETURN
  1505. 14857 A$ = "PREFIX of name of directory of directories "
  1506.       MAX = 8
  1507.       GOSUB 13599
  1508.       DIRECTORY.PREFIX$ = HJ$
  1509.       RETURN
  1510. '
  1511. ' *  NAME OF THE SYSOP'S MENU
  1512. '
  1513. 14860 GOSUB 17340
  1514.       MENU$(1) = HJ$
  1515.       RETURN
  1516. '
  1517. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU
  1518. '
  1519. 14870 GOSUB 17340
  1520.       MENU$(2) = HJ$
  1521.       RETURN
  1522. '
  1523. ' *  NAME OF FILE SUBSECTION'S MENU
  1524. '
  1525. 14880 GOSUB 17340
  1526.       MENU$(3) = HJ$
  1527.       RETURN
  1528. '
  1529. ' *  NAME OF UTILITIES SUBSECTION'S MENU
  1530. '
  1531. 14890 GOSUB 17340
  1532.       MENU$(4) = HJ$
  1533.       RETURN
  1534. '
  1535. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE
  1536. '
  1537. 14900 GOSUB 17340
  1538.       CONFERENCE.MENU$ = HJ$
  1539.       RETURN
  1540. '
  1541. ' *  GET ANSWER MENU
  1542. '
  1543. 14905 GOSUB 17340
  1544.       ANS.MENU$ = HJ$
  1545.       RETURN
  1546. '
  1547. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES
  1548. '
  1549. 14910 GOSUB 17340
  1550.       TRASHCAN.FILE$ = HJ$
  1551.       RETURN
  1552. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1553.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1554.       CALL ALLCAPS (UPCAT.HELP$)
  1555.       RETURN
  1556. 14917 CALL ASKRO ("Help for distribution lists is",24,ZDistriHelp$)
  1557.       IF LEN(ZDistriHelp$) > 7 THEN 14917
  1558.       CALL ALLCAPS (ZDistriHelp$)
  1559.       RETURN
  1560. '
  1561. ' *  DRIVE AVAILABLE FOR UPLOADING
  1562. '
  1563. 14920 A$ = "uploading "
  1564.       GOSUB 13253
  1565.       DRIVE.FOR.UPLOADS$ = HJ$
  1566.       IF LEN(UPLOAD.SUBDIR$) > 1 THEN _
  1567.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1568.       RETURN
  1569. '
  1570. ' *  ADDITIONAL COMPRESSED FILE EXTENSIONS
  1571. '
  1572. 14930 LOCATE 25,1
  1573.       PRINT "ex: .ARC.PAK.ZIP 'NONE' to clear, [RETURN] keeps ";COMPRESSED.EXT$;
  1574.       CALL ASKRO ("Other extensions to check for duplicates on upload",24,HJ$)
  1575.       IF HJ$ = "" THEN _
  1576.          RETURN
  1577.       CALL ALLCAPS (HJ$)
  1578.       CALL REMOVE (HJ$," ,></\[]:;|+=")
  1579.       COMPRESSED.EXT$ = HJ$
  1580.       IF COMPRESSED.EXT$ = "NONE" THEN _
  1581.          COMPRESSED.EXT$ = NONE.PICKED$ : _
  1582.          RETURN
  1583.       IF LEFT$(COMPRESSED.EXT$,1) <> "." THEN _
  1584.          COMPRESSED.EXT$ = "."+ COMPRESSED.EXT$
  1585.       IF RIGHT$(COMPRESSED.EXT$,1) = "." THEN _
  1586.          COMPRESSED.EXT$ = LEFT$(COMPRESSED.EXT$, LEN(COMPRESSED.EXT$)-1)
  1587.       RETURN
  1588. 14940 ZMsgSecCats$ = ""
  1589.       WriteMsgSec$ = "   "
  1590.       CALL GETNUMYN ("Allow public messages",AB)
  1591.       IF AB THEN _
  1592.          ZMsgSecCats$ = "U" _
  1593.       ELSE MID$(WriteMsgSec$,1,1) = "/"
  1594.       CALL GETNUMYN ("Allow private messages",AB)
  1595.       IF AB THEN _
  1596.          ZMsgSecCats$ = ZMsgSecCats$ + "R" _
  1597.       ELSE MID$(WriteMsgSec$,2,1) = "/"
  1598.       CALL GETNUMYN ("Allow password protected messages",AB)
  1599.       IF AB THEN _
  1600.          ZMsgSecCats$ = ZMsgSecCats$ + "P" _
  1601.       ELSE MID$(WriteMsgSec$,3,1) = "/"
  1602.       IF ZMsgSecCats$ = "" THEN _
  1603.          GOTO 14940
  1604.       GOSUB 30100
  1605.       RETURN
  1606. '
  1607. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG
  1608. '
  1609. 14970 X$ = OPTION$
  1610. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1611.       CALL ALLCAPS (HJ$)
  1612.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1613.          GOTO 14980
  1614.       L1 = INSTR(HJ$,".")
  1615.       IF L1 = 0 THEN _
  1616.          IF LEN(HJ$) < 9 THEN _
  1617.             GOTO 15045 _
  1618.          ELSE GOTO 14980
  1619.       IF L1 > 9 THEN _
  1620.          GOTO 14980
  1621.       IF L1 < 2 THEN _
  1622.          GOTO 14980
  1623.       IF LEN(HJ$) - L1 > 3 THEN _
  1624.          GOTO 14980
  1625. 15045 I = 0
  1626.       GOSUB 25920
  1627.       IF I = 0 THEN _
  1628.          RETURN
  1629.       GOTO 14980
  1630. '
  1631. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG
  1632. '
  1633. 15170 CALL ASKRO ("Specify drive in the range A->" + _
  1634.                    M$ + _
  1635.                   " for parameter " + _
  1636.                    X$ + _
  1637.                   ". ",24,HJ$)
  1638.       IF LEN(HJ$) <> 1 THEN _
  1639.          GOTO 15170
  1640.       CALL ALLCAPS (HJ$)
  1641.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1642.          GOTO 15170
  1643.       TB$ = HJ$
  1644.       RETURN
  1645. '
  1646. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH
  1647. '
  1648. 15200 X$ = "parameter " + OPTION$
  1649. 15205 CALL ASKRO ("Specify drive/path for " + X$ + ".",24,HJ$)
  1650.       IF LEN(HJ$) < 1 THEN _
  1651.          GOTO 15205
  1652.       CALL ALLCAPS (HJ$)
  1653.       IF LEN(HJ$) = 1 THEN _
  1654.          HJ$ = HJ$ + ":"
  1655.       IF MID$(HJ$,2,1) = ":" THEN _
  1656.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN _
  1657.            GOTO 15205
  1658.       IF LEN(HJ$) > 2 THEN _
  1659.         IF RIGHT$(HJ$,1) <> "\" THEN _
  1660.            HJ$ = HJ$ + "\"
  1661.       STRNG$ = HJ$
  1662.       GOSUB 60470
  1663.       IF NOT IS.OK THEN _
  1664.          GOTO 15205
  1665.       TB$ = HJ$
  1666.       RETURN
  1667. 15230 RETURN
  1668. 15234 CALL ANYNUMBER ("Extend by what fraction of time uploading ",UPLOAD.TIME.FACTOR!)
  1669.       IF UPLOAD.TIME.FACTOR! <= 1.0 THEN _
  1670.          RETURN
  1671.       CLS
  1672.       LOCATE 10,1
  1673.       PRINT "     An upload time credit factor > 1 means that uploaders may get more"
  1674.       PRINT "     time credited than their total session time.   Such a credit normally"
  1675.       PRINT "     survives only for the day on which the upload is made."
  1676.       CALL GETNUMYN ("Make upload time credits survive forever until used",KEEP.TIME.CREDITS)
  1677.       RETURN
  1678. 15240 CALL MMINTEGER ("How many seconds of delay after modem initilization (1 to 99)?",1,99,MODEM.INIT.WAIT.TIME)
  1679.       RETURN
  1680. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (1 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME)
  1681.       RETURN
  1682. 15290 CALL MMINTEGER ("Enter number of active 'bulletins' (0 to 99)",0,99,ACTIVE.BULLETINS)
  1683.       RETURN
  1684. 15310 CALL ANYINTEGER ("Min security to read new PRIVATE messages",PRIVATE.READ.SEC)
  1685.       RETURN
  1686. 15320 CALL ANYINTEGER ("Min security to read new PUBLIC messages",PUBLIC.READ.SEC)
  1687.       RETURN
  1688. 15330 CALL ANYINTEGER ("Min security to change msg read security",SEC.CHANGE.MSG)
  1689.       RETURN
  1690. '
  1691. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE
  1692. '
  1693. 15460 GOSUB 17340
  1694.       MAIN.MESSAGE.FILE$ = HJ$
  1695.       CALL BRKFNAME (HJ$,X1$,X2$,X3$,TRUE)
  1696.       MAIN.MESSAGE.BACKUP$ = X1$ + X2$ + ".BAK"
  1697.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1698.       RETURN
  1699. '
  1700. ' * DETERMINE THE NAME OF THE "CALLERS" FILE
  1701. '
  1702. 15461 GOSUB 15200
  1703.       CALL GETNUMYN ("Do you want a caller's activity to be logged to a file",X)
  1704.       IF NOT X THEN _
  1705.          CALLERS.FILE$ = TB$ : _
  1706.          RETURN
  1707.       GOSUB 14970
  1708.       CALLERS.FILE$ = TB$ + HJ$
  1709.       RETURN
  1710. '
  1711. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE
  1712. '
  1713. 15464 GOSUB 17340
  1714.       COMMENTS.FILE$ = HJ$
  1715.       RETURN
  1716. 15466 GOSUB 17340
  1717.       FAST.FILE.LIST$ = HJ$
  1718.       RETURN
  1719. 15468 GOSUB 17340
  1720.       FAST.FILE.LOCATOR$ = HJ$
  1721.       RETURN
  1722. '
  1723. ' * DETERMINE THE NAME OF THE "USERS" FILE
  1724. '
  1725. 15500 GOSUB 17340
  1726.       MAIN.USER.FILE$ = HJ$
  1727.       MAINUSR$ = MAIN.USER.FILE$
  1728.       RETURN
  1729. 15530 CALL GETCOLOR ("Foreground",FG)
  1730.       CALL ASKRO ("Make foreground [N]ormal, or I)ntense (bright)",24,ANS$)
  1731.       CALL ALLCAPS (ANS$)
  1732.       IF LEFT$(ANS$,1) = "I" THEN _
  1733.          FG = FG + 8
  1734.       RETURN
  1735. 15590 CALL GETCOLOR ("Background",BG)
  1736.       RETURN
  1737. 15650 CALL GETCOLOR ("Border",BORDER)
  1738.       RETURN
  1739.  
  1740. '
  1741. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?
  1742. '
  1743. 15710 CLS
  1744.       GOSUB 15780
  1745.       PRINT "         Currently specified modem commands are:"
  1746.       PRINT
  1747.       PRINT "  Note:  '{' means embed carriage return  '~' means delay 1 sec"
  1748.       PRINT
  1749.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1750.       PRINT ""
  1751.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1752.       PRINT "   Note: Item 2 MUST contain one of the following:"
  1753.       PRINT "            S0=001  (to answer on 0 rings)"
  1754.       PRINT "            S0=254  (to answer on >0 rings, no ring-back)"
  1755.       PRINT "            S0=255  (to answer on >0 rings, with ring-back"
  1756.       PRINT ""
  1757.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1758.       PRINT ""
  1759.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1760.       PRINT ""
  1761.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1762.       PRINT ""
  1763.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1764.       PRINT ""
  1765.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1766.       PRINT ""
  1767.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1768.       CALL GETINIT ("Command to change (1 to 8), CR to end, or 0 to reset to defaults",24,0,8,I,CR)
  1769.       IF CR THEN _
  1770.          CALL GETYESNO("Set modem's firmware now", HJ$) : _
  1771.          IF HJ$ = "YES" THEN _
  1772.             GOSUB 23731 : _
  1773.             RETURN _
  1774.          ELSE RETURN
  1775.       IF I <> 0 THEN _
  1776.          GOTO 15711
  1777.       GOSUB 15790
  1778.       GOTO 15710
  1779. 15711 CALL ASKRO ("Enter modem command for item" + _
  1780.                    STR$(I) + _
  1781.                   " :",24,HJ$)
  1782.       CALL ALLCAPS (HJ$)
  1783.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1784. 15712 USER.RESET.COMMAND$ = HJ$
  1785.       GOTO 15710
  1786. 15714 USER.INIT.COMMAND$ = HJ$
  1787.       GOTO 15710
  1788. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1789.       GOTO 15710
  1790. 15718 USER.ANSWER.COMMAND$ = HJ$
  1791.       GOTO 15710
  1792. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1793.       GOTO 15710
  1794. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1795.       GOTO 15710
  1796. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1797.       GOTO 15710
  1798. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1799.       GOTO 15710
  1800. 15780 RETURN
  1801. 15790 CALL SELMODEM
  1802.       RETURN
  1803. 15800 CALL GETNUMYN ("Remind users of the messages they left?",MESSAGE.REMINDER)
  1804.       RETURN
  1805. 15820 CALL GETNUMYN ("Use machine language routines for speed",TURBO.RBBS)
  1806.       RETURN
  1807. 15825 CALL GETNUMYN ("Not BASIC = use DOS calls (need for local color graphics)",USE.BASIC.WRITES)
  1808.       RETURN
  1809. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1810.       RETURN
  1811. 15835 CALL GETNUMYN ("YES means to stop rather than scroll away previous text",MENUS.CAN.PAUSE)
  1812.       RETURN
  1813. 15840 CALL GETNUMYN ("Are system bulletins to be optional?",BULLETINS.OPTIONAL)
  1814.       RETURN
  1815. 15850 GOSUB 15200
  1816.       MACRO.DRVPATH$ = HJ$
  1817.       RETURN
  1818. 15860 CALL GETNUMYN ("Use macros",AB)
  1819.       IF NOT AB THEN _
  1820.          MACRO.EXTENSION$ = "" : _
  1821.          RETURN
  1822. 15862 A$ = "File extension for macro files (3 chars required)"
  1823.       CALL ASKRO (A$,24,MACRO.EXTENSION$)
  1824.       IF LEN(MACRO.EXTENSION$) <> 3 THEN _
  1825.          GOTO 15862
  1826.       CALL ALLCAPS(MACRO.EXTENSION$)
  1827.       RETURN
  1828. 15880 CALL GETNUMYN ("Is non-ascii protocol required for binary files?",REQUIRE.NON.ASCII)
  1829.       RETURN
  1830. 15920 CALL GETYESNO ("Is " + _
  1831.                       DIRECTORY.EXTENTION$ + _
  1832.                       " omitted from the N)ew command?",OMIT.MAIN.DIRECTORY$)
  1833.       RETURN
  1834. 15991 CALL GETNUMYN ("Do you want EXTENDED logging to the 'callers' file",EXTENDED.LOGGING)
  1835.       RETURN
  1836. 15993 CALL GETNUMYN ("Do you want 'comments' recorded as private messages",COMMENTS.AS.MESSAGES)
  1837.       RETURN
  1838. 16000 CALL GETNUMYN ("Is system 'welcome' interruptable",WELCOME.INTERRUPTABLE)
  1839.       RETURN
  1840. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1841.       RETURN
  1842. 16032 CALL MMINTEGER ("Size of stack space to be set aside",1,32767,SIZE.OF.STACK)
  1843.       RETURN
  1844. 16033 CALL MMINTEGER ("Security level exempt from 'epi-log'",1,32767,SECURITY.EXEMPT.FROM.EPILOG)
  1845.       RETURN
  1846. '
  1847. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON
  1848. '
  1849. 16040 CLS
  1850.       LOCATE 5,5
  1851.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1852.       LOCATE 7,10
  1853.       PRINT "0.   IBM PC/XT/AT/PS2..."
  1854.       LOCATE 9,10
  1855.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1856.       LOCATE 11,10
  1857.       PRINT "2.   IBM PCjr
  1858.       LOCATE 13,10
  1859.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1860. 16050 CALL GETINIT ("Select environment (0 to 3, CR to end)",24,0,3,COMPUTER.TYPE,CR)
  1861.       IF CR THEN _
  1862.          RETURN
  1863. 16062 ON COMPUTER.TYPE+1 GOTO 16063,16064,16065,16066
  1864. 16063 COMPUTER.TYPE$ = "IBM PC/XT/AT/PS2..."
  1865.       RETURN
  1866. 16064 COMPUTER.TYPE$ = "Compaq/Plus"
  1867.       RETURN
  1868. 16065 COMPUTER.TYPE$ = "PCjr"
  1869.       GOTO 16071
  1870. 16066 COMPUTER.TYPE$ = "Other under PC-DOS"
  1871.       RETURN
  1872. 16071 CALL GETNUMYN ("Is an IBM PCjr Internal Modem installed? (YES or NO)",PCJR)
  1873.       IF PCJR THEN _
  1874.          LSB = 760
  1875. 16073 RETURN
  1876. 16121 CALL GETNUMYN ("Wait to issue modem commands between rings?",COMMANDS.BETWEEN.RINGS)
  1877.       RETURN
  1878. 16124 CALL MMREAL ("Enter BPS rate (300,1200,2400,4800,9600,19200,38400) open modem at ",300!,38400!,B1!)
  1879.       IF B1! = 300 OR B1! = 1200 OR B1! = 2400 OR B1! = 4800 OR B1! = 9600 OR _
  1880.          B1! = 19200 OR B1! = 38400 THEN _
  1881.             GOTO 16128 _
  1882.       ELSE GOTO 16124
  1883. 16128 IF FOSSIL OR B1! < 38400 THEN _
  1884.          GOTO 16129
  1885.       CLS
  1886.       LOCATE 5,13
  1887.       PRINT "38400 available only with FOSSIL driver"
  1888.       LOCATE 6,10
  1889.       PRINT "First set communications port and fossil driver"
  1890.       CALL ASKRO ("  INITIAL BPS RATE not changed.  Press [ENTER] to continue",10,ANS$)
  1891.       RETURN
  1892. 16129 MODEM.INIT.BAUD$ = MID$(STR$(B1!),2)
  1893.       RETURN
  1894. '
  1895. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'
  1896. '
  1897. 16130 GOSUB 17340
  1898.       MENU$(5) = HJ$
  1899.       RETURN
  1900. '
  1901. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'
  1902. '
  1903. 16140 GOSUB 17340
  1904.       RCTTY.BAT$ = HJ$
  1905.       RETURN
  1906. '
  1907. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'
  1908. '
  1909. 16150 GOSUB 17340
  1910.       RBBS.BAT$ = HJ$
  1911.       RETURN
  1912. '
  1913. ' * DRIVE/PATH TO LOOK FOR 'COMMAND.COM' ON
  1914. '
  1915. 16160 GOSUB 15200
  1916.       DISK.FOR.DOS$ = HJ$
  1917.       RETURN
  1918. 16170 CALL GETNUMYN ("Redirect I/O via the CTTY command on dropping to DOS?",REDIRECT.IO.METHOD)
  1919. 16175 CALL GETNUMYN ("Redirect I/O via a device named in CONFIG.SYS?",B1)
  1920.       IF B1 THEN _
  1921.          GOTO 16176
  1922.       USE.DEVICE.DRIVER$ = ""
  1923.       RETURN
  1924. 16176 IF LEN (USE.DEVICE.DRIVER$) > 0 THEN _
  1925.          GOTO 16177
  1926.       CALL ASKRO("Enter name of the device to use. ",24,USE.DEVICE.DRIVER$)
  1927.       IF LEN (USE.DEVICE.DRIVER$) > 8 THEN _
  1928.          GOTO 16176
  1929.       IF LEN (USE.DEVICE.DRIVER$) = 0 THEN _
  1930.          RETURN
  1931. 16177 CALL GETNUMYN ("Use the device named " + USE.DEVICE.DRIVER$ + "?",B1)
  1932.       IF B1 THEN _
  1933.          RETURN
  1934.       USE.DEVICE.DRIVER$ = ""
  1935.       GOTO 16176
  1936. 16290 CALL GETNUMYN ("Is the 'door' subsystem available?",DOORS.AVAILABLE)
  1937.       IF NOT DOORS.AVAILABLE THEN _
  1938.          RETURN
  1939.       CALL GETNUMYN ("Will you be running RBBS-PC under MultiLink? ",AB)
  1940.       IF AB THEN _
  1941.          GOTO 16350
  1942. 16340 DELAY! = FNTI! + 15
  1943. '
  1944. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"
  1945. '
  1946.       CLS
  1947.       PRINT "                ******Warning******"
  1948.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1949.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1950.       PRINT "communication port!  Otherwise your system will be vulnerable"
  1951.       PRINT "to being hung -- and worse!!!   Be wary of using doors if"
  1952.       PRINT "don't THROUGHLY understand the doors section in RBBS-PC's"
  1953.       PRINT "documentation and the pitfalls of using 'doors'!"
  1954. 16345 GOSUB 60440
  1955.       CLS
  1956.       PRINT "                ******Warning******"
  1957.       PRINT "Some environments require that you set the modem to answer"
  1958.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1959.       PRINT "using doors because if a user in a door gets disconnected"
  1960.       PRINT "the modem is set to answer on the very next ring and someone who"
  1961.       PRINT "you may not want in the door or in DOS will find themselves"
  1962.       PRINT "able to do you grevious harm, though some environments and"
  1963.       PRINT "modems work fine."
  1964.       PRINT ""
  1965.       CALL GETNUMYN ("Are you sure you want to use doors",SHOOT.YOURSELF)
  1966.       RETURN
  1967. 16350 CLS
  1968. 16360 LOCATE 23,1
  1969.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  1970. 16370 CALL MMINTEGER ("Enter Multi-Link terminal type for DOORS ",0,12,DOORS.TERMINAL.TYPE)
  1971.       RETURN
  1972. 16650 CALL ANYINTEGER ("MAX # of minutes per day (0 = no limit)",MAX.PER.DAY)
  1973.       RETURN
  1974. 16690 CALL GETNUMYN ("Remind users of # uploads and downloads?",REMIND.FILE.TRANSFERS)
  1975.       RETURN
  1976. 16722 CALL GETNUMYN ("Remind users of their preference settings?",REMIND.PROFILE)
  1977.       RETURN
  1978. 16725 CALL GETNUMYN ("Are you using a non-Hayes auto-answer only modem?",DUMB.MODEM)
  1979.       RETURN
  1980. 16730 CALL MMINTEGER ("Default user page length?(a value between 0 and 255)",0,255,PAGE.LENGTH)
  1981.       RETURN
  1982. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  1983.       RETURN
  1984. 16795 CALL MMINTEGER ("Max. # of lines allowed in extended upload description (0-99)",0,99,MAX.EXTENDED.LINES)
  1985.       RETURN
  1986. 17160 CALL ANYINTEGER ("Security level for parameter " + _
  1987.                         HJ$ + _
  1988.                        " is? ",MINIMUM.LOGON.SECURITY)
  1989.       RETURN
  1990. 17170 CALL ANYINTEGER ("Security level for parameter " + _
  1991.                         HJ$ + _
  1992.                        " is? ",DEFAULT.SECURITY.LEVEL)
  1993.       RETURN
  1994. 17180 CALL ANYINTEGER ("Security level for parameter " + _
  1995.                         HJ$ + _
  1996.                        " is? ",SYSOP.SECURITY.LEVEL )
  1997.       RETURN
  1998. '
  1999. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY
  2000. '
  2001. 17190 GOSUB 17340
  2002.       FILESEC.FILE$ = HJ$
  2003.       RETURN
  2004. 17200 CALL ANYINTEGER ("Security level for parameter " + _
  2005.                         HJ$ + _
  2006.                        " is? ",SYSOP.MENU.SECURITY.LEVEL)
  2007.       RETURN
  2008. 17210 CALL ANYINTEGER ("MIN security required to add extended upload description",ASK.EXTENDED.DESC)
  2009.       RETURN
  2010. 17215 CALL ANYINTEGER ("Registration door applies to new users & whose security <=",MAX.REG.SEC)
  2011.       RETURN
  2012. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  2013.       RETURN
  2014. 17230 CALL SECURE ("SYSOP",SYSOP.COMMANDS.DEFAULTS$,NUM.SYSOP,SYSOP.FUNCTION$(),SYSOP.FUNCTION(),SYSOP.COMMANDS$)
  2015.       RETURN
  2016. 17240 CALL SECURE ("Main Menu",MAIN.COMMANDS.DEFAULTS$,NUM.MAIN,MAIN.FUNCTION$(),MAIN.FUNCTION(),MAIN.COMMANDS$)
  2017.       RETURN
  2018. 17250 CALL SECURE ("File Menu",FILE.COMMANDS.DEFAULTS$,NUM.FILES,FILES.FUNCTION$(),FILES.FUNCTION(),FILE.COMMANDS$)
  2019.       RETURN
  2020. 17260 CALL SECURE ("Utilities",UTIL.COMMANDS.DEFAULTS$,NUM.UTILITY,UTILITY.FUNCTION$(),UTILITY.FUNCTION(),UTIL.COMMANDS$)
  2021.       RETURN
  2022. 17264 CALL SECURE ("Global",GLOBAL.COMMANDS.DEFAULTS$,NUM.GLOBAL,GLOBAL.FUNCTION$(),GLOBAL.FUNCTION(),GLOBAL.COMMANDS$)
  2023.       RETURN
  2024. '
  2025. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES
  2026. '
  2027. 17270 GOSUB 17340
  2028.       PASSWORD.FILE$ = HJ$
  2029.       RETURN
  2030. 17280 CALL ASKRO("Name of file shown for security breaches (prefix ONLY)",24,HJ$)
  2031.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  2032.          GOTO 17280
  2033.       IF LEN(HJ$) < 1 THEN _
  2034.          SECVIO.HLP$ = NONE.PICKED$ : _
  2035.          RETURN
  2036.       CALL ALLCAPS (HJ$)
  2037.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  2038.       RETURN
  2039. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2040.       RETURN
  2041. 17295 CALL MMINTEGER ("Max # of minutes can bank (0 to 255) ",0,255, ZMaxBank)
  2042.       RETURN
  2043. 17300 CALL ANYINTEGER ("Security level for parameter " + _
  2044.                         HJ$ + _
  2045.                        " is? ",MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  2046.       RETURN
  2047. 17310 CALL ANYINTEGER ("Security level for overwriting files on upload is? ",OVERWRITE.SECURITY.LEVEL)
  2048.       RETURN
  2049. 17316 CALL ANYINTEGER ("Security level for parameter " + _
  2050.                         HJ$ + _
  2051.                        " is? ",SEC.LVL.EXEMPT.FRM.PURGING)
  2052.       RETURN
  2053. ' * user this routine for drive/path/name if can make parm empty
  2054. 17338 CALL GETNUMYN (X$,X)
  2055.       IF NOT X THEN _
  2056.          HJ$ = "" : _
  2057.          RETURN
  2058. '
  2059. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION
  2060. '
  2061. 17340 GOSUB 15200
  2062.       GOSUB 14970
  2063.       IF IPAGE = 6 AND ILOOKUP = 9 AND HJ$ = "NONE" THEN _
  2064.       IF MID$(HJ$,2,1) <> ":" THEN _
  2065.          BEEP : _
  2066.          GOTO 17340
  2067.       IF HJ$ = "NONE" THEN _
  2068.          RETURN
  2069.       HJ$ = TB$ + HJ$
  2070.       RETURN
  2071. 17500 CALL GETNUMYN ("Show section in command prompt",SHOW.SECTION)
  2072.       RETURN
  2073. 17550 CALL GETNUMYN ("Show commands in command prompt",COMMANDS.IN.PROMPT)
  2074.       RETURN
  2075. 17560 CALL GETNUMYN ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS)
  2076.       RETURN
  2077. 17570 CALL GETNUMYN ("Add new users to USERS file",REMEMBER.NEW.USERS)
  2078.       RETURN
  2079. 17580 CALL GETNUMYN ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM)
  2080.       RETURN
  2081. 17590 CALL GETNUMYN ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS)
  2082.       RETURN
  2083. 17600 CALL GETNUMYN ("Enable download of new files at logon",NEW.FILES.CHECK)
  2084.       RETURN
  2085. 17605 CALL GETNUMYN ("Enable Carbon Copy for messages",ZEnableCC)
  2086.       RETURN
  2087. 17610 CALL GETNUMYN ("Turn printer off after each recycle",TURN.PRINTER.OFF)
  2088.       RETURN
  2089. 17620 CALL GETNUMYN ("Play music themes for RBBS functions",MUSIC)
  2090.       RETURN
  2091. 17630 CALL GETNUMYN ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE)
  2092.       RETURN
  2093. 17635 CALL ANYINTEGER ("Security that lets caller READ & KILL all messages",SEC.KILL.ANY)
  2094.       RETURN
  2095. 17640 CALL ANYINTEGER ("Adopt change in main security for all users with sec <",AUTO.UPGRADE.SEC)
  2096.       RETURN
  2097. 17645 CALL GETNUMYN ("Send multi-file ASCII download as one big file",PERSONAL.CONCAT)
  2098.       RETURN
  2099. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2100.       RETURN
  2101. 17700 CALL GETNUMYN ("Require all callers to answer a questionnaire",AB)
  2102.       IF NOT AB THEN _
  2103.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2104.          RETURN
  2105.       GOSUB 17340
  2106.       GOSUB 17740
  2107.       REQUIRED.QUESTIONNAIRE$ = HJ$
  2108.       RETURN
  2109. 17710 GOSUB 17340
  2110.       PRELOG$ = HJ$
  2111.       RETURN
  2112. 17715 X$ = "Make multiple caller's files viewable"
  2113.       GOSUB 17338
  2114.       ZCallersLst$ = HJ$
  2115.       RETURN
  2116. 17720 CALL GETNUMYN ("Require all NEW users to answer a questionnaire",AB)
  2117.       IF NOT AB THEN _
  2118.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2119.          RETURN
  2120.       GOSUB 17340
  2121.       GOSUB 17740
  2122.       NEW.USER.QUESTIONNAIRE$ = HJ$
  2123.       RETURN
  2124. 17725 GOSUB 17340
  2125.       GOSUB 17740
  2126.       AUTOPAGE.DEF$ = HJ$
  2127.       RETURN
  2128. 17730 GOSUB 17340
  2129.       GOSUB 17740
  2130.       EPILOG$ = HJ$
  2131.       RETURN
  2132. 17740 IF INSTR(HJ$,".") = 0 THEN _
  2133.          HJ$ = HJ$ + ".DEF"
  2134.       RETURN
  2135. 17800 CALL MMINTEGER ("Match personal downloads starting at what column in user record",1,128,PERSONAL.BEGIN)
  2136.       RETURN
  2137. 17805 OK = TRUE
  2138.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2139.          RETURN
  2140.       IF (START.WRITE > 105) OR ((START.WRITE + LEN.WRITE) < 89) THEN _
  2141.          RETURN
  2142.       OK = FALSE
  2143. 17806 CALL ASKRO ("Parameter 47 precludes using this part of USERS record. [ENTER] continues",24,A$)
  2144.       RETURN
  2145. 17810 CALL MMINTEGER ("Match personal downloads using how many chars in user record",1,128,PERSONAL.LEN)
  2146.       RETURN
  2147. 17820 CALL ASKRO ("Protocol for personal downloads [ENTER] for none)",24,PERSONAL.PROTOCOL$)
  2148.       IF LEN(PERSONAL.PROTOCOL$) > 1 THEN _
  2149.          GOTO 17820
  2150.       IF PERSONAL.PROTOCOL$ = "" THEN _
  2151.          PERSONAL.PROTOCOL$ = "N"
  2152.       CALL ALLCAPS (PERSONAL.PROTOCOL$)
  2153.       RETURN
  2154. 17830 CALL ASKRO ("Prompt for first field caller asked (What is your..)",24,FIRST.NAME.PROMPT$)
  2155.       RETURN
  2156. 17840 CALL ASKRO ("Prompt for second field caller asked (What is your..)",24,LAST.NAME.PROMPT$)
  2157.       RETURN
  2158. 17845 CALL ASKRO ("Ask callers for [e.g. CITY/STATE] (What is your...)",24,USER.LOCATION$)
  2159.       RETURN
  2160. 17850 CALL GETNUMYN ("Enforce upload/download ratios",ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  2161.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2162.          RETURN
  2163.       IF START.INDIV > 100 THEN _
  2164.          RETURN
  2165.       IF START.INDIV < 82 AND _
  2166.          START.INDIV + LEN.INDIV < 82 THEN _
  2167.          RETURN
  2168.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  2169.       GOTO 17806
  2170. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2171.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2172. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2173.         BEEP : _
  2174.         GOTO 18000
  2175.       IF START.HASH = 1 THEN _
  2176.          HASH.ID$ = "(NAME)"_
  2177.       ELSE HASH.ID$ = "(nonstandard)"
  2178.       START.WRITE = START.HASH
  2179.       LEN.WRITE = LEN.HASH
  2180.       GOSUB 17805
  2181.       IF NOT OK THEN _
  2182.          START.HASH = 1 : _
  2183.          LEN.HASH = 31 : _
  2184.          GOTO 18002
  2185.       RETURN
  2186. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2187.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2188. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2189.         INDIV.ID$ = NONE.PICKED$ _
  2190.       ELSE INDIV.ID$ = "(nonstandard)"
  2191.       START.WRITE = START.INDIV
  2192.       LEN.WRITE = LEN.INDIV
  2193.       GOSUB 17805
  2194.       IF NOT OK THEN _
  2195.          START.INDIV = 0 : _
  2196.          LEN.INDIV = 31 : _
  2197.          GOTO 18102
  2198.       START.WRITE = START.INDIV
  2199.       RETURN
  2200. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2201.       CALL ALLCAPS (DEFAULT.CATEGORY.CODE$)
  2202.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2203.          DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2204.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2205.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2206.       RETURN
  2207. 18300 GOSUB 15200
  2208.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2209.       DIR.CATEGORY.FILE$ = TB$ + _
  2210.                            DIR.CATEGORY.FILE$
  2211.       RETURN
  2212. 18310 GOSUB 17340
  2213.       MAIN.PUI$ = HJ$
  2214.       CALL BRKFNAME (MAIN.PUI$,X1$,X2$,X3$,TRUE)
  2215.       IF X3$ = "" THEN _
  2216.          MAIN.PUI$ = X1$ + X2$ + ".PUI"
  2217.       RETURN
  2218. 18330 CALL GETNUMYN ("Should DOORS be TIME-LOCKED",TIME.LOCK)
  2219.       CALL GETNUMYN ("Should DOWNLOADS be TIME-LOCKED",Q)
  2220.       TIME.LOCK = -TIME.LOCK + 2 * -Q
  2221.       RETURN
  2222. 18335 CALL ANYINTEGER ("MINIMUM security to do personal upload",ZMinSecPersUpld)
  2223.       RETURN
  2224. 18340 CALL ANYINTEGER ("MINIMUM security for turbo logon",ALLOW.CALLER.TURBO)
  2225.       RETURN
  2226. 18345 CALL ANYINTEGER ("MINIMUM security to add dir entry for pre-existing file",ADD.DIR.SECURITY)
  2227.       RETURN
  2228. 18350 CALL ASKRO ("Copy upload description to upload dir AND to (Drv/path/name)",24,ALWAYS.STREW.TO$)
  2229.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2230.       RETURN
  2231. 18360 CALL ASKRO ("'ALL' lists what dirs ('@<file>' if list,[ENTER]=none)",24,MASTER.DIRECTORY.NAME$)
  2232.       CALL ALLCAPS (MASTER.DIRECTORY.NAME$)
  2233.       RETURN
  2234. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2235.       RETURN
  2236. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2237.       RETURN
  2238. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2239.       RETURN
  2240. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2241.       RETURN
  2242. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2243.       RETURN
  2244. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2245.       RETURN
  2246. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2247.       RETURN
  2248. 18545 IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  2249.          XX$ = "Parameter " + _
  2250.             OPTION$ + _
  2251.             " only valid during CONFERENCE maintenence!" : _
  2252.          GOSUB 50345 : _
  2253.          DELAY! = FNTI! + 5 : _
  2254.          GOSUB 60440 : _
  2255.          RETURN
  2256.       CALL ANYINTEGER ("Minimum security level to 'AUTO ADD' to conference",AUTO.ADD.SECURITY)
  2257.       AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  2258.       GOSUB 30100
  2259.       RETURN
  2260. '
  2261. ' *  GET UPLOAD DIRECTORY DRIVE/PATH
  2262. '
  2263. 18550 GOSUB 15200
  2264.       UPLOAD.PATH$ = HJ$
  2265.       RETURN
  2266. 18600 GOSUB 15200
  2267.       DIRECTORY.PATH$ = HJ$
  2268.       RETURN
  2269. 18620 CALL GETNUMYN ("Get PROTOCOL definitions from an external file",AB)
  2270.       IF AB THEN _
  2271.          GOSUB 17340 : _
  2272.          PROTO.DEF$ = HJ$ _
  2273.       ELSE PROTO.DEF$ = ""
  2274.       RETURN
  2275. 18625 GOSUB 17340
  2276.       DOORS.DEF$ = HJ$
  2277.       RETURN
  2278. 18630 GOSUB 15200
  2279.       PERSONAL.DRVPATH$ = HJ$
  2280.       RETURN
  2281. 18640 CALL GETNUMYN ("Is there an external DOOR to check Callers",AB)
  2282.       IF NOT AB THEN _
  2283.          REGISTRATION.PROGRAM$ = NONE.PICKED$ : _
  2284.          RETURN
  2285.       GOSUB 17340
  2286.       REGISTRATION.PROGRAM$ = HJ$
  2287.       RETURN
  2288. 18700 CALL GETNUMYN ("Set most critical parameters",AB)
  2289.       IF NOT AB THEN _
  2290.          RETURN
  2291.       HJ$ = CHR$(13)
  2292. '
  2293. ' * SET THE MOST CRITICAL PARAMETERS
  2294.  
  2295.  
  2296. ' * 162 = environment
  2297. ' * 161 = max # nodes
  2298.  
  2299.  
  2300. ' *   8 = max sess time
  2301. ' *   9 = max day time
  2302. ' * 221 = comm port
  2303. ' * 224 = ring to answer
  2304. ' * 228 = baud rate
  2305.  
  2306. '
  2307.      KSTACKED$ =   "8" + HJ$ +   "9" + HJ$ + _
  2308.                   "12" + HJ$ +  "29" + HJ$ + _
  2309.                  "121" + HJ$ + "123" + HJ$
  2310.      KSTACKED$ = KSTACKED$ + _
  2311.                  "124" + HJ$ + "161" + HJ$ + _
  2312.                  "162" + HJ$ + "221" + HJ$ + _
  2313.                  "224" + HJ$ + "228" + HJ$
  2314.      IX = 1
  2315.      RETURN
  2316. 18800 CALL GETNUMYN ("Set the Parameters new in " + CONFIG.VERSION$,AB)
  2317.       IF NOT AB THEN _
  2318.          RETURN
  2319.       HJ$ = CHR$(13)
  2320. '
  2321. ' * SET THE PARAMETERS NEW TO THIS RELEASE OF RBBS-PC
  2322. ' *  20 = Seconds to wait for ansi detect
  2323.  
  2324.  
  2325. ' * 159 = Min security to do personal uploads
  2326. ' * 160 = Let msgs have multiple recipients
  2327. ' * 171 = name of distribution list menu
  2328. ' * 172 = drive/path where distribution lists stored
  2329. ' * 173 = types of msg protection allowed
  2330. ' * 292 = max # of minutes can bank
  2331. '
  2332.       KSTACKED$ = "20" + HJ$ + "96" + HJ$ + _
  2333.                   "97" + HJ$ + "159" + HJ$
  2334.       KSTACKED$ = KSTACKED$ + _
  2335.                   "160" + HJ$ + "171" + HJ$ + _
  2336.                   "172" + HJ$ + "173" + HJ$
  2337.       KSTACKED$ = KSTACKED$ + _
  2338.                   "292" + HJ$
  2339.       IPAGE = 1
  2340.       RETURN
  2341. '
  2342. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE
  2343. '
  2344. 19189 IF CONFERENCE.MODE = 2 THEN _
  2345.          GOSUB 22560 : _
  2346.          RETURN
  2347.       GOSUB 22100
  2348.       RETURN
  2349. '
  2350. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR
  2351. '
  2352. 20000 LOCATE 18,1
  2353.       PRINT "NOTE:  PC-SIG believes that it is illegal to charge users for"
  2354.       PRINT "       downloading from the PC-SIG Library on a per download"
  2355.       PRINT "       basis.  Subscription fees of a reasonable nature are"
  2356.       PRINT "       acceptable."
  2357.       A$ = "Specify Library disk in the range A->" + M$ + "(or NONE) "
  2358.       MAX = 4
  2359.       GOSUB 13599
  2360.       LIBRARY.DRIVE$ = HJ$
  2361.       IF LEN(HJ$) > 1 AND HJ$ <> "NONE" THEN _
  2362.          GOTO 20000
  2363.       IF LIBRARY.DRIVE$ = "NONE" THEN _
  2364.          LIBRARY.DRIVE$ = "" _
  2365.       ELSE LIBRARY.DRIVE$ = LIBRARY.DRIVE$ + ":"
  2366.       RETURN
  2367. '
  2368. ' * LIBRARY DIRECTORY/PATH
  2369. '
  2370. 20010 GOSUB 15200
  2371.       LIBRARY.DIRECTORY.PATH$ = HJ$
  2372.       RETURN
  2373. '
  2374. ' *  NAME OF 'LIBRARY DIRECTORY' FILE'S EXTENSION
  2375. '
  2376. 20020 A$ = "Name of Library directory extension "
  2377.       GOSUB 13593
  2378.       LIBRARY.DIRECTORY.EXTENTION$ = HJ$
  2379.       RETURN
  2380. '
  2381. ' * LIBRARY WORKING DISK
  2382. '
  2383. 20030 GOSUB 15200
  2384.       LIBRARY.WORK.DISK.PATH$ = HJ$
  2385.       RETURN
  2386. 20040 CALL MMINTEGER ("Max number of disks on Library (1-9999)",1,9999,LIBRARY.MAX.DISK)
  2387.       RETURN
  2388. 20050 CALL MMINTEGER ("Max number of directories on Library (1-999)",1,999,LIBRARY.MAX.DIRECTORY)
  2389.       RETURN
  2390. 20060 CALL MMINTEGER ("Number of subdirectories for each master (1-999)",1,999,LIBRARY.MAX.SUBDIR)
  2391.       RETURN
  2392. '
  2393. ' * PREFIX OF LIBRARY SUBDIRECTORY
  2394. '
  2395. 20070 A$ = "Prefix name of Library subdirectories in each master "
  2396.       MAX = 4
  2397.       GOSUB 13599
  2398.       LIBRARY.SUBDIR.PREFIX$ = HJ$
  2399.       RETURN
  2400. '
  2401. ' *  NAME OF FILE SUBSECTION'S MENU
  2402. '
  2403. 20080 GOSUB 17340
  2404.       MENU$(6) = HJ$
  2405.       RETURN
  2406. '
  2407. ' *  ASSIGN SECURITY LEVELS TO THE LIBRARY MENU'S COMMANDS
  2408. '
  2409. 20090 CALL SECURE ("LIBRARY",LIBRARY.COMMANDS.DEFAULTS$,NUM.LIBRARY,LIBRARY.FUNCTION$(),LIBRARY.FUNCTION(),LIBRARY.COMMANDS$)
  2410.       RETURN
  2411. '
  2412. ' * DRIVE/PATH FOR ARCHIVE UTILITY
  2413. '
  2414. 20100 GOSUB 15200
  2415.       LIBRARY.ARCHIVE.PATH$ = HJ$
  2416.       RETURN
  2417. '
  2418. ' * PROCESS NAME OF ARCHIVE UTILITY
  2419. '
  2420. 20110 CALL ASKRO ("Name of Archive utility ",24,HJ$)
  2421.       CALL ALLCAPS (HJ$)
  2422.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2423.          GOTO 20110
  2424.       LIBRARY.ARCHIVE.PROGRAM$ = HJ$
  2425.       CALL ASKRO ("Archive command ",24,HJ$)
  2426.       CALL ALLCAPS (HJ$)
  2427.       IF LEN(HJ$) > 8 THEN _
  2428.          GOTO 20110
  2429.       LIBRARY.ARCHIVE.PROGRAM$ = LIBRARY.ARCHIVE.PROGRAM$ + _
  2430.                                  " " + _
  2431.                                  HJ$
  2432.       RETURN
  2433. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2434.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2435.          RETURN
  2436.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2437.       GOSUB 30610
  2438.       RETURN
  2439. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (32-4096)",32,4096,BUFFER.SIZE)
  2440.       RETURN
  2441. 21770 CALL MMINTEGER ("Size of internal BUFFER for Uploads (128-8192)",128,8192,WRITE.BUF.DEF)
  2442.       RETURN
  2443. 21780 CALL MMINTEGER ("Max # of work variables in questionnaire/macros (13-99)",13,99,MAX.WORK.VAR)
  2444.       RETURN
  2445. 21785 CALL MMINTEGER ("Max # of seconds to show RBBS copyright notice (0-8)",0,8,ZCopyrightSecs)
  2446.       IF ZCopyrightSecs < 2 THEN _
  2447.          CALL GETNUMYN ("Do you understand and agree to all the copyright conditions",X) : _
  2448.          IF NOT X THEN _
  2449.             ZCopyrightSecs = 8
  2450.       RETURN
  2451. '
  2452. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN
  2453. '
  2454. 21810 SUBROUTINE.PARAMETER = 1
  2455. 21820 CALL NETTYPE
  2456.       RETURN
  2457. 21895 SUBROUTINE.PARAMETER = 2
  2458.       GOTO 21820
  2459. '
  2460. ' * IDENTIFY THE VOICE SYNTHESIZER TYPES THAT RBBS-PC CAN SUPPORT
  2461. '
  2462. 21900 SUBROUTINE.PARAMETER = 1
  2463. 21903 CALL VOICETYPE
  2464.       RETURN
  2465. 21905 SUBROUTINE.PARAMETER = 2
  2466.       GOTO 21903
  2467. '
  2468. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE
  2469. '
  2470. 21910 IF CONFERENCE.MODE = 2 THEN _
  2471.          GOSUB 22560 : _
  2472.          RETURN
  2473.       GOSUB 22100
  2474.       RETURN
  2475. '
  2476. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF
  2477. '
  2478. 21950 CALL ASKRO ("How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? ",24,HJ$)
  2479.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2480.          GOTO 21950
  2481.       CALL ALLCAPS (HJ$)
  2482.       IF LEFT$(HJ$,1) = "S" THEN _
  2483.          HJ$ = "SYSTEM" : _
  2484.          RECYCLE.TO.DOS = 1 : _
  2485.          GOTO 22020
  2486.       IF LEFT$(HJ$,1) = "I" THEN _
  2487.          HJ$ = "INTERNAL" : _
  2488.          RECYCLE.TO.DOS = 0 : _
  2489.          GOTO 22020
  2490.       GOTO 21950
  2491. 22020 RECYCLE.TO.DOS$ = HJ$
  2492.       RETURN
  2493. 22030 IF NETWORK.TYPE = 2 THEN _
  2494.          CALL ASKRO ("OMNI-NET cannot let message file grow.  Press [Enter] to continue",24,HJ$) : _
  2495.          RETURN
  2496.       CALL GETNUMYN ("Message file GROWS rather than FIXED in size",MESSAGES.CAN.GROW)
  2497.       RETURN
  2498. '
  2499. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE
  2500. '
  2501. 22040 CALL ANYNUMBER ("Max. records in preformatted " + _
  2502.                        MAIN.MESSAGE.FILE$ + _
  2503.                       " file (>" + _
  2504.                        STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):",B3!)
  2505.       IF B3! <= (5 * MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2506.          B3! > 9999999! THEN _
  2507.          GOTO 22040
  2508. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2509.       GOSUB 30610
  2510.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2511.       RETURN
  2512. '
  2513. ' * BUILD THE USERS FILE TO SUIT
  2514. '
  2515. 22100 FF = CURRENT.USER.COUNT
  2516.       IF FF > 1 THEN _
  2517.          FF = FF - 1
  2518.       CALL ANYINTEGER (STR$(FF) + _
  2519.                        " of" + _
  2520.                        STR$(HIGHEST.USER.RECORD) + _
  2521.                        " records used. Enter new max # of records for " + _
  2522.                        MAIN.USER.FILE$ + _
  2523.                        ":",B1)
  2524. 22120 IF B1 < 1 OR B1 > 99999! OR _
  2525.          B1 < FF THEN _
  2526.          GOTO 22100
  2527. 22140 B2 = 2
  2528.       WHILE B2 < B1
  2529.         B2 = B2 * 2
  2530.       WEND
  2531.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2532.          RETURN
  2533.       CALL GETNUMYN ("Change " + _
  2534.                       MAIN.USER.FILE$ + _
  2535.                      " file to" + _
  2536.                       STR$(B2) + _
  2537.                      " records?",AB)
  2538.       IF NOT AB THEN _
  2539.          GOTO 22100
  2540. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2541.       D.FLAG = -1
  2542.       GOSUB 24110
  2543.       IB = 1
  2544.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2545.       HIGHEST.USER.RECORD = B2
  2546.       GOSUB 30450
  2547.       RETURN
  2548. '
  2549. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA
  2550. '
  2551. 22340 LOCATE 22,1
  2552.       PRINT SPACE$(15) + _
  2553.             TIME$ + _
  2554.             " " + _
  2555.             SPACE$(64);
  2556.       LOCATE 22,35
  2557.       COLOR 0,7
  2558.       PRINT " Reading Data, Wait a sec !!! ";
  2559.       COLOR FG,BG,BORDER
  2560. 22342 RETURN
  2561. '
  2562. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT
  2563. '
  2564. 22350 CALL ASKRO ("Save changes?  Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$)
  2565.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2566.          GOTO 22350
  2567.       CALL ALLCAPS (HJ$)
  2568.       AB = INSTR("NYQ",LEFT$(HJ$,1))
  2569.       ON AB GOTO 12190,59000,60360
  2570.       GOTO 22350
  2571. '
  2572. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH
  2573. '
  2574. 22480 CALL MMINTEGER ("To which copy of RBBS-PC will these parameters apply (1 to 36)?",1,36,I)
  2575.       HJ$ = MID$(STR$(I),2)
  2576.       NODE.ID$ = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2577.       MID$(CONFIG.FILENAME$,5,1) = NODE.ID$
  2578.       RETURN
  2579. 22550 CALL ASKRO ("Parameter " + _
  2580.                    OPTION$ + _
  2581.                   " unavailable with CONFIG " + _
  2582.                    CONFIG.VERSION$ + _
  2583.                   "!  CR to continue",24,A$)
  2584.       RETURN
  2585. 22560 CALL ASKRO ("Parameter " + _
  2586.                    OPTION$ + _
  2587.                   " unavailable maintaining public conference! CR to continue",24,XX$)
  2588.       RETURN
  2589. '
  2590. ' * REBUILD THE USER FILE
  2591. '
  2592. 22570 A$ = "Rebuild the User File"
  2593.       GOSUB 22580
  2594.       IF CONFERENCE.MODE = 2 THEN _
  2595.          GOSUB 22560 : _
  2596.          RETURN
  2597.       CALL GETNUMYN ("Would you like a printed list of deleted users", _
  2598.                      PRINT.DELETED)
  2599.       D.FLAG = 0
  2600.       GOSUB 24110
  2601.       RETURN
  2602. '
  2603. ' * GENERAL CONFIRMATION OF RESPONSES
  2604. '
  2605. 22580 CALL GETNUMYN ("Really "+A$,AB)
  2606.       PRINT
  2607.       IF NOT AB THEN _
  2608.          RETURN 22582
  2609. 22582 RETURN
  2610. '
  2611. ' * PACK THE MESSAGES FILE
  2612. '
  2613. 23160 A$ = "Pack the Message File"
  2614.       GOSUB 22580
  2615.       B1 = MAXIMUM.NUMBER.OF.NODES
  2616.       B3! = HIGHEST.MESSAGE.RECORD
  2617.       PURGE = -1
  2618.       GOSUB 30610
  2619.       RETURN
  2620. '
  2621. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE
  2622. '
  2623. 23610 I = I + NUM.RECS - 1
  2624.       RETURN
  2625. '
  2626. ' * REPAIR THE MESSAGES FILE
  2627. '
  2628. 23620 RB = 1
  2629.       A$ = "Repair Message File"
  2630.       GOSUB 22580
  2631. '
  2632. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE
  2633. '
  2634. 23630 SK = 0
  2635.       GOSUB 30040              ' <----Print message headers
  2636.       FILNUM = 1
  2637.       GOSUB 30050
  2638.       FIELD 1,128 AS MESSAGE.RECORD$
  2639.       IS.HEADER$ = CHR$(225) + CHR$(226)                             ' DA08271
  2640.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2641.          GET 1,I
  2642.          IF INSTR(IS.HEADER$,MID$(MESSAGE.RECORD$,116,1)) = 0 THEN _
  2643.             GOTO 23725
  2644.          IF VAL(MID$(MESSAGE.RECORD$,117,4)) > 0 AND _
  2645.             SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2646.             SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2647.             I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) - 1 _
  2648.          ELSE GOTO 23725
  2649.          I$ = "K"
  2650.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2651.             I$ = "A"
  2652.          IF LOC(1) > NEXT.MESSAGE.RECORD - 1 THEN _
  2653.             GOTO 23730
  2654.          PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2655.                MID$(MESSAGE.RECORD$,76,25) + " " + _
  2656.                MID$(MESSAGE.RECORD$,101,15) + " " + _
  2657.                I$ + " " + _
  2658.                MID$(MESSAGE.RECORD$,117,4) + " " + _
  2659.                STR$(LOC(1)) + " "  + _
  2660.                STR$(I)
  2661.          SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2662.          IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2663.             GOTO 23730
  2664.          IF RB THEN _
  2665.             GOSUB 50580
  2666. 23725 NEXT
  2667. 23730 GET 1,1
  2668.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  2669.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  2670.       HJ$ = RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  2671.       MID$(MESSAGE.RECORD$,127,2) = HJ$
  2672.       PUT 1,1
  2673.       CLOSE 1
  2674.       DELAY! = FNTI! + 5
  2675.       GOSUB 60440
  2676.       RETURN
  2677. '
  2678. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE
  2679. '
  2680. 23731 LOCATE 25,5
  2681.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2682.       IF COMPORT% < 0 THEN _
  2683.          PRINT "COM port cannot be set while using COM0" : _
  2684.          DELAY! = FNTI! + 3 : _
  2685.          GOSUB 60440 : _
  2686.          RETURN
  2687.       FOS.BUF$ = SPACE$(80)
  2688.       CLS
  2689.       PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$
  2690.       IF NOT FOSSIL THEN _
  2691.          GOTO 23732
  2692.       CALL FOSINIT(COMPORT%,RESULT%)
  2693.       IF RESULT% = -1 THEN _
  2694.          PRINT "ERROR initializing FOSSIL.  Firmware reset aborted." : _
  2695.          GOTO 23736
  2696.       IF MODEM.INIT.BAUD$ = "38400" THEN _
  2697.          FOSSIL.BAUD% = &H9600 _
  2698.       ELSE FOSSIL.BAUD% = VAL(MODEM.INIT.BAUD$)
  2699.       CALL FOSSPEED(COMPORT%,FOSSIL.BAUD%, 2, 3, 1)
  2700.       STATE% = 1
  2701.       CALL FOSDTR(COMPORT%,STATE%)
  2702.       GOTO 23733
  2703. 23732 OUT MODEM.CONTROL.REGISTER,&H0
  2704.       OUT LINE.CONTROL.REGISTER - 1,&H6
  2705.       OPEN COM.PORT$ + ":" + MODEM.INIT.BAUD$ + ",N,8,1,CD,DS" AS #3
  2706. 23733 A$ = USER.FIRMWARE.CLEAR.CMND$ ' Clear to factory defaults
  2707.       GOSUB 23736
  2708.       A$ = USER.INITIALIZE.COMMAND$  ' set up RBBS-PC config
  2709.       GOSUB 23736
  2710.       A$ = USER.FIRMWARE.WRITE.CMND$ ' Write changes to NVRam
  2711.       GOSUB 23736
  2712.       IF FOSSIL THEN _
  2713.          STATE% = 0 : _
  2714.          CALL FOSDTR(COMPORT%,STATE%) : _
  2715.          CALL FOSEXIT(COMPORT%) : _
  2716.       ELSE CLOSE #3
  2717.       PRINT "Press a key to continue"
  2718.       WHILE INKEY$ = "" : WEND
  2719.       RETURN
  2720. '
  2721. ' * ROUTINE TO SEND/RECEIVE DATA FROM MODEM
  2722. '
  2723. 23736 PRINT "Send:"
  2724.       WHILE INSTR(A$, "{")
  2725.          MID$(A$, INSTR(A$,"{"), 1) = CHR$(13)
  2726.       WEND
  2727.       WHILE INSTR(A$, "~")
  2728.          WAIT.FOUND = INSTR(A$,"~")
  2729.          TEMP.A$ = MID$(A$, WAIT.FOUND + 1)
  2730.          A$ = LEFT$(A$, WAIT.FOUND - 1)
  2731.          GOSUB 23739
  2732.          DELAY! = FNTI! + 1
  2733.          GOSUB 60440
  2734.          A$ = TEMP.A$
  2735.       WEND
  2736.       A$ = A$ + CHR$(13)
  2737.       GOSUB 23739
  2738.       DELAY! = FNTI! + 3
  2739.       GOSUB 60440
  2740.       PRINT "Receive:"
  2741.       IF NOT FOSSIL THEN _
  2742.          GOTO 23738
  2743.       FOS.LEN% = 80
  2744.       CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$)
  2745.       PRINT LEFT$(FOS.BUF$,FOS.LEN%)
  2746.       RETURN
  2747. 23738 WHILE LOC(3) > 1
  2748.          INPUT #3, A$
  2749.          PRINT A$
  2750.       WEND
  2751.       RETURN
  2752. 23739 PRINT A$;
  2753.       IF NOT FOSSIL THEN_
  2754.          PRINT #3, A$; _
  2755.       ELSE _
  2756.          CALL FOSWRITE(COMPORT%,LEN(A$),A$)
  2757.       RETURN
  2758. '
  2759. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2760. '
  2761. 23740 A$ = "Renumber the Message File"
  2762.       GOSUB 22580
  2763.       GOSUB 30040
  2764. 23750 REDIM MSG.XREF(MAXIMUM.NUMBER.OF.MSGS,2)
  2765.       MSG.XREF.INDX = 0
  2766.       B1 = CALLS.TODATE!
  2767.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  2768.                      STR$(CALLS.TODATE! + 1) + _
  2769.                     ")",24,1,B1,RE,CR)
  2770.       IF CR THEN _
  2771.          RETURN
  2772. 23810 CALL GETINIT ("Renumber starting with NEW message # ",24,1,9999,NE,CR)
  2773.       IF CR THEN _
  2774.          RETURN
  2775.       NE = NE - 1
  2776.       FILNUM = 1
  2777.       GOSUB 30050
  2778.       FIELD 1,128 AS MESSAGE.RECORD$
  2779.       IS.HEADER$ = CHR$(225) + CHR$(226)
  2780.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2781.          GET 1,I
  2782.          NUM.RECS = VAL(MID$(MESSAGE.RECORD$,117,4))
  2783.          IF NUM.RECS < 2 THEN NUM.RECS = 2
  2784.          X = ASC(MID$(MESSAGE.RECORD$,116))
  2785.          IF X = 225 OR X = 226 THEN _
  2786.             GOSUB 24010 : _
  2787.             GOSUB 23610
  2788.       NEXT
  2789.       GET 1,1
  2790.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  2791.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  2792.       PUT 1,1
  2793.       CLOSE 1
  2794.       GOSUB 23905
  2795.       DELAY! = FNTI! + 1
  2796.       GOSUB 60440
  2797.       RETURN
  2798. '
  2799. ' *  RESET LAST MESSAGE READ TO ZERO
  2800. '
  2801. 23900 A$ = "Reset last message read for all users"
  2802.       GOSUB 22580
  2803. 23905 GOSUB 24020
  2804.       GOSUB 24025
  2805.       A! = HIGHEST.USER.RECORD
  2806.       XX$ = "Resetting Last Msg Read by User.  Processing Record #"
  2807.       GOSUB 50345
  2808.       FOR J = 1 TO A!
  2809.          GET 1,J
  2810.          LOCATE 24,X
  2811.          PRINT J;
  2812.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2813.          LSET COMP.USER$ = HASH.VALUE$
  2814.          IF ASC(HASH.VALUE$) = 0 OR _
  2815.             COMP.USER$ = NEW.USER$ OR _
  2816.             COMP.USER$ = EMPTY.USER$ THEN _
  2817.               GOTO 23955
  2818.          FORMER.LAST.MSG = CVI(MID$(USER.OPTIONS$,3,2))
  2819.          MSG.XREF.INDX = 1
  2820. 23906    IF MSG.XREF.INDX > MAXIMUM.NUMBER.OF.MSGS THEN _
  2821.             GOTO 23907
  2822.             IF FORMER.LAST.MSG = MSG.XREF(MSG.XREF.INDX,1) THEN _
  2823.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX,2) : _
  2824.                GOTO 23907
  2825.             IF FORMER.LAST.MSG < MSG.XREF(MSG.XREF.INDX,1) THEN _
  2826.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX - 1,2) : _
  2827.                GOTO 23907
  2828.             MSG.XREF.INDX = MSG.XREF.INDX + 1
  2829.          GOTO 23906
  2830. 23907    IF FORMER.LAST.MSG = 0 THEN NEW.LAST.MSG = 0
  2831.          MID$(USER.OPTIONS$,3,2) = MKI$(NEW.LAST.MSG)
  2832.          PUT 1,J
  2833. 23955 NEXT
  2834.       CLOSE 1
  2835.       RETURN
  2836. 24010 LOCATE 24,15
  2837.       PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
  2838.       CURRENT.MSG.NUMBER = VAL(MID$(MESSAGE.RECORD$,2,4))
  2839.       IF CURRENT.MSG.NUMBER < RE THEN _
  2840.          PRINT " read"; : _
  2841.          MSG.XREF.INDX = MSG.XREF.INDX + 1 : _
  2842.          MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER : _
  2843.          MSG.XREF(MSG.XREF.INDX, 2) = CURRENT.MSG.NUMBER : _
  2844.          RETURN
  2845.       J = I
  2846.       MSG.NUM$ = MID$(MESSAGE.RECORD$,1,5)
  2847.       NUM.HEADERS = ASC(MID$(MESSAGE.RECORD$,67,1))
  2848.       NE = NE + 1
  2849.       MSG.XREF.INDX = MSG.XREF.INDX + 1
  2850.       MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER
  2851.       MSG.XREF(MSG.XREF.INDX, 2) = NE
  2852.       PRINT " renumbered as Msg #" ; STR$(NE)
  2853. 24012 Y$ = MID$(MESSAGE.RECORD$,1,1)
  2854.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  2855.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  2856.       MID$(MESSAGE.RECORD$,1,1) = Y$
  2857.       PUT 1,J
  2858.       IF NUM.HEADERS < 2 THEN _
  2859.          RETURN
  2860.       J = J + 1
  2861.       GET 1,J
  2862.       IF MID$(MESSAGE.RECORD$,1,5) <> MSG.NUM$ OR MID$(MESSAGE.RECORD$,70,1) <> "-" OR _
  2863.          MID$(MESSAGE.RECORD$,73,1) <> "-" OR INSTR(IS.HEADER$,MID$(MESSAGE.RECORD$,116,1)) = 0 THEN _
  2864.             RETURN
  2865.       NUM.HEADERS = NUM.HEADERS - 1
  2866.       GOTO 24012
  2867. '
  2868. ' * ROUTINE TO PACK THE USERS FILE
  2869. '
  2870. 24020 GOSUB 30060
  2871.       FIELD 1,  31 AS USER.NAME$, _
  2872.                 15 AS PASSWORD$, _
  2873.                  2 AS SECURITY.LEVEL$, _
  2874.                 14 AS USER.OPTIONS$, _
  2875.                 24 AS CITY.STATE$, _
  2876.                 19 AS MACHINE.TYPE$, _
  2877.                 14 AS LAST.DATE.TIME.ON$, _
  2878.                  3 AS LIST.NEW.DATE$, _
  2879.                  2 AS USER.DOWNLOADS$, _
  2880.                  2 AS USER.UPLOADS$, _
  2881.                  2 AS ELASPED.TIME$
  2882.       FIELD 1, 128 AS USER.RECORD$
  2883.       RETURN
  2884. '
  2885. ' *  SHARED ROUTINE TO SET UP USER PROCESSING
  2886. '
  2887. 24025 IF LEN.HASH < 7 THEN _
  2888.          NU = LEN.HASH _
  2889.       ELSE NU = 7
  2890.       NEW.USER$ = LEFT$("NEWUSER",NU)
  2891.       EMPTY.USER$ = SPACE$(NU)
  2892.       COMP.USER$ = EMPTY.USER$
  2893.       RETURN
  2894. 24040 CALL GETNUMYN ("Make Hilight if and only if color graphics selected",X)
  2895.       IF NOT X THEN _
  2896.          RETURN
  2897.       GOTO 24052
  2898. '
  2899. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT
  2900. '
  2901. 24050 A$ = "Make all callers answer required questionnaire once"
  2902.       GOSUB 22580
  2903. 24052 GOSUB 24020
  2904.       GOSUB 24025
  2905.       A! = HIGHEST.USER.RECORD
  2906.       XX$ = "Processing Record #"
  2907.       GOSUB 50345
  2908.       FOR J = 1 TO A!
  2909.          GET 1,J
  2910.          LOCATE 24,X
  2911.          PRINT J;
  2912.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2913.          LSET COMP.USER$ = HASH.VALUE$
  2914.          IF ASC(HASH.VALUE$) = 0 OR _
  2915.             COMP.USER$ = NEW.USER$ OR _
  2916.             COMP.USER$ = EMPTY.USER$ THEN _
  2917.               GOTO 24055
  2918.          USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  2919.          IF ILOOKUP = 12 THEN _
  2920.             K = ((ASC(MID$(USER.OPTIONS$,6,1)) MOD 3) = 2) : _
  2921.             IF K THEN _
  2922.                USER.OPTIONS = USER.OPTIONS OR 1024 _ ' hilite
  2923.             ELSE USER.OPTIONS = USER.OPTIONS AND 1023 _ ' don't hilite
  2924.          ELSE USER.OPTIONS = USER.OPTIONS AND 1791 'Zero out Req Ques flag
  2925.          MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  2926.          PUT 1,J
  2927. 24055 NEXT
  2928.       CLOSE 1
  2929.       RETURN
  2930. '
  2931. ' COMMON ROUTINE TO EXPAND OR CONTRACT THE USER FILE
  2932. '
  2933. 24110 GOSUB 30040
  2934.       IF NO.OLD.FILE THEN _
  2935.          GOTO 24111
  2936.       GOSUB 24020
  2937.       GOSUB 50350
  2938.       A$ = F$
  2939.       GOSUB 50095
  2940. 24111 IF NETWORK.TYPE = 6 THEN _
  2941.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  2942.       ELSE OPEN "R",2,A$,128
  2943.       FIELD 2,  31 AS USER.NAME.N$, _
  2944.                 15 AS PASSWORD.N$, _
  2945.                  2 AS SECURITY.LEVEL.N$, _
  2946.                 14 AS USER.OPTIONS.N$, _
  2947.                 24 AS CITY.STATE.N$, _
  2948.                 19 AS MACHINE.TYPE.N$, _
  2949.                 14 AS LAST.DATE.TIME.ON.N$, _
  2950.                  3 AS LIST.NEW.DATE.N$, _
  2951.                  2 AS USER.DOWN.LOADS.N$, _
  2952.                  2 AS USER.UPLOADS.N$, _
  2953.                  2 AS ELAPSED.TIME.N$
  2954.       FIELD 2, 128 AS USER.RECORD.N$
  2955.       CURRENT.MONTH = VAL(LEFT$(DATE$,2)) + (VAL(RIGHT$(DATE$,2)) * 12)
  2956.       A! = 0
  2957.       GOSUB 50840
  2958.       CURRENT.USER.COUNT = 1
  2959.       IF NO.OLD.FILE THEN _
  2960.          HIGHEST.USER.RECORD = A! : _
  2961.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  2962.          GOSUB 30450 : _
  2963.          RETURN
  2964.       A! = LOF(1) / 128.0!
  2965.       GOSUB 24025
  2966.       PURGED.COUNT = 0
  2967. 24112 FOR J  =  1 TO A!
  2968.          GET 1
  2969. 24114    HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2970.          LSET COMP.USER$ = HASH.VALUE$
  2971. 24116    MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2)) + _
  2972.                                (VAL(MID$(LAST.DATE.TIME.ON$,7,2)) * 12)
  2973.          MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH - MONTH.OF.LAST.LOGON
  2974.          IF COMP.USER$ = NEW.USER$ THEN _
  2975.             A$ = "" : _
  2976.             GOTO 24430
  2977.          X = ASC(HASH.VALUE$)
  2978.          IF X = 0 OR _
  2979.             COMP.USER$ = EMPTY.USER$ THEN _
  2980.             GOTO 24450
  2981.          Y = 1
  2982. 24280    IF X < 32 OR X > 126 THEN _
  2983.             A$ = "Bad name" : _
  2984.             GOTO 24430
  2985.          IF Y < LEN.HASH THEN _
  2986.             Y = Y + 1 : _
  2987.             X = ASC(MID$(HASH.VALUE$,Y,1)) : _
  2988.             GOTO 24280
  2989.          HJ$ = HASH.VALUE$
  2990.          CALL ALLCAPS (HJ$)
  2991.          IF HJ$ <> HASH.VALUE$ THEN _
  2992.             A$ = "Bad name" : _
  2993.             GOTO 24430
  2994.          HJ$ = "copied"
  2995.          IF D.FLAG THEN _
  2996.             GOTO 24290
  2997.          SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  2998.          IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  2999.             HJ$ = "exempt" : _
  3000.             GOTO 24290                           ' copy users exempt from purges
  3001.          IF SECURITY.LEVEL < MINIMUM.LOGON.SECURITY THEN _
  3002.             HJ$ = "locked" : _
  3003.             GOTO 24290                                 ' copy "locked-out" users
  3004.          IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  3005.             IF MONTHS.SINCE.LAST.LOGON < 60 THEN _
  3006.                A$ = "(Last on " + LAST.DATE.TIME.ON$ + ") " + _
  3007.                     STR$(MONTHS.SINCE.LAST.LOGON) : _
  3008.                GOTO 24430                              'Purge inactive users
  3009.          Y = 1
  3010. 24290    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " " ; HJ$ ; "...";
  3011.          GOSUB 50720
  3012.          PRINT STR$(MONTHS.SINCE.LAST.LOGON)
  3013.          GOTO 24450
  3014. 24430    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  3015.          IF PRINT.DELETED THEN _
  3016.             LPRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  3017.          PURGED.COUNT = PURGED.COUNT + 1
  3018. 24450 NEXT
  3019.       CLOSE 1,2
  3020.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  3021.       GOSUB 30450
  3022. 24730 PRINT PURGED.COUNT;" USERS PURGED"
  3023.       CALL GETNUMYN ("Delete the old " + _
  3024.                       MAIN.USER.FILE$ + _
  3025.                      " file?",AB)
  3026.       IF AB THEN _
  3027.          GOTO 24770
  3028. 24750 A$ = MAIN.USER.FILE$
  3029.       GOSUB 50096
  3030.       NAME MAIN.USER.FILE$ AS A$
  3031.       GOTO 24780
  3032. 24770 KILL MAIN.USER.FILE$
  3033. 24780 GOSUB 50350
  3034.       A$ = F$
  3035.       GOSUB 50095
  3036.       NAME A$ AS MAIN.USER.FILE$
  3037.       RETURN
  3038. 24790 CALL CHKFMSDIR (DIRECTORY.PATH$ + FMS.DIRECTORY$ + "." + DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  3039.       RETURN
  3040. '
  3041. ' * ROUTINE TO RESET ACTIVE PRINTERS FOR ALL NODES
  3042. '
  3043. 24795 FILNUM = 2
  3044.       GOSUB 30050
  3045.       FIELD 2,128 AS RR$
  3046.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  3047.          GET 2,J!
  3048.          MID$(RR$,38,2) = " 0"
  3049.          PUT 2,J!
  3050.       NEXT
  3051.       CLOSE 2
  3052.       RETURN
  3053. '
  3054. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  3055. '
  3056. 24800 CLS
  3057.       I! = FRE(C$)
  3058.       COLOR 0,7,0
  3059.       LOCATE 1,10
  3060.       PRINT "RBBS-PC Default Configuration " + CONFIG.VERSION$;
  3061.       IF CONFERENCE.MODE THEN _
  3062.          GOSUB 24970
  3063.       COLOR FG,BG,BORDER
  3064.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  3065.       RETURN
  3066. '
  3067. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  3068. '
  3069. 24970 LOCATE 2,1
  3070.       PRINT SPACE$(10)
  3071.       LOCATE 2,10
  3072.       COLOR 31,0,0
  3073.       PRINT "(Conference Maintenance Mode for " + _
  3074.             ZConfName$ + _
  3075.             ")";
  3076.       RETURN
  3077. '
  3078. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  3079. '
  3080. 25020 XX$ = "In file " + _
  3081.             MAIN.USER.FILE$ + _
  3082.             " " + _
  3083.             A$ + _
  3084.             " record"
  3085.       GOTO 25035
  3086. 25030 IF PURGE THEN _
  3087.          RETURN
  3088.       XX$ = A$ + _
  3089.             " file " + _
  3090.             MAIN.MESSAGE.FILE$ + _
  3091.             " record"
  3092. 25035 GOSUB 50345
  3093.       RETURN
  3094. '
  3095. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE
  3096. '
  3097. 25040 REFRESH = 0
  3098.       IF CONFERENCE.MODE = 0 THEN _
  3099.          GOTO 25050
  3100.       GOSUB 30100
  3101.       CALL GETNUMYN ("End conference maintenance?",AB)
  3102.       IF NOT AB THEN _
  3103.          GOTO 25050
  3104. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3105.       MAIN.USER.FILE$ = MAINUSR$
  3106.       REFRESH = 1
  3107.       RETURN
  3108. 25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
  3109.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3110.          GOTO 25040
  3111.       CALL ALLCAPS (HJ$)
  3112.       ZConfName$ = HJ$
  3113.       CP$ = HJ$
  3114. 25090 CALL BRKFNAME (MAINMSG$,X1$,X2$,X3$,TRUE)
  3115.       FILE$ = X1$ + CP$ + "M.DEF"
  3116.       MAIN.MESSAGE.FILE$ = FILE$
  3117.       GOSUB 30000
  3118.       IF OKAY THEN _
  3119.          GOTO 25100
  3120.       CALL BRKFNAME (CONFERENCE.MENU$,X1$,X2$,X3$,TRUE)
  3121.       FILE$ = X1$ + CP$ + "M.DEF"
  3122.       GOSUB 30000
  3123.       IF OKAY THEN _
  3124.          MAIN.MESSAGE.FILE$ = FILE$
  3125. 25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE)
  3126.       FILE$ = X1$ + CP$ + "U.DEF"
  3127.       MAIN.USER.FILE$ = FILE$
  3128.       GOSUB 30000
  3129.       IF OKAY THEN _
  3130.          GOTO 25160
  3131.       FILE$ = CP$ + "U.DEF"
  3132.       GOSUB 30000
  3133.       IF OKAY THEN _
  3134.          MAIN.USER.FILE$ = FILE$ : _
  3135.          GOTO 25160
  3136. 25142 CALL GETNUMYN ("Make a user's file for this conference?",AB)
  3137.       IF AB THEN _
  3138.          GOTO 25160
  3139. 25144 CONFERENCE.MODE = 2
  3140.       MAIN.USER.FILE$ = MAINUSR$
  3141.       GOTO 25170
  3142. 25160 CONFERENCE.MODE = 1
  3143.       UG = 0
  3144. 25170 REFRESH = 2
  3145.       RETURN
  3146. '
  3147. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES
  3148. '
  3149. 25380 CALL GETNUMYN ("Will you be using DOS sub-directories?",WILL.SUBDIRS.B.USED)
  3150.       IF WILL.SUBDIRS.B.USED THEN _
  3151.          RETURN
  3152.       UPLOAD.TO.SUBDIR = FALES
  3153.       DOWNLOAD.TO.SUBDIR = FALSE
  3154.       RETURN
  3155. 25420 CALL GETNUMYN ("Are uploads to a DOS sub-directory?",UPLOAD.TO.SUBDIR)
  3156.       RETURN
  3157. 25460 CALL GETNUMYN ("Are downloads from DOS sub-directories?",DOWNLOAD.TO.SUBDIR)
  3158.       RETURN
  3159. '
  3160. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF
  3161. '
  3162. 25495 IF NOT UPLOAD.TO.SUBDIR THEN _
  3163.          GOTO 25497
  3164.       A$ = "upload"
  3165.       CALL GETNUMYN ("Change upload DOS sub-directory?",AB)
  3166.       IF AB THEN _
  3167.          GOTO 25500
  3168. 25497 IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3169.          RETURN
  3170.       A$ = "download"
  3171.       CALL GETNUMYN ("Modify download DOS sub-directories?",AB)
  3172.       IF AB THEN _
  3173.          GOTO 25505
  3174. 25498 RETURN
  3175. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3176.          GOTO 25502
  3177. 25501 LOCATE 23,5
  3178.       PRINT SPC(74)
  3179.       LOCATE 23,5
  3180.       PRINT "Current " + A$ + " DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3181. 25502 GOSUB 25850
  3182.       IF LEN(X$) < 1 THEN _
  3183.          GOTO 25505
  3184.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3185.          UPLOAD.SUBDIR$ = X$ : _
  3186.          GOTO 25505
  3187.       CALL ASKRO (X$ + " is not on the drive eligible for uploading. (CR to continue)",24,HJ$)
  3188.       GOTO 25502
  3189. 25505 IF A$="upload" THEN _
  3190.          GOTO 25497
  3191.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3192.          RETURN
  3193.       LOCATE 23,5
  3194.       PRINT SPC(74)
  3195.       LOCATE 23,5
  3196.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3197. 25510 CALL ASKRO ("L>ist, C>hange, A>dd, D>elete " + A$ +" DOS sub-directories? (CR ends) ",24,HJ$)
  3198.       CALL ALLCAPS (HJ$)
  3199.       IF LEN(HJ$) < 1 THEN _
  3200.          GOTO 25498
  3201.       IF LEN(HJ$) <> 1 THEN _
  3202.          GOTO 25505
  3203.       FF = INSTR("LCAD",HJ$)
  3204.       IF FF = 0 THEN _
  3205.          GOTO 25510
  3206.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3207.          GOTO 25510
  3208.       ON FF GOSUB 25610,25670,25730,25670
  3209.       GOTO 25505
  3210. 25610 LAST = (DNLD.SUB/16) + 1
  3211.       INCR = 1
  3212.       FOR IX = 1 TO LAST
  3213.          GOSUB 24800
  3214.          LOCATE 4,1
  3215.          PRINT "DOS sub-directories from which downloads are done:";
  3216.          INDEX = 4
  3217.          FOR I = 1 TO 16
  3218.             LOCATE INDEX + I,1
  3219.             PRINT DNLD$(INCR);
  3220.             INCR = INCR + 1
  3221.             IF INCR > DNLD.SUB THEN _
  3222.                GOTO 25668
  3223.          NEXT
  3224. 25636    CALL GETNUMYN ("More",AB)
  3225.          IF NOT AB THEN _
  3226.             GOTO 25668
  3227. 25644 NEXT
  3228. 25668 RETURN
  3229. 25670 GOSUB 25850
  3230.       IF LEN(HJ$) < 1 THEN _
  3231.          RETURN
  3232.       GOSUB 26030
  3233.       A$ = " not found!"
  3234.       IF X$ = "" THEN _
  3235.          GOTO 25682
  3236.       FOR I = 1 TO DNLD.SUB
  3237.          IF X$ = DNLD$(I) THEN _
  3238.             GOTO 25698
  3239.       NEXT
  3240. 25682 CALL ASKRO (X$ + A$ + " (CR to continue)",24,HJ$)
  3241.       A$ = "download"
  3242.       RETURN
  3243. 25698 IF FF = 4 THEN _
  3244.          FOR X = I TO DNLD.SUB : _
  3245.             DNLD$(X) = DNLD$(X + 1) : _
  3246.          NEXT : _
  3247.          A$ = " deleted!" : _
  3248.          DNLD.SUB = DNLD.SUB - 1 : _
  3249.          GOTO 25682
  3250.       IF FF = 2 THEN _
  3251.          A$ = "download" : _
  3252.          NEXT.MESSAGE.RECORD = I : _
  3253.          GOSUB 25850 : _
  3254.          GOSUB 26030 : _
  3255.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3256.          A$ = " changed!" : _
  3257.          GOTO 25682
  3258. 25730 X$ = ""
  3259.       GOSUB 25850
  3260.       IF LEN(HJ$) < 1 THEN _
  3261.          RETURN
  3262.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3263.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3264.             GOTO 25735
  3265.       NEXT
  3266.       GOSUB 60380
  3267.       CALL ASKRO (X$ + " is not a drive eligible for downloading. (CR to continue)",24,HJ$)
  3268.       GOTO 25730
  3269. 25735 IF X$ = "" THEN _
  3270.          GOTO 25498
  3271.       DNLD.SUB = DNLD.SUB + 1
  3272.       DNLD$(DNLD.SUB) = X$
  3273.       RETURN
  3274. '
  3275. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY
  3276. '
  3277. 25850 CALL ASKRO ("Enter " + A$ + " DOS sub-directory name (CR to end). ",24,HJ$)
  3278.       CALL ALLCAPS (HJ$)
  3279.       X$ = HJ$
  3280.       IF LEN(HJ$) < 1 THEN _
  3281.          RETURN
  3282.       IF LEN(X$) = 2 AND INSTR(X$,":") = 2 THEN _
  3283.          RETURN
  3284.       I = INSTR(X$,":")
  3285.       IF I = 2 THEN _
  3286.          I = I + 1 _
  3287.       ELSE _
  3288.          GOTO 25855
  3289.       WHILE I <= LEN(X$)
  3290.          Y = INSTR(I,X$,"\")
  3291.          IF Y = 0 THEN _
  3292.             Y = LEN(X$) + 1
  3293.          L1 = Y - I
  3294.          GOSUB 25876
  3295.          IF I <> 0 THEN _
  3296.             GOTO 25855
  3297.          I = Y + 1
  3298.       WEND
  3299.       STRNG$ = X$
  3300.       IF LEN(STRNG$) > 2 AND RIGHT$(STRNG$,1) <> "\" THEN _
  3301.          STRNG$ = STRNG$ + "\"
  3302.       GOSUB 60470
  3303.       IF NOT IS.OK THEN _
  3304.          GOTO 25850
  3305.       RETURN
  3306. 25855 CALL ASKRO (X$ + " is not a valid directory name. (CR to continue)",24,HJ$)
  3307.       GOTO 25850
  3308. 25876 HJ$ = MID$(X$,I,L1)
  3309.       I = 1
  3310.       IF LEN(HJ$) > 12 THEN _
  3311.          RETURN
  3312.       L1 = INSTR(HJ$,".")
  3313.       IF L1 = 0 AND (LEN(HJ$) > 8) THEN _
  3314.          RETURN
  3315.       IF L1 > 8 THEN _
  3316.          RETURN
  3317.       IF L1 > 0 AND (LEN(HJ$) - L1 > 3) THEN _
  3318.          RETURN
  3319. 25920 FOR J = 1 TO LEN(HJ$)
  3320.          X = ASC(MID$(HJ$,J,1))
  3321.          IF (X > 63 AND X < 91) THEN _
  3322.             GOTO 26020
  3323.          IF (X > 47 AND X < 58) THEN _
  3324.             GOTO 26020
  3325.          IF (X = 33) THEN _
  3326.             GOTO 26020
  3327.          IF (X > 34 AND X < 42) THEN _
  3328.             GOTO 26020
  3329.          IF (X > 43 AND X < 47) THEN _
  3330.             GOTO 26020
  3331.          IF (X > 96 AND X < 124) THEN _
  3332.             GOTO 26020
  3333.          IF (X = 125) THEN _
  3334.             GOTO 26020
  3335.          I = 1
  3336.          RETURN
  3337. 26020 NEXT
  3338.       I = 0
  3339.       RETURN
  3340. '
  3341. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING
  3342. '
  3343. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3344.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3345.             RETURN
  3346.       NEXT
  3347.       X$ = ""
  3348.       RETURN
  3349. '
  3350. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS
  3351. '
  3352. 26040 CALL GETNUMYN ("Is RBBS-PC to drop to DOS at a specific time each day?",AB)
  3353.       TIME.TO.DROP.TO.DOS = 0
  3354.       IF AB THEN _
  3355.          GOTO 26060
  3356. 26050 GOTO 26065
  3357. 26060 CALL GETINIT ("Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No)",24,0,2359,TIME.TO.DROP.TO.DOS,CR)
  3358. 26065 RETURN
  3359. '
  3360. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN
  3361. '
  3362. 26070 CLS
  3363.       LOCATE 3,5
  3364.       PRINT "RBBS-PC supports the following store-and-forward mail systems:"
  3365.       LOCATE 5,20
  3366.       PRINT "Environment"
  3367.       LOCATE 7,10
  3368.       PRINT "0. None"
  3369.       LOCATE 9,10
  3370.       PRINT "1. SeaDog"
  3371.       LOCATE 11,10
  3372.       PRINT "2. Binkley Term"
  3373.       LOCATE 13,10
  3374.       PRINT "3. X.400 (to be supported in the future)"
  3375.       LOCATE 15,10
  3376.       PRINT "4. GTE's PC-Pursuit (to be supported in the future)"
  3377.       LOCATE 17,10
  3378.       PRINT "5. G.E.'s GENIE's QuikComm (to be supported in the future)"
  3379. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3380.       NET.MAIL$ = NONE.PICKED$
  3381.       IF AB = 1 THEN _
  3382.          NET.MAIL$ = "SeaDog"
  3383.       IF AB = 2 THEN _
  3384.          NET.MAIL$ = "BINKLEY TERM"
  3385.       RETURN
  3386. 26100 CALL GETASCII ("Turn Echo On",HOST.ECHO.ON$)
  3387.       RETURN
  3388. 26105 CALL GETASCII ("Line Acknowledge",DEFAULT.LINE.ACK$)
  3389.       RETURN
  3390. 26110 CALL GETASCII ("Turn Echo Off",HOST.ECHO.OFF$)
  3391.       RETURN
  3392. 26115 CALL GETASCII ("Turn Graphic Emphasis ON",EMPHASIZE.ON.DEF$)
  3393.       RETURN
  3394. 26120 CALL GETASCII ("Turn Graphic Emphasis OFF",EMPHASIZE.OFF.DEF$)
  3395.       RETURN
  3396. '
  3397. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)
  3398. '
  3399. 30000 CALL FINDFILE (FILE$,OKAY) ' <---- check to see if file exists
  3400. 30030 RETURN
  3401. '
  3402. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  3403. '
  3404. 30040 FILNUM = 2
  3405.       GOSUB 30050
  3406.       FIELD 2,128 AS RR$
  3407.       GET 2,1
  3408.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8 = number of last message on system
  3409.       AUTO.ADD.SECURITY = CVI(MID$(RR$,9,2))         '  9- 10 = min. security to auto. add a user
  3410.       WriteMsgSec$ = MID$(RR$,21,3)                  ' 21- 23 = Msg Sec allowed
  3411.       IF MID$(WriteMsgSec$,1,1) = "/" THEN _
  3412.          ZMsgSecCats$ = "" _
  3413.       ELSE ZMsgSecCats$ = "U"
  3414.       IF MID$(WriteMsgSec$,2,1) <> "/" THEN _
  3415.          ZMsgSecCats$ = ZMsgSecCats$ + "R"
  3416.       IF MID$(WriteMsgSec$,3,1) <> "/" THEN _
  3417.          ZMsgSecCats$ = ZMsgSecCats$ + "P"
  3418.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3419.          AUTO.ADD.SECURITY = 0
  3420.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61 = next avail. user record
  3421.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  3422.       IF FIRST.MESSAGE.RECORD < 3 THEN _
  3423.          FIRST.MESSAGE.RECORD = 3
  3424.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  3425.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  3426.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  3427.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  3428.       IF MAXIMUM.NUMBER.OF.NODES < 1 THEN _
  3429.          MAXIMUM.NUMBER.OF.NODES = 1
  3430.       CLOSE 2
  3431.       FIRST.USER.RECORD = 1
  3432.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3433.          AUTO.ADD.SECURITY$ = "CONF. ONLY" _
  3434.       ELSE AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  3435.       RETURN
  3436. ' * OPEN MESSAGE FILE
  3437. 30050 CLOSE FILNUM
  3438.       IF NETWORK.TYPE = 6 THEN _
  3439.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #FILNUM LEN = 128 _
  3440.       ELSE OPEN "R",FILNUM,MAIN.MESSAGE.FILE$,128
  3441.       RETURN
  3442. ' * OPEN USER FILE
  3443. 30060 CLOSE 1
  3444.       IF NETWORK.TYPE = 6 THEN _
  3445.          OPEN MAIN.USER.FILE$ FOR RANDOM SHARED AS #1 LEN = 128 _
  3446.       ELSE OPEN "R",1,MAIN.USER.FILE$,128
  3447.       RETURN
  3448. '
  3449. ' * COMMON ROUTINE TO UPDATE AUTO ADD SECURITY TO CONFERENCE FILE
  3450. '
  3451. 30100 FILNUM = 1
  3452.       GOSUB 30050
  3453.       FIELD 1,8 AS MR1$, 2 AS MR2$, 10 AS MR3$, 3 AS MR4$, 105 AS MR5$
  3454.       GET 1,1
  3455.       LSET MR2$ = MKI$(AUTO.ADD.SECURITY)
  3456.       LSET MR4$ = WriteMsgSec$
  3457.       PUT 1,1
  3458.       CLOSE 1
  3459.       RETURN
  3460. '
  3461. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD
  3462. '
  3463. 30450 FILNUM = 2
  3464.       GOSUB 30050
  3465.       FIELD 2,128 AS RR$
  3466.       GET 2,1
  3467.       X$ = MKI$(AUTO.ADD.SECURITY)
  3468.       MID$(RR$,9,2)   = MKI$(AUTO.ADD.SECURITY)      '  9- 10 = min. security to auto. add a user
  3469.       MID$(RR$,57,5)  = LEFT$(STR$(CURRENT.USER.COUNT)  +SPACE$(5),5) ' 57- 61 = next avail. user record
  3470.       MID$(RR$,68,7)  = LEFT$(STR$(FIRST.MESSAGE.RECORD)+SPACE$(7),7) ' 68- 74 = first rec. of msgs file
  3471.       MID$(RR$,75,7)  = LEFT$(STR$(NEXT.MESSAGE.RECORD) +SPACE$(7),7) ' 75- 81 = next avail. msgs record
  3472.       MID$(RR$,82,7)  = LEFT$(STR$(HIGHEST.MESSAGE.RECORD)+SPACE$(7),7) ' 82- 88 = last rec. of msgs file
  3473.       MID$(RR$,89,7)  = LEFT$(STR$(MAXIMUM.NUMBER.OF.MSGS)+SPACE$(7),7) ' 89- 95 = maximum number of messages
  3474.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3475.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3476.          HJ$ = MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3477.       MID$(RR$,127,2) = HJ$                          '127-128 = maximum number of "nodes"
  3478.       PUT 2,1
  3479.       CLOSE 2
  3480.       RETURN
  3481. '
  3482. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE
  3483. '
  3484. 30610 A$ = MAIN.MESSAGE.FILE$
  3485.       IF NO.OLD.FILE THEN _
  3486.          GOTO 30612
  3487.       FILNUM = 1
  3488.       GOSUB 30050
  3489.       FIELD 1,128 AS MESSAGE.RECORD$
  3490.       GOSUB 50095
  3491. 30612 CLOSE 2
  3492.       IF NETWORK.TYPE = 6 THEN _
  3493.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  3494.       ELSE OPEN "R",2,A$,128
  3495.       FIELD 2,128 AS RR$
  3496.       A$="Copying"
  3497.       IF NO.OLD.FILE THEN _
  3498.          A$ = "Creating preformatted"
  3499.       OE = B1
  3500.       IF MAXIMUM.NUMBER.OF.NODES <= B1 THEN _
  3501.          OE = MAXIMUM.NUMBER.OF.NODES
  3502.       GOSUB 25030
  3503.       FOR J=1 TO OE + 1                 ' WRITE CHECKPOINT AND NODE RECORDS
  3504.          IF NO.OLD.FILE AND J = 1 THEN _
  3505.             GOSUB 31040
  3506.          IF NO.OLD.FILE AND J <> 1 THEN _
  3507.             GOSUB 31050
  3508.          IF NO.OLD.FILE = FALSE THEN _
  3509.             GET 1,J : _
  3510.             LSET RR$ = MESSAGE.RECORD$
  3511.          PUT 2
  3512.       NEXT
  3513.       IF NO.OLD.FILE THEN _
  3514.          GOTO 30850
  3515.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3516.          GOTO 30780
  3517.       FOR J = OE + 1 TO B1             ' WRITE OUT EXPANISON NODE RECORDS
  3518.          GOSUB 31050
  3519.          PUT 2
  3520.       NEXT
  3521. 30780 MAXIMUM.NUMBER.OF.NODES = B1     ' SET VALUE FOR MAXIMUM NUMBER OF NODES
  3522.       JX = FIRST.MESSAGE.RECORD
  3523.       GET 1,JX
  3524.       WHILE VAL(MID$(MESSAGE.RECORD$,2,4)) = 0 AND (JX < NEXT.MESSAGE.RECORD)
  3525.          JX = JX + 1
  3526.          GET 1, JX
  3527.       WEND
  3528.       IF JX > FIRST.MESSAGE.RECORD THEN _
  3529.          PRINT (JX-FIRST.MESSAGE.RECORD);" bad records purged"
  3530.       MSG.ACTIVE$ = CHR$(225)
  3531.       MSG.KILLED$ = CHR$(226)
  3532.       IS.HEADER$ = MSG.ACTIVE$ + MSG.KILLED$
  3533.       FOR J = JX TO NEXT.MESSAGE.RECORD - 1
  3534. 30830    GET 1,J
  3535.          IF PURGE <> -1 THEN _
  3536.             LOCATE 24,X : _
  3537.             PRINT STR$(LOC(2)); : _
  3538.             GOTO 30840
  3539.          X = INSTR(IS.HEADER$,MID$(MESSAGE.RECORD$,116,1))
  3540.          IF X < 1 THEN _     ' not a header record
  3541.             GOTO 30840
  3542.          IF X = 1 THEN _
  3543.             IF VAL(MID$(MESSAGE.RECORD$,2,4)) < 1 THEN _
  3544.                PRINT " bad header purged..." : _
  3545.                GOTO 30842
  3546.          MSG.NUM$ = LEFT$(MESSAGE.RECORD$,5)
  3547.          GOSUB 31060                     ' count active headers
  3548.          IF ACT.HEADER.COUNT = 0 THEN _  ' all headers killed
  3549.             PRINT "Msg #" + MSG.NUM$ + "          purged..." : _
  3550.             J = J + NUM.RECS - 1 : _
  3551.             GOTO 30842
  3552.          PRINT "Msg #" + MSG.NUM$ + " copied..."
  3553.          X$ = LEFT$(STR$(NUM.NEW.RECS)+"    ",4)
  3554.          FOR I = 0 TO NUM.HEADERS.FOUND - 1  ' write active headers
  3555.             GET 1, J+I
  3556.             IF MID$(MESSAGE.RECORD$,116,1) = MSG.ACTIVE$ THEN _
  3557.                MID$(MESSAGE.RECORD$,67,1) = CHR$(ACT.HEADER.COUNT) : _
  3558.                MID$(MESSAGE.RECORD$,117,4) = X$ : _
  3559.                LSET RR$ = MESSAGE.RECORD$ : _
  3560.                PUT 2
  3561.          NEXT
  3562.          FOR I = NUM.HEADERS.FOUND TO NUM.RECS - 1  ' write out body
  3563.             GET 1
  3564.             LSET RR$ = MESSAGE.RECORD$
  3565.             PUT 2
  3566.          NEXT
  3567.          J = LOC(1)
  3568.          GOTO 30842
  3569. 30840    LSET RR$ = MESSAGE.RECORD$
  3570.          PUT 2                    ' WRITE OUT MESSAGE RECORD
  3571. 30842 NEXT
  3572.       B1 = LOC(2) + 1             ' GET NEW FILE'S NEXT MESSAGE RECORD
  3573.       CLOSE 1
  3574.       IF B3! < LOC(2) + 1 THEN _
  3575.          GOTO 30960
  3576. 30850 IF NO.OLD.FILE OR PURGE THEN _
  3577.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3578.          PURGE = 0 : _
  3579.          A$ = "Preformatting"
  3580.       IF MESSAGES.CAN.GROW THEN _
  3581.          GOTO 30960
  3582.       GOSUB 25030
  3583.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3584.          LSET RR$ = SPACE$(128)
  3585.          PUT 2                    ' WRITE OUT EXPANSION MESSAGE RECORDS
  3586.          LOCATE 24,X
  3587.          PRINT STR$(LOC(2));
  3588.       NEXT
  3589. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3590.       NEXT.MESSAGE.RECORD = B1
  3591.       IF NEXT.MESSAGE.RECORD < FIRST.MESSAGE.RECORD THEN _
  3592.          NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD
  3593.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3594.       CLOSE 2
  3595. 30980 IF NO.OLD.FILE THEN _
  3596.          RETURN
  3597.       CALL GETNUMYN ("Delete the old " + _
  3598.                       MAIN.MESSAGE.FILE$ + _
  3599.                      " file?",AB)
  3600.       IF AB THEN _
  3601.          GOTO 31020
  3602. 31000 A$ = MAIN.MESSAGE.FILE$
  3603.       GOSUB 50096
  3604.       NAME MAIN.MESSAGE.FILE$ AS A$
  3605.       GOTO 31030
  3606. 31020 KILL MAIN.MESSAGE.FILE$
  3607. 31030 A$ = MAIN.MESSAGE.FILE$
  3608.       GOSUB 50095
  3609.       NAME A$ AS MAIN.MESSAGE.FILE$
  3610.       GOSUB 30450
  3611. 31035 RETURN
  3612. '
  3613. ' * COMMON SUBROUTINE TO CREATE A BLANK "CHECKPOINT" RECORD IN THE MESSAGE FILE
  3614. '
  3615. 31040 LSET RR$ = " 0      " + _               ' NUMBER OF LAST MESSAGE
  3616.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  3617.                  SPACE$(116) + _              ' BLANKS IN ALL OTHER FIELDS
  3618.                  RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  3619.       RETURN
  3620. '
  3621. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  3622. '
  3623. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3624.       RETURN
  3625. 31060 ' count the headers and active headers
  3626.       NUM.RECS = VAL(MID$(MESSAGE.RECORD$,117,4))
  3627.       IF NUM.RECS < 1 THEN _
  3628.          NUM.RECS = 1
  3629.       ACT.HEADER.COUNT = -(X = 1)
  3630.       HEADER.COUNT = 1
  3631.       NUM.HEADERS = ASC(MID$(MESSAGE.RECORD$,67,1))
  3632.       NUM.HEADERS.FOUND = 1
  3633.       GET 1
  3634.       WHILE NUM.HEADERS > 0 AND INSTR(IS.HEADER$,MID$(MESSAGE.RECORD$,116,1)) > 0 _
  3635.             AND MID$(MESSAGE.RECORD$,73,1) = "-" AND MID$(MESSAGE.RECORD$,70,1) = "-"
  3636.          NUM.HEADERS = NUM.HEADERS - 1
  3637.          NUM.HEADERS.FOUND = NUM.HEADERS.FOUND + 1
  3638.          ACT.HEADER.COUNT = ACT.HEADER.COUNT - (MID$(MESSAGE.RECORD$,116,1) = MSG.ACTIVE$)
  3639.          GET 1
  3640.       WEND
  3641.       NUM.NEW.RECS = NUM.RECS - NUM.HEADERS.FOUND + ACT.HEADER.COUNT
  3642.       RETURN
  3643. '
  3644. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION
  3645. '
  3646. 50095 IF INSTR(A$,".") THEN _
  3647.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3648.               ".BAK" : _
  3649.          RETURN _
  3650.       ELSE A$ = A$ + _
  3651.                 ".BAK" : _
  3652.       RETURN
  3653. '
  3654. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION
  3655. '
  3656. 50096 IF INSTR(A$,".") THEN _
  3657.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3658.               ".OLD" : _
  3659.          RETURN _
  3660.       ELSE A$ = A$ + _
  3661.                 ".OLD" : _
  3662.       RETURN
  3663. '
  3664. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  3665. '
  3666. 50345 I! = FRE(C$)
  3667. 50346 LOCATE 24,1
  3668.       PRINT SPACE$(5)+XX$+SPACE$(74-LEN(XX$));
  3669.       X = 5 + LEN(XX$) + 1
  3670.       RETURN
  3671. 50350 F$ = MAIN.USER.FILE$
  3672.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3673.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".") - 1)
  3674.       RETURN
  3675. '
  3676. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE
  3677. '
  3678. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3679.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF
  3680. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3681. 50500 GOSUB 30060
  3682.       UG = LOF(1) / 128.0!
  3683.       MAX.USR.FILE.SIZE.FRM.DEF = UG
  3684.       HIGHEST.USER.RECORD = UG
  3685.       GOTO 50560
  3686. '
  3687. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE
  3688. '
  3689. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5 * MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3690. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3691. 50550 FILNUM = 1
  3692.       GOSUB 30050
  3693.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1) / 128 THEN _
  3694.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1) / 128
  3695. 50560 GOSUB 22340
  3696.       CLOSE 1
  3697.       RETURN
  3698. '
  3699. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS
  3700. '
  3701. 50580 OLD = LOC(1)
  3702.       GET 1,I + 1
  3703.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3704.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3705.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3706.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3707.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3708.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3709.          RETURN
  3710.       PRINT "Message chain broken at record number " + STR$(OLD)
  3711.       PRINT "Message chain repair in progress!
  3712.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD - 1
  3713.          GET 1,IQ
  3714.          IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3715.             OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3716.             AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3717.             AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3718.             AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3719.             AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3720.             GET 1,OLD : _
  3721.             MID$(MESSAGE.RECORD$,117,4) = STR$(IQ - OLD) : _
  3722.             PUT 1,OLD : _
  3723.             PRINT "Message chain repaired." : _
  3724.             I = IQ : _
  3725.             RETURN
  3726.       NEXT
  3727.       RETURN 23730
  3728. '
  3729. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD #
  3730. '
  3731. 50720 JX = LEN.HASH
  3732.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  3733.         JX = JX - 1
  3734.       WEND
  3735.       X$ = MID$(HASH.VALUE$,1,JX)
  3736.       UIX# = FNHSH(X$)
  3737.       Q = FNHSH2(X$)
  3738.       NSR = 1
  3739.       RO = CSRLIN
  3740.       CO = POS(0)
  3741. 50722 GET 2,UIX#
  3742.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  3743.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  3744.          GOTO 50730
  3745.       IF HASH.VALUE$ <> HASH.VALUE.N$ THEN _
  3746.          GOTO 50725
  3747.       IF START.INDIV > 0 AND LEN.INDIV > 0 THEN _
  3748.          IF MID$(USER.RECORD$,START.INDIV,LEN.INDIV) <> MID$(USER.RECORD.N$,START.INDIV,LEN.INDIV) THEN _
  3749.             GOTO 50725
  3750.       LOCATE RO,CO
  3751.       PRINT "Omitted Duplicate ";
  3752.       PURGED.COUNT = PURGED.COUNT + 1
  3753.       RETURN
  3754. 50725 UIX# = UIX# + Q
  3755.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  3756.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  3757.       NSR = NSR + 1
  3758.       LOCATE RO,CO
  3759.       PRINT "searching";UIX#;
  3760.       GOTO 50722
  3761. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  3762.       PUT 2,UIX#
  3763.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  3764.       LOCATE RO,CO
  3765.       PRINT " pos#";UIX#;"/";NSR;"srch(s) ";
  3766.       RETURN
  3767. '
  3768. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE
  3769. '
  3770. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  3771.       GOSUB 25020
  3772.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  3773.          LSET USER.RECORD.N$ = TEMPLATE$
  3774.          PUT 2
  3775.          LOCATE 24,X
  3776.          PRINT J;
  3777.       NEXT
  3778.       PRINT
  3779.       RETURN
  3780. '
  3781. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES
  3782. '
  3783. 59000 GOSUB 30100
  3784.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  3785.       PROMPT.BELL = -1
  3786.       IF PROMPT.BELL$ = "OFF" THEN _
  3787.          PROMPT.BELL = 0
  3788.       PAGING.PRINTER.SUPPORT$ = ". "
  3789.       IF M11$ = "YES" THEN _
  3790.          PAGING.PRINTER.SUPPORT$ = ". " + _
  3791.                                    CHR$(7)
  3792.       GOSUB 15780
  3793.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  3794.          MAIN.MESSAGE.FILE$ = MAINMSG$
  3795.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  3796.          MAIN.USER.FILE$ = MAINUSR$
  3797.       IF CONFERENCE.MODE THEN _
  3798.          GOSUB 30040
  3799.       IF CALLERS.FILE$ = NONE.PICKED$ THEN _
  3800.          CALLERS.FILE$ = ""
  3801.       IF ALTDIR.EXTENSION$ = NONE.PICKED$ THEN _
  3802.          ALTDIR.EXTENSION$ = ""
  3803.       IF ALWAYS.STREW.TO$ = NONE.PICKED$ THEN _
  3804.          ALWAYS.STREW.TO$ = ""
  3805.       IF QUES.PATH$ = NONE.PICKED$ THEN _
  3806.          QUES.PATH$ = ""
  3807.       IF NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3808.          NEW.USER.QUESTIONNAIRE$ = ""
  3809.       IF REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3810.          REQUIRED.QUESTIONNAIRE$ = ""
  3811.       IF NET.MAIL$ = NONE.PICKED$ THEN _
  3812.          NET.MAIL$ = "NONE"
  3813.       IF CONFMAIL.LIST$ = NONE.PICKED$ THEN _
  3814.          CONFMAIL.LIST$ = ""
  3815.       IF REGISTRATION.PROGRAM$ = NONE.PICKED$ THEN _
  3816.          REGISTRATION.PROGRAM$ = ""
  3817. 59020 OPEN "O",#1,CONFIG.FILENAME$
  3818.       IF INSTR(MO$,":") < 1 THEN _
  3819.          MO$ = MO$ + _
  3820.                ":"
  3821.       IF INSTR(SJ$,":") < 1 THEN _
  3822.          SJ$ = SJ$ + _
  3823.                ":"
  3824.       T$ = DIRECTORY.EXTENTION$
  3825.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  3826.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  3827.       S$ = UPLOAD.DIRECTORY$
  3828.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  3829.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".") - 1)
  3830.       DIRECTORY.EXTENTION$ = T$
  3831.       UPLOAD.DIRECTORY$ = S$
  3832.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3833.          DNLD.SUB = 0 : _
  3834.          FOR I = 1 TO 99 : _
  3835.             DNLD$(I) = "" : _
  3836.          NEXT
  3837.       IF NOT UPLOAD.TO.SUBDIR THEN _
  3838.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + _
  3839.                           ":"
  3840.       IF UPLOAD.TO.SUBDIR AND UPLOAD.SUBDIR$ <> "" THEN _
  3841.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  3842.       EXTENSION.LIST$ = DEFAULT.EXTENSION$
  3843.       IF COMPRESSED.EXT$ <> NONE.PICKED$ THEN _
  3844.          EXTENSION.LIST$ = EXTENSION.LIST$ + COMPRESSED.EXT$
  3845. '
  3846. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION
  3847. '
  3848. 59030 WRITE #1,VERSION.NUMBER$, _
  3849.                DOWNLOAD.DRIVES$, _
  3850.                SYSOP.PASSWORD.1$, _
  3851.                SYSOP.PASSWORD.2$, _
  3852.                SYSOP.FIRST.NAME$, _
  3853.                SYSOP.LAST.NAME$, _
  3854.                REQUIRED.RINGS, _
  3855.                START.OFFICE.HOURS, _
  3856.                END.OFFICE.HOURS, _
  3857.                MINUTES.PER.SESSION!, _
  3858.                MAX.ALLOWED.MSGS.FRM.DEF, _
  3859.                ACT.MNTHS.B4.DELETING, _
  3860.                UPLOAD.DIRECTORY$,_
  3861.                DF, _
  3862.                ACTIVE.BULLETINS, _
  3863.                PROMPT.BELL, _
  3864.                PCJR, _
  3865.                MENUS.CAN.PAUSE, _
  3866.                MENU$(1), _
  3867.                MENU$(2), _
  3868.                MENU$(3), _
  3869.                MENU$(4), _
  3870.                MENU$(5), _
  3871.                MENU$(6), _
  3872.                CONFERENCE.MENU$, _
  3873.                TEST.ANSI.TIME, _
  3874.                WELCOME.INTERRUPTABLE, _
  3875.                REMIND.FILE.TRANSFERS, _
  3876.                PAGE.LENGTH, _
  3877.                MAX.MESSAGE.LINES, _
  3878.                DOORS.AVAILABLE, _
  3879.                MO$
  3880.       IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
  3881.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  3882.                           BULLETIN.MENU$
  3883.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  3884.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  3885.                             BULLETIN.PREFIX$
  3886.       IF GLOBAL.FUNCTION(3) > MINIMUM.LOGON.SECURITY THEN _
  3887.          GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  3888.       IF FILES.FUNCTION(2) > MINIMUM.LOGON.SECURITY THEN _
  3889.          FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  3890.       IF LIBRARY.FUNCTION(4) > MINIMUM.LOGON.SECURITY THEN _
  3891.          LIBRARY.FUNCTION(4) = MINIMUM.LOGON.SECURITY
  3892.       IF LIBRARY.DRIVE$ = "" THEN _
  3893.          MAIN.FUNCTION(18) = 32767
  3894.       WRITE #1,MAIN.MESSAGE.FILE$, _
  3895.                MAIN.MESSAGE.BACKUP$, _
  3896.                CALLERS.FILE$, _
  3897.                COMMENTS.FILE$, _
  3898.                MAIN.USER.FILE$, _
  3899.                WELCOME.FILE$, _
  3900.                NEWUSER.FILE$, _
  3901.                DIRECTORY.EXTENTION$, _
  3902.                COM.PORT$, _
  3903.                BULLETINS.OPTIONAL, _
  3904.                USER.INIT.COMMAND$, _
  3905.                RTS$, _
  3906.                ZCallersLst$, _
  3907.                FG, _
  3908.                BG, _
  3909.                BORDER, _
  3910.                RBBS.BAT$, _
  3911.                RCTTY.BAT$
  3912.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  3913.                FIRST.NAME.PROMPT$, _
  3914.                HELP$(3), _
  3915.                HELP$(4), _
  3916.                HELP$(7), _
  3917.                HELP$(9), _
  3918.                BULLETIN.MENU$, _
  3919.                BULLETIN.PREFIX$, _
  3920.                DRIVE.FOR.BULLETINS$, _
  3921.                MESSAGE.REMINDER, _
  3922.                REQUIRE.NON.ASCII, _
  3923.                ASK.EXTENDED.DESC, _
  3924.                MAXIMUM.NUMBER.OF.NODES, _
  3925.                NETWORK.TYPE, _
  3926.                RECYCLE.TO.DOS, _
  3927.                MAX.USR.FILE.SIZE.FRM.DEF, _
  3928.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  3929.                TRASHCAN.FILE$
  3930.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  3931.                DEFAULT.SECURITY.LEVEL, _
  3932.                SYSOP.SECURITY.LEVEL, _
  3933.                FILESEC.FILE$, _
  3934.                SYSOP.MENU.SECURITY.LEVEL, _
  3935.                CONFMAIL.LIST$, _
  3936.                MAXIMUM.VIOLATIONS, _
  3937.                SYSOP.FUNCTION(1), _
  3938.                SYSOP.FUNCTION(2), _
  3939.                SYSOP.FUNCTION(3), _
  3940.                SYSOP.FUNCTION(4), _
  3941.                SYSOP.FUNCTION(5), _
  3942.                SYSOP.FUNCTION(6), _
  3943.                SYSOP.FUNCTION(7), _
  3944.                PASSWORD.FILE$, _
  3945.                MAXIMUM.PASSWORD.CHANGES, _
  3946.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  3947.                OVERWRITE.SECURITY.LEVEL, _
  3948.                DOORS.TERMINAL.TYPE, _
  3949.                MAX.PER.DAY
  3950.       WRITE #1,MAIN.FUNCTION(1), _
  3951.                MAIN.FUNCTION(2), _
  3952.                MAIN.FUNCTION(3), _
  3953.                MAIN.FUNCTION(4), _
  3954.                MAIN.FUNCTION(5), _
  3955.                MAIN.FUNCTION(6), _
  3956.                MAIN.FUNCTION(7), _
  3957.                MAIN.FUNCTION(8), _
  3958.                MAIN.FUNCTION(9), _
  3959.                MAIN.FUNCTION(10), _
  3960.                MAIN.FUNCTION(11), _
  3961.                MAIN.FUNCTION(12), _
  3962.                MAIN.FUNCTION(13), _
  3963.                MAIN.FUNCTION(14), _
  3964.                MAIN.FUNCTION(15), _
  3965.                MAIN.FUNCTION(16), _
  3966.                MAIN.FUNCTION(17), _
  3967.                MAIN.FUNCTION(18), _
  3968.                MIN.NEWCALLER.BAUD, _
  3969.                WAIT.BEFORE.DISCONNECT
  3970.       WRITE #1,FILES.FUNCTION(1), _
  3971.                FILES.FUNCTION(2), _
  3972.                FILES.FUNCTION(3), _
  3973.                FILES.FUNCTION(4), _
  3974.                FILES.FUNCTION(5), _
  3975.                FILES.FUNCTION(6), _
  3976.                FILES.FUNCTION(7), _
  3977.                FILES.FUNCTION(8), _
  3978.                UTILITY.FUNCTION(1), _
  3979.                UTILITY.FUNCTION(2), _
  3980.                UTILITY.FUNCTION(3), _
  3981.                UTILITY.FUNCTION(4), _
  3982.                UTILITY.FUNCTION(5), _
  3983.                UTILITY.FUNCTION(6), _
  3984.                UTILITY.FUNCTION(7), _
  3985.                UTILITY.FUNCTION(8), _
  3986.                UTILITY.FUNCTION(9), _
  3987.                UTILITY.FUNCTION(10), _
  3988.                UTILITY.FUNCTION(11), _
  3989.                UTILITY.FUNCTION(12), _
  3990.                GLOBAL.FUNCTION(1), _
  3991.                GLOBAL.FUNCTION(2), _
  3992.                GLOBAL.FUNCTION(3), _
  3993.                GLOBAL.FUNCTION(4), _
  3994.                UPLOAD.TIME.FACTOR!, _
  3995.                COMPUTER.TYPE, _
  3996.                REMIND.PROFILE, _
  3997.                RBBS.NAME$, _
  3998.                COMMANDS.BETWEEN.RINGS, _
  3999.                ZCopyrightSecs, _
  4000.                PAGING.PRINTER.SUPPORT$, _
  4001.                MODEM.INIT.BAUD$
  4002. 59035 WRITE #1,TURN.PRINTER.OFF,_
  4003.                DIRECTORY.PATH$,_
  4004.                MIN.SEC.TO.VIEW, _
  4005.                LIMIT.SEARCH.TO.FMS, _
  4006.                DEFAULT.CATEGORY.CODE$, _
  4007.                DIR.CATEGORY.FILE$, _
  4008.                NEW.FILES.CHECK, _
  4009.                MAX.DESC.LEN, _
  4010.                SHOW.SECTION, _
  4011.                COMMANDS.IN.PROMPT, _
  4012.                NEWUSER.SETS.DEFAULTS, _
  4013.                HELP.PATH$, _
  4014.                HELP.EXTENSION$, _
  4015.                MAIN.COMMANDS$, _
  4016.                FILE.COMMANDS$, _
  4017.                UTIL.COMMANDS$, _
  4018.                GLOBAL.COMMANDS$, _
  4019.                SYSOP.COMMANDS$
  4020.       WRITE #1,RECYCLE.WAIT, _
  4021.                LIBRARY.FUNCTION(1), _
  4022.                LIBRARY.FUNCTION(2), _
  4023.                LIBRARY.FUNCTION(3), _
  4024.                LIBRARY.FUNCTION(4), _
  4025.                LIBRARY.FUNCTION(5), _
  4026.                LIBRARY.FUNCTION(6), _
  4027.                LIBRARY.FUNCTION(7), _
  4028.                LIBRARY.DRIVE$, _
  4029.                LIBRARY.DIRECTORY.PATH$, _
  4030.                LIBRARY.DIRECTORY.EXTENTION$, _
  4031.                LIBRARY.WORK.DISK.PATH$, _
  4032.                LIBRARY.MAX.DISK, _
  4033.                LIBRARY.MAX.DIRECTORY, _
  4034.                LIBRARY.MAX.SUBDIR, _
  4035.                LIBRARY.SUBDIR.PREFIX$, _
  4036.                LIBRARY.ARCHIVE.PATH$, _
  4037.                LIBRARY.ARCHIVE.PROGRAM$, _
  4038.                LIBRARY.COMMANDS$
  4039.       WRITE #1,UPLOAD.PATH$, _
  4040.                FMS.DIRECTORY$, _
  4041.                ANS.MENU$, _
  4042.                REQUIRED.QUESTIONNAIRE$, _
  4043.                REMEMBER.NEW.USERS, _
  4044.                SURVIVE.NOUSER.ROOM, _
  4045.                PROMPT.HASH$, _
  4046.                START.HASH, _
  4047.                LEN.HASH, _
  4048.                PROMPT.INDIV$, _
  4049.                START.INDIV, _
  4050.                LEN.INDIV
  4051.       WRITE #1,BYPASS.MSGS, _
  4052.                MUSIC, _
  4053.                RESTRICT.BY.DATE, _
  4054.                DAYS.TO.WARN, _
  4055.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  4056.                VOICE.TYPE, _
  4057.                RESTRICT.VALID.CMDS, _
  4058.                ZMinSecPersUpld, _
  4059.                ZDistriHelp$, _
  4060.                ZDistriPath$, _
  4061.                FAST.FILE.LIST$, _
  4062.                FAST.FILE.LOCATOR$, _
  4063.                MESSAGES.CAN.GROW, _
  4064.                WRAP.CALLERS.FILE$, _
  4065.                REDIRECT.IO.METHOD, _
  4066.                AUTO.UPGRADE.SEC, _
  4067.                HALT.ON.ERROR, _
  4068.                NEW.PUBLIC.MSGS.SECURITY, _
  4069.                NEW.PRIVATE.MSGS.SECURITY, _
  4070.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  4071.                SL.CATEGORIZE.UPLOADS, _
  4072.                ZNoQuoting, _
  4073.                TIME.TO.DROP.TO.DOS, _
  4074.                EXPIRED.SECURITY, _
  4075.                DTR.DROP.DELAY, _
  4076.                ASK.IDENTITY, _
  4077.                MAX.REG.SEC, _
  4078.                BUFFER.SIZE, _
  4079.                MLCOM, _
  4080.                SHOOT.YOURSELF, _
  4081.                EXTENSION.LIST$, _
  4082.                ZEnableCC, _
  4083.                ZMaxBank, _
  4084.                NET.MAIL$, _
  4085.                MASTER.DIRECTORY.NAME$, _
  4086.                PROTO.DEF$, _
  4087.                UPCAT.HELP$, _
  4088.                ALWAYS.STREW.TO$, _
  4089.                LAST.NAME.PROMPT$
  4090.       MSB = LSB + 1
  4091.       LINE.CONTROL.REGISTER = LSB + 3
  4092.       MODEM.CONTROL.REGISTER = LSB + 4
  4093.       LINE.STATUS.REGISTER = LSB + 5
  4094.       MODEM.STATUS.REGISTER = LSB + 6
  4095.       WRITE #1,PERSONAL.DRVPATH$, _
  4096.                PERSONAL.DIR$, _
  4097.                PERSONAL.BEGIN, _
  4098.                PERSONAL.LEN, _
  4099.                PERSONAL.PROTOCOL$, _
  4100.                PERSONAL.CONCAT, _
  4101.                PRIVATE.READ.SEC, _
  4102.                PUBLIC.READ.SEC, _
  4103.                SEC.CHANGE.MSG, _
  4104.                KEEP.INIT.BAUD, _
  4105.                MAIN.PUI$, _
  4106.                DEFAULT.ECHOER$, _
  4107.                HOST.ECHO.ON$, _
  4108.                HOST.ECHO.OFF$, _
  4109.                SWITCH.BACK, _
  4110.                DEFAULT.LINE.ACK$, _
  4111.                ALTDIR.EXTENSION$, _
  4112.                DIRECTORY.PREFIX$
  4113.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  4114.                MODEM.INIT.WAIT.TIME, _
  4115.                MODEM.COMMAND.DELAY.TIME, _
  4116.                TURBO.RBBS, _
  4117.                DNLD.SUB, _
  4118.                WILL.SUBDIRS.B.USED, _
  4119.                UPLOAD.TO.SUBDIR, _
  4120.                DOWNLOAD.TO.SUBDIR, _
  4121.                UPLOAD.SUBDIR$, _
  4122.                MIN.OLDCALLER.BAUD, _
  4123.                MAX.WORK.VAR, _
  4124.                DISKFULL.GO.OFFLINE, _
  4125.                EXTENDED.LOGGING, _
  4126.                USER.RESET.COMMAND$, _
  4127.                USER.COUNT.RINGS.COMMAND$, _
  4128.                USER.ANSWER.COMMAND$, _
  4129.                USER.GO.OFFHOOK.COMMAND$, _
  4130.                DISK.FOR.DOS$, _
  4131.                DUMB.MODEM, _
  4132.                COMMENTS.AS.MESSAGES, _
  4133.                LSB, _
  4134.                MSB, _
  4135.                LINE.CONTROL.REGISTER, _
  4136.                MODEM.CONTROL.REGISTER, _
  4137.                LINE.STATUS.REGISTER, _
  4138.                MODEM.STATUS.REGISTER
  4139.       ORIG.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ + _
  4140.                        FILE.COMMANDS.DEFAULTS$ + _
  4141.                        UTIL.COMMANDS.DEFAULTS$ + _
  4142.                        LIBRARY.COMMANDS.DEFAULTS$ + _
  4143.                        GLOBAL.COMMANDS.DEFAULTS$ + _
  4144.                        SYSOP.COMMANDS.DEFAULTS$
  4145.       WRITE #1,KEEP.TIME.CREDITS, _
  4146.                XON.XOFF, _
  4147.                ALLOW.CALLER.TURBO, _
  4148.                USE.DEVICE.DRIVER$, _
  4149.                PRELOG$, _
  4150.                NEW.USER.QUESTIONNAIRE$, _
  4151.                EPILOG$, _
  4152.                REGISTRATION.PROGRAM$, _
  4153.                QUES.PATH$, _
  4154.                USER.LOCATION$, _
  4155.                USER.INITIALIZE.COMMAND$, _
  4156.                USER.FIRMWARE.CLEAR.CMND$, _
  4157.                USER.FIRMWARE.WRITE.CMND$, _
  4158.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  4159.                SIZE.OF.STACK, _
  4160.                SECURITY.EXEMPT.FROM.EPILOG, _
  4161.                USE.BASIC.WRITES, _
  4162.                DOSANSI, _
  4163.                ESCAPE.INSECURE, _
  4164.                USE.DIR.ORDER, _
  4165.                ADD.DIR.SECURITY, _
  4166.                MAX.EXTENDED.LINES, _
  4167.                ORIG.COMMANDS$
  4168.       IF MACRO.EXTENSION$ <> "" THEN _
  4169.          MACRO.EXTENSION$ = "." + MACRO.EXTENSION$
  4170.       CALL COLORCODE (FG.1.DEF$,FG.1.DEF$,X)
  4171.       CALL COLORCODE (FG.2.DEF$,FG.2.DEF$,X)
  4172.       CALL COLORCODE (FG.3.DEF$,FG.3.DEF$,X)
  4173.       CALL COLORCODE (FG.4.DEF$,FG.4.DEF$,X)
  4174.       WRITE #1,LOGON.MAIL.LEVEL$, _
  4175.                MACRO.DRVPATH$, _
  4176.                MACRO.EXTENSION$, _
  4177.                EMPHASIZE.ON.DEF$, _
  4178.                EMPHASIZE.OFF.DEF$, _
  4179.                FG.1.DEF$, _
  4180.                FG.2.DEF$, _
  4181.                FG.3.DEF$, _
  4182.                FG.4.DEF$, _
  4183.                SECVIO.HLP$, _
  4184.                FOSSIL, _
  4185.                MAX.CARRIER.WAIT, _
  4186.                CALLER.BKGRD, _
  4187.                SMART.TEXT, _
  4188.                TIME.LOCK, _
  4189.                WRITE.BUF.DEF, _
  4190.                SEC.KILL.ANY, _
  4191.                DOORS.DEF$, _
  4192.                SCREEN.OUT.MSG$, _
  4193.                AUTOPAGE.DEF$
  4194.       IF DNLD.SUB <1 OR DNLD.SUB > 99 THEN _
  4195.          GOTO 59080
  4196.       FOR I = 1 TO DNLD.SUB
  4197.          WRITE #1,DNLD$(I)
  4198.       NEXT
  4199. 59080 CLOSE #1
  4200. '
  4201. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  4202. '
  4203.       CLS
  4204.       LOCATE 12,1,1
  4205.       PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$
  4206.       GOTO 60340
  4207. '
  4208. ' *  CONFIG.BAS'S ERROR ROUTINES
  4209. '
  4210. 60010 '* HANDLE ERROR CONDITIONS *
  4211.       IF ERR = 62 AND _
  4212.         (ERL = 11600 OR _
  4213.          ERL = 11620 OR _
  4214.          ERL = 11640 OR _
  4215.          ERL = 11660 OR _
  4216.          ERL = 11680 OR _
  4217.          ERL = 11700 OR _
  4218.          ERL = 11705 OR _
  4219.          ERL = 11706) THEN _
  4220.          PRINT CONFIG.FILENAME$ + _
  4221.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  4222.          PRINT "Please delete and rerun CONFIG." : _
  4223.          RESUME 60340
  4224.       IF ERL = 15780 AND ERR = 5 AND _
  4225.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  4226.          RESUME 16073
  4227.       IF ERL = 22340 THEN _
  4228.          RESUME 22342
  4229.       IF ERL = 31000 AND ERR = 58 THEN _
  4230.          KILL A$ : _
  4231.          RESUME 31000
  4232.       IF ERL = 31030 AND ERR = 58 THEN _
  4233.          KILL A$ : _
  4234.          RESUME 31030
  4235.       IF ERL = 22120 AND ERR = 6 THEN _
  4236.          RESUME 22100
  4237.       IF ERL = 23738 AND ERR = 57 THEN _
  4238.          RESUME 23738
  4239.       IF ERL = 24750 AND ERR = 58 THEN _
  4240.          KILL A$ : _
  4241.          RESUME 24750
  4242.       IF ERL = 31020 THEN _
  4243.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4244.          RESUME 31035
  4245.       IF ERL = 50490 AND ERR = 58 THEN  _
  4246.          RESUME 50500
  4247.       IF ERL = 50540 AND ERR = 58 THEN  _
  4248.          RESUME 50550
  4249.       IF ERL = 50490 OR ERL = 50540 THEN _
  4250.          RESUME 15230
  4251.       IF ERL = 60471 THEN _
  4252.          IF ERR <> 76 THEN _
  4253.             RESUME 60478 _
  4254.          ELSE RESUME 60474
  4255.       IF ERL = 60480 THEN _
  4256.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  4257.          RESUME 60478
  4258.       IF ERR = 61 THEN _
  4259.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4260.          RESUME 60340
  4261.       IF ERR = 67 THEN _
  4262.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4263.          RESUME 60340
  4264.       IF ERR = 70 THEN _
  4265.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4266.          RESUME 60340
  4267.       IF ERR = 71 THEN _
  4268.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4269.          RESUME 60340
  4270.       IF ERR = 72 THEN _
  4271.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4272.          RESUME 60340
  4273.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4274. 60340 IF CONFERENCE.MODE = 1 THEN _
  4275.          DELAY! = FNTI! + 5
  4276.       GOSUB 60440
  4277. 60360 SYSTEM
  4278. '
  4279. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  4280. '
  4281. 60380 FOR I = 1 TO 2
  4282.         BEEP
  4283.       NEXT
  4284.       RETURN
  4285. '
  4286. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS
  4287. '
  4288. 60440 ' wait routine
  4289. 60450 IF FNTI! < DELAY! THEN _
  4290.          GOTO 60450
  4291.       RETURN
  4292. '
  4293. ' * COMMON ROUTINE TO CHECK DRIVE/PATH FOR FORMAT/EXISTENCE
  4294. '
  4295. 60470 IF LEN(STRNG$) < 1 THEN _
  4296.          GOTO 60476
  4297.       IS.OK = TRUE
  4298. 60471 NAME STRNG$ + "XX" AS STRNG$ + "XX"
  4299. 60474 BEEP
  4300.       CALL ASKRO ("Bad/missing drive/path <"+STRNG$+">  [R]e-enter, I)gnore, C)reate",24,ANS$)
  4301.       CALL ALLCAPS (ANS$)
  4302.       ON INSTR("RIC",ANS$) GOTO 60476,60478,60480
  4303. 60476 IS.OK = FALSE
  4304. 60478 RETURN
  4305. 60480 MKDIR LEFT$(STRNG$,LEN(STRNG$)-1)
  4306.       RETURN
  4307.