home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / comm / rbbs3.zip / RBBS-PC.BAS < prev    next >
BASIC Source File  |  1990-10-28  |  167KB  |  4,804 lines

  1. 3 ' $linesize: 132
  2. 4 ' $title: 'RBBS-PC 17.3B, Copyright 1990 by D. Thomas Mack'        ' DA102501
  3. 5 ' WARNING !!! DO NOT CHANGE, BYPASS OR Remove LINES 3-29
  4. 9 'by D. Thomas Mack, 39 Cranbury Drive, Trumbull, CT 06611 (up to 16)
  5.    '  Jon Martin, 4396 N Prairie Willow Ct, Concord, CA 94521 (up to 17.2B)
  6.    '  Ken Goosens, 5020 Portsmouth Road, Fairfax, VA 22032
  7.    '  Doug Azzarito, 5480 Eagle Lake Drive, Palm Beach Gardens, FL 33418
  8. 13 '
  9. 14 ' *******************************NOTICE*************************************
  10. 15 ' *  A limited license is granted to all users of this program and it's    *
  11. 16 ' *  companion program, CONFIG (version 17.3B), to make copies of this     *
  12. 17 ' *  program and distribute the copies to other users, on the following    *
  13. 18 ' *  conditions:                                                           *
  14. 19 ' *    1.   The notices contained in lines 3 through 29 of the program     *
  15. 20 ' *         are not altered, bypassed, or removed.                         *
  16. 21 ' *    2.   The program is not to be distributed to others in modified     *
  17. 22 ' *         form (i.e. the line numbers must remain the same).             *
  18. 23 ' *    3.   No fee is to be charged (or any other consideration received)  *
  19. 24 ' *         for copying or distributing these programs without an express  *
  20. 25 ' *         written agreement with D. Thomas Mack, The Second Ring, 39     *
  21. 26 ' *         Cranbury Drive, Trumbull, Conneticut 06611                     *
  22. 27 ' *                                                                        *
  23. 28 ' *       Copyright (c) 1983-1990 D. Thomas Mack, The Second Ring          *
  24. 29 ' **************************************************************************
  25.    '
  26.    ' $INCLUDE: 'RBBS-VAR.BAS'
  27.    '
  28.    ' $SUBTITLE: 'Main-line RBBS-PC Program'
  29.     ZCrLf$ = CHR$(13) + CHR$(10)
  30.     WasJ = 60
  31.     DIM ZOptSec(WasJ)
  32.     ZConfigFileName$ = "RBBS-PC.DEF"
  33.     CALL GetCommand (ZDebug,NetTime$,ZNetBaud$,ZNetReliable$)
  34.     ZSubParm = -62
  35.     ZBulletinMenu$ = ""
  36.     CALL ReadDef (ZConfigFileName$)
  37.     IF ZErrCode > 0 THEN _
  38.        GOTO 31
  39.     CALL MLInit (1)
  40.     ZSubParm = -9
  41.     CALL Carrier
  42.     IF ZSubParm THEN _
  43.        CALL CopyRight
  44.     GOTO 100
  45. 31  ZSnoop = ZTrue
  46.     CALL PScrn ("Configuration "+ZConfigFileName$+" missing/improper format") : _ ' KG071301
  47.     GOTO 204
  48. 100 CLEAR,,ZSizeOfStack
  49.     DEF SEG                            ' Point to BASIC
  50.     WIDTH 80                           ' Set Screen Width
  51.     KEY OFF                            ' Line 25 turned off
  52. ' ********************* Variable Definitions *******************************
  53. 102 ZMsgDim = 99
  54.     WasMM = 999
  55.     WasBX = 75
  56.     WasJ = 60
  57.     REDIM ZOptSec(WasJ)
  58.     DIM ZWorkAra$(WasJ)
  59.     DIM ZGSRAra$(WasJ)
  60.     DIM ZCategoryName$(WasBX),ZCategoryCode$(WasBX),ZCategoryDesc$(WasBX)
  61.     DIM ZOutTxt$(ZMsgDim)                      ' Message line table
  62.     DIM ZUserIn$(ZMsgDim)                      ' Message line table
  63.     DIM ZMsgPtr(WasMM,2)                       ' Message pointers
  64.     CALL VarInit
  65. 105 ZVersionID$ = "17.3B"
  66. 106 CALL GetCommand (ZDebug,NetTime$,ZNetBaud$,ZNetReliable$)
  67.     ZSubParm = 1
  68.     CALL ReadDef (ZConfigFileName$)
  69.     IF ZErrCode > 0 THEN _
  70.        GOTO 31
  71.     REDIM ZWorkAra$(ZMaxWorkVar)
  72.     REDIM ZGSRAra$(ZMaxWorkVar)
  73.     ZUseTPut = (ZUpperCase OR ZXOnXOff)
  74.     OrigUpgradeSec = ZAutoUpgradeSec
  75.     ZOrigCallers$ = ZCallersFile$
  76.     ZOrigMsgFile$ = ZMainMsgFile$
  77.     ZOrigUserFile$ = ZMainUserFile$
  78.     OrigMainSec = ZMinLogonSec
  79.     ZOrigSysopFN$ = ZSysopFirstName$
  80.     ZOrigSysopLN$ = ZSysopLastName$
  81.     ZExpertUser = ZExpertUserDef
  82.     ZPromptBell = ZPromptBellDef
  83.     CALL BreakFileName (ZOrigMsgFile$,Drive$,OrigMsgName$,ZWasY$,ZFalse)
  84.     IF OrigMsgName$ = "MESSAGES" THEN _
  85.        OrigMsgName$ = "MAIN" _
  86.     ELSE IF RIGHT$(OrigMsgName$,1) = "M" THEN _
  87.             OrigMsgName$ = LEFT$(OrigMsgName$,LEN(OrigMsgName$)-1)
  88.     ConfFileName$ = OrigMsgName$
  89.     OrigNewsFileName$ = ZWelcomeFileDrvPath$ + _
  90.               OrigMsgName$ + ".NWS"
  91.     ZNewsFileName$ = OrigNewsFileName$
  92.     IF ZNetMail$ <> "NONE" AND VAL(NetTime$) > 0 THEN _
  93.        ZLimitMinsPerSession = VAL(NetTime$)
  94.     IF ZNetMail$ <> "NONE" AND VAL(ZNetBaud$) > 0 THEN _
  95.        ZExpectActiveModem = ZTrue : _
  96.        IF NOT ZKeepInitBaud THEN _
  97.           ZModemInitBaud$ = ZNetBaud$
  98.     IF ZFossil THEN _
  99.        ZComPort = VAL(RIGHT$(ZComPort$,1)) - 1 : _
  100.        IF ZComPort < 0 THEN _
  101.           GOTO 108 _
  102.        ELSE CALL FOSinit(ZComPort,Result) : _
  103.             IF Result = -1 THEN _
  104.                ZSnoop = ZTrue : _
  105.                CALL PScrn("ERROR INITIALIZING FOSSIL") : _
  106.                GOTO 204
  107. 108 CALL BreakFileName (ZCallersFile$,Drive$,WasX$,ZWasY$,ZTrue)
  108.     ZCallersFilePrefix$ = WasX$
  109.     ZNodeWorkDrvPath$ = Drive$
  110.     ZArcWork$ = ZNodeWorkDrvPath$ + _
  111.                 "ARCWORK" + _
  112.                 ZNodeFileID$ + _
  113.                 ".DEF"
  114.     IF ZUseBASICWrites THEN _
  115.        ZLocalBksp$ = ZBackArrow$ _
  116.     ELSE ZLocalBksp$ = ZBackSpace$
  117.     ZSysopFullName$ = LEFT$(ZSysopFirstName$ + " " + ZSysopLastName$ + "  ",22) ' KG090402
  118.     ZFastFileSearch = ZFalse
  119.     CALL FindIt (ZFastFileList$)
  120.     IF ZOK THEN _
  121.        CALL FindIt (ZFastFileLocator$) : _
  122.        ZFastFileSearch = ZTrue : _
  123.        CALL BreakFileName (ZFastFileList$, Drive$,WasX$,ZWasY$,ZTrue) : _
  124.        ZFileName$ = Drive$ + WasX$ + "T" + ZWasY$ : _
  125.        CALL FindIt (ZFileName$) : _
  126.        IF ZOK THEN _
  127.           CALL OpenRSeq (ZFileName$, WasX, WasY, 72) : _
  128.           FIELD 2, 72 AS IndexRec$ : _
  129.           GET 2, 1 : _
  130.           ZFastTabs$ = IndexRec$ : _
  131.           CLOSE 2
  132. '
  133. ' *****  INITIALIZE NetBIOS INTERFACE   ****
  134. '
  135.    IF ZNetworkType = 6 AND NOT SubBoard THEN _
  136.       CALL InitIBM
  137. '
  138. ' *****  ESTABLISH NEXT CALLERS FILE RECORD AVAILABLE   ***
  139. '
  140.     CALL SetCall
  141. 112 IF NOT SubBoard THEN _
  142.        ZLocalUser = ZTrue : _
  143.        ZOutTxt$ = ZColorReset$ : _
  144.        ZSubParm = 1 : _
  145.        CALL TPut : _
  146.        ZLocalUser = ZFalse
  147.     ZUpldDriveFile$ = RIGHT$(ZDnldDrives$,1)+":FREESPAC.UPL"
  148.     MinsPerSessionDef = ZMinsPerSession
  149.     MaxPerDayDef = ZMaxPerDay
  150. '
  151. ' *****  TEST FOR MESSAGE FILE PRESENT (Abort IF NOT PRESENT)  ****
  152. '
  153. 135 IF ZCurDef$ = ZOrigCnfg$ THEN _
  154.        ZActiveMessageFile$ = ZMainMsgFile$ : _
  155.        ZActiveUserFile$ = ZMainUserFile$
  156.     GOSUB 4910
  157.     IF ZConfMode THEN _
  158.        GOTO 150
  159.     ZLocalUserMode = (RIGHT$(ZComPort$,1) < "1")
  160.     GET 1,ZNodeRecIndex
  161.     ZWasY$ = MID$(ZMsgRec$,77,2)
  162.     CALL UnPackDate (ZWasY$,WasX,WasL,WasI,ZOldDate$)
  163.     ZOldDate$ = LEFT$(ZOldDate$,6) + MID$(STR$(WasX),2)
  164.     ZHourMinToDropToDos = - (ZHourMinToDropToDos > 0) * ZHourMinToDropToDos
  165.     Hour = INT(ZHourMinToDropToDos / 100)
  166.     WasMN = ZHourMinToDropToDos - Hour * 100
  167.     ZTimeToDropToDos! = Hour * 3600! + WasMN * 60!                   ' KK030901
  168. '
  169. ' ******  TEST FOR TIMED EXIT ACTIVE   *****
  170. '
  171. 140 IF ZHourMinToDropToDos > 0 AND _
  172.        ZOldDate$ <> DATE$ AND _
  173.        TIMER >= ZTimeToDropToDos! AND _
  174.        TIMER < 86340 THEN _
  175.           GOTO 206
  176. '
  177. ' **** GET CURRENT STATUS OF SYSOP AVAIL, SYSOP ANNOY, SYSOP NEXT, & PRINTER
  178. '
  179. 150 IF SubBoard THEN _
  180.        GOSUB 12987 : _
  181.        GOSUB 5135 : _
  182.        GOTO 170
  183.     ZSysopAvail = VAL(MID$(ZMsgRec$,32,2))
  184.     ZSysopAnnoy = VAL(MID$(ZMsgRec$,34,2))
  185.     ZSysopNext = VAL(MID$(ZMsgRec$,36,2))
  186.     MID$(ZMsgRec$,36,2) = STR$(ZFalse)
  187.     ZPrinter = VAL(MID$(ZMsgRec$,38,2))
  188.     IF ZTurnPrinterOff THEN _
  189.        ZPrinter = ZFalse
  190.     ZExitToDoors = (MID$(ZMsgRec$,40,2) = "-1" AND ZNetBaud$ = "")
  191.     ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  192.     ZBPS = VAL(MID$(ZMsgRec$,44,2))
  193.     ZSnoop = VAL(MID$(ZMsgRec$,58,2))
  194.     MID$(ZMsgRec$,57,1) = "I"
  195.     ZPrivateDoor = (MID$(ZMsgRec$,72,2) = "-1")
  196.     IF ZPrivateDoor THEN _
  197.        ZHasPrivDoor = ZTrue
  198.     MID$(ZMsgRec$,72,2) = STR$(ZFalse)
  199.     ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$) ' KG030601
  200.     IF ZExitToDoors OR ZPrivateDoor THEN _
  201.        ZHasDoored = ZTrue : _
  202.        TurboLogon = ZTrue
  203.     PUT 1,ZNodeRecIndex
  204.     GOSUB 12985
  205. '
  206. ' *****  INITIALIZE VOICE SYNTHESIZER   ****
  207. '
  208.     CALL Talk (Init,ZOutTxt$)
  209. '
  210. ' *****  TEST FOR MULTI LINK PRESENT IF NOT COMPAQ COMPUTER   ****
  211. '
  212. 160 CALL MLInit (4)
  213. 170 FOR FunctionKeyIndex = 1 TO 10
  214.        KEY FunctionKeyIndex,""
  215.     NEXT
  216.     CALL LoadNew (ZMsgPtr())
  217. '
  218. ' ******  INITIALIZE FILE MANAGEMENT SYSTEM, CHECK FOR LOCAL BBS MODE
  219. '
  220. 175 GOSUB 5344
  221.     CALL CountLines (MaxEntries)
  222.     REDIM ZCategoryName$(MaxEntries),ZCategoryCode$(MaxEntries),_
  223.           ZCategoryDesc$(MaxEntries) : _
  224.     CALL InitFMS (ZCategoryName$(),ZCategoryCode$(), _
  225.                   ZCategoryDesc$(),ZNumCategories)
  226.     ZMaxMsgLines = ZMaxMsgLinesDef
  227.     ZLocalUser = (ZLocalUser OR ZLocalUserMode)
  228.     IF (NOT ZLocalUser) AND (NOT SubBoard) THEN _
  229.        CALL OpenCom (ZModemInitBaud$,",N,8,1")
  230.     IF NOT SubBoard THEN _
  231.        CALL SetEcho (ZDefaultEchoer$)
  232.     ZNodeWorkFile$ = ZNodeWorkDrvPath$ + _
  233.                       "NODE" + _
  234.                       ZNodeFileID$ + _
  235.                       "WRK"
  236.     ZSecsPerSession! = ZMinsPerSession * 60!                         ' KK030901
  237.     IF NOT ZLocalUserMode THEN _
  238.        IF NOT ZExitToDoors THEN _
  239.           GOTO 180 _
  240.        ELSE IF NOT ZLocalUser THEN _
  241.                GOTO 180
  242.     ZLocalUser = ZTrue
  243.     ZBPS = -6
  244.     ZBaudTest! = 9600
  245.     ZEightBit = ZTrue
  246.     ZSnoop = ZTrue
  247.     IF ZExitToDoors THEN _
  248.        CALL AMorPM : _
  249.        CALL ReadProf : _
  250.        GOTO 410
  251.     GOSUB 178
  252.     GOTO 345
  253. 178 IF NOT SubBoard THEN _                                           ' KG082002
  254.        RETURN                                                        ' KG082002
  255.     IF ZNewUser THEN _                                               ' KG082002
  256.        GOSUB 758                                                     ' KG082002
  257.     IF ZFirstName$ = ZSysopFirstName$ AND _
  258.        ZLastName$ = ZSysopLastName$ THEN _
  259.           RETURN 832 _
  260.     ELSE RETURN 790                                                  ' KG082002
  261. 180 ZSubParm = 2
  262.     CALL Line25
  263.     GOSUB 178
  264. '
  265. ' ******  WAIT FOR THE PHONE TO RING AND ANSWER IT   ****
  266. '
  267.     ZSubParm = 1
  268. 200 ZToggleOnly = ZTrue
  269.     CALL AnswerIt
  270.     GET 1,ZNodeRecIndex
  271.     ZSnoop = VAL(MID$(ZMsgRec$,58,2))
  272.     ZToggleOnly = ZFalse
  273.     IF ZErrCode > 1 THEN _
  274.        GOTO 13000
  275.     IF ZSubParm < 0 THEN _
  276.        GOTO 202
  277.     ON ZSubParm GOTO   410, _   '  1 = ANSWERED PHONE & CARRIER FOUND
  278.                        330, _   '  2 = CARRIER FOUND BEFORE ANSWERING
  279.                        822, _   '  3 = ZSysop GETS SYSTEM NEXT
  280.                      10595, _   '  4 = ANSWERED PHONE BUT NO CARRIER
  281.                      13540, _   '  5 = NOT USED
  282.                        202, _   '  6 = LOCAL SYSOP KEY PRESSED
  283.                        206, _   '  7 = TIME TO DROP TO DOS
  284.                      13538      '  8 = ZNo CALLS! TIME TO RECYCLE
  285. 202 ZFF = -ZSubParm
  286.     ON ZFF GOTO 10595, _   '  -1 = CARRIER DROPPED
  287.                  4770, _   '  -2 = SYSOP INITIATED CHAT
  288.                   205, _   '  -3 = FORCE SYSTEM TO ANSWER THE PHONE
  289.                   204, _   '  -4 = EXIT TO DOS IMMEDEATELY
  290.                   203, _   '  -5 = EXIT TO DOS AFTER CLEAN-UP
  291.                 10698, _   '  -6 = INDICATE ACCESS IS DENIED AND LOGOFF USER
  292.                 10620      '  -7 = UPDATE CALLERS FILE AND LOGOFF USER
  293. 203 CALL MLInit(3)
  294. 204 IF Zfossil THEN _
  295.        CALL FOSExit(ZComPort)
  296.     SYSTEM
  297. 205 ZSubParm = 4
  298.     GOTO 200
  299. 206 CALL TimedOut
  300.     GOTO 203
  301. 330 CALL Carrier
  302.     IF ZSubParm = -1 THEN _
  303.        GOTO 10595
  304.     CALL EofComm (Char)
  305.     IF Char = -1 THEN _
  306.        GOTO 335
  307.     CALL FlushCom (ZWasDF$)
  308.     IF ZSubParm = -1 THEN _
  309.         GOTO 10595
  310.     GOTO 330
  311. 335 ZExitToDoors = ZFalse
  312.     ZPrivateDoor = ZFalse
  313.     IF ZWasCL <> 1 THEN _
  314.        LOCATE 22,34
  315.     WasD$ ="CONNECT" + _
  316.         STR$(ZBaudTest!) + _
  317.         "     "
  318.     GOSUB 1315
  319. '
  320. ' *****  DISPLAY WELCOME LINE  ****
  321. '
  322. 345 LOCATE 24,1
  323.     CALL AMorPM
  324.     ZUserLogonTime! = TIMER
  325.     ZTimeLoggedOn$ = TIME$
  326.     ZLinesPrinted = 0
  327.     ZExpertUserDef = ZExpertUser
  328.     ZExpertUser = ZFalse
  329.     CALL SetExpert
  330.     ZOutTxt$ = ""
  331.     IF NodesInSystem > 1 THEN _
  332.        ZOutTxt$ = " - Node " + ZNodeID$                              ' DA071701
  333.     IF ZReliableMode THEN _
  334.        ZOutTxt$ = ZOutTxt$ + " (Reliable)"                           ' KG071301
  335.     CALL QuickTPut1 ("Welcome to " + ZRBBSName$ + ZOutTxt$)          ' DA071701
  336.     ZTestParity = ZTrue
  337.     ZStopInterrupts = ZTrue
  338.     ZFileName$ = ZPreLog$
  339.     CALL FlushCom (WasX$)
  340.     ZCommPortStack$ = ""
  341. 346 GOSUB 466
  342.     IF ZSubParm = -1 THEN _
  343.        GOTO 13540
  344.     ZFF = ZFalse
  345. '
  346. ' *****  GET USER NAME
  347. ' *****  C - COMMAND FROM NEWUSER REGISTER OPTIONS (CHANGE NAME OR ADDRESS)
  348. '
  349. 400 CALL SkipLine(1)
  350.     ZEscapeInsecure = ZFalse
  351.     ZUpperCase = ZFalse
  352.     ZExpertUser = ZExpertUserDef
  353.     CALL SetExpert
  354.     WasA1$ = "What is your "
  355.     GOSUB 12500
  356.     CALL CommInfo
  357.     IF ZFF THEN _
  358.        ZLogonErrorIndex = 1 : _
  359.        GOTO 10620
  360.     IF ZMinOldCallerBaud > ZBaudTest! THEN _
  361.        CALL QuickTPut (MID$(STR$(ZBaudTest!),2) + " BAUD ACCESS NOT ALLOWED!",2) : _
  362.        ZWasLG$(7) = "OLD CALLER BAUD RESTRICTION" : _
  363.        ZLogonErrorIndex = 7 : _
  364.        GOTO 10620
  365.     TurboLogon = (LEFT$(ZUserIn$(4),1) = "!")
  366.     SkipWelcomeScreen = (LEFT$(ZUserIn$(4),1) = "$")
  367.     ZHomeConf$ = RIGHT$(ZUserIn$(4),LEN(ZUserIn$(4)) _
  368.                      + (TurboLogon OR SkipWelcomeScreen))
  369.     CALL AllCaps(ZHomeConf$)
  370. '
  371. ' *****  CHECK IF SAME USER ON ANOTHER NODE   ***
  372. '
  373. 410 IF ZExitToDoors THEN _
  374.        ZCurDate$ = MID$(ZMsgRec$,119,2) + _
  375.                        "-" + _
  376.                        MID$(ZMsgRec$,121,2) + _
  377.                        "-" + _
  378.                        MID$(ZMsgRec$,123,2) : _
  379.        ZTime$ = MID$(ZMsgRec$,125,2) + _
  380.               ":" + _
  381.               RIGHT$(ZMsgRec$,2) : _
  382.        IF LEFT$(ZTime$,2) < "12" THEN _
  383.           ZTime$ = ZTime$ + _
  384.                  " AM" _
  385.        ELSE ZTime$ = ZTime$ + _
  386.                    " PM"
  387.     NodeIndex = 2
  388.     WasXX = NodesInSystem + 1
  389.     WasX$ = LEFT$(ZActiveUserName$+"  ",30)
  390. 412 IF NodeIndex > WasXX THEN _
  391.        GOTO 430
  392.     GET 1,NodeIndex
  393.     IF INSTR(ZMsgRec$,WasX$) THEN _
  394.        GOTO 420
  395.     NodeIndex = NodeIndex + 1
  396.     GOTO 412
  397. 420 IF MID$(ZMsgRec$,57,1) = "A" THEN _
  398.        ZLogonErrorIndex = 6 : _
  399.        ZWasLG$(6) = ZWasLG$(6) + _
  400.                 LEFT$(ZMsgRec$,25) : _
  401.        ZOutTxt$ = "Name <" + ZActiveUserName$ + "> in use on another node" : _
  402.        CALL RingCaller : _
  403.        GOTO 10620
  404.     ZFirstName$ = LEFT$(ZMsgRec$,INSTR(ZMsgRec$, " ") - 1)
  405.     IF NOT ZPrivateDoor THEN _
  406.        CALL SkipLine (1) : _
  407.        CALL QuickTPut1 (ZFirstName$ + ", welcome back!") : _
  408.        CALL Talk (11,ZOutTxt$)
  409.     IF ZExitToDoors THEN _
  410.        GOTO 457
  411. '
  412. ' *****  TEST FOR REMOTE SYSOP LOGGING ON   ***
  413. '
  414. 430 GET 1,ZNodeRecIndex
  415.     SameUser = (ZActiveUserName$ = LEFT$(ZMsgRec$,LEN(ZActiveUserName$)))
  416. '
  417. ' *****  TEST FOR SYSOP NAME ATTEMPT  ***
  418. '
  419. 445 IF INSTR(ZActiveUserName$,"SYSOP") OR _
  420.        INSTR(ZActiveUserName$,ZSysopFirstName$ + " " + ZSysopLastName$) THEN _
  421.        ZLogonErrorIndex = 2 : _
  422.        GOTO 10620
  423. '
  424. ' *****  REMOVE INVALID CHARACTERS FROM USER NAME  ***
  425. '
  426. 455 CALL BadChar (ZActiveUserName$)
  427.     IF ZActiveUserName$ = "" THEN _
  428.        GOTO 400
  429. '
  430. ' ****  CHECK FOR ACTIVE USER   ***
  431. '
  432. 457 CALL SkipLine (1)
  433.     GOSUB 12840
  434.     GOSUB 12850
  435.     GOSUB 12598
  436.     GOSUB 11482
  437.     CALL CompDate (TodayRegYY,TodayRegMM,TodayRegDD,TodayComputeDate!)
  438.     IF NOT Found THEN _
  439.        GOTO 700
  440.     GOSUB 12984
  441. '
  442. ' *****  ACTIVE USER FOUND  ****
  443. '
  444. 459 GOSUB 9500
  445.     ZLastDateTimeOnSave$ = ZLastDateTimeOn$
  446.     IF ZExitToDoors THEN _
  447.        TempHoldTime! = VAL(LEFT$(ZTime$,2))*3600! + _                ' KK030901
  448.                          VAL(MID$(ZTime$,4,2))*60! : _               ' KK030901
  449.        CALL CheckTime(TempHoldTime!, TempTime!, 2) : _
  450.        MinsInDoors = TempTime! / 60 : _
  451.        CALL TimeRemain (MinsRemaining)
  452.     ZUserFileIndex = LOC(5)
  453.     GOSUB 5135
  454. '
  455. ' ***  COMPUTE THE NUMBER OF DAYS REMAINING UNTIL REGISTRATION EXPIRES **
  456. '
  457.     IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  458.        CALL CompDate (UserRegYY,UserRegMM,UserRegDD,UserComputeDate!) : _
  459.        ZRegDaysRemaining = UserComputeDate! + _
  460.                             ZDaysInRegPeriod - _
  461.                             TodayComputeDate! : _
  462.        CALL ExpireDate (UserComputeDate!,ZDaysInRegPeriod,ZExpirationDate$) _
  463.     ELSE ZDaysInRegPeriod = 0
  464.     IF NOT ZPrivateDoor THEN _
  465.        IF ZRegDaysRemaining < 0 AND ZDaysInRegPeriod > 0 THEN _
  466.        IF ZUserSecLevel > ZExpiredSec THEN _
  467.           CALL QuickTPut1 (ZWasLG$(9) + _
  468.                       " - security reset to " + _
  469.                       STR$(ZExpiredSec)) : _
  470.           CALL BufFile(ZHelpPath$+"RGXPIRD"+ZHelpExtension$,WasX) : _
  471.           ZLogonErrorIndex = 9 : _
  472.           ZUserSecLevel = ZExpiredSec : _
  473.           LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  474.           GOSUB 5135
  475. 460 UserSecLevel$ = STR$(ZUserSecLevel)
  476.     IF ZUserSecLevel > -1 THEN _
  477.        UserSecLevel$ = MID$(UserSecLevel$,2)
  478.     IF ZUserSecLevel >= ZMinLogonSec THEN _
  479.        GOTO 470
  480.     IF NOT ZPrivateDoor THEN _
  481.        GOSUB 465 : _
  482.        CALL DelayTime (8 + ZBPS)
  483.     IF ZLogonErrorIndex < 9 AND _
  484.        ZErrCode = 0 THEN _
  485.        ZLogonErrorIndex = 8
  486.     GOTO 10620
  487. '
  488. ' ***  DISPLAY LOG-ON MESSAGE FOR SPECIFIC SECURITY LEVEL  **
  489. '
  490. 465 TurboLogon = TurboLogon AND (ZExitToDoors OR _
  491.                   (ZUserSecLevel >= ZAllowCallerTurbo))
  492.     IF TurboLogon THEN _
  493.        RETURN
  494.     ZFileName$ = ZWelcomeFileDrvPath$ + _
  495.                  "LG" + _
  496.                  UserSecLevel$ + _
  497.                  ".DEF"
  498.     CALL Graphic (ZUserGraphicDefault$,ZFileName$)
  499. 466 ZStopInterrupts = ZTrue
  500.     ZBypassTimeCheck = ZTrue
  501.     CALL BufFile (ZFileName$,WasX)
  502.     RETURN
  503. 470 GOSUB 12989
  504.     ZWasCI$ = ZCityState$
  505.     CALL Trim (ZWasCI$)
  506.     ZAttemptsAllowed = 4
  507.     ZPswdSave$ = ZPswd$
  508.     TempSysop = (ZUserSecLevel >= ZSysopSecLevel)
  509.     ZMsgPswd = ZFalse
  510.     IF NOT SubBoard THEN _
  511.        ZElapsedTime = CVI(ZElapsedTime$)
  512.     IF (NOT ZExitToDoors) AND _
  513.        (ZCurDate$ <> LEFT$(ZLastDateTimeOn$,8)) AND _
  514.        (ZElapsedTime > 0 OR NOT ZKeepTimeCredits) THEN _
  515.        ZElapsedTime = 0
  516.     IF ZPrivateDoor AND _
  517.        ZTransferFunction = 3 THEN _
  518.        GOSUB 755 : _
  519.        GOTO 800
  520.     IF ZPswdSave$ = SPACE$(LEN(ZPswdSave$)) THEN _
  521.        GOSUB 755 : _
  522.        GOTO 800
  523. 480 GOSUB 5370
  524.     IF ZPrivateDoor OR (ZWasA AND ZEscapeInsecure) OR ZDoorSkipsPswd THEN _
  525.        ZWasZ$ = ZPswdSave$ : _
  526.        ZPswdFailed = 0 : _
  527.        GOTO 644
  528.     ZSubParm = 4
  529.     CALL PassWrd
  530.     LogonPswdFailed = ZPswdFailed                                    ' KG092101
  531.     ZLastIndex = 0
  532. 643 IF NOT LogonPswdFailed THEN _                                    ' KG092101
  533.        GOSUB 41070 _                                                 ' KG092101
  534.     ELSE IF NOT ZExitToDoors THEN _                                  ' KG092101
  535.        ZFirstName$ = "" : _                                          ' KG092102
  536.        GOTO 902                                                      ' KG092101
  537. 644 ZNewUser = ZFalse
  538.     WasWK$ = RIGHT$(STR$(ASC(MID$(ZListNewDate$,2))),2) + _  ' MM
  539.            "/" + _
  540.            RIGHT$(STR$(ASC(MID$(ZListNewDate$,3))),2) + _    ' DD
  541.            "/" + _
  542.            RIGHT$(STR$(ASC(ZListNewDate$)),2)                ' YY
  543.     ZWasLM$ = RIGHT$(WasWK$,2) + _                           ' YY
  544.           LEFT$(WasWK$,2) + _                                ' MM
  545.           MID$(WasWK$,4,2)                                   ' DD
  546.     IF MID$(ZWasLM$,3,1) = " " THEN _
  547.        MID$(ZWasLM$,3,1) = "0"
  548. 655 IF MID$(ZWasLM$,5,1) = " " THEN _
  549.        MID$(ZWasLM$,5,1) = "0"
  550. 660 CALL Muzak (1)
  551.     GOTO 800
  552. 670 GOSUB 12570
  553.     IF Found THEN _
  554.        GOSUB 12984 : _
  555.        RETURN 12595
  556.     RETURN
  557. '
  558. ' ****  ACTIVE USER NOT FOUND (NEWUSER ROUTINE)  ***
  559. '
  560. 700 ZExpertUser = ZFalse
  561.     CALL SetExpert
  562.     IF ZMinNewCallerBaud > ZBaudTest! THEN _
  563.        CALL QuickTPut ("(" + MID$(STR$(ZBaudTest!),2) + " BAUD ACCESS FOR REGISTERED USERS ONLY)",2) : _
  564.        ZWasLG$(7) = "NEW CALLER BAUD RESTRICTION" : _
  565.        ZLogonErrorIndex = 7 : _
  566.        GOTO 10620
  567.     CALL QuickTPut1 ("User not found")
  568.     ZLastIndex = 0
  569.     GOSUB 12558
  570.     IF ZNo THEN _
  571.        GOSUB 12990 : _
  572.        GOTO 400
  573.     CALL Line25
  574.     ZWasZ$ = ZFirstName$
  575.     GOSUB 670
  576.     ZWasZ$ = ZLastName$
  577.     GOSUB 670
  578.     ZWasZ$ = ZActiveUserName$
  579.     GOSUB 670
  580.     TurboLogon = ZFalse
  581. 710 IF ZUserFileIndex = 0 AND NOT ZSurviveNoUserRoom THEN _
  582.        GOTO 13540
  583. 720 GOSUB 5370
  584.     IF ZWasA THEN _
  585.        ZUserSecLevel = ZSysopSecLevel _
  586.     ELSE ZUserSecLevel = ZDefaultSecLevel
  587. 725 IF ZUserSecLevel < ZMinLogonSec THEN _
  588.        ZLogonErrorIndex = 1 : _
  589.        GOTO 460
  590.     IF ZFirstName$ = ZLastName$ THEN _
  591.        CALL QuickTPut1 (ZFirstNamePrompt$+"/"+ZLastNamePrompt$+" cannot be same") : _
  592.        ZLogonErrorIndex = 3 : _
  593.        GOTO 10620
  594.     IF NOT ZRememberNewUsers THEN _
  595.        GOSUB 13700 : _
  596.        ZUserFileIndex = 0 : _
  597.        GOSUB 12960: _
  598.        PrevLastOn$ = "00-00-00": _
  599.        GOTO 735
  600.     ZNewUser = ZTrue
  601.     CALL OpenUser (HighestUserRecord)
  602.     GOSUB 9450
  603.     GOSUB 12630
  604.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = LEFT$("NEWUSER",ZLenHash)
  605.     IF ZStartIndiv > 0 THEN _                                        ' RC050901
  606.        MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
  607.     GOSUB 9440
  608. 730 GOSUB 12960
  609. 735 ZBypassTimeCheck = ZTrue
  610.     GOSUB 758                                                        ' KG082002
  611. 739 CALL QuickTPut1 (ZActiveUserName$ + " from " + ZWasCI$)
  612. 740 ZOutTxt$ = "C)hange "+ZFirstNamePrompt$+"/"+ZLastNamePrompt$+"/"+ZUserLocation$+", D)isconnect, [R]egister"
  613.     GOSUB 12995
  614.     IF ZWasQ = 0 THEN _
  615.        ZWasZ$ = "R" _
  616.     ELSE CALL AllCaps (ZUserIn$(1)) : _
  617.          ZWasZ$ = ZUserIn$(1)
  618.     ZWasS = INSTR("CDR",ZWasZ$)
  619. 745 IF NOT ZRememberNewUsers THEN _
  620.        ON ZWasS GOTO 748,752,754
  621.     ON ZWasS GOTO 747,750,760
  622.     GOTO 740
  623. 747 CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
  624.                            " changed Name/Address",2)
  625.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = STRING$(ZLenHash,0)
  626.     GOSUB 9440
  627.     GOSUB 12991
  628. 748 ZFF = ZFalse
  629.     GOTO 400
  630. '
  631. ' ***  D - COMMAND FROM NEWUSER ROUTINE (DISCONNECT - REFUSE TO REGISTER) **
  632. '
  633. 750 CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
  634.                            " didn't register",2)
  635.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = STRING$(ZLenHash,0)
  636.     GOSUB 9440
  637.     GOSUB 12991
  638. 752 ZFF = ZFalse
  639.     ZUserFileIndex = 0
  640.     GOTO 13540
  641. '
  642. ' *****  GET AND VERIFY PASSWORD   ****
  643. '
  644. 754 CALL QuickTPut1 ("GUEST privileges granted.  Re-register on future calls")  ' DA071701
  645.     ZUserSecSave = ZUserSecLevel
  646.     GOTO 832
  647. 755 IF ZPrivateDoor THEN _
  648.        ZUserIn$ = ZPswd$ : _
  649.        ZWasZ$ = ZUserIn$ : _
  650.        RETURN
  651.     GOSUB 12800
  652.     ZOutTxt$ = "Re-Enter password for Verification"                  ' DA071701
  653.     GOSUB 45010
  654.     SWAP ZWasZ$,ZUserIn$
  655.     CALL AllCaps (ZWasZ$)
  656.     IF ZUserIn$ <> ZWasZ$ THEN _
  657.        CALL QuickTPut1 ("Passwords Don't Match!") : _
  658.        GOTO 755
  659.     RETURN                                                           ' KG082002
  660. 758 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                         ' KG082002
  661.     CALL Line25
  662.     ZFileName$ = ZNewUserFile$
  663.     ZStopInterrupts = ZTrue
  664.     GOSUB 1790
  665.     CALL SkipLine(1)
  666.     RETURN                                                           ' KG082002
  667. '
  668. ' ***  R - COMMAND FROM NEWUSER ROUTINE - REGISTER   **
  669. '
  670. 760 GOSUB 755
  671.     CALL AllCaps (ZWasZ$)
  672.     LSET ZPswd$ = ZWasZ$
  673.     CALL QuickTPut1 ("Please REMEMBER your password")
  674.     ZUserTextColor = 37
  675.     ZTempSecLevel = ZUserSecLevel
  676.     CALL Protocol
  677.     ZUserXferDefault$ = "N"
  678.     ZProtoPrompt$ = "None"
  679.     IF ZNewUserSetsDefaults THEN _                                   ' KG071301
  680.        ZBypassTimeCheck = ZTrue : _
  681.        GOSUB 43000 : _
  682.        ZBypassTimeCheck = ZFalse : _
  683.        CALL Graphic (ZUserGraphicDefault$,ZFileName$) : _
  684.        GOSUB 42805 : _
  685.        GOSUB 42700 _
  686.     ELSE ZUpperCase = ZFalse : _
  687.          ZHiLiteOff = ZTrue : _
  688.          CALL SetGraphic (0,ZUserGraphicDefault$) : _
  689.          ZNulls = ZFalse
  690.     ZPageLength = ZPageLengthDef
  691.     GOSUB 12900
  692.     GOSUB 5135
  693.     CALL DefaultU
  694. 790 IF NOT ZNewUser THEN _
  695.        GOTO 800
  696.     ZFileName$ = ZNewUserQuestionnaire$
  697.     GOSUB 11520
  698.     LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  699.     UserSecLevel$ = STR$(ZUserSecLevel)
  700.     CALL Remove (UserSecLevel$," ")
  701. '
  702. ' ****  LOGIN ALL USERS  ***
  703. '
  704. 800 CALL DoorReturn
  705.     IF ZAdjustedSecurity THEN _
  706.        GOSUB 5135
  707.     IF ZOrigCnfg$ = ZCurDef$ THEN _
  708.        ZMainUserFileIndex = ZUserFileIndex : _
  709.        ZOrigSec = ZUserSecLevel : _
  710.        ZUserSecSave = ZUserSecLevel : _
  711.        ZOrigUserName$ = ZActiveUserName$
  712.     ZTimesLoggedOn = CVI(MID$(ZUserOption$,1,2)) - _
  713.        ((ZOrigCnfg$ <> ZCurDef$ OR NOT SubBoard) AND _
  714.         (NOT ZPrivateDoor) AND (NOT ZExitToDoors))
  715.     GOSUB 9500
  716.     IF (NOT ZExitToDoors) AND (NOT SubBoard) THEN _
  717.        CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
  718.                  " Lvl" + STR$(ZUserSecLevel) + " " + TIME$,2)
  719.     PrevLastOn$ = ZLastDateTimeOn$
  720.     IF ZLocalUser THEN _
  721.        ZTalkToModemAt$ = "9600" : _
  722.        ZBaudParity$ = "9600 BAUD,N,8,1" : _
  723.        ZModemInitBaud$ = "9600" : _
  724.        ZSnoop = ZTrue : _
  725.        ZLineFeeds = ZTrue
  726.     CALL SetCrLf
  727.     CALL SetPrompt
  728.     CALL XferType (2,ZTrue)
  729.     IF NOT SubBoard THEN _
  730.        BoardCheckDate$ = PrevLastOn$
  731.     GOSUB 5370                                                       ' KG060101
  732.     IF ZWasA THEN _                                                  ' KG060101
  733.        ZActiveUserName$ = "SYSOP"                                    ' KG060101
  734.     IF ZExitToDoors OR SubBoard THEN _                               ' KG052701
  735.        GOTO 815
  736.     GOSUB 465
  737.     IF (ZEightBit AND _
  738.        ZAutoDownDesired) OR _
  739.        ZAskID THEN _
  740.        CALL TestUser
  741.     CALL QuickTPut1 ("Logging " + ZActiveUserName$)
  742.     CALL Talk (1,ZOutTxt$)
  743.     CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " Node " + ZNodeID$ + _  ' DA071701
  744.                 ", operating at " + ZBaudParity$)                    ' DA071701
  745.     CALL SkipLine (1)
  746.     Attempts = 0
  747.     ZWasZ$ = ZActiveUserName$ + _                                    ' KG052701
  748.             " on at " + _                                            ' KG052701
  749.             ZCurDate$ + _                                            ' KG052701
  750.             ", " + _                                                 ' KG052701
  751.             ZTime$ + _                                               ' KG052701
  752.             " from " + _                                             ' KG052701
  753.             ZWasCI$ + _                                              ' KG052701
  754.             ", " + _                                                 ' KG052701
  755.             ZBaudParity$                                             ' KG052701
  756.      ZWasNG$ = ZWasZ$ + SPACE$(128 - LEN(ZWasZ$))                    ' KG090401
  757. '
  758. ' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
  759. '
  760.      WasX$ = "{" + _                                                 ' KG052701
  761.           HashValue$ + _                                             ' KG052701
  762.           "/" + _                                                    ' KG052701
  763.           ZIndivValue$ + _                                           ' RC050901
  764.           "}"                                                        ' KG052701
  765.      IF LEN(ZWasZ$) < 65 THEN _                                      ' KG052701
  766.         WasX = 65 _                                                  ' KG052701
  767.      ELSE WasX = LEN(ZWasZ$) + 2                                     ' KG052701
  768.      MID$(ZWasNG$,WasX) = WasX$                                      ' KG052701
  769.      CALL Printit ("  " + ZWasZ$)                                    ' KG052701
  770.      IF ZNewUser THEN _                                              ' KG052701
  771.         CALL UpdtCalr ("NEWUSER",1) : _                              ' KG052701
  772.         CALL Muzak (2)                                               ' KG052701
  773. '
  774. ' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
  775. '
  776.     IF ZEightBit AND ZAutoDownYes THEN _
  777.        ZOutTxt$ = CHR$(9) + _
  778.             ZReturnLineFeed$ + _
  779.             "You may use AUTODOWNLOADing!" : _
  780.        CALL RingCaller : _
  781.        CALL DelayTime(4)
  782. 815 ZDnlds = CVI(ZUserDnlds$)
  783.     ZUplds = CVI(ZUserUplds$)
  784.     IF ZEnforceRatios THEN _
  785.        ZDLToday! = CVS(ZTodayDl$) : _
  786.        ZBytesToday! = CVS(ZTodayBytes$) : _
  787.        ZDLBytes! = CVS(ZDlBytes$) : _
  788.        ZULBytes! = CVS(ZULBytes$)
  789.     IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN  _
  790.        ZDLToday! = 0 : _
  791.        ZBytesToday! = 0
  792.     IF NOT GlobalsSet THEN _
  793.        GlobalsSet = ZTrue : _
  794.        ZGlobalDnlds = ZDnlds : _
  795.        ZGlobalUplds = ZUplds : _
  796.        ZGlobalDLToday! = ZDLToday! : _
  797.        ZGlobalBytesToday! = ZBytesToday! : _
  798.        ZGlobalDLBytes! = ZDLBytes! : _
  799.        ZGlobalULBytes! = ZULBytes!
  800.     'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
  801.     '   IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
  802.     '      ZUplds = ZInitialCredit# _
  803.     '   ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
  804.     '           ZULBytes! = ZInitialCredit#
  805.     GOSUB 827
  806.     LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
  807.                          MID$(ZUserOption$,3)
  808.     LSET ZLastDateTimeOn$ = ZCurDate$ + _
  809.                               " " + _
  810.                               ZTimeLoggedOn$
  811.     MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  812.     IF ZStartIndiv > 0 THEN _
  813.        MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
  814.     LSET ZUserName$ = ZOrigUserName$
  815.     IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
  816.        CALL AutoPage
  817.     IF NOT SubBoard THEN _
  818.        ZOrigUserFileIndex = ZUserFileIndex
  819.     IF NOT ZConfMode THEN _                                          ' KG070601
  820.        IF ZOrigDateTimeOn$ = "" THEN _                               ' KG070601
  821.           ZOrigDateTimeOn$ = ZLastDateTimeOn$ : _                    ' KG070601
  822.           ZOrigTimeLoggedOn$ = ZTimeLoggedOn$ _                      ' KG070601
  823.        ELSE ZLastDateTimeOn$ = ZOrigDateTimeOn$ :                    ' KG070601
  824.             ZTimeLoggedOn$ = ZOrigTimeLoggedOn$                      ' KG070601
  825.     GOSUB 9440
  826.     GOSUB 12991
  827.     CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  828.     IF TurboLogon THEN _
  829.        GOTO 819
  830.     IF SkipWelcomeScreen AND _
  831.        (ZUserSecLevel >= ZAllowCallerTurbo) THEN _
  832.        GOTO 816
  833.     IF NOT SameUser THEN _
  834.        ZStopInterrupts = NOT ZWelcomeInterruptable : _
  835.        ZBypassTimeCheck = ZTrue : _
  836.        ZFileName$ = ZWelcomeFile$ : _
  837.        ZDisplayAsUnit = ZTrue : _
  838.        GOSUB 1790 : _
  839.        ZDisplayAsUnit = ZFalse
  840.     ZBypassTimeCheck = ZFalse
  841.     ZStopInterrupts = ZTrue
  842. 816 IF NOT ZNewUser THEN _
  843.        CALL QuickTPut1 ("Times on:" + STR$(ZTimesLoggedOn) + _
  844.             "  Last was: " + PrevLastOn$)
  845. 817 IF NOT ZRemindFileXfers OR ZNewUser THEN _
  846.        GOTO 818
  847.     ZOutTxt$ = "Files Downloaded:" + _
  848.          STR$(ZDnlds) + _
  849.          "  Uploaded:" + _
  850.          STR$(ZUplds)
  851.     GOSUB 12977
  852.     CALL CheckRatio (ZFalse)
  853. 818 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  854.     IF ZRemindProfile THEN _
  855.        GOSUB 5400 : _
  856.        CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  857. 819 CALL Trim (ZWasCI$)                                              ' KG060101
  858.     IF (ZNodeRecIndex < 2) THEN _
  859.        GOTO 821
  860.     GOSUB 4910
  861.     GOSUB 24000
  862.     GET 1,ZNodeRecIndex
  863.     MID$(ZMsgRec$,1,31) = ZActiveUserName$ + _
  864.                                  SPACE$(31 - LEN(ZActiveUserName$))
  865.     MID$(ZMsgRec$,40,2) = " 0"
  866.     MID$(ZMsgRec$,44,2) = STR$(ZBPS)
  867.     MID$(ZMsgRec$,55,2) = " 0"
  868.     MID$(ZMsgRec$,57,1) = "A"
  869.     MID$(ZMsgRec$,60,5) = ZTalkToModemAt$ + _
  870.                                  SPACE$(5 - LEN(ZTalkToModemAt$))
  871.     MID$(ZMsgRec$,72,2) = " 0"
  872.     MID$(ZMsgRec$,93,24) = ZWasCI$ + _
  873.                                   SPACE$(24)
  874.     PUT 1,ZNodeRecIndex
  875.     GOSUB 12985
  876. 821 IF ZExitToDoors THEN _
  877.        IF ZTransferFunction = 3 THEN _
  878.           ZNewUser = ZTrue : _
  879.           TurboLogon = ZFalse : _
  880.           SameUser = ZFalse : _
  881.           ZTransferFunction = 0 : _
  882.           GOTO 832 _
  883.        ELSE GOTO 832
  884.     GOSUB 1241
  885.     IF (SubBoard AND (ZOrigMsgFile$ = ZActiveMessageFile$)) _
  886.        OR ((ZUserSecLevel > ZMaxRegSec) AND (NOT ZNewUser)) THEN _
  887.        GOTO 832
  888.     ZWasZ$ = ZRegProgram$
  889.     ZTransferFunction = 3
  890.     CALL DoorExit (ZFalse)                                           ' KG032502
  891.     ZTransferFunction = 0
  892.     GOTO 832
  893. '
  894. ' ****  ESC PRESSED ON LOCAL CONSOLE ENTERS HERE   ***
  895. '
  896. 822 LOCATE 24,1
  897.     CALL TakeOffHook
  898.     ZLocalUser = ZTrue
  899.     ZSnoop = ZTrue
  900.     ZSysop = ZTrue                                                   ' DR081801
  901.     ZBPS = -6
  902.     CALL CommInfo
  903.     CALL Muzak (2)
  904.     IF NOT ZEscapeInsecure THEN _
  905.        GOTO 345
  906.     ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$
  907.     ZFirstName$ = ZSysopPswd1$
  908.     ZLastName$ = ZSysopPswd2$
  909.     ZUserLogonTime! = TIMER
  910.     ZTimeLoggedOn$ = TIME$
  911.     ZLinesPrinted = 0
  912.     GOTO 457
  913. 825 WasX = (ZMaxPerDay - ZMinsPerSession)
  914.     WasX = -WasX * (WasX > 0)    ' extra from daily max
  915.     ZWasQ! = WasX + ZMinsPerSession + (ZMaxPerDay > 0) * ZElapsedTime
  916.     IF ZWasQ! > ZMinsPerSession THEN _
  917.        ZWasQ! = ZMinsPerSession
  918.     ZSecsPerSession! = ZWasQ! * 60 + ZTimeCredits!
  919.     RETURN
  920. 827 IF ZLastMsgRead > HighMsgNumber THEN _
  921.        ZLastMsgRead = 0 : _
  922.        MID$(ZUserOption$,3,2) = MKI$(0)
  923.     RETURN
  924. 832 IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  925.        IF ZRegDaysRemaining <= ZDaysToWarn AND _
  926.           ZRegDaysRemaining > 0 AND ZUserSecLevel > ZExpiredSec THEN _ ' KG071101
  927.              CALL QuickTPut1 ("Registration EXPIRES in" + _
  928.                        STR$(ZRegDaysRemaining) + " days!") : _
  929.              CALL BufFile(ZHelpPath$+"RGXPIRE"+ZHelpExtension$,WasX) : _
  930.              IF NOT ZOk THEN CALL DelayTime (5)
  931.     IF (NOT ZReqQuesAnswered) AND _
  932.        ZReqQues$ <> "" THEN _
  933.          ZFileName$ = ZReqQues$ : _
  934.          GOSUB 11520 : _
  935.          IF ZOK THEN _
  936.             ZReqQuesAnswered = ZTrue                                 ' KG052701
  937. 842 GOSUB 825
  938.     ZSysop = (ZUserSecLevel >= ZSysopSecLevel)
  939.     GOSUB 12987
  940.     IF SubBoard THEN _
  941.        GOTO 850
  942.     GOSUB 12986
  943.     GOSUB 23000
  944.     CallsToDate! = CallsToDate! + 1 + (ZSysop OR ZHasDoored)
  945.     GOSUB 24000
  946.     GOSUB 12985
  947. 850 ZSubParm = 2
  948.     CALL Line25
  949.     CALL SkipLine (1)
  950.     IF TurboLogon THEN _
  951.        ZBulletinSave$ = ZBulletinMenu$ : _
  952.        GOSUB 9750 : _
  953.        GOTO 900
  954.     CALL CountNewFiles (BoardCheckDate$,ZMsgPtr(),LastNew,ZOutTxt$)
  955.     IF ZFMSDirectory$ <> "" THEN _
  956.        CALL QuickTPut1 (ZOutTxt$ + STR$(LastNew) + " NEW file(s) since last on") _
  957.     ELSE GOTO 852
  958.     IF ZNewUser OR LastNew < 1 OR NOT ZNewFilesCheck THEN _
  959.        GOTO 852
  960.     WasL = LEN(ZDnldDrives$)
  961.     SecNum = 19
  962.     IF (NOT ZSkipFilesLogon) AND _
  963.        ZUserSecLevel >= ZOptSec(SecNum) THEN _
  964.           ZOutTxt$ = "Review new files to download ([Y],N)" : _
  965.           GOSUB 12999 : _
  966.           IF NOT ZNo THEN _
  967.              ZLastIndex = 3 : _
  968.              ZAnsIndex = 1 : _
  969.              ZWasQ = 3 : _
  970.              ZUserIn$(2) = MID$(BoardCheckDate$,1,2) + _
  971.                      MID$(BoardCheckDate$,4,2) + _
  972.                      MID$(BoardCheckDate$,7,2) : _
  973.              ZWasY$ = ZUserIn$(3) : _
  974.              CALL BreakFileName (ZFMSDirectory$,DR$,ZWasY$,WasX$,ZFalse) : _
  975.              ZUserIn$(3) = ZWasY$ : _
  976.              TimeLockExempt = ZTrue : _
  977.              GOSUB 20185 : _
  978.              ZLastIndex = 0 : _
  979.              TimeLockExempt = ZFalse
  980. 852 ZStopInterrupts = ZFalse
  981.     ZSysop = (ZUserSecLevel >= ZSysopSecLevel)
  982.     IF ZUserSecLevel < ZOptSec (2) OR _
  983.        ZActiveBulletins < 1 OR _
  984.        ZSysop OR _
  985.        SameUser THEN _
  986.           GOTO 900
  987.     IF ZBulletinMenu$ = ZBulletinSave$ THEN _
  988.         GOTO 900
  989.     ZBulletinSave$ = ZBulletinMenu$
  990. 855 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  991.     IF ZBulletinsOptional AND NOT ZNewUser THEN _
  992.        GOTO 856
  993.     ZStopInterrupts = ZTrue
  994.     ZNewUser = ZFalse
  995.     GOSUB 9700
  996.     ZStopInterrupts = ZFalse
  997.     GOTO 900
  998. 856 IF NOT ZCheckBulletLogon THEN _
  999.        ZAnsIndex = 0 : _
  1000.        GOSUB 9760 : _
  1001.        GOTO 900
  1002.     CALL SkipLine (1)
  1003.     ZOutTxt$ = "Skip the" + _
  1004.          STR$(ZActiveBulletins) + _
  1005.          " bulletins (Y,[N])"
  1006.     GOSUB 12999
  1007.     IF ZYes THEN _
  1008.        GOTO 900
  1009. 860 ZNewUser = ZFalse
  1010.     GOSUB 9700
  1011. 900 ZNewUser = ZFalse
  1012.     ActionFlag = (ZLogonMailLevel$ = "S")
  1013.     LogonMailNew = (ZLogonMailLevel$ = "N")
  1014.     GOSUB 1895
  1015.     IF ZActiveUserName$ = "SYSOP" AND NOT ZSysop THEN _
  1016.        ZActiveUserName$ = ZOrigUserName$
  1017.     LogonMailNew = ZFalse
  1018.     ZSubParm = 2
  1019.     CALL Line25
  1020.     ZSection$ = "    "
  1021.     ZOutTxt$ = ""
  1022.     IF (NOT ZConfMode) AND (NOT SubBoard) AND NOT TurboLogon THEN _
  1023.        MailCheckConfirm = ZTrue : _
  1024.        ZNonStop = ZTrue : _
  1025.        GOSUB 5800
  1026.     MailCheckConfirm = ZFalse
  1027.     ZWasQ! = MinsInDoors * 60
  1028. 902 IF LogonPswdFailed THEN _                                        ' KG092101
  1029.        ZExitToDoors = ZFalse : _                                     ' KG091601
  1030.        CALL UpdateU (ZTrue) : _                                      ' KG091601
  1031.        ZLogonErrorIndex = 4 : _                                      ' KG091601
  1032.        GOTO 10620                                                    ' KG091601
  1033.     IF ZExitToDoors and ZDooredTo$ <> "" THEN _                      ' ML082001
  1034.        CALL BufFile (ZOutTxt$(7),WasX)                               ' ML082001
  1035.     ZExitToDoors = ZFalse
  1036.     GOSUB 2350
  1037.     IF NOT ZPrivateDoor THEN _
  1038.        GOTO 955
  1039.     GOSUB 20165
  1040.     CALL SetSection
  1041.     ZPrivateDoor = ZFalse
  1042.     GOTO 1205
  1043. 955 IF NOT TurboLogon THEN _
  1044.        GOSUB 4850
  1045.     TurboLogon = ZFalse
  1046. '
  1047. ' *                           COMMAND PROCESSING
  1048. '
  1049. 1200 CLOSE 1
  1050.      GOSUB 1280
  1051. 1205 IF ZSubParm < 0 THEN _
  1052.         GOTO 202
  1053.      ZSubParm = 1
  1054.      ZStopInterrupts = ZFalse
  1055.      ZNonStop = (ZPageLength < 1)
  1056.      ZWasQ = 0
  1057.      IF ConfMailJoin OR (ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN") THEN _ ' TC051701
  1058.         TurboLogon = (NOT ConfMailJoin) : _
  1059.         ConfMailJoin = ZFalse : _
  1060.         ZFF = 8 : _
  1061.         ZUserIn$(2) = ZHomeConf$ : _
  1062.         ZHomeConf$ = "" : _
  1063.         ZWasQ = 1 : _
  1064.         ZAnsIndex = 1 : _
  1065.         ZLastIndex = 2 : _
  1066.         ZStoreParseAt = 1 : _
  1067.         ZLastCommand$ = "MJ" : _                                     ' KG021502
  1068.         GOTO 1240
  1069.      CALL SkipLine (1)
  1070. 1210 GOSUB 41000
  1071.      IF ZAnsIndex < ZLastIndex THEN _
  1072.         GOTO 1232
  1073.      CALL Talk (10,ZOutTxt$)
  1074.      CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081702
  1075.      IF ZExpertUser THEN _
  1076.         GOTO 1230
  1077. 1212 ZLinesPrinted = -ZMenusCanPause * ZLinesPrinted
  1078.      IF ZCustomPUI THEN _
  1079.         GOTO 1230
  1080.      IF ZSubSection < ZBegFile THEN _
  1081.         IF ZUserSecLevel >= ZSysopMenuSecLevel THEN _
  1082.            ZFileName$ = ZMenu$(1) : _
  1083.            GOSUB 43025
  1084.      ZFileName$ = ZMenu$(ZMenuIndex)
  1085.      ZDeleteInvalid = ZTrue
  1086.      GOSUB 43025
  1087.      ZDeleteInvalid = ZFalse
  1088. 1230 CALL Line25                                                     ' KG081404
  1089.      IF ZConfMode THEN _
  1090.         ZOutTxt$ = ZConfName$ + ":" : _                              ' KG081702
  1091.         GOSUB 12978 : _                                              ' KG081702
  1092.         CALL Talk (65,ZConfName$)
  1093.      CALL DispTimeRemain (MinsRemaining)                             ' KG081702
  1094.      IF ZMenuIndex = 6 THEN _
  1095.         ZSubParm = 1 : _
  1096.         CALL Library
  1097.      CALL Talk (ZMenuIndex, ZOutTxt$)
  1098. 1232 MID$(ZLastCommand$,2,1) = " "                                   ' KG052901
  1099.      IF ZCustomPUI THEN _                                            ' KG052901
  1100.         CALL UserFace (ZUserGraphicDefault$) : _
  1101.         GOSUB 12997 : _
  1102.         GOTO 1235                                                    ' KG052901
  1103.      ZOutTxt$ = ZCmdPrompt$
  1104.      GOSUB 12930
  1105.      IF ZWasQ = 0 THEN _
  1106.         GOTO 1230
  1107. 1235 ZWasZ$ = ZUserIn$(ZAnsIndex)
  1108.      IF ZWasZ$ = SPACE$(LEN(ZWasZ$)) THEN _
  1109.         GOTO 1230
  1110.      CALL SearchCmd (ZSubSection,ZFF)
  1111.      IF ZFF < 1 THEN _
  1112.         CALL QuickTPut1 ("Unknown command <"+ZWasZ$+">") : _
  1113.         CALL FlushKeys : _
  1114.         GOTO 1230
  1115.      CALL Talk (65,"OPTION "+ZWasZ$+" SELECTED")
  1116. 1240 IF ZUserSecLevel < ZOptSec(ZFF) THEN _
  1117.        ZViolation$ = ZSection$ + _
  1118.                      " " + _
  1119.                      ZWasZ$ : _
  1120.         GOSUB 1380 : _
  1121.         GOTO 1205
  1122.      IF ZFF > 39 THEN _
  1123.         ZDirExtension$ = ZLibDirExtension$ _
  1124.      ELSE ZDirExtension$ = ZMainDirExtension$
  1125.         ON ZFF GOSUB _
  1126.                  1400, _      ' 1  A)nswer questionnaire 1
  1127.                  9700, _      ' 2  B)ulletins
  1128.                  1800, _      ' 3  C)omments
  1129.                  10970, _     ' 4  D)oor (exit to)
  1130.                  2000, _      ' 5  E)nter a message
  1131.                  1275, _      ' 6  F)ile system (exit to)
  1132.                  1760, _      ' 7  I)nitial welcome redisplayed
  1133.                  5300, _      ' 8  J)oin a conference
  1134.                  3900, _      ' 9  K)ill a message
  1135.                  4700, _      '10  O)perator page
  1136.                  1900, _      '11  P)ersonal mail (look for)
  1137.                  4330, _      '12  R)ead messages
  1138.                  4340, _      '13  S)can message headers
  1139.                  4320, _      '14  T)opic msg scan
  1140.                  1285, _      '15  U)tilities (exit to)
  1141.                  5800, _      '16  V)iew a conference
  1142.                  9800, _      '17  W)ho's on other nodes displayed
  1143.                  1283, _      '18  @)Library (exit to) 18
  1144.                 20160, _      '19  D)ownload
  1145.                 10570, _      '20  G)oodbye
  1146.                 20155, _      '21  L)ist
  1147.                 20185, _      '22  N)ew
  1148.                 20180, _      '23  P)ersonal files
  1149.                 20175, _      '24  S)can
  1150.                 20170, _      '25  U)pload
  1151.                 20140, _      '26  V)iew ARC Contents
  1152.                  5500, _      '27  B)aud rate change 300==>450 1
  1153.                  9100, _      '28  C)lock (time & time on)
  1154.                  42850, _     '29  E)cho selection
  1155.                  42800, _     '30  F)ile transfer protocol
  1156.                  43000, _     '31  G)raphics
  1157.                  5200, _      '32  L)ines per page
  1158.                  10925, _     '33  M)essage margin
  1159.                  5110, _      '34  P)assword change
  1160.                  5400, _      '35  R)eview preferences
  1161.                  4850, _      '36  S)tatistics displayed
  1162.                  1500, _      '37  T)oggle
  1163.                  10090, _     '38  U)serlog displayed 12
  1164.                  30000, _     '39  A)rchive a Library disk 1
  1165.                  30100, _     '40  C)hange a Library disk
  1166.                  30200, _     '41  D)ownload Library files
  1167.                  10570, _     '42  G)oodbye
  1168.                  20155, _     '43  L)ist a Library directory
  1169.                  20175, _     '44  S)can a Library disk directory
  1170.                  20140, _     '45  V)iew arc contents 7
  1171.                  1325, _      '45  H)elp 1
  1172.                  1330, _      '46  ?)help
  1173.                  1250, _      '49  Q)uit
  1174.                  4240, _      '50  X)expert toggle on/off 4
  1175.                  10070, _     '51  1) List comments file 1
  1176.                  10090, _     '52  2) List callers file
  1177.                  10390, _     '53  3) Recover a message
  1178.                  10530, _     '54  4) Erase comments
  1179.                  11000, _     '55  5) User file maintenance
  1180.                   4130, _     '56  6) Toggle page bell on/off
  1181.                  10930        '57  7) Exit to DOS 2.x or above 7
  1182.      GOTO 1205
  1183. '
  1184. ' ***       NEWS file scan        ***
  1185. '
  1186. 1241 NewsDate# = VAL(MID$(BoardCheckDate$,4,2)) + _
  1187.         (100 * VAL(MID$(BoardCheckDate$,1,2))) + _                   ' LP01NEWS
  1188.         (10000# * (1900 + VAL(MID$(BoardCheckDate$,7,2))))           ' LP01NEWS
  1189.      GOTO 1243
  1190. 1242 NewsDate# = 0
  1191. 1243 ZFileName$ = ZNewsFileName$
  1192.      CALL RBBSFind (ZFileName$,WasZ,WasY,ZMsgPtr,WasD)               ' LP01NEWS
  1193.      IF WasZ <> 0 THEN _
  1194.         RETURN
  1195.      FDate# = WasD + (100 * ZMsgPtr) + (10000# * (WasY + 1980))      ' LP01NEWS
  1196.      IF NewsDate# > FDate# THEN _
  1197.         RETURN
  1198.      IF TurboLogon THEN _
  1199.         CALL QuickTPut1("NEWS file updated since last call") : _
  1200.         RETURN
  1201.      ZStopInterrupts = ZFalse
  1202.      ZNonStop = (ZPageLength < 1)
  1203.      GOSUB 1790
  1204.      WasZ = 0
  1205.      RETURN                                                          ' LP01NEWS
  1206. '
  1207. ' ****           QUIT COMMAND (GLOBAL)              ***
  1208. '
  1209. 1250 IF ZExpertUser THEN _
  1210.         ZOutTxt$ = ZQuitPromptExpert$ _
  1211.      ELSE ZOutTxt$ = ZQuitPromptNovice$
  1212.      ZStackC = ZTrue
  1213.      GOSUB 12930
  1214.      IF ZWasQ = 0 THEN _
  1215.         ZUserIn$(ZAnsIndex) = "M"
  1216.      ZWasZ$ = ZUserIn$(ZAnsIndex)
  1217.      CALL AllCaps (ZWasZ$)
  1218.      IF ZWasZ$ = "C" THEN _
  1219.         ZWasZ$ = "M" : _
  1220.         GOTO 5323
  1221.      IF ZWasZ$ <> SPACE$(LEN(ZWasZ$)) THEN _
  1222.         ON INSTR(ZQuitList$,ZWasZ$) GOTO 1275,1280,1285,10570,1283
  1223.      GOTO 1250
  1224. 1275 ZMenuIndex = 3
  1225.      GOTO 1295
  1226. 1280 ZMenuIndex = 2
  1227.      GOTO 1295
  1228. 1283 ZMenuIndex = 6
  1229.      ZActiveFMSDir$ = ""
  1230.      GOTO 1295
  1231. 1285 ZMenuIndex = 4
  1232. 1295 CALL SetSection
  1233.      RETURN
  1234. 1300 CALL QuickTPut1 ("Message base " + ZConfName$)
  1235.      RETURN
  1236. '
  1237. ' **** COMMON LOCAL DISPLAY PRINT  ***
  1238. '
  1239. 1315 NumReturns = 1
  1240. 1320 CALL LPrnt(WasD$,NumReturns)
  1241.      RETURN
  1242. '
  1243. ' ******            HELP (GLOBAL)           ****
  1244. '
  1245. 1325 CALL ViewHelp (ZSubSection,ZUserGraphicDefault$, _
  1246.                 MID$("MAINFILEUTILMAINLIBR",4 * ZMenuIndex - 7,4))
  1247.      IF ZSubParm = -1 THEN _
  1248.         RETURN 10595
  1249.      RETURN
  1250. 1330 IF ZExpertUser THEN _
  1251.         RETURN 1212
  1252.      GOTO 1325
  1253. '
  1254. ' *****  RECORD SECURITY VIOLATIONS   ****
  1255. '
  1256. 1380 CALL SecViolation
  1257.      IF NOT ZDenyAccess THEN _
  1258.         RETURN
  1259. 1386 CALL DenyAccess
  1260.      GOTO 10620
  1261. 1397 ZOutTxt$ = "Sorry, " + _
  1262.           ZFirstName$ + _
  1263.           ", " + _
  1264.           ZOutTxt$
  1265.      GOTO 12975
  1266. '
  1267. ' ***  A - answer questionnaire
  1268. '
  1269. 1400 WasA1$ = ZAnsMenu$
  1270.      CALL Talk (13,ZOutTxt$)
  1271.      ReturnToPrompt = (ZWasQ > 1)
  1272. 1401 ZStackC = ZTrue
  1273.      CALL SubMenu ("Which questionnaire(s), L)ist" + ZPressEnterExpert$, _
  1274.         WasA1$,ZQuesPath$,".DEF","",ZUserGraphicDefault$,ZTrue,ZFalse,ZTrue,"",WasX) ' KG032502
  1275.      IF ZWasQ = 0 THEN _
  1276.         RETURN
  1277.      IF ZSubParm = -1 THEN _
  1278.         RETURN 10595
  1279.      QuestHold$ = ZWasZ$
  1280.      GOSUB 11520
  1281.      CLOSE 2
  1282.      CALL UpdtCalr (QuestHold$ + " questionnaire " + _
  1283.         MID$("answeredaborted",1 - 8 * ZQuestAborted,8),2)
  1284.      IF ReturnToPrompt THEN _
  1285.         RETURN
  1286.      GOTO 1401
  1287. '
  1288. ' *****    Toggle COMMAND (UTILITIES)     ****
  1289. '
  1290. 1500 IF ZAnsIndex < ZLastIndex THEN _
  1291.         GOTO 1510
  1292.      ZOutTxt$ = "A)utodwnld   B)ullet  C)ase     F)ile   H)ilite"
  1293.      CALL ColorPrompt (ZOutTxt$)
  1294.      CALL QuickTPut1 (ZOutTxt$)
  1295.      ZOutTxt$ = "L)ine feeds  N)ulls   T)urboKey X)pert  !)bell"
  1296.      CALL ColorPrompt (ZOutTxt$)
  1297.      CALL QuickTPut1 (ZOutTxt$)
  1298.      ZOutTxt$ = "Toggle which options on/off?" + ZPressEnter$
  1299. 1510 ZStackC = ZTrue                                                 ' KG081301
  1300.      GOSUB 12930
  1301.      IF ZWasQ=0 THEN _
  1302.         RETURN
  1303.      ZWasZ$ = ZUserIn$(ZAnsIndex)
  1304.      CALL AllCaps (ZWasZ$)
  1305.      ZFF = INSTR("ABCFHLNTX!",ZWasZ$)
  1306.      IF ZFF < 1 THEN _
  1307.         GOTO 1500
  1308.      CALL Toggle (ZFF)
  1309.      GOSUB 12997
  1310.      GOTO 1500
  1311. '
  1312. ' ****  I - COMMAND FROM MAIN MENU (DISPLAY INITIAL WELCOME)  ***
  1313. '
  1314. 1760 ZFileName$ = ZPreLog$
  1315.      GOSUB 1790
  1316.      ZFileName$ = ZWelcomeFile$
  1317.      GOSUB 1790
  1318.      RETURN
  1319. 1790 CALL Graphic (ZUserGraphicDefault$,ZFileName$)
  1320.      CALL BufFile (ZFileName$,WasX)
  1321.      CALL Carrier
  1322.      IF ZSubParm = -1 THEN _
  1323.         RETURN 10595
  1324.      RETURN
  1325. '
  1326. ' ***  C - COMMAND FROM MAIN MENU (LEAVE COMMENT FOR SYSOP)   **
  1327. '
  1328. 1800 MsgTo$ = "SYSOP"
  1329.      OrigSubject$ = "COMMENT"
  1330.      Subject$ = OrigSubject$
  1331.      GOSUB 1893
  1332.      IF (ActiveMessages >= MaxMsgs OR _
  1333.         ((NOT ZMsgsCanGrow) AND _
  1334.         (ZNextMsgRec + 5 > HighestMsgRecord)) OR _
  1335.         NOT ZCmntsAsMsgs ) THEN _
  1336.         ZOutTxt$ = "Want a Reply?  Use "+MID$(ZAllOpts$,5,1) + _
  1337.                    " instead.  Leave a comment? (Y/[N])" : _
  1338.         GOSUB 12999 : _
  1339.         IF NOT ZYes THEN _
  1340.            CALL SkipLine (1) : _
  1341.            RETURN _
  1342.         ELSE ZSysopComment = ZTrue : _
  1343.              GOTO 2007
  1344.      ZSysopComment = ZFalse
  1345.      SysopMsg = ZTrue
  1346.      ZMsgHeader$ = "comment"
  1347.      MsgFrom$ = ZActiveUserName$
  1348.      GOTO 2010
  1349. 1850 WasBX = &H3
  1350.      ZWasEN$ = ZCmntsFile$
  1351.      GOSUB 12992
  1352.      CALL OpenWorkA (ZCmntsFile$)
  1353.      ZOutTxt$ = ZFirstName$ + _
  1354.           ", Thanks for comments!"
  1355.      GOSUB 12976
  1356.      CALL AMorPM
  1357.      CALL PrintWorkA (ZActiveUserName$+" "+ZCurDate$+" "+ZTime$+" Node "+ZNodeID$)
  1358.      FOR WasX = 1 TO ZLinesInMsg
  1359.         CALL PrintWorkA (ZOutTxt$(WasX))
  1360.      NEXT
  1361.      CALL PrintWorkA (ZCarriageReturn$)
  1362.      CLOSE 2
  1363.      IF ZErrCode <> 0 THEN _
  1364.         ZWasEL = 1850 : _
  1365.         GOTO 13000
  1366.      WasBX = &H3
  1367.      ZWasEN$ = ZCmntsFile$
  1368.      GOSUB 12993
  1369.      CALL UpdtCalr ("Left comment",1)
  1370.      REDIM ZOutTxt$(ZMsgDim)
  1371.      RETURN
  1372. '
  1373. ' ****  P - COMMAND FROM MAIN MENU (DISPLAY PERSONAL MAIL)  ****
  1374. '
  1375. 1893 ActionFlag = ZTrue
  1376.      GOTO 1897
  1377. 1895 IF TurboLogon THEN _
  1378.         RETURN
  1379.      ZUserIn$(0) = LEFT$("NEW ",-4*LogonMailNew)
  1380. 1897 IF ZActiveMessageFile$ = ZPrevBase$ THEN _
  1381.         ActionFlag = ZFalse : _
  1382.         RETURN
  1383. 1900 GOSUB 5344
  1384.      IF ZPrivateDoor THEN _
  1385.         ActionFlag = ZTrue
  1386.      ZPrevBase$ = ZActiveMessageFile$
  1387.      ShowActive = ZFalse
  1388.      IF NOT ActionFlag THEN _
  1389.         CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
  1390.         ShowActive = ZTrue _
  1391.      ELSE CALL QuickTPut ("Loading messages",0)
  1392.      WasA1$ = ""                                                     ' KG030801
  1393.      MsgCt = 0                                                       ' KG030203
  1394.      MsgsFromUser = ZFalse
  1395.      ActiveMessages = 0
  1396.      MailReported = ActionFlag
  1397.      FirstOld = ZTrue
  1398.      GOSUB 23000
  1399.      MsgRec = FirstMsgRecord
  1400.      MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
  1401.      IF MaxMsgs > WasMM THEN _
  1402.         MaxMsgs = WasMM
  1403.      REDIM ZMsgPtr(MaxMsgs,2)
  1404.      NumDots = 0
  1405. 1905 GET 1,MsgRec
  1406.      CALL CheckInt (MID$(ZMsgRec$,117,4))
  1407.      IF ZErrCode <> 0 THEN _
  1408.         ZWasEL = 1905 : _
  1409.         GOTO 13000
  1410.      NumRecsInMsg = VAL(MID$(ZMsgRec$,117,4))
  1411.      IF NumRecsInMsg < 1 THEN _
  1412.         NumRecsInMsg = 1
  1413. 1906 IF ActionFlag OR (FirstOld AND NOT MailReported) THEN _
  1414.         CALL MarkTime (NumDots)
  1415.      CALL Carrier
  1416.      IF ZSubParm = -1 THEN _
  1417.         RETURN 10595
  1418. 1910 IF MsgRec >= ZNextMsgRec THEN _
  1419.         LowMsgNumber = ZMsgPtr(1,2) : _
  1420.         GOTO 1950
  1421. 1915 IF MID$(ZMsgRec$,116,1) <> ZActiveMessage$ THEN _
  1422.         GOTO 1946
  1423.      WasX$ = MID$(ZMsgRec$,121,2)
  1424.      IF WasX$ <> "  " THEN _
  1425.         IF CVI(WasX$) > ZUserSecLevel THEN _
  1426.            GOTO 1945
  1427.      IF ActionFlag THEN _
  1428.         GOTO 1935
  1429. '
  1430. ' ** ALLOW USERS WITH NAMES LONGER THAN 22 CHARS TO RECEIVE PRIVATE MAIL *
  1431. '
  1432. 1920 GOSUB 4660
  1433.      IF NOT UserInHeader THEN _
  1434.         GOTO 1945
  1435.      IF MsgToCaller THEN _
  1436.         GOTO 1925
  1437.      GOTO 1940
  1438. 1925 ZWasA = VAL(MID$(ZMsgRec$,2,4))
  1439.      IF LogonMailNew THEN _
  1440.         IF ZWasA <= ZLastMsgRead THEN _
  1441.            GOTO 1935
  1442.      IF NOT ShowActive THEN _
  1443.         GOTO 1930
  1444.      MailReported = ZTrue
  1445.      FirstNew = (ZWasA > ZLastMsgRead)
  1446.      IF FirstNew THEN _
  1447.         MsgCt = 0 : _                                                ' KG030203
  1448.         CALL SkipLine (1) : _
  1449.         CALL QuickTPut1 ("NEW Mail for YOU (* = Private)") _
  1450.      ELSE IF FirstOld THEN _
  1451.              CALL SkipLine (1) : _
  1452.              CALL QuickTPut1 ("OLD Mail for YOU (* = Private)") : _
  1453.              FirstOld = ZFalse
  1454.      ShowActive = NOT FirstNew
  1455. 1930 CALL QuickTPut (LEFT$(ZMsgRec$,5),0)
  1456.      MsgCt = MsgCt + 1                                               ' KG030203
  1457.      IF MsgCt MOD 15 = 0 THEN _                                      ' KG030203
  1458.         CALL SkipLine (1) : _                                        ' KG030203
  1459.         CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                     ' KG030203
  1460. 1935 IF NOT MsgFromCaller THEN _
  1461.         GOTO 1945
  1462. 1940 MsgsFromUser = MsgsFromUser + 1                                 ' KG080501
  1463.      WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5)                             ' KG080501
  1464. 1945 ActiveMessages = ActiveMessages + 1
  1465.      ZMsgPtr(ActiveMessages,1) = MsgRec
  1466.      ZMsgPtr(ActiveMessages,2) = VAL(MID$(ZMsgRec$,2,4))
  1467. 1946 MsgRec = MsgRec + NumRecsInMsg
  1468.      GOTO 1905
  1469. 1950 IF NOT MailReported THEN _
  1470.         ZOutTxt$ = "Sorry, " + _
  1471.              ZFirstName$ + _
  1472.              ", No " + ZUserIn$(0) + "mail for you" : _              ' DA071701
  1473.         GOSUB 12975
  1474.      IF MsgsFromUser = 0 OR NOT ZMsgReminder THEN _
  1475.         GOTO 1961
  1476.      IF ActionFlag THEN _
  1477.         GOTO 1961
  1478.      ZOutTxt$ = "Mail you left"
  1479.      GOSUB 12976
  1480. 1960 WasK = 1
  1481.      FOR MsgCt = 1 TO MsgsFromUser                                   ' KG030203
  1482.         ZOutTxt$ = MID$(WasA1$,WasK,5)                               ' KG030801
  1483.         WasK = WasK + 5
  1484.         GOSUB 12978
  1485.         IF MsgCt MOD 15 = 0 THEN _                                   ' KG030203
  1486.            CALL SkipLine (1) : _                                     ' KG030203
  1487.            CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                  ' KG030203
  1488.      NEXT
  1489.      WasA1$ = ""                                                     ' KG030801
  1490.      CALL SkipLine (1)
  1491.      IF ZUserSecLevel >= ZOptSec(9) THEN _                           ' KG092302
  1492.         CALL QuickTPut1 ("Please K)ill old/unneeded msgs")           ' KG092302
  1493. 1961 ActionFlag = ZFalse
  1494.      CALL SkipLine (1)
  1495.      RETURN
  1496. '
  1497. ' ****  E - COMMAND FROM MAIN MENU (ENTER MESSAGE)  ***
  1498. '
  1499. 2000 QuotedReply = ZFalse
  1500.      MsgFrom$ = ZActiveUserName$
  1501.      SysopMsg = ZFalse                                               ' MB051601
  1502.      GOSUB 1893                                                      ' DA071101
  1503. 2001 IF (LowMsgNumber > 0 AND ActiveMessages = MaxMsgs) _
  1504.         OR HighMsgNumber >= 9999 THEN _
  1505.         IF ZActiveMessageFile$ = ZMainMsgFile$ AND _
  1506.            ActiveMessages = 1 THEN _
  1507.            GOTO 5300 _
  1508.         ELSE ZOutTxt$ = "No more messages allowed!  Try tomorrow" : _
  1509.              GOSUB 12975 : _
  1510.              GOTO 3650
  1511. 2006 IF NOT (ZReply OR MsgFwd) THEN _
  1512.         MsgPswd$ = ""
  1513.      ZSysopComment = ZFalse
  1514.      IF ZReply OR MsgFwd THEN SaveAnsIndex = ZAnsIndex
  1515.      IF MsgFwd OR NOT ZReply THEN MsgTo$ = ""
  1516. 2007 IF ZSysopComment THEN _
  1517.         ZWasZ$ = ZCmntsFile$ : _
  1518.         ZMsgHeader$ = "comment" _
  1519.      ELSE ZWasZ$ = ZActiveMessageFile$ : _
  1520.           ZMsgHeader$ = "message"
  1521. 2008 IF ZSysopComment OR ZMsgsCanGrow THEN _
  1522.         ZWasY$ = "on disk" : _
  1523.         CALL FindFree : _
  1524.         GOTO 2009
  1525.      IF ZNextMsgRec + 3 < HighestMsgRecord THEN _
  1526.         GOTO 2010
  1527.      ZWasY$ = "in file"
  1528.      ZFreeSpace$ = "1"
  1529. 2009 IF VAL(ZFreeSpace$) >= 2000 THEN _
  1530.         GOTO 2010
  1531.      ZOutTxt$ = "No room " + ZWasY$ + " for " + ZMsgHeader$
  1532.      GOSUB 12979
  1533.      GOTO 3650
  1534. 2010 IF NOT QuotedReply THEN _
  1535.         ZLinesInMsg = 0 : _
  1536.         ZCommPortStack$ = "" : _
  1537.         WasL = 0 : _
  1538.         WasX = 0 : _
  1539.         REDIM ZOutTxt$(ZMsgDim)
  1540.      IF ZGetExtDesc THEN _
  1541.         GOTO 2100
  1542.      GOSUB 1893
  1543.      RcvrRecNum = 0
  1544. 2020 CALL MessageTo (HighestUserRecord,MsgTo$,MsgFrom$,RcvrRecNum,Found)
  1545.      IF MsgTo$ = "" THEN _
  1546.         RETURN
  1547.      IF ZSysopComment OR SysopMsg THEN _                             ' ML061904
  1548.         GOTO 2100                                                    ' ML061904
  1549.      IF ZReply OR MsgFwd THEN _
  1550.         Found = ZTrue : _
  1551.         CALL Trim (MsgTo$):  _
  1552.         GOTO 2035 _
  1553.      ELSE Subject$ = ""
  1554.      GOSUB 2065
  1555. 2035 IF QuotedReply THEN _                                           ' ML061904
  1556.         RETURN
  1557.      GOTO 2100
  1558. '
  1559. ' *****  SET/CHANGE SUBJECT FOR A MESSAGE   ***
  1560. '
  1561. 2065 IF Subject$ <> "" THEN _
  1562.         ZOutTxt$ = "Change subject from " + _                        ' DA071701
  1563.              Subject$ + _
  1564.              " to" _                                                 ' TC090901
  1565.      ELSE ZOutTxt$ = "Subject"                                       ' TC090901
  1566.      ZMacroMin = 99                                                  ' KG092202
  1567.      ZParseOff = ZTrue                                               ' TC090901
  1568.      GOSUB 12932                                                     ' TC090901
  1569.      IF LEN(ZUserIn$) > 25 THEN _
  1570.         ZOutTxt$ = "25 Char. Max" : _
  1571.         GOSUB 12979 : _
  1572.         GOTO 2065
  1573.      IF ZWasQ = 0 THEN _
  1574.         IF Subject$ <> "" THEN _
  1575.            RETURN _
  1576.         ELSE GOSUB 2435 : _
  1577.              IF ZYes THEN _
  1578.                 RETURN 5160 _
  1579.              ELSE GOTO 2065
  1580.      Subject$ = ZUserIn$
  1581.      CALL AllCaps (Subject$)
  1582.      OrigSubject$ = Subject$
  1583.      RETURN
  1584. '
  1585. ' *****  ENTER MAIN BODY OF MESSAGE  ****
  1586. '
  1587. 2100 ZOutTxt$ = "Type " + _
  1588.           ZMsgHeader$ + _
  1589.           STR$(ZMaxMsgLines) + _
  1590.           " lines max" + _
  1591.           ZPressEnter$
  1592.      GOSUB 12975
  1593.      GOSUB 3200
  1594. 2125 ZLinesInMsg = ZLinesInMsg + 1
  1595. 2127 IF ZRemoteEcho OR ZLocalUser THEN _
  1596.         ZOutTxt$ = RIGHT$(STR$(ZLinesInMsg),2) + _
  1597.              ": " + _
  1598.              ZOutTxt$(ZLinesInMsg) _
  1599.      ELSE ZOutTxt$ = ZOutTxt$(ZLinesInMsg)
  1600.      GOSUB 12978
  1601.      CALL LineEdit(ZLinesInMsg,ZRightMargin + 1)
  1602.      IF ZWaitExpired THEN _
  1603.         GOTO 10590 _
  1604.      ELSE IF ZSubParm = -1 THEN _
  1605.              GOTO 10595
  1606.      CALL FindFKey
  1607.      IF ZSubParm < 0 THEN _
  1608.         GOTO 202
  1609.      IF ZOutTxt$(ZLinesInMsg) = "" THEN _
  1610.         ZLinesInMsg = ZLinesInMsg - 1 : _
  1611.         GOTO 2300
  1612. 2140 WasJ = ZLinesInMsg
  1613.      GOSUB 2200
  1614.      IF WasX THEN _
  1615.         GOTO 2300
  1616.      GOTO 2125
  1617. 2200 WasX = 0
  1618.      IF WasJ < (ZMaxMsgLines - 2) THEN _
  1619.         RETURN
  1620.      ZOutTxt$ = MID$("2 lines leftLast line   Full",12 * (WasJ-(ZMaxMsgLines - 2)) + 1,12)
  1621.      WasX = (WasJ > (ZMaxMsgLines - 1))
  1622. 2210 GOSUB 12979
  1623.      RETURN
  1624. '
  1625. ' *****  FINAL MESSAGE DISPOSITION   ****
  1626. '
  1627. 2300 IF NOT ZExpertUser THEN _
  1628.         CALL QuickTPut1 ("A)bort," + LEFT$("B)tch Import,",-13 * (ZSysop OR ZLocalUser)) + "C)ont,D)el,E)dit,I)nsert,L)ist,M)argin,R)ev subj,S)ave")
  1629. 2315 ZOutTxt$ = "Edit Sub-function <A," + _
  1630.           LEFT$("B,",-2 * (ZSysop OR ZLocalUser)) + _
  1631.           "C,D,E,I,L,M,R,S,?>"
  1632.      CALL SkipLine (1)
  1633.      GOSUB 12930
  1634.      IF ZWasQ = 0 THEN _
  1635.         GOTO 2315
  1636.      CALL AllCaps (ZUserIn$(ZAnsIndex))
  1637.      ZWasZ$ = ZUserIn$(ZAnsIndex)
  1638. 2330 ON INSTR("ABCDEILMRS?",ZWasZ$) GOTO 2400,2335,2332,2500,2600,2800,3000,3100,2440,3400,2345
  1639.      GOTO 2300
  1640. 2332 IF ZLinesInMsg < 1 THEN _
  1641.         ZLinesInMsg = 1
  1642.      GOTO 2127
  1643. 2335 WasX = ZLinesInMsg
  1644.      CALL MsgImport (ZMaxMsgLines,ZRightMargin,ZLinesInMsg,ZOutTxt$())
  1645.      IF ZLinesInMsg > WasX THEN _
  1646.         GOTO 3000 _
  1647.      ELSE GOTO 2300
  1648. '
  1649. ' *****  DISPLAY MESSAGE SUBCOMMANDS HELP FILE   ****
  1650. '
  1651. 2345 ZFileName$ = ZHelp$(4)
  1652.      GOSUB 1790
  1653.      GOTO 2315
  1654. 2350 CALL FindIt (ZMainPUI$)
  1655.      ZCustomPUI = ZOK
  1656.      IF ZOK THEN _
  1657.         ZCurPUI$ = ZMainPUI$ _
  1658.      ELSE ZCurPUI$ = ""
  1659.      RETURN
  1660. '
  1661. ' ****  ABORT MESSAGE   ***
  1662. '
  1663. 2400 GOSUB 2435
  1664.      IF NOT ZYes THEN _
  1665.         GOTO 2300
  1666. 2430 ZOutTxt$ = "Aborted"
  1667.      GOSUB 12975
  1668.      GOTO 3650
  1669. 2435 ZOutTxt$ = "Abort " + _
  1670.           ZMsgHeader$ + _
  1671.           " (Y/[N])"
  1672.      GOSUB 12995
  1673.      RETURN
  1674. '
  1675. ' *****  CHANGE SUBJECT OF A MESSAGE  ****
  1676. '
  1677. 2440 GOSUB 2065
  1678.      GOTO 2300
  1679. '
  1680. ' *****  (BLOCK) DELETE MESSAGE LINE(S)  *****
  1681. '
  1682. 2500 ZOutTxt$ = "Delete from"
  1683.      GOSUB 3300
  1684.      Mark1 = ZTestedIntValue
  1685. 2520 ZOutTxt$ = "Up to and including Line # (ENTER =" + STR$(Mark1) + ")"
  1686.      GOSUB 3302
  1687.      IF ZWasQ = 0 THEN _
  1688.         Mark2 = Mark1 _
  1689.      ELSE Mark2 = ZTestedIntValue
  1690.      CALL SkipLine(1)
  1691.      IF Mark1 > Mark2 THEN _
  1692.         ZOutTxt$ = "Beginning exceeds end.  Block NOT deleted" : _   ' DA071701
  1693.         GOSUB 12979 : _
  1694.         GOTO 2555
  1695.      IF Mark1 <= MsgLockLines THEN _
  1696.         ZOutTxt$ = "You can NOT delete lines 1 -" + STR$(MsgLockLines) + "!" : _
  1697.         GOSUB 12979 : _
  1698.         GOTO 2555
  1699.      GOTO 2530                                                       ' DA071702
  1700. 2522 FOR WasX = Mark1 TO Mark2
  1701.         CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  1702.         IF ZNo OR ZRet THEN _
  1703.            WasX = Mark2 + 1 _
  1704.         ELSE ZOutTxt$ = ZOutTxt$(WasX) : _
  1705.            GOSUB 12977
  1706.      NEXT
  1707.      CALL SkipLine(1)
  1708. 2530 ZOutTxt$ = "Delete lines " + STR$(Mark1) + "-" + _              ' DA071702
  1709.         MID$(STR$(Mark2),2) + " (Y,[N],L)ist)"                       ' KG072605
  1710.      GOSUB 12930
  1711.      Temp$ = ZUserIn$(ZAnsIndex)                                     ' DA071702
  1712.      CALL AllCaps(Temp$)                                             ' DA071702
  1713.      IF Temp$ = "L" THEN GOTO 2522                                   ' KG072605
  1714.      IF NOT ZYes THEN _
  1715.         ZOutTxt$ = "NOT Deleted" : _
  1716.         GOSUB 12979 : _
  1717.         GOTO 2555
  1718. 2550 ZBlockSize = (Mark2 - Mark1) + 1
  1719.      EndOfBuffer = ZLinesInMsg + 1
  1720.      ZLinesInMsg = ZLinesInMsg - ZBlockSize
  1721.      FOR WasX = Mark1 TO ZLinesInMsg
  1722.         ZOutTxt$(WasX) = ZOutTxt$(WasX + ZBlockSize)
  1723.      NEXT
  1724.      FOR WasX = (ZLinesInMsg + 1) TO (EndOfBuffer)
  1725.         ZOutTxt$(WasX) = ""
  1726.      NEXT
  1727.      ZOutTxt$ = "Deleted" + STR$(ZBlockSize) + " line(s)"
  1728.      GOSUB 12979
  1729. 2555 Mark1 = 0
  1730.      Mark2 = 0
  1731.      GOTO 2300
  1732. '
  1733. ' ****  EDIT MESSAGE LINE  ***
  1734. '
  1735. 2600 ZOutTxt$ = "Edit"
  1736.      GOSUB 3300
  1737.      IF ZTestedIntValue <= MsgLockLines THEN _
  1738.         ZOutTxt$ = "Not permitted to change 1st" + _                 ' KG071301
  1739.                     STR$(MsgLockLines) + " line(s)" : _
  1740.         GOSUB 12979 : _
  1741.         GOTO 2300
  1742.      CALL EditALine (ZTestedIntValue)
  1743.      IF ZSubParm < 0 THEN _
  1744.         GOTO 202
  1745.      GOTO 2300
  1746. 2800 IF ZLinesInMsg >= ZMaxMsgLines AND NOT ZSysop THEN _
  1747.         ZOutTxt$ = "Message full" : _
  1748.         GOSUB 12979 : _
  1749.         GOTO 2300
  1750. 2820 ZOutTxt$ = "Insert Before" : _
  1751.      GOSUB 3300
  1752. 2830 WasLL = ZLinesInMsg
  1753.      WasK = ZLinesInMsg - ZTestedIntValue
  1754.      FOR WasX = ZTestedIntValue TO ZLinesInMsg
  1755.         ZUserIn$(WasX + 1 - ZTestedIntValue) = ZOutTxt$(WasX)
  1756.         ZOutTxt$(WasX) = ""
  1757.      NEXT
  1758.      ZLinesInMsg = ZTestedIntValue
  1759. 2840 ZOutTxt$ = RIGHT$(STR$(ZLinesInMsg),2) + _
  1760.           ": " + ZOutTxt$(ZLinesInMsg)
  1761.      GOSUB 12978
  1762.      CALL LineEdit(ZLinesInMsg,ZRightMargin + 1)
  1763.      IF ZOutTxt$(ZLinesInMsg) = "" THEN _
  1764.         GOTO 2920
  1765. 2870 ZLinesInMsg = ZLinesInMsg + 1
  1766.      WasJ = ZLinesInMsg + WasK - 1
  1767.      GOSUB 2200
  1768.      IF NOT WasX THEN _
  1769.         GOTO 2840
  1770. 2920 FOR WasX = 1 TO WasK + 1
  1771.         ZOutTxt$(ZLinesInMsg + WasX - 1) = ZUserIn$(WasX)
  1772.      NEXT
  1773.      REDIM ZUserIn$(ZMsgDim)
  1774.      ZLinesInMsg = WasLL + ZLinesInMsg - ZTestedIntValue
  1775.      GOTO 2300
  1776. '
  1777. ' *****  LIST MESSAGE CONTENTS   ****
  1778. '
  1779. 3000 GOSUB 3010
  1780.      GOTO 2300
  1781. 3010 ZStopInterrupts = ZFalse
  1782.      CALL SkipLine (1)
  1783.      IF (ZWasQ = 1 OR MsgFwd) AND NOT ZGetExtDesc THEN _             ' ML061905
  1784.         WasL = 1 : _
  1785.         ZOutTxt$ = ZFG3$ + "To: " + _
  1786.              MsgTo$ + _
  1787.              ZFG4$ + " Re: " + _
  1788.              Subject$ + ZEmphasizeOff$ : _
  1789.         GOSUB 12979 : _
  1790.         CALL QuickTPut (MID$("    ",1,-4 * (NOT ZRemoteEcho)),0) : _
  1791.         GOSUB 3200
  1792. 3020 IF ZGetExtDesc THEN WasL = 1                                    ' ML071501
  1793.      FOR WasX = WasL TO ZLinesInMsg                                  ' ML071501
  1794.         CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  1795.         IF ZNo OR ZRet THEN _
  1796.            WasX = ZLinesInMsg + 1 _
  1797.         ELSE ZOutTxt$ = RIGHT$(STR$(WasX),2) + _
  1798.                   ": " + _
  1799.                   ZOutTxt$(WasX) : _
  1800.              GOSUB 12979
  1801.      NEXT
  1802.      RETURN
  1803. '
  1804. ' *****  CHANGE MARGIN WIDTH   ****
  1805. '
  1806. 3100 CALL SkipLine (1)
  1807.      ZOutTxt$ = "SET Right-Margin from" + _
  1808.           STR$(ZRightMargin) + _
  1809.           " TO (8...72)"
  1810.      GOSUB 12932
  1811.      IF LEN(ZUserIn$(ZAnsIndex)) > 2 THEN _
  1812.         GOTO 3140
  1813. 3130 WasX = VAL(ZUserIn$(ZAnsIndex))
  1814.      IF WasX > 7 AND WasX < 73 THEN _
  1815.         ZRightMargin = WasX : _
  1816.         ZOutTxt$ = "Margin now" + _
  1817.              STR$(ZRightMargin) : _
  1818.         GOTO 3150
  1819. 3140 ZOutTxt$ = "Invalid - Margin UNCHANGED"
  1820. 3150 GOSUB 12979
  1821.      IF UtilMarginChange THEN _
  1822.         RETURN
  1823.      GOTO 2300
  1824. 3200 ZOutTxt$ = "[" + _
  1825.           STRING$(ZRightMargin - 2,45) + _
  1826.           "]"
  1827.      IF ZRemoteEcho OR ZLocalUser THEN _
  1828.         ZOutTxt$ = "    " + _
  1829.              ZOutTxt$
  1830.      GOSUB 12975
  1831.      RETURN
  1832. 3300 ZOutTxt$ = ZOutTxt$ + " Line #" + ZPressEnter$
  1833. 3302 CALL SkipLine (-(ZAnsIndex >= ZLastIndex))
  1834.      GOSUB 12932
  1835.      IF ZWasQ = 0 THEN _
  1836.         IF Mark1 = 0 THEN _
  1837.            RETURN 2300 _
  1838.         ELSE RETURN
  1839.      CALL CheckInt (ZUserIn$(ZAnsIndex))
  1840.      IF ZErrCode = 0 THEN _
  1841.         IF ZTestedIntValue >= 1 THEN _
  1842.            IF ZTestedIntValue <= ZLinesInMsg THEN _
  1843.               RETURN
  1844.      ZOutTxt$ = "No such line #" + STR$(ZTestedIntValue)
  1845.      GOSUB 12979
  1846.      RETURN 2300
  1847. '
  1848. ' ****  SAVE MESSAGE   ***
  1849. '
  1850. 3400 IF ZGetExtDesc THEN _
  1851.         ZSysopComment = ZFalse : _
  1852.         RETURN
  1853.      IF ZSysopComment THEN _
  1854.         ZSysopComment = ZFalse : _
  1855.         GOTO 1850
  1856. 3405 SaveReplyStatus = ZReply                                        ' ML061904
  1857.      ZReply = ZTrue                                                  ' ML061904
  1858.      IF SysopMsg THEN _                                              ' ML061904
  1859.         MsgPswd$ = "^READ^" _                                        ' ML061904
  1860.      ELSE CALL MsgProt (MsgTo$,Found,MsgPswd$)                       ' ML061904
  1861.      SysopMsg = ZFalse                                               ' ML061904
  1862.      ZReply = SaveReplyStatus                                        ' ML061904
  1863.      GOSUB 4910                                                      ' ML061904
  1864.      MsgRecSave$ = ZMsgRec$
  1865.      MsgCorrected = ZFalse
  1866.      GOSUB 23100
  1867.      ZOutTxt$ = "Adding new msg #" + _
  1868.           STR$(HighMsgNumber + 1)
  1869.      IF NOT ZLocalUser THEN _
  1870.         CALL UpdtCalr (ZOutTxt$,1)
  1871.      GOSUB 12978
  1872.      ZWasSL = 0
  1873.      ZWasN$ = ""
  1874.      ZLastIndex = 0
  1875.      HighMsgNumber = HighMsgNumber + 1                               ' DA061001
  1876. 3410 ActiveMessages = ActiveMessages + 1
  1877.      MsgNum$ = STR$(HighMsgNumber) + _
  1878.                        SPACE$(5 - LEN(STR$(HighMsgNumber)))
  1879.      IF MsgPswd$ = "^READ^" THEN _
  1880.         MID$(MsgNum$,1,1) = "*" : _
  1881.         SecForMsg = ZPrivateReadSec _
  1882.      ELSE SecForMsg = ZPublicReadSec
  1883. 3460 IF NOT MsgFwd THEN _
  1884.         MsgFrom$ = LEFT$(ZActiveUserName$ + SPACE$(31),31) _
  1885.      ELSE _
  1886.         MsgFrom$ = LEFT$(MsgFrom$ + SPACE$(31),31)
  1887.      MsgTo$ = LEFT$(MsgTo$ + SPACE$(31),31)
  1888.      MID$(MsgTo$,23,8) = TIME$
  1889.      Subject$ = LEFT$(OrigSubject$ + SPACE$(25),25)
  1890.      MsgPswd$ = LEFT$(MsgPswd$ + SPACE$(15),15)
  1891.      IF QuotedReply AND _
  1892.         ZLinesInMsg > ZMaxMsgLines THEN _
  1893.            ZLinesInMsg = ZMaxMsgLines
  1894.      FOR WasJ = 1 TO ZLinesInMsg
  1895.         ZOutTxt$(WasJ) = ZOutTxt$(WasJ) + _
  1896.                 CHR$(227)
  1897.         ZWasSL = ZWasSL + LEN(ZOutTxt$(WasJ))
  1898.      NEXT
  1899.      IF ZWasSL MOD 128 = 0 THEN _
  1900.         ZWasN$ = STR$(ZWasSL \ 128 + 1) _
  1901.      ELSE ZWasN$ = STR$(ZWasSL \ 128 + 2)
  1902. 3530 Temp = ZNextMsgRec
  1903.      ZNextMsgRec = Temp + VAL(ZWasN$)
  1904.      LSET ZMsgRec$ = MsgRecSave$
  1905.      GOSUB 24000
  1906.      GET 1,Temp
  1907.      ZMsgPtr(ActiveMessages,1) = Temp
  1908.      ZMsgPtr(ActiveMessages,2) = HighMsgNumber
  1909.      LSET ZMsgRec$ = MsgNum$ + _
  1910.                      MsgFrom$ + _
  1911.                      MsgTo$ + _
  1912.                      ZCurDate$ + _
  1913.                      Subject$ + _
  1914.                      MsgPswd$ + _
  1915.                      ZActiveMessage$ + _
  1916.                      ZWasN$ + _
  1917.                      SPACE$(4 - LEN(ZWasN$)) + _
  1918.                      MKI$(SecForMsg)
  1919.      PUT 1,Temp
  1920.      ZWasN$ = ""
  1921.      NumDots = 0
  1922.      FOR WasJ = 1 TO ZLinesInMsg
  1923.         CALL MarkTime (NumDots)
  1924.         ZWasN$ = ZWasN$ + _
  1925.              ZOutTxt$(WasJ)
  1926.         IF LEN(ZWasN$) > 127 THEN _
  1927.            LSET ZMsgRec$ = ZWasN$ : _
  1928.            PUT 1 : _
  1929.            ZWasN$ = MID$(ZWasN$,129)
  1930. 3630 NEXT
  1931.      IF LEN(ZWasN$) > 0 THEN _
  1932.         LSET ZMsgRec$ = ZWasN$ : _
  1933.         PUT 1
  1934.      REDIM ZOutTxt$(ZMsgDim)
  1935.      IF MsgCorrected THEN _
  1936.         MsgCorrected = ZFalse : _
  1937.         ActionFlag = ZTrue : _
  1938.         CALL SkipLine (1) : _
  1939.         GOSUB 1900
  1940. 3640 CALL SkipLine (1)
  1941.      GET 1,1
  1942.      GOSUB 12985
  1943. ' ---[ notify receiver that has new mail waiting ]---
  1944.      IF RcvrRecNum > 0 THEN _
  1945.         UserFileIndexSave = ZUserFileIndex : _
  1946.         UserRecordHold$ = ZUserRecord$ : _
  1947.         ZUserFileIndex = RcvrRecNum : _
  1948.         GOSUB 12989 : _
  1949.         GET 5, RcvrRecNum : _
  1950.         WasX = CVI(MID$(ZUserRecord$,57,2)) : _
  1951.         MID$(ZUserRecord$,57,2) = MKI$(WasX OR 512) : _
  1952.         PUT 5, RcvrRecNum : _
  1953.         GOSUB 12991 : _
  1954.         ZUserFileIndex = UserFileIndexSave : _
  1955.         LSET ZUserRecord$ = UserRecordHold$ : _
  1956.         CALL QuickTPut1 ("Receiver will be notified of new mail") : _
  1957.         RcvrRecNum = 0
  1958. 3650 QuotedReply = ZFalse
  1959.      MsgLockLines = 0
  1960.      IF ZReply OR MsgFwd THEN _
  1961.         ZReply = ZFalse : _
  1962.         ZAnsIndex = SaveAnsIndex : _
  1963.         GOTO 5344
  1964.      IF ZGetExtDesc THEN _
  1965.         ZLinesInMsg = 0 : _
  1966.         RETURN
  1967.      RETURN 1200
  1968. '
  1969. ' ****  K - COMMAND FROM MAIN MENU (KILL MESSAGE)  ***
  1970. '
  1971. 3900 ZKillMessage = ZFalse
  1972.      CALL SkipLine (1)
  1973. 3930 ZOutTxt$ = "Msg #(s) to Kill" + ZPressEnterExpert$
  1974.      GOSUB 12932
  1975.      IF ZWasQ = 0 THEN _
  1976.         RETURN
  1977.      GOSUB 1893
  1978. 3935 CALL CheckInt (ZUserIn$(ZAnsIndex))
  1979.      IF ZErrCode <> 0 THEN _
  1980.         GOTO 3930
  1981.      MsgToKill = ZTestedIntValue
  1982. 3950 GOSUB 5344
  1983.      CALL KillMsg (MsgToKill,ActiveMessages)
  1984. 4040 IF ZKillMessage THEN _
  1985.         RETURN
  1986.      GOTO 3930
  1987. '
  1988. ' ****  Sysop Available toggle
  1989. '
  1990. 4130  ZSubParm = -8
  1991.       CALL FindFKey
  1992.       ZSubParm = 0
  1993.       RETURN
  1994. '
  1995. ' ****  X)pert Toggle
  1996. '
  1997. 4240 CALL Toggle(9)
  1998.      RETURN
  1999. '
  2000. ' ****  T)opic - QUICK SCAN MESSAGES  ***
  2001. '
  2002. 4320 QuickScanMsgs = ZTrue
  2003.      ReadMsgs = ZFalse
  2004.      ScanMsgs = ZFalse
  2005.      MsgStart = 76
  2006.      MsgEnd = 100
  2007.      SecIndex= 0
  2008.      GOTO 4350
  2009. '
  2010. ' ****  R - COMMAND FROM MAIN MENU (READ MESSAGES)  ****
  2011. '
  2012. 4330 QuickScanMsgs = ZFalse
  2013.      ReadMsgs = ZTrue
  2014.      HiLiteRec = -1
  2015.      ScanMsgs = ZFalse
  2016.      MsgStart = 6
  2017.      MsgEnd = 100
  2018.      IF ZLocalUserMode OR NOT ZLocalUser THEN _
  2019.         IF ReadMsgIn$ <> ZActiveMessageFile$ THEN _
  2020.            ReadMsgIn$ = ZActiveMessageFile$ : _
  2021.            CALL UpdtCalr ("Read Messages in " + ReadMsgIn$,1)
  2022.      GOSUB 1300
  2023.      GOTO 4350                                                       ' KG022701
  2024. '
  2025. ' ****  S - COMMAND FROM MAIN MENU (SCAN MESSAGE HEADERS)  ***
  2026. '
  2027. 4340 IF ZWasQ < 2 THEN _
  2028.         GOSUB 1300
  2029. 4345 QuickScanMsgs = ZFalse
  2030.      ReadMsgs = ZFalse
  2031.      ScanMsgs = ZTrue
  2032.      MsgStart = 6
  2033.      MsgEnd = 100
  2034.      SecIndex = 0
  2035. '
  2036. ' ** MESSAGE READ MAINLINE (QUICK SCAN, READ & SCAN) ALL USE THIS ROUTINE *
  2037. '
  2038. 4350 SearchHeader$ = ""
  2039.      SubInHeader$ = ""
  2040. 4352 SearchString$ = ""
  2041.      DontPrint = ZFalse
  2042.      JustReplied = ZFalse
  2043.      QuotedReply = ZFalse
  2044.      AddressedToUser = ZFalse
  2045.      CanKill = (ZSysop OR ZUserSecLevel >= ZSecKillAny)
  2046.      GOSUB 1893
  2047.      GOSUB 5344
  2048.      ZWasZ$ = ""
  2049.      FOR WasI = 2 TO ZWasQ
  2050.         IF INSTR("Ss*",ZUserIn$(WasI)) > 0 THEN _
  2051.            ZUserIn$(WasI) = MID$(STR$(ZLastMsgRead+1),2) + "+"
  2052.        'IF LEN(ZUserIn$(WasI)) = 1 THEN _
  2053.        '   IF INSTR("Cc",ZUserIn$(WasI)) > 0 THEN _
  2054.        '      ZNonStop = ZTrue
  2055.         IF INSTR("Ll",ZUserIn$(WasI)) > 0 THEN _
  2056.            ZUserIn$(WasI) = MID$(STR$(HighMsgNumber),2) + "-"
  2057.      NEXT
  2058. 4360 ZWasLG$(11) = ZWasZ$
  2059.      NumMsgsSelected = ZLastIndex
  2060.      MsgIndex = ZAnsIndex                                            ' KG022701
  2061.      ZLastIndex = 0
  2062.      ToRequested = ZFalse
  2063.      FromRequested = ZFalse
  2064.      IF ZPageLength < 1 THEN _
  2065.         ZNonStop = ZTrue
  2066. 4370 MsgIndex = MsgIndex  + 1                                        ' KG022701
  2067. 4371 IF MsgIndex <= NumMsgsSelected THEN _                           ' KG022701
  2068.         IF LEN(ZUserIn$(MsgIndex)) = 1 AND _                         ' KG073102
  2069.            INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _                 ' KG022701
  2070.            GOTO 4370 _
  2071.         ELSE _
  2072.         CALL CheckInt (ZUserIn$(MsgIndex)) : _                       ' KG022701
  2073.         IF ZErrCode <> 0 THEN _
  2074.            ZWasEL = 4371 : _
  2075.            GOTO 13000 _
  2076.         ELSE CurMsg = ZTestedIntValue : _
  2077.              ZAnsIndex = MsgIndex : _                                ' KG022701
  2078.              GOTO 4415
  2079. 4380 ZNonStop = (ZPageLength < 1)
  2080.      WasA1$ = "Msg #" + _
  2081.            STR$(LowMsgNumber) + _
  2082.            "-" + _
  2083.            MID$(STR$(ZMsgPtr(ActiveMessages,2)),2) + _
  2084.            " (H)elp,S)ince,L)ast"
  2085.      IF AddressedToUser OR ToRequested OR FromRequested THEN _
  2086.         ZWasY$ = LEFT$("TO",-2*(ToRequested OR AddressedToUser)) + _
  2087.              LEFT$("/",-AddressedToUser) + _
  2088.              LEFT$("FROM",-4*(FromRequested OR AddressedToUser)) : _
  2089.         CALL QuickTPut1 ("Only msgs "+ZWasY$+" you.  Read from what msg # (e.g. 1+,4010-)") _
  2090.      ELSE WasA1$ = WasA1$ + _
  2091.                ", T)o,F)rom,M)ine"
  2092.      IF SearchString$ = "" THEN _
  2093.         WasA1$ = WasA1$ + _
  2094.              ", text" _
  2095.      ELSE CALL QuickTPut1 ("Only msgs with text " + SearchString$ + ".  Read from what msg # (e.g. 1+,4010-)")
  2096. 4390 ZOutTxt$ = WasA1$ + ", [Q]uit)"
  2097.      ZMacroMin = 99
  2098.      ZTurboKey = 0
  2099. 4400 GOSUB 12932                                                     ' KG022701
  2100.      IF ZWasQ = 0 THEN _
  2101.         RETURN
  2102. 4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _                          ' KG022701
  2103.         WasY = INSTR("QqHh?",ZUserIn$(ZAnsIndex)) : _                ' KG101202
  2104.         IF WasY > 2 THEN _                                           ' KG081302
  2105.             ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
  2106.             GOSUB 1790 : _
  2107.             GOTO 4390 _                                              ' KG101202
  2108.         ELSE IF WasY > 0 THEN _                                      ' KG101202
  2109.                 RETURN                                               ' KG101202
  2110.      MsgIndex = 0                                                    ' KG022701
  2111.      NumMsgsSelected = ZWasQ
  2112.      GOTO 4370
  2113. 4415 Forward = ZFalse
  2114.      Reverse = ZFalse
  2115.      IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _
  2116.         IF INSTR("Ss*",ZUserIn$(ZAnsIndex)) > 0 THEN _
  2117.            CurMsg = ZLastMsgRead + 1 : _
  2118.            Forward = ZTrue : _
  2119.            GOTO 4430 _
  2120.         ELSE IF INSTR("Ll",ZUserIn$(ZAnsIndex)) > 0 THEN _
  2121.                 CurMsg = HighMsgNumber : _
  2122.                 Reverse = ZTrue : _
  2123.                 GOTO 4490
  2124. 4416 IF INSTR("Mm",ZUserIn$(ZAnsIndex)) THEN _
  2125.         AddressedToUser = ZTrue : _
  2126.         GOTO 4370
  2127.      ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
  2128.      IF ZWasA > 0 THEN _
  2129.         ToRequested = (ZWasA > 2) : _
  2130.         FromRequested = (ZWasA < 3) : _
  2131.         GOTO 4370
  2132.      IF CurMsg = 0 THEN _
  2133.         IF SearchHeader$ <> "" THEN _
  2134.            GOTO 4370 _
  2135.         ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _                 ' KG022701
  2136.              CALL AllCaps (SearchString$) : _
  2137.              CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
  2138.              SearchHeader$ = SearchString$ : _
  2139.              SubInHeader$ = SearchHeader$ : _
  2140.              GOTO 4370
  2141.      CALL SkipLine (1)
  2142. 4430 IF RIGHT$(ZUserIn$(ZAnsIndex),1) = "+" THEN _
  2143.         Forward = ZTrue
  2144.      IF RIGHT$(ZUserIn$(ZAnsIndex),1) = "-" THEN _
  2145.         Reverse = ZTrue : _
  2146.         GOTO 4490
  2147. 4450 ZMsgDimIndex = 1
  2148. 4452 IF ZMsgDimIndex > ActiveMessages THEN _
  2149.         GOTO 4515
  2150.      IF ReadMsgs AND _
  2151.         ZMsgPtr(ZMsgDimIndex,2) = CurMsg THEN _
  2152.         GOTO 4520
  2153. 4470 IF ((ReadMsgs AND Forward) OR _
  2154.         QuickScanMsgs OR ScanMsgs) AND _
  2155.         ZMsgPtr(ZMsgDimIndex,2) >= CurMsg THEN _
  2156.         GOTO 4520
  2157. 4480 ZMsgDimIndex = ZMsgDimIndex + 1
  2158.      GOTO 4452
  2159. 4490 ZMsgDimIndex = ActiveMessages
  2160. 4492 IF ZMsgDimIndex < 1 THEN _
  2161.         GOTO 4515
  2162.      IF ZMsgPtr(ZMsgDimIndex,2) <= CurMsg THEN _
  2163.         GOTO 4540
  2164. 4510 ZMsgDimIndex = ZMsgDimIndex - 1
  2165.      GOTO 4492
  2166. 4515 IF Forward THEN _
  2167.         ZOutTxt$ = "No new messages" : _
  2168.         ZLastMsgRead = HighMsgNUmber : _
  2169.         ZMailWaiting = ZFalse _
  2170.      ELSE ZOutTxt$ = "No such msg #" + _
  2171.                STR$(CurMsg)
  2172.      IF SubInHeader$ = "" THEN _                                     ' KG102001
  2173.         GOSUB 12979                                                  ' KG102001
  2174.      GOTO 4370
  2175. 4520 EndingMsgIndex = ZMsgDimIndex
  2176.      IF ReadMsgs AND NOT Forward THEN _
  2177.         GOTO 4560
  2178. 4530 StartMsgIndex = ZMsgDimIndex
  2179.      EndingMsgIndex = ActiveMessages
  2180.      WasSO = 1
  2181.      GOTO 4550
  2182. 4540 StartMsgIndex = ZMsgDimIndex
  2183.      EndingMsgIndex = 1
  2184.      WasSO = -1
  2185. 4550 WasXXX = EndingMsgIndex + WasSO
  2186.      ZMsgDimIndex = StartMsgIndex
  2187. 4552 IF ZMsgDimIndex = WasXXX THEN _
  2188.         CALL Carrier : _
  2189.         GOTO 4637
  2190. 4560   CurHeader = ZMsgPtr(ZMsgDimIndex,1)
  2191.        IF CurHeader < 1 THEN _
  2192.           GOTO 4515
  2193.        GET 1,CurHeader
  2194.        ZPswdFailed = ZFalse
  2195.        UserInHeader = ZFalse
  2196.        ZWasZ$ = MID$(ZMsgRec$,101,15)
  2197.        MsgPswd$ = ZWasZ$
  2198.        CALL Trim(MsgPswd$)
  2199. 4561   GOSUB 4660
  2200.        GOSUB 4655
  2201. 4562   IF NOT CanKill THEN _
  2202.           IF INSTR(ZMsgRec$,"^READ^") > 0 AND NOT UserInHeader THEN _
  2203.              ZPswdFailed = ZTrue : _
  2204.              IF Forward OR Reverse THEN _
  2205.                 GOTO 4635
  2206. 4563   CurMsg = VAL(MID$(ZMsgRec$,2,4))
  2207.        IF ToRequested THEN _
  2208.           IF NOT MsgToCaller THEN _
  2209.              GOTO 4629
  2210.        IF FromRequested THEN _
  2211.           IF NOT MsgFromCaller THEN _
  2212.              GOTO 4629
  2213.        IF AddressedToUser AND NOT UserInHeader THEN _
  2214.           GOTO 4629
  2215.        WasX$ = MID$(ZMsgRec$,121,2)
  2216.        IF WasX$ = "  " THEN _
  2217.           MsgSec = ZMinLogonSec _
  2218.        ELSE MsgSec = CVI(WasX$)
  2219.        IF ZUserSecLevel < MsgSec THEN _
  2220.           GOTO 4629
  2221. 4580   IF INSTR(ZMsgRec$,ZWasLG$(11)) = 0 THEN _
  2222.           GOTO 4635
  2223. 4581   IF MID$(ZMsgRec$,116,1) = ZDeletedMsg$ THEN _
  2224.           GOTO 4630
  2225.        JustSearching = ZFalse
  2226.        IF SearchHeader$ <> "" THEN _
  2227.           ZFF = INSTR(ZMsgRec$,SearchHeader$) : _
  2228.           IF ZFF >= MsgStart AND ZFF <= MsgEnd THEN _
  2229.              HiLitePos = ZFF : _
  2230.              GOTO 4582 _
  2231.           ELSE IF ReadMsgs AND SearchString$ <> "" THEN _
  2232.                   JustSearching = ZTrue : _
  2233.                   GOTO 4582 _
  2234.                ELSE GOTO 4629
  2235. 4582   WasPG = ZFalse
  2236.        IF MID$(ZWasZ$,1,1) = "!" THEN _
  2237.           IF NOT CanKill THEN _
  2238.              WasPG = ZTrue : _
  2239.              ZPswdSave$ = MID$(ZWasZ$,2) + _
  2240.                               " " : _
  2241.              ZAttemptsAllowed = 0 : _
  2242.              ZSubParm = 1 : _
  2243.              CALL PassWrd
  2244. 4584   IF ZPswdFailed AND _
  2245.           (QuickScanMsgs OR (ScanMsgs AND NOT WasPG)) THEN _
  2246.           GOTO 4635
  2247. 4585   IF ZPswdFailed THEN _
  2248.           IF WasPG THEN _
  2249.              WasSJ$ = "<PASSWORD>" _
  2250.           ELSE WasSJ$ = "<PROTECTED>" _
  2251.        ELSE WasSJ$ = MID$(ZMsgRec$,76,25)
  2252. 4590   IF QuickScanMsgs THEN _
  2253.           ZOutTxt$ = LEFT$(ZMsgRec$,5) + _
  2254.                " " + _
  2255.                LEFT$(WasSJ$,19) + _
  2256.                " " : _
  2257.           CALL CheckColor (ZOutTxt$,SubInHeader$,ZEmphasizeOff$) : _
  2258.           GOSUB 12978 : _
  2259.           SecIndex = SecIndex + 1 : _
  2260.           IF SecIndex = 3 THEN _
  2261.              SecIndex = 0 : _
  2262.              CALL SkipLine (1) : _
  2263.              GOTO 4630  _
  2264.           ELSE GOTO 4630
  2265. 4600   IF ScanMsgs THEN _
  2266.           GOSUB 8020 : _
  2267.           GOTO 4630
  2268.        IF NOT JustSearching THEN _
  2269.           GOSUB 8000 : _
  2270.           IF QuotedReply THEN _
  2271.              QuotedReply = ZFalse : _
  2272.              GOTO 4602                                               ' KG091301
  2273.        IF ZRet THEN _
  2274.           GOTO 4630
  2275.        CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
  2276.        ShowKill =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG081601
  2277.        IF ZExpertUser THEN _
  2278.           WasA1$ = ",H,R,T,=,+,-" + _                                ' KG081303
  2279.                 MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
  2280.                 MID$(",K",1,ShowKill * 2) + _                        ' KG081601
  2281.                 MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
  2282.                 MID$(",S",1, - CanChangeSec * 2) : _                 ' KG081303
  2283.           GOTO 4601                                                  ' KG091301
  2284.        GOSUB 4617                                                    ' KG091301
  2285. 4601   ZTurboKey = -ZTurboKeyUser                                    ' KG091301
  2286.        IF JustSearching OR NOT JustReplied THEN _
  2287.           GOTO 4602                                                  ' KG091301
  2288.        JustReplied = ZFalse
  2289.        CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
  2290.        CALL SkipLine (1)
  2291.        IF ZNo THEN _
  2292.           RETURN
  2293.        CALL AllCaps (ZUserIn$(1))                                    ' KG081303
  2294.        ZReply = (ZReply OR ZUserIn$(1) = "R")                        ' KG081303
  2295.        IF ZUserIn$(1) <> "=" THEN _                                  ' KG081303
  2296.           GOTO 4605                                                  ' KG081303
  2297.        CALL SkipLine (1)
  2298. 4602   IF NOT ZPswdFailed THEN _                                     ' KG091301
  2299.           GOTO 4603                                                  ' KG091301
  2300.        IF WasPG AND (NOT ZNonStop) THEN _
  2301.           ZAttemptsAllowed = 2 : _
  2302.           ZSubParm = 2 : _
  2303.           CALL PassWrd
  2304.        IF ZPswdFailed THEN _                                         ' KG081303
  2305.           GOTO 4629
  2306. 4603   GOSUB 9000                                                    ' KG091301
  2307.        JustReplied = ZFalse
  2308.        DontPrint = ZFalse
  2309.        IF JustSearching THEN _
  2310.           GOTO 4629
  2311.        IF ZAnsIndex > NumMsgsSelected THEN _
  2312.           GOTO 4650
  2313.        CALL SkipLine (1)
  2314.        GOSUB 41000                                                   ' KG081303
  2315.        ZKillMessage = ZFalse
  2316.        ZReply = ZFalse
  2317.        IF ZNonStop THEN _
  2318.           GOTO 4629
  2319. 4604   ZTurboKey = -ZTurboKeyUser                                    ' KG091301
  2320.        CALL AskMore (WasA1$,ZTrue,ZFalse,WasXX,ZFalse)
  2321.        IF ZNo THEN _
  2322.           ZAnsIndex = ZLastIndex + 1 : _
  2323.           RETURN
  2324.        CALL AllCaps(ZUserIn$(1))
  2325.        ZReply = (ZReply OR ZUserIn$(1) ="R")
  2326. 4605   ON INSTR(" FUST+-KRH?=",LEFT$(ZUserIn$(1),1)) GOTO _          ' KG081303
  2327.           4620,4606,4607,4608,4609,4610,4610,4611,4621,4612,4614,4615 ' KG091301
  2328.        GOTO 4620                                                     ' KG081303
  2329. 4606   IF NOT (UserInHeader OR CanChangeSec) THEN _   ' Forward      ' KG081303
  2330.           GOTO 4620                                                  ' KG081303
  2331.        MsgFwd = ZTrue
  2332.        GOTO 4623
  2333. 4607   IF ZUserSecLevel < ZOptSec(54) THEN _    ' User edit          ' KG081303
  2334.           GOTO 4620                                                  ' KG081303
  2335.        EditFromRead = 1
  2336.        ZReply=ZTrue
  2337.        CALL PutMsgAttr
  2338.        TempHashValue$ = MsgFrom$
  2339.        CALL Trim (TempHashValue$)
  2340.        IF TempHashValue$ = "SYSOP" THEN _
  2341.           TempHashValue$ = ZSysopPswd1$ + " " + ZSysopPswd2$
  2342.        GOTO 11000
  2343. 4608   IF CanChangeSec THEN _            ' Security to read          ' KG081303
  2344.           CALL PutMsgAttr : _
  2345.           GOSUB 4665 : _
  2346.           ZReply = ZFalse : _
  2347.           QuotedReply = ZTrue : _
  2348.           CALL GetMsgAttr : _
  2349.           DontPrint = ZTrue : _
  2350.           ZUserIn$ = "=" : _
  2351.           JustReplied = ZTrue : _
  2352.           GOTO 4560
  2353.        GOTO 4620                                                     ' KG081303
  2354. 4609   CALL SetThread (CurMsg, OrigSubject$)     ' Thread            ' KG081303
  2355.        IF ZWasQ > 0 THEN _
  2356.           SearchHeader$ = ZUserIn$(2) : _
  2357.           SubInHeader$ = SearchHeader$ : _
  2358.           CALL Trim (SubInHeader$) : _
  2359.           GOTO 4352
  2360.        GOTO 4620                                                      ' KG081303
  2361. 4610   ZWasA = INSTR(" +-",ZUserIn$(1))      ' +/- read direction     ' KG081303
  2362.        CurMsg = CurMsg + 5 - 2 * ZWasA                                ' KG081303
  2363.        Forward = (ZWasA = 2)
  2364.        Reverse = (NOT Forward)
  2365.        SearchString$ = ""
  2366.        IF Reverse THEN _
  2367.           GOTO 4490 _
  2368.        ELSE GOTO 4450
  2369. 4611   IF (UserInHeader OR CanKill) THEN _     ' Kill                ' KG081303
  2370.          IF ZUserSecLevel >= ZOptSec(9) THEN _
  2371.             CALL PutMsgAttr : _
  2372.             MsgToKill = CurMsg : _
  2373.             Temp = ZWasQ : _
  2374.             GOSUB 3950 : _
  2375.             CALL GetMsgAttr : _
  2376.             GOTO 4629 _
  2377.          ELSE ZViolation$ = "MORE KILL" : _
  2378.               GOSUB 1380 : _
  2379.               GOTO 4629
  2380.        GOTO 4620                                                     ' KG081303
  2381. 4612   ZFileName$ = ZHelp$(7)  ' H - help                            ' KG081303
  2382.        GOSUB 1790                                                    ' KG091301
  2383. 4614   GOSUB 4617                                                    ' KG091301
  2384.        GOTO 4604                                                     ' KG091301
  2385. 4615   CALL SkipLine (1) ' = read again                              ' KG091301
  2386.        GOTO 4560                                                     ' KG081303
  2387. 4617   WasA1$ = ",H)lp,R)eply,T)hread,=,+,-" + _                     ' KG091301
  2388.                 MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _ ' KG091301
  2389.                 MID$(",K)ill",1, ShowKill * 6) + _                   ' KG091301
  2390.                 MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG091301
  2391.                 MID$(",S)ec",1, - CanChangeSec * 5)                  ' KG091301
  2392.        RETURN                                                        ' KG091301
  2393. 4620   IF NOT ZReply THEN _
  2394.           GOTO 4629
  2395. 4621   IF ZUserSecLevel < ZOptSec(5) THEN _     ' Reply
  2396.           ZViolation$ = "MORE RE" : _
  2397.           GOSUB 1380 : _
  2398.           ZReply = ZFalse : _
  2399.           GOTO 4629
  2400.        IF LEFT$(OrigSubject$,3) <> "(R)" THEN _                      ' ML062202
  2401.           OrigSubject$ = "(R)" + _
  2402.                      LEFT$(OrigSubject$,22)
  2403. 4622   MsgTo$ = MsgFrom$
  2404.        CALL Trim (MsgTo$)
  2405.        MsgFrom$ = ZActiveUserName$
  2406. 4623   DontPrint = ZFalse
  2407.        CALL PutMsgAttr
  2408.        IF MsgFwd THEN GOTO 4624
  2409.        ZOutTxt$ = "Quote " + MsgTo$ + "'s message (Y/[N])"
  2410.        GOSUB 12999
  2411.        IF ZRet OR NOT ZYes THEN _
  2412.           GOTO 4627
  2413. 4624   QuotedReply = ZTrue
  2414.        ZLinesInMsg = ZLinesInMsg - 1
  2415.        IF HiLitedLine > 0 THEN _
  2416.           ZOutTxt$(HiLitedLine) = ZOutTxt$(0) : _
  2417.           HiLitedLine = 0
  2418.        IF MsgFwd THEN _
  2419.           TempRightMargin = ZRightMargin _
  2420.        ELSE _
  2421.           TempRightMargin = ZRightMargin - 2
  2422.        CALL WordWrap (TempRightMargin,ZLinesInMsg,ZOutTxt$())
  2423.        IF ZLinesInMsg > ZMsgDim THEN _
  2424.           ZLinesInMsg = ZMsgDim : _
  2425.           CALL QuickTPut1 ("Original msg truncated to " + _
  2426.                       STR$(ZMsgDim) + " lines for editing!")
  2427.        IF MsgFwd THEN GOTO 4625
  2428.        FOR WasX = 1 TO ZLinesInMsg
  2429.           IF LEFT$(ZOutTxt$(WasX),1) = ">" THEN _
  2430.              ZOutTxt$(WasX) = ">" + ZOutTxt$(WasX) _
  2431.           ELSE ZOutTxt$(WasX) = "> " + ZOutTxt$(WasX)
  2432.        NEXT
  2433. 4625   WasX$ = MsgTo$
  2434.        GOSUB 2001
  2435.        IF (ActiveMessages >= MaxMsgs) OR MsgTo$ = "" THEN _
  2436.           GOTO 4628
  2437.        IF MsgFwd THEN _
  2438.           MsgFwd$ = ZActiveUserName$ : _
  2439.           CALL Trim (MsgFwd$) : _
  2440.           CALL Trim (WasX$) : _
  2441.           MsgFwd$ = "Msg was to " + WasX$ + _
  2442.              ", forwarded by " + MsgFwd$
  2443.        IF (MsgFwd AND CanChangeSec AND NOT MsgFromCaller) THEN _
  2444.           CALL Trim (MsgFrom$) : _
  2445.           ZOutTxt$ = "Message was from " + _
  2446.              MsgFrom$ + _
  2447.              ", change to " + _
  2448.              ZActiveUserName$ + _
  2449.              " (Y/[N])" : _
  2450.           GOSUB 12999 : _
  2451.           IF ZYes THEN _
  2452.              MsgFrom$ = ZActiveUserName$ : _
  2453.              CALL Trim (MsgFrom$) : _
  2454.              GOTO 4626
  2455.        IF MsgFwd AND NOT MsgFromCaller THEN _
  2456.           FOR MsgFwdCount = ZLinesInMsg TO 1 STEP -1 : _
  2457.              ZOutTxt$(MsgFwdCount + 2) = ZOutTxt$(MsgFwdCount) : _
  2458.           NEXT MsgFwdCount : _
  2459.           ZOutTxt$(1) = MsgFwd$ : _
  2460.           ZOutTxt$(2) = "" : _
  2461.           ZLinesInMsg = ZLinesInMsg + 2 : _
  2462.           IF NOT CanChangeSec THEN _
  2463.              MsgLockLines = 1
  2464. 4626   ZWasZ$ = "L"
  2465.        WasL = 1
  2466.        IF ZLinesInMsg >= ZMaxMsgLines THEN _
  2467.           CALL QuickTPut ("Msg cannot exceed" + _
  2468.                       STR$(ZMaxMsgLines) + " lines! ",0)
  2469.        IF NOT MsgFwd THEN _
  2470.           CALL QuickTPut1 ("C continues reply.  Please 1st delete unneeded lines (eg. d 1 5)")
  2471.        GOSUB 3200
  2472.        GOSUB 3020
  2473.        GOSUB 2300
  2474.        GOTO 4628
  2475. 4627   GOSUB 2000
  2476. 4628   ZReply = ZFalse
  2477.        JustReplied = ZTrue
  2478.        QuotedReply = ZTrue
  2479.        CALL GetMsgAttr
  2480.        DontPrint = ZTrue
  2481.        ZUserIn$ = "="
  2482.        QuotedReply = ZTrue
  2483.        MsgFwd = ZFalse
  2484.        GOTO 4560
  2485. 4629   QuotedReply = ZFalse
  2486.        JustReplied = ZFalse
  2487.        IF NOT Forward AND NOT Reverse THEN _
  2488.           GOTO 4370
  2489. 4630   CALL AskMore (",#(s) to read",ZTrue,ZTrue,WasXX,ZFalse)
  2490.        IF ZWasQ = 0 OR ZYes THEN _
  2491.           GOTO 4631
  2492.        IF ZNo THEN _
  2493.           RETURN
  2494.        IF ZSubParm = -1 THEN _
  2495.           RETURN 10595
  2496.        IF ZRet THEN _
  2497.           RETURN
  2498.        ZWasZ$ = ZUserIn$(1)
  2499.        CALL AllCaps (ZWasZ$)
  2500.        IF VAL(ZWasZ$) > 0 THEN _
  2501.           FOR WasI = ZWasQ TO 1 STEP -1 : _
  2502.              ZUserIn$(WasI + 1) = ZUserIn$(WasI) : _
  2503.           NEXT : _
  2504.           ZUserIn$(1) = MID$(ZAllOpts$,INSTR(ZOrigCommands$,"R"),1) : _
  2505.           ZLastIndex = ZWasQ + 1 : _
  2506.           ZAnsIndex = 1 : _
  2507.           RETURN 1235
  2508. 4631   CALL CheckCarrier
  2509.        IF ZSubParm THEN _
  2510.           RETURN 10595
  2511.        IF ZRet THEN _
  2512.           RETURN
  2513. 4635 IF WasSO = 0 THEN _
  2514.         WasSO = 1
  2515.      ZMsgDimIndex = ZMsgDimIndex + WasSO
  2516.      GOTO 4552
  2517. 4637 IF ReadMsgs THEN _
  2518.         SearchString$ = "" : _
  2519.         SearchHeader$ = "" : _
  2520.         SubInHeader$ = "" : _
  2521.         ToRequested = ZFalse : _
  2522.         FromRequested = ZFalse : _
  2523.         AddressedToUser = ZFalse : _
  2524.         GOTO 4370
  2525. 4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                        ' KG081404
  2526.      CALL SkipLine (1)                                               ' KG082102
  2527.      CALL QuickTPut1 ("--End Msgs--")                                ' KG081404
  2528.      RETURN
  2529. 4655 '****     update last message read     ****
  2530.      IF SearchHeader$ <> "" OR SearchString$ <> "" OR NOT ReadMsgs THEN _
  2531.         RETURN
  2532. 4656 IF ZMsgPtr(ZMsgDimIndex,2) > ZLastMsgRead THEN _
  2533.         ZMailWaiting = ZFalse : _
  2534.         ZLastMsgRead = ZMsgPtr(ZMsgDimIndex,2)
  2535.      RETURN
  2536. 4660 CALL ChkMsgName (MsgFromCaller,MsgToCaller)                     ' KG090402
  2537.      UserInHeader = (MsgFromCaller OR MsgToCaller)
  2538.      RETURN
  2539. '
  2540. ' ****  S - CHANGE MESSAGE SECURITY   ***
  2541. '
  2542. 4665 CALL Trim (MsgFrom$)
  2543.      ZOutTxt$ = "Change sender's name from " + _
  2544.         MsgFrom$ + _
  2545.         " to"
  2546.      GOSUB 12995
  2547.      IF ZWasQ = 0 THEN _
  2548.         GOTO 4666
  2549.      IF LEN(ZUserIn$) > 30 THEN _
  2550.         CALL QuickTPut1 ("30 Char. Max") : _
  2551.         GOTO 4665
  2552.      CALL AllCaps (ZUserIn$)
  2553.      MsgFrom$ = ZUserIn$
  2554. 4666 CALL Trim (MsgTo$)
  2555.      ZOutTxt$ = "Change receiver's name from " + _
  2556.         MsgTo$ + _
  2557.         " to"
  2558.      GOSUB 12995
  2559.      IF ZWasQ = 0 THEN _
  2560.         GOTO 4667
  2561.      IF LEN(ZUserIn$) > 30 THEN _
  2562.         CALL QuickTPut1 ("30 Char. Max") : _
  2563.         GOTO 4666
  2564.      CALL AllCaps (ZUserIn$)
  2565.      MsgTo$ = ZUserIn$
  2566.      TempMsgTo$ = ZUserIn$
  2567.      CALL MessageTo (HighestUserRecord,MsgTo$,MsgFrom$,RcvrRecNum,Found)
  2568.      IF MsgTo$ = "" THEN MsgTo$ = TempMsgTo$
  2569. 4667 CALL Trim (Subject$)
  2570.      ZOutTxt$ = "Change subject from " + _
  2571.         Subject$ + _
  2572.         " to"
  2573.      GOSUB 12995
  2574.      IF ZWasQ = 0 THEN _
  2575.         GOTO 4668
  2576.      IF LEN(ZUserIn$) > 25 THEN _
  2577.         CALL QuickTPut1 ("25 Char. Max") : _
  2578.         GOTO 4667
  2579.      CALL AllCaps (ZUserIn$)
  2580.      Subject$ = ZUserIn$
  2581. 4668 ZOutTxt$ = "Change min sec to read from" + _
  2582.         STR$(MsgSec) + _
  2583.         " to"
  2584.      GOSUB 12995
  2585.      IF ZWasQ=0 THEN _
  2586.         GOTO 4669
  2587.      CALL CheckInt (ZUserIn$)
  2588.      IF ZErrCode <> 0 THEN _
  2589.         RETURN
  2590.      MsgSec = ZTestedIntValue
  2591. 4669 ZReply = ZTrue
  2592.      CALL MsgProt (MsgTo$,Found,MsgPswd$)
  2593.      ZReply = ZFalse
  2594. 4670 MsgTo$ = LEFT$(MsgTo$ + SPACE$(22),22)
  2595.      MsgFrom$ = LEFT$(MsgFrom$ + SPACE$(31),31)
  2596.      Subject$ = LEFT$(Subject$ + SPACE$(25),25)
  2597.      MsgPswd$ = LEFT$(MsgPswd$ + SPACE$(15),15)
  2598.      ZSubParm = 3
  2599.      CALL FileLock
  2600.      GET 1,CurHeader
  2601.      MID$(ZMsgRec$,37,22) = MsgTo$
  2602.      MID$(ZMsgRec$,6,31) = MsgFrom$
  2603.      MID$(ZMsgRec$,76,25) = Subject$
  2604.      MID$(ZMsgRec$,121,2) = MKI$(MsgSec)
  2605.      MID$(ZMsgRec$,101,15) = MsgPswd$
  2606.      IF LEFT$(MsgPswd$,6) = "^READ^" THEN _
  2607.         MID$(ZMsgRec$,1,1) = "*" _
  2608.      ELSE _
  2609.         MID$(ZMsgRec$,1,1) = " "
  2610.      PUT 1,CurHeader
  2611.      ZSubParm = 4
  2612.      CALL FileLock
  2613.      CALL QuickTPut1 ("Message header changed")
  2614.      CALL SkipLine (1)
  2615.      CALL FlushKeys
  2616.      RETURN
  2617. '
  2618. ' ****  O - COMMAND FROM MAIN MENU (OPERATOR PAGE)   ***
  2619. '
  2620. 4700 IF NOT ZSysopAvail THEN _
  2621.         ZOutTxt$ = "Sorry, " + _
  2622.              ZSysopFirstName$ + _
  2623.              " not available to answer page" : _
  2624.         GOSUB 12979 : _
  2625.         GOTO 4755
  2626. 4705 CALL QuickTPut1 ("Chat. Remote Conversation")
  2627.      WasJJ = VAL(MID$(TIME$,1,2))*100 + VAL(MID$(TIME$,4,2))
  2628.      IF (WasJJ > ZStartOfficeHours AND WasJJ < ZEndOfficeHours) OR ZSysopAnnoy THEN _
  2629.         GOTO 4710
  2630. 4708 ZOutTxt$ = "SYSOP in from" + _
  2631.           STR$(ZStartOfficeHours) + _
  2632.           " to" + _
  2633.           STR$(ZEndOfficeHours) + ","
  2634.      GOSUB 12979
  2635.      GOTO 4755
  2636. 4710 ZOutTxt$ = "Page " + _
  2637.           ZSysopFirstName$ + _
  2638.           " (Y/[N])"
  2639.      CALL SkipLine (1)
  2640.      GOSUB 12999
  2641.      IF NOT ZYes THEN _
  2642.         RETURN
  2643.      PageCount = 0
  2644.      ZOutTxt$ = "Paging " + _
  2645.           ZSysopFirstName$                                           ' KG071301
  2646.      GOSUB 12978
  2647.      PageTimeStart! = TIMER
  2648.      TempSnoop = ZSnoop                                              ' DA101801
  2649.      ZSnoop = ZTrue                                                  ' DA101801
  2650.      CALL Line25                                                     ' DA102401
  2651. 4730 CALL DelayTime (1)
  2652. 4735 PageCount = PageCount + 1
  2653.      IF INKEY$ = ZEscape$ THEN _
  2654.         GOTO 4765
  2655. 4740 IF PageCount MOD 2 THEN _
  2656.         ZOutTxt$ = ZPagingPtrSupport$ + _
  2657.              ZBellRinger$ : _
  2658.         IF LEN(ZPagingPtrSupport$) = 3 THEN _
  2659.            CALL Printit (CHR$(7)) : _
  2660.            IF ZErrCode <> 0 THEN _
  2661.               ZWasEL = 4740 : _
  2662.               GOTO 13000
  2663. 4745 GOSUB 12978
  2664.      CALL CheckTime (PageTimeStart!, PageTimeNow!, 2)
  2665.      IF PageTimeNow! < 30 THEN GOTO 4730
  2666.      ZSnoop = TempSnoop                                              ' DA101801
  2667. 4747 GOSUB 12979
  2668. 4750 CALL QuickTPut1 (ZSysopFirstName$ + " not responding")
  2669. 4755 CALL QuickTPut1 ("Try a msg or comment")
  2670.      ZPageStatus$ = "PG!"                                            ' DA080902
  2671.      CALL UpdtCalr ("Operator paged " + LEFT$(TIME$,5),2)
  2672.      RETURN
  2673. 4765 CALL UpdtCalr ("Paged & chatted with Sysop",1)
  2674.      CALL QuickTPut1 ("SYSOP in!  " + _
  2675.           ZFirstName$ + _
  2676.           ", this is " + _
  2677.           ZSysopFirstName$ + _
  2678.           " go ahead!")
  2679.      ZPageStatus$ = ""
  2680. 4770 CALL SysopChat
  2681.      IF ZSubParm < 0 THEN _
  2682.         GOTO 202
  2683.      RETURN
  2684. '
  2685. ' ****  S - COMMAND FROM UTILITY MENU (STATISTICS)  ***
  2686. '
  2687. 4850 GOSUB 1893
  2688.      CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " Node " + ZNodeID$)
  2689.      ZOutTxt$ = ""
  2690.      IF NOT ZConfMode THEN _
  2691.         ZOutTxt$ = "Caller # " + _
  2692.              STR$(CallsToDate!) + _
  2693.              "  "
  2694. 4855 ZOutTxt$ = ZOutTxt$ + _
  2695.           "# active msgs:" + _
  2696.           STR$(ActiveMessages)
  2697.      ZOutTxt$ = ZOutTxt$ + _
  2698.           "  Next msg #" + _
  2699.           STR$(HighMsgNumber + 1)
  2700.      IF ZLastMsgRead > 0 THEN _
  2701.         ZOutTxt$ = ZOutTxt$ + _
  2702.              "  Last msg read:" + _
  2703.              STR$(ZLastMsgRead)
  2704. 4857 GOSUB 12976
  2705.      IF (NOT ZSysop) AND (ZUserSecLevel < ZSecKillAny) THEN _
  2706.         RETURN
  2707.      UserWork = (HighestUserRecord * .95) + 1
  2708.      IF ZMsgsCanGrow THEN _
  2709.         ZWasY$ = " open" _
  2710.      ELSE ZWasY$ = STR$(HighestMsgRecord + 1 - NodesInSystem - ZNextMsgRec)
  2711.      ZOutTxt$ = "USERS: used" + _
  2712.           STR$(CurUserCount - 1) + _
  2713.           " avl" + _
  2714.           STR$(UserWork - CurUserCount) + _
  2715.           "  MSGS: used" + _
  2716.           STR$(ActiveMessages) + _
  2717.           " avl" + _
  2718.           STR$(MaxMsgs - ActiveMessages) + _
  2719.           "  MSG REC: used" + _
  2720.           STR$(ZNextMsgRec - 1) + _
  2721.           " avl" + ZWasY$
  2722.      GOSUB 12976
  2723.      ZWasZ$ = ZUpldDriveFile$
  2724.      CALL FindFree
  2725.      CALL QuickTPut1 ("Upload disk has" + ZFreeSpace$)
  2726.      RETURN
  2727. 4900 CALL UpdtCalr ("Entered " + ZConfName$,2)                       ' KG052702
  2728.      CALL QuickTPut1 ("Welcome to " + ZConfName$)
  2729. 4905 GOSUB 1790
  2730. 4910 GOSUB 12986
  2731.      GOSUB 5344
  2732.      IF LOF(1) = 0 THEN _
  2733.         ZWasDF$ = ZActiveMessageFile$ : _
  2734.         CLOSE 1 : _
  2735.         KILL ZActiveMessageFile$ : _
  2736.         GOSUB 12987 : _
  2737.         RETURN 13600
  2738.      GOSUB 23000
  2739.      RETURN
  2740. '
  2741. ' ****  P - COMMAND FROM UTILITY MENU (PASSWORD CHANGE)  ***
  2742. '
  2743. 5110 CALL NewPassword ("Enter new password" + ZPressEnter$,ZTrue)
  2744.      IF ZSubParm < 0 THEN _
  2745.         GOTO 202
  2746.      IF ZWasQ = 0 THEN _
  2747.         RETURN
  2748. 5120 ZOutTxt$ = "Reenter new password"
  2749.      GOSUB 45010
  2750.      IF ZWasQ = 0 THEN _
  2751.         RETURN
  2752.      CALL AllCaps (ZUserIn$)
  2753.      IF ZWasZ$ <> ZUserIn$ THEN _
  2754.         ZOutTxt$ = "Passwords don't match!" : _
  2755.         GOSUB 12979 : _
  2756.         RETURN
  2757. 5125 IF ZMaxPswdChanges AND _
  2758.         ChangeThisSession > _
  2759.         ZMaxPswdChanges AND _
  2760.         NOT ZSysop THEN _
  2761.             ZOutTxt$ = "No changes permitted" : _
  2762.             GOSUB 12975 : _
  2763.             RETURN _
  2764.      ELSE PswdChangeAllowed = ZTrue : _
  2765.           GOSUB 5140 : _
  2766.           IF NOT Found THEN _
  2767.              GOTO 5129 _
  2768.           ELSE ZOutTxt$ = "Temporary change" : _
  2769.                GOSUB 12975 : _
  2770.                ZPswd$ = ZTempPassword$ : _
  2771.                ZSecsPerSession! = ZTempTimeAllowed * 60 : _
  2772.                ZUserSecLevel = ZTempSecLevel : _
  2773.                GOSUB 41070 : _
  2774.                ZSysop = (ZUserSecLevel >= ZSysopSecLevel) : _
  2775.                CALL SetPrompt : _
  2776.                CALL XferType (2,ZTrue)
  2777.      IF ZActiveUserName$ = "SYSOP" THEN _
  2778.         ZUserIn$(1) = "********"
  2779. 5126 CALL UpdtCalr ("Used temp password " + ZUserIn$,2)
  2780.      RETURN
  2781. 5129 IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  2782.         CALL QuickTPut1 ("Password Change only in Logon User File") : _
  2783.         RETURN
  2784.      GOSUB 12989
  2785.      CALL OpenUser (HighestUserRecord)
  2786.      GOSUB 9450
  2787. 5130 IF ZUserFileIndex < 1 OR _
  2788.         ZUserFileIndex > 32767 THEN _
  2789.         GOTO 5160
  2790.      GET 5,ZUserFileIndex
  2791.      CALL AllCaps (ZUserIn$)
  2792.      LSET ZPswd$ = ZUserIn$
  2793.      GOSUB 9440
  2794.      GOSUB 12991
  2795.      ZOutTxt$ = "Password changed"
  2796.      ZStopInterrupts = ZTrue
  2797.      GOSUB 12975
  2798.      IF ZMaxPswdChanges THEN _
  2799.         ChangeThisSession = ChangeThisSession + 1
  2800. 5131 CALL UpdtCalr ("New Password " + ZUserIn$(1),2)
  2801.      RETURN
  2802. '
  2803. ' ****  SEARCH "PASSWORDS" FILE FOR TEMPORARY PASSWORDS  ***
  2804. '
  2805. 5135 ZWasZ$ = ""
  2806.      WasZ = 0
  2807.      GOSUB 5140
  2808.      IF NOT Found THEN _
  2809.         ZTempTimeAllowed = MinsPerSessionDef : _
  2810.         ZTempMaxPerDay = MaxPerDayDef _
  2811.      ELSE ZTimeLockSet = ZTempTimeLock : _
  2812.           ZDaysInRegPeriod = ZTempRegPeriod
  2813.      ZMinsPerSession = ZTempTimeAllowed
  2814.      ZMaxPerDay = -(ZMaxPerDay * (ZTempMaxPerDay <= 0)) - _
  2815.                     (ZTempMaxPerDay * (ZTempMaxPerDay > 0))
  2816.      IF ZLimitMinsPerSession THEN _
  2817.         IF ZMinsPerSession > ZLimitMinsPerSession THEN _
  2818.            ZMinsPerSession = ZLimitMinsPerSession : _
  2819.            ZOutTxt$ = "Time shortened for external event" : _
  2820.            CALL RingCaller
  2821.      GOSUB 825
  2822.      RETURN
  2823. 5140 Found = ZFalse
  2824.      CALL OpenWork (2,ZPswdFile$)
  2825.      IF ZErrCode = 53 THEN _
  2826.         CALL UpdtCalr ("Missing file " + ZPswdFile$,2) : _
  2827.         IF WasZ = 1 THEN _
  2828.            CALL AllCaps (ZUserIn$(1)) : _
  2829.            ZWasZ$ = ZUserIn$(1) : _
  2830.            GOTO 5160 _
  2831.         ELSE GOTO 5160
  2832.      ZWasZ$ = ZWasZ$ + _
  2833.           SPACE$(15 - LEN(ZWasZ$))
  2834. 5150 IF EOF(2) THEN _
  2835.         GOTO 5160
  2836. 5151 CALL GetPassword
  2837.      IF ZErrCode <> 0 THEN _
  2838.         ZWasEL = 5151 : _
  2839.         GOTO 13000
  2840.      IF LEN(ZTempPassword$) > 15 THEN _
  2841.         GOTO 5150
  2842.      ZTempPassword$ = ZTempPassword$ + _
  2843.                       SPACE$(15 - LEN(ZTempPassword$))
  2844.      IF ZWasZ$ <> ZTempPassword$ THEN _
  2845.         GOTO 5150
  2846.      IF PswdChangeAllowed AND _
  2847.         ZUserSecLevel >= ZMinSecForTempPswd THEN _
  2848.         GOTO 5155
  2849.      IF ZUserSecLevel <> ZTempSecLevel THEN _
  2850.         GOTO 5150
  2851.      IF ZStartTime = 0 THEN _
  2852.         GOTO 5155
  2853.      WorkTime$ = TIME$
  2854.      TestTime = VAL(LEFT$(WorkTime$,2) + MID$(WorkTime$,4,2))
  2855.      IF TestTime => ZStartTime AND TestTime <= ZEndTime THEN _
  2856.         GOTO 5155
  2857.      IF ZEndTime < ZStartTime THEN _
  2858.         IF TestTime => ZStartTime OR TestTime <= ZEndTime THEN _
  2859.            GOTO 5155
  2860.      GOTO 5150
  2861. 5155 Found = ZTrue
  2862. 5160 ZErrCode = 0
  2863.      RETURN
  2864. 5200 CALL PageLen
  2865.      RETURN
  2866. '
  2867. ' ****  J - COMMAND FROM MAIN MENU (JOIN CONFERENCE)  ***
  2868. '
  2869. 5300 WasA1$ = ZConfMenu$
  2870.      CALL BreakFileName (ZActiveMessageFile$,MsgDrvPath$,WasX$,ZWasY$,ZTrue)
  2871.      CALL Talk (12,ZOutTxt$)
  2872. 5301 ZStackC = ZTrue
  2873.      CALL SubMenu ("What conference, L)ist, M)ain ([ENTER] quits)",_
  2874.          WasA1$,MsgDrvPath$,_
  2875.          "M.DEF","M",ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"C.DEF",WasX) ' KG032502
  2876.      IF ZWasQ = 0 THEN _
  2877.         RETURN
  2878.      IF ZSubParm = -1 THEN _
  2879.         RETURN 10595
  2880. 5323 IF ZWasZ$ = "M" OR ZWasZ$ = "MAIN" THEN _
  2881.         IF ZConfName$ = "MAIN" THEN _
  2882.            RETURN _
  2883.         ELSE GOTO 5350
  2884.      IF NOT ZOK THEN _
  2885.         GOTO 5300
  2886.      CLOSE 2
  2887. '
  2888. ' ****  UPDATE PREVIOUS MESSAGE BASE CHECKPOINT RECORD  ***
  2889. '
  2890. 5324 PrevConfName$ = ZConfName$
  2891.      ZConfName$ = ZWasZ$
  2892.      ConfFileName$ = ZConfName$
  2893.      ConfNameSave$ = ZConfName$
  2894.      ' GOSUB 5342
  2895.      PrevMsg$ = ZActiveMessageFile$
  2896.      ZActiveMessageFile$ = ZFileName$
  2897.      GOSUB 5343
  2898. '
  2899. ' ****  UPDATE PREVIOUS USER RECORD  ***
  2900. '
  2901. 5325 GOSUB 5380
  2902. '
  2903. ' *****  CHECK WHETHER HAVE SUBBOARD (I.E. CONFIG.DEF EXISTS)  ****
  2904. '
  2905. 5327 UserRecordHold$ = ZUserRecord$
  2906.      ConfModeSave = ZConfMode
  2907.      ZConfMode = ZTrue
  2908.      PrevUser$ = ZActiveUserFile$
  2909.      PrevIndex = ZUserFileIndex
  2910.      PrevMainUser$ = ZMainUserFile$
  2911.      PrevUSL = ZUserSecLevel
  2912.      PrevDef$ = ZCurDef$
  2913. 5328 WasX$ = ZConfName$ + _
  2914.           "C.DEF"
  2915.      CALL FindIt (WasX$)
  2916.      SubBoard = ZOK
  2917.      IF NOT SubBoard THEN _
  2918.         CALL BreakFileName (ZMainMsgFile$,MsgDrvPath$,ZWasDF$,ZWasY$,ZTrue) : _
  2919.         WasX$ = MsgDrvPath$ + WasX$ : _
  2920.         CALL FindIt (WasX$) : _
  2921.         SubBoard = ZOK
  2922.      IF SubBoard THEN _
  2923.         IF LEN(ZConfName$) = 6 THEN _
  2924.            IF LEFT$(ZConfName$,4) = "RBBS" AND RIGHT$(ZConfName$,1) = "P" THEN _
  2925.               SubBoard = ZFalse
  2926.      IF NOT SubBoard THEN _
  2927.         CALL BreakFileName (ZActiveUserFile$,UserDrvPath$,ZWasDF$,ZWasY$,ZTrue) : _
  2928.         WasX$ = UserDrvPath$ + _
  2929.              ZConfName$ + _
  2930.              "U.DEF" : _
  2931.         ZFileName$ = ZWelcomeFileDrvPath$ + _
  2932.                      ZConfName$ + _
  2933.                      "W.DEF" _
  2934.         ELSE CALL ReadDef (WasX$) : _
  2935.              IF ZErrCode > 0 THEN _
  2936.                 CALL UpdtCalr ("Error"+STR$(ZErrCode)+" reading config file "+WasX$,2) : _
  2937.                 ZErrCode = 0 : _
  2938.                 ZInConfMenu = ZFalse : _
  2939.                 ZOutTxt$ = "error reading subboard" : _
  2940.                 GOTO 5341 _
  2941.              ELSE WasX$ = ZMainUserFile$ : _
  2942.                   ZFileName$ = "" : _
  2943.                   CALL FindIt (ZMainMsgFile$) : _
  2944.                   IF NOT ZOK THEN _
  2945.                      ZOutTxt$ = "msg file missing for" : _
  2946.                      ZInConfMenu = ZFalse : _
  2947.                      GOTO 5341 _
  2948.                   ELSE ZActiveMessageFile$ = ZMainMsgFile$ : _
  2949.                        GOSUB 5343
  2950.      UpdateDate = ZTrue
  2951.      CALL FindIt (WasX$)
  2952.      IF ZOK THEN _
  2953.         GOTO 5330
  2954. '
  2955. ' *****  NO USER FILE - A PUBLIC CONFERENCE   ****
  2956. '
  2957.      ZMainUserFile$ = PrevMainUser$
  2958.      IF (ZUserSecLevel < AutoAddSec) THEN _
  2959.         GOTO 5340
  2960.      GOTO 5345
  2961.      'WasX$ = ZMainUserFile$
  2962.      'ZSysopPswd1$ = ""
  2963.      'ZSysopPswd2$ = ""
  2964. '
  2965. ' ****  CHECK CONFERENCE USER'S FILE  ***
  2966. '
  2967. 5330 ZActiveUserFile$ = WasX$
  2968.      IF ZMainUserFileIndex < 1 THEN _
  2969.         Found = ZFalse : _
  2970.         ZUserFileIndex = 0 : _
  2971.         GOTO 5335
  2972.      CALL WordInFile (ZConfMenu$,ZConfName$,ZInConfMenu)
  2973.      IF ZActiveUserName$ = "SYSOP" THEN _
  2974.         TempHashValue$ = ZOrigUserName$
  2975.      GOSUB 12598
  2976.      GOSUB 12984
  2977. 5335 IF Found THEN _
  2978.         GOSUB 9500 : _
  2979.         ZMainUserFileIndex = -(SubBoard * ZUserFileIndex)_
  2980.                                -((NOT SubBoard) * ZMainUserFileIndex) : _
  2981.         Temp = -(SubBoard * ZMinLogonSec) _
  2982.                -((NOT SubBoard) * AutoAddSec) : _
  2983.         WasI = (ZUserSecLevel < OrigMainSec) : _
  2984.         WasJ = (ZUserSecLevel < Temp) : _
  2985.         WasK = (WasI AND WasJ) : _
  2986.         IF WasK THEN _
  2987.            ZOutTxt$ = "you have been locked out of" : _
  2988.            GOTO 5341 _
  2989.         ELSE GOSUB 5375 : _
  2990.              GOTO 5345
  2991. '
  2992. ' **** USER NOT FOUND.  AUTO-ADD TO SUBBOARD IF SUFFICIENT SECURITY ***
  2993. '
  2994.      ZNewUser = SubBoard
  2995.      IF SubBoard THEN _
  2996.         AutoAddSec = ZMinLogonSec
  2997.      IF (ZOrigSec >= AutoAddSec) AND _                               ' KG080601
  2998.         (ZUserFileIndex > 0) AND (ZMainUserFileIndex > 0) THEN _
  2999.         LSET ZUserRecord$ = UserRecordHold$ : _
  3000.         CALL QuickTPut1 ("MEMBER privileges granted in " + ZConfName$) : _
  3001.         MID$(ZUserOption$,3,2) = MKI$(0) : _
  3002.         MID$(ZUserOption$,1,2) = MKI$(0) : _
  3003.         ZActiveUserName$ = LEFT$(UserRecordHold$,30) : _
  3004.         CALL Trim (ZActiveUserName$) : _
  3005.         Temp = -(SubBoard * ZDefaultSecLevel) _
  3006.                -((NOT SubBoard) * ZUserSecSave) : _
  3007.         GOSUB 5370 : _
  3008.         Temp = -(ZWasA * ZSysopSecLevel) - ((NOT ZWasA) * Temp) : _
  3009.         LSET ZSecLevel$ = MKI$(Temp) : _
  3010.         ZUserSecLevel = Temp : _
  3011.         GOSUB 5375 : _
  3012.         ZPageLength = ZPageLengthDef : _
  3013.         GOSUB 12986 : _
  3014.         GOSUB 12630 : _
  3015.         UpdateDate = ZTrue : _
  3016.         Found = ZTrue : _
  3017.         GOTO 5335
  3018.      IF ZOrigSec >= AutoAddSec THEN _                                ' KG080601
  3019.         CALL QuickTPut1 ("GUEST privileges granted in " + ZConfName$) : _
  3020.         ZActiveUserFile$ = PrevUser$ : _
  3021.         UpdateDate = ZFalse : _
  3022.         ZUserFileIndex = PrevIndex : _
  3023.         GOSUB 5382 : _
  3024.         ZUserFileIndex = 0 : _
  3025.         GOTO 5345
  3026.      ZNewUser = ZFalse
  3027. 5340 IF ZInConfMenu THEN _
  3028.         ZOutTxt$ = "you are not in conference" _
  3029.      ELSE ZOutTxt$ = "no such option"
  3030. 5341 ZOutTxt$ = ZOutTxt$ + " " + ZConfName$
  3031. '
  3032. ' ****  CANNOT JOIN THE REQUESTED CONFERENCE.  THEREFORE, GO BACK  ***
  3033. '
  3034.      GOSUB 1397
  3035.      ZConfName$ = PrevConfName$
  3036.      ConfFileName$ = ZConfName$
  3037.      IF SubBoard THEN _
  3038.         CALL ReadDef (PrevDef$)
  3039.      ZActiveMessageFile$ = PrevMsg$
  3040.      GOSUB 5343
  3041.      ZUserFileIndex = PrevIndex
  3042.      ZActiveUserFile$ = PrevUser$
  3043.      GOSUB 5382
  3044.      ZConfMode = ConfModeSave
  3045.      GOSUB 12987
  3046.      ZAnsIndex = 0
  3047.      ZLastIndex = 0
  3048.      GOTO 5301
  3049. '
  3050. ' ****  RESTORE A MESSAGE BASE   ***
  3051. '
  3052. 5343 GOSUB 5344
  3053.      GOSUB 23000
  3054.      RETURN
  3055. '
  3056. ' *****  OPEN AND SETUP MESSAGE BASE  *****
  3057. '
  3058. 5344 CALL OpenMsg
  3059.      IF ZErrCode = 64 THEN _
  3060.         ZErrCode = 0 : _
  3061.         GOTO 5350
  3062.      FIELD 1, 128 AS ZMsgRec$
  3063.      RETURN
  3064. '
  3065. ' *****  SUCCESSFUL CONFERENCE JOIN  ****
  3066. '
  3067. 5345 ZNewsFileName$ = ZWelcomeFileDrvPath$ + ZConfName$ + ".NWS"
  3068.      ZConfName$ = ZConfName$ + " " + MID$("ConferenceSubboard",1-10*SubBoard,10)
  3069.      IF ZGlobalSysop THEN _
  3070.         ZActiveUserName$ = "SYSOP"
  3071. 5347 GOSUB 4900
  3072. 5348 GOSUB 12987
  3073.      GOSUB 12990
  3074.      IF SubBoard THEN _
  3075.         ZHasDoored = ZFalse : _
  3076.         ZActiveFMSDir$ = "" : _
  3077.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  3078.         BoardCheckDate$ = LEFT$("00-00-00",-ZNewUser*8) + _          ' KG081001
  3079.                           LEFT$(ZLastDateTimeOn$,-(NOT ZNewUser)*8) : _  ' KG081001
  3080.         RETURN 108
  3081.      GOSUB 827
  3082.      IF UpdateDate THEN _
  3083.         BoardCheckDate$ = ZLastDateTimeOn$ : _
  3084.         ZTimeLoggedOn$ = TIME$ : _                                   ' KG070601
  3085.         LSET ZLastDateTimeOn$ = ZCurDate$ + _
  3086.                                   " " + _
  3087.                                   ZTimeLoggedOn$ : _
  3088.         GOSUB 9440 : _
  3089.         GOSUB 12991
  3090.      IF PrevUSL <> ZUserSecLevel THEN _
  3091.         CALL SetPrompt
  3092.      GOSUB 1241
  3093.      RETURN 852
  3094. '
  3095. ' ****  JOIN M)AIN   ***
  3096. '
  3097. 5350 IF ZConfName$ <> "MAIN" THEN _
  3098.         CALL QuickTPut1 ("Rejoining " + OrigMsgName$)                ' KG082003
  3099.      ConfFileName$ = OrigMsgName$
  3100.      ZNewsFileName$ = OrigNewsFileName$
  3101.      TurboLogon = ZTrue
  3102.      ZWasQ = 0
  3103.      ZNewUser = ZFalse                                               ' KG092201
  3104.      ZInConfMenu = ZTrue
  3105.      IF ZActiveUserName$ = "SYSOP" THEN _
  3106.         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
  3107.         CALL Trim (ZActiveUserName$)
  3108.      ZConfigFileName$ = ZOrigCnfg$
  3109.      CALL ReadDef (ZConfigFileName$)
  3110.      IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
  3111.         ZActiveMessageFile$ = ZOrigMsgFile$ : _
  3112.         GOSUB 5343
  3113.      IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  3114.         GOSUB 5380 : _
  3115.         ZActiveUserFile$ = ZOrigUserFile$ : _
  3116.         ZActiveUserName$ = ZOrigUserName$ : _
  3117.         GOSUB 12598 : _
  3118.         GOSUB 12990 : _
  3119.         IF Found THEN _
  3120.            GOSUB 9500 : _
  3121.            ZMainUserFileIndex = ZUserFileIndex : _
  3122.            CALL SetPrompt : _
  3123.            CALL XferType (2,ZTrue) _
  3124.         ELSE ZUserFileIndex = 0 : _
  3125.              ZMainUserFileIndex = 0
  3126.      CALL UpdtCalr ("Exited " + ZConfName$,2)                        ' KG082003
  3127.      ZConfName$ = "MAIN"                                             ' KG082003
  3128.      GOSUB 2350
  3129.      ZUplds = ZGlobalUplds
  3130.      ZDnlds = ZGlobalDnlds
  3131.      ZDLToday! = ZGlobalDLToday!
  3132.      ZBytesToday! = ZGlobalBytesToday!
  3133.      ZDLBytes! = ZGlobalDLBytes!
  3134.      ZULBytes! = ZGlobalULBytes!
  3135. 5360 ZConfMode = ZFalse
  3136.      SubBoard = ZTrue
  3137.      GOSUB 12987
  3138.      RETURN 108
  3139. 5370 ZRemoteSysop = (ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$) ' KG090402
  3140.      ZWasA = ZRemoteSysop                                            ' KG090402
  3141.      ZGlobalSysop = (ZGlobalSysop OR (ZWasA AND ZOrigCnfg$ = ZConfigFileName$))
  3142.      IF ZGlobalSysop THEN _
  3143.         ZWasA = ZTrue
  3144.      RETURN
  3145. 5375 IF ((ZUserSecLevel < ZAutoUpgradeSec) AND SubBoard) OR _
  3146.         ((ZUserSecLevel < OrigUpgradeSec) AND NOT SubBoard) THEN _
  3147.            IF ZUserSecLevel <> ZOrigSec THEN _
  3148.               ZUserSecLevel = ZOrigSec : _
  3149.               LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  3150.      RETURN
  3151. '
  3152. ' *****  UPDATE CURRENT USERS RECORD  ****
  3153. '
  3154. 5380 IF ZUserFileIndex < 1 THEN _
  3155.         RETURN
  3156.      IF ZAdjustedSecurity AND NOT ZSysop THEN _
  3157.         LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  3158.         ZUserSecSave = ZUserSecLevel
  3159.      CALL UpdateU (ZFalse)
  3160.      RETURN
  3161. '
  3162. ' *****  RESTORE A USER RECORD  ****
  3163. '
  3164. 5382 IF ZUserFileIndex < 1 THEN _
  3165.         ZUserSecLevel = ZDefaultSecLevel : _
  3166.         RETURN
  3167.      CALL OpenUser (HighestUserRecord)
  3168.      GET 5,ZUserFileIndex
  3169.      GOSUB 9500
  3170.      RETURN
  3171. '
  3172. ' *****  R - COMMAND FROM UTILITY MENU (REVIEW PROFILE)  ****
  3173. '
  3174. 5400 CALL SkipLine(2)
  3175.      CALL QuickTPut1 ("Your PROFILE")                                ' KG072603
  3176. 5410 CALL Toggle(-9)
  3177.      GOSUB 43020
  3178.      ZFF = INSTR(ZDefaultXfer$,ZUserXferDefault$)
  3179.      CALL Toggle(-5)
  3180.      GOSUB 42810
  3181.      CALL Toggle(-3)
  3182.      CALL Toggle(-6)
  3183.      CALL Toggle(-7)
  3184.      CALL Toggle(-10)
  3185.      CALL Toggle(-2)
  3186.      CALL Toggle(-4)
  3187.      CALL Toggle(-8)
  3188.      CALL Toggle(-1)
  3189.      IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  3190.         IF ZUserSecLevel > ZExpiredSec THEN _
  3191.            CALL QuickTPut1 ("Registration expires " + ZExpirationDate$)
  3192.      RETURN
  3193. '
  3194. ' *****  B - COMMAND FROM UTILITY MENU (300 TO 450 BAUD CHANGE)  ****
  3195. '
  3196. 5500 CALL Baud450
  3197.      IF ZLocalUser OR NOT (ZSubParm OR ZWasC = 20) THEN _
  3198.         RETURN
  3199. 5502 RETURN 10595  'Entry point when have double nested gosub
  3200. '
  3201. ' *****  V - COMMAND FROM MAIN MENU (VIEW CONFERENCES)  ****
  3202. '
  3203. 5800 CALL ConfMail (MailCheckConfirm)
  3204.      ConfMailJoin = (ZHomeConf$ <> "")
  3205.      RETURN
  3206. '
  3207. ' *  FORMAT MESSAGE HEADER INFORMATION FOR DISPLAY
  3208. '
  3209. 8000 IF ZRet THEN _
  3210.         RETURN
  3211. 8020 IF MID$(ZMsgRec$,37,5) = "ALL  " THEN _
  3212.         MsgTo$ = "ALL" : _
  3213.         GOTO 8040
  3214. 8030 MsgTo$ = MID$(ZMsgRec$,37,22)
  3215.      CALL Trim (MsgTo$)
  3216. 8040 IF LEN(MsgTo$) < 23 THEN _
  3217.         MsgTo$ = MsgTo$ + _
  3218.                       SPACE$(23 - LEN(MsgTo$))
  3219.      Subject$ = MID$(ZMsgRec$,76,25)
  3220.      CALL Trim (Subject$)
  3221.      CALL AllCaps (Subject$)                                         ' KG051501
  3222.      OrigSubject$ = Subject$
  3223.      IF ZPswdFailed THEN _
  3224.         Subject$ = WasSJ$
  3225. 8050 MsgFrom$ = MID$(ZMsgRec$,6,31)
  3226.      CALL Trim (MsgFrom$)
  3227.      IF LEN(MsgFrom$) < 23 THEN _
  3228.         MsgFrom$ = MsgFrom$ + _
  3229.                         SPACE$(23 - LEN(MsgFrom$))
  3230.      IF ZUserSecLevel >= ZSecChangeMsg THEN _
  3231.         Year$ = "  Security:" + _
  3232.               STR$(MsgSec) _
  3233.         ELSE Year$ = ""
  3234.      IF MID$(ZMsgRec$,101,1) = "!" THEN _
  3235.         MID$(ZMsgRec$,1,1) = "!"
  3236.      ZOutTxt$ = ZFG1$ + "Msg #: " + _
  3237.           LEFT$(ZMsgRec$,5) + _
  3238.           Year$ + SPACE$ (22-LEN(Year$)) + ZConfName$
  3239.      Year$ = ZFG4$ + "   Sent: " + _
  3240.           MID$(ZMsgRec$,68,8) + _
  3241.           " " + _
  3242.           MID$(ZMsgRec$,59,5)
  3243.      IF NOT ZRet THEN _
  3244.         IF ReadMsgs THEN _
  3245.            CALL QuickTPut1 (ZOutTxt$): _
  3246.            WasX$ = MsgFrom$ : _
  3247.            CALL CheckColor (WasX$,SubInHeader$,ZFG2$) : _
  3248.            CALL QuickTPut1 (ZFG2$ + " From:  " + WasX$ + Year$) : _
  3249.            GOSUB 8076 : _
  3250.            WasX$ = MsgTo$ : _
  3251.            CALL CheckColor (WasX$,SubInHeader$,ZFG3$) : _
  3252.            CALL QuickTPut1 (ZFG3$ + "   To:  " + WasX$ + "  " + ZFG2$ + Year$) : _
  3253.            CALL CheckColor (Subject$,SubInHeader$,ZFG4$) : _
  3254.            ZOutTxt$ = ZFG4$ + "   Re:  " + _
  3255.                 Subject$ + ZEmphasizeOff$ _
  3256.         ELSE ZOutTxt$ = ZFG1$ + LEFT$(ZMsgRec$,5) + _
  3257.                   " " + _
  3258.                   MID$(ZMsgRec$,68,5) + _
  3259.                   " " + _
  3260.                   + ZFG2$ + LEFT$(MsgFrom$,18) + _
  3261.                   " -> " + _
  3262.                   + ZFG3$ + LEFT$(MsgTo$,19) + _
  3263.                   " " + _
  3264.                   + ZFG4$ + LEFT$(Subject$,24) + ZEmphasizeOff$ : _
  3265.              CALL CheckColor (ZOutTxt$,SubInHeader$,"") : _
  3266.              GOTO 8080
  3267.      IF QuickScanMsgs OR _
  3268.         ScanMsgs THEN _
  3269.            GOTO 8080 _
  3270.      ELSE GOTO 8077
  3271. 8076 IF MID$(ZMsgRec$,123,6) = STRING$(6,0) OR _
  3272.         MID$(ZMsgRec$,123,6) = SPACE$(6) THEN _
  3273.            Year$ = " Rcvd: -NO-" : _
  3274.            RETURN
  3275.      Year$ = " Rcvd: " + _
  3276.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,123,1))),2) + _
  3277.            "-" + _
  3278.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,124,1))),2) + _
  3279.            "-" + _
  3280.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,125,1))),2) + _
  3281.            " " + _
  3282.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,126,1))),2) + _
  3283.            ":" + _
  3284.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,127,1))),2)
  3285.      FOR WasI = 8 TO 15
  3286.         IF MID$(Year$,WasI,1) = " " THEN _
  3287.            MID$(Year$,WasI,1) = "0"
  3288.      NEXT
  3289.      FOR WasI = 17 TO 21
  3290.         IF MID$(Year$,WasI,1) = " " THEN _
  3291.            MID$(Year$,WasI,1) = "0"
  3292.      NEXT
  3293.      RETURN
  3294. 8077 IF (NOT MsgToCaller) THEN _
  3295.         ZWasA = (MID$(ZMsgRec$,37,5) = "ALL  ") : _
  3296.         IF NOT ZWasA THEN _
  3297.            GOTO 8080
  3298.      IF MsgFromCaller THEN _
  3299.         GOTO 8080
  3300.      Year$ = DATE$
  3301.      WasWK$ = TIME$
  3302.      MID$(ZMsgRec$,123,6) = CHR$(VAL(MID$(Year$,1,2))) + _
  3303.                                    CHR$(VAL(MID$(Year$,4,2))) + _
  3304.                                    CHR$(VAL(MID$(Year$,9,2))) + _
  3305.                                    CHR$(VAL(MID$(WasWK$,1,2))) + _
  3306.                                    CHR$(VAL(MID$(WasWK$,4,2))) + _
  3307.                                    CHR$(VAL(MID$(WasWK$,7,2)))
  3308.      GOSUB 12986
  3309.      PUT 1,ZMsgPtr(ZMsgDimIndex,1)
  3310.      GOSUB 12987
  3311. 8080 GOSUB 12979
  3312.      ZOutTxt$ = ""
  3313.      RETURN
  3314. '
  3315. ' * UNCOMPRESS MESSAGE PRIOR TO DISPLAY
  3316. '
  3317. 9000 IF NOT JustSearching THEN _
  3318.         GOSUB 4656: _
  3319.         CALL SkipLine (1) : _
  3320.         ZLinesInMsg = 1 : _
  3321.         MsgDimXtra = 150 : _
  3322.         REDIM ZOutTxt$(MsgDimXtra) : _
  3323.         Remain$ = "" : _
  3324.         HiLitedLine = 0
  3325.      FOR WasX = 2 TO VAL(MID$(ZMsgRec$,117,4))
  3326.         WasJ = 1
  3327.         GET 1
  3328.         IF JustSearching THEN _
  3329.            ZOutTxt$ = ZMsgRec$ : _
  3330.            CALL AllCaps (ZOutTxt$) : _
  3331.            HiLitePos = INSTR(ZOutTxt$,SearchString$) : _
  3332.            IF HiLitePos > 0 THEN _
  3333.               HiLiteRec = LOC(1) : _
  3334.               WasX = 9999 : _
  3335.               GOTO 9090 _
  3336.            ELSE GOTO 9090
  3337. 9050    ZWasB = INSTR(WasJ,ZMsgRec$,CHR$(227))
  3338.         IF ZRet THEN _
  3339.            RETURN
  3340. 9060    ZWasC = ZWasB - WasJ
  3341.         IF ZWasC < 0 THEN _
  3342.            ZWasC = 128
  3343. 9070    ZOutTxt$ = MID$(ZMsgRec$,WasJ,ZWasC)
  3344.         IF HiLiteRec = LOC(1) THEN _
  3345.            IF HiLitePos >= WasJ AND HiLitePos < WasJ+ZWasC THEN _
  3346.               HiLiteRec = -1 : _
  3347.               Bracketed = ZTrue : _
  3348.               ZOutTxt$(0) = ZOutTxt$ : _
  3349.               CALL Bracket (ZOutTxt$,HiLitePos-WasJ+1,HiLitePos+LEN(SearchString$)-WasJ,ZEmphasizeOn$,ZEmphasizeOff$)
  3350.         IF ZWasB = 0 THEN _
  3351.            Remain$ = ZOutTxt$ : _
  3352.            GOTO 9090 _
  3353.         ELSE ZOutTxt$ = Remain$ + ZOutTxt$ : _
  3354.              Remain$ = "" : _
  3355.              WasJ = ZWasB + 1
  3356. 9085    IF LEFT$(ZOutTxt$,1) = ZStartOfHeader$ OR _
  3357.            LEFT$(ZOutTxt$,LEN(ZScreenOutMsg$)) = ZScreenOutMsg$ THEN _
  3358.            GOTO 9050
  3359.         ZOutTxt$(ZLinesInMsg) = ZOutTxt$
  3360.         IF Bracketed THEN _
  3361.            Bracketed = ZFalse : _
  3362.            HiLitedLine = ZLinesInMsg
  3363.         ZLinesInMsg = ZLinesInMsg + 1
  3364.         IF ZLinesInMsg > MsgDimXtra THEN _
  3365.            ZLinesInMsg = ZLinesInMsg - 1 : _
  3366.            CALL SkipLine (1) : _
  3367.            CALL QuickTPut1 ("Message too long.  Truncated to " + STR$(MsgDimXtra) + " lines!") : _
  3368.            ZOutTxt$ = "" : _
  3369.            RETURN
  3370.         IF NOT DontPrint THEN _                                      ' KG030201
  3371.            GOSUB 12979 : _                                           ' KG030201
  3372.            IF ZRet THEN _
  3373.               ZOutTxt$ = "" : _
  3374.               RETURN _                                               ' KG030201
  3375.            ELSE CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) : _   ' KG030201
  3376.                 IF ZNo THEN _                                        ' KG030201
  3377.                    DontPrint = ZTrue                                 ' KG030201
  3378.         GOTO 9050
  3379. 9090 NEXT
  3380.      IF DontPrint = ZTrue THEN _
  3381.         GOTO 5160
  3382.      IF JustSearching AND HiLitePos > 0 THEN _
  3383.         JustSearching = ZFalse : _
  3384.         GET 1,ZMsgPtr(ZMsgDimIndex,1) : _
  3385.         GOSUB 8000 : _
  3386.         GOTO 9000
  3387.      ZOutTxt$ = ""
  3388.      RETURN
  3389. '
  3390. ' *  C - COMMAND FROM UTILITY MENU (CLOCK - TIME ON SYSTEM)
  3391. '
  3392. 9100 CALL RptTime
  3393.      RETURN
  3394. '
  3395. ' * WRITE A RECORD TO THE RBBS-PC "USER" FILE
  3396. '
  3397. 9440 IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN _
  3398.         PUT 5,ZUserFileIndex
  3399.      RETURN
  3400. '
  3401. ' * DEFINE USER FILE RECORD VARIABLES TO COMPENSATE FOR THE BUG IN QUICKBASIC
  3402. ' * THAT REQUIRES A FIELD STATMENT TO BE EXECUTED WITHIN EACH SEPARATELY
  3403. ' * COMPILED PROGRAM -- EVEN THOUGH A FIELD STATEMENT WAS EXECUTED WHEN THE
  3404. ' * FILE WAS OPENED IN ANOTHER SEPERATELY COMPILED SUBROUTINE
  3405. '
  3406. 9450 IF LOF(5) < 1 THEN _
  3407.         ZWasDF$ = ZActiveUserFile$ : _
  3408.         RETURN 13600
  3409.      FIELD 5,31 AS ZUserName$, _
  3410.              15 AS ZPswd$, _
  3411.               2 AS ZSecLevel$, _
  3412.              14 AS ZUserOption$,  _
  3413.              24 AS ZCityState$, _
  3414.               3 AS MachineType$, _
  3415.               4 AS ZTodayDl$, _
  3416.               4 AS ZTodayBytes$, _
  3417.               4 AS ZDlBytes$, _
  3418.               4 AS ZULBytes$, _
  3419.              14 AS ZLastDateTimeOn$, _
  3420.               3 AS ZListNewDate$, _
  3421.               2 AS ZUserDnlds$, _
  3422.               2 AS ZUserUplds$, _
  3423.               2 AS ZElapsedTime$
  3424.      FIELD 5,128 AS ZUserRecord$
  3425.      RETURN
  3426. '
  3427. ' * GET USER DEFAULTS
  3428. '
  3429. 9500 GOSUB 9450
  3430.      GOSUB 5370
  3431.      IF ZWasA THEN _
  3432.         ZUserSecLevel = ZSysopSecLevel _
  3433.      ELSE ZUserSecLevel = CVI(ZSecLevel$)
  3434.      ZLastMsgRead = CVI(MID$(ZUserOption$,3,2))
  3435.      ZUserXferDefault$ = MID$(ZUserOption$,5,1)
  3436.      IF ZUserXferDefault$ = " " THEN _
  3437.         ZUserXferDefault$ = "N"
  3438.      CALL XferType (2,ZTrue)
  3439.      WasX = ASC(MID$(ZUserOption$,6,1))
  3440.      ZWasGR = (WasX MOD 3)
  3441.      ZBoldText$ = CHR$(48 - (WasX > 50))
  3442.      ZUserTextColor = (WasX - ZWasGR)/3 + 21
  3443.      IF ZUserTextColor > 37 THEN _
  3444.         ZUserTextColor = ZUserTextColor - 7
  3445.      IF ZEmphasizeOff$ <> "" THEN _
  3446.         CALL QuickTPut (ZColorReset$,0)
  3447.      IF ZEmphasizeOnDef$ <> "" THEN _
  3448.         ZEmphasizeOff$ = ZEscape$ + "[" + ZBoldText$ + ";40;" + MID$(STR$(ZUserTextColor),2) + "m" _
  3449.      ELSE ZEmphasizeOff$ = ""
  3450.      IF ZWasGR = 1 AND NOT ZEightBit THEN _
  3451.         ZWasGR = 0
  3452.      CALL SetGraphic (ZWasGR, ZUserGraphicDefault$)
  3453.      ZRightMargin = CVI(MID$(ZUserOption$,7,2))
  3454.      IF ZRightMargin > 72 THEN _
  3455.         ZRightMargin = 72
  3456.      ZWasCI$ = ZCityState$
  3457.      CALL Trim (ZWasCI$)
  3458. 9510 UserOptions = CVI(MID$(ZUserOption$,9,2))
  3459.      ZPromptBell = (UserOptions AND 1) > 0
  3460.      ZExpertUser = (UserOptions AND 2) > 0
  3461.      CALL SetExpert
  3462.      ZNulls = (UserOptions AND 4) > 0
  3463.      ZUpperCase = (UserOptions AND 8) > 0
  3464.      ZLineFeeds = (UserOptions AND 16) > 0
  3465.      ZCheckBulletLogon = (UserOptions AND 32) > 0
  3466.      ZSkipFilesLogon = (UserOptions AND 64) > 0
  3467.      ZAutoDownDesired = (UserOptions AND 128) > 0
  3468.      ZReqQuesAnswered = (UserOptions AND 256) > 0
  3469.      ZMailWaiting = (UserOptions AND 512) > 0
  3470.      WasX = (UserOptions AND 1024 ) > 0
  3471.      CALL SetHiLite (NOT WasX)
  3472.      IF NOT ZHiLiteOff THEN _
  3473.         CALL QuickTPut (ZEmphasizeOff$,0)
  3474.      ZTurboKeyUser = (UserOptions AND 2048) > 0
  3475.      ZTurboKey = ZFalse
  3476.      GOSUB 11480
  3477.      ZPageLength = ASC(MID$(ZUserOption$,13,1))
  3478.      IF SubBoard THEN _
  3479.         GOTO 9520
  3480.      WasX$ = ZEchoer$
  3481.      ZEchoer$ = MID$(ZUserOption$,14,1)
  3482.      IF INSTR("ICR",ZEchoer$) = 0 THEN _
  3483.         ZEchoer$ = "R"
  3484.      IF WasX$ <> ZEchoer$ THEN _
  3485.         GOSUB 9525
  3486.      CALL SetEcho (ZEchoer$)
  3487. 9520 ZNul$ = MID$(STRING$(5,0),1, - 5 * ZNulls)
  3488.      CALL SetCrLf
  3489.      ZUseTPut = (ZUpperCase OR ZXOnXOff)
  3490.      ZPswdSave$ = ZPswd$
  3491.      RETURN
  3492. 9525 IF ZEchoer$ = "R" THEN _
  3493.         ZOutTxt$ =  "RBBS now set" _
  3494.      ELSE IF ZEchoer$ = "C" THEN _
  3495.              ZOutTxt$ = "Please set your communications package" _
  3496.           ELSE ZOutTxt$ = "Intermediate host now set"
  3497.      CALL QuickTPut1 (ZOutTxt$ + " to echo what you type")
  3498.      RETURN
  3499. '
  3500. ' *  B - COMMAND FROM MAIN MENU (READ BULLETINS)
  3501. '
  3502. 9700 ReturnOn$ = "*SN"
  3503.      WasA1$ = ZBulletinMenu$
  3504. 9701 CALL SubMenu ("Read what bulletin(s), L)ist, S)ince, N)ews ([ENTER] = none)",_
  3505.                    WasA1$, ZBulletinPrefix$,"",ReturnOn$,_
  3506.                    ZUserGraphicDefault$,ZFalse,ZFalse,ZFalse,"",WasX) ' KG032502
  3507.      IF ZWasQ = 0 THEN _
  3508.         RETURN
  3509.      CALL CheckCarrier
  3510.      IF ZSubParm = -1 THEN _
  3511.         RETURN 10595
  3512.      IF (ZWasZ$ = "*" OR ZWasZ$ = "S") THEN _
  3513.         ZPrevPrefix$ = "" : _
  3514.         GOTO 9760
  3515.      ZStopInterrupts = ZFalse
  3516.      IF ZWasZ$ = "N" THEN _
  3517.         GOSUB 1242 : _
  3518.         IF WasZ <> 0 THEN _
  3519.            CALL QuickTPut1 ("No NEWS available") : _
  3520.            GOTO 9701 _
  3521.         ELSE GOTO 9703
  3522.      CALL BufFile (ZFileName$,ZAnsIndex)
  3523. 9703 CALL UpdtCalr ("Read bulletin " + ZFileName$,1)
  3524.      GOTO 9701
  3525. '
  3526. ' *  CHECK AND REVIEW NEW BULLETINS SINCE Last LOGON
  3527. '
  3528. 9750 CALL CheckNewBul (BoardCheckDate$,NumNewBullets,NewBullets$)
  3529.      RETURN
  3530. 9760 ' ****  [entry when want review plus chance to read] *********
  3531.      GOSUB 9750
  3532.      IF NumNewBullets > 0 THEN _
  3533.         ZLastIndex = NumNewBullets + 1 : _
  3534.         ZOutTxt$ = "Read ALL new bulletins ([Y],N)" : _              ' DA071701
  3535.         GOSUB 12999 : _
  3536.         IF NOT ZNo THEN _
  3537.            ZAnsIndex = 1: _
  3538.            GOTO 9700
  3539.      ZLastIndex = 0
  3540.      IF ZAnsIndex < 1 THEN _
  3541.         RETURN
  3542.      GOTO 9701
  3543. '
  3544. ' *  W - COMMAND FROM MAIN MENU (WHO'S ON THE OTHER NODES)
  3545. '
  3546. 9800 CALL WhosOn (NodesInSystem)
  3547.      GOSUB 5344
  3548.      RETURN
  3549. '
  3550. ' *  1 - COMMAND FROM SYSOP MENU (DISPLAY COMMENTS)
  3551. '
  3552. 10070 CALL Muzak (7)
  3553.       ZFileName$ = ZCmntsFile$
  3554.       IF NOT ZStopInterrupts THEN _
  3555.          ZOutTxt$ = "* Ctrl-K(^K) / ^X aborts. ^S suspends, ^Q resumes *" : _
  3556.          GOSUB 12976
  3557.       GOSUB 20150
  3558.       RETURN
  3559. '
  3560. ' *  U - COMMAND FROM UTILITY MENU (DISPLAY USERS)
  3561. ' *  2 - COMMAND FROM SYSOP MENU (DISPLAY USERS)
  3562. '
  3563. 10090 CALL Muzak (6)
  3564.       ZOutTxt$ = "List - U)sers, R)ecent callers"
  3565.       CALL SkipLine (1)
  3566.       GOSUB 12930
  3567.       IF ZWasQ = 0 THEN _
  3568.          RETURN
  3569.       CALL AllCaps (ZUserIn$(ZAnsIndex))
  3570.       ON INSTR("UR",ZUserIn$(ZAnsIndex)) + 1 GOTO 10090,10096,10093
  3571. 10093 CALL DispCall
  3572.       RETURN
  3573. 10096 UserRecordHold$ = ZUserRecord$
  3574.       GOSUB 12700
  3575.       CALL OpenUser (HighestUserRecord)
  3576.       GOSUB 9450
  3577.       ZStopInterrupts = ZFalse
  3578.       ZNonStop = (ZPageLength < 1)
  3579.       WasI = 1
  3580.       ZWasZ$ = ZSysopPswd1$ + " " + ZSysopPswd2$
  3581. 10097 IF WasI > HighestUserRecord OR ZRet THEN _
  3582.          GOTO 10099
  3583.       GET 5,WasI
  3584.       WasX$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
  3585.       IF ASC(WasX$)=0 OR LEFT$(WasX$,3)="   " THEN _                 ' KG073101
  3586.          GOTO 10098
  3587.       IF INSTR(WasX$,ZWasZ$) > 0 OR ZSysopSecLevel <= CVI(MID$(ZUserRecord$,47,2)) THEN _
  3588.          IF NOT ZSysop THEN _
  3589.             GOTO 10098
  3590.       CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  3591.       IF ZNo OR ZSubParm = -1 THEN _
  3592.          GOTO 10099
  3593.       ZOutTxt$ = LEFT$(WasX$,36) + ZCityState$ + ZLastDateTimeOn$
  3594.       GOSUB 12979
  3595. 10098 WasI = WasI + 1
  3596.       GOTO 10097
  3597. 10099 ZOutTxt$ = ""
  3598.       LSET ZUserRecord$ = UserRecordHold$
  3599.       ZStopInterrupts = ZTrue
  3600.       RETURN
  3601. '
  3602. ' *  3 - COMMAND FROM SYSOP MENU (RECOVER MESSAGES)
  3603. '
  3604. 10390 MsgRecovered = ZFalse
  3605. 10391 ZOutTxt$ = "Recover Msg #" + ZPressEnter$
  3606.       GOSUB 12932
  3607.       CALL CheckInt (ZUserIn$(ZAnsIndex))
  3608.       IF ZErrCode <> 0 THEN _
  3609.          GOTO 10391
  3610.       MsgToRecover = ZTestedIntValue
  3611.       IF MsgToRecover < 1 THEN _
  3612.          GOTO 10392
  3613.       GOSUB 5344
  3614.       ActionFlag = ZFalse
  3615.       CALL RecoverMsg (MsgToRecover,FirstMsgRecord,ActionFlag)
  3616.       MsgRecovered = MsgRecovered OR ActionFlag
  3617.       GOTO 10391
  3618. 10392 IF MsgRecovered THEN _
  3619.          ActionFlag = ZTRUE : _
  3620.          GOTO 1900
  3621.       RETURN
  3622. '
  3623. ' *  4 - COMMAND FROM SYSOP MENU (DELETE COMMENTS)
  3624. '
  3625. 10530 ZOutTxt$ = "Delete comments (Y/[N])"
  3626.       GOSUB 12995
  3627.       IF ZYes THEN _
  3628.          CALL OpenOutW (ZCmntsFile$)
  3629.       CLOSE 2
  3630. 10550 RETURN
  3631. '
  3632. ' *  TIME LIMIT EXCEEDED EXIT
  3633. '
  3634. 10553 CALL UpdtCalr ("Time limit exceeded",1)
  3635.       CALL QuickTPut1 ("You have no time left")
  3636. '
  3637. ' *  Q - COMMAND FROM GLOBAL FUNCTIONS
  3638. '
  3639. 10560 GOSUB 9100
  3640.       IF NOT ZSysop AND _
  3641.          ZUserSecLevel < ZSecExemptFromEpilog THEN _
  3642.            ZFileName$ = ZEpilog$ : _
  3643.            GOSUB 11520
  3644.       IF ZLocalUserMode OR NOT ZLocalUser THEN _
  3645.          CALL UpdtCalr ("Logged off",1)
  3646.       CALL Muzak (4)
  3647.       GOTO 10595
  3648. 10570 IF MinsRemaining > 1 AND (ZTurboKeyUser OR NOT ZExpertUser) THEN _
  3649.          ZOutTxt$ = "Log off (Y,[N])" : _                            ' DA071701
  3650.          GOSUB 12930 : _
  3651.          IF NOT ZYes THEN _
  3652.             RETURN
  3653.       GetOut = ZTrue
  3654.       GOTO 10560
  3655. 10590 CALL UpdtCalr ("Sleep Disconnect",1)
  3656.       SubBoard = ZFalse
  3657. 10595 CALL GetTime
  3658.       GOSUB 13700
  3659.       ZSubParm = 0
  3660.       CALL Carrier
  3661.       IF ZSubParm = -1 THEN _
  3662.          GOTO 10597
  3663.       IF ZConfName$ = OrigMsgName$ THEN _
  3664.          GetOut = ZTrue
  3665.       IF (SubBoard AND (NOT GetOut) AND (NOT ZSleepDisconnect)) THEN _
  3666.          GOSUB 5380 : _
  3667.          ZHomeConf$ = "M" : _
  3668.          CALL QuickTPut1 ("Time limit exceeded in " + ZConfName$) : _
  3669.          SubBoard = ZFalse : _
  3670.          GOTO 1205
  3671. 10597 CALL UpdateU (ZTrue)
  3672.       GOTO 13540
  3673. 10620 CALL UpdtCalr(ZWasLG$(ZLogonErrorIndex),2)
  3674.       IF ZExitToDoors THEN _
  3675.          CALL UpdateU (ZTrue)
  3676. 10621 IF ZActiveUserName$ = "" THEN _
  3677.          ZActiveUserName$ = "NAME UNAVAILABLE"
  3678.       ZWasZ$ = ZActiveUserName$ + _
  3679.            " on at " + _
  3680.            ZCurDate$ + _
  3681.            ", " + _
  3682.            ZTime$ + _
  3683.            "** LOGON DENIED **, " + _
  3684.            ZBaudParity$
  3685.       ZWasNG$ = ZWasZ$ + _
  3686.             SPACE$(128 - LEN(ZWasZ$))
  3687. 10698 CALL Muzak (5)
  3688.       IF ZFunctionKey = 22 THEN _
  3689.          GOTO 13545
  3690.       ZOutTxt$ = "Access denied!"
  3691.       GOSUB 12976
  3692.       CALL DelayTime (8 + ZBPS)
  3693.       GOTO 13545
  3694. '
  3695. ' *  M - COMMAND FROM UTILITY MENU (CHANGE MARGINS)
  3696. '
  3697. 10925 UtilMarginChange = ZTrue
  3698.       GOSUB 3100
  3699.       UtilMarginChange = ZFalse
  3700.       RETURN
  3701. '
  3702. ' *  7 - COMMAND FROM SYSOP MENU (EXIT TO DOS)
  3703. '
  3704. 10930 IF ZDosVersion < 2 OR _
  3705.          (ZRequiredRings = 0 AND NOT ZNoDoorProtect) THEN _
  3706.          CALL QuickTPut1 ("Remote DOS unavailable") : _
  3707.          RETURN
  3708. 10932 IF ZLocalUser AND NOT ZDebug THEN _
  3709.          CALL QuickTPut1 ("Only for remote SYSOP's") : _
  3710.          RETURN
  3711.       CALL DosExit
  3712.       ZSubParm = -9
  3713.       CALL FindFKey
  3714.       GOTO 202
  3715. '
  3716. ' *  D - COMMAND FROM MAIN MENU (EXIT TO DOORS)
  3717. '
  3718. 10970 IF NOT ZDoorsAvail OR _
  3719.          (ZRequiredRings = 0 AND NOT ZNoDoorProtect) THEN _
  3720.          CALL QuickTPut1 ("No doors available") : _                  ' KG072604
  3721.          RETURN
  3722.       IF ZTimeLock AND 1 AND NOT ZHasDoored THEN _
  3723.          CALL TimeLock : _
  3724.          IF NOT ZOK THEN _
  3725.             RETURN
  3726. 10974 WasA1$ = ZMenu$(5)
  3727.       CALL Talk (5,ZOutTxt$)
  3728.       ZStackC = ZTrue
  3729.       CALL SubMenu ("Open which door, L)ist" + ZPressEnterExpert$, _
  3730.                     WasA1$,"",".BAT","",_
  3731.                     ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"",InMenu) ' KG032502
  3732.       IF ZWasQ = 0 THEN _
  3733.          RETURN
  3734.       IF ZSubParm = -1 THEN _
  3735.          RETURN 10595
  3736. 10986 ZWasZ$ = ZFileName$
  3737.       CALL DoorExit (NOT InMenu)                                     ' KG032502
  3738.       GOTO 10974                                                     ' KG032502
  3739. '
  3740. ' *  5 - COMMAND FROM SYSOP MENU (USER FILE MAINTENANCE)
  3741. '
  3742. 11000 WasTU = ZUserFileIndex
  3743.       CALL DefaultU
  3744.       UserRecordHold$ = ZUserRecord$
  3745.       RegDateHold$ = ZRegDate$
  3746.       UserSecLevelSave = ZUserSecLevel                               ' ML062201
  3747. 11001 ZStopInterrupts = ZTrue
  3748.       WasI = 1
  3749.       ScanUsers = ZFalse
  3750.       IF EditFromRead = 1 THEN GOTO 11341                            ' KG070901
  3751.       ZOutTxt$ = "A)dd, L)st, P)rt, M)od, S)can users"
  3752.       GOSUB 12930                                                    ' KG070901
  3753. 11003 IF ZWasQ = 0 THEN _
  3754.       IF EditFromRead > 0 THEN _
  3755.          GOTO 11325 _
  3756.       ELSE _
  3757.          ZUserFileIndex = WasTU : _
  3758.          GOTO 20093
  3759.       WasQQ = 0
  3760.       ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)                          ' KG070901
  3761.       CALL AllCaps (ZWasZ$)
  3762.       IF ZWasZ$ = "A" THEN _
  3763.          GOTO 12300 _
  3764.       ELSE IF ZWasZ$ = "M" THEN _
  3765.               ZStopInterrupts = ZTrue _
  3766.            ELSE IF ZWasZ$ = "P" THEN _
  3767.                    WasQQ = ZTrue _
  3768.                 ELSE IF ZWasZ$ = "S" THEN _
  3769.                         ScanUsers = ZTrue : _
  3770.                         ZStopInterrupts = ZTrue _
  3771.                      ELSE IF ZWasZ$ <> "L" THEN _
  3772.                              GOTO 11001
  3773. 11005 CALL OpenUser (HighestUserRecord)
  3774.       GOSUB 9450
  3775.       WasZ = 1
  3776.       IF ScanUsers THEN _
  3777.          ZOutTxt$ = "Scan for N)ame, P)wd, C)" + ZUserLocation$ + ", L)evel" + _
  3778.               LEFT$(", H)ash id",-9*(ZStartHash > 1 AND ZLenHash > 0)) : _
  3779.          GOSUB 12930 : _                                             ' KG070901
  3780.          ZOutTxt$ = "" : _
  3781.          ScanFunction$ = LEFT$(ZUserIn$(1),1) : _
  3782.          CALL AllCaps (ScanFunction$) : _
  3783.          ZCR = 0 : _
  3784.          GOSUB 12979 : _
  3785.          GOSUB 12966 : _
  3786.          GOTO 12962
  3787. 11010 FOR WasJ = WasZ TO HighestUserRecord
  3788.          GET 5,WasJ
  3789. 11015    WasX$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
  3790.          IF ASC(WasX$) = 0 OR LEFT$(WasX$,3) = "   " THEN _
  3791.             GOTO 11310
  3792.          WasOF = CVI(ZSecLevel$)
  3793.          IF WasOF > ZUserSecLevel THEN _
  3794.             IF NOT ZGlobalSysop THEN _
  3795.                GOTO 11310
  3796.          ZOutTxt$ = ZFG4$ + RIGHT$("     " + STR$(LOC(5)),4) + _
  3797.               ":" + _
  3798.               ZFG1$ + ZUserName$ + _
  3799.               ZFG2$ + "SECURITY" + _
  3800.               RIGHT$("     " + STR$(WasOF),5) + _
  3801.               " "
  3802. 11020    ZOutTxt$ = ZOutTxt$ + _
  3803.               ZFG3$ + "Password = " + _
  3804.               ZPswd$ + ZEmphasizeOff$
  3805. 11025    IF WasQQ THEN _
  3806.             CALL Printit (ZOutTxt$)
  3807. 11027    GOSUB 12979
  3808.          IF ZRet <> 0 THEN _
  3809.             GOTO 11330
  3810.          IF WasOF < OrigMainSec THEN _
  3811.             ZOutTxt$ = ZEmphasizeOn$ + "<Locked out>" + ZEmphasizeOff$ + SPACE$(7) : _
  3812.             GOTO 11030
  3813.          IF WasOF >= ZSysopSecLevel THEN _
  3814.             ZOutTxt$ = ZEmphasizeOn$ + "  (SYSOP)  " + ZEmphasizeOff$ + SPACE$(8) : _
  3815.             GOTO 11030
  3816.          ZOutTxt$ = SPACE$(19)
  3817. 11030    ZOutTxt$ = ZOutTxt$ + _
  3818.               ZLastDateTimeOn$ + _
  3819.              "   " + _
  3820.              ZFG4$ + ZCityState$ + ZEmphasizeOff$
  3821. 11100    IF WasQQ THEN _
  3822.             CALL Printit (ZOutTxt$)
  3823. 11101    CALL QuickTPut1 (ZOutTxt$)
  3824.         IF ZRet <> 0 THEN _
  3825.            GOTO 11330
  3826.         ZOutTxt$ = "  DOWNLOADS = " + _
  3827.              RIGHT$("     " + STR$(CVI(ZUserDnlds$)),5) + _
  3828.              "   " + _
  3829.              "UPLOADS = " + _
  3830.              RIGHT$("     " + STR$(CVI(ZUserUplds$)),5) + _
  3831.              "   " + _
  3832.              " Times on ="
  3833.          ZOutTxt$ = ZOutTxt$ + RIGHT$("     " + STR$(CVI(MID$(ZUserOption$,1,2))),5) + _
  3834.              "   " + _
  3835.              "TIME USED = " + _
  3836.              RIGHT$("    " + STR$(CVI(ZElapsedTime$)),4) + _
  3837.              " Min"
  3838.         IF WasQQ THEN _
  3839.            CALL Printit (ZOutTxt$)
  3840. 11105   CALL QuickTPut1 (ZOutTxt$)
  3841.         IF ZRet <> 0 THEN _
  3842.            GOTO 11330
  3843.          IF NOT ZEnforceRatios THEN _
  3844.             GOTO 11106
  3845.          ZOutTxt$ = "BYTES: Dwn=" + STR$(CVS(ZDlBytes$)) + _
  3846.               "  Up=" + STR$(CVS(ZULBytes$)) + _
  3847.               " TODAY Dwn: #=" + STR$(CVS(ZTodayDl$)) + _
  3848.               " Bytes=" + STR$(CVS(ZTodayBytes$))
  3849.          IF WasQQ THEN _
  3850.             CALL Printit (ZOutTxt$)
  3851.          CALL QuickTPut1 (ZOutTxt$)
  3852.          IF ZRet <> 0 THEN _
  3853.             GOTO 11330
  3854. 11106   IF (ZStartIndiv = 0 OR ZLenIndiv = 0) AND _
  3855.            (ZStartHash = 0 OR ZLenHash = 0) AND _
  3856.            NOT ZRestrictByDate THEN _
  3857.               GOTO 11107
  3858.         IF (ZStartHash > 1 AND ZLenHash > 0) THEN _
  3859.            ZOutTxt$ = "Hash: " + MID$(ZUserRecord$,ZStartHash,ZLenHash) _
  3860.         ELSE ZOutTxt$ = ""
  3861.         IF (ZStartIndiv > 1 AND ZLenIndiv > 0) THEN _
  3862.            ZOutTxt$ = ZOutTxt$ + " Indiv: " + MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv)
  3863.         IF ZRestrictByDate THEN _
  3864.             GOSUB 11480 : _
  3865.             ZOutTxt$ = ZOutTxt$ + "  Registered: " + _
  3866.                  RegDisplayDate$
  3867.         CALL QuickTPut1 (ZOutTxt$)
  3868.         IF WasQQ THEN _
  3869.            CALL Printit (ZOutTxt$)
  3870.         IF ZRet <> 0 THEN _
  3871.            GOTO 11330
  3872. 11107   IF NOT ZStopInterrupts THEN _
  3873.            GOTO 11310
  3874. 11110   ZOutTxt$ = "D)el,F)ind,M)enu,N)ewPW,P)rnt,R)eset gr,Q)uit,S)ecLvl,U)ser#,X)fer"
  3875.         IF ZRestrictByDate THEN _
  3876.            ZOutTxt$ = ZOutTxt$ + _
  3877.                 ",$)RegDate"
  3878.         GOSUB 12930                                                  ' KG070901
  3879.         IF NOT ScanUsers AND ZWasQ = 0 THEN _
  3880.            GOTO 11310
  3881. 11115   ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)                        ' KG070901
  3882.         CALL AllCaps (ZWasZ$)
  3883.         WasX = INSTR("DNPQFSMR$UX",ZWasZ$)
  3884.         IF ZWasZ$ = "" AND ScanUsers THEN _
  3885.            GOTO 12965
  3886.         ON WasX GOTO 11130,11160,11220,11320,11340,11390,11330,11400,11450,11127,11490
  3887.         GOTO 11110
  3888. 11125   WasZ = VAL(ZUserIn$)
  3889.         IF WasZ < 1 OR WasZ > HighestUserRecord THEN _
  3890.            GOTO 11127
  3891.         GOTO 11010
  3892. 11127   ZOutTxt$ = "What record #"
  3893.         GOSUB 12932                                                  ' KG070901
  3894.         GOTO 11125
  3895. '
  3896. ' *  D - COMMAND FROM 5- USER MAINTENANCE OPTIONS (DELETE USER)
  3897. '
  3898. 11130   ZOutTxt$ = "Delete user (Y/[N])"
  3899.         GOSUB 12995
  3900.         IF ZYes THEN _
  3901.            LSET ZUserName$ = CHR$(0) + _
  3902.                              "deleted user" : _
  3903.            LSET ZSecLevel$ = MKI$(ZMinLogonSec - 1) : _
  3904.            LSET ZLastDateTimeOn$ = "01-01-80" + _
  3905.                                      " " + _
  3906.                                      ZTimeLoggedOn$
  3907.         GOTO 11290
  3908. '
  3909. ' *  N - COMMAND FROM 5- USER MAINTENANCE OPTIONS (CHANGE USER PASSWORD)
  3910. '
  3911. 11160   GOSUB 12800
  3912.         GOTO 11290
  3913. '
  3914. ' *  P - COMMAND FROM 5- USER MAINTENANCE OPTIONS (PRINT USER FILE)
  3915. '
  3916. 11220   WasQQ = NOT WasQQ
  3917.         GOTO 11015
  3918. 11290   ZUserFileIndex = LOC(5)
  3919.         GOSUB 12989
  3920.         GOSUB 9440
  3921.         GOSUB 12991
  3922.         ZUserFileIndex = 0
  3923.         GOTO 11015
  3924. 11310   IF ScanUsers THEN _
  3925.            GOTO 12965
  3926. 11311 NEXT
  3927. '
  3928. ' *  Q - COMMAND FROM 5- USER MAINTENANCE OPTIONS (QUIT TO MAIN MENU)
  3929. '
  3930. 11320 ZUserFileIndex = WasTU
  3931.       LSET ZUserRecord$ = UserRecordHold$
  3932.       ZRegDate$ = RegDateHold$
  3933.       IF EditFromRead > 0 THEN _
  3934.          GOTO 11325
  3935.       RETURN 1200
  3936. 11325 ZReply = ZFalse
  3937.       JustReplied = ZTrue
  3938.       QuotedReply = ZTrue
  3939.       EditFromRead = 0
  3940.       CALL GetMsgAttr
  3941.       DontPrint = ZTrue
  3942.       ZUserIn$ = "="
  3943.       GOTO 4560
  3944. '
  3945. ' *  M - COMMAND FROM 5- USER MAINTENANCE OPTIONS (MAIN USER MAINT. MENU)
  3946. '
  3947. 11330 CLOSE 2
  3948.       IF EditFromRead > 0 THEN _
  3949.          EditFromRead = 2
  3950.       GOTO 11001
  3951. '
  3952. ' *  F - COMMAND FROM 5- USER MAINTENANCE OPTIONS (FIND USER)
  3953. '
  3954. 11340 ZOutTxt$ = ZPromptHash$ + _
  3955.            " to find"
  3956.       CALL SkipLine (1)
  3957.       ZParseOff = ZTrue                                              ' KG070901
  3958.       GOSUB 12932                                                    ' KG070901
  3959.       IF ZWasQ = 0 THEN _
  3960.          GOTO 11340
  3961.       TempHashValue$ = ZUserIn$
  3962. 11341 IF LEN(TempHashValue$) < 3 OR LEN(TempHashValue$) > ZLenHash THEN _
  3963.          GOTO 11340
  3964.       CALL AllCaps (TempHashValue$)
  3965.       IF ZStartIndiv < 1 THEN _
  3966.          GOTO 11345
  3967. 11342 ZOutTxt$ = ZPromptIndiv$ + _
  3968.            " to find"
  3969.       GOSUB 12995
  3970.       IF ZWasQ = 0 THEN _
  3971.          GOTO 11342
  3972.       TempIndivValue$ = ZUserIn$
  3973.       IF LEN(TempIndivValue$) > ZLenIndiv THEN _
  3974.          GOTO 11342
  3975.       CALL AllCaps (TempIndivValue$)
  3976. 11345 GOSUB 12600
  3977.       GOSUB 12984
  3978.       ZUserFileIndex = 0
  3979.       IF Found THEN _
  3980.          GOTO 11015
  3981. 11380 ZOutTxt$ = TempHashValue$ + _
  3982.            " " + _
  3983.            TempIndivValue$ + _
  3984.            " not found"
  3985.       GOSUB 12977
  3986.       GOTO 11310
  3987. '
  3988. ' *  S - COMMAND FROM 5- USER MAINTENANCE OPTIONS (CHANGE USER SECURITY)
  3989. '
  3990. 11390 GOSUB 11395
  3991.       LSET ZSecLevel$ = MKI$(WasOF)
  3992.       GOTO 11290
  3993. 11395 ZOutTxt$ = "New sec level"
  3994.       GOSUB 12932                                                    ' KG070901
  3995.       ZWasZ$ = ZUserIn$(ZAnsIndex)                                   ' KG070901
  3996.       WasOF = VAL(ZWasZ$)
  3997.       IF WasOF > ZUserSecLevel THEN _
  3998.          WasOF = ZUserSecLevel
  3999.       RETURN
  4000. '
  4001. ' *  R - COMMAND FROM 5- USER MAINTENANCE OPTIONS (RESET USER GRAPHICS)
  4002. '
  4003. 11400 ZWasA = CVI(MID$(ZUserOption$,9,2))
  4004.       ZWasA = ZWasA AND &HFAFF                ' TURN HIGHLIGHTING OFF
  4005.       LSET ZUserOption$ = LEFT$(ZUserOption$,5) + _
  4006.                            "0" + _
  4007.                            MID$(ZUserOption$,7,2) + _
  4008.                            MKI$(ZWasA) + _
  4009.                            MID$(ZUserOption$,11)
  4010.       GOTO 11290
  4011. '
  4012. ' *  $ - COMMAND FROM 5 - USER MAINTENANCE (CHANGE REGISTRATION DATE)
  4013. '
  4014. 11450 ZOutTxt$ = "Enter new registration date (MM-DD-YY)"
  4015.       GOSUB 12932                                                    ' KG070901
  4016.       IF ZWasQ = 0 THEN _
  4017.          GOTO 11015
  4018. 11455 WorkDate$ = ZUserIn$(ZAnsIndex)                                ' KG070901
  4019.       IF LEN(WorkDate$) < 8 THEN _
  4020.          GOTO 11450
  4021.       GOSUB 11470
  4022.       IF NOT ZOK THEN _
  4023.          GOTO 11450
  4024.       LSET ZUserOption$ = LEFT$(ZUserOption$,10) + _
  4025.                            ZRegDate$ + _
  4026.                            MID$(ZUserOption$,13)
  4027.       GOSUB 11480
  4028.       ZRegDate$ = RegDateHold$
  4029.       GOTO 11290
  4030. '
  4031. ' *  CALCULATE REGISTRATION DATES
  4032. '
  4033. 11470 IF LEN(WorkDate$) < 10 THEN _
  4034.          WorkDate$ = LEFT$(WorkDate$,6) + _
  4035.                       "19" + _
  4036.                       RIGHT$(WorkDate$,2)
  4037.       TodayRegYY = VAL(MID$(WorkDate$,7))
  4038.       TodayRegMM = VAL(LEFT$(WorkDate$,2))
  4039.       TodayRegDD = VAL(MID$(WorkDate$,4,2))
  4040.       ZOK = TodayRegYY > 1979 AND TodayRegMM > 0 AND _
  4041.            TodayRegMM < 13 AND TodayRegDD > 0 AND _
  4042.            TodayRegDD < 32
  4043.       IF ZOK THEN _
  4044.          CALL TwoByteDate (TodayRegYY,TodayRegMM,TodayRegDD,ZRegDate$)
  4045.       RETURN
  4046. 11480 WasX$ = MID$(ZUserOption$,11,2)
  4047.       IF CVI(WasX$) <> 0 THEN _
  4048.          ZRegDate$ = WasX$ : _
  4049.       ELSE GOSUB 11482
  4050.       CALL UnPackDate (ZRegDate$,UserRegYY,UserRegMM,UserRegDD,RegDisplayDate$)
  4051.       IF CVI(WasX$) = 0 THEN _
  4052.          RegDisplayDate$ = "00-00-00"
  4053.       RETURN
  4054. 11482 WorkDate$ = DATE$
  4055.       GOTO 11470
  4056. '
  4057. ' *  X - COMMAND FROM 5 - USER MAINTENANCE (CHANGE XFER COUNTERS)             *
  4058. '
  4059. 11490 CALL QuickTPut1 ("[ENTER] leaves unchanged")
  4060.       ZOutTxt$ = "Upload file total"
  4061.       GOSUB 12995
  4062.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4063.          LSET ZUserUplds$ = MKI$(VAL(ZUserIn$(1)))
  4064.       ZOutTxt$ = "Upload BYTE total"
  4065.       GOSUB 12995
  4066.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4067.          LSET ZULBytes$ = MKS$(VAL(ZUserIn$(1)))
  4068.       ZOutTxt$ = "Download file total"
  4069.       GOSUB 12995
  4070.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4071.          LSET ZUserDnlds$ = MKI$(VAL(ZUserIn$(1)))
  4072.       ZOutTxt$ = "Download BYTE total"
  4073.       GOSUB 12995
  4074.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4075.          LSET ZDlBytes$ = MKS$(VAL(ZUserIn$(1)))
  4076.       ZOutTxt$ = "Files downloaded TODAY"
  4077.       GOSUB 12995
  4078.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4079.          LSET ZTodayDl$ = MKS$(VAL(ZUserIn$(1)))
  4080.       ZOutTxt$ = "Bytes downloaded TODAY"
  4081.       GOSUB 12995
  4082.       IF LEN(ZUserIn$(1)) > 0 THEN _
  4083.          LSET ZTodayBytes$ = MKS$(VAL(ZUserIn$(1)))
  4084.       GOTO 11290
  4085. '
  4086. ' *  ALLOW USERS TO ANSWER A "QUESTIONNAIRE" BASED ON THE RBBS-PC SCRIPT
  4087. '
  4088. 11520 CALL AskUsers
  4089.       IF NOT ZOK THEN _
  4090.          RETURN
  4091.       IF ZAdjustedSecurity THEN _
  4092.          GOSUB 12989 : _
  4093.          LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  4094.          GOSUB 9440 : _
  4095.          GOSUB 12991 : _
  4096.          CALL SetPrompt : _
  4097.          CALL XferType (2,ZTrue) : _
  4098.          GOSUB 5135
  4099.       REDIM ZOutTxt$(ZMsgDim)
  4100.       IF ZSubParm = -1 THEN _
  4101.          RETURN 10595
  4102.       ZOK = ZTrue
  4103.       RETURN
  4104. '
  4105. ' *  A - COMMAND FROM 5- USER MAINTENANCE OPTIONS (ADD USER)
  4106. '
  4107. 12300 WasA1$ = ""
  4108.       Attempts = 0                                                   ' ML062201
  4109.       FirstNameSave$ = ZFirstName$
  4110.       LastNameSave$ = ZLastName$
  4111.       ActiveUserNameSave$ = ZActiveUserName$
  4112.       CityStateSave$ = ZWasCI$
  4113.       HashValueSave$ = HashValue$
  4114.       IndivValueSave$ = ZIndivValue$                                 ' RC050901
  4115.       GOSUB 12500
  4116.       GOSUB 12840
  4117.       GOSUB 12850
  4118.       GOSUB 12598
  4119.       IF ZUserFileIndex = 0 THEN _
  4120.          GOSUB 12984 : _
  4121.          GOTO 12330
  4122.       IF Found THEN _
  4123.          WasD$ = "User already exists" : _
  4124.          GOSUB 1315 : _
  4125.          GOSUB 12984 : _
  4126.          GOTO 12330
  4127. 12310 GOSUB 12630
  4128.       GOSUB 12800
  4129.       GOSUB 11395
  4130.       ZTempSecLevel = WasOF
  4131.       GOSUB 12900
  4132.       LSET ZLastDateTimeOn$ = ZCurDate$ + _
  4133.                                 " " + _
  4134.                                 ZTimeLoggedOn$
  4135.       GOSUB 12960
  4136.       CALL AllCaps (ZUserIn$)
  4137.       LSET ZCityState$ = ZUserIn$
  4138.       LSET ZElapsedTime$ = MKI$(0)
  4139.       IF ZStartHash > 1 THEN _
  4140.          MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  4141.       IF ZStartIndiv > 1 THEN _
  4142.          MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$     ' RC050901
  4143.       GOSUB 9440
  4144. 12320 GOSUB 12991
  4145. 12330 ZUserSecLevel = UserSecLevelSave
  4146.       ZFirstName$ = FirstNameSave$
  4147.       ZLastName$ = LastNameSave$
  4148.       ZActiveUserName$ = ActiveUserNameSave$
  4149.       ZWasCI$ = CityStateSave$
  4150.       HashValue$ = HashValueSave$
  4151.       ZIndivValue$ = IndivValueSave$                                 ' RC050901
  4152.       ZUserFileIndex = WasTU
  4153.       LSET ZUserRecord$ = UserRecordHold$
  4154.       GOTO 11001
  4155. '
  4156. ' *  GET USER First AND Last NAMES
  4157. '
  4158. 12500 IF Attempts > 5 THEN _
  4159.          ZFF = ZTrue : _
  4160.          RETURN
  4161. 12510 GOSUB 12700
  4162.       Attempts = Attempts + 1
  4163.       ZOutTxt$ = WasA1$ + _
  4164.            ZFirstNamePrompt$
  4165.       CALL SkipLine (1)
  4166.       ZLogonActive = ZTrue
  4167.       GOSUB 12555
  4168.       ZLogonActive = ZFalse
  4169.       CALL Trim (ZWasZ$)
  4170.       ZFirstName$ = ZWasZ$
  4171. 12530 ZOutTxt$ = WasA1$ + _
  4172.            ZLastNamePrompt$
  4173.       ZParseOff = ZTrue
  4174.       GOSUB 12555
  4175. 12540 CALL Trim (ZWasZ$)
  4176.       ZLastName$ = ZWasZ$
  4177.       IF LEN(ZLastName$) < 2 THEN _
  4178.          IF LEN(ZFirstName$) > 2 THEN _
  4179.             GOTO 12500
  4180.       IF (LEN(ZFirstName$) + LEN(ZLastName$)) > 30 THEN _
  4181.          GOTO 12500
  4182.       IF UserSecLevelSave < ZSysopSecLevel THEN _
  4183.          IF (LEN(ZFirstName$) < 2 OR LEN(ZLastName$) < 2) THEN _
  4184.             GOTO 12500 _
  4185.          ELSE IF LEFT$(ZFirstName$,1)=" " OR LEFT$(ZLastName$,1)=" " THEN _
  4186.                  GOTO 12500
  4187. 12550 ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  4188.       IF HashIndiv > 1 THEN _
  4189.          IF ZWasQ < 3 THEN _
  4190.             GOSUB 12558 : _
  4191.             IF ZNo THEN _
  4192.                GOTO 12500
  4193.       ZWasZ$ = ZFirstName$
  4194.       RETURN
  4195. '
  4196. ' *  CHECK FOR NAMES NOT ALLOWED
  4197. '
  4198. 12555 GOSUB 12932
  4199.       IF ZWasQ = 0 THEN _
  4200.          RETURN 12500
  4201. 12556 ZWasZ$ = ZUserIn$(ZAnsIndex)
  4202. 12557 CALL AllCaps (ZWasZ$)
  4203.       CALL RemNonAlf (ZWasZ$,31,91)
  4204.       RETURN
  4205. 12558 ZOutTxt$ = "Are you '" + _
  4206.            ZActiveUserName$ + _
  4207.            "' ([Y],N)"
  4208.       GOSUB 12995
  4209.       RETURN
  4210. 12570 Found = ZFalse
  4211.       CALL OpenWork (2,ZTrashcanFile$)
  4212.       IF ZErrCode <> 0 THEN _                                        ' KG032601
  4213.          ZErrCode = 0 : _                                            ' KG032601
  4214.          RETURN                                                      ' KG032601
  4215. 12580 IF EOF(2) THEN _
  4216.          RETURN
  4217.       INPUT #2,InvalidName$
  4218.       IF ZWasZ$ <> InvalidName$ THEN _
  4219.          GOTO 12580
  4220.       Found = ZTrue
  4221.       RETURN
  4222. 12595 CALL QuickTPut1 ("Name not valid here. Call recorded")
  4223.       CALL UpdtCalr ("Name violation: "+ZActiveUserName$,1)
  4224.       GOTO 10621
  4225. '
  4226. ' *  COMMON SEARCH USER FILE ROUTINE
  4227. '
  4228. 12598 TempHashValue$ = HashValue$
  4229.       TempIndivValue$ = ZIndivValue$                                 ' RC050901
  4230. 12600 GOSUB 4910
  4231.       GOSUB 12988
  4232.       IF ZInConfMenu THEN _
  4233.          IF NOT ZPrivateDoor THEN _
  4234.             CALL QuickTPut1 ("Checking Users...")
  4235. 12605 CALL OpenUser (HighestUserRecord)
  4236.       GOSUB 9450
  4237.       CALL FindUser (TempHashValue$,TempIndivValue$,ZStartHash,ZLenHash,_
  4238.                      ZStartIndiv,ZLenIndiv,HighestUserRecord,Found,_
  4239.                      ZUserFileIndex,ZWasSL)
  4240.      IF Found THEN _
  4241.         RETURN
  4242.      IF CurUserCount < (HighestUserRecord-1)*.95 THEN _
  4243.         RETURN
  4244.      ZOutTxt$ = "No room for new users in " + ZConfName$
  4245.      CALL UpdtCalr (ZOutTxt$,2)
  4246.      IF ZActiveUserFile$ <> ZMainUserFile$ THEN _
  4247.         ZUserFileIndex = 0 : _
  4248.         RETURN
  4249.       IF ZRememberNewUsers AND NOT ZSurviveNoUserRoom THEN _
  4250.          GOSUB 1397
  4251.       ZUserFileIndex = 0
  4252.       IF ZSurviveNoUserRoom THEN _
  4253.          ZRememberNewUsers = ZFalse
  4254.       RETURN
  4255. '
  4256. ' *  AUGMENT USER COUNT, LOCK 4 REC BLOCK IN USER, UNLOCK FILES
  4257. '
  4258. 12630 GOSUB 23000
  4259.       CurUserCount = CurUserCount + (ZWasSL = 0) * ZRememberNewUsers
  4260. 12632 GOSUB 24000
  4261.       GOSUB 12985
  4262.       IF ZRememberNewUsers THEN _
  4263.          GOSUB 12989
  4264.       GOSUB 12990
  4265.       RETURN
  4266. '
  4267. ' *  INFORM USER OF WHAT CONFERENCE USER FILE HE IS VIEWING
  4268. '
  4269. 12700 IF ZConfMode THEN _
  4270.          ZOutTxt$ = "Users of " + _
  4271.               ZConfName$ + _
  4272.               ":" : _
  4273.          GOSUB 12979
  4274.       RETURN
  4275. '
  4276. ' *  GET PASSWORD FROM NEWUSER
  4277. '
  4278. 12800 CALL NewPassword ("Enter PASSWORD you'll use to logon again",ZFalse)
  4279.       IF ZSubParm < 0 THEN _
  4280.          GOTO 202
  4281.       IF UserSecLevelSave < ZSysopSecLevel THEN _
  4282.          IF ZUserIn$ = SPACE$(LEN(ZUserIn$)) THEN _
  4283.             GOTO 12800
  4284.       LSET ZPswd$ = ZWasZ$
  4285.       RETURN
  4286. '
  4287. ' *  GET HASH VALUE FOR CURRENT USER TO LOOK UP IN THE USER'S FILE
  4288. '
  4289. 12840 IF ZStartHash = 1 THEN _
  4290.          HashValue$ = ZActiveUserName$ : _
  4291.          RETURN
  4292.       WasX$ = WasA1$ + _
  4293.            ZPromptHash$
  4294.       CALL UntilRight (WasX$,HashValue$,2,ZLenHash)
  4295.       RETURN
  4296. '
  4297. ' *  GET FIELD TO INDIVIDUATE ONE USER FROM ANOTHER (NAME FIELD IS DEFAULT)
  4298. '
  4299. 12850 IF ZStartIndiv < 1 THEN _
  4300.          RETURN
  4301.       IF ZStartIndiv = 1 THEN _
  4302.          ZIndivValue$ = ZActiveUserName$ : _                         ' RC050901
  4303.          RETURN
  4304.       IF ZExitToDoors THEN _                                         ' RC050901
  4305.          RETURN                                                      ' RC050901
  4306.       WasX$ = WasA1$ + _
  4307.            ZPromptIndiv$
  4308.       CALL UntilRight (WasX$,ZIndivValue$,2,ZLenIndiv)               ' RC050901
  4309.       RETURN
  4310. '
  4311. ' *  SET NEWUSER DEFAULTS
  4312. '
  4313. 12900 LSET ZUserName$ = ZActiveUserName$
  4314.       LSET ZUserOption$ = MKI$(0) + _
  4315.                            MKI$(0) + _
  4316.                            " 0" + _
  4317.                            MKI$(64) + _
  4318.                            MKI$(16) + _
  4319.                            MKI$(0) + _
  4320.                            CHR$(23) + _
  4321.                            ZDefaultEchoer$
  4322.       LSET ZUserDnlds$ = MKI$(0)
  4323.       LSET ZUserUplds$ = MKI$(0)
  4324.       IF ZEnforceRatios THEN _
  4325.          LSET ZTodayDl$ = MKS$(0) : _
  4326.          LSET ZTodayBytes$ = MKS$(0) : _
  4327.          LSET ZDlBytes$ = MKS$(0) : _
  4328.          LSET ZULBytes$ = MKS$(0)
  4329.       LSET ZSecLevel$ = MKI$(ZTempSecLevel)
  4330.       LSET ZElapsedTime$ = MKI$(0)
  4331.       RETURN
  4332. 12930 ZTurboKey = -ZTurboKeyUser
  4333. 12932 CALL PopCmdStack
  4334.       GOTO 12997
  4335. '
  4336. ' *  GET CITY AND STATE FROM NEWUSER
  4337. '
  4338. 12960 ZOutTxt$ = WasA1$ + _
  4339.            ZUserLocation$
  4340.       GOSUB 12995
  4341.       IF ZWasQ = 0 THEN _
  4342.          GOTO 12960
  4343.       IF ZUserIn$ = SPACE$(LEN(ZUserIn$)) THEN _
  4344.          GOTO 12960
  4345.       CALL AllCaps (ZUserIn$)
  4346.       LSET ZCityState$ = ZUserIn$
  4347.       ZWasCI$ = ZUserIn$
  4348.       RETURN
  4349. '
  4350. ' *  S - COMMAND FROM 5 - USER MAINTENANCE OPTIONS (SCAN USERS)
  4351. '
  4352. 12962 WasX = 0
  4353.       ZFF = ZFalse
  4354.       ZMacroMin = 99
  4355.       ZOutTxt$ = "String to search"
  4356.       GOSUB 12998
  4357.       IF ZWasQ = 0 THEN _
  4358.          GOTO 11001
  4359.       CALL AllCaps (ZUserIn$)
  4360.       WasWK$ = ZUserIn$
  4361.       IF ScanFunction$ = "L" THEN _
  4362.          WasWK$ = "," + _
  4363.                STR$(VAL(WasWK$)) + _
  4364.                ","
  4365. 12963 GET 5,WasI
  4366.       GOSUB 12966
  4367.       WasX = INSTR(ScanField$,WasWK$)
  4368.       IF WasX > 0 THEN _
  4369.          GOTO 11015
  4370. 12965 WasI = WasI + 1
  4371.       IF WasI > HighestUserRecord THEN _
  4372.          LSET ZUserRecord$ = UserRecordHold$ : _
  4373.          GOTO 11001
  4374.       WasX = 0
  4375.       GOTO 12963
  4376. 12966 ZFF = INSTR("NCPLH",ScanFunction$)
  4377. 12967 ON ZFF GOTO 12968,12969,12970,12972,12971
  4378.       GOTO 11001
  4379. '
  4380. ' *  N - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR NAME)
  4381. '
  4382. 12968 ScanField$ = ZUserName$
  4383.       RETURN
  4384. '
  4385. ' *  C - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR CITY/ST)
  4386. '
  4387. 12969 ScanField$ = ZCityState$
  4388.       RETURN
  4389. '
  4390. ' *  P - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR PASSWORD)
  4391. '
  4392. 12970 ScanField$ = ZPswd$
  4393.       RETURN
  4394. '
  4395. ' *  H - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR HASH ID)
  4396. '
  4397. 12971 IF ZStartHash > 0 AND ZLenHash > 0 THEN _
  4398.          ScanField$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
  4399.       RETURN
  4400. '
  4401. ' *  L - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR LEVEL)
  4402. '
  4403. 12972 ScanField$ = "," + _
  4404.                     STR$(CVI(ZSecLevel$)) + _
  4405.                     ","
  4406.       RETURN
  4407. '
  4408. ' * CALLS INTO SEPARATELY COMPILED SUBROUTINES (RBBS-SUB)
  4409. '
  4410. '
  4411. ' * STANDARD ENTRY FOR RBBS-PC'S COMMON TERMINAL OUTPUT ROUTINE
  4412. '
  4413. 12975 ZSubParm = 1
  4414.       GOTO 12981
  4415. 12976 ZSubParm = 2
  4416.       GOTO 12981
  4417. 12977 ZSubParm = 3
  4418.       GOTO 12981
  4419. 12978 ZSubParm = 4     ' no cr/lf                                    ' KG081702
  4420.       GOTO 12981
  4421. 12979 ZSubParm = 5     ' cr/lf                                       ' KG081702
  4422.       GOTO 12981
  4423. 12980 ZSubParm = 6
  4424. 12981 CALL TPut
  4425. 12983 IF ZSubParm < 0 THEN _
  4426.          GOTO 202
  4427.       IF ZSubParm = 8 THEN _
  4428.          GOSUB 12995
  4429.       RETURN
  4430. '
  4431. ' * STANDARD ENTRY FOR RBBS-PC'S FILE LOCKING WHEN RUNNING MULTIPLE RBBS-PC'S
  4432. '
  4433. 12984 ZSubParm = 1  ' LOCK USERS & MESSAGES
  4434.       GOTO 12994
  4435. 12985 ZSubParm = 2  ' UNLOCK MESSAGES AND FLUSH
  4436.       Flushed = ZTrue
  4437.       GOTO 12994
  4438. 12986 ZSubParm = 3  ' LOCK MESSAGES
  4439.       GOTO 12994
  4440. 12987 ZSubParm = 4  ' UNLOCK MESSAGES
  4441.       GOTO 12994
  4442. 12988 ZSubParm = 5  ' LOCK USERS
  4443.       GOTO 12994
  4444. 12989 ZSubParm = 6  ' LOCK USER BLOCK
  4445.       GOTO 12994
  4446. 12990 ZSubParm = 7  ' UNLOCK USERS
  4447.       GOTO 12994
  4448. 12991 ZSubParm = 8  ' UNLOCK USER BLOCK
  4449.       GOTO 12994
  4450. 12992 ZSubParm = 9  ' LOCK COMMENTS/UPLOAD DIR
  4451.       GOTO 12994
  4452. 12993 ZSubParm = 10 ' UNLOCK COMMENTS/UPLOAD DIR
  4453. 12994 CALL FileLock
  4454.       IF Flushed THEN _
  4455.          FIELD 1,128 AS ZMsgRec$ : _
  4456.          Flushed = ZFalse
  4457.       IF ZSubParm = -1 THEN _
  4458.          ZSubParm = -9 : _
  4459.          CALL FindFKey : _
  4460.          GOTO 202
  4461.       RETURN
  4462. '
  4463. ' * STANDARD ENTRY FOR RBBS-PC'S COMMON TERMINAL INPUT ROUTINE
  4464. '
  4465. 12995 GOSUB 12997
  4466.       ZSubParm = 1
  4467. 12996 CALL TGet
  4468. 12997 IF ZSubParm < 0 THEN _
  4469.          GOTO 202
  4470.       RETURN
  4471. 12998 ZOutTxt$ = ZOutTxt$ + _
  4472.            ZPressEnter$
  4473.       GOTO 12995
  4474. 12999 ZTurboKey = -ZTurboKeyUser
  4475.       GOTO 12995
  4476. '
  4477. ' *  MAIN SYSTEM ERROR TRAP - ALL ERRORS PASS THROUGH THIS ROUTINE
  4478. '
  4479. 13000 IF ZDebug THEN _
  4480.          ZOutTxt$ = "DEBUG Trap ERL=" + _
  4481.               STR$(ZWasEL) + _
  4482.               " ERR=" + _
  4483.               STR$(ZErrCode) : _
  4484.               CALL Printit(ZOutTxt$) : _
  4485.               WasD$ = ZOutTxt$ : _
  4486.               GOSUB 1315
  4487.       IF ZWasEL = 1905 AND ZErrCode = 63 THEN _
  4488.          CLOSE 1 : _
  4489.          KILL ZActiveMessageFile$ : _
  4490.          GOTO 5350
  4491.       IF ZWasEL = 4371 AND ZErrCode = 6 THEN _
  4492.          GOTO 1200
  4493.       IF ZWasEL =  4740 THEN _
  4494.          GOTO 4745
  4495.       IF ZWasEL =  5151 AND ZErrCode = 62 THEN _
  4496.          CALL UpdtCalr (ZPswdFile$ + " bad format!",2) : _
  4497.          GOTO 5160
  4498. 13500 CALL LogError
  4499.       CALL QuickTPut1 (ZCallersRecord$)
  4500.       GOTO 1200
  4501. '
  4502. ' * COMMON EXIT FROM RBBS-PC (I.E. "ABANDON ALL HOPE OH YE WHO ENTER HERE")
  4503. '
  4504. 13538 CALL UpdtCalr ("No calls.  Recycling.",1)
  4505.       GOTO 13549
  4506. 13540 IF ZLocalUser THEN _
  4507.          IF NOT ZLocalUserMode THEN _
  4508.             GOTO 13549
  4509. 13543 IF (NOT ZSysop) THEN _
  4510.          IF ((ZUserFileIndex = 0 AND ZRememberNewUsers) OR _
  4511.             ZNewUser = ZTrue) THEN _
  4512.             GOTO 13549
  4513. 13545 CALL UpdateC
  4514. 13549 GOSUB 13700
  4515.       IF ZLocalUser OR _
  4516.          ZModemOffHook THEN _
  4517.          GOTO 13555
  4518.       IF NOT ZFossil THEN _
  4519.          OUT ZModemCntlReg,INP(ZModemCntlReg) AND 254 : _
  4520.          CALL DelayTime (ZDTRDropDelay) : _
  4521.          OUT ZModemCntlReg,INP(ZModemCntlReg) OR 1 : _
  4522.          GOTO 13553
  4523. 13550 CALL FosStatus(ZComPort,Status)
  4524.       Status = Status AND &H4000
  4525.       IF Status <> &H4000 THEN _
  4526.          CALL DelayTime (8 + ZBPS)
  4527.       State=0
  4528.       CALL FosDTR(ZComPort,State)
  4529.       CALL DelayTime (ZDTRDropDelay)
  4530.       State=1
  4531.       CALL FosDTR(ZComPort,State)
  4532. 13553 CALL DelayTime (ZDTRDropDelay)
  4533.       CALL TakeOffHook
  4534. 13555 ZActiveMessageFile$ = ZOrigMsgFile$
  4535.       GOSUB 12986
  4536.       GOSUB 5344
  4537.       GET 1,ZNodeRecIndex
  4538.       MID$(ZMsgRec$,57,1) = "I"
  4539.       MID$(ZMsgRec$,40,2) = " 0"
  4540.       MID$(ZMsgRec$,72,2) = " 0"
  4541.       IF MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$ THEN _ ' KG030602
  4542.          MID$(ZMsgRec$,101,2) = " 0"                                 ' KG030602
  4543.       PUT 1,ZNodeRecIndex
  4544.       GOSUB 12985
  4545.       CLOSE 1,2,4,5
  4546.       IF NOT ZFossil THEN _
  4547.          CLOSE 3
  4548.       IF ZRecycleToDos THEN _
  4549.          GOTO 203
  4550.       RUN 100
  4551. 13600 CLS
  4552.       LOCATE ,,0
  4553.       CALL PScrn (ZWasDF$ + " file missing/invalid.  Run CONFIG")    ' KG071301
  4554.       CALL DelayTime (3)
  4555.       GOTO 203
  4556. 13700 IF ZMsgFileLock THEN _
  4557.          GOSUB 12987
  4558. 13710 IF ZUserFileLock THEN _
  4559.          GOSUB 12990
  4560. 13720 IF ZUserBlockLock THEN _
  4561.          GOSUB 12991
  4562.       RETURN
  4563. '
  4564. ' *  C/R - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (QUIT TO MAIN MENU)
  4565. '
  4566. 20093 LSET ZUserRecord$ = UserRecordHold$
  4567.       GOSUB 9500
  4568. 20095 RETURN 1200
  4569. '
  4570. ' *  V - COMMAND FROM FILES MENU (VIEW ARC CONTENTS)
  4571. '
  4572. 20140 CALL GetArc
  4573.       IF ZSubParm = -1 THEN _
  4574.          GOTO 13540
  4575.       IF ZDenyAccess THEN _
  4576.          GOTO 1386
  4577.       RETURN
  4578. '
  4579. ' * GO TO THE FILE SYSTEM TO LIST THE SYSOP'S COMMENTS
  4580. '
  4581. 20150 ZFileSysParm = 1
  4582.       GOTO 20200
  4583. '
  4584. ' * GO TO THE FILE SYSTEM TO LIST THE FILE DIRECTORIES
  4585. '
  4586. 20155 ZFileSysParm = 2
  4587.       GOTO 20200
  4588. '
  4589. ' * GO TO THE FILE SYSTEM TO DOWNLOAD FILES
  4590. '
  4591. 20160 ZFileSysParm = 3
  4592.       GOTO 20200
  4593. '
  4594. ' * GO TO THE FILE SYSTEM WHEN RETURNING FROM EXTERNAL PROTOCOLS
  4595. '
  4596. 20165 ZFileSysParm = 4
  4597.       GOTO 20200
  4598. '
  4599. ' * GO TO THE FILE SYSTEM TO UPLOAD FILES
  4600. '
  4601. 20170 ZFileSysParm = 5
  4602.       GOTO 20200
  4603. '
  4604. ' * GO TO THE FILE SYSTEM TO SCAN FILE SYSTEM DIRECTORIES
  4605. '
  4606. 20175 ZFileSysParm = 6
  4607.       GOTO 20200
  4608. '
  4609. ' * GO TO THE FILE SYSTEM TO HANDLE "PERSONAL" FILES
  4610. '
  4611. 20180 ZFileSysParm = 7
  4612.       GOTO 20200
  4613. '
  4614. ' * GO TO THE FILE SYSTEM TO LIST "NEW" FILES
  4615. '
  4616. 20185 ZFileSysParm = 8
  4617.       GOTO 20200
  4618. '
  4619. ' * RETURN TO THE FILE SYSTEM AFTER HANDLING EXTENDED FILE DESCRIPTIONS
  4620. '
  4621. 20190 ZFileSysParm = 9
  4622. 20200 CALL FileSystem
  4623.       ON ZFileSysParm GOTO 20205, _
  4624.                                 20210, _
  4625.                                 20215, _
  4626.                                 20220, _
  4627.                                 20225, _
  4628.                                 20230, _
  4629.                                 20235
  4630. 20205 RETURN
  4631. 20210 RETURN 202
  4632. 20215 RETURN 1200
  4633. 20220 RETURN 1380
  4634. 20225 ZSysopComment = ZTrue
  4635.       ZMaxMsgLines = ZMaxExtendedLines
  4636.       GOSUB 2008
  4637.       GOTO 20190
  4638. 20230 RETURN 10553
  4639. 20235 RETURN 10595
  4640. '
  4641. ' *  GET MESSAGE HEADER RECORD DATA
  4642. '
  4643. 23000 GET 1,1
  4644.       HighMsgNumber = VAL(LEFT$(ZMsgRec$,8))
  4645.       AutoAddSec   = CVI(MID$(ZMsgRec$,9,2))
  4646.       CallsToDate! = VAL(MID$(ZMsgRec$,11,10))
  4647.       CurUserCount = VAL(MID$(ZMsgRec$,57,5))
  4648.       FirstMsgRecord = VAL(MID$(ZMsgRec$,68,7))
  4649.       ZNextMsgRec = VAL(MID$(ZMsgRec$,75,7))
  4650.       HighestMsgRecord = VAL(MID$(ZMsgRec$,82,7))
  4651.       IF ZActiveMessageFile$ = ZOrigMsgFile$ THEN _
  4652.          NodesInSystem = VAL(MID$(ZMsgRec$,127))
  4653.       RETURN
  4654. 23100 GET 1,ZNextMsgRec
  4655.       IF MID$(ZMsgRec$,61,1) = ":" THEN _
  4656.          CALL CheckInt (MID$(ZMsgRec$,117,4)) : _
  4657.          IF ZErrCode = 0 AND (ZTestedIntValue > 1) AND (ZTestedIntValue < 100) THEN _
  4658.             WasY = ZTestedIntValue : _
  4659.             CALL CheckInt (MID$(ZMsgRec$,2,4)) : _
  4660.             IF ZErrCode = 0 AND ZTestedIntValue > HighMsgNumber THEN _
  4661.                HighMsgNumber = ZTestedIntValue : _
  4662.                ZNextMsgRec = ZNextMsgRec + WasY : _
  4663.                CALL QuickTPut1 ("Fixing Msg Header") : _             ' KG071301
  4664.                MsgCorrected = ZTrue : _
  4665.                GOTO 23100
  4666.       RETURN
  4667. '
  4668. ' *  UPDATE MESSAGE HEADER RECORD DATA
  4669. '
  4670. 24000 MID$(ZMsgRec$,1,8) = STR$(HighMsgNumber)
  4671.       MID$(ZMsgRec$,11,10) = STR$(CallsToDate!)
  4672.       MID$(ZMsgRec$,57,5) = STR$(CurUserCount)
  4673.       MID$(ZMsgRec$,68,7) = STR$(FirstMsgRecord)
  4674.       MID$(ZMsgRec$,75,7) = STR$(ZNextMsgRec)
  4675.       MID$(ZMsgRec$,82,7) = STR$(HighestMsgRecord)
  4676.       PUT 1,1
  4677.       RETURN
  4678. '
  4679. ' * A - COMMAND FROM Library MENU (ARCHIVE A SELECTED Library DISK)
  4680. '
  4681. 30000 ZSubParm = 4
  4682.       CALL Library
  4683.       IF ZSubParm = -1 THEN _
  4684.          RETURN 10595
  4685.       RETURN
  4686. '
  4687. ' * C - COMMAND FROM Library MENU (CHANGE TO A Library DISK)
  4688. '
  4689. 30100 ZSubParm = 2
  4690.       CALL Library
  4691.       RETURN
  4692. '
  4693. ' * D - COMMAND FROM Library MENU (DOWNLOAD A DISK/FILE FROM Library)
  4694. '
  4695. 30200 IF ZTimeLock AND 2 AND NOT ZHasPrivDoor THEN _
  4696.          CALL TimeLock : _
  4697.          IF NOT ZOK THEN _
  4698.             RETURN
  4699.       IF ZLibDiskChar$ = "0000" THEN _
  4700.          CALL QuickTPut1 ("You must select a Library disk first!") : _
  4701.          RETURN
  4702.       ZSubParm = 3
  4703.       CALL Library
  4704.       GOTO 20160
  4705. '
  4706. ' * CALCULATE TIME REMAINING FOR USER
  4707. '
  4708. 41000 CALL CheckTimeRemain (MinsRemaining)
  4709.       IF ZSubParm = -1 THEN _
  4710.          RETURN 10553
  4711.       RETURN
  4712. '
  4713. ' * SHOW USER CURRENT ACCESS LEVEL
  4714. '
  4715. 41070 ZOutTxt$ = "Granted access level" + _
  4716.            STR$(ZUserSecLevel) + _
  4717.            MID$(" (SYSOP)",1,-8 * (ZUserSecLevel >= ZSysopSecLevel))
  4718.       GOSUB 12975
  4719.       RETURN
  4720. '
  4721. ' * NULLS SET FOR NEW USERS
  4722. '
  4723. 42700 CALL SkipLine (1)
  4724.       CALL QuickTPut1 ("TurboKey: act on 1 char command without waiting for [ENTER]")
  4725.       ZOutTxt$ = "Want TurboKeys (Y/[N])"
  4726.       GOSUB 12999
  4727.       ZTurboKeyUser = NOT ZYes
  4728.       CALL Toggle (8)
  4729.       RETURN
  4730. '
  4731. ' *  F - COMMAND FROM UTILITY MENU (FILE Transfer DEFALUT MODE)
  4732. ' *  FILE Transfer DEFAULT SET FOR NEW USERS
  4733. '
  4734. 42800 ZFF = INSTR(ZDefaultXfer$,ZUserXferDefault$)
  4735.       IF ZFF = 0 THEN _
  4736.          ZFF = INSTR(ZInternalEquiv$,"N")
  4737.       CALL QuickTPut1 ("Current Protocol: "+MID$(ZDefaultXfer$,ZFF,1))
  4738. 42805 ZOutTxt$ = "Default "
  4739.       CALL XferType (3,ZExpertUser)
  4740.       IF ZSubParm = -1 THEN _
  4741.          RETURN 10595
  4742.       ZUserXferDefault$ = ZWasFT$
  4743. 42810 ZOutTxt$ = "Protocol: " + ZProtoPrompt$
  4744.       GOSUB 12979
  4745.       RETURN
  4746. '
  4747. ' *  C - COMMAND FROM UTILITY MENU (CHANGE CASE Toggle)
  4748. ' *  UPPER/LOWER CASE SET FOR NEW USERS
  4749. '
  4750. 42850 GOSUB 9525
  4751. 42851 ZOutTxt$ = "Change to R)BBS, C)aller's software" + _
  4752.            MID$(", I)ntermediate host",1,-20 * (ZHostEchoOn$ <> "")) + _
  4753.            ZPressEnterExpert$
  4754.       GOSUB 12930
  4755.       IF ZWasQ = 0 THEN _
  4756.          RETURN
  4757. 42852 ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)
  4758.       CALL AllCaps (ZWasZ$)
  4759.       IF INSTR("ICR",ZWasZ$) = 0 THEN _
  4760.          GOTO 42851
  4761.       ZEchoer$ = ZWasZ$
  4762.       CALL SetEcho (ZEchoer$)
  4763.       GOSUB 9525
  4764.       RETURN                                                         ' KG071301
  4765. ' *  G - COMMAND FROM UTILITY MENU (GRAPHICS WANTED)
  4766. ' *  Graphic MENUS SELECTION SET FOR NEW USERS
  4767. '
  4768. 43000 GOSUB 43005
  4769.       GOTO 43022
  4770. 43005 CALL AskGraphics
  4771.       IF ZSubParm = -1 THEN _
  4772.          RETURN 10595
  4773.       IF ZWasQ = 0 THEN _
  4774.          RETURN
  4775. 43020 ZOutTxt$ = "Text Graphics: " + _                               ' DA071701
  4776.            MID$("None AsciiColor",ZWasGR * 5 + 1,5)
  4777.       GOSUB 12979
  4778.       RETURN
  4779. 43022 IF ZEmphasizeOnDef$ = "" THEN _
  4780.          RETURN
  4781.       ZOutTxt$ = "Do you want colorized prompts ([Y],N)"             ' DA071701
  4782.       GOSUB 12999
  4783.       ZHiLiteOff = NOT ZNo
  4784.       CALL Toggle(5)
  4785.       RETURN
  4786. 43025 CALL Graphic (ZUserGraphicDefault$,ZFileName$)
  4787. '
  4788. ' *  DISPLAY NON-BREAKABLE TEXT FILES
  4789. '
  4790. 43027 ZStopInterrupts = ZTrue
  4791.       CALL BufFile (ZFileName$,WasX)
  4792.       CALL Carrier
  4793.       IF ZSubParm = -1 THEN _
  4794.          RETURN 10595
  4795.       ZStopInterrupts = ZFalse
  4796.       RETURN
  4797. '
  4798. ' * MAKE INPUT STRING HIDDEN (USE *'S TO ECHO INPUT)
  4799. '
  4800. 45010 ZHidden = ZTrue
  4801.       GOSUB 12995
  4802.       ZHidden = ZFalse
  4803.       RETURN
  4804.