
=====[ Test Version - Changes to RBBS-PC 17.3 ]========

Last Mod:  KG061501

Note:  BASE is the release of 17.3.

CONVENTIONS:
    The changes are assigned numbers that  correspond  to  the
    month,  day, and order in which they were made.  Any mods
    are dated following the modification  description.   The
    lines   of   source   code  that  are  changed/modified/added  are
    designated by the comment beginning in column 70 of "' iiMMDD#"
    where ii is the initials of the person providing the change.

The latest set of merges available is:  RFIX0518.ZIP

-------------------------------------------------------------------
RBBS-PC.EXE         02-11-90  7:00 PM EST  Release of CPC17.3
--------------------------------------------------------------------
                            Summary

EXE   MOD       Short Description
---- --------   -----------------
RBBS KG061501  Stacked commands wrongly executed during a timelock
RBBS EC061301  Not correctly analyzing all file names
CNFG EC060601  Untrapped error when set required protocol for pers. dwld
RBBS KG061001  Error condition on individuation not handled properly
RBBS KG060903  Person with sysop status not notified of mail to sysop
RBBS KG060902  Msg to public name of sysop says user not found
RBBS KG060901  In msg entry, says will notify even when who to not found
CNFG KG060103  Check wrong for conflict btw individuation & dwnld ratios
RBBS KG060102  Version name of MiteSized version keeps getting longer
RBBS KG060101  Remote sysop name wrongly logged to callers file
RBBS MB052101  Color spilling over into "min left"
RBBS RC050901  Individuation not being restored on return from Doors
RBBS KG052901  Macros sometimes not working in PUI's
RBBS KG052702  Logging to callers file improved in local mode
RBBS KG052701  Time logged on not right in caller's file
RBBS KG052401  RBBS overwrites callers file entry on shell to door
RBBS KG052201  Support info stored in name field but not part of name
RBBS DA042401  Possible to get infinite loop in FMS search
RBBS KG051702  K)ill can be in msg prompt even though can't kill
RBBS TC051701  Join back to main from subboard in V)iew not working
RBBS MB051601  Subject of msg sometimes not prompted for
RBBS KG051501  Subject of msg not treated right when has lower case
RBBS KG042501  Block print in macros not working right
CNFG KG041702  Quote for command symbol messes up DEF file
RBBS KG041701  Doors not getting executed
RBBS ML041401  Infinite loop possible under NetBios
RBBS KG040902  Log of file transfers not right when dooring
RBBS KG040901  Not pausing when screen full on directory scans
RBBS KG032801  Macros associated with protocol not being executed
RBBS KG032601  Possible to get untrapped errors when have new user
RBBS KG032502  Adds support for hidden doors not on menu if in DOORS.DEF
RBBS KG032501  Registration door control ignored in DOORS.DEF
RBBS KG031801  Wrong directory sometimes shown
RBBS KG031501  Unable to cancel an upload
RBBS KK030901  Sometimes get overflow error
RBBS KG030801  Stops reporting in personal mail scan after a screen pause
RBBS KG030601  Constant recycling with "Connect Timeout"
CNFG KG030301  Confusing prompt for name of file shown on sec violation
RBBS KG030203  Msg scan reporting personal mail may not pause on full screen
RBBS KG030202  Color spills over into a prompt in personal download
RBBS KG030201  Display of message cannot be paused
RBBS KG030101  Mail V)iew function can show mail waiting wrong in current conf.
RBBS KG022702  Untrapped errors in LIT version with MIMPORT OFF
RBBS KG022701  Stacked commands sometimes not working properly
RBBS RH022501  Autodownload sometimes not reporting name properly
RBBS KG022301  Add support for macro processing for online files
RBBS KG022205  File name reported wiped out by macro processing
RBBS KG022204  Add ability to vary FFS macro processing
RBBS KG022203  Colors graphics door menu MENU05C bleeds on the right
RBBS KG022202  Up and downloads in distributed RBBS-PC.DEF may not work
RBBS KG022201  Jump no longer an option when V)iew in dir listing
RBBS KG022103  LIT merges not assigning new user security right
RBBS KG022102  LIT merges give compile error if SURVEY is OFF
RBBS KG022101  Not correctly tracking bytes downloaded when dooring
RBBS KG022001  Autodownload not working when extension not specified
RBBS KG021803  Macro assign sometimes picks up wrong value
RBBS KG021802  Macros in Fast File Search executed too frequently
RBBS KG021801  Internal code documentation missing some cases
RBBS KG021502  Logon into a conference can pick up a macro
RBBS KG021501  Prompt after end of macro is repeated twice
RBBS RH021501  Autodownload not working

Contributors include:

    DA - Doug Azzarito
    EC - Ezra Conger
    KG - Ken Goosens
    KK - Kim Kodde
    MB - Mathew Briggs
    ML - Mark Lautenschlager
    RC - Richard Couture
    RH - Ray Horton
    TC - Tom Collins

------------------------[ KG061501 ]-------------------------

Problem:  When have a timelock on downloads and stack the
files to download, the file names are misinterpreted as commands.

Solution:  Change RBBSSUB4.BAS as follows:

(line 60180)

      SUB TimeLock STATIC
      CALL TimeRemain(MinsRemaining)
      IF ZSecsUsedSession! >= ZTimeLockSet THEN _
         ZOK = ZTrue : _
         EXIT SUB
      ZOutTxt$ = ZFirstName$
      CALL NameCaps(ZOutTxt$)
      CALL QuickTPut1 ("Sorry, " + ZOutTxt$ + ", function locked" + _
                   STR$(INT((ZTimeLockSet-ZSecsUsedSession!)/60)) + _' DA11102
                   " more minutes" + _
                   STR$(INT(ZTimeLockSet-ZSecsUsedSession!) MOD 60) + " seconds")
      CALL BufFile(ZHelpPath$+"TIMELOCK"+ZHelpExtension$,WasX)
      ZOK = ZFalse
      ZLastIndex = 0                                                 ' KG061501
      END SUB

------------------------[ EC061301 ]-------------------------

Problem:  File names not broken correctly into components when they
contain a period before the extension (e.g. "C:..\RBBS\AX.ZIP").

Solution:  Change RBBSSUB5.BAS as follows:

