home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / rbbs_pc / rfix0312.zip / BULLET6 next >
Text File  |  1993-03-12  |  77KB  |  1,922 lines

  1. ====[ Fixes to RBBS-PC 17.4  ]========
  2.  
  3. Last Mod:  KG022502
  4.  
  5. Note:  BASE is RBBS 17.4
  6.  
  7. CONVENTIONS:
  8.     The changes are assigned numbers that  correspond  to  the
  9.     month,  day, and order in which they were made.  Any mods
  10.     are dated following the modification  description.   The
  11.     lines   of   source   code  that  are  changed/modified/added  are
  12.     designated by the comment beginning in column 70 of "' iiMMDDnn"
  13.     where ii is the initials of the person providing the change
  14.     and nn is the number of the change (01, 02, ...).
  15.  
  16. Latest Downloadable Fixes:  RFIX0312.ZIP
  17. -------------------------------------------------------------------
  18. RBBS-PC.EXE         06-21-92   9:00 PM EST  Release of 17.4
  19. --------------------------------------------------------------------
  20.                             Summary
  21.  
  22. EXE   MOD       Short Description
  23. ---- --------   -----------------
  24. RBBS RM030801  Untrapped error possible when max time to bank > 255
  25. RBBS RM030201  SysOp allowed to leave msg to a number without warning
  26. RBBS KG031101  Delete in msg edit now accepts "-" for ranges
  27. DOC  KG030901  Nested sub-options not working in bulletins
  28. RBBS KG022502  Possible to get main security updated from change in subboard
  29. RBBS KG022501  Auto-logoff for inactivity not working at msg "to" prompt
  30. RBBS KG020801  Makes it clearer how to skip a linked conference
  31. RBBS DR020301  Sometimes getting msg read command carry over
  32. RBBS KG020501  Supports separately shelling/dooring for protocol up/download
  33. RBBS KG020201  Sometimes getting out of memory error
  34. RBBS KG013002  Possible to get endless loop when bulletin since and none
  35. RBBS KG013001  Ques on continue to linked conf aborts or rolls to next
  36. RBBS KG012803  W)ho not showing line speed when caller is in a door
  37. RBBS KG012802  Global read sometimes not working
  38. RBBS KG012801  Adds support for turbo logon in Join command
  39. RBBS KG012601  Possible for W)ho command to report incorrect # of nodes
  40. RBBS KG012502  A)ll option on who to offered when won't be accepted
  41. RBBS KG012501  CONFMAIL.DEF file being left open, making hard to change
  42. RBBS KG012401  Lets select any bulletins when asks about new ones
  43. RBBS KG012301  Stacked commands not working right on conf join
  44. RBBS KG012001  In who command, show line speed
  45. RBBS KG011501  Don't automatically show menu when no such entry found
  46. RBBS KG011201  Allow CR's and message entry to be stacked in macros
  47. RBBS KG100701  Subboard allowed to change network type
  48. RBBS KG092301  Makes macros tolerate whether in turbo key mode
  49. RBBS KG092201  Records Line Speed that RBBS uses
  50. RBBS KG091002  Makes code more tolerant when reading FMS directories
  51. RBBS KG091001  Allows download personal files to be viewed
  52. RBBS KG082201  Lets SysOp make pers upload to a security level
  53. RBBS KG082101  Possible for caller to regain banked time
  54. RBBS KG070401  UTIL.HLP refers to "B)aud change" not "B)ank time"
  55. RBBS RH070402  Get untrapped error when timeout looking at callers file
  56. RBBS RH070401  Possible for activity to be logged to wrong callers file
  57. RBBS BH070401  [CBAUD] sometimes not working with external protocol
  58. RBBS KG062401  Unable to download marked files in personal directory
  59. RBBS KG062301  Msg scan/topic scan not operating same as Read
  60.  
  61. Contributors include:
  62.  
  63.      BH - Bob Hampton
  64.      DR - Dan Rowe
  65.      KG - Ken Goosens
  66.      RH - Ray Horton
  67.      RM - Richie Molinelli
  68.  
  69. ------------------------[ RM030801]-------------------------
  70.  
  71. Problem:  If the SysOp puts in a max time to bank larger than 255
  72. into the passwrds file, an untrapped error can occur.  This is rare
  73. only because few SysOps permit a session time greater than 255 minutes.
  74.  
  75. Solution:  Change RBBSSUB5.BAS as follows:
  76.  
  77. 63659 ZErrCode = 0
  78.       IF ZTempMaxBank > 255 THEN _                                   ' RM030801
  79.          ZTempMaxBank = 255                                          ' RM030801
  80.       END SUB
  81.  
  82. ------------------------[ RM030201]-------------------------
  83.  
  84. Problem:  It is possible for a SysOp to leave a message to a security
  85. level without any check whether a person exists with the number as
  86. a name.
  87.  
  88. Change RBBS-PC.BAS as follows:
  89.  
  90. 20205 ZFileSysParm = 0                                               ' RM030201
  91.       RETURN
  92.  
  93. Change RBBSSUB2.BAS as follows:
  94.  
  95. 2032 RcvrRecNum = 0
  96.      IF MsgTo$ <> "ALL" OR NOT AllowPub THEN _                       ' KG012502
  97.         IF ((LEFT$(MsgTo$,4) <> "ALL " OR NOT AllowPub) AND ZStartHash = 1) THEN _ ' KG012502
  98.            CALL CheckInt (MsgTo$) : _                                ' KG082201
  99.            IF ZTestedIntValue = 0 OR NOT ZSysOp OR (ZSysOp AND ZFileSysParm < 1) THEN _ ' RM030201
  100.               ZWasDF = INSTR(MsgTo$+" @"," @") : _
  101.               TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _
  102.               CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
  103.               IF NOT Found THEN _
  104.                  ZLastIndex = 0 : _
  105.                  RcvrRecNum = 0 : _
  106.                  IF NOT ZReply THEN _
  107.                     ZOutTxt$ = "Send anyway (Y,[N])" : _
  108.                     ZTurboKey = -ZTurboKeyUser : _
  109.                     ZLastIndex = 0 : _
  110.                     GOSUB 2034 : _
  111.                     IF NOT ZYes THEN _
  112.                        GOTO 2021
  113.      IF MsgTo$ = Temp$ THEN _
  114.         ZOutTxt$ = "Really send this to YOURSELF (Y,[N])" : _
  115.         ZLastIndex = 0 : _
  116.         GOSUB 2034 : _
  117.         IF NOT ZYes THEN _
  118.            MsgTo$ = ""
  119.      CALL OpenWorkA (ZNodeWorkFile$)
  120.      CALL PrintWorkA (MsgTo$ + "," + STR$(RcvrRecNum))
  121.      CLOSE 2
  122.      ZNumHeaders = ZNumHeaders + 1
  123.      IF EnableCC AND (NOT ZReply) AND MsgTo$ <> "ALL" AND _
  124.         MsgTo$ <> "" AND LEFT$(MsgTo$,4) <> "ALL " AND _
  125.         (NOT ZSysopComment) AND (NOT ZSysopMsg) THEN _
  126.            ZOutTxt$ = "Carbon copy to another (Y,[N])" : _
  127.            CALL PopCmdStack : _
  128.            IF ZYes THEN _
  129.               GOTO 2021
  130.  
  131. ------------------------[ KG031101]-------------------------
  132.  
  133. Enhancement:  When deleting lines in message edit, you can now use
  134. "-" to indicate range, as in "d 3-4" and "d 10 - 15".
  135.  
  136. Change RBBS-PC.BAS as follows:
  137.  
  138. 2500 ZOutTxt$ = "Delete from"
  139.      GOSUB 3300
  140.      Mark1 = ZTestedIntValue
  141.      IF ZAnsIndex < ZLastIndex AND ZUserIn$(ZAnsIndex+1) = "-" THEN _ ' KG031101
  142.            ZAnsIndex = ZAnsIndex + 1 _                               ' KG031101
  143.      ELSE Temp = INSTR(ZUserIn$(ZAnsIndex),"-") : _                  ' KG031101
  144.              IF Temp > 0 AND Temp < LEN(ZUserIn$(ZAnsIndex)) THEN _  ' KG031101
  145.                 ZUserIn$(ZAnsIndex) = MID$(ZUserIn$(ZAnsIndex),Temp+1) : _ ' KG031101
  146.                 ZAnsIndex = ZAnsIndex - 1                            ' KG031101
  147.  
  148. ------------------------[ KG030901]-------------------------
  149.  
  150. Problem:  When have a bulletin submenu called say "PAC" and bulletin
  151. prefix, say "B", then "BPAC.MNU" is a sub-menu.  If you then pick say
  152. options 1,2,...,5, that should pick off a file to display called
  153. BPAC1,...,BPAC5 but nothing displays.
  154.  
  155. Solution:  Sub-options to display must in 17.4 be terminated with a
  156. "-".  So rename the options BPAC1-,...,BPAC5- and they will work.
  157. The docs with 17.4 are incorrect and did not reflect this change
  158. in either the section on shared sub-options or in the section on
  159. converting to 17.4 from earlier versions.
  160.  
  161. ------------------------[ KG022502]-------------------------
  162.  
  163. Problem:  When subboard has a questionnaire that updates the
  164. user's security, this new security carries over into main user
  165. file when logs off in the subboard.
  166.  
  167. Solution:  Change RBBSSUB2.BAS as follows:
  168.  
  169. 10605 LSET ZUserDnlds$ = MKI$(ZDnlds)
  170.       LSET ZUserUplds$ = MKI$(ZUplds)
  171.       IF ZEnforceRatios THEN _
  172.          LSET ZTodayDl$ = MKS$(ZDLToday!) : _
  173.          LSET ZTodayBytes$ = MKS$(ZBytesToday!) : _
  174.          LSET ZDlBytes$ = MKS$(ZDLBytes!) : _
  175.          LSET ZULBytes$ = MKS$(ZULBytes!)
  176.       CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
  177.       IF (NOT ZExitToDoors) AND LoggingOff THEN _
  178.          TempElapsed! = ZElapsedTime + _
  179.                        (ZSecsUsedSession! - ZTimeCredits!) / 60 : _
  180.          ZTimeCredits! = 0 _
  181.       ELSE TempElapsed! = ZElapsedTime - ZExitToDoors*ZMinsInDoors
  182.       IF TempElapsed! < -32767 THEN _
  183.          TempElapsed! = -32767 _
  184.       ELSE IF TempElapsed! > 32767 THEN _
  185.          TempElapsed! = 32767
  186.       LSET ZElapsedTime$ = MKI$(TempElapsed!)
  187.       IF ZAdjustedSecurity THEN _
  188.          LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  189.       PUT 5,ZUserFileIndex
  190.       ZSubParm = 8
  191.       CALL FileLock
  192.       IF ZActiveUserFile$ <> ZOrigUserFile$ AND LoggingOff THEN _
  193.          ZActiveUserFile$ = ZOrigUserFile$ : _
  194.          ZUserFileIndex = ZOrigUserFileIndex : _
  195.          UpdateDefaults = ZFalse : _
  196.          ZAdjustedSecurity = ZFalse : _                              ' KG022502
  197.          LSET ZLastDateTimeOn$ = ZOrigDateTimeOn$ : _
  198.          GOTO 10602
  199.  
  200. ------------------------[ KG022501]-------------------------
  201.  
  202. Problem:  When at "To" prompt in message entry and timeout for inactivity,
  203. then asks user if wants really to send message rather than logging off\
  204. immediately.
  205.  
  206. Solution:  Change RBBSSUB2.BAS as follows:
  207.  
  208. 2021 ZOutTxt$ = "To " + LEFT$("A)ll,",-5*AllowPub) + "(S)ysop," + _  ' KG012502
  209.                  LEFT$("D)istribution,",-14*EnableCC) + _
  210.                  " or name" + ZPressEnterExpert$
  211.      CALL SkipLine (1)
  212.      ZSemiOnly = ZTrue
  213.      CALL PopCmdStack
  214.      IF ZWasQ = 0 OR ZSubParm < 0 THEN _                             ' KG022501
  215.         GOTO 2033                                                    ' KG022501
  216.      IF LEN(ZUserIn$(ZAnsIndex)) > 30 THEN _
  217.         CALL QuickTPut1 ("30 Char. Max") : _
  218.         GOTO 2021
  219.      Found = ZTrue                                                   ' KG022501
  220.      ZWasDF$ = ZUserIn$(ZAnsIndex)                                   ' KG022501
  221.      CALL AllCaps (ZWasDF$)                                          ' KG022501
  222.      ZUserIn$(ZAnsIndex) = ZWasDF$                                   ' KG022501
  223.      IF ZWasDF$ = "A" AND AllowPub THEN _                            ' KG022501
  224.         MsgTo$ = "ALL" _                                             ' KG022501
  225.      ELSE IF ZWasDF$ = "S" THEN _                                    ' KG022501
  226.         MsgTo$ = "SYSOP" _                                           ' KG022501
  227.      ELSE IF ZWasDF$ = "D" AND EnableCC THEN _                       ' KG022501
  228.         GOTO 2025 _                                                  ' KG022501
  229.      ELSE MsgTo$ = ZUserIn$(ZAnsIndex) :_                            ' KG022501
  230.           CALL AllCaps (MsgTo$)                                      ' KG022501
  231.      GOTO 2032
  232.  
  233. ------------------------[ KG020801]-------------------------
  234.  
  235. Problem:  When prompted whether to continue to a linked conference,
  236. it is not clear than answering No will skip to the next linked
  237. conference.
  238.  
  239. Solution:  Replace N with S)kip.  Change RBBSSUB5.BAS as follows:
  240.  
  241. 63616 EndConf = INSTR(ZLinkedConf$,ZCarriageReturn$)                 ' KG013001
  242.       LastConf = (EndConf = LEN(ZLinkedConf$))                       ' KG013001
  243.       ZHomeConf$ = LEFT$(ZLinkedConf$,EndConf-1)
  244.       IF ZNonStop THEN _
  245.          CALL QuickTPut1 ("Joining linked conference " + ZHomeConf$) _
  246.       ELSE _
  247.          ZOutTxt$ = "Continue to linked conference " + ZHomeConf$ + " ([Y],S)kip,A)bort)" : _ ' KG020801
  248.          CALL DeLink (ZHomeConf$) : _                                ' KG013001
  249.          ZTurboKey = -ZTurboKeyUser : _
  250.          ZSubParm = 1 : _
  251.          CALL TGet : _
  252.          IF ZWasQ > 0 AND NOT ZYes THEN _                            ' KG020801
  253.             ZWasX$ = ZUserIn$(1) : _                                 ' KG013001
  254.             CALL AllCaps (ZWasX$) : _                                ' KG013001
  255.             ZLinkedConf$ = ZLinkedConf$ + ZHomeConf$ + ZCarriageReturn$ : _ ' KG013001
  256.             IF LastConf OR ZWasX$ = "A" THEN _                       ' KG013001
  257.                ZHomeConf$ = ""  : _                                  ' KG013001             ' KG013001
  258.                ZGlobalRead = ZFalse : _                              ' KG013001
  259.                EXIT SUB _                                            ' KG013001
  260.             ELSE GOTO 63616                                          ' KG013001
  261.       END SUB
  262.  
  263. ------------------------[ DR020501]-------------------------
  264.  
  265. Problem:  When stacking a msg command like "g" for global, sometimes
  266. it carries over after the read and is misinterpreted as a command
  267. at the main command line.
  268.  
  269. Solution:  Change RBBS-PC.BAS as follows:
  270.  
  271. 4415 Forward = ZFalse
  272.      Reverse = ZFalse
  273.      FOR WasI = ZAnsIndex to ZLastIndex
  274.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  275.            GOSUB 4640                                                ' KG020201
  276.      NEXT
  277.      IF ZAnsIndex <= ZLastIndex OR LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' DR020301
  278.         IF INSTR("Ss*",ZUserIn$(ZAnsIndex)) > 0 THEN _
  279.            CurMsg = ZLastMsgRead + 1 : _
  280.            Forward = ZTrue : _
  281.            GOTO 4430 _
  282.         ELSE IF INSTR("Ll",ZUserIn$(ZAnsIndex)) > 0 THEN _
  283.                 CurMsg = HighMsgNumber : _
  284.                 Reverse = ZTrue : _
  285.                 GOTO 4490 _
  286.         ELSE IF INSTR("Gg",ZUserIn$(ZAnsIndex)) > 0 THEN _
  287.                 ZGlobalRead = ZTrue : _
  288.                 GOTO 4370
  289.  
  290. ------------------------[ KG020501]-------------------------
  291.  
  292. Enhancement:  may want to door on uploads but shell on downloads.
  293. This lets you put two letters in proto.def for method to use.
  294. First applies to downloads, second to uploads.  If only one letter
  295. is used, it applies to both.  "SD" means shell on download and
  296. door on uploads.
  297.  
  298. Change RBBSSUB3.BAS as follows:
  299.  
  300. 21623 CALL ReadParms (ZWorkAra$(),13,ZFF)
  301.       IF ZErrCode > 0 THEN _
  302.          ZFF = LEN(ZDefaultXfer$) : _
  303.          ZProtoPrompt$ = "None" : _
  304.          GOTO 21625
  305.       ZProtoPrompt$ = ZWorkAra$(1)
  306.       IF LEN(ZProtoPrompt$) > 2 THEN _
  307.          IF MID$(ZProtoPrompt$,2,1) = ")" THEN _
  308.             ZProtoPrompt$ = LEFT$(ZProtoPrompt$,1) + MID$(ZProtoPrompt$,3)
  309.       WasX = INSTR(ZProtoPrompt$+ZCrLf$,ZCrLf$)
  310.       ZProtoPrompt$ = LEFT$(ZProtoPrompt$,WasX-1)
  311.       CALL Trim (ZProtoPrompt$)
  312.       ZProtoMethod$ = ZWorkAra$(3)                                   ' KG020501
  313.       CALL AllCaps (ZProtoMethod$)
  314.       ZReq8Bit = (LEFT$(ZWorkAra$(4),1) = "8")
  315.       ZDownTemplate$ = ZWorkAra$(12)
  316.       ZUpTemplate$ = ZWorkAra$(13)
  317.       WasX$ = ZWorkAra$(11)
  318.       WasX = INSTR(WasX$,"=")
  319.       ZAdvanceProtoWrite = ZFalse
  320.       IF WasX < 2 OR WasX >= LEN(WasX$) THEN _
  321.          ZFailureParm = 4 : _
  322.          ZFailureString$ = "F" _
  323.       ELSE ZFailureParm = VAL(LEFT$(WasX$,WasX-1)) : _
  324.            ZFailureString$ = MID$(WasX$,WasX+1) : _
  325.            WasX = INSTR(ZFailureString$,"=") : _
  326.            IF WasX > 0 THEN _
  327.               ZAdvanceProtoWrite = (MID$(ZFailureString$,WasX) = "=A") : _
  328.               ZFailureString$ = LEFT$(ZFailureString$,WasX-1)
  329.       ZProtoMacro$ = ZWorkAra$(10)
  330.       ZFakeXRpt = (LEFT$(ZWorkAra$(8),1) = "F")
  331.       ZBatchProto = (LEFT$(ZWorkAra$(6),1) = "B")
  332.       ZSpeedFactor! = VAL(ZWorkAra$(9))
  333.       IF ZSpeedFactor! < 0.1 THEN _
  334.          ZSpeedFactor! = 0.87
  335.       ZBlockSize = VAL(ZWorkAra$(7))
  336.       ZFLen = ZBlockSize
  337.       IF ZFLen < 1 THEN _
  338.          ZFLen = 128
  339.  
  340. Change RBBSSUB4.BAS as follows:
  341.  
  342. 62624 ' $SUBTITLE: 'PrivDoorRtn - subroutine to exit as a private door.'
  343. ' $PAGE
  344. '
  345. '  NAME    -- PrivDoorRtn
  346. '
  347. '  INPUTS  --     PARAMETER                    MEANING
  348. '              ZTransferFunction         = 1 DOWNLOAD FILE TO USER
  349. '                                        = 2 UPLOAD FILE TO RBBS-PC
  350. '                                        = 3 USER REGISTRATION PGM
  351. '              ZUserIn$                      NAME OF FILE TO EXIT TO
  352. '              ZComPort$                 NAME OF COMMUNICATIONS PORT
  353. '                                        TO BE USED BY KERMIT (COM1
  354. '                                        OR COM2)
  355. '              ZBPS                      = -1 FOR   300 BAUD
  356. '                                        = -2 FOR   450 BAUD
  357. '                                        = -3 FOR  1200 BAUD
  358. '                                        = -4 FOR  2400 BAUD
  359. '                                        = -5 FOR  4800 BAUD
  360. '                                        = -6 FOR  9600 BAUD
  361. '                                        = -7 FOR 19200 BAUD
  362. '
  363. '  OUTPUTS -- NONE
  364. '
  365. '  PURPOSE -- To transfer control to another program
  366. '
  367.       SUB PrivDoorRtn STATIC
  368.       IF ZPrivateDoor THEN _
  369.          GOTO 62630
  370.       IF ZFakeXRpt THEN _
  371.          CALL FakeXRpt (ZWasFT$)
  372.       IF ZAdvanceProtoWrite THEN _
  373.          CALL OpenOutW ("XFER-"+ZNodeID$+".DEF") : _
  374.          IF ZErrCode < 1 THEN _
  375.             CALL PrintWorkA (ZFileName$+",,"+ZWasFT$) : _
  376.             CLOSE 2
  377.       IF (ZTransferFunction = 1 AND LEFT$(ZProtoMethod$,1) = "S") OR _ ' KG020501
  378.          (ZTransferFunction = 2 AND RIGHT$(ZProtoMethod$,1) = "S") THEN _ ' KG020501
  379.          GOTO 62629
  380.  
  381. ------------------------[ KG020201]-------------------------
  382.  
  383. Problem:  Can get an out of memory error in line 4415.  Wrong line
  384. number used.
  385.  
  386. Change RBBS-PC.BAS as follows:
  387.  
  388. 4415 Forward = ZFalse
  389.      Reverse = ZFalse
  390.      FOR WasI = ZAnsIndex to ZLastIndex
  391.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  392.            GOSUB 4640                                                ' KG020201
  393.      NEXT
  394.      IF ZAnsIndex <= ZLastIndex AND LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' KG013001
  395.         IF INSTR("Ss*",ZUserIn$(ZAnsIndex)) > 0 THEN _
  396.            CurMsg = ZLastMsgRead + 1 : _
  397.            Forward = ZTrue : _
  398.            GOTO 4430 _
  399.         ELSE IF INSTR("Ll",ZUserIn$(ZAnsIndex)) > 0 THEN _
  400.                 CurMsg = HighMsgNumber : _
  401.                 Reverse = ZTrue : _
  402.                 GOTO 4490 _
  403.         ELSE IF INSTR("Gg",ZUserIn$(ZAnsIndex)) > 0 THEN _
  404.                 ZGlobalRead = ZTrue : _
  405.                 GOTO 4370
  406.  
  407. ------------------------[ KG013002]-------------------------
  408.  
  409. Problem:  When ask to read bulletins since (b s) and there are none,
  410. get an endless loop because a continuation statement was left off
  411. a statement.
  412.  
  413. Solution:  Change RBBS-PC.BAS as follows:
  414.  
  415. 9760 ' ****  [entry when want review plus chance to read] *********
  416.      GOSUB 9750
  417.      IF NumNewBullets > 0 THEN _
  418.         ZLastIndex = NumNewBullets + 1 : _
  419.         ZOutTxt$ = "Read what new bulletins (A)ll,[Q]uit)" : _       ' KG012401
  420.         GOSUB 12999 : _
  421.         CALL AllCaps (ZUserIn$) : _                                  ' KG013002
  422.         IF ZWasQ > 0 AND ZUserIn$ <> "Q" THEN _                      ' KG012401
  423.            GOSUB 9761 : _                                            ' KG012401
  424.            ZAnsIndex = 0 : _
  425.            ZLastIndex = NumNewBullets : _
  426.            GOTO 9700
  427.      ZLastIndex = 0
  428.      IF ZAnsIndex < 1 THEN _
  429.         RETURN
  430.      GOTO 9701
  431.  
  432. ------------------------[ KG013001]-------------------------
  433.  
  434. Problem:  there is no good way to skip linked conferences in a global
  435. read.
  436.  
  437. Solution: Let a)bort do the work of breaking the global read.  No then
  438. just rolls over to the next conference, asking if caller wants to continue
  439. to it.
  440.  
  441. Change RBBS-PC.BAS as follows:
  442.  
  443. 4352 SearchString$ = ""
  444.      DontPrint = ZFalse
  445.      JustReplied = ZFalse
  446.      QuotedReply = ZFalse
  447.      CanKill = (ZSysop OR ZUserSecLevel >= ZSecKillAny)
  448.      GOSUB 1893
  449.      GOSUB 5344
  450.      ZWasZ$ = ""
  451.      FOR WasI = 2 TO ZLastIndex                                      ' KG012802
  452.         IF INSTR("Ss*",ZUserIn$(WasI)) > 0 THEN _
  453.            ZUserIn$(WasI) = MID$(STR$(ZLastMsgRead+1),2) + "+"
  454.         IF INSTR("Ll",ZUserIn$(WasI)) > 0 THEN _
  455.            ZUserIn$(WasI) = MID$(STR$(HighMsgNumber),2) + "-"
  456.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  457.            GOSUB 4640                                                ' KG013001
  458.      NEXT
  459.  
  460. 4415 Forward = ZFalse
  461.      Reverse = ZFalse
  462.      FOR WasI = ZAnsIndex to ZLastIndex
  463.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  464.            GOSUB 4415                                                ' KG013001
  465.      NEXT
  466.      IF ZAnsIndex <= ZLastIndex AND LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' KG013001
  467.         IF INSTR("Ss*",ZUserIn$(ZAnsIndex)) > 0 THEN _
  468.            CurMsg = ZLastMsgRead + 1 : _
  469.            Forward = ZTrue : _
  470.            GOTO 4430 _
  471.         ELSE IF INSTR("Ll",ZUserIn$(ZAnsIndex)) > 0 THEN _
  472.                 CurMsg = HighMsgNumber : _
  473.                 Reverse = ZTrue : _
  474.                 GOTO 4490 _
  475.         ELSE IF INSTR("Gg",ZUserIn$(ZAnsIndex)) > 0 THEN _
  476.                 ZGlobalRead = ZTrue : _
  477.                 GOTO 4370
  478.  
  479. 4640 FOR WasJ = WasI to ZLastIndex-1                                 ' KG013001
  480.         ZUserIn$(WasJ) = ZUserIn$(WasJ+1)                            ' KG013001
  481.      NEXT                                                            ' KG013001
  482.      ZGlobalRead = ZTrue                                             ' KG013001
  483.      ZLastIndex = ZLastIndex - 1                                     ' KG013001
  484.      RETURN                                                          ' KG013001
  485.  
  486. ------------------------[ KG012803]-------------------------
  487.  
  488. Problem:  When caller is in a door, the who command shows part
  489. of name of door in rather than the line speed. (Fix to an enhancement)
  490.  
  491. Solution:  Change RBBSSUB3.BAS as follows:
  492.  
  493. 43070 ZActiveMessageFile$ = ZOrigMsgFile$
  494.       ZSubParm = 3
  495.       CALL FileLock
  496.       CALL OpenMsg
  497.       FIELD 1, 128 AS ZMsgRec$
  498.       GET 1,ZNodeRecIndex
  499.       IF ZGlobalSysop THEN _
  500.          MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
  501.       MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
  502.       MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
  503.       MID$(ZMsgRec$,44,2) = RIGHT$(STR$(-ZBPS),2)
  504.       MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
  505.       MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2)
  506.       MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
  507.       MID$(ZMsgRec$,55,2) = STR$(ZSysop)
  508.       MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZOrigTimeLoggedOn$,2))) + _
  509.                             CHR$(VAL(MID$(ZOrigTimeLoggedOn$,4,2))) + _
  510.                             CHR$(VAL(MID$(ZOrigTimeLoggedOn$,7,2)))
  511.       MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
  512.       MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
  513.       MID$(ZMsgRec$,75,1) = ZWasFT$
  514.       MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)            ' KG012803
  515.       MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
  516.       CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
  517.       MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
  518.       IF ZLocalUser THEN _
  519.          ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _
  520.       ELSE ZWasZ$ = " 0"
  521.       MID$(ZMsgRec$,101,2) = ZWasZ$
  522.       MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)
  523.       ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
  524.       MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
  525.       MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
  526.       MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
  527.       MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
  528.       MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
  529.       MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
  530.       MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
  531.       MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
  532. ' ***   Save additional parameters for door restoral
  533.       CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  534.       CALL PrintWorkA (STR$(ZLimitMinsPerSession))
  535.       CALL PrintWorkA (ZWasNG$)
  536.       CALL PrintWorkA (ZIndivValue$)
  537.       CALL PrintWorkA (ZOrigDateTimeOn$)
  538.       CALL PrintWorkA (ZOrigTimeLoggedOn$)
  539.       CALL PrintWorkA (STR$(ZUserFileIndex))
  540.       CALL PrintWorkA (ZUpldDir$)
  541.       ZOutTxt$ = STR$(ZUpldDir$ = ZFMSDirectory$ OR ZLimitSearchToFMS)
  542.       CALL PrintWorkA (ZOutTxt$)
  543.       CALL PrintWorkA (ZCBaud$)
  544.       CALL PrintWorkA (ZDooredTo$)                                   ' KG012803
  545.       CLOSE 2
  546.  
  547. 44000 ' $SUBTITLE: 'ReadProf - subroutine to restore a user profile'
  548. ' $PAGE
  549. '
  550. '  NAME    -- ReadProf
  551. '
  552. '  INPUTS  --     PARAMETER                    MEANING
  553. '              ZNodeRecIndex               NODE RECORD TO USE
  554. '              ZSysopPswd1$               Sysop'S PSEUDONYM 1
  555. '              ZSysopPswd2$               Sysop'S PSEUDONYM 2
  556. '
  557. '  OUTPUTS -- USER'S OPTIONS AND COMMUNICATIONS PARAMETERS
  558. '             UPON EXITING RBBS-PC TO A "DOOR"
  559. '
  560. '  PURPOSE -- Reset a user's options and communications parameters
  561. '             that were saved in the node record when a user exited
  562. '             to a "door" so that he is in the same status as when
  563. '             he exited.
  564. '
  565.       SUB ReadProf STATIC
  566.       FIELD 1, 128 AS ZMsgRec$
  567.       GET 1,ZNodeRecIndex
  568.       ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
  569.       MID$(ZMsgRec$,40,2) = "00"
  570.       ZEightBit = VAL(MID$(ZMsgRec$,42,2))
  571.       ZBPS = -VAL(MID$(ZMsgRec$,44,2))
  572.       CALL CommInfo
  573.       ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
  574.       ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
  575.       ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4))
  576.       ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
  577.       ZWasGR = VAL(MID$(ZMsgRec$,53,2))
  578.       HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
  579.       MinLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
  580.       SecLoggedOn$  = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
  581.       ZTimeLoggedOn$ = HourLoggedOn$ + _
  582.                         ":" + _
  583.                         MinLoggedOn$ + _
  584.                         ":" + _
  585.                         SecLoggedOn$
  586.       ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
  587.       ZWasFT$ = MID$(ZMsgRec$,75,1)
  588.       ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2))                  ' KG012803
  589.       ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
  590.       ZCurPUI$ = MID$(ZMsgRec$,93,8)
  591.       CALL Remove (ZCurPUI$," ")
  592.       IF ZCurPUI$ <> "" THEN _
  593.          CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
  594.          ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
  595.       ZCustomPUI = (ZCurPUI$ <> "")
  596.       ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$)
  597.       ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
  598.       ZHomeConf$ = MID$(ZMsgRec$,105,8)
  599.       ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
  600.       CALL Trim (ZHomeConf$)
  601.       IF ZHomeConf$ = "MAIN" THEN _
  602.          ZHomeConf$ = ""
  603.       IF ZRequiredRings > 0 AND _
  604.          INSTR(ZModemInitCmd$,"S0=255") THEN _
  605.          COLOR 7,0,0 _
  606.       ELSE COLOR ZFG,ZBG,ZBorder
  607.       IF ZLocalUserMode THEN _
  608.          GOTO 44003
  609.       CALL SetBaud
  610.  
  611. 44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _
  612.                         VAL(MinLoggedOn$) * 60! + _
  613.                         VAL(SecLoggedOn$)
  614.       HourLoggedOn$ = ""
  615.       MinLoggedOn$ = ""
  616.       SecLoggedOn$ = ""
  617.       IF ZMinsPerSession < 1 THEN _
  618.          ZMinsPerSession = 3
  619.       IF NOT ZEightBit THEN _
  620.          OUT ZLineCntlReg,&H1A
  621.       IF LEFT$(ZMsgRec$,7) = "SYSOP  " THEN _
  622.          ZFirstName$ = ZSysopPswd1$ : _
  623.          ZActiveUserName$ = ZSecretName$ _
  624.       ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
  625.            ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " ","  ") : _
  626.            ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
  627.            ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
  628.            ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  629.       ZWasZ$ = ZFirstName$
  630.       CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
  631.       CALL ReadDir (2,1)
  632.       ZLimitMinsPerSession = VAL (ZOutTxt$)
  633.       CALL ReadDir (2,1)
  634.       ZWasNG$ = ZOutTxt$
  635.       CALL ReadDir (2,1)
  636.       ZIndivValue$ = ZOutTxt$
  637.       CALL ReadDir (2,1)
  638.       ZOrigDateTimeOn$ = ZOutTxt$
  639.       CALL ReadDir (2,1)
  640.       ZOrigTimeLoggedOn$ = ZOutTxt$
  641.       CALL ReadDir (2,1)
  642.       ZUserFileIndex = VAL(ZOutTxt$)
  643.       CALL ReadDir (2,1)
  644.       ZUpldDoor$ = ZOutTxt$
  645.       CALL ReadDir (2,1)
  646.       ZFMSDoor = VAL(ZOutTxt$)
  647.       CALL ReadDir (2,1)
  648.       ZCBaud$ = ZOutTxt$
  649.       CALL ReadDir (2,1)                                             ' KG012803
  650.       ZDooredTo$ = ZOutTxt$                                          ' KG012803
  651.       CLOSE 2
  652.       IF ZExitToDoors AND ZDooredTo$ <> "" THEN _                    ' KG012803
  653.          CALL OpenWork (2,ZDoorsDef$) : _                            ' KG012803
  654.          IF ZErrCode = 0 THEN _                                      ' KG012803
  655.             CALL ReadParms (ZOutTxt$(),8,1) : _                      ' KG012803
  656.             WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _     ' KG012803
  657.                CALL ReadParms (ZOutTxt$(),8,1) : _                   ' KG012803
  658.             WEND : _                                                 ' KG012803
  659.             IF ZOutTxt$(1) = ZDooredTo$ THEN _                       ' KG012803
  660.                ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y")                 ' KG012803
  661.       ZErrCode = 0                                                   ' KG012803
  662.       CALL DoorReturn
  663.       END SUB
  664.  
  665. ------------------------[ KG012802]-------------------------
  666.  
  667. Problem:  sometimes when request global read and have linked
  668. conferences, never asks if want to join next linked conference.
  669. This happens, for example, when stack the join, as in
  670. "j sig r s g" as opposed to "r s g".
  671.  
  672. Solution:  Change RBBS-PC.BAS as follows:
  673.  
  674. 4352 SearchString$ = ""
  675.      DontPrint = ZFalse
  676.      JustReplied = ZFalse
  677.      QuotedReply = ZFalse
  678.      CanKill = (ZSysop OR ZUserSecLevel >= ZSecKillAny)
  679.      GOSUB 1893
  680.      GOSUB 5344
  681.      ZWasZ$ = ""
  682.      FOR WasI = 2 TO ZLastIndex                                      ' KG012802
  683.         IF INSTR("Ss*",ZUserIn$(WasI)) > 0 THEN _
  684.            ZUserIn$(WasI) = MID$(STR$(ZLastMsgRead+1),2) + "+"
  685.         IF INSTR("Ll",ZUserIn$(WasI)) > 0 THEN _
  686.            ZUserIn$(WasI) = MID$(STR$(HighMsgNumber),2) + "-"
  687.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  688.            ZGlobalRead = ZTrue
  689.      NEXT
  690.  
  691. ------------------------[ KG012801]-------------------------
  692.  
  693. Enhancement.  Lets user elect to make a join a turbo logon.  Just
  694. stack the "!" after the conference to join.  Thus, "j sig ! r s"
  695. says to turbo logon into conference "sig", reading since.   This lets
  696. the caller stack commands that will work regardless of whether there
  697. is news, new bulletins, new files, etc.
  698.  
  699. Change RBBS-PC.BAS as follows:
  700.  
  701. 5323 IF ZWasZ$ = "MAIN" THEN _
  702.         ZWasZ$ = "M"
  703.      WasX = (ZWasZ$ = "M")
  704.      IF ZWasZ$ = ConfNameSave$ OR (WasX AND ZConfName$ = "MAIN") THEN _
  705.         CALL QuickTPut1 ("You are already in " + ZWasZ$) : _
  706.         RETURN
  707.      IF ZUserIn$(ZAnsIndex+1) = "!" AND ZAnsIndex < ZLastIndex THEN _ ' KG012801
  708.         TurboLogon = ZTrue : _                                       ' KG012801
  709.         ZAnsIndex = ZAnsIndex + 1                                    ' KG012801
  710.      ON INSTR("MNSPQ",ZWasZ$) GOTO 5350,5290,5292,5294,10550
  711.      IF NOT ZOK THEN _
  712.         GOTO 5300
  713.      CLOSE 2
  714.  
  715. ------------------------[ KG012601]-------------------------
  716.  
  717. Problem:  When a conference contains a different # of node records
  718. that the main message based, the W)ho command will report the # of
  719. nodes in the conference rather than the number on the main message
  720. base.  (The # of node records in conferences can be any natural
  721. number in RBBS.)
  722.  
  723. Solution:  Change RBBS-PC.BAS as follow.
  724.  
  725. 9800 CALL WhosOn                                                     ' KG012601
  726.      GOSUB 5344
  727.      RETURN
  728.  
  729. Change RBBSSUB2.BAS as follows:
  730.  
  731. 9801 ' $SUBTITLE: 'WhosOn - subroutine to display who is on'
  732. ' $PAGE
  733. '
  734. '  NAME    -- WhosOn
  735. '
  736. '  INPUTS  --     PARAMETER                    MEANING
  737. '                ZActiveMessageFile$        Current message file
  738. '                ZOrigMsgFile$              Main msg file
  739. '
  740. '  OUTPUTS --  None
  741. '
  742. '  PURPOSE --  To display who is on each node.
  743. '
  744.      SUB WhosOn STATIC                                               ' KG012601
  745.      WasA1$ = ZActiveMessageFile$
  746.      ZActiveMessageFile$ = ZOrigMsgFile$
  747.      CALL OpenMsg
  748.      FIELD 1, 128 AS ZMsgRec$
  749.      GET 1,1                                                         ' KG012601
  750.      NumNodes = VAL(MID$(ZMsgRec$,127))                              ' KG012601
  751.      FOR NodeIndex = 2 TO NumNodes + 1
  752.         GET 1,NodeIndex
  753.         ZOutTxt$ = ZFG1$ + "Node" + _
  754.              STR$(NodeIndex - 1) + ZFG2$
  755.         WasAX$ = MID$(ZMsgRec$,79,5)                                 ' KG012001
  756.         CALL Trim (WasAX$)                                           ' KG012001
  757.         WasAX$ = RIGHT$("     " + WasAX$,5) + _                      ' KG012001
  758.               " BPS: "
  759.         IF MID$(ZMsgRec$,55,2) = "-1" AND NOT ZSysop THEN _
  760.            ZWasY$ = "SYSOP" + SPACE$(21) _
  761.         ELSE ZWasY$ = MID$(ZMsgRec$,1,26)
  762.         WasAX$ = WasAX$ + ZFG3$ + ZWasY$
  763.         IF MID$(ZMsgRec$,40,2) <> "-1" THEN _
  764.            WasAX$ = WasAX$ + ZFG4$ + MID$(ZMsgRec$,93,22)
  765.         IF MID$(ZMsgRec$,57,1) = "A" THEN _
  766.            ZOutTxt$ = ZOutTxt$ + "  Online at " + _
  767.                 WasAX$ _
  768.         ELSE IF NOT ZSysop THEN _
  769.                 ZOutTxt$ = ZOutTxt$ + _
  770.                      " Waiting for next caller" _
  771.              ELSE ZOutTxt$ = ZOutTxt$ + _
  772.                        " Offline at " + _
  773.                        WasAX$
  774.         CALL QuickTPut1 (ZOutTxt$)
  775.         CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse)
  776.         IF ZNo THEN _
  777.            NodeIndex = NumNodes + 2
  778.      NEXT
  779.      ZActiveMessageFile$ = WasA1$
  780.      CALL QuickTPut (ZEmphasizeOff$,0)
  781.      END SUB
  782.  
  783. ------------------------[ KG012502]-------------------------
  784.  
  785. Problem:  prompt on who msg is to always offers A)ll option, even when
  786. the message base does not allow public messages!
  787.  
  788. Change RBBS-PC.BAS as follows:
  789.  
  790. 2020 CALL SetWhoTo (-ZEnableCC*(ZUserSecLevel>=ZOptSec(5)),MsgTo$,MsgFrom$,RcvrRecNum,Found,INSTR(ZMsgSecCats$,"U")>0) ' KG012502
  791.      IF MsgTo$ = "" THEN _
  792.         RETURN
  793.      IF ZSysopComment OR ZSysopMsg THEN _
  794.         GOTO 2100
  795.      IF ZReply OR MsgFwd THEN _
  796.         Found = ZTrue : _
  797.         CALL Trim (MsgTo$):  _
  798.         GOTO 2035 _
  799.      ELSE Subject$ = ""
  800.      GOSUB 2065
  801.  
  802. 4666 CALL Trim (MsgTo$)
  803.      ZOutTxt$ = "Change receiver's name from " + _
  804.         MsgTo$ + _
  805.         " to"
  806.      GOSUB 12995
  807.      IF ZWasQ = 0 THEN _
  808.         GOTO 4667
  809.      IF LEN(ZUserIn$) > 30 THEN _
  810.         CALL QuickTPut1 ("30 chars max") : _
  811.         GOTO 4666
  812.      CALL AllCaps (ZUserIn$)
  813.      MsgTo$ = ZUserIn$
  814.      TempMsgTo$ = ZUserIn$
  815.      CALL SetWhoTo (ZFalse,MsgTo$,MsgFrom$,RcvrRecNum,Found,ZTrue)   ' KG012502
  816.      IF MsgTo$ = "" THEN MsgTo$ = TempMsgTo$
  817.  
  818. Change RBBSSUB2.BAS as follows:
  819.  
  820. 2018 ' $SUBTITLE: 'SetWhoTo - subroutine to get who a msg/upload is to'
  821. ' $PAGE
  822. '
  823. '  NAME    -- SetWhoTo
  824. '
  825. '  INPUTS  --     PARAMETER                    MEANING
  826. '              HighestUserRecord
  827. '
  828. '  OUTPUTS --  MsgTo$              Who message is to
  829. '              RcvrRecNum         User record # of who to
  830. '
  831. '  PURPOSE --  Asks who a message/upload is to and checks if receiver exists
  832. '
  833.      SUB SetWhoTo (EnableCC,MsgTo$,MsgFrom$,RcvrRecNum,Found,AllowPub) STATIC ' KG012502
  834.      Temp$ = MsgFrom$
  835.      CALL Trim (Temp$)
  836.      ZNumHeaders = 0
  837.      CALL KillWork (ZNodeWorkFile$)
  838.  
  839. 2021 ZOutTxt$ = "To " + LEFT$("A)ll,",-5*AllowPub) + "(S)ysop," + _  ' KG012502
  840.                  LEFT$("D)istribution,",-14*EnableCC) + _
  841.                  " or name" + ZPressEnterExpert$
  842.      CALL SkipLine (1)
  843.      ZSemiOnly = ZTrue
  844.      CALL PopCmdStack
  845.      IF LEN(ZUserIn$(ZAnsIndex)) > 30 THEN _
  846.         CALL QuickTPut1 ("30 Char. Max") : _
  847.         GOTO 2021
  848.      Found = ZTrue
  849.      IF ZWasQ = 0 THEN _
  850.         GOTO 2033 _
  851.      ELSE ZWasDF$ = ZUserIn$(ZAnsIndex) : _
  852.           CALL AllCaps (ZWasDF$) : _
  853.           ZUserIn$(ZAnsIndex) = ZWasDF$ : _
  854.           IF ZWasDF$ = "A" AND AllowPub THEN _                       ' KG012502
  855.              MsgTo$ = "ALL" _
  856.           ELSE IF ZWasDF$ = "S" THEN _
  857.              MsgTo$ = "SYSOP" _
  858.           ELSE IF ZWasDF$ = "D" AND EnableCC THEN _
  859.              GOTO 2025 _
  860.           ELSE MsgTo$ = ZUserIn$(ZAnsIndex) :_
  861.                CALL AllCaps (MsgTo$)
  862.      GOTO 2032
  863.  
  864. 2032 RcvrRecNum = 0
  865.      IF MsgTo$ <> "ALL" OR NOT AllowPub THEN _                       ' KG012502
  866.         IF ((LEFT$(MsgTo$,4) <> "ALL " OR NOT AllowPub) AND ZStartHash = 1) THEN _ ' KG012502
  867.            CALL CheckInt (MsgTo$) : _                                ' KG082201
  868.            IF ZTestedIntValue = 0 OR NOT ZSysOp THEN _               ' KG082201
  869.               ZWasDF = INSTR(MsgTo$+" @"," @") : _
  870.               TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _
  871.               CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
  872.               IF NOT Found THEN _
  873.                  ZLastIndex = 0 : _
  874.                  RcvrRecNum = 0 : _
  875.                  IF NOT ZReply THEN _
  876.                     ZOutTxt$ = "Send anyway (Y,[N])" : _
  877.                     ZTurboKey = -ZTurboKeyUser : _
  878.                     ZLastIndex = 0 : _
  879.                     GOSUB 2034 : _
  880.                     IF NOT ZYes THEN _
  881.                        GOTO 2021
  882.      IF MsgTo$ = Temp$ THEN _
  883.         ZOutTxt$ = "Really send this to YOURSELF (Y,[N])" : _
  884.         ZLastIndex = 0 : _
  885.         GOSUB 2034 : _
  886.         IF NOT ZYes THEN _
  887.            MsgTo$ = ""
  888.      CALL OpenWorkA (ZNodeWorkFile$)
  889.      CALL PrintWorkA (MsgTo$ + "," + STR$(RcvrRecNum))
  890.      CLOSE 2
  891.      ZNumHeaders = ZNumHeaders + 1
  892.      IF EnableCC AND (NOT ZReply) AND MsgTo$ <> "ALL" AND _
  893.         MsgTo$ <> "" AND LEFT$(MsgTo$,4) <> "ALL " AND _
  894.         (NOT ZSysopComment) AND (NOT ZSysopMsg) THEN _
  895.            ZOutTxt$ = "Carbon copy to another (Y,[N])" : _
  896.            CALL PopCmdStack : _
  897.            IF ZYes THEN _
  898.               GOTO 2021
  899.  
  900. Change RBBSSUB5.BAS as follows:
  901.  
  902. 20460 WhoTo$ = ""
  903.       WasY$ = ZFileName$
  904.       CALL KillWork (ZNodeWorkFile$)
  905.       IF ZUserSecLevel >= ZMinSecPersUpld THEN _
  906.          CALL SetWhoTo (ZTrue,WhoTo$,"",RcvrRecNum,Found,ZTrue) _    ' KG012502
  907.       ELSE WhoTo$ = "ALL"
  908.       ZFileName$ = WasY$
  909.       RETURN
  910.  
  911. ------------------------[ KG012501]-------------------------
  912.  
  913. Problem:  The conference mail scan is being left open long after the file
  914. is read, making it difficult to replace the file on a multi-user system.
  915.  
  916. Solution:  Change RBBSSUB4.BAS as follows:
  917.  
  918. 59856 ZActiveUserFile$ = WasA1$
  919.       CALL OpenUser (ZHighestUserRecord)
  920.       FIELD 5, 128 AS ZUserRecord$
  921.       IF (NOT ZRet) AND NOT AnyMail THEN _
  922.          CALL QuickTPut1 ("You have not joined any conferences")
  923.       ZUserFileIndex = UserFileIndexSave
  924.       LSET ZUserRecord$ = UserRecordHold$
  925.       ZActiveMessageFile$ = MsgFileSave$
  926.       CALL OpenMsg
  927.       FIELD 1, 128 AS ZMsgRec$
  928.       GET 1,1
  929.       ZNonStop = (ZPageLength < 1)
  930.       WasX$ = ZUserIn$(ZAnsIndex+1)
  931.       CALL AllCaps (WasX$)
  932.       ZAnsIndex = ZAnsIndex - (WasX$ = "C")
  933.       SkipParms = -(NOT EOF(2))*SkipParms
  934.       LinkNew = ZFalse
  935.       LinkPers = ZFalse
  936.       CLOSE 2                                                        ' KG012501
  937.       END SUB
  938.  
  939. ------------------------[ KG012401]-------------------------
  940.  
  941. Problem:  When seeing the list of new bulletins, often the caller
  942. wishes to read only particular ones rather than all of them.  This
  943. change lets any bullets be selected as well as all or none.
  944.  
  945. Change RBBS-PC.BAS as follows:
  946.  
  947. 9760 ' ****  [entry when want review plus chance to read] *********
  948.      GOSUB 9750
  949.      IF NumNewBullets > 0 THEN _
  950.         ZLastIndex = NumNewBullets + 1 : _
  951.         ZOutTxt$ = "Read what new bulletins (A)ll,[Q]uit)" : _       ' KG012401
  952.         GOSUB 12999 : _
  953.         CALL AllCaps (ZUserIn$)                                      ' KG012401
  954.         IF ZWasQ > 0 AND ZUserIn$ <> "Q" THEN _                      ' KG012401
  955.            GOSUB 9761 : _                                            ' KG012401
  956.            ZAnsIndex = 0 : _
  957.            ZLastIndex = NumNewBullets : _
  958.            GOTO 9700
  959.      ZLastIndex = 0
  960.      IF ZAnsIndex < 1 THEN _
  961.         RETURN
  962.      GOTO 9701
  963. 9761 IF ZUserIn$ <> "A" THEN _                                       ' KG012401
  964.         NumNewBullets = ZWasQ _                                      ' KG012401
  965.      ELSE _                                                          ' KG012401
  966.         FOR Temp = 1 TO NumNewBullets : _                            ' KG012401
  967.            ZUserIn$(Temp) = ZOutTxt$(Temp+1) : _                     ' KG012401
  968.         NEXT                                                         ' KG012401
  969.      RETURN                                                          ' KG012401
  970.  
  971. ------------------------[ KG012301]-------------------------
  972.  
  973. Problem:  When join a conference, reading continuuously, being
  974. asked if want to check messages.  It is not possible to stack any
  975. answer to this prompt.
  976.  
  977. Solution:  Change RBBS-PC.BAS as follows:
  978.  
  979. 1895 IF TurboLogon OR ZNonStop THEN _                                ' KG012301
  980.         RETURN
  981.      ZOutTxt$ = "Check mail in " + ZConfName$ + " ([Y],N)"
  982.      GOSUB 12930                                                     ' KG012301
  983.      IF ZNo THEN _
  984.         SkipMain = ZTrue : _
  985.         RETURN
  986.      ZUserIn$(0) = LEFT$("NEW ",-4*LogonMailNew)
  987.  
  988. ------------------------[ KG012001]-------------------------
  989.  
  990. Problem:  Who command showing the speed of caller as the pc-to-modem
  991. speed, rather than the line speed.
  992.  
  993. Change RBBS-PC.BAS as follows:
  994.  
  995. 819 CALL Trim (ZWasCI$)
  996.     IF (ZNodeRecIndex < 2) THEN _
  997.        GOTO 821
  998.     GOSUB 4910
  999.     GOSUB 24000
  1000.     GET 1,ZNodeRecIndex
  1001.     MID$(ZMsgRec$,1,31) = ZActiveUserName$ + _
  1002.                                  SPACE$(31 - LEN(ZActiveUserName$))
  1003.     MID$(ZMsgRec$,40,2) = " 0"
  1004.     MID$(ZMsgRec$,44,2) = RIGHT$(STR$(-ZBPS),2)
  1005.     MID$(ZMsgRec$,55,2) = " 0"
  1006.     MID$(ZMsgRec$,57,1) = "A"
  1007.     MID$(ZMsgRec$,60,5) = ZTalkToModemAt$ + _
  1008.                                  SPACE$(5 - LEN(ZTalkToModemAt$))
  1009.     MID$(ZMsgRec$,72,2) = " 0"
  1010.     MID$(ZMsgRec$,79,5) = ZCBaud$ + SPACE$(5 - LEN(ZCBaud$))         ' KG012001
  1011.     MID$(ZMsgRec$,93,24) = ZWasCI$ + _
  1012.                                   SPACE$(24)
  1013.     PUT 1,ZNodeRecIndex
  1014.     GOSUB 12985
  1015.  
  1016. Change RBBSSUB2.BAS as follows:
  1017.  
  1018. 9801 ' $SUBTITLE: 'WhosOn - subroutine to display who is on'
  1019. ' $PAGE
  1020. '
  1021. '  NAME    -- WhosOn
  1022. '
  1023. '  INPUTS  --     PARAMETER                    MEANING
  1024. '                NumNodes                   # of nodes to check
  1025. '                ZActiveMessageFile$        Current message file
  1026. '                ZOrigMsgFile$              Main msg file
  1027. '
  1028. '  OUTPUTS --  None
  1029. '
  1030. '  PURPOSE --  To display who is on each node.
  1031. '
  1032.      SUB WhosOn (NumNodes) STATIC
  1033.      WasA1$ = ZActiveMessageFile$
  1034.      ZActiveMessageFile$ = ZOrigMsgFile$
  1035.      CALL OpenMsg
  1036.      FIELD 1, 128 AS ZMsgRec$
  1037.      FOR NodeIndex = 2 TO NumNodes + 1
  1038.         GET 1,NodeIndex
  1039.         ZOutTxt$ = ZFG1$ + "Node" + _
  1040.              STR$(NodeIndex - 1) + ZFG2$
  1041.         WasAX$ = MID$(ZMsgRec$,79,5)                                 ' KG012001
  1042.         CALL Trim (WasAX$)                                           ' KG012001
  1043.         WasAX$ = RIGHT$("     " + WasAX$,5) + _                      ' KG012001
  1044.               " BPS: "
  1045.         IF MID$(ZMsgRec$,55,2) = "-1" AND NOT ZSysop THEN _
  1046.            ZWasY$ = "SYSOP" + SPACE$(21) _
  1047.         ELSE ZWasY$ = MID$(ZMsgRec$,1,26)
  1048.         WasAX$ = WasAX$ + ZFG3$ + ZWasY$
  1049.         IF MID$(ZMsgRec$,40,2) <> "-1" THEN _
  1050.            WasAX$ = WasAX$ + ZFG4$ + MID$(ZMsgRec$,93,22)
  1051.         IF MID$(ZMsgRec$,57,1) = "A" THEN _
  1052.            ZOutTxt$ = ZOutTxt$ + "  Online at " + _
  1053.                 WasAX$ _
  1054.         ELSE IF NOT ZSysop THEN _
  1055.                 ZOutTxt$ = ZOutTxt$ + _
  1056.                      " Waiting for next caller" _
  1057.              ELSE ZOutTxt$ = ZOutTxt$ + _
  1058.                        " Offline at " + _
  1059.                        WasAX$
  1060.         CALL QuickTPut1 (ZOutTxt$)
  1061.         CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse)
  1062.         IF ZNo THEN _
  1063.            NodeIndex = NumNodes + 2
  1064.      NEXT
  1065.      ZActiveMessageFile$ = WasA1$
  1066.      CALL QuickTPut (ZEmphasizeOff$,0)
  1067.      END SUB
  1068.  
  1069. ------------------------[ KG011501]-------------------------
  1070.  
  1071. Problem:  menu for an option is shown automatically when an option
  1072. picked that does not exist, such as a conference.  The mistake is
  1073. usually a misspelling versus ignorance of what options exist.  Therefore,
  1074. don't automatically put the menu up.  If novice, put it up.  If expert,
  1075. don't.  Caller can ask for a L)ist to get the list of options.  Was
  1076. penalizing the misspeller too much.
  1077.  
  1078. Change RBBSSUB4.BAS as follows.
  1079.  
  1080. 59510 ZFileName$ = CurMenu$
  1081.       InMenu = ZTrue
  1082.       CALL BreakFileName (FrontOpt$,WasX$,FrontPre$,ZWasDF$,ZTrue)
  1083.       CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue)
  1084.       MenuFront$ = MenuDrv$ + LEFT$(WasX$,LEN(WasX$)-LEN(PreSuf$))
  1085.       IF CurMenu$ = LastSubMenu$ THEN _
  1086.          MenuFront$ = LEFT$(MenuFront$,LEN(MenuFront$)-1)
  1087.       CALL Graphic (ZFileName$)
  1088.       CurMenuVer$ = ZFileName$
  1089.       ZStopInterrupts = ZFalse
  1090. 59514 IF ZAnsIndex < ZLastIndex OR ZExpertUser THEN _                ' KG011501
  1091.          GOTO 59520
  1092.  
  1093. 59532 GOSUB 59547
  1094.       GOTO 59514                                                     ' KG011501
  1095.  
  1096. ------------------------[ KG011201]-------------------------
  1097.  
  1098. Enhancement:  Enhancements macro stack command ({ST) to stack carriage-
  1099. returns using the "|" symbol.  Also, enhances the message section to
  1100. support entering a message thru the macro stack.  This allows messages
  1101. to be automatically generated by macros.
  1102.  
  1103. Change RBBS-PC.BAS as follows:
  1104.  
  1105. 2010 IF NOT QuotedReply THEN _
  1106.         ZLinesInMsg = 0 : _                                          ' KG011201
  1107.         WasL = 0 : _
  1108.         WasX = 0 : _
  1109.         REDIM ZOutTxt$(ZMsgDim)
  1110.      IF ZGetExtDesc THEN _
  1111.         GOTO 2100
  1112.      GOSUB 1893
  1113.      RcvrRecNum = 0
  1114.  
  1115. Change RBBSSUB2.BAS as follows:
  1116.  
  1117. 3730 IF TabToSpace > 0 THEN _
  1118.         WasX$ = " " : _
  1119.         TabToSpace = TabToSpace - 1 : _
  1120.         GOTO 3750
  1121.      CALL FindFKey
  1122.      IF ZSubParm < 0 THEN _
  1123.         EXIT SUB
  1124.      WasX$ = ZKeyPressed$
  1125.      IF WasX$ = "" THEN _
  1126.         GOTO 3732 : _                                                ' KG011201
  1127.         IF ZLocalUser THEN _
  1128.            GOTO 3733 _
  1129.         ELSE GOTO 3732
  1130.      IF WasX$ = ZEscape$ THEN _
  1131.         ZKeyPressed$ = WasX$ : _
  1132.         EXIT SUB
  1133.      SendRemote = ZTrue
  1134.      WasZ = INSTR(ZLineEditChk$,WasX$)
  1135.      IF WasZ < 1 THEN _
  1136.         GOTO 3750 _
  1137.      ELSE IF WasZ > 4 THEN _
  1138.              GOTO 3870 _
  1139.      ELSE IF WasZ = 1 THEN _
  1140.              GOTO 3810
  1141.      IF ZLocalUser THEN _
  1142.         GOTO 3730
  1143. * REPLACING old line(s) by new
  1144. 3732 IF ZCommPortStack$ <> "" THEN _
  1145.         WasX$ = LEFT$(ZCommPortStack$,1) : _
  1146.         ZCommPortStack$ = RIGHT$(ZCommPortStack$,LEN(ZCommPortStack$)-1) : _
  1147.         GOTO 3738
  1148.      IF NOT ZLocalUser THEN _                                        ' KG011201
  1149.         CALL EofComm (Char) : _                                      ' KG011201
  1150.         IF Char <> -1 THEN _                                         ' KG011201
  1151.            GOTO 3736                                                 ' KG011201
  1152.  
  1153. Change RBBSSUB5.BAS as follows:
  1154.  
  1155. 63355 CALL GlobalSrchRepl (WasX$,"|",ZCarriageReturn$,ZTrue)        ' KG011201
  1156.       ZCommPortStack$ = ZCommPortStack$ + WasX$ + ZCarriageReturn$  ' STack
  1157.       GOTO 63336
  1158.  
  1159. ------------------------[ KG100701]-------------------------
  1160.  
  1161. Problem:  Subboard def file is allowed to change the network
  1162. type.
  1163.  
  1164. Solution:  Change RBBSSUB1.BAS as follows:
  1165.  
  1166. 117 IF ZSubParm <> -62 THEN _
  1167.        IF PrevRead$ = ConfigFile$ THEN _
  1168.           EXIT SUB _
  1169.        ELSE PrevRead$ = ConfigFile$
  1170.     CLOSE 2
  1171.     ZBulletinSave$ = ZBulletinMenu$
  1172.     CALL OpenWork (2,ConfigFile$)
  1173.     ZCurDef$ = ConfigFile$
  1174.     INPUT #2,ZWasDF$, _
  1175.              ZDnldDrives$, _
  1176.              ZSysopPswd1$, _
  1177.              ZSysopPswd2$, _
  1178.              ZSysopFirstName$, _
  1179.              ZSysopLastName$, _
  1180.              ZRequiredRings, _
  1181.              ZStartOfficeHours, _
  1182.              ZEndOfficeHours, _
  1183.              ZMinsPerSession, _
  1184.              ZWasDF, _
  1185.              ZWasDF, _
  1186.              ZUpldDir$, _
  1187.              ZExpertUserDef, _
  1188.              ZActiveBulletins, _
  1189.              ZPromptBellDef, _
  1190.              ZWasDF, _
  1191.              ZMenusCanPause, _
  1192.              ZMenu$(1), _
  1193.              ZMenu$(2), _
  1194.              ZMenu$(3), _
  1195.              ZMenu$(4), _
  1196.              ZMenu$(5), _
  1197.              ZMenu$(6), _
  1198.              ZConfMenu$, _
  1199.              ZTestANSITime, _
  1200.              ZWelcomeInterruptable, _
  1201.              ZRemindFileXfers, _
  1202.              ZPageLengthDef, _
  1203.              ZMaxMsgLinesDef, _
  1204.              ZDoorsAvail, _
  1205.              ZWasDF$, _
  1206.              ZMainMsgFile$, _
  1207.              ZMainMsgBackup$
  1208.     INPUT #2, WasX$, _
  1209.               ZCmntsFile$, _
  1210.               ZMainUserFile$, _
  1211.               ZWelcomeFile$, _
  1212.               ZNewUserFile$, _
  1213.               ZMainDirExtension$
  1214.     CALL BreakFileName (WasX$,ZWasY$,ZWasDF$,ZWasZ$,ZFalse)
  1215.     IF ZWasDF$ <> "" THEN _
  1216.        ZCallersFile$ = WasX$
  1217.     INPUT #2, ZWasDF$
  1218.     IF ZComPort$ <> "COM0" THEN _
  1219.        IF NOT ZConfMode THEN _
  1220.           ZComPort$ = ZWasDF$
  1221.     INPUT #2, ZBulletinsOptional, _
  1222.               ZModemInitCmd$, _
  1223.               ZRTS$, _
  1224.               ZCallersLst$, _
  1225.               ZFG, _
  1226.               ZBG, _
  1227.               ZBorder
  1228.     IF ZConfMode THEN _
  1229.        INPUT #2, ZWasDF$, _
  1230.                  ZWasDF$ _
  1231.     ELSE INPUT #2, ZRBBSBat$ , _
  1232.                    ZRCTTYBat$
  1233.     INPUT #2,ZOmitMainDir$, _
  1234.              ZFirstNamePrompt$, _
  1235.              ZHelp$(3), _
  1236.              ZHelp$(4), _
  1237.              ZHelp$(7), _
  1238.              ZHelp$(9), _
  1239.              ZBulletinMenu$, _
  1240.              ZBulletinPrefix$, _
  1241.              ZWasDF$, _
  1242.              ZMsgReminder, _
  1243.              ZRequireNonASCII, _
  1244.              ZAskExtendedDesc, _
  1245.              ZMaxNodes                                               ' KG100701
  1246.     IF ZConfMode THEN _                                              ' KG100701
  1247.        INPUT #2, ZwasDF, ZwasDF _                                    ' KG100701
  1248.     ELSE INPUT #2, ZNetworkType, _                                   ' KG100701
  1249.                    ZRecycleToDos
  1250.     INPUT #2,ZWasDF, _
  1251.              ZWasDF, _
  1252.              ZTrashcanFile$
  1253.                 .
  1254.                 .
  1255.                 .
  1256.  
  1257. ------------------------[ KG092301]-------------------------
  1258.  
  1259. Enhancement.  This makes it possible to write macros so that they
  1260. work the same reguardless of whether the user is in turbo-key mode.
  1261. When passing keystrokes in a macro, simply begin them with "/".
  1262. When the user is in turbo-key mode, this will simply suspend it
  1263. for that line.   When not in turbo-key mode, this change will
  1264. strip out a leading "/".   The effect will make the line work
  1265. exactly the same.  Note:  if you want the macro to pass the "/"
  1266. as a keystroke, simply add a space (" /" will have the
  1267. same effect as "/" prior to this change).
  1268.  
  1269. Change RBBSSUB2.BAS as follows:
  1270.  
  1271. 1534 ZUserIn$ = ZOutTxt$   ' Not Macro command - pass to normal processing
  1272. ' * strip off leading slash when not in turbokey mode so macros can be
  1273. ' * written to work in both turbo and non-turbo-key mode
  1274.      IF LEFT$(ZUserIn$,1) = "/" THEN IF NOT ZTurboKeyUser THEN _     ' KG092301
  1275.         ZUserIn$ = RIGHT$(ZUserIn$,LEN(ZUserIn$)-1) : _              ' KG092301
  1276.         ZTurboKey = ZFalse                                           ' KG092301
  1277.      IF ZMacroEcho THEN _
  1278.         ZSubParm = 4 : _
  1279.         CALL TPut
  1280.      WasX$ = ZCarriageReturn$
  1281.      GOTO 1547
  1282.  
  1283. ------------------------[ KG092201]-------------------------
  1284.  
  1285. Problem:  RBBS gets the line speed but doesn't report it to the
  1286. caller or log it to callers file.
  1287.  
  1288. Change RBBS-PC.BAS as follows:
  1289.  
  1290. 800 IF ZAdjustedSecurity THEN _
  1291.        GOSUB 5135
  1292.     IF ZOrigCnfg$ = ZCurDef$ THEN _
  1293.        ZMainUserFileIndex = ZUserFileIndex : _
  1294.        ZOrigSec = ZUserSecLevel : _
  1295.        ZUserSecSave = ZUserSecLevel : _
  1296.        ZOrigUserName$ = ZActiveUserName$
  1297.     ZTimesLoggedOn = CVI(MID$(ZUserOption$,1,2)) - _
  1298.        ((ZOrigCnfg$ <> ZCurDef$ OR NOT ZSubBoard) AND _
  1299.         (NOT ZPrivateDoor) AND (NOT ZExitToDoors))
  1300.     GOSUB 9500
  1301.     IF (NOT ZExitToDoors) AND (NOT ZSubBoard) THEN _
  1302.        CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
  1303.                  " Lvl" + STR$(ZUserSecLevel) + " " + TIME$,2) : _   ' KG092201
  1304.        CALL UpdtCalr ("Line Speed " + ZCBaud$,2)                     ' KG092201
  1305.     PrevLastOn$ = ZLastDateTimeOn$
  1306.     IF ZLocalUser THEN _
  1307.        ZTalkToModemAt$ = "9600" : _
  1308.        ZBaudParity$ = "9600 BPS,N,8,1" : _
  1309.        ZModemInitBaud$ = "9600" : _
  1310.        ZSnoop = ZTrue : _
  1311.        ZLineFeeds = ZTrue
  1312.     CALL SetCrLf
  1313.     CALL SetPrompt
  1314.     CALL XferType (2,ZTrue)
  1315.     IF NOT ZSubBoard THEN _
  1316.        BoardCheckDate$ = PrevLastOn$
  1317.     CALL SetSysOp
  1318.     IF ZWasA THEN _
  1319.        ZActiveUserName$ = "SYSOP" : _
  1320.        ZFirstName$ = "SysOp"
  1321.     IF ZExitToDoors OR ZSubBoard THEN _
  1322.        GOTO 815
  1323.     GOSUB 465
  1324.     IF (ZEightBit AND _
  1325.        ZAutoDownDesired) OR _
  1326.        ZAskID THEN _
  1327.        CALL TestUser
  1328.     CALL QuickTPut1 ("Logging " + ZActiveUserName$)
  1329.     CALL Talk (1,ZOutTxt$)
  1330.     Temp$ = STR$(ZBaudTest!) + MID$(ZBaudParity$,INSTR(ZBaudParity$," B"))
  1331.     CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " Node " + ZNodeID$) ' KG092201
  1332.     CALL QuickTPut1 ("Line speed " + ZCBaud$  + "  Host operating at" + Temp$) ' KG092201
  1333.     CALL SkipLine (1)
  1334.     Attempts = 0
  1335.     ZWasZ$ = ZActiveUserName$ + _
  1336.             " on at " + _
  1337.             ZCurDate$ + _
  1338.             ", " + _
  1339.             ZTime$ + _
  1340.             " from " + _
  1341.             ZWasCI$ + _
  1342.             "," + Temp$
  1343.      ZWasNG$ = ZWasZ$ + SPACE$(128 - LEN(ZWasZ$))
  1344. '
  1345. ' *  ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
  1346. '
  1347.      WasX$ = "{" + _
  1348.           HashValue$ + _
  1349.           "/" + _
  1350.           ZIndivValue$ + _
  1351.           "}"
  1352.      IF LEN(ZWasZ$) < 65 THEN _
  1353.         WasX = 65 _
  1354.      ELSE WasX = LEN(ZWasZ$) + 2
  1355.      MID$(ZWasNG$,WasX) = WasX$
  1356.      CALL Printit ("  " + ZWasZ$)
  1357.      IF ZNewUser THEN _
  1358.         CALL UpdtCalr ("NEWUSER",1) : _
  1359.         CALL Muzak (2)
  1360. '
  1361. ' *****  NOTIFY CALLER IF ABLE TO "AUTODOWN"  ****
  1362. '
  1363.     IF ZEightBit AND ZAutoDownYes THEN _
  1364.        ZOutTxt$ = CHR$(9) + _
  1365.             ZReturnLineFeed$ + _
  1366.             "You may use AUTODOWNLOADing!" : _
  1367.        CALL RingCaller : _
  1368.        CALL DelayTime(4)
  1369.  
  1370. ------------------------[ KG091002]-------------------------
  1371.  
  1372. Problem:  Possible to get an untrapped error when the FMS directory 
  1373. being read does not match in length that specified in CONFIG.  This
  1374. changes makes the FMS directory readable without error even when it
  1375. does not match.
  1376.  
  1377. 58190 ' $SUBTITLE: 'OpenFMS - subroutine to open the FMS directory'
  1378. ' $PAGE
  1379. '
  1380. '  NAME    -- OpenFMS
  1381. '
  1382. '  INPUTS  -- PARAMETER                      MEANING
  1383. '             ZShareIt                DOS SHARING FLAG
  1384. '             ZFMSDirectory$          NAME OF FMS DIRECTORY
  1385. '
  1386. '  OUTPUTS -- LastRec                NUMBER OF THE Last
  1387. '                                    RECORD IN THE FILE
  1388. '             CatLen                 Length of the category code
  1389. '
  1390. '  PURPOSE -- To open the upload directory as a random file and find
  1391. '             the number of the last record in the file.
  1392. '
  1393.       SUB OpenFMS (LastRec,CatLen) STATIC
  1394.       ON ERROR GOTO 65000
  1395.       CLOSE 2
  1396.       IF ZActiveFMSDir$ = "" THEN _
  1397.          IF ZMenuIndex = 6 THEN _
  1398.             ZActiveFMSDir$ = ZLibDir$ _
  1399.          ELSE ZActiveFMSDir$ = ZFMSDirectory$
  1400.       OldFile = (ZActiveFMSDir$ = PrevFMS$)
  1401.       IF OldFile THEN _
  1402.          GOTO 58192
  1403.       CALL OpenWork (2,ZActiveFMSDir$)
  1404.       CALL ReadDir (2,1)
  1405.       IF ZErrCode > 0 OR LEN(ZOutTxt$) < 37 THEN _                   ' KG091002
  1406.          IF ZActiveFMSDir$ = ZPersonalDir$ THEN _
  1407.             ZFMSFileLength = 36 + ZMaxDescLen + ZPersonalLen _
  1408.          ELSE ZFMSFileLength = 38 + ZMaxDescLen _
  1409.       ELSE ZFMSFileLength = LEN(ZOutTxt$) + 2
  1410.       IF ZFMSFileLength < 86 THEN _                                  ' KG091002
  1411.          CalcCatLen = 3 : _                                          ' KG091002
  1412.          ZMaxDescLen = ZFMSFileLength - 38 _                         ' KG091002
  1413.       ELSE CalcCatLen = ZPersonalLen : _                             ' KG091002
  1414.            ZMaxDescLen = ZFMSFileLength - 36 - ZPersonalLen          ' KG091002
  1415.       CLOSE 2
  1416.  
  1417. ------------------------[ KG091001]-------------------------
  1418.  
  1419. Problem:  When personal files are stored in the drive/path for personal
  1420. files, and this drive/path is not in download areas, then the file can
  1421. be downloaded but not viewed.   This makes those personal files viewed,
  1422. but subject to the same constaints as downloading, so that when in
  1423. the personal directory callers can view only those files listed and to
  1424. them.   Note:  this change is an improvement on one submitted by
  1425. Tom Hansen and Dan Shore.
  1426.  
  1427. Solution:  Change RBBSSUB2.BAS as follows:
  1428.  
  1429. 20142 IF ZAnsIndex > ZLastIndex THEN _
  1430.          IF ZLastIndex > 1 OR Drive$ <> "" THEN _                    ' KG091001
  1431.             EXIT SUB _
  1432.          ELSE GOTO 20141
  1433.       GOSUB 20143
  1434.       IF ZSubParm < 0 THEN _
  1435.          EXIT SUB
  1436.       ZAnsIndex = ZAnsIndex + 1
  1437.       GOTO 20142
  1438.  
  1439. 20145 IF Drive$ <> "" THEN _                                         ' KG091001
  1440.          ZFileNameHold$ = Prefix$ + "." + Ext$ : _                   ' KG091001
  1441.          CALL FindFile (ZFileName$,ZOK) _                            ' KG091001
  1442.       ELSE CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,"V") ' KG091001
  1443.       IF ZOK THEN _
  1444.          GOTO 20148
  1445.  
  1446. Change RBBSSUB3.BAS as follows:
  1447.  
  1448. 58181 MarkingFiles = ZFalse
  1449.       IF ((WasX$ = "D" OR WasX$ = "M") AND CanDnld) OR (WasX$ = "V" AND CanView) THEN _ ' KG091001
  1450.          MarkingFiles = (WasX$ = "M") : _
  1451.          CALL AskItems ("DMV",WasX$,ZTrue,"file",ZMarkedFiles$) : _   ' KG091001
  1452.          IF ZWasQ = 0 THEN _
  1453.             GOTO 58183
  1454.       IF WasX$ = "*" THEN IF ZPersonalDnld THEN _
  1455.          GOTO 58193
  1456.  
  1457. 58183 IF ZJumpSearching THEN _
  1458.          PrevSearch$ = SearcFor$ : _
  1459.          SearchFor$ = ZJumpTo$ _
  1460.       ELSE SearchFor$ = SearchString$ : _
  1461.            IF NOT ZYes AND CanDnld THEN _
  1462.               GOSUB 58188 : _
  1463.               IF WasX$ = "V" AND CanView AND ZLastIndex >= ZAnsIndex THEN _ ' KG091001
  1464.                  ZAnsIndex = ZAnsIndex - 1 : _                       ' KG091001
  1465.                  CALL GetArc : _                                     ' KG091001
  1466.                  ZJumpSupported = ZTrue : _                          ' KG091001
  1467.                  ZWasA = UpldIndex : _                               ' KG091001
  1468.                  GOSUB 58185 : _                                     ' KG091001
  1469.                  UpldIndex = ZWasA : _                               ' KG091001
  1470.                  GOTO 58180 _                                        ' KG091001
  1471.               ELSE IF WasX$ <> "L" AND ZLastIndex >= ZAnsIndex AND NOT MarkingFiles THEN _
  1472.                  CALL SkipLine (1) : _
  1473.                  DnldFlag = 1 : _
  1474.                  ReListAt = UpldIndex : _
  1475.                  EXIT SUB _      ' exit for downloading
  1476.               ELSE IF UpldIndex = CutoffRec THEN _
  1477.                       GOTO 58184
  1478.       IF ZNonStop THEN IF UpldIndex > 999 THEN _
  1479.          IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
  1480.             ZOutTxt$ = STR$(UpldIndex) + _
  1481.                " lines left to search.  Really go non-stop? (Y,[N])" : _
  1482.             ZNoAdvance = ZTrue : _
  1483.             ZTurboKey = -ZTurboKeyUser : _
  1484.             ZSubParm = 1 : _
  1485.             CALL TGet : _
  1486.             CALL WipeLine (79) : _
  1487.             ZNonStop = ZYes
  1488.       GOTO 58168
  1489.  
  1490. 58188 IF ProcessedNew OR MarkingFiles OR NOT ZListOnly THEN _
  1491.          ProcessedNew = ZFalse : _
  1492.          RETURN
  1493.       ZUserIn$(0) = ""
  1494.       WasI = ZAnsIndex              ' check whether in dir
  1495.       WHILE WasI <= ZLastIndex
  1496.          CALL AraAllCaps (ZUserIn$(),WasI)
  1497.          ZWasZ$ = ZUserIn$(WasI)
  1498.          CALL UnMarkItems (ZMarkedFiles$,WasI,ZLastIndex,WasX,ZTrue)
  1499.          Temp$ = ZUserIn$(WasI)
  1500.          CALL AllCaps (Temp$)                                        ' KG062401
  1501. 'print "wasi=";wasi;" temp$=<";temp$;"> Zdef=<";zdefaultxfer$;">"
  1502.          IsProto = (LEN(Temp$) = 1 AND _
  1503.                     INSTR(ZDefaultXfer$,Temp$) > 0)
  1504.          ZOK = IsProto
  1505.          WasJ = LastRec + 1
  1506.          WasX = INSTR(Temp$,".")
  1507.          AltTemp$ = ""
  1508.          IF NOT IsProto THEN _
  1509.             IF WasX = 0 THEN _
  1510.                AltTemp$ = Temp$ + "." + ZDefaultExtension$ _
  1511.             ELSE IF WasX = LEN(Temp$) THEN _
  1512.                     AltTemp$ = LEFT$(Temp$,WasX-1)
  1513. 'print "58188 b4 while zok=";zok;" wasj=";wasj;" looking for <";temp$;">"
  1514.          WHILE WasJ > 1 AND NOT ZOK
  1515.             WasJ = WasJ - 1
  1516.             GET #2,WasJ
  1517.             GOSUB 58191
  1518. 'print "bk 58191 canget=";catget;" ptp<";parttoprint$;">";:input xx$
  1519.             IF CanGet THEN _
  1520.                MID$(PartToPrint$,13,1) = " " : _
  1521.                ZWasY$ = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1) : _ ' KG091001
  1522.                ZOK = (Temp$ = ZWasY$) : _                            ' KG091001
  1523.                IF NOT ZOK THEN _
  1524.                   IF AltTemp$ <> "" THEN _
  1525.                      ZOK = (AltTemp$ = ZWasY$)                       ' KG091001
  1526.          WEND
  1527. 'print "58188 aft while zok=";zok;" wasj=";wasj;" looking for <";temp$;">":input xxx$
  1528.          IF ZOK THEN _
  1529.             GOSUB 58189 : _
  1530.             IF ZOK OR IsProto THEN _
  1531.                ZWasY$ = MID$(STR$(WasJ),2) : _                       ' KG091001
  1532.                ZUserIn$(0) = ZUserIn$(0) + _
  1533.                        ZWasY$ + _                                    ' KG091001
  1534.                        SPACE$(5 - LEN(ZWasY$))                       ' KG091001
  1535.          IF NOT ZOK AND NOT IsProto THEN _
  1536.             CALL QuickTPut1 (ZWasZ$ + " not found - omitted") : _
  1537.             FOR WasK = WasI + 1 TO ZLastIndex : _
  1538.                ZUserIn$(WasK - 1) = ZUserIn$(WasK) : _
  1539.             NEXT : _
  1540.             ZLastIndex = ZLastIndex - 1 : _
  1541.             WasI = WasI - 1
  1542.          WasI = WasI + 1
  1543.       WEND
  1544.       ZWasQ = ZLastIndex
  1545. 'print "end 58188 zlastindex=";zlastindex;" zok=";zok
  1546.       RETURN
  1547.  
  1548. 58196 CALL QuickTPut (ZEmphasizeOff$,0)
  1549.       ZOutTxt$ = Temp$ + "L)ist,A)bort," + _
  1550.                  LEFT$("*)dnld new,",-11*ZPersonalDnld) + _
  1551.                  "M)ark" + LEFT$(",D)nld",-6*CanDnld) + _
  1552.                   LEFT$(",V)iew",-6*CanView) + ZPressEnterExpert$
  1553.       ZTurboKey = -ZTurboKeyUser
  1554.       CALL PopCmdStack
  1555.       WasX$ = ZUserIn$(ZAnsIndex)
  1556.       CALL AllCaps (WasX$)
  1557.       IF WasX$ = "A" THEN ZRet = ZTrue
  1558.       IF ZWasQ = 0 OR ZRet OR ZSubParm < 0 THEN _
  1559.          GOTO 58198
  1560.       IF WasX$ = "L" THEN _
  1561.          ZActiveFMSDir$ = OrigDir$ : _
  1562.          GOSUB 58185 : _
  1563.          AtEndList = ZFalse : _
  1564.          GOTO 58168                                                  ' KG091001
  1565.       ZYes = ZFalse
  1566.       GOTO 58181
  1567.  
  1568. ------------------------[ KG082201]-------------------------
  1569.  
  1570. Enhancement:  Lets the SysOp upload to a security level.
  1571.  
  1572. Change RBBSSUB2.BAS as follows:
  1573.  
  1574. 2032 RcvrRecNum = 0
  1575.      IF MsgTo$ <> "ALL" THEN _
  1576.         IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
  1577.            CALL CheckInt (MsgTo$) : _                                ' KG082201
  1578.            IF ZTestedIntValue = 0 OR NOT ZSysOp THEN _               ' KG082201
  1579.               ZWasDF = INSTR(MsgTo$+" @"," @") : _
  1580.               TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _
  1581.               CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
  1582.               IF NOT Found THEN _
  1583.                  ZLastIndex = 0 : _
  1584.                  RcvrRecNum = 0 : _
  1585.                  IF NOT ZReply THEN _
  1586.                     ZOutTxt$ = "Send anyway (Y,[N])" : _
  1587.                     ZTurboKey = -ZTurboKeyUser : _
  1588.                     ZLastIndex = 0 : _
  1589.                     GOSUB 2034 : _
  1590.                     IF NOT ZYes THEN _
  1591.                        GOTO 2021
  1592.      IF MsgTo$ = Temp$ THEN _
  1593.         ZOutTxt$ = "Really send this to YOURSELF (Y,[N])" : _
  1594.         ZLastIndex = 0 : _
  1595.         GOSUB 2034 : _
  1596.         IF NOT ZYes THEN _
  1597.            MsgTo$ = ""
  1598.      CALL OpenWorkA (ZNodeWorkFile$)
  1599.      CALL PrintWorkA (MsgTo$ + "," + STR$(RcvrRecNum))
  1600.      CLOSE 2
  1601.      ZNumHeaders = ZNumHeaders + 1
  1602.      IF EnableCC AND (NOT ZReply) AND MsgTo$ <> "ALL" AND _
  1603.         MsgTo$ <> "" AND LEFT$(MsgTo$,4) <> "ALL " AND _
  1604.         (NOT ZSysopComment) AND (NOT ZSysopMsg) THEN _
  1605.            ZOutTxt$ = "Carbon copy to another (Y,[N])" : _
  1606.            CALL PopCmdStack : _
  1607.            IF ZYes THEN _
  1608.               GOTO 2021
  1609.  
  1610. Change RBBSSUB3.BAS as follows:
  1611.  
  1612. 20717 CALL FindItX (ZNodeWorkFile$,7)
  1613.       ZUserIn$ = Desc$
  1614.       WasX$ = DATE$
  1615.       ZWasZ$ = LEFT$(WasX$,6) + _
  1616.            RIGHT$(WasX$,2)
  1617.       ZWasEN$ = ZPersonalDir$
  1618.       NumPersonals = 0
  1619.       IF NOT ZOK THEN _
  1620.          GOTO 20718
  1621.       UserFileIndexSave = ZUserFileIndex
  1622.       UserRecordHold$ = ZUserRecord$
  1623.       WHILE NOT EOF(7)
  1624.          CALL ReadParmsX (7,ZWorkAra$(),2,1)
  1625.          IF LEFT$(ZWorkAra$(1),4) <> "ALL " AND ZWorkAra$(1) <> "ALL" THEN _
  1626.             NumPersonals = NumPersonals + 1 : _
  1627.             UCat$ = ZWorkAra$(1) : _
  1628.             GOSUB 20737 : _                                          ' KG082201
  1629.             GOSUB 20728 : _
  1630.             RcvrRecNum = VAL (ZWorkAra$(2)) : _
  1631.             CALL SetUserFlag (RcvrRecNum,4096,"file")
  1632.       WEND
  1633.       CLOSE 7
  1634.       IF NumPersonals > 0 THEN _
  1635.          ZUserFileIndex = UserFileIndexSave : _
  1636.          LSET ZUserRecord$ = UserRecordHold$ : _
  1637.          GOTO 20723
  1638.  
  1639. 20736 IF NOT ZOK THEN _
  1640.          ZBytesInFile# = 0.0_
  1641.       ELSE ZBytesInFile# = LOF(2)
  1642.       IF ZBytesInFile# < 2.0 THEN _
  1643.          EXIT SUB
  1644.       RETURN                                                         ' KG082201
  1645. 20737 CALL CheckInt (UCat$)                                          ' KG082201
  1646.       IF ZTestedIntValue > 0 THEN _                                  ' KG082201
  1647.          UCat$ = " " + UCat$                                         ' KG082201
  1648.       RETURN                                                         ' KG082201
  1649.       END SUB
  1650.  
  1651. ------------------------[ KG082101]-------------------------
  1652.  
  1653. Problem:  Possible for caller to regain banked time.   Also, the
  1654. session limit specified in a subboard config may fail to get
  1655. applied.
  1656.  
  1657. Solution:  Change RBBSSUB2.BAS as follows:
  1658.  
  1659. 120 '  $SUBTITLE: 'EditDef - sub to edit config parameters'
  1660. '  $PAGE
  1661. '
  1662. '  NAME    -- EditDef
  1663. '
  1664. '  INPUTS  --     PARAMETER                    MEANING
  1665. '
  1666. '  OUTPUTS --                          OUTPUT STRING
  1667. '
  1668. '  PURPOSE -- Interpretes and adjusts stored configuration parameters
  1669. '
  1670.       SUB EditDef STATIC
  1671.       ZMinsPerSessionDef = ZMinsPerSession                           ' KG082101
  1672.       ZAllOpts$ = ZMainCmds$ + _
  1673.                   ZFileCmd$ + _
  1674.                   ZUtilCmds$ + _
  1675.                   ZLibCmds$ + _
  1676.                   ZGlobalCmnds$ + _
  1677.                   ZSysopCmds$
  1678.                      .
  1679.                      .
  1680.                      .
  1681.  
  1682. 5503 IF SignTime = 1 THEN _
  1683.         ZOutTxt$ = "Withdraw" _
  1684.      ELSE ZOutTxt$ = "Deposit"
  1685.      Temp$ = ZOutTxt$ + " how many mins"
  1686.      CALL ChangeInt (ZFalse,Temp$,Temp,0,Maxtime)
  1687.      IF ZWasQ = 0 OR ZTestedIntValue = 0 THEN _
  1688.         GOTO 5501
  1689.      ZTestedIntValue = SignTime * ZTestedIntValue
  1690.      CALL ChkAddedTime (ZTestedIntValue)
  1691.      IF ZTestedIntValue = 0 THEN _
  1692.         GOTO 5501
  1693.      ZSecsPerSession! = ZSecsPerSession! + (ZTestedIntValue * 60)
  1694.      IF ZMaxPerDay = 0 THEN _                                        ' KG082101
  1695.         ZTimeCredits! = ZTimeCredits! + ZTestedIntValue * 60         ' KG082101
  1696.      ZElapsedTime = ZElapsedTime - ZTestedIntValue
  1697.      ZGlobalBankTime = ZGlobalBankTime - ZTestedIntValue
  1698.      GOSUB 5507
  1699.      GOTO 5501
  1700.  
  1701. ------------------------[ KG070401]-------------------------
  1702.  
  1703. Problem:  The UTIL.HLP refers to "B)aud change" when this has
  1704. become "B)ank time".
  1705.  
  1706. Solution:  a replacement UTIL.HLP is provided.
  1707.  
  1708. ------------------------[ RH070402]-------------------------
  1709.  
  1710. Problem:  When viewing a callers file and timeout at the More prompt,
  1711. get untrapped error.
  1712.  
  1713. Solution:  Change RBBSSUB3.BAS as follows:
  1714.  
  1715. 57100 IF INSTR(ZOutTxt$,"LOGON DENIED") OR INSTR(ZOutTxt$,"Lvl ")THEN _
  1716.          IF NOT ZSysOp THEN _
  1717.             RETURN
  1718.       IF ZJumpSearching THEN _
  1719.          ZWasDF$ = ZOutTxt$ : _
  1720.          CALL AllCaps (ZWasDF$) : _
  1721.          IF INSTR(ZWasDF$,ZJumpTo$) = 0 THEN _
  1722.             RETURN _
  1723.          ELSE CALL CheckColor (ZOutTxt$,ZJumpTo$,"") : _
  1724.               ZJumpSearching = ZFalse
  1725.       ZSubParm = 5
  1726.       CALL TPut
  1727.       WasX = 1
  1728.       CALL AskMore ("",ZTrue,ZTrue,WasX,ZFalse)
  1729.       IF ZSubParm = -1 THEN _                                        ' RH070402
  1730.          GOTO 57102 _                                                ' RH070402
  1731.       ELSE IF ZNo THEN _                                             ' RH070402
  1732.          GOTO 57101                                                  ' RH070402
  1733.       RETURN
  1734.  
  1735. ------------------------[ RH070401]-------------------------
  1736.  
  1737. Problem:  When SysOp views callers file on another node, thereafter
  1738. his own logging to caller's file goes to the other node's callers.
  1739.  
  1740. Solution:  Change RBBSSUB3.BAS as follows:
  1741.  
  1742. 57102 ZJumpSupported = ZFalse
  1743.       IF OrigCal$ <> ZCallersFile$ THEN _                            ' RH070401
  1744.          ZCallersFile$ = OrigCal$ : _
  1745.          CALL SetCall
  1746.       END SUB
  1747.  
  1748. ------------------------[ BH070401]-------------------------
  1749.  
  1750. Problem:  "[CBAUD]" can include a leading blank, which causes it not
  1751. to work with some external protocols, like HSLink.
  1752.  
  1753. Solution:  Change RBBSSUB2.BAS as follows:
  1754.  
  1755. (line 1654)
  1756.  
  1757.             .
  1758.             .
  1759.             .
  1760.       SUB SetBaud STATIC
  1761.      IF ZCBaud$ = "" THEN _
  1762.         ZCBaud$ = MID$(ZBaudRates$,(-5 * ZBPS),5) : _                ' BH070401
  1763.         CALL Trim (ZCBaud$)                                          ' BH070401
  1764.      Temp! = VAL(ZCBaud$)
  1765.             .
  1766.             .
  1767.             .
  1768.  
  1769. ------------------------[ KG062401]-------------------------
  1770.  
  1771. Problem:  When say to download marked files in a personal directory,
  1772. says unable to find "M".
  1773.  
  1774. Solution:  Change RBBSSUB3.BAS as follows:
  1775.  
  1776. 58181 MarkingFiles = ZFalse
  1777.       IF (WasX$ = "D" OR WasX$ = "M") THEN IF CanDnld THEN _
  1778.          MarkingFiles = (WasX$ = "M") : _
  1779.          CALL AskItems ("DM",WasX$,ZTrue,"file",ZMarkedFiles$) : _   ' KG062401
  1780.          IF ZWasQ = 0 THEN _
  1781.             GOTO 58183
  1782.       IF WasX$ = "*" THEN IF ZPersonalDnld THEN _
  1783.          GOTO 58193
  1784.  
  1785. 58188 IF ProcessedNew OR MarkingFiles OR NOT ZListOnly THEN _
  1786.          ProcessedNew = ZFalse : _
  1787.          RETURN
  1788.       ZUserIn$(0) = ""
  1789.       WasI = ZAnsIndex              ' check whether in dir
  1790.       WHILE WasI <= ZLastIndex
  1791.          CALL AraAllCaps (ZUserIn$(),WasI)
  1792.          ZWasZ$ = ZUserIn$(WasI)
  1793.          CALL UnMarkItems (ZMarkedFiles$,WasI,ZLastIndex,WasX,ZTrue)
  1794.          Temp$ = ZUserIn$(WasI)
  1795.          CALL AllCaps (Temp$)                                        ' KG062401
  1796. 'print "wasi=";wasi;" temp$=<";temp$;"> Zdef=<";zdefaultxfer$;">"
  1797.          IsProto = (LEN(Temp$) = 1 AND _
  1798.                     INSTR(ZDefaultXfer$,Temp$) > 0)
  1799.          ZOK = IsProto
  1800.          WasJ = LastRec + 1
  1801.          WasX = INSTR(Temp$,".")
  1802.          AltTemp$ = ""
  1803.          IF NOT IsProto THEN _
  1804.             IF WasX = 0 THEN _
  1805.                AltTemp$ = Temp$ + "." + ZDefaultExtension$ _
  1806.             ELSE IF WasX = LEN(Temp$) THEN _
  1807.                     AltTemp$ = LEFT$(Temp$,WasX-1)
  1808. 'print "58188 b4 while zok=";zok;" wasj=";wasj;" looking for <";temp$;">"
  1809.          WHILE WasJ > 1 AND NOT ZOK
  1810.             WasJ = WasJ - 1
  1811.             GET #2,WasJ
  1812.             GOSUB 58191
  1813. 'print "bk 58191 canget=";catget;" ptp<";parttoprint$;">";:input xx$
  1814.             IF CanGet THEN _
  1815.                MID$(PartToPrint$,13,1) = " " : _
  1816.                WasX$ = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1) : _
  1817.                ZOK = (Temp$ = WasX$) : _
  1818.                IF NOT ZOK THEN _
  1819.                   IF AltTemp$ <> "" THEN _
  1820.                      ZOK = (AltTemp$ = WasX$)
  1821.          WEND
  1822. 'print "58188 aft while zok=";zok;" wasj=";wasj;" looking for <";temp$;">":input xxx$
  1823.          IF ZOK THEN _
  1824.             GOSUB 58189 : _
  1825.             IF ZOK OR IsProto THEN _
  1826.                WasX$ = MID$(STR$(WasJ),2) : _
  1827.                ZUserIn$(0) = ZUserIn$(0) + _
  1828.                        WasX$ + _
  1829.                        SPACE$(5 - LEN(WasX$))
  1830.          IF NOT ZOK AND NOT IsProto THEN _
  1831.             CALL QuickTPut1 (ZWasZ$ + " not found - omitted") : _
  1832.             FOR WasK = WasI + 1 TO ZLastIndex : _
  1833.                ZUserIn$(WasK - 1) = ZUserIn$(WasK) : _
  1834.             NEXT : _
  1835.             ZLastIndex = ZLastIndex - 1 : _
  1836.             WasI = WasI - 1
  1837.          WasI = WasI + 1
  1838.       WEND
  1839.       ZWasQ = ZLastIndex
  1840. 'print "end 58188 zlastindex=";zlastindex;" zok=";zok
  1841.       RETURN
  1842.  
  1843. ------------------------[ KG062301]-------------------------
  1844.  
  1845. Problem:  When you stack message numbers, Read reads exactly those
  1846. messages.   But S)can and T)opic do not confine themselves to the
  1847. numbers.  Instead, "s 5" acts like "s 5+".
  1848.  
  1849. Solution:  Change RBBS-PC.BAS as follows:
  1850.  
  1851. 4380 WasA1$ = "Msg #" + _
  1852.            STR$(LowMsgNumber) + _
  1853.            "-" + _
  1854.            MID$(STR$(ZMsgPtr(ActiveMessages,2)),2) + _
  1855.            " (H)lp,S)ince,L)ast" + _
  1856.            LEFT$(",G)lobal",8*(ZLinkedConf$ ="" OR ZGlobalRead)+8)
  1857.      CALL SkipLine (-QuickScanMsgs)                                  ' KG062301
  1858.      IF ZGlobalRead THEN _
  1859.         CALL QuickTPut1 ("Reading globally")
  1860.      IF AddressedToUser OR ToRequested OR FromRequested THEN _
  1861.         ZWasY$ = LEFT$("TO",-2*(ToRequested OR AddressedToUser)) + _
  1862.              LEFT$("/",-AddressedToUser) + _
  1863.              LEFT$("FROM",-4*(FromRequested OR AddressedToUser)) : _
  1864.         CALL QuickTPut1 ("Include only msgs "+ZWasY$+" you.  Read what msgs (? for help)") _
  1865.      ELSE WasA1$ = WasA1$ + ",T)o,F)rom,M)" : _
  1866.           IF ReadMsgs AND ZMarkedMsgs$ <> "" THEN _
  1867.              WasA1$ = WasA1$ + "arked" _
  1868.           ELSE WasA1$ = WasA1$ + "ine"
  1869.      IF SearchString$ = "" THEN _
  1870.         WasA1$ = WasA1$ + _
  1871.              ", text" _
  1872.      ELSE CALL QuickTPut1 ("Include only msgs with text " + SearchString$ + ".  Read what msgs (? for help)")
  1873.  
  1874. 4418 ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
  1875.      IF ZWasA > 0 THEN _
  1876.         ToRequested = (ZWasA > 2) : _
  1877.         FromRequested = (ZWasA < 3) : _
  1878.         GOTO 4370
  1879.      IF CurMsg = 0 THEN _
  1880.         IF SearchHeader$ <> "" THEN _
  1881.            GOTO 4370 _
  1882.         ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _
  1883.              SearchCt = 0 : _
  1884.              CALL AllCaps (SearchString$) : _
  1885.              CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
  1886.              SearchHeader$ = SearchString$ : _
  1887.              SubInHeader$ = SearchHeader$ : _
  1888.              GOTO 4370
  1889.      CALL SkipLine (-ReadMsgs)                                       ' KG062301
  1890.  
  1891. 4630   CALL AskMore (",M)ark, #(s) to read",ZTrue,ZTrue,WasXX,ZFalse)
  1892.        IF ZWasQ = 0 OR ZYes THEN _
  1893.           GOTO 4631
  1894.        IF ZNo THEN _
  1895.           RETURN
  1896.        IF ZSubParm = -1 THEN _
  1897.           RETURN 10595
  1898.        IF ZRet THEN _
  1899.           RETURN
  1900.        ZWasZ$ = ZUserIn$(1)
  1901.        CALL AllCaps (ZWasZ$)
  1902.        IF ZWasZ$ = "M" THEN _
  1903.           ZLastIndex = ZWasQ : _
  1904.           ZAnsIndex = 1 : _
  1905.           CALL AskItems ("M",ZWasZ$,ZTrue,"msg",ZMarkedMsgs$)
  1906.        IF VAL(ZWasZ$) > 0 THEN _
  1907.           FOR WasI = ZWasQ TO 1 STEP -1 : _
  1908.              ZUserIn$(WasI + 1) = ZUserIn$(WasI) : _
  1909.           NEXT : _
  1910.           ZUserIn$(1) = MID$(ZAllOpts$,INSTR(ZOrigCommands$,"R"),1) : _
  1911.           ZLastIndex = ZWasQ + 1 : _
  1912.           ZAnsIndex = 1 : _
  1913.           RETURN 1235                                                ' KG062301
  1914. 4631   IF NOT Forward AND NOT Reverse THEN _                         ' KG062301
  1915.           GOTO 4370                                                  ' KG062301
  1916.         CALL CheckCarrier                                            ' KG062301
  1917.        IF ZSubParm THEN _
  1918.           RETURN 10595
  1919.        IF ZRet THEN _
  1920.           RETURN
  1921.  
  1922.