(line 63300)

      SUB BreakFileName (FileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC
      CALL AllCaps (FileSpec$)
      DrvPath$ = ""
      Prefix$ = ""
      Extension$ = ""
      CALL TrimTrail (FileSpec$,"\")
      WasL = LEN(FileSpec$)
      IF WasL < 1 THEN _
         EXIT SUB
      CALL FindLast (FileSpec$,"\",WasX,WasY)
      IF WasX < 1 THEN _
         IF MID$(FileSpec$,2,1) = ":" THEN _
            DrvPath$ = LEFT$(FileSpec$,1) : _
            ZWasS = 3 _
         ELSE ZWasS = 1 _
      ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
           ZWasS = WasX + 1 : _
           IF WasY = 1 THEN _
              DrvPath$ = DrvPath$ + "\"
      WasX = INSTR(ZWasS,FileSpec$ + ".",".")                        ' EC061301
      IF WasX < WasL THEN _
         Extension$ = MID$(FileSpec$,WasX + 1)
      IF ZWasS <= WasL THEN _
         IF WasX >= ZWasS THEN _
            Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
      IF NOT ForJoining THEN _
         EXIT SUB
      IF LEN(DrvPath$) = 1 THEN _
         IF DrvPath$ <> "\" THEN _
            DrvPath$ = DrvPath$ + _
                       ":"
      IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
         DrvPath$ = DrvPath$ + _
                    "\"
      IF LEN(Extension$) > 0 THEN _
         Extension$ = "." + _
                      Extension$
      END SUB

------------------------[ EC060601 ]-------------------------

Problem:  When set a required protocol for personal downloads in
configuration, can get illegal function call.

Solution:  Change CNFG-SUB.BAS as follows:

12466 DISPLAYED.PAGE.NUMBER = 8
      GOSUB 24800
      LOCATE  3,1
      PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
      PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
      PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
      PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii  XMODEM Xm/CRC Kermit Ymodem Imdem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7)  ' EC060601
      PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
      PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
      PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
      PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
      PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
      PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
      PRINT "151. Min. security to 'AUTO ADD' conference user --" + AUTO.ADD.SECURITY$
      PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
      PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
      PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
      TIME.LOCK$ = MID$("<none> DOORS  DOWNLDSBOTH   ",TIME.LOCK*7+1,7)
      PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
      PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
      PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
      PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
      PRINT "159. Min. sec level to do personal uploads --------" ; ZMinSecPersUpld ' nc030101
      PRINT "160. Let messages have multiple recipients -------- " ; FNYESNO$(ZEnableCC) ' nc030101
      GOTO 12580

------------------------[ KG060903 ]-------------------------

Problem:  When have sysop status but not using remote sysop name,
message scan does not identify mail to/from "SYSOP" as belonging
to the caller.   Mail to "SYSOP" should be shared by everyone with
sysop status.

Solution:  Change RBBS-PC.BAS as follows:

4660 IF RemoteSysop THEN _
        CALL MsgNameMatch ("SYSOP",SysopFullName$,6,MsgFromCaller) : _
        CALL MsgNameMatch ("SYSOP",SysopFullName$,37,MsgToCaller) _
     ELSE WasX$ = LEFT$("SYSOP",-5*ZSysop) : _                       ' KG060903
          CALL MsgNameMatch (MsgUserName$,WasX$,6,MsgFromCaller) : _ ' KG060903
          CALL MsgNameMatch (MsgUserName$,WasX$,37,MsgToCaller)      ' KG060903
     UserInHeader = (MsgFromCaller OR MsgToCaller)
     RETURN

------------------------[ KG060902 ]-------------------------

Problem:  When leave a msg to public name of sysop, can say the user not
found and caution against leaving mail.

Solution:  Change RBBSSUB2.BAS as follows:

2250 ' $SUBTITLE: 'WhoCheck - Checks whether user exists'
' $PAGE
'
'  NAME    -- WhoCheck
'
'  INPUTS  --   PARAMETER                    MEANING
'              WhoFind$                User to find
'
'  OUTPUTS --  WhoFound                Whether user found
'              UserNumFound           Record # of user
'
'  PURPOSE --  Validate that user record exists.  Sysop
'              counted as found even if lack user record.
'
     SUB WhoCheck (WhoFind$,WhoFound,UserNumFound) STATIC
     UserNumFound = 0
     IF ZStartHash <> 1 THEN _
        WhoFound = ZTrue : _
        EXIT SUB
     Work128$ = ZUserRecord$
     WhoFound = ZFalse
     ToSysop = (INSTR(WhoFind$,"SYSOP") > 0 OR _
                INSTR(WhoFind$,ZSysopFirstName$ + " " + ZSysopLastName$) > 0) ' KG060902
     CALL OpenUser (HighestUserRecord)
     FIELD 5, 128 AS ZUserRecord$
     IF ToSysop THEN _
        WasX$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
     ELSE WasX$ = WhoFind$
     IF LEN(WasX$) > 1 THEN _
        CALL FindUser (WasX$,"",ZStartHash,ZLenHash,_
                       0,0,HighestUserRecord,WhoFound,_
                       UserNumFound,ZWasSL)
     LSET ZUserRecord$ = Work128$
     IF NOT WhoFound THEN _
        IF ToSysop THEN _
           WhoFound = ZTrue _
        ELSE CALL QuickTPut1 (WhoFind$ + " not active user")
     END SUB

------------------------[ KG060901 ]-------------------------

Problem:  When leave mail to person not found because not in user file,
will still say the receiver "will be notified" has mail waiting, even though
can't and won't.

Solution:  Change RBBSUB2.BAS as follows:

2032 IF MsgTo$ <> "ALL" THEN _
        IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
           ZWasDF = INSTR(MsgTo$+" @"," @") : _                      ' KG052201
           TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _               ' KG052201
           CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
           IF NOT Found THEN _
              ZLastIndex = 0 : _
              RcvrRecNum = 0 : _                                     ' KG060901
              IF NOT ZReply THEN _
                 ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
                 ZTurboKey = -ZTurboKeyUser : _
                 ZLastIndex = 0 : _
                 GOSUB 2033 : _
                 ZWasZ$ = ZUserIn$(1) : _
                 CALL AllCaps (ZWasZ$) : _
                 IF ZWasZ$ <> "C" THEN _
                    MsgTo$ = "" : _
                    IF ZWasZ$ <> "Q" THEN _
                       GOTO 2020
     IF MsgTo$ = Temp$ THEN _
        ZOutTxt$ = "Msg would be from and to SAME PERSON!  Really do this (Y,[N])" : _
        ZLastIndex = 0 : _
        GOSUB 2033 : _
        IF NOT ZYes THEN _
           MsgTo$ = ""
     EXIT SUB

------------------------[ KG060103 ]-------------------------

Problem:  Valid individuation fields are rejected by CONFIG was
conflicting with download ratios.   E.g. begin at 63, length 2,
should be ok (1st two characters of location) but is rejected.

Solution:  Change CONFIG.BAS as follows:

18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
        INDIV.ID$ = NONE.PICKED$ _
      ELSE INDIV.ID$ = "(nonstandard)"
      START.WRITE = START.INDIV
      LEN.WRITE = LEN.INDIV                                          ' KG060103
      GOSUB 17805
      IF NOT OK THEN _
         START.INDIV = 0 : _
         LEN.INDIV = 31 : _
         GOTO 18102
      START.WRITE = START.INDIV
      RETURN

------------------------[ KG060102 ]-------------------------

Problem:  When use MiteSized version of RBBS, version name grows
by "/MITESIZE" every time enter a subboard.

Solution:  Replace RBBSLIT.MRG and MITEVER.LIT by the enclosed
new ones.

------------------------[ KG060101 ]-------------------------

Problem:  (fix to a fix)  Remote SysOp name logged to callers
file when it should not be.

Solution:  Change RBBS-PC.BAS as follows:

(line 800)

       .
       .
       .
    CALL SetCrLf
    CALL SetPrompt
    CALL XferType (2,ZTrue)
    IF NOT SubBoard THEN _
       BoardCheckDate$ = PrevLastOn$
    GOSUB 5370                                                       ' KG060101
    IF ZWasA THEN _                                                  ' KG060101
       ZActiveUserName$ = "SYSOP"                                    ' KG060101
    IF ZExitToDoors OR SubBoard THEN _                               ' KG052701
       GOTO 815
    GOSUB 465
    IF (ZEightBit AND _
       ZAutoDownDesired) OR _
       ZAskID THEN _
       CALL TestUser
       .
       .
       .

819 CALL Trim (ZWasCI$)                                              ' KG060101
    IF (ZNodeRecIndex < 2) THEN _
       GOTO 821
    GOSUB 4910
    GOSUB 24000
    GET 1,ZNodeRecIndex
    MID$(ZMsgRec$,1,31) = ZActiveUserName$ + _
                                 SPACE$(31 - LEN(ZActiveUserName$))
    MID$(ZMsgRec$,40,2) = " 0"
    MID$(ZMsgRec$,44,2) = STR$(ZBPS)
    MID$(ZMsgRec$,55,2) = " 0"
    MID$(ZMsgRec$,57,1) = "A"
    MID$(ZMsgRec$,60,5) = ZTalkToModemAt$ + _
                                 SPACE$(5 - LEN(ZTalkToModemAt$))
    MID$(ZMsgRec$,72,2) = " 0"
    MID$(ZMsgRec$,93,24) = ZWasCI$ + _
                                  SPACE$(24)
    PUT 1,ZNodeRecIndex
    GOSUB 12985

------------------------[ MB052101 ]-------------------------

Problem:  When have colorization active, color from prior context
will sometimes spill into the report of # of minutes left.

Solution:  Change RBBSSUB3.BAS as follows:

41032 ' $SUBTITLE: 'DispTimeRemain - Display users time remaining'
' $PAGE
'
'  NAME    -- DispTimeRemain
'
'  INPUTS  --     PARAMETER                    MEANING
'              MinsRemaining
'
'  OUTPUTS --     PARAMETER                    MEANING
'                MinsRemaining               TIME IN MINUTES LEFT IN SESSION
'
      SUB DispTimeRemain (MinsRemaining) STATIC
      CALL TimeRemain (MinsRemaining)
      CALL QuickTPut1 (ZEmphasizeOff$ + STR$(MinsRemaining) + " min left") ' MB052101
      END SUB

------------------------[ RC050901 ]-------------------------

Problem:  When return from a door and individuating callers
with same name, the individuation field is always asked,
whereas it should never ask for individuation (just like it
never asks again for name, just password at most).

Solution:  Add the following variable to RBBS-VAR.BAS:  ZIndivValue$.
Change RBBS-PC.BAS as follows:

725 IF ZUserSecLevel < ZMinLogonSec THEN _
       ZLogonErrorIndex = 1 : _
       GOTO 460
    IF ZFirstName$ = ZLastName$ THEN _
       CALL QuickTPut1 (ZFirstNamePrompt$+"/"+ZLastNamePrompt$+" cannot be same") : _
       ZLogonErrorIndex = 3 : _
       GOTO 10620
    IF NOT ZRememberNewUsers THEN _
       GOSUB 13700 : _
       ZUserFileIndex = 0 : _
       GOSUB 12960: _
       PrevLastOn$ = "00-00-00": _
       GOTO 735
    ZNewUser = ZTrue
    CALL OpenUser (HighestUserRecord)
    GOSUB 9450
    GOSUB 12630
    MID$(ZUserRecord$,ZStartHash,ZLenHash) = LEFT$("NEWUSER",ZLenHash)
    IF ZStartIndiv > 0 THEN _                                        ' RC050901
       MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
    GOSUB 9440

(line 800)
      .
      .
      .
'
' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
'
     WasX$ = "{" + _                                                 ' KG052701
          HashValue$ + _                                             ' KG052701
          "/" + _                                                    ' KG052701
          ZIndivValue$ + _                                           ' RC050901
          "}"                                                        ' KG052701
     IF LEN(ZWasZ$) < 65 THEN _                                      ' KG052701
        WasX = 65 _                                                  ' KG052701
     ELSE WasX = LEN(ZWasZ$) + 2                                     ' KG052701
     MID$(ZWasNG$,WasX) = WasX$                                      ' KG052701
     CALL Printit ("  " + ZWasZ$)                                    ' KG052701
     IF ZNewUser THEN _                                              ' KG052701
        CALL UpdtCalr ("NEWUSER",1) : _                              ' KG052701
        CALL Muzak (2)                                               ' KG052701
'
' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
'
       .
       .
       .

815 ZDnlds = CVI(ZUserDnlds$)
    ZUplds = CVI(ZUserUplds$)
    IF ZEnforceRatios THEN _
       ZDLToday! = CVS(ZTodayDl$) : _
       ZBytesToday! = CVS(ZTodayBytes$) : _
       ZDLBytes! = CVS(ZDlBytes$) : _
       ZULBytes! = CVS(ZULBytes$)
    IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN  _
       ZDLToday! = 0 : _
       ZBytesToday! = 0
    IF NOT GlobalsSet THEN _
       GlobalsSet = ZTrue : _
       ZGlobalDnlds = ZDnlds : _
       ZGlobalUplds = ZUplds : _
       ZGlobalDLToday! = ZDLToday! : _
       ZGlobalBytesToday! = ZBytesToday! : _
       ZGlobalDLBytes! = ZDLBytes! : _
       ZGlobalULBytes! = ZULBytes!
    'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
    '   IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
    '      ZUplds = ZInitialCredit# _
    '   ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
    '           ZULBytes! = ZInitialCredit#
    GOSUB 827
    LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
                         MID$(ZUserOption$,3)
    LSET ZLastDateTimeOn$ = ZCurDate$ + _
                              " " + _
                              ZTimeLoggedOn$
    MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
    IF ZStartIndiv > 0 THEN _
       MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$       ' RC050901
    LSET ZUserName$ = ZOrigUserName$
    IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
       CALL AutoPage
    IF NOT SubBoard THEN _
       ZOrigUserFileIndex = ZUserFileIndex
    GOSUB 9440
    GOSUB 12991
    CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
    IF TurboLogon THEN _
       GOTO 819
    IF SkipWelcomeScreen AND _
       (ZUserSecLevel >= ZAllowCallerTurbo) THEN _
       GOTO 816
    IF NOT SameUser THEN _
       ZStopInterrupts = NOT ZWelcomeInterruptable : _
       ZBypassTimeCheck = ZTrue : _
       ZFileName$ = ZWelcomeFile$ : _
       ZDisplayAsUnit = ZTrue : _
       GOSUB 1790 : _
       ZDisplayAsUnit = ZFalse
    ZBypassTimeCheck = ZFalse
    ZStopInterrupts = ZTrue

12300 WasA1$ = ""
      Attempts = 0
      UserSecLevelSave = ZUserSecLevel
      FirstNameSave$ = ZFirstName$
      LastNameSave$ = ZLastName$
      ActiveUserNameSave$ = ZActiveUserName$
      CityStateSave$ = ZWasCI$
      HashValueSave$ = HashValue$
      IndivValueSave$ = ZIndivValue$                                 ' RC050901
      GOSUB 12500
      GOSUB 12840
      GOSUB 12850
      GOSUB 12598
      IF ZUserFileIndex = 0 THEN _
         GOSUB 12984 : _
         GOTO 12330
      IF Found THEN _
         WasD$ = "User already exists" : _
         GOSUB 1315 : _
         GOSUB 12984 : _
         GOTO 12330

12310 GOSUB 12630
      GOSUB 12800
      GOSUB 11395
      ZTempSecLevel = WasOF
      GOSUB 12900
      LSET ZLastDateTimeOn$ = ZCurDate$ + _
                                " " + _
                                ZTimeLoggedOn$
      GOSUB 12960
      CALL AllCaps (ZUserIn$)
      LSET ZCityState$ = ZUserIn$
      LSET ZElapsedTime$ = MKI$(0)
      IF ZStartHash > 1 THEN _
         MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
      IF ZStartIndiv > 1 THEN _
         MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$     ' RC050901
      GOSUB 9440

12330 ZUserSecLevel = UserSecLevelSave
      ZFirstName$ = FirstNameSave$
      ZLastName$ = LastNameSave$
      ZActiveUserName$ = ActiveUserNameSave$
      ZWasCI$ = CityStateSave$
      HashValue$ = HashValueSave$
      ZIndivValue$ = IndivValueSave$                                 ' RC050901
      ZUserFileIndex = WasTU
      LSET ZUserRecord$ = UserRecordHold$
      GOTO 11001

12598 TempHashValue$ = HashValue$
      TempIndivValue$ = ZIndivValue$                                 ' RC050901

12850 IF ZStartIndiv < 1 THEN _
         RETURN
      IF ZStartIndiv = 1 THEN _
         ZIndivValue$ = ZActiveUserName$ : _                         ' RC050901
         RETURN
      IF ZExitToDoors THEN _                                         ' RC050901
         RETURN                                                      ' RC050901
      WasX$ = WasA1$ + _
           ZPromptIndiv$
      CALL UntilRight (WasX$,ZIndivValue$,2,ZLenIndiv)               ' RC050901
      RETURN

Change RBBSSUB3.BAS as follows:

43070 ZActiveMessageFile$ = ZOrigMsgFile$
      ZSubParm = 3
      CALL FileLock
      CALL OpenMsg
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      IF ZGlobalSysop THEN _
         MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
      MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
      MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
      MID$(ZMsgRec$,44,2) = STR$(ZBPS)
      MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
      MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
      MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
      MID$(ZMsgRec$,55,2) = STR$(ZSysop)
      MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
      MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
      MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
      MID$(ZMsgRec$,75,1) = ZWasFT$
      MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
      MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
      MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
      CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
      MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
      IF ZLocalUser THEN _
         ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _              ' KG030601
      ELSE ZWasZ$ = " 0"                                             ' KG030601
      MID$(ZMsgRec$,101,2) = ZWasZ$                                  ' KG030601
      MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)                    ' KG030601
      ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
      MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
      MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
      MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
      MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
      MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
      MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
      MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
      MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' ***   Save additional parameters for door restoral
      CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL PrintWorkA (STR$(ZLimitMinsPerSession))
      CALL PrintWorkA (ZWasNG$)                                      ' KG052701
      CALL PrintWorkA (ZIndivValue$)                                 ' NC050901
      CLOSE 2

44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
                        VAL(MinLoggedOn$) * 60! + _                  ' KK030901
                        VAL(SecLoggedOn$)
      HourLoggedOn$ = ""
      MinLoggedOn$ = ""
      SecLoggedOn$ = ""
      IF ZMinsPerSession < 1 THEN _
         ZMinsPerSession = 3
      IF NOT ZEightBit THEN _
         OUT ZLineCntlReg,&H1A
      IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
         ZFirstName$ = ZSysopPswd1$ : _
         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
      ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
           ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
           ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
           ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
           ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
      ZWasZ$ = ZFirstName$
      CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL ReadDir (2,1)
      ZLimitMinsPerSession = VAL (ZOutTxt$)
      CALL ReadDir (2,1)                                             ' KG052701
      ZWasNG$ = ZOutTxt$                                             ' KG052701
      CALL ReadDir (2,1)                                             ' RC050901
      ZIndivValue$ = ZOutTxt$                                        ' RC050901
      CLOSE 2
      END SUB

------------------------[ KG052901 ]-------------------------

Problem:  When using Programmable User Interface, macros will not
work after do a join to a conference that does not exist or after
execute conference view and go to end of list without joining
anything.  Problem reported by Ken Humrich.

Solution:  Change RBBS-PC.BAS as follows:

1232 MID$(ZLastCommand$,2,1) = " "                                   ' KG052901
     IF ZCustomPUI THEN _                                            ' KG052901
        CALL UserFace (ZUserGraphicDefault$) : _
        GOSUB 12997 : _
        GOTO 1235                                                    ' KG052901
     ZOutTxt$ = ZCmdPrompt$
     GOSUB 12930
     IF ZWasQ = 0 THEN _
        GOTO 1230

------------------------[ KG052702 ]-------------------------

Problem:  In local mode, when log to printer, not logging to
caller's file.   This messages up caller analysis on networks.
Also, unnecessary code check when entering/exiting a conference
because check is done in logging routine.   Finally,
entrance/exit to conference made to log all the time and not just
on extended logging.

Solution:  Change RBBS-PC.BAS as follows:

4900 CALL UpdtCalr ("Entered " + ZConfName$,2)                       ' KG052702
     CALL QuickTPut1 ("Welcome to " + ZConfName$)

5350 IF ZConfName$ <> "MAIN" THEN _
        CALL QuickTPut1 ("Rejoining " + OrigMsgName$)
     ZConfName$ = "MAIN"
     ConfFileName$ = OrigMsgName$
     ZNewsFileName$ = OrigNewsFileName$
     TurboLogon = ZTrue
     ZWasQ = 0
     ZInConfMenu = ZTrue
     IF ZActiveUserName$ = "SYSOP" THEN _
        ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
        CALL Trim (ZActiveUserName$)
     ZConfigFileName$ = ZOrigCnfg$
     CALL ReadDef (ZConfigFileName$)
     IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
        ZActiveMessageFile$ = ZOrigMsgFile$ : _
        GOSUB 5343
     IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
        GOSUB 5380 : _
        ZActiveUserFile$ = ZOrigUserFile$ : _
        ZActiveUserName$ = ZOrigUserName$ : _
        GOSUB 12598 : _
        GOSUB 12990 : _
        IF Found THEN _
           GOSUB 9500 : _
           ZMainUserFileIndex = ZUserFileIndex : _
           CALL SetPrompt : _
           CALL XferType (2,ZTrue) _
        ELSE ZUserFileIndex = 0 : _
             ZMainUserFileIndex = 0
     CALL UpdtCalr ("Exited Conference",2)                           ' KG052702
     GOSUB 2350
     ZUplds = ZGlobalUplds
     ZDnlds = ZGlobalDnlds
     ZDLToday! = ZGlobalDLToday!
     ZBytesToday! = ZGlobalBytesToday!
     ZDLBytes! = ZGlobalDLBytes!
     ZULBytes! = ZGlobalULBytes!

Change RBBSSUB1.BAS as follows:

13670 LSET ZCallersRecord$ = WasX$
      CALL Printit (ZCallersRecord$)                                 ' KG052702
      ZCallersFileIndex! = ZCallersFileIndex! + 1

------------------------[ KG052701 ]-------------------------

Problem:  When join subboards, the time shown in callers file
for logon is the time joined last subboard rather than original
time logged on.

Solution:  Change RBBS-PC.BAS as follows:

Omit code at line 837.

800 CALL DoorReturn
    IF ZAdjustedSecurity THEN _
       GOSUB 5135
    IF ZOrigCnfg$ = ZCurDef$ THEN _
       ZMainUserFileIndex = ZUserFileIndex : _
       ZOrigSec = ZUserSecLevel : _
       ZUserSecSave = ZUserSecLevel : _
       ZOrigUserName$ = ZActiveUserName$
    ZTimesLoggedOn = CVI(MID$(ZUserOption$,1,2)) - _
       ((ZOrigCnfg$ <> ZCurDef$ OR NOT SubBoard) AND _
        (NOT ZPrivateDoor) AND (NOT ZExitToDoors))
    GOSUB 9500
    IF (NOT ZExitToDoors) AND (NOT SubBoard) THEN _
       CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
                 " Lvl" + STR$(ZUserSecLevel) + " " + TIME$,2)
    PrevLastOn$ = ZLastDateTimeOn$
    IF ZLocalUser THEN _
       ZTalkToModemAt$ = "9600" : _
       ZBaudParity$ = "9600 BAUD,N,8,1" : _
       ZModemInitBaud$ = "9600" : _
       ZSnoop = ZTrue : _
       ZLineFeeds = ZTrue
    CALL SetCrLf
    CALL SetPrompt
    CALL XferType (2,ZTrue)
    IF NOT SubBoard THEN _
       BoardCheckDate$ = PrevLastOn$
    IF ZExitToDoors OR SubBoard THEN _                               ' KG052701
       GOTO 815
    GOSUB 465
    IF (ZEightBit AND _
       ZAutoDownDesired) OR _
       ZAskID THEN _
       CALL TestUser
    CALL QuickTPut1 ("Logging " + ZActiveUserName$)
    CALL Talk (1,ZOutTxt$)
    CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " NODE " + ZNodeID$ + _
                ", OPERATING AT " + ZBaudParity$)
    CALL SkipLine (1)
    Attempts = 0
    ZWasZ$ = ZActiveUserName$ + _                                    ' KG052701
            " on at " + _                                            ' KG052701
            ZCurDate$ + _                                            ' KG052701
            ", " + _                                                 ' KG052701
            ZTime$ + _                                               ' KG052701
            " from " + _                                             ' KG052701
            ZWasCI$ + _                                              ' KG052701
            ", " + _                                                 ' KG052701
            ZBaudParity$                                             ' KG052701
     ZWasNG$ = ZWasZ$ + SPACE$(128 - LEN(ZWasZ$))                    ' KG052701
     MsgUserName$ = LEFT$(ZActiveUserName$+"  ",22)                  ' KG052701
'
' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
'
     WasX$ = "{" + _                                                 ' KG052701
          HashValue$ + _                                             ' KG052701
          "/" + _                                                    ' KG052701
          IndivValue$ + _                                            ' KG052701
          "}"                                                        ' KG052701
     IF LEN(ZWasZ$) < 65 THEN _                                      ' KG052701
        WasX = 65 _                                                  ' KG052701
     ELSE WasX = LEN(ZWasZ$) + 2                                     ' KG052701
     MID$(ZWasNG$,WasX) = WasX$                                      ' KG052701
     CALL Printit ("  " + ZWasZ$)                                    ' KG052701
     IF ZNewUser THEN _                                              ' KG052701
        CALL UpdtCalr ("NEWUSER",1) : _                              ' KG052701
        CALL Muzak (2)                                               ' KG052701
'
' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
'
    IF ZEightBit AND ZAutoDownYes THEN _
       ZOutTxt$ = CHR$(9) + _
            ZReturnLineFeed$ + _
            "You may use AUTODOWNLOADing!" : _
       CALL RingCaller : _
       CALL DelayTime(4)

Change RBBSSUB3.BAS as follows:

(line 43070)
           .
           .
           .
' ***   Save additional parameters for door restoral
      CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL PrintWorkA (STR$(ZLimitMinsPerSession))
      CALL PrintWorkA (ZWasNG$)                                      ' KG052701
      CLOSE 2

44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
                        VAL(MinLoggedOn$) * 60! + _                  ' KK030901
                        VAL(SecLoggedOn$)
      HourLoggedOn$ = ""
      MinLoggedOn$ = ""
      SecLoggedOn$ = ""
      IF ZMinsPerSession < 1 THEN _
         ZMinsPerSession = 3
      IF NOT ZEightBit THEN _
         OUT ZLineCntlReg,&H1A
      IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
         ZFirstName$ = ZSysopPswd1$ : _
         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
      ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
           ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
           ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
           ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
           ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
      ZWasZ$ = ZFirstName$
      CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL ReadDir (2,1)
      ZLimitMinsPerSession = VAL (ZOutTxt$)
      CALL ReadDir (2,1)                                             ' KG052701
      ZWasNG$ = ZOutTxt$                                             ' KG052701
      CLOSE 2
      END SUB
------------------------[ KG052401 ]-------------------------

Problem:  When shell to a door and it writes information to
the callers file, the entries are overwritten when returns to
RBBS.

Solution:  Add the following variable to RBBS-VAR.BAS:
ZPrevCaller$.   Change RBBSSUB1.BAS as follows:

(line 108)

    SUB SetCall STATIC
    ON ERROR GOTO 65000
    IF ZPrevCaller$ = ZCallersFile$ OR ZCallersFilePrefix$ = "" THEN _ ' KG052401
       EXIT SUB
    ZPrevCaller$ = ZCallersFile$                                     ' KG052401
    ZCallersFileIndex! = 1
    CLOSE 2
    CLOSE 4
    IF ZShareIt THEN _
       OPEN ZCallersFile$ FOR RANDOM SHARED AS #4 LEN=64 _
    ELSE OPEN "R",4,ZCallersFile$,64
    FIELD 4,64 AS ZCallersRecord$
    IF LOF(4) > 0 THEN _
       ZCallersFileIndex! = LOF(4) / 64
    IF ZCallersFileIndex! < 1 THEN _
       ZCallersFileIndex! = 0
    ZUserIn$ = STRING$(13,0)

Change RBBSUB2.BAS as follows:

10989 IF ZTransferFunction = 3 THEN _
         ZWasY$ = "Registration" _
      ELSE ZWasY$ = ZDooredTo$
      ZOutTxt$ = ZWasY$ + _
           " door opened at " + _
           TIME$ + _
           " on " + _
           DATE$
      ZSubParm = 5
      CALL TPut
      CALL UpdtCalr (ZDooredTo$ + " door opened!",2)
      CLOSE 2
      OPEN "O",2,"DORINFO" + _
                 ZNodeFileID$ + _
                 ".DEF"
      PRINT #2,ZRBBSName$
      PRINT #2,ZSysopFirstName$
      PRINT #2,ZSysopLastName$
      IF ZLocalUser THEN _
         PRINT #2,"COM0" _
      ELSE PRINT #2,ZComPort$
      ZUserIn$ = MID$(ZBaudParity$,INSTR(ZBaudParity$," B"))
      PRINT #2,ZTalkToModemAt$;ZUserIn$
      PRINT #2,ZNetworkType
      IF ZGlobalSysop THEN _
         PRINT #2,"SYSOP" : _
         PRINT #2,"" _
      ELSE PRINT #2,ZFirstName$ : _
           PRINT #2,ZLastName$
      PRINT #2,ZCityState$
      PRINT #2,ZWasGR
      PRINT #2,ZUserSecLevel
      CALL TimeRemain (MinsRemaining)
      CALL CheckInt (DoorTime$)
      IF ZErrCode = 0 AND ZTestedIntValue > 0 THEN _
         IF MinsRemaining > ZTestedIntValue THEN _
            MinsRemaining = ZTestedIntValue
      PRINT #2,INT(MinsRemaining)
      PRINT #2,ZFossil
      IF ExitMethod$ = "S" THEN _
         CLOSE 4 : _                                                 ' KG052401
         CALL ShellExit (ExitTemplate$) : _
         ZPrevCaller$ = "" : _                                       ' KG052401
         CALL SetCall : _                                            ' KG052401
         ZExitToDoors = ZTrue : _
         CALL BufFile (ZDoorDisplay$,WasX) : _
         CALL DoorReturn _
      ELSE ZOutTxt$(1) = ZDiskForDos$ + _
                  "COMMAND /C " + _
                  ExitTo$ : _
           ZOutTxt$(2) = ZRBBSBat$ : _
           CALL RBBSExit (ZOutTxt$(),2)
      END SUB

------------------------[ KG052201 ]-------------------------

Problem:  Set echomail processors want to add "@ <node#>" after the
name of the person sending mail.   But then, when person replies,
name is never found for setting mail waiting.

Solution:  Reguard name as terminated with first "@".

Change RBBSSUB2.BAS as follows:

2032 IF MsgTo$ <> "ALL" THEN _
        IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
           ZWasDF = INSTR(MsgTo$+" @"," @") : _                      ' KG052201
           TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _               ' KG052201
           CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
           IF NOT Found THEN _
              ZLastIndex = 0 : _
              IF NOT ZReply THEN _
                 ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
                 ZTurboKey = -ZTurboKeyUser : _
                 ZLastIndex = 0 : _
                 GOSUB 2033 : _
                 ZWasZ$ = ZUserIn$(1) : _
                 CALL AllCaps (ZWasZ$) : _
                 IF ZWasZ$ <> "C" THEN _
                    MsgTo$ = "" : _
                    IF ZWasZ$ <> "Q" THEN _
                       GOTO 2020
     IF MsgTo$ = Temp$ THEN _
        ZOutTxt$ = "Msg would be from and to SAME PERSON!  Really do this (Y,[N])" : _
        ZLastIndex = 0 : _
        GOSUB 2033 : _
        IF NOT ZYes THEN _
           MsgTo$ = ""
     EXIT SUB

Change RBBSSUB5.BAS as follows:

63540 ' Match Name to one in message file
      SUB MsgNameMatch (PrimeName$,AltName$,SearchPos,Found) STATIC
      WasX$ = LEFT$(PrimeName$+"  ",22-8*(SearchPos < 7))
      GOSUB 63542                                                    ' KG052201
      IF Found OR AltName$ = "" THEN _                               ' KG052201
         EXIT SUB                                                    ' KG052201
      WasX$ = LEFT$(AltName$ + "  ",22-8*(SearchPos < 7))
      GOSUB 63542                                                    ' KG052201
      EXIT SUB                                                       ' KG052201
63542 WasY$ = MID$(ZMsgRec$,SearchPos,LEN(WasX$))                    ' KG052201
      ZWasDF = INSTR(WasY$,"@")                                      ' KG052201
      IF ZWasDF > 0 THEN _                                           ' KG052201
         MID$(WasY$,ZWasDF) = "      "                               ' KG052201
      Found = (WasY$ = WasX$)                                        ' KG052201
      RETURN                                                         ' KG052201
      END SUB

------------------------[ DA042401 ]-------------------------

Problem:  Get an infinite loop when do an file S)earch and hit a
string in the extended description you have insufficient suecurity
to view because is protected by a security level (= in front of name).

Solution:  Change RBBSSUB3.BAS as follows:

58169 CALL CheckInt (MID$(PartToPrint$,34))
      IF ZUserSecLevel < ZTestedIntValue THEN _
         LastOK = ZFalse : _
         FailedSearch = ZFalse : _                                   ' DA042401
         GOTO 58168
      MID$(PartToPrint$,1,13) = MID$(PartToPrint$,2,12) + " "
      ZWasA = LEN(STR$(ZTestedIntValue))
      MID$(PartToPrint$,34) = MID$(PartToPrint$,34 + ZWasA) + SPACE$(ZWasA)
      GOTO 58172

------------------------[ KG051702 ]-------------------------

Problem:  When security for K)ill command set too high to use,
caller still presented with K option in msg read when reading own
mail.

Solution:  Change RBBS-PC.BAS as follows:

4600   IF ScanMsgs THEN _
          GOSUB 8020 : _
          GOTO 4630
       IF NOT JustSearching THEN _
          GOSUB 8000 : _
          IF QuotedReply THEN _
             QuotedReply = ZFalse : _
             GOTO 4610
       IF ZRet THEN _
          GOTO 4630
       CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
       WasI =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG051702
       IF ZExpertUser THEN _
          WasA1$ = ",R,T,=,+,-" + _
                MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
                MID$(",K",1,WasI * 2) + _                            ' KG051702
                MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
                MID$(",S",1, - CanChangeSec * 2) _
       ELSE WasA1$ = ",R)eply,T)hread,=)again,+,-" + _
                  MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
                  MID$(",K)ill",1, WasI * 6) + _                     ' KG051702
                  MID$(",U)ser",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _
                  MID$(",S)ec",1, - CanChangeSec * 5)
       ZTurboKey = -ZTurboKeyUser
       IF JustSearching OR NOT JustReplied THEN _
          GOTO 4610
       JustReplied = ZFalse
       CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
       CALL SkipLine (1)
       IF ZNo THEN _
          RETURN
       CALL AllCaps (ZUserIn$)
       ZReply = (ZReply OR ZUserIn$ = "R")
       IF ZUserIn$ <> "=" THEN _
          GOTO 4618
       CALL SkipLine (1)

------------------------[ KG051701 ]-------------------------

Problem:  When in a subboard, do a V)iew conference, and use
join suboption to rejoin main, stays inside the subboard.

Solution:  Change RBBS-PC.BAS as follows:

1205 IF ZSubParm < 0 THEN _
        GOTO 202
     ZSubParm = 1
     ZStopInterrupts = ZFalse
     ZNonStop = (ZPageLength < 1)
     ZWasQ = 0
     IF ConfMailJoin OR (ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN") THEN _ ' TC051701
        TurboLogon = (NOT ConfMailJoin) : _
        ConfMailJoin = ZFalse : _
        ZFF = 8 : _
        ZUserIn$(2) = ZHomeConf$ : _
        ZHomeConf$ = "" : _
        ZWasQ = 1 : _
        ZAnsIndex = 1 : _
        ZLastIndex = 2 : _
        ZStoreParseAt = 1 : _
        ZLastCommand$ = "MJ" : _                                     ' KG021502
        GOTO 1240
     CALL SkipLine (1)

------------------------[ KG051601 ]-------------------------

Problem:  When SysOp declines to leave a comment because it would
be to same person msg would be from, and then E)nters another
message, is not prompted for the subject ("comment" is used).

Change RBBS-PC.BAS as follows:

2000 QuotedReply = ZFalse
     MsgFrom$ = ZActiveUserName$
     SysopMsg = ZFalse                                               ' MB051601

------------------------[ KG051501 ]-------------------------

Problem:  Some BBS's allow lower case in a msg subject.   When mail from
them gets added to RBBS, it may remain in lower case.   Then thread
and text search will not match properly.

Solution:  Always make the subject upper case when it is read into
RBBS.   Change RBBS-PC.BAS as follows:

8040 IF LEN(MsgTo$) < 23 THEN _
        MsgTo$ = MsgTo$ + _
                      SPACE$(23 - LEN(MsgTo$))
     Subject$ = MID$(ZMsgRec$,76,25)
     CALL Trim (Subject$)
     CALL AllCaps (Subject$)                                         ' KG051501
     OrigSubject$ = Subject$
     IF ZPswdFailed THEN _
        Subject$ = WasSJ$

------------------------[ KG042501 ]-------------------------

Problem:  When execute macros with block print to screen that
has empty lines in it, prompts repeated on the screen and macro
works irregulary.

Solution:  Change RBBSSUB5.BAS as follows:

63336 GOSUB 63395
      IF NOT ZMacroActive THEN _
         ZMacroEcho = ZTrue : _
         EXIT SUB                                                    ' KG042501
      IF CompareVar > 0 THEN _
         IF NOT CaseExecute THEN _
            IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
               WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3) : _          ' KG042501
               GOTO 63370 _
            ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
                    CompareVar = 0 : _
                    GOTO 63336 _
                  ELSE GOTO 63336
      IF LEN(ZOutTxt$) < 3 THEN _                                    ' KG042501
         GOTO 63398                                                  ' KG042501
      WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3)                       ' KG042501
      IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
         GOTO 63398
      CALL CheckInt (MID$(ZOutTxt$,2))
      IF ZErrCode > 0 THEN _
         GOTO 63398
            .
            .
            .

------------------------[ KG041702 ]-------------------------

Problem:  CONFIG accepts a quote for a command symbol but this
choice messes up the entire configuration file.

Solution:  Do not allow quote as a choice.   Change CNFG-SUB.BAS
as follows:

61892 CALL ASKRO("New command for " + _
                  MID$(COMMANDS$(FF,1),1,INSTR(COMMANDS$(FF,1),"  ")) + _
                 "is?",24,HK$)
      IF HK$ = CHR$(34) THEN _                                       ' KG041702
         GOTO 61892                                                  ' KG041702
      X$ = MID$(HK$,1,1)
      CALL ALLCAPS (X$)
      IF LEN(HK$) > 1 THEN _
         HK$ = X$ + MID$(HK$,2)
      IF LEN (HK$) = 1 THEN _
         HK$ = X$
      COMMANDS$(FF,2) = HK$
      MID$(SECTION.COMMANDS$,FF,1) = HK$
      GOTO 61880

------------------------[ KG041701 ]-------------------------

Problem:  Door may exist but fail to be executed.

Solution:  Line was left out of a subprogram.  Change RBBSSUB4.BAS
as follows:

59510 ZFileName$ = CurMenu$
      InMenu = ZTrue                                                 ' KG041701
      CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue)
      MenuFront$ = MenuDrv$ + WasX$
      CALL Graphic (GRDefault$,ZFileName$)
      CurMenuVer$ = ZFileName$
      ZStopInterrupts = ZFalse
      IF ZAnsIndex < ZLastIndex OR ZExpertUser THEN _
         GOTO 59520

------------------------[ KG041401 ]-------------------------

Problem:  Possible to get an infinite loop under NetBios.

Solution:  Caused by trying to unlock a file not locked.  Change
RBBSSUB1.BAS as follows:

29920 ZErrCode = 0
      IF IBMFileLock = 6 AND IBMRecLock = 3 THEN _
         IBMCount = IBMCount - 1 : _
         IF IBMCount > 0 THEN _
            EXIT SUB _
         ELSE IBMCount = 0
      UNLOCK IBMFileLock, IBMRecLock TO IBMRecLock
      IF ZErrCode = 70 THEN _                                        ' ML041401
         EXIT SUB                                                    ' ML041401
      IF ZErrCode <> 0 THEN _
         GOTO 29920
      END SUB

------------------------[ KG040902 ]-------------------------

Problem:  When dooring to external protocols that append to the
log file used by DSZ, the log file can grow rather than contain
only the latest transfer, causing RBBS to read the wrong entry.

Solution:   Change RBBSSUB5.BAS as follows:

20263 IF ZPrivateDoor THEN _
         ZCmdTransfer$ = ZWasFT$ : _
         CALL XferType (2,ZTrue) : _
         ZCmdTransfer$ = ""
      CALL OpenWork (2,"XFER-" + ZNodeID$ + ".DEF")
      IF ZErrCode <> 0 THEN _
         GOTO 20267
      CALL ReadParms (ZWorkAra$(), ZFailureParm, 1)
      IF ZErrCode <> 0 THEN _
         GOTO 20267
      CLOSE 2                                                        ' KG040902
      CALL KillWork ("XFER-" + ZNodeID$ + ".DEF")

------------------------[ KG040901 ]-------------------------

Problem:  If screen happens to fill with msg "Scanning directory...",
will not pause but scroll lines away.

Solution:  Change RBBSSUB5.BAS as follows:

20120 ZOutTxt$ = "Scanning Directory " + _
           ZFileNameHold$
      IF WasRS$ <> "" THEN _
         ZOutTxt$ = ZOutTxt$ + " for " + WasRS$
      GOSUB 21650
      IF ZFileSysParm > 1 THEN _
         RETURN
      CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse)                 ' KG040901
      IF ZNo THEN _                                                  ' KG040901
         ZErrCode = 0 : _                                            ' KG040901
         RETURN                                                      ' KG040901
      WasPG = ZTrue

------------------------[ KG032801 ]-------------------------

Problem:  Documentation says a macro can be executed before any
file transfer by putting it in PROTO.DEF.   But macro is ignored.

Solution:  Change RBBSSUB5.BAS as follows:

20330 IF ZAutoDownInProgress THEN _
         RETURN
      GOSUB 20337                                                    ' KG032801
      ZOutTxt$ = ZProtoPrompt$ + _
            " " + WasA1$ + _
            " of " + _
            ZFileNameHold$ + _
            " ready.  <Ctrl X> aborts"
      GOSUB 21650

20337 IF ZProtoMacro$ <> "" THEN _                                   ' KG032801
         ZGSRAra$(1) = MID$("DU ",ZTransferFunction,1) : _           ' KG032801
         CALL MacroExe (ZProtoMacro$)                                ' KG032801
      RETURN                                                         ' KG032801

20340 IF ZWasDF THEN _
         ZOutTxt$ = "Switch to a non-ascii protocol" : _
         GOSUB 21650 : _
         GOTO 21700
      GOSUB 20750
      IF ZFileSysParm > 1 OR NOT ZOK THEN _
         RETURN
      CALL OpenWork (2,ZFileName$)
      IF (ZAnsIndex = FirstDnld OR NOT ZConcatFIles) THEN _
         GOSUB 20337 : _                                             ' KG032801
         ZOutTxt$ = "^X aborts.  ^S suspends ^Q resumes" : _
         GOSUB 21640 : _
         IF ZFileSysParm > 1 THEN _
            RETURN _
         ELSE ZOutTxt$ = ZProtoPrompt$ + " SEND of " + _
              ZFileNameHold$ + _
              " ready. Press Any Key to start" : _
         ZTurboKey = 2 : _
         ZForceKeyboard = ZTrue : _
         ZSuspendAutologoff = ZTrue : _
         GOSUB 21660 : _
         ZSuspendAutologoff = ZFalse : _
         GOSUB 20335 : _
         IF ZFileSysParm > 1 THEN _
            RETURN

20560 LineACK = (ZDefaultLineACK$ <> "")
      IF LineACK THEN _
         ZOutTxt$ = "Acknowledge each line ([Y],N)" : _
         ZTurboKey = - ZTurboKeyUser : _
         LineACK = NOT ZNo : _
         GOSUB 21660 : _
         IF ZFileSysParm > 1 THEN _
            RETURN
      GOSUB 20337                                                    ' KG032801
      CALL QuickTPut1 ("Transfer MUST end with a <Ctrl-K>")
      CALL QuickTPut1 (ZProtoPrompt$+" RECEIVE of " + ZFileNameHold$ + " ready")
      ZOK = ZFalse
      XOff = ZFalse
      CALL OpenOutW(ZFileName$)
      IF ZErrCode <> 0 AND ZErrCode <> 53 THEN _
         ZWasEL = 20560 : _
         GOTO 21900
      GOSUB 20510
      IF ZFileSysParm > 1 THEN _
         RETURN

------------------------[ KG032601 ]-------------------------

Problem:   When have a problem reading TRASHCAN file other than
file not found, such as when TRASHCAN is a dos subdirectory,
will get untrapped errors when new user tries to log on.

Solution:  Change RBBS-PC.BAS as follows:

12570 Found = ZFalse
      CALL OpenWork (2,ZTrashcanFile$)
      IF ZErrCode <> 0 THEN _                                        ' KG032601
         ZErrCode = 0 : _                                            ' KG032601
         RETURN                                                      ' KG032601

------------------------[ KG032502 ]-------------------------

Problem:  Any door listed in DOORS.DEF should be executable if
caller has sufficient security.   But only SysOp can executed
doors not listed on the menu.

Solution:  To allow "hidden" doors, change RBBS-PC.BAS as
follows:

821 IF ZExitToDoors THEN _
       IF ZTransferFunction = 3 THEN _
          ZNewUser = ZTrue : _
          TurboLogon = ZFalse : _
          SameUser = ZFalse : _
          ZTransferFunction = 0 : _
          GOTO 832 _
       ELSE GOTO 832
    GOSUB 1241
    IF (SubBoard AND (ZOrigMsgFile$ = ZActiveMessageFile$)) _
       OR ((ZUserSecLevel > ZMaxRegSec) AND (NOT ZNewUser)) THEN _
       GOTO 832
    ZWasZ$ = ZRegProgram$
    ZTransferFunction = 3
    CALL DoorExit (ZFalse)                                           ' KG032502
    ZTransferFunction = 0
    GOTO 832

1401 ZStackC = ZTrue
     CALL SubMenu ("Which questionnaire(s), L)ist" + ZPressEnterExpert$, _
        WasA1$,ZQuesPath$,".DEF","",ZUserGraphicDefault$,ZTrue,ZFalse,ZTrue,"",WasX) ' KG032502
     IF ZWasQ = 0 THEN _
        RETURN
     IF ZSubParm = -1 THEN _
        RETURN 10595
     QuestHold$ = ZWasZ$
     GOSUB 11520
     CLOSE 2
     CALL UpdtCalr (QuestHold$ + " questionnaire " + _
        MID$("answeredaborted",1 - 8 * ZQuestAborted,8),2)
     IF ReturnToPrompt THEN _
        RETURN
     GOTO 1401

5301 ZStackC = ZTrue
     CALL SubMenu ("What conference, L)ist, M)ain ([ENTER] quits)",_
         WasA1$,MsgDrvPath$,_
         "M.DEF","M",ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"C.DEF",WasX) ' KG032502
     IF ZWasQ = 0 THEN _
        RETURN
     IF ZSubParm = -1 THEN _
        RETURN 10595

9701 CALL SubMenu ("Read what bulletin(s), L)ist, S)ince, N)ews ([ENTER] = none)",_
                   WasA1$, ZBulletinPrefix$,"",ReturnOn$,_
                   ZUserGraphicDefault$,ZFalse,ZFalse,ZFalse,"",WasX) ' KG032502
     IF ZWasQ = 0 THEN _
        RETURN
     CALL CheckCarrier
     IF ZSubParm = -1 THEN _
        RETURN 10595
     IF (ZWasZ$ = "*" OR ZWasZ$ = "S") THEN _
        ZPrevPrefix$ = "" : _
        GOTO 9760
     ZStopInterrupts = ZFalse
     IF ZWasZ$ = "N" THEN _
        GOSUB 1242 : _
        IF WasZ <> 0 THEN _
           CALL QuickTPut1 ("No NEWS available") : _
           GOTO 9701 _
        ELSE GOTO 9703
     CALL BufFile (ZFileName$,ZAnsIndex)

10974 WasA1$ = ZMenu$(5)
      CALL Talk (5,ZOutTxt$)
      ZStackC = ZTrue
      CALL SubMenu ("Open which door, L)ist" + ZPressEnterExpert$, _
                    WasA1$,"",".BAT","",_
                    ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"",InMenu) ' KG032502
      IF ZWasQ = 0 THEN _
         RETURN
      IF ZSubParm = -1 THEN _
         RETURN 10595

10986 ZWasZ$ = ZFileName$
      CALL DoorExit (NOT InMenu)                                     ' KG032502
      GOTO 10974                                                     ' KG032502

Change RBBSSUB2.BAS as follows:

(line 10983)

      SUB DoorExit (ReqDoorsDef) STATIC                              ' KG032502
      IF ZWasZ$ = "" OR _
         ZWasZ$ = "NONE" THEN _
         EXIT SUB
      CALL FindIt (ZWasZ$)
      IF NOT ZOK THEN _
         GOTO 10986
      CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse)   ' KG032501
      ExitMethod$ = ""
      ZDooredTo$ = ExitTo$
      CALL FindIt (ZDoorsDef$)
      IF NOT ZOK THEN _
         IF ReqDoorsDef THEN _                                       ' KG032502
            EXIT SUB _                                               ' KG032502
         ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _                 ' KG032502
              GOTO 10989                                             ' KG032502
10985 CALL ReadParms (ZOutTxt$(),8,1)
      IF ZErrCode > 0 THEN _
         IF ReqDoorsDef THEN _                                       ' KG032502
            EXIT SUB _                                               ' KG032502
         ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _                 ' KG032502
              GOTO 10989                                             ' KG032502
      IF ExitTo$ <> ZOutTxt$(1) THEN _
         GOTO 10985
      CALL CheckInt (ZOutTxt$(2))
      IF ZErrCode > 0 THEN _
         ZErrCode = 0 : _
         GOTO 10985
      IF ZUserSecLevel < ZTestedIntValue THEN _
         CALL QuickTPut1 ("Insufficient security for door") : _
         EXIT SUB
      WasX$ = LEFT$(ZOutTxt$(5),INSTR(ZOutTxt$(5)+" "," ")-1)
      CALL FindIt (WasX$)
      IF NOT ZOK THEN _
         GOTO 10986
      ZFileName$ = ZOutTxt$(3)
      ExitMethod$ = ZOutTxt$(4)
      ExitTemplate$ = ZOutTxt$(5)
      ZDoorDisplay$ = ZOutTxt$(7)
      DoorTime$ = ZOutTxt$(8)
      CALL AskUsers
      CALL SmartText (ExitTemplate$,ZFalse,ZFalse)
      CALL MetaGSR (ExitTemplate$,ZFalse)
      ExitTo$ = ExitTemplate$
      GOTO 10989

Change RBBSSUB4.BAS as follows:

(line 59500)

      SUB SubMenu (PassedPrompt$,CurMenu$,FrontOpt$, _
                  BackOpt$,ReturnOn$,GRDefault$,VerifyInMenu, _
                  AllMenuOK,RequireInMenu,BackOpt2$,InMenu) STATIC   ' KG032502

59538 FilName$ = FPre$ + ZWasZ$
      CALL BadFile (FilName$,WasBF)
      IF WasBF > 1 THEN _
         ZOK = ZFalse : _
         RETURN
      ZFileName$ = FilName$ + _
                   BackOpt$
      CALL Graphic (GRDefault$,ZFileName$)
      IF NOT ZOK THEN _
         IF BackOpt2$ <> "" THEN _
            ZFileName$ = FilName$ + _
                         BackOpt2$ : _
            CALL Graphic (GRDefault$,ZFileName$)
      IF ZOK THEN _
         IF ZSysop OR (NOT RequireInMenu) THEN _
            RETURN _
         ELSE CALL WordInFile (CurMenu$,ZWasZ$,InMenu) : _           ' KG032502
              IF InMenu THEN _                                       ' KG032502
                 RETURN _
              ELSE GOTO 59540
      IF (NOT VerifyInMenu) THEN _
         GOTO 59540
      CALL WordInFile (CurMenu$,ZWasZ$,InMenu)  'verify against menu itself ' KG032502
      IF InMenu THEN _                                               ' KG032502
         IF AllMenuOK THEN _
            RETURN
59540 WasX$ = FPre$ + _
           ZWasZ$ + _
           ".MNU" 'check whether option is a menu
      ZFileName$ = WasX$
      CALL Graphic (GRDefault$,ZFileName$)
      IF ZOK THEN _
         NewMenu = ZTrue : _
         CurMenuVer$ = ZFileName$ : _
         CurMenu$ = WasX$ : _
         CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue) : _
         MenuFront$ = MenuDrv$ + WasX$ : _
         RETURN
      IF VerifyInMenu AND InMenu AND NOT RequireInMenu THEN _        ' KG032502
         CALL UpdtCalr("Option " + ZWasZ$ + " on menu " + _
                       CurMenu$ + " but not found",1)
      RETURN

------------------------[ KG032501 ]-------------------------

Problem:  When put registration door control in DOORS.DEF, it
is being ignored.

Solution:  Change RBBSSUB2.BAS as follows:

(line 10983)

      SUB DoorExit STATIC
      IF ZWasZ$ = "" OR _
         ZWasZ$ = "NONE" THEN _
         EXIT SUB
      CALL FindIt (ZWasZ$)
      IF NOT ZOK THEN _
         GOTO 10986
      CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse)   ' KG032501
      ExitMethod$ = ""
         .
         .
         .

------------------------[ KG031801 ]-------------------------

Problem:  When has main and auxiliary FMS directories, and list an
auxiliary, abort, then list main, get auxiliary instead.

Solution:  Change RBBSSUB3.BAS as follows:

58183 CLOSE 2
      ZNonStop = (ZPageLength < 1)
      ZStopInterrupts = ZFalse
      ZOutTxt$ = ""
      ZActiveFMSDir$ = ""                                            ' KG031801
      ZJumpSupported = ZFalse
      EXIT SUB

------------------------[ KG031501 ]-------------------------

Problem:  Sometimes get endless looping where keeps trying to download
same file after upload is aborted.

Solution:  Change RBBSSUB5.BAS as follows:

20735 CALL KillWork (ZFileName$)
      IF ZErrCode <>0 THEN _
         ZWasEL = 20736 : _
         GOTO 21900
      ZAnsIndex = ZLastIndex + 1                                     ' KG031501
      ZLastIndex = 0
      RETURN

------------------------[ KK030901 ]-------------------------

Problem:  Possible to get untrapped overflow error in intermediate
variables in an integer calculation.

Solution:  Change RBBS-PC.BAS as follows:

135 IF ZCurDef$ = ZOrigCnfg$ THEN _
       ZActiveMessageFile$ = ZMainMsgFile$ : _
       ZActiveUserFile$ = ZMainUserFile$
    GOSUB 4910
    IF ZConfMode THEN _
       GOTO 150
    ZLocalUserMode = (RIGHT$(ZComPort$,1) < "1")
    GET 1,ZNodeRecIndex
    ZWasY$ = MID$(ZMsgRec$,77,2)
    CALL UnPackDate (ZWasY$,WasX,WasL,WasI,ZOldDate$)
    ZOldDate$ = LEFT$(ZOldDate$,6) + MID$(STR$(WasX),2)
    ZHourMinToDropToDos = - (ZHourMinToDropToDos > 0) * ZHourMinToDropToDos
    Hour = INT(ZHourMinToDropToDos / 100)
    WasMN = ZHourMinToDropToDos - Hour * 100
    ZTimeToDropToDos! = Hour * 3600! + WasMN * 60!                   ' KK030901

175 GOSUB 5344
    CALL CountLines (MaxEntries)
    REDIM ZCategoryName$(MaxEntries),ZCategoryCode$(MaxEntries),_
          ZCategoryDesc$(MaxEntries) : _
    CALL InitFMS (ZCategoryName$(),ZCategoryCode$(), _
                  ZCategoryDesc$(),ZNumCategories)
    ZMaxMsgLines = ZMaxMsgLinesDef
    ZLocalUser = (ZLocalUser OR ZLocalUserMode)
    IF (NOT ZLocalUser) AND (NOT SubBoard) THEN _
       CALL OpenCom (ZModemInitBaud$,",N,8,1")
    IF NOT SubBoard THEN _
       CALL SetEcho (ZDefaultEchoer$)
    ZNodeWorkFile$ = ZNodeWorkDrvPath$ + _
                      "NODE" + _
                      ZNodeFileID$ + _
                      "WRK"
    ZSecsPerSession! = ZMinsPerSession * 60!                         ' KK030901
    IF NOT ZLocalUserMode THEN _
       IF NOT ZExitToDoors THEN _
          GOTO 180 _
       ELSE IF NOT ZLocalUser THEN _
               GOTO 180
    ZLocalUser = ZTrue
    ZBPS = -6
    ZBaudTest! = 9600
    ZEightBit = ZTrue
    ZSnoop = ZTrue
    IF ZExitToDoors THEN _
       CALL AMorPM : _
       CALL ReadProf : _
       GOTO 410
    GOSUB 178
    GOTO 345

459 GOSUB 9500
    ZLastDateTimeOnSave$ = ZLastDateTimeOn$
    IF ZExitToDoors THEN _
       TempHoldTime! = VAL(LEFT$(ZTime$,2))*3600! + _                ' KK030901
                         VAL(MID$(ZTime$,4,2))*60! : _               ' KK030901
       CALL CheckTime(TempHoldTime!, TempTime!, 2) : _
       MinsInDoors = TempTime! / 60 : _
       CALL TimeRemain (MinsRemaining)
    ZUserFileIndex = LOC(5)
    GOSUB 5135
'
' ***  COMPUTE THE NUMBER OF DAYS REMAINING UNTIL REGISTRATION EXPIRES **
'
    IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
       CALL CompDate (UserRegYY,UserRegMM,UserRegDD,UserComputeDate!) : _
       ZRegDaysRemaining = UserComputeDate! + _
                            ZDaysInRegPeriod - _
                            TodayComputeDate! : _
       CALL ExpireDate (UserComputeDate!,ZDaysInRegPeriod,ZExpirationDate$) _
    ELSE ZDaysInRegPeriod = 0
    IF NOT ZPrivateDoor THEN _
       IF ZRegDaysRemaining < 0 AND ZDaysInRegPeriod > 0 THEN _
       IF ZUserSecLevel > ZExpiredSec THEN _
          CALL QuickTPut1 (ZWasLG$(9) + _
                      " - security reset to " + _
                      STR$(ZExpiredSec)) : _
          CALL BufFile(ZHelpPath$+"RGXPIRD"+ZHelpExtension$,WasX) : _
          ZLogonErrorIndex = 9 : _
          ZUserSecLevel = ZExpiredSec : _
          LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
          GOSUB 5135

Change RBBSSUB3.BAS as follows:

(line 44000)

      SUB ReadProf STATIC
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
      MID$(ZMsgRec$,40,2) = "00"
      ZEightBit = VAL(MID$(ZMsgRec$,42,2))
      ZBPS = VAL(MID$(ZMsgRec$,44,2))
      CALL CommInfo
      ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
      ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
      ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
      ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
      ZWasGR = VAL(MID$(ZMsgRec$,53,2))
      HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
      MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
      SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
      ZTimeLoggedOn$ = HourLoggedOn$ + _
                        ":" + _
                        MinLoggedOn$ + _
                        ":" + _
                        SecLoggedOn$
      ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
      ZWasFT$ = MID$(ZMsgRec$,75,1)
      ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2))                  ' KKG030901
      ZDooredTo$ = MID$(ZMsgRec$,79,8)
      CALL Trim (ZDooredTo$)
          .
          .
          .

44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _               ' KK030901
                        VAL(MinLoggedOn$) * 60! + _                  ' KK030901
                        VAL(SecLoggedOn$)
      HourLoggedOn$ = ""
      MinLoggedOn$ = ""
      SecLoggedOn$ = ""
      IF ZMinsPerSession < 1 THEN _
         ZMinsPerSession = 3
      IF NOT ZEightBit THEN _
         OUT ZLineCntlReg,&H1A
      IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
         ZFirstName$ = ZSysopPswd1$ : _
         ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
      ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
           ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
           ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
           ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
           ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
      ZWasZ$ = ZFirstName$
      CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL ReadDir (2,1)
      ZLimitMinsPerSession = VAL (ZOutTxt$)
      CLOSE 2
      END SUB

(line 58140)

      SUB LoadNew (Ara(2)) STATIC
      IF ZFMSDirectory$ = "" THEN _
         EXIT SUB
      ZPrevBase$ = ""
      IF PrevLoadNew$ = ZFMSDirectory$ THEN _
         Ara(1,1) = 0 : _
         EXIT SUB
      PrevLoadNew$ = ZFMSDirectory$
      CALL OpenFMS (LastRec)
      FIELD 2, 23 AS PreDate$, _
                2 AS WasMM$, _
                1 AS Fill1$, _
                2 AS WasDD$, _
                1 AS Fill2$, _
                2 AS Year$, _
                (2 + ZMaxDescLen) AS Fill3$, _
                3 AS Category$, _
                2 AS Fill4$
      MaxRecs = UBOUND(Ara,1)
      IF MaxRecs < 1 THEN _
         MaxRecs = 1 _
      ELSE IF MaxRecs > 23 THEN _
              MaxRecs = 23
      WasL = 0
      WasK = LastRec
      WHILE WasK > 0 AND WasL < MaxRecs
         GET #2,WasK
         IF INSTR("\= ",LEFT$(PreDate$,1)) > 0 THEN _
            GOTO 58142
         IF (ZCanDnldFromUp OR Category$ <> ZDefaultCatCode$) THEN _
            WasL = WasL + 1 : _
            Ara(WasL,1) = 372! * (VAL(Year$) - 80!) + 31! * VAL(WasMM$) + VAL(WasDD$) ' KK030901
         IF NOT ZCanDnldFromUp THEN _
            WasX = ZMinSecToView _
         ELSE IF Category$ = "***" THEN _
                 WasX = ZSysopSecLevel _
              ELSE IF Category$ = ZDefaultCatCode$ THEN _
                      WasX = ZMinSecToView _
                   ELSE WasX = ZOptSec(19)
         Ara(WasL,2) = WasX

------------------------[ KG030801 ]-------------------------

Problem:  When screen pauses in midst of personal mail scan, will no
longer show rest of mail scan on the screen.

Solution:  Change RBBS-PC.BAS as follows:

1900 GOSUB 5344
     IF ZPrivateDoor THEN _
        ActionFlag = ZTrue
     ZPrevBase$ = ZActiveMessageFile$
     ShowActive = ZFalse
     IF NOT ActionFlag THEN _
        CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
        ShowActive = ZTrue _
     ELSE CALL QuickTPut ("Loading messages",0)
     WasA1$ = ""                                                     ' KG030801
     MsgCt = 0                                                       ' KG030203
     MsgsFromUser = ZFalse
     ActiveMessages = 0
     MailReported = ActionFlag
     FirstOld = ZTrue
     GOSUB 23000
     MsgRec = FirstMsgRecord
     MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
     IF MaxMsgs > WasMM THEN _
        MaxMsgs = WasMM
     REDIM ZMsgPtr(MaxMsgs,2)
     NumDots = 0

1940 IF MsgsFromUser < ZMsgDim THEN _
        MsgsFromUser = MsgsFromUser + 1 : _
        WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5)                          ' KG030801

1960 WasK = 1
     FOR MsgCt = 1 TO MsgsFromUser                                   ' KG030203
        ZOutTxt$ = MID$(WasA1$,WasK,5)                               ' KG030801
        WasK = WasK + 5
        GOSUB 12978
        IF MsgCt MOD 15 = 0 THEN _                                   ' KG030203
           CALL SkipLine (1) : _                                     ' KG030203
           CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                  ' KG030203
     NEXT
     WasA1$ = ""                                                     ' KG030801
     CALL SkipLine (1)
     CALL QuickTPut1 ("Please K)ill old/unneeded msgs")

------------------------[ KG030601 ]-------------------------

Problem:  Sometimes RBBS will get in a state where it constantly
recycles.   Callers file says "Connect Timeout".

Solution:  Caused usually by storing a telephone number in place of
where from, or by failing to give password right in local mode, then
bringing up remotely.   Change RBBS-PC.BAS as follows:

150 IF SubBoard THEN _
       GOSUB 12987 : _
       GOSUB 5135 : _
       GOTO 170
    ZSysopAvail = VAL(MID$(ZMsgRec$,32,2))
    ZSysopAnnoy = VAL(MID$(ZMsgRec$,34,2))
    ZSysopNext = VAL(MID$(ZMsgRec$,36,2))
    MID$(ZMsgRec$,36,2) = STR$(ZFalse)
    ZPrinter = VAL(MID$(ZMsgRec$,38,2))
    IF ZTurnPrinterOff THEN _
       ZPrinter = ZFalse
    ZExitToDoors = (MID$(ZMsgRec$,40,2) = "-1" AND ZNetBaud$ = "")
    ZEightBit = VAL(MID$(ZMsgRec$,42,2))
    ZBPS = VAL(MID$(ZMsgRec$,44,2))
    ZSnoop = VAL(MID$(ZMsgRec$,58,2))
    MID$(ZMsgRec$,57,1) = "I"
    ZPrivateDoor = (MID$(ZMsgRec$,72,2) = "-1")
    IF ZPrivateDoor THEN _
       ZHasPrivDoor = ZTrue
    MID$(ZMsgRec$,72,2) = STR$(ZFalse)
    ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$) ' KG030601
    IF ZExitToDoors OR ZPrivateDoor THEN _
       ZHasDoored = ZTrue : _
       TurboLogon = ZTrue
    PUT 1,ZNodeRecIndex
    GOSUB 12985
'
' *****  INITIALIZE VOICE SYNTHESIZER   ****
'
    CALL Talk (Init,ZOutTxt$)
'
' *****  TEST FOR MULTI LINK PRESENT IF NOT COMPAQ COMPUTER   ****
'

13555 ZActiveMessageFile$ = ZOrigMsgFile$
      GOSUB 12986
      GOSUB 5344
      GET 1,ZNodeRecIndex
      MID$(ZMsgRec$,57,1) = "I"
      MID$(ZMsgRec$,40,2) = " 0"
      MID$(ZMsgRec$,72,2) = " 0"
      IF MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$ THEN _ ' KG030602
         MID$(ZMsgRec$,101,2) = " 0"                                 ' KG030602
      PUT 1,ZNodeRecIndex
      GOSUB 12985
      CLOSE 1,2,4,5
      IF NOT ZFossil THEN _
         CLOSE 3
      IF ZRecycleToDos THEN _
         GOTO 203
      RUN 100

Change RBBSSUB3.BAS as follows:

43070 ZActiveMessageFile$ = ZOrigMsgFile$
      ZSubParm = 3
      CALL FileLock
      CALL OpenMsg
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      IF ZGlobalSysop THEN _
         MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
      MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
      MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
      MID$(ZMsgRec$,44,2) = STR$(ZBPS)
      MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
      MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
      MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
      MID$(ZMsgRec$,55,2) = STR$(ZSysop)
      MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
      MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
      MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
      MID$(ZMsgRec$,75,1) = ZWasFT$
      MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
      MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
      MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
      CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
      MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
      IF ZLocalUser THEN _
         ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _              ' KG030601
      ELSE ZWasZ$ = " 0"                                             ' KG030601
      MID$(ZMsgRec$,101,2) = ZWasZ$                                  ' KG030601
      MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)                    ' KG030601
      ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
      MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
      MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
      MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
      MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
      MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
      MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
      MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
      MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' ***   Save additional parameters for door restoral
      CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL PrintWorkA (STR$(ZLimitMinsPerSession))
      CLOSE 2

(line 44000)

      SUB ReadProf STATIC
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
      MID$(ZMsgRec$,40,2) = "00"
      ZEightBit = VAL(MID$(ZMsgRec$,42,2))
      ZBPS = VAL(MID$(ZMsgRec$,44,2))
      CALL CommInfo
      ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
      ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
      ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
      ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
      ZWasGR = VAL(MID$(ZMsgRec$,53,2))
      HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
      MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
      SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
      ZTimeLoggedOn$ = HourLoggedOn$ + _
                        ":" + _
                        MinLoggedOn$ + _
                        ":" + _
                        SecLoggedOn$
      ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
      ZWasFT$ = MID$(ZMsgRec$,75,1)
      ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
      ZDooredTo$ = MID$(ZMsgRec$,79,8)
      CALL Trim (ZDooredTo$)
      IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
         CALL OpenWork (2,ZDoorsDef$) : _
         IF ZErrCode = 0 THEN _
            CALL ReadParms (ZOutTxt$(),8,1) : _
            WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
               CALL ReadParms (ZOutTxt$(),8,1) : _
            WEND : _
            IF ZOutTxt$(1) = ZDooredTo$ THEN _
               ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
               CALL BufFile (ZOutTxt$(7),WasX)
      ZErrCode = 0
      ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
      ZCurPUI$ = MID$(ZMsgRec$,93,8)
      CALL Remove (ZCurPUI$," ")
      IF ZCurPUI$ <> "" THEN _
         CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
         ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
      ZCustomPUI = (ZCurPUI$ <> "")
      ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$) ' KG030601
      ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
      ZHomeConf$ = MID$(ZMsgRec$,105,8)
      ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
      CALL Trim (ZHomeConf$)
      IF ZRequiredRings > 0 AND _
         INSTR(ZModemInitCmd$,"S0=255") THEN _
         COLOR 7,0,0 _
      ELSE COLOR ZFG,ZBG,ZBorder
      IF ZLocalUserMode THEN _
         GOTO 44003
      CALL SetBaud

------------------------[ KG030301 ]-------------------------

Problem:  prompt for file displayed on security violation confusing
people because it wants only the file prefix and refuses to accept
extension or drive/path without making that clear.

Solution:  Change CONFIG.BAS as follows:

17280 CALL ASKRO("Name of file shown for security breaches (prefix ONLY)",24,HJ$) ' KG030301
      IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
         GOTO 17280
      IF LEN(HJ$) < 1 THEN _
         SECVIO.HLP$ = NONE.PICKED$ : _
         RETURN
      CALL ALLCAPS (HJ$)
      SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
      RETURN

------------------------[ KG030203 ]-------------------------

Problem:  If caller happened to have many msgs, display of them in
msg scan may fail to pause when screen is full.   Also, # of messages
listed on a line was inconsistent between new and old messages.

Solution:  Change RBBS-PC.BAS as follows:

1900 GOSUB 5344
     IF ZPrivateDoor THEN _
        ActionFlag = ZTrue
     ZPrevBase$ = ZActiveMessageFile$
     ShowActive = ZFalse
     IF NOT ActionFlag THEN _
        CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
        ShowActive = ZTrue _
     ELSE CALL QuickTPut ("Loading messages",0)
     ZUserIn$ = ""
     MsgCt = 0                                                       ' KG030203
     MsgsFromUser = ZFalse
     ActiveMessages = 0
     MailReported = ActionFlag
     FirstOld = ZTrue
     GOSUB 23000
     MsgRec = FirstMsgRecord
     MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
     IF MaxMsgs > WasMM THEN _
        MaxMsgs = WasMM
     REDIM ZMsgPtr(MaxMsgs,2)
     NumDots = 0

1925 ZWasA = VAL(MID$(ZMsgRec$,2,4))
     IF LogonMailNew THEN _
        IF ZWasA <= ZLastMsgRead THEN _
           GOTO 1935
     IF NOT ShowActive THEN _
        GOTO 1930
     MailReported = ZTrue
     FirstNew = (ZWasA > ZLastMsgRead)
     IF FirstNew THEN _
        MsgCt = 0 : _                                                ' KG030203
        CALL SkipLine (1) : _
        CALL QuickTPut1 ("NEW Mail for YOU (* = Private)") _
     ELSE IF FirstOld THEN _
             CALL SkipLine (1) : _
             CALL QuickTPut1 ("OLD Mail for YOU (* = Private)") : _
             FirstOld = ZFalse
     ShowActive = NOT FirstNew

1930 CALL QuickTPut (LEFT$(ZMsgRec$,5),0)
     MsgCt = MsgCt + 1                                               ' KG030203
     IF MsgCt MOD 15 = 0 THEN _                                      ' KG030203
        CALL SkipLine (1) : _                                        ' KG030203
        CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                     ' KG030203
1960 WasK = 1
     FOR MsgCt = 1 TO MsgsFromUser                                   ' KG030203
        ZOutTxt$ = MID$(ZUserIn$,WasK,5)
        WasK = WasK + 5
        GOSUB 12978
        IF MsgCt MOD 15 = 0 THEN _                                   ' KG030203
           CALL SkipLine (1) : _                                     ' KG030203
           CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)                  ' KG030203
     NEXT
     ZUserIn$ = ""
     CALL SkipLine (1)
     CALL QuickTPut1 ("Please K)ill old/unneeded msgs")

------------------------[ KG030202 ]-------------------------

Problem:  In personal download, when have color graphics on,
color of description spills over into prompt to download what.

Solution:  Change RBBSSUB4.BAS as follows:

59303 CALL QuickTPut (ZEmphasizeOff$,0)                              ' KG030202
      ZOutTxt$ = "Download what: L)ist, * = new, or file(s)" + _
           ZPressEnterExpert$
      ZMacroMin = 99
      ZStackC = ZTrue
      CALL PopCmdStack
      IF ZSubParm = -1 OR ZWasQ = 0 THEN _
         ZLastIndex = 0 : _
         EXIT SUB

------------------------[ KG030201 ]-------------------------

Problem:  When remote called does Xoff (Control-S), display of
a message does not pause until after display of full screen or
end of message.

Solution:  Change RBBS-PC.BAS as follows:

9085    IF LEFT$(ZOutTxt$,1) = ZStartOfHeader$ OR _
           LEFT$(ZOutTxt$,LEN(ZScreenOutMsg$)) = ZScreenOutMsg$ THEN _
           GOTO 9050
        ZOutTxt$(ZLinesInMsg) = ZOutTxt$
        IF Bracketed THEN _
           Bracketed = ZFalse : _
           HiLitedLine = ZLinesInMsg
        ZLinesInMsg = ZLinesInMsg + 1
        IF ZLinesInMsg > MsgDimXtra THEN _
           ZLinesInMsg = ZLinesInMsg - 1 : _
           CALL SkipLine (1) : _
           CALL QuickTPut1 ("Message too long.  Truncated to " + STR$(MsgDimXtra) + " lines!") : _
           ZOutTxt$ = "" : _
           RETURN
        IF NOT DontPrint THEN _                                      ' KG030201
           GOSUB 12979 : _                                           ' KG030201
           IF ZRet THEN _
              ZOutTxt$ = "" : _
              RETURN _                                               ' KG030201
           ELSE CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) : _   ' KG030201
                IF ZNo THEN _                                        ' KG030201
                   DontPrint = ZTrue                                 ' KG030201
        GOTO 9050

------------------------[ KG030101 ]-------------------------

Problem:  When having mail waiting in current confernce, and
read all the new mail, and then do a V)iew conference, the
mail waiting flag is still shown as on in the current conference.

Solution:  Change RBBSSUB4.BAS as follows:

59852 IF EOF(2) OR NOT ZOK THEN _
         GOTO 59854
         CALL ReadAny
         ZActiveUserFile$ = ZOutTxt$
         CALL ReadAny
         IF ZErrCode > 0 THEN _
            GOTO 59854
         ZActiveMessageFile$ = ZOutTxt$
         CALL FindFile (ZActiveUserFile$,ZOK)
         IF NOT ZOK THEN _
            GOTO 59854
         CALL OpenUser (HighestUserRecord)
         FIELD 5, 128 AS ZUserRecord$
         CALL FindFile (ZActiveMessageFile$,ZOK)
         IF NOT ZOK THEN _
            GOTO 59854
         CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
                        0,0,HighestUserRecord,_
                        Found,HoldUserFileIndex,ZWasSL)
         IF NOT Found THEN _
            GOTO 59852
         CALL OpenMsg
         FIELD 1, 128 AS ZMsgRec$
         GET 1,1
         AnyMail = ZTrue
         WasX = CVI(MID$(ZUserRecord$,57,2))
         WasX = (WasX AND 512) > 0
         CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
         InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
         IF InCur THEN _
            WasX = ZMailWaiting : _                                  ' KG030101
            ZWasA = ZLastMsgRead _
         ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
               .
               .
               .

------------------------[ KG022702 ]-------------------------

Problem:  When using LIT version with message import off
(MIMPORT OFF), get untrapped errors when message margin of
user set lower than that used by the message.

Solution:  Use new MIMPORT.LIT.

------------------------[ KG022701 ]-------------------------

Problem:  Command stacking not always working right in msg
read.  E.g. "j xxx r test" will look for messages with text "r".

Solution:  Change RBBS-PC.BAS as follows:

4330 QuickScanMsgs = ZFalse
     ReadMsgs = ZTrue
     HiLiteRec = -1
     ScanMsgs = ZFalse
     MsgStart = 6
     MsgEnd = 100
     IF ZLocalUserMode OR NOT ZLocalUser THEN _
        IF ReadMsgIn$ <> ZActiveMessageFile$ THEN _
           ReadMsgIn$ = ZActiveMessageFile$ : _
           CALL UpdtCalr ("Read Messages in " + ReadMsgIn$,1)
     GOSUB 1300
     GOTO 4350                                                       ' KG022701

4360 ZWasLG$(11) = ZWasZ$
     NumMsgsSelected = ZLastIndex
     MsgIndex = ZAnsIndex                                            ' KG022701
     ZLastIndex = 0
     ToRequested = ZFalse
     FromRequested = ZFalse
     IF ZPageLength < 1 THEN _
        ZNonStop = ZTrue
4370 MsgIndex = MsgIndex  + 1                                        ' KG022701
4371 IF MsgIndex <= NumMsgsSelected THEN _                           ' KG022701
        IF LEN(ZUserIn$(ZAnsIndex)) = 1 AND _
           INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _                 ' KG022701
           GOTO 4370 _
        ELSE _
        CALL CheckInt (ZUserIn$(MsgIndex)) : _                       ' KG022701
        IF ZErrCode <> 0 THEN _
           ZWasEL = 4371 : _
           GOTO 13000 _
        ELSE CurMsg = ZTestedIntValue : _
             ZAnsIndex = MsgIndex : _                                ' KG022701
             GOTO 4415

4400 GOSUB 12932                                                     ' KG022701
     IF ZWasQ = 0 THEN _
        RETURN
4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _                          ' KG022701
        IF INSTR("Qq",ZUserIn$) THEN _
           RETURN _
        ELSE IF INSTR("Hh",LEFT$(ZUserIn$(ZAnsIndex),1)) THEN _      ' KG022701
                ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
                GOSUB 1790 : _
                GOTO 4390
     MsgIndex = 0                                                    ' KG022701
     NumMsgsSelected = ZWasQ
     GOTO 4370

4416 IF INSTR("Mm",ZUserIn$(ZAnsIndex)) THEN _
        AddressedToUser = ZTrue : _
        GOTO 4370
     ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
     IF ZWasA > 0 THEN _
        ToRequested = (ZWasA > 2) : _
        FromRequested = (ZWasA < 3) : _
        GOTO 4370
     IF CurMsg = 0 THEN _
        IF SearchHeader$ <> "" THEN _
           GOTO 4370 _
        ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _                 ' KG022701
             CALL AllCaps (SearchString$) : _
             CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
             SearchHeader$ = SearchString$ : _
             SubInHeader$ = SearchHeader$ : _
             GOTO 4370
     CALL SkipLine (1)

------------------------[ RH022501 ]-------------------------

Problem:  in autodownload, the name displayed to the user is wrong
when default extension is added by rbbs.

Change RBBS-PC.BAS as follows:

20247 ZWasDF = 0
      CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
      IF ZAutoDownInProgress THEN _
         ZUserIn$(ZAnsIndex) = WasX$ + "." + Extension$ : _          ' RH022501
         ZOutTxt$ = "Transferring -- " + _
              ZUserIn$(ZAnsIndex) : _                                ' RH022501
         GOSUB 21640 : _
         IF ZFileSysParm > 1 THEN _
            RETURN
      IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
         MID$(Extension$,2,1) = "Q" OR _
         (ZRequireNonASCII AND Extension$ = "BAS") THEN _
            ZWasDF = ZTrue

------------------------[ KG022301 ]-------------------------

Problem:  no way to trigger macro processing for on-line files.
Either not found or macro.  Now can have both.

Solution:  Add the following variable to RBBS-VAR.BAS:  ZFileLocations$

Change RBBSSUB4.BAS as follows:

(line 58700)

      SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
      ZOK = ZFalse
      ZDotFlag = ZFalse
      IF MarkingTime THEN _
         CALL QuickTPut ("Searching for "+FilName$,0)
      IF ZMenuIndex = 6 THEN _
         GOTO 58705
      NumSearch = 1
      WasX = 0
      WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
         SDirAra$(NumSearch) <> ""
         IF MarkingTime THEN _
            CALL MarkTime (WasX)
         WasX$ = SDirAra$(NumSearch) + _
              FilName$
         CALL FindFile (WasX$,ZOK)
         NumSearch = NumSearch + 1
      WEND
      IF ZOK OR NOT ZFastFileSearch THEN _                           ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18)                 ' KG022301
      IF ZErrCode <> 0 THEN _                                        ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL TrimTrail (FilName$,".")
      CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
      ZOK = (RecFoundAt > 0)
      IF NOT ZOK THEN _                                              ' KG022301
         GOTO 58710                                                  ' KG022301
      ZOK = ZFalse
      CALL CheckInt (MID$(RecFound$,13,4))
      IF ZTestedIntValue < 1 THEN _                                  ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
      IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _           ' KG022301
         GOTO 58710                                                  ' KG022301
      FIELD 2, 66 AS LocatorRec$
      GET 2, ZTestedIntValue
      WasX$ = LEFT$(LocatorRec$,63)
      CALL Trim (WasX$)
      IF LEFT$(WasX$,2) = "M!" THEN _
         ZOK = ZFalse : _                                            ' KG022301
         ZGSRAra$(1) = PassToMacro$ : _                              ' KG022204
         WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _                      ' KG022204
         CALL Trim (WasX$) : _                                       ' KG022204
         ZFileLocation$ = "" : _                                     ' KG022301
         CALL MacroExe (WasX$) : _                                   ' KG022204
         IF ZFileLocation$ = "" THEN _                               ' KG022301
            ZOK = ZFalse : _                                         ' KG022204
            GOTO 58711 _                                             ' KG022301
         ELSE WasX$ = ZFileLocation$                                 ' KG022301
      WasX$ = WasX$ + FilName$                                       ' KG022301
      CALL FindFile (WasX$,ZOK)                                      ' KG022301
      GOTO 58710                                                     ' KG022301

Change RBBSSUB5.BAS as follows:

63336 GOSUB 63395
      IF NOT ZMacroActive THEN _
         ZMacroEcho = ZTrue : _
         EXIT SUB
      IF LEN(ZOutTxt$) < 3 THEN _
         GOTO 63398
      WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3)
      IF CompareVar > 0 THEN _
         IF NOT CaseExecute THEN _
            IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
               GOTO 63370 _
            ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
                    CompareVar = 0 : _
                    GOTO 63336 _
                  ELSE GOTO 63336
      IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
         GOTO 63398
      CALL CheckInt (MID$(ZOutTxt$,2))
      IF ZErrCode > 0 THEN _
         GOTO 63398
      IF ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
         ZOutTxt$ = WasX$ : _  ' Macro command ask
         ZForceKeyboard = ZTrue : _
         ZMacroSave = ZTestedIntValue : _
         ZLinesPrinted = 1 : _
         ZNonStop = (ZPageLength < 1) : _
         EXIT SUB
      ON (1+INSTR("*0*1*B*FWT>>STON==M!M@EYEN/*TK<<:=LVNVCVLO",MID$(ZOutTxt$,2,2)))\2 GOTO _ ' KG022301
         63345, _  ' Display with no Carriage Return
         63347, _  ' Display with Carriage Return
         63340, _  ' Display Block
         63348, _  ' Display File
         63343, _  ' Wait # of seconds
         63350, _  ' Append to file
         63355, _  ' Stack
         63360, _  ' Case
         63370, _  ' Case Comparison
         63375, _  ' Macro execute
         63380, _  ' Macro Abort
         63383, _  ' Macro Echo on
         63385, _  ' Macro Echo off
         63336, _  ' Macro Comment
         63387, _  ' Turbo Key allowed
         63390, _  ' Form read
         63362, _  ' Assign value to work var
         63363, _  ' LV list verify
         63364, _  ' NV number verify
         63364, _  ' CV character verify                             ' KG022301
         63367     ' LO assign file location                         ' KG022301
      GOTO 63398

63367 CALL TRIM (WasX$)                                              ' KG022301
      ZFileLocation$ = WasX$                                         ' KG022301
      GOTO 63336                                                     ' KG022301

------------------------[ KG022205 ]-------------------------

Problem:  In arc view, if file invokes macro processing, the file
name was no longer correct when came back and reported file not
found.

20143 ZWasZ$ = ZUserIn$(ZAnsIndex)
      WasZ$ = ZWasZ$                                                 ' KG022205
      CALL AllCaps (ZWasZ$)
      CALL BreakFileName (ZWasZ$,Drive$,Prefix$,Ext$,ZFalse)
      IF Ext$ = "" THEN _
         Ext$ = ZDefaultExtension$ : _
         ZWasZ$ = ZWasZ$ + "." + ZDefaultExtension$
      ZFileNameHold$ = ZWasZ$
      ZFileName$ = ZWasZ$
      CALL BadFile (Prefix$,BadFileNameIndex)
      ON BadFileNameIndex GOTO 20144,20146,20147

20146 ZWasZ$ = WasZ$ + _                                             ' KG022205
           " not found!"
      CALL UpdtCalr (ZWasZ$,2)
      ZOutTxt$ = ZWasZ$ + _
           " Type correct filename" + ZPressEnterExpert$
      ZSubParm = 1
      CALL TGet
      IF ZSubParm = -1 OR ZWasQ = 0 THEN _
         RETURN
      ZUserIn$(ZAnsIndex) = ZUserIn$(1)
      GOTO 20143

------------------------[ KG022204 ]-------------------------

Problem:  SysOps off-line files might want to process differently
when get an upload, view, or download rather than execute macro
only on download.

Solution:  pass D, V, or U to macro in first work variable so
can alter processing.

Change RBBSSUB2.BAS as follows:

20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,"V") ' KG022204
      IF ZOK THEN _
         GOTO 20148

Change RBBSSUB4.BAS as follows:

(line 58700)

      SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
      ZOK = ZFalse
      ZDotFlag = ZFalse
      IF MarkingTime THEN _
         CALL QuickTPut ("Searching for "+FilName$,0)
      IF ZMenuIndex = 6 THEN _
         GOTO 58705
      NumSearch = 1
      WasX = 0
      WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
         SDirAra$(NumSearch) <> ""
         IF MarkingTime THEN _
            CALL MarkTime (WasX)
         WasX$ = SDirAra$(NumSearch) + _
              FilName$
         CALL FindFile (WasX$,ZOK)
         NumSearch = NumSearch + 1
      WEND
      IF ZOK OR NOT ZFastFileSearch THEN _                           ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18)                 ' KG022301
      IF ZErrCode <> 0 THEN _                                        ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL TrimTrail (FilName$,".")
      CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
      ZOK = (RecFoundAt > 0)
      IF NOT ZOK THEN _                                              ' KG022301
         GOTO 58710                                                  ' KG022301
      ZOK = ZFalse
      CALL CheckInt (MID$(RecFound$,13,4))
      IF ZTestedIntValue < 1 THEN _                                  ' KG022301
         GOTO 58710                                                  ' KG022301
      CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
      IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _           ' KG022301
         GOTO 58710                                                  ' KG022301
      FIELD 2, 66 AS LocatorRec$
      GET 2, ZTestedIntValue
      WasX$ = LEFT$(LocatorRec$,63)
      CALL Trim (WasX$)
      IF LEFT$(WasX$,2) = "M!" THEN _
         ZOK = ZFalse : _                                            ' KG022301
         ZGSRAra$(1) = PassToMacro$ : _                              ' KG022204
         WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _                      ' KG022204
         CALL Trim (WasX$) : _                                       ' KG022204
         ZFileLocation$ = "" : _                                     ' KG022301
         CALL MacroExe (WasX$) : _                                   ' KG022204
         IF ZFileLocation$ = "" THEN _                               ' KG022301
            ZOK = ZFalse : _                                         ' KG022204
            GOTO 58711 _                                             ' KG022301
         ELSE WasX$ = ZFileLocation$                                 ' KG022301
      WasX$ = WasX$ + FilName$                                       ' KG022301
      CALL FindFile (WasX$,ZOK)                                      ' KG022301
      GOTO 58710                                                     ' KG022301

59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
      CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
      IF ZOK THEN _
         ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
      ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
                      ((ZUserSecLevel < ZMinSecToView) OR _
                       NOT ZCanDnldFromUp),ZTrue,"D") : _            ' KG022204
           GOSUB 59338
      RETURN

Change RBBSSUB5.BAS as follows:

20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
                      ((ZUserSecLevel < ZMinSecToView) OR _
                       NOT ZCanDnldFromUp),MarkingTime,"D")          ' KG022204

20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,"U")  ' KG022204

------------------------[ KG022203 ]-------------------------

Problem:  When locally viewing the distributed color graphics
door menu (MENU05C), the colors will bleed over to the right
side of the boundary of the menu.   The display looks fine
remotely.

Solution:  Replace MENU05C with the new one distributed in
the latest merge file.

------------------------[ KG022202 ]-------------------------

Problem:  When installing RBBS-PC for the first time and use
the distributed def file RBBS-PC.DEF, the up and downloads do
not work properly unless RBBS-PC is installed in a subdirectory
called RBBS.

Solution:  In CONFIG, change the subdirectory for uploads from
"C:\RBBS\FILES" to "C:FILES", and change the two subdirectories
available for downloading from "C:\RBBS\FILES" to "C:FILES" and
from "C:\RBBS\BULLETINS" to "C:BULLETINS".
   These are changed in parameter 208.

------------------------[ KG022201 ]-------------------------

Problem:  When doing a directory listing and V)iew archieve,
J)ump is no longer an option after listing resumes.

Solution:  Change RBBSSUB3.BAS as follows:

58180 ZTurboKey = -ZTurboKeyUser
      ZStackC = ZTrue
      CALL AskMore (ExtraPrompt$, ZTrue, ZFalse,AbortIndex,ZFalse)
      IF ZSubParm = -1 THEN _
         GOTO 58183
      IF ZNo THEN _
         GOTO 58183
      CALL AllCaps (ZUserIn$(1))
      IF ZUserIn$(1) = "V" THEN _
         ZLastIndex = ZWasQ : _
         ZAnsIndex = 1 : _
         CALL GetArc : _
         ZJumpSupported = ZTrue : _                                  ' KG022201
         ZWasA = UpldIndex : _
         GOSUB 58185 : _
         UpldIndex = ZWasA : _
         GOTO 58180
      IF ZUserIn$(1) = "D" THEN _
         ZOutTxt$ = "Download what file(s)" : _
         ZStackC = ZTrue : _
         CALL PopCmdStack : _
         IF ZWasQ = 0 THEN _
            GOTO 58180
      IF ZJumpSearching THEN _
         PrevSearch$ = SearchFor$ : _
         SearchFor$ = ZJumpTo$ _
      ELSE SearchFor$ = SearchString$ : _
           IF LEN(ZUserIn$(1)) > 1 THEN _
           IF NOT ZYes AND CanDnld THEN _
              CALL SkipLine (1) : _
              DnldFlag = UpldIndex : _
              ZLastIndex = ZWasQ : _
              ZAnsIndex = 1 : _
              EXIT SUB
      IF ZNonStop THEN IF UpldIndex > 999 THEN _
         IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
            ZOutTxt$ = STR$(UpldIndex) + _
               " lines left to search.  Really go non-stop? (Y/[N])" : _
            ZNoAdvance = ZTrue : _
            ZTurboKey = -ZTurboKeyUser : _
            ZSubParm = 1 : _
            CALL TGet : _
            CALL WipeLine (79) : _
            ZNonStop = ZYes
      FMSCheckPoint = 0
      GOTO 58168

------------------------[ KG022103 ]-------------------------

Problem:  LIT merges not assigned security right for new
users.

Solution:  Replace the file INDEF.LIT by the new one in the lastest
fix file merges.

------------------------[ KG022102 ]-------------------------

Problem:  LIT merge generates a compile error when SURVEY 
metavariable is set to OFF.

Solution:  Replace the file SURVEY.LIT by the new one in
the latest fix file merges.

------------------------[ KG022101 ]-------------------------

Problem:  When door to external protocols, not correctly tracking
bytes downloaded.   Caused by misspelled variable names.

Change RBBSSUB3.BAS as follows:

43070 ZActiveMessageFile$ = ZOrigMsgFile$
      ZSubParm = 3
      CALL FileLock
      CALL OpenMsg
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      IF ZGlobalSysop THEN _
         MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
      MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
      MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
      MID$(ZMsgRec$,44,2) = STR$(ZBPS)
      MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
      MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
      MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
      MID$(ZMsgRec$,55,2) = STR$(ZSysop)
      MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
                                   CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
      MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
      MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
      MID$(ZMsgRec$,75,1) = ZWasFT$
      MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
      MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+"        ",8)
      MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
      CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
      MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
      MID$(ZMsgRec$,101,2) = STR$(ZLocalUser)
      MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)
      ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
      MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
      MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
      MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
      MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
      MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
      MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
      MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
      MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' ***   Save additional parameters for door restoral
      CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
      CALL PrintWorkA (STR$(ZLimitMinsPerSession))
      CLOSE 2

(line 44000)

      SUB ReadProf STATIC
      FIELD 1, 128 AS ZMsgRec$
      GET 1,ZNodeRecIndex
      ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
      MID$(ZMsgRec$,40,2) = "00"
      ZEightBit = VAL(MID$(ZMsgRec$,42,2))
      ZBPS = VAL(MID$(ZMsgRec$,44,2))
      CALL CommInfo
      ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
      ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
      ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))                      ' KG022101
      ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
      ZWasGR = VAL(MID$(ZMsgRec$,53,2))
      HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
      MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
      SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
      ZTimeLoggedOn$ = HourLoggedOn$ + _
                        ":" + _
                        MinLoggedOn$ + _
                        ":" + _
                        SecLoggedOn$
      ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
      ZWasFT$ = MID$(ZMsgRec$,75,1)
      ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
      ZDooredTo$ = MID$(ZMsgRec$,79,8)
      CALL Trim (ZDooredTo$)
      IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
         CALL OpenWork (2,ZDoorsDef$) : _
         IF ZErrCode = 0 THEN _
            CALL ReadParms (ZOutTxt$(),8,1) : _
            WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
               CALL ReadParms (ZOutTxt$(),8,1) : _
            WEND : _
            IF ZOutTxt$(1) = ZDooredTo$ THEN _
               ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
               CALL BufFile (ZOutTxt$(7),WasX)
      ZErrCode = 0
      ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
      ZCurPUI$ = MID$(ZMsgRec$,93,8)
      CALL Remove (ZCurPUI$," ")
      IF ZCurPUI$ <> "" THEN _
         CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
         ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
      ZCustomPUI = (ZCurPUI$ <> "")
      ZLocalUser = VAL(MID$(ZMsgRec$,101,2))
      ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
      ZHomeConf$ = MID$(ZMsgRec$,105,8)
      ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
      CALL Trim (ZHomeConf$)
      IF ZRequiredRings > 0 AND _
         INSTR(ZModemInitCmd$,"S0=255") THEN _
         COLOR 7,0,0 _
      ELSE COLOR ZFG,ZBG,ZBorder
      IF ZLocalUserMode THEN _
         GOTO 44003
      CALL SetBaud

------------------------[ KG022001 ]-------------------------

Problem:  When using autodownload and do not specify an extension,
and default is appended, file name transmitted has no extension.

Solution:  Change RBBSSUB5.BAS as follows:

20247 ZWasDF = 0
      CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
      IF ZAutoDownInProgress THEN _
         ZOutTxt$ = "Transferring -- " + _
              WasX$ + "." + Extension$ : _                           ' KG022001
         GOSUB 21640 : _
         IF ZFileSysParm > 1 THEN _
            RETURN
      IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
         MID$(Extension$,2,1) = "Q" OR _
         (ZRequireNonASCII AND Extension$ = "BAS") THEN _
            ZWasDF = ZTrue


------------------------[ KG021803 ]-------------------------

Problem:  In macro initialization of a variable, value includes the
variable number if a space separates the command and number.   Should
not matter whether say "{:=1" or "{:= 1", for example.

Solution:  Change RBBSSUB5.BAS as follows:

63362 CALL Trim (WasX$)                                              ' KG021803
      CALL CheckInt (WasX$)
      WasX = INSTR(WasX$," ")
      IF WasX > 0 AND ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
         ZGSRAra$(ZTestedIntValue) = RIGHT$(WasX$,LEN(WasX$)-WasX)   ' KG021803
      GOTO 63336

------------------------[ KG021802 ]-------------------------

Problem:  When implement macros in the Fast File System, the macros
are executed on more than download requests - including uploads and
file v)iew archive.

Change RBBSSUB2.BAS as follows:

20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,ZFalse) ' KG021802
      IF ZOK THEN _
         GOTO 20148

Change RBBSSUB4.BAS as follows:

(line 58700)

      SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,DoMacro) STATIC ' KG021802
      ZOK = ZFalse
      ZDotFlag = ZFalse
      IF MarkingTime THEN _
         CALL QuickTPut ("Searching for "+FilName$,0)
      IF ZMenuIndex = 6 THEN _
         GOTO 58705
      NumSearch = 1
      WasX = 0
      WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
         SDirAra$(NumSearch) <> ""
         IF MarkingTime THEN _
            CALL MarkTime (WasX)
         WasX$ = SDirAra$(NumSearch) + _
              FilName$
         CALL FindFile (WasX$,ZOK)
         NumSearch = NumSearch + 1
      WEND
      IF ZFastFileSearch AND NOT ZOK THEN _
         CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18) : _
         IF ZErrCode = 0 THEN _
            CALL TrimTrail (FilName$,".") : _
            CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$) : _
            ZOK = (RecFoundAt > 0) : _
            IF ZOK THEN _
               ZOK = ZFalse : _
               CALL CheckInt (MID$(RecFound$,13,4)) : _
               IF ZTestedIntValue > 0 THEN _
                  CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66) : _
                  IF ZErrCode = 0 AND ZTestedIntValue <= HighRec THEN _
                     FIELD 2, 66 AS LocatorRec$ : _
                     GET 2, ZTestedIntValue : _
                     WasX$ = LEFT$(LocatorRec$,63) : _
                     CALL Trim (WasX$) : _
                     IF LEFT$(WasX$,2) = "M!" THEN _
                        ZOK = ZFalse : _                             ' KG021802
                        ZDotFlag = ZTrue : _                         ' KG021802
                        IF DoMacro THEN _                            ' KG021802
                           WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _
                           CALL Trim (WasX$) : _
                           CALL MacroExe (WasX$) : _
                           ZOK = ZFalse : _                          ' KG021802
                           GOTO 58711 _                              ' KG021802
                        ELSE GOTO 58711 _                            ' KG021802
                     ELSE WasX$ = WasX$ + FilName$ : _
                          CALL FindFile (WasX$,ZOK)
      GOTO 58710

58711 CALL SkipLine (-MarkingTime)                                   ' KG021802
      END SUB

59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
      CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
      IF ZOK THEN _
         ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
      ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
                      ((ZUserSecLevel < ZMinSecToView) OR _
                       NOT ZCanDnldFromUp),ZTrue,ZFalse) : _         ' KG021802
           GOSUB 59338
      RETURN

Change RBBSSUB5.BAS as follows:

20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
                      ((ZUserSecLevel < ZMinSecToView) OR _
                       NOT ZCanDnldFromUp),MarkingTime,ZTrue)        ' KG021802

20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) ' KG021802
20450 IF Extension$ <> Check$ THEN _
         CALL RotorsDir (WasX$ + "." + Check$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) : _ ' KG021802
         IF ZOK THEN _
            GOTO 20452
      GOTO 20447

------------------------[ KG021801 ]-------------------------

Problem:  internal code documentation for SmartText omits notes
on what command invokes processing.

Change RBBSSUB4.BAS as follows:

58266 SmartHold$ = DATE$                         ' DT Date           ' KG021801
      RETURN
58267 CALL AMorPM
      SmartHold$ = ZTime$                        ' TM Time           ' KG021801
      RETURN

------------------------[ KG021502 ]-------------------------

Problem:  When restrict a macro to the main prompt, and have a macro
with same name as a conference (to join it), "j <conf>" works but
"fn;ln;pswd;!<conf>" does not.  The macro gets substituted for
"<conf>".

Solution:  Change RBBS-PC.BAS as follows:

1205 IF ZSubParm < 0 THEN _
        GOTO 202
     ZSubParm = 1
     ZStopInterrupts = ZFalse
     ZNonStop = (ZPageLength < 1)
     ZWasQ = 0
     IF ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN" THEN _
        TurboLogon = (NOT ConfMailJoin) : _
        ConfMailJoin = ZFalse : _
        ZFF = 8 : _
        ZUserIn$(2) = ZHomeConf$ : _
        ZHomeConf$ = "" : _
        ZWasQ = 1 : _
        ZAnsIndex = 1 : _
        ZLastIndex = 2 : _
        ZStoreParseAt = 1 : _
        ZLastCommand$ = "MJ" : _                                     ' KG021502
        GOTO 1240
     CALL SkipLine (1)

------------------------[ KG021502 ]-------------------------

Problem:  the prompt after a macro ends is repeated twice.

Solution:  Change RBBSSUB2.BAS as follows:

1628 CALL VerifyAns
     IF NOT ZOK THEN _
        CALL QuickTPut1 ("Invalid answer <" + ZUserIn$(1) + ">") : _
        GOTO 1500
     HoldA$ = ""
     ZForceKeyboard = ZFalse
     IF ZMacroSave > 0 THEN _
        ZGSRAra$(ZMacroSave) = ZUserIn$ : _
        ZMacroSave = 0 : _
        GOTO 1632
     IF (ZDistantTGet > 0) OR (ZMacroTemplate$ <> "") THEN _
        CALL WipeLine (38) : _
        IF NOT ZNo THEN _
           GOTO 1632 _
        ELSE ZWasQ = 0 : _
             ZMacroTemplate$ = "" : _
             ZDistantTGet = 0 : _
             ZNo = ZFalse : _
             GOTO 1633
     IF ZMacroActive THEN _
        ZLastIndex = ZWasQ : _
        FirstIndex = 1: _
        ZMacroActive = NOT EOF(6) : _                                ' KG021501
        EXIT SUB
     IF ZAnsIndex > 255 OR ((NOT InStack) AND INSTR(ZUserIn$,".") > 0) THEN _
        EXIT SUB
     IF MacroIndex THEN _
        MacroIndex = 1 _
     ELSE MacroIndex = ZAnsIndex
     CALL NoPath (ZUserIn$(MacroIndex),Found)
     IF Found THEN _
        EXIT SUB
     CALL CheckMacro (ZUserIn$(MacroIndex),Found)
     IF Found THEN _
        ZStoreParseAt = ZAnsIndex : _
        GOTO 1525
     EXIT SUB

------------------------[ RH021501 ]-------------------------

Problem:  autodownload just does not work.

Solution:  Change RBBSSUB3.BAS as follows:

20296 CALL FlushCom(ZWasY$)              ' CLEAR THE COMM BUFFER OF GARBAGE
      IF ZSubParm = -1 THEN _
         EXIT SUB
      CALL PutCom (ZEscape$+"OD")         ' SEND "ALERT" STRING
      IF ZSubParm = -1 THEN _
         EXIT SUB
      IF ZAbort = ZTrue THEN _
         GOTO 20306
      CALL LPrnt("Sending FILENAME -- ",1)
      CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
      CALL DelayTime (1)                   ' WAIT 1 SECOND FOR SETUP
'
'               SEND ONE CHARACTER AT A TIME
'
      CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
      ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X"                            ' RH021501
      FOR WasX = 1 TO LEN(ZOutTxt$)
         CALL PutCom (MID$(ZOutTxt$,WasX,1))     ' SEND 1 CHARACTER
         IF ZSubParm = -1 THEN _
            EXIT SUB
         IF ZAbort = ZTrue THEN _
            GOTO 20306
         CALL LPrnt(MID$(ZOutTxt$,WasX,1),0)     ' DISPLAY IF NEEDED
         ZDelay! = TIMER + 10            ' SET MAXIMUM TIME TO WAIT FOR Reply
         Char = ZTrue
         WHILE Char = -1
            CALL CheckTime(ZDelay!, TempElapsed!, 1)
            IF TempElapsed! <= 0 THEN _
               GOTO 20300     ' IF ZNo ECHO, CANCEL FILENAME Transfer
            CALL EofComm (Char)
         WEND                 ' JUMP OUT IF CHARACTER IS RECEIVED

Change RBBSSUB4.BAS as follows:

(line 59400)
      SUB LogPDown (PrivateDnld,DwnIndex) STATIC                     ' RH021501
      IF NOT PrivateDnld THEN _
         EXIT SUB
      ZWasEN$ = ZPersonalDir$
      WasBX = &H4
      ZSubParm = 9
      CALL FileLock
      WasL = 36 + ZMaxDescLen + ZPersonalLen
      CLOSE 2
      IF ZShareIt THEN _
         OPEN ZWasEN$ FOR RANDOM SHARED AS #2 LEN=WasL _
      ELSE OPEN "R",2,ZPersonalDir$,WasL
      FIELD #2,WasL AS PersonalRec$
      ZWasA = VAL(MID$(ZUserIn$(0),5 * (DwnIndex - 1) + 1,5))        ' RH021501
      GET #2,ZWasA
      MID$(PersonalRec$,WasL-2,1) = "!"
      PUT #2,ZWasA
      CALL UnLockAppend
      END SUB 

Change RBBSSUB3.BAS as follows:

20296 CALL FlushCom(ZWasY$)              ' CLEAR THE COMM BUFFER OF GARBAGE
      IF ZSubParm = -1 THEN _
         EXIT SUB
      CALL PutCom (ZEscape$+"OD")         ' SEND "ALERT" STRING
      IF ZSubParm = -1 THEN _
         EXIT SUB
      IF ZAbort = ZTrue THEN _
         GOTO 20306
      CALL LPrnt("Sending FILENAME -- ",1)
      CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
      CALL DelayTime (1)                   ' WAIT 1 SECOND FOR SETUP
'
'               SEND ONE CHARACTER AT A TIME
'
      CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
      ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X"                            ' RH021501
      FOR WasX = 1 TO LEN(ZOutTxt$)
         CALL PutCom (MID$(ZOutTxt$,WasX,1))     ' SEND 1 CHARACTER
         IF ZSubParm = -1 THEN _
            EXIT SUB
         IF ZAbort = ZTrue THEN _
            GOTO 20306
         CALL LPrnt(MID$(ZOutTxt$,WasX,1),0)     ' DISPLAY IF NEEDED
         ZDelay! = TIMER + 10            ' SET MAXIMUM TIME TO WAIT FOR Reply
         Char = ZTrue
         WHILE Char = -1
            CALL CheckTime(ZDelay!, TempElapsed!, 1)
            IF TempElapsed! <= 0 THEN _
               GOTO 20300     ' IF ZNo ECHO, CANCEL FILENAME Transfer
            CALL EofComm (Char)
         WEND                 ' JUMP OUT IF CHARACTER IS RECEIVED

