home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / BBS_UTIL / BM0406_A.ZIP / 0406.ZIP / RBBSSUB6.NEW < prev    next >
Text File  |  1994-04-06  |  166KB  |  3,695 lines

  1. ' $linesize:132
  2. ' $title: 'RBBS-SUB6.BAS 17.4, Copyright 1986-92 by D. Thomas Mack'
  3. '  Copyright 1990 by D. Thomas Mack, all rights reserved.
  4. '  Name ...............: RBBSSUB6.BAS
  5. '  First Released .....: June 21, 1992
  6. '  Subsequent Releases.: 
  7. '  Copyright ..........: 1986-1992
  8. '  Purpose.............: The Remote Bulletin Board System for the IBM PC,
  9. '     RBBS-PC.BAS utilizes a lot of common subroutines.  Those that do not
  10. '     require error trapping are incorporated within RBBSSUB 2-5 as
  11. '     separately callable subroutines in order to free up as much
  12. '     code as possible within the 64K code segment used by RBBS-PC.BAS.
  13. '  Parameters..........: Most parameters are passed via a COMMON statement.
  14. '
  15. ' Subroutine    Line               Function of Subroutine
  16. '  EchoSet      42849   subroutine to allow user to set echo pref    ' ES174/RM08069301
  17. ' FixMessageHdr 23100   subroutine fix message header                ' FM174/RM08059304
  18. '  GetLC        65030   subroutine to retrieve Last User on RBBS     ' LAST174
  19. ' GetMessageHdr 23000   subroutine get message header                ' GM174/RM08059303
  20. '  InitWelc      1761   subroutine to display Initial Welcome        ' IW174/RM08059306
  21. 'JoinConference  5300   subroutine to join a conference              ' JC174/RM08109301
  22. '  MsgSys        1797   Message System subroutine                    ' MS174/RM08129301
  23. '  PersInfo      5111   subroutine to change Personal Info           ' PI174/RM08059301
  24. '  QuestAns      1401   subroutine to answer questionaire            ' QA174/RM08059308
  25. ' ReadColorDef  65045   subroutine to retrieve Colors for RBBS       ' RM10019301
  26. 'ShowUsrProfile 65002   subroutine to display users profile          ' SP174
  27. '  Statistics   65000   Display users Statistics                     ' STAT174
  28. 'UpdtMessageHdr 24000   subroutine update message header             ' UM174/RM08059305
  29. '  UserMaint    11000   subroutine for SysOp user Maintenance        ' SU174/RM08079303
  30. '
  31. '  $INCLUDE: 'RBBS-VAR.BAS'
  32. '                                                                    ' GS174/RM08069303
  33. 1401  '$SUBTITLE: 'QuestAns -- subroutine to answer questionaire'    ' QA174/RM08059308
  34. ' $PAGE                                                              ' QA174/RM08059308
  35. '                                                                    ' QA174/RM08059308
  36. ' NAME: QuestAns                                                     ' QA174/RM08059308
  37. '                                                                    ' QA174/RM08059308
  38. ' PURPOSE: To allow user to answer questionaire.  Formerly in        ' QA174/RM08059308
  39. '          RBBS-PC.BAS                                               ' QA174/RM08059308
  40. '                                                                    ' QA174/RM08059308
  41. ' INPUTS:                                                            ' QA174/RM08059308
  42. '                                                                    ' QA174/RM08059308
  43. ' OUTPUTS:                                                           ' QA174/RM08059308
  44. '                                                                    ' QA174/RM08059308
  45. '                                                                    ' QA174/RM08059308
  46. '                                                                    ' QA174/RM08059308
  47.      SUB QuestAns (WhatQues, WasX)                                   ' QA174/RM08059308
  48.      ON WhatQues GOSUB 1402,1408                                     ' QA174/RM08059308
  49.      EXIT SUB                                                        ' QA174/RM08059308
  50. 1402 WasA1$ = ZAnsMenu$
  51.      CALL Talk (13,ZOutTxt$)
  52.      ReturnToPrompt = (ZWasQ > 1)
  53. 1405 ZStackC = ZTrue
  54.      CALL SubMenu ("Which questionnaire(s), L)ist" + ZPressEnterExpert$, _
  55.         WasA1$,ZQuesPath$,".DEF","",ZTrue,ZFalse,ZTrue,"",WasX,ZTrue)
  56.      IF ZWasQ = 0 THEN _
  57.         RETURN                                                       ' QA174/RM08059308
  58.      IF ZSubParm = -1 THEN _
  59.         RETURN                                                       ' QA174/RM08059308
  60.      QuestHold$ = ZWasZ$
  61.      GOSUB 1408
  62.      CLOSE 2
  63.      CALL UpdtCalr (QuestHold$ + " questionnaire " + _
  64.         MID$("answeredaborted",1 - 8 * ZQuestAborted,8),2)
  65.      IF ReturnToPrompt THEN _
  66.         RETURN                                                       ' QA174/RM08059308
  67.      GOTO 1405
  68. 1408 CALL AskUsers
  69.      IF NOT ZOK THEN _
  70.         RETURN
  71.      IF ZAdjustedSecurity THEN
  72.         ZSubParm = 6
  73.         GOSUB 1410
  74.         FIELD 5,128 AS ZUserRecord$                                  ' QA174/RM08059308
  75.         LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  76.         IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN
  77.            PUT 5,ZUserFileIndex
  78.         END IF
  79.         ZSubParm = 8
  80.         GOSUB 1410
  81.         CALL SetPrompt
  82.         CALL XferType (2,ZTrue)
  83.         CALL SetPrivileges
  84.         ZErrCode = 0
  85.      END IF
  86.      REDIM ZOutTxt$(ZMsgDim)
  87.      IF ZSubParm = -1 THEN _
  88.         RETURN                                                       ' QA174/RM08059308
  89.      ZOK = ZTrue
  90.      RETURN
  91. 1410 CALL FileLock
  92.      RETURN                                                          ' QA174/RM08059308
  93.      END SUB                                                         ' QA174/RM08059308
  94. '                                                                    ' IW174/RM08059306
  95. 1761  '$SUBTITLE: 'InitWelc -- subroutine to display Initial Welcome' ' IW174/RM08059306
  96. ' $PAGE                                                              ' IW174/RM08059306
  97. '                                                                    ' IW174/RM08059306
  98. ' NAME: InitWelc                                                     ' IW174/RM08059306
  99. '                                                                    ' IW174/RM08059306
  100. ' PURPOSE: To display initial welcome.  Formerly in RBBS-PC.BAS      ' IW174/RM08059306
  101. '                                                                    ' IW174/RM08059306
  102. ' INPUTS:                                                            ' IW174/RM08059306
  103. '                                                                    ' IW174/RM08059306
  104. ' OUTPUTS:                                                           ' IW174/RM08059306
  105. '                                                                    ' IW174/RM08059306
  106. '                                                                    ' IW174/RM08059306
  107. '                                                                    ' IW174/RM08059306
  108.       SUB InitWelc (DoFile)                                          ' IW174/RM08059306
  109.       ON DoFile GOSUB 1762,1790                                      ' IW174/RM08059306
  110.       EXIT SUB                                                       ' IW174/RM08059306
  111. 1762  ZFileName$ = ZPreLog$
  112.       GOSUB 1790
  113.       ZFileName$ = ZWelcomeFile$
  114.       GOSUB 1790
  115.       RETURN                                                         ' IW174/RM08059306
  116. 1790  CALL Graphic (ZFileName$)
  117.       CALL BufFile (ZFileName$,WasX)
  118.       CALL Carrier
  119.       IF ZSubParm = -1 THEN _
  120.          EXIT SUB                                                    ' IW174/RM08059306
  121.       RETURN
  122.       END SUB                                                        ' IW174/RM08059306
  123. '                                                                    ' MS174/RM08129301
  124. 1797 '$SUBTITLE: 'MsgSys -- Message System routines'                 ' MS174/RM08129301
  125. ' $PAGE                                                              ' MS174/RM08129301
  126. '                                                                    ' MS174/RM08129301
  127. ' NAME: QuestAns                                                     ' MS174/RM08129301
  128. '                                                                    ' MS174/RM08129301
  129. ' PURPOSE: Messaging system.  Formerly in RBBS-PC.BAS.               ' MS174/RM08129301
  130. '                                                                    ' MS174/RM08129301
  131. ' INPUTS:    MParm     -  1  - New User welcome message              ' MS174/RM08129301
  132. '                      -  2  - Comment to SysOp                      ' MS174/RM08129301
  133. '                      -  3  - Enter a message
  134. '                      -  4  - Kill a message
  135. '                      -  5  - Personal mail (look for)
  136. '                      -  6  - Read messages
  137. '                      -  7  - Scan message headers
  138. '                      -  8  - Topic msg scan
  139. '                      -  9  - 2350
  140. '                      - 10  - Forgotten Password
  141. '                      - 11  - Mail Check at logon
  142. '                      - 12  - Extended file description
  143. '                      - 13  - Margin change
  144. '                      - 14  - Return from User Editing
  145. '
  146. '
  147. ' OUTPUTS:   MParm     -  1  - Return from Logoff Comment            ' MS174/RM08129301
  148. '                      -  2  - RETURN 10595                          ' MS174/RM08139301
  149. '                      -  3  - GOTO 5160                             ' MS174/RM08139301
  150. '                      -  4  - RETURN 13600                          ' MS174/RM08189301
  151. '                      -  5  - RETURN 1235
  152. '                      -  6  - RETURN 1205
  153. '                      -  7  - Dropped Carrier
  154. '                      -  8  - GOTO 13000
  155. '                      -  9  - Sleep Disconnect
  156. '                      - 10  - Dropped Carrier
  157. '                      - 11  - GOTO 10620
  158. '                      - 12  - Time Limit Exceeded
  159. '
  160. '            ZJParm    -  3  - RETURN 108                            ' MS174/RM08129301
  161. '                                                                    ' MS174/RM08129301
  162. '                                                                    ' MS174/RM08129301
  163.      SUB MsgSys (MParm,ActionFlag,GetOut,LogonMailNew,UtilMarginChange) STATIC ' MS174/RM08129301/RM08179302/RM08309301/RM03319401
  164.      REDIM PRESERVE ZUserIn$(ZMsgDim)                                ' RM03149401
  165.      Temp = MParm
  166.      MParm = 0
  167.      ON Temp GOSUB 1799,1800,2000,3900,1900,4330,4340,4320,2350,1798,1895,2008,3100,4560
  168.      EXIT SUB
  169. '
  170. ' ***  C - COMMAND FROM MAIN MENU (LEAVE COMMENT FOR SYSOP)   **
  171. '
  172.  
  173. 1798 OrigSubject$ = "FORGOTTEN PASSWORD"
  174.      GOTO 1801
  175. 1799 IF ZWelcomeAboard THEN _                                        ' NEWU174
  176.         MsgTo$ = ZActiveUserName$ : _                                ' NEWU174
  177.         OrigSubject$ = "Welcome Aboard" : _                          ' NEWU174
  178.         Subject$ = OrigSubject$ : _                                  ' NEWU174
  179.         CALL OpenMsg : _                                             ' NEWU174
  180.         FIELD 1, 128 AS ZMsgRec$ : _                                 ' NEWU174
  181.         ZWasZ$ = ZActiveMsgFile$ : _                                 ' NEWU174
  182.         ZMsgHeader$ = "Message" : _                                  ' NEWU174
  183.         GOTO 2002                                                    ' NEWU174
  184. 1800 IF ZNetConference THEN                                          ' LOFF174/RM07249301
  185.         CALL SkipLine (1)                                            ' LOFF174/RM07249301
  186.         ZOutTxt$ = ZFG6$ + "You can not leave a comment to the SysOp" + _
  187.                 " in a Networked message base!" + ZEmphasizeOff$     ' LOFF174/RM07249301
  188.         CALL QuickTPut1 (ZOutTxt$)                                   ' LOFF174/RM07249301
  189.         IF GetOut THEN _                                             ' LOFF174/RM07249301/RM03319401
  190.            ZMParm = 1                                                ' MS174/RM08129301
  191.         RETURN                                                       ' LOFF174/RM07249301
  192.      END IF
  193.      OrigSubject$ = "COMMENT"                                        ' LOFF174/RM07249301
  194. 1801 MsgTo$ = "SYSOP"
  195.      Subject$ = OrigSubject$
  196.      MsgFrom$ = ZActiveUserName$
  197.      GOSUB 1893
  198.      IF (ZActiveMessages >= ZMaxMsgs OR _                            ' RM08159301
  199.         ((NOT ZMsgsCanGrow) AND _
  200.         (ZNextMsgRec + 5 + ZMaxNodes > ZHighestMsgRecord)) OR _      ' RM08119301
  201.         NOT ZCmntsAsMsgs ) THEN _
  202.         ZOutTxt$ = "Want a Reply?  Use "+MID$(ZAllOpts$,5,1) + _
  203.                    " instead.  Leave a comment (Y,[N])" : _
  204.         GOSUB 4875 : _
  205.         IF NOT ZYes THEN _
  206.            CALL SkipLine (1) : _
  207.            RETURN _
  208.         ELSE ZSysopComment = ZTrue : _
  209.              GOTO 2007
  210.      ZSysopComment = ZFalse
  211.      ZSysopMsg = ZTrue
  212.      ZMsgHeader$ = "comment"
  213.      GOTO 2010
  214. 1850 WasBX = &H3
  215.      ZWasEN$ = ZCmntsFile$
  216.      GOSUB 4845
  217.      CALL OpenWorkA (ZCmntsFile$)
  218.      ZOutTxt$ = ZFG7$ + ZFirstName$ + ZFG6$ + _
  219.           ", Thanks for comments!" + ZEmphasizeOff$                  ' RM051901
  220.      GOSUB 4800
  221.      CALL AMorPM
  222.      CALL PrintWorkA (ZActiveUserName$+" "+ZCurDate$+" "+ZTime$+" Node "+ZNodeID$)
  223.      FOR WasX = 1 TO ZLinesInMsg
  224.         CALL PrintWorkA (ZOutTxt$(WasX))
  225.      NEXT
  226.      CALL PrintWorkA (ZCarriageReturn$)
  227.      CLOSE 2
  228.      IF ZErrCode <> 0 THEN _
  229.         ZWasEL = 1850 : _
  230.         MParm = 8 : _                                                ' MS174/RM08139301
  231.         RETURN                                                       ' MS174/RM08139301 GOTO 13000
  232.      WasBX = &H3
  233.      ZWasEN$ = ZCmntsFile$
  234.      GOSUB 4850
  235.      CALL UpdtCalr ("Left comment",1)
  236.      REDIM ZOutTxt$(ZMsgDim)
  237.      RETURN
  238. '
  239. ' ****  P - COMMAND FROM MAIN MENU (DISPLAY PERSONAL MAIL)  ****
  240. '
  241. 1893 ActionFlag = ZTrue
  242.      GOTO 1897
  243. 1895 IF ZTurboLogon OR ZNonStop THEN _                               ' KG012301
  244.         RETURN
  245.      IF ZDoMailCheck THEN _                                          ' MAIL174/RM101901
  246.         GOTO 1896                                                    ' MAIL174/RM101901
  247.      ZOutTxt$ = ZFG6$ + "Check mail in " + ZFG7$ + ZConfName$ + _
  248.                 ZFG6$ + " ([Y]" + ZFG6$ + ",N)" + ZEmphasizeOff$     ' RM051801
  249.      GOSUB 4785                                                      ' KG012301/12999
  250.      IF ZNo THEN _
  251.         SkipMain = ZTrue : _
  252.         RETURN
  253. 1896 ZUserIn$(0) = LEFT$("NEW ",-4*LogonMailNew)                     ' MAIL174/RM101901
  254. 1897 IF ZActiveMessageFile$ = ZPrevBase$ AND ZTurboBase THEN _       ' RM03169401
  255.         ActionFlag = ZFalse : _
  256.         RETURN
  257. 1900 GOSUB 4700
  258.      IF ZJParm = 3 THEN _                                            ' MS174/RM08139301
  259.         RETURN                                                       ' MS174/RM08139301
  260.      IF ZPrivateDoor THEN _
  261.         ActionFlag = ZTrue
  262.      ZPrevBase$ = ZActiveMessageFile$
  263.      ZTurboBase = ZTrue                                              ' RM03169401
  264.      ShowActive = ZFalse
  265.      IF NOT ActionFlag THEN _
  266.         CALL QuickTPut (ZFG1$ + "Checking messages in " + ZFG7$ + ZConfFileName$,0) : _ ' RM051801/RM08119301
  267.         ShowActive = ZTrue _
  268.      ELSE CALL QuickTPut (ZFG1$ + "Loading messages",0)              ' RM051801
  269.      WasA1$ = ""
  270.      MsgCt = 0
  271.      MsgsFromUser = ZFalse
  272.      ZActiveMessages = 0                                             ' RM08159301
  273.      MailReported = ActionFlag
  274.      FirstOld = ZTrue
  275.      CALL GetMessageHdr                                              ' GM174/RM08059303
  276.      MsgRec = ZFirstMsgRecord
  277.      ZMaxMsgs = VAL(MID$(ZMsgRec$,89,7))                             ' RM08159301
  278.      NumDots = 0
  279. 1905 GET 1,MsgRec
  280.      CALL CheckInt (MID$(ZMsgRec$,117,4))
  281.      IF ZErrCode <> 0 THEN _
  282.         ZWasEL = 1905 : _
  283.         MParm = 8 : _                                                ' MS174/RM08139301
  284.         RETURN                                                       ' MS174/RM08139301 GOTO 13000
  285.      NumRecsInMsg = VAL(MID$(ZMsgRec$,117,4))
  286.      IF NumRecsInMsg < 1 THEN _
  287.         NumRecsInMsg = 1
  288. 1906 IF ActionFlag OR (FirstOld AND NOT MailReported) THEN _
  289.         CALL MarkTime (NumDots)
  290.      CALL Carrier
  291.      IF ZSubParm = -1 THEN _
  292.         MParm = 2 : _
  293.         RETURN                                                       ' MS174/RM08139301 RETURN 10595
  294. 1910 IF MsgRec >= ZNextMsgRec THEN _
  295.         LowMsgNumber = ZMsgPtr(1,2) : _
  296.         GOTO 1950
  297. 1915 GOSUB 4660
  298.      IF MID$(ZMsgRec$,116,1) <> ZActiveMessage$ THEN _
  299.         GOTO 1946
  300.      WasX$ = MID$(ZMsgRec$,121,2)
  301.      IF WasX$ <> "  " THEN _
  302.         IF CVI(WasX$) > ZUserSecLevel THEN _
  303.            GOTO 1945
  304.      IF ActionFlag THEN _
  305.         GOTO 1935
  306. '
  307. ' ** ALLOW USERS WITH NAMES LONGER THAN 22 CHARS TO RECEIVE PRIVATE MAIL *
  308. '
  309. 1920 IF NOT UserInHeader THEN _
  310.         GOTO 1945
  311.      IF MsgToCaller THEN _
  312.         GOTO 1925
  313.      GOTO 1940
  314. 1925 ZWasA = VAL(MID$(ZMsgRec$,2,4))
  315.      IF LogonMailNew THEN _
  316.         IF ZWasA <= ZLastMsgRead THEN _
  317.            GOTO 1935
  318.      IF NOT ShowActive THEN _
  319.         GOTO 1930
  320.      MailReported = ZTrue
  321.      FirstNew = (ZWasA > ZLastMsgRead)
  322.      IF FirstNew THEN _
  323.         MsgCt = 0 : _
  324.         CALL SkipLine (1) : _
  325.         CALL QuickTPut1 (ZEmphasizeOn$ + "New mail for you (* = Private)" + ZEmphasizeOff$) _ ' RM101604
  326.      ELSE IF FirstOld THEN _
  327.              CALL SkipLine (1) : _
  328.              CALL QuickTPut1 (ZFG1$ + "Old mail for you (* = Private)" + ZEmphasizeOff$) : _ ' RM051801
  329.              FirstOld = ZFalse
  330.      ShowActive = NOT FirstNew
  331. 1930 CALL QuickTPut (LEFT$(ZMsgRec$,5),0)
  332.      MsgCt = MsgCt + 1
  333.      IF MsgCt MOD 15 = 0 THEN _
  334.         CALL SkipLine (1) : _
  335.         CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  336. 1935 IF NOT MsgFromCaller THEN _
  337.         GOTO 1945
  338. 1940 MsgsFromUser = MsgsFromUser + 1
  339.      WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5)
  340. 1945 ZActiveMessages = ZActiveMessages + 1                           ' RM08159301
  341.      ZMsgPtr(ZActiveMessages,1) = MsgRec                             ' RM08159301
  342.      ZMsgPtr(ZActiveMessages,2) = VAL(MID$(ZMsgRec$,2,4))            ' RM08159301
  343. 1946 MsgRec = MsgRec + NumRecsInMsg
  344.      GOTO 1905
  345. 1950 IF NOT MailReported THEN _
  346.         ZOutTxt$ = ZFG5$ + "Sorry, " + ZFG7$ + _
  347.              ZFirstName$ + ZFG5$ + _
  348.              ", No " + ZUserIn$(0) + "mail for you" + ZEmphasizeOff$ : _ ' RM051801
  349.         GOSUB 4795
  350.      IF MsgsFromUser = 0 OR NOT ZMsgReminder OR ActionFlag THEN _    ' UG070505
  351.         GOTO 1961
  352.      ZOutTxt$ = ZFG6$ + "Mail you left" + ZEmphasizeOff$             ' RM051801 ' RM122403
  353.      GOSUB 4800
  354. 1960 WasK = 1
  355.      FOR MsgCt = 1 TO MsgsFromUser
  356.         ZOutTxt$ = MID$(WasA1$,WasK,5)
  357.         WasK = WasK + 5
  358.         GOSUB 4810
  359.         IF MsgCt MOD 15 = 0 THEN _
  360.            CALL SkipLine (1) : _
  361.            CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  362.      NEXT
  363.      WasA1$ = ""
  364.      CALL SkipLine (1)
  365.      IF ZUserSecLevel >= ZOptSec(9) THEN _
  366.         CALL QuickTPut1 (ZFG5$ + "Please K)ill your old messages" + ZEmphasizeOff$) ' RM051801 ' RM122403
  367. 1961 ActionFlag = ZFalse
  368.      CALL SkipLine (1)
  369.      RETURN
  370. '
  371. ' ****  E - COMMAND FROM MAIN MENU (ENTER MESSAGE)  ***
  372. '
  373. 2000 QuotedReply = ZFalse
  374.      MsgFrom$ = ZActiveUserName$
  375.      ZSysopMsg = ZFalse
  376.      GOSUB 1893
  377. 2001 IF (LowMsgNumber > 0 AND ZActiveMessages >= ZMaxMsgs) _         ' RM08159301
  378.         OR ZHighMsgNumber >= 9999 THEN                               ' RM08119301
  379.         IF ZActiveMessageFile$ = ZMainMsgFile$ AND _
  380.            ZActiveMessages = 1 THEN                                  ' RM08159301
  381.            ZJParm = 1                                                ' JC174/RM08119301
  382.            CALL JoinConference (Found)                               ' JC174/RM08109301/RM09259302
  383.            IF ZJParm = 3 THEN _
  384.               RETURN                                                 ' JC174/RM08119301
  385.         ELSE
  386.            ZOutTxt$ = "No more messages allowed!  Try tomorrow"
  387.            GOSUB 4795
  388.            GOTO 3650
  389.         ENDIF
  390.      ENDIF
  391. 2002 IF ZWelcomeAboard THEN _                                        ' NEWU174
  392.         IF (LowMsgNumber > 0 AND ZActiveMessages >= ZMaxMsgs) _      ' NEWU174/RM08159301
  393.         OR ZHighMsgNumber >=9999 THEN _                              ' NEWU174/RM08119301
  394.            RETURN _                                                  ' NEWU174
  395.         ELSE _                                                       ' NEWU174
  396.            GOTO 2020                                                 ' NEWU174
  397. 2006 IF NOT (ZReply OR MsgFwd) THEN _
  398.         MsgPswd$ = ""
  399.      ZSysopComment = ZFalse
  400.      IF ZReply OR MsgFwd THEN SaveAnsIndex = ZAnsIndex
  401.      IF MsgFwd OR NOT ZReply THEN _
  402.         IF ZUserSecLevel >= ZOptSec(5) THEN MsgTo$ = ""
  403. 2007 IF ZSysopComment THEN _
  404.         ZWasZ$ = ZCmntsFile$ : _
  405.         ZMsgHeader$ = "comment" _
  406.      ELSE ZWasZ$ = ZActiveMessageFile$ : _
  407.           ZMsgHeader$ = "message"
  408. 2008 IF ZSysopComment OR ZMsgsCanGrow THEN _
  409.         ZWasY$ = "on disk" : _
  410.         CALL FindFree : _
  411.         GOTO 2009
  412.      IF ZNextMsgRec + 5 + ZMaxNodes < ZHighestMsgRecord THEN _       ' RM08119301
  413.         GOTO 2010
  414.      ZWasY$ = "in file"
  415.      ZFreeSpace$ = "1"
  416. 2009 IF VAL(ZFreeSpace$) >= 2000 THEN _
  417.         GOTO 2010
  418.      ZOutTxt$ = "No room " + ZWasY$ + " for " + ZMsgHeader$
  419.      GOSUB 4815
  420.      CALL DelayTime (2)                                              ' RM03119401
  421.      GOTO 3650
  422. 2010 IF NOT QuotedReply THEN _
  423.         ZLinesInMsg = 0 : _                                          ' KG011201
  424.         WasL = 0 : _
  425.         WasX = 0 : _
  426.         REDIM ZOutTxt$(ZMsgDim)
  427.      IF ZGetExtDesc THEN _
  428.         GOTO 2100
  429.      GOSUB 1893
  430.      RcvrRecNum = 0
  431. 2020 CALL SetWhoTo (-ZEnableCC*(ZUserSecLevel>=ZOptSec(5)),MsgTo$,MsgFrom$,RcvrRecNum,Found,INSTR(ZMsgSecCats$,"U")>0) ' KG012502
  432.      IF ZNetConference THEN _                                        ' RM01159401
  433.         IF MsgTo$ = "SYSOP" THEN _                                   ' RM01159401
  434.            GOTO 1800                                                 ' RM01159401
  435.      IF ZWelcomeAboard THEN _                                        ' NEWU174
  436.         GOTO 2335                                                    ' NEWU174
  437.      IF MsgTo$ = "" THEN _
  438.         RETURN
  439.      IF ZSysopComment OR ZSysopMsg THEN _
  440.         GOTO 2100
  441.      IF ZReply OR MsgFwd THEN _
  442.         Found = ZTrue : _
  443.         CALL Trim (MsgTo$):  _
  444.         GOTO 2035 _
  445.      ELSE Subject$ = ""
  446.      GOSUB 2065
  447.      IF MParm <> 0 THEN _                                            ' MS174/RM08159301
  448.         RETURN                                                       ' MS174/RM08159301
  449. 2035 IF QuotedReply THEN _
  450.         RETURN
  451.      GOTO 2100
  452. '
  453. ' *****  SET/CHANGE SUBJECT FOR A MESSAGE   ***
  454. '
  455. 2065 IF Subject$ <> "" THEN _
  456.         ZOutTxt$ = "Change subject from " + _
  457.              Subject$ + _
  458.              " to" _
  459.      ELSE ZOutTxt$ = "Subject"
  460.      ZMacroMin = 99
  461.      ZParseOff = ZTrue
  462.      GOSUB 4790
  463.      IF LEN(ZUserIn$) > 25 THEN _
  464.         ZOutTxt$ = "25 chars max" : _
  465.         GOSUB 4815 : _
  466.         GOTO 2065
  467.      IF ZWasQ = 0 THEN _
  468.         IF Subject$ <> "" THEN _
  469.            RETURN _
  470.         ELSE GOSUB 2435 : _
  471.              IF ZYes THEN _
  472.                 MParm = 3 : _                                        ' RM08139301
  473.                 RETURN _                                             ' MS174/RM08139301 RETURN 5160 _
  474.              ELSE GOTO 2065
  475.      Subject$ = ZUserIn$
  476.      CALL AllCaps (Subject$)
  477.      OrigSubject$ = Subject$
  478.      RETURN
  479. '
  480. ' *****  ENTER MAIN BODY OF MESSAGE  ****
  481. '
  482. 2100 CALL SaveUserActivity("M", ZNodeRecIndex, ZFalse)               ' RCHAT401
  483.      GOSUB 2101                                                      ' EDIT174  old 2100
  484.      IF NOT ZYes THEN _                                              ' EDIT174
  485.         GOTO 2120                                                    ' EDIT174
  486.      GOTO 2110                                                       ' EDIT174
  487. 2101 ZYes = ZFalse                                                   ' EDIT174
  488.      IF (ZUserGraphicDefault$ = "C" OR NOT ZHiLiteOff) AND NOT ZGetExtDesc THEN ' EDIT174
  489.         ZOutTxt$ = ZFG6$ + "Use the " + ZFG1$ + "A" + ZFG5$ + "N" + _
  490.             ZFG7$ + "S" + ZFG3$ + "I" + ZFG6$ + " Screen Editor (Y,[N]" + _
  491.             ZFG6$ + ")" + ZEmphasizeOff$                             ' EDIT174
  492.         GOSUB 4785                                                   ' EDIT174
  493.      END IF                                                          ' EDIT174
  494.      RETURN                                                          ' EDIT174
  495. 2110 CALL Ansied (MsgTo$, OrigSubject$, MsgLockLines)                ' EDIT174
  496.      I = ZSubParm                                                    ' EDIT174
  497.      CALL SkipLine (1)                                               ' EDIT174
  498.      IF I = -2 THEN    ' Sleep Disconnect                            ' EDIT174
  499.         MParm = 9                                                    ' MS174/RM08139301
  500.         EXIT SUB                                                     ' EDIT174/RM08139301/RM09229303
  501.      ELSEIF I = -1 THEN  ' Lost Carrier                              ' EDIT174
  502.         MParm = 10                                                   ' MS174/RM08139301
  503.         EXIT SUB                                                     ' EDIT174/RM08139301/RM09229303
  504.      ELSEIF I = 1 THEN   ' Save Message                              ' EDIT174
  505.         GOTO 3400                                                    ' EDIT174
  506.      ELSEIF I = 2 THEN   ' Abort Message                             ' EDIT174
  507.         GOTO 2430                                                    ' EDIT174
  508.      END IF                                                          ' EDIT174
  509. 2120 IF ZGetExtDesc THEN _                                           ' BC-DESC
  510.         CALL SkipLine (1) : _                                        ' BC-DESC
  511.         ZOutTxt$ = ZFG4$ + "Continue Your Description for: " + _     ' BC-DESC/RM08179301
  512.                       ZFG1$ + ZFileNameHold$ + ZCrLf$ + _            ' BC-DESC
  513.                       ZFG4$ + "You'll have" + ZFG1$ + _              ' BC-DESC
  514.                       STR$(ZMaxMsgLines) + ZFG4$ + " Additional Lines." : _ ' BC-DESC
  515.         ZOutTxt$ = ZOutTxt$ + "  Press " + ZEmphasizeOn$ + "[ENTER]" + _ ' BC-DESC/RM08179301
  516.                       ZEmphasizeOff$ + ZFG4$ + _                     ' BC-DESC
  517.                       " By Itself for Menu." + ZEmphasizeOff$ + ZCrLf$ : _ ' BC-DESC
  518.         CALL QuickTPut1 (ZOutTxt$) : _                               ' RM08179301
  519.         ZOutTxt$ = ZFG1$ + "Line #1: " + ZFG2$ + "[" + ZFG4$ + ZDesc$ + _ ' BC-DESC
  520.                    + ZFG2$ + "]" + ZEmphasizeOff$ : _                ' BC-DESC
  521.         CALL Line25 : _                                              ' RM03079401
  522.      ELSE _                                                          ' BC-DESC
  523.         ZOutTxt$ = "Type " + _                                       ' BC-DESC/RM012601
  524.              ZMsgHeader$ + _
  525.              STR$(ZMaxMsgLines) + _
  526.              " lines max" + _
  527.              ZPressEnter$
  528.      GOSUB 4795
  529.      GOSUB 3200
  530. 2125 ZLinesInMsg = ZLinesInMsg + 1
  531. 2127 IF ZGetExtDesc THEN _                                           ' BC-DESC/RM012601
  532.         TempLinesInMsg = ZLinesInMsg + 1 _                           ' BC-DESC/RM012601
  533.      ELSE TempLinesInMsg = ZLinesInMsg                               ' BC-DESC/RM012601
  534.      IF ZRemoteEcho OR ZLocalUser THEN _                             ' BC-DESC/RM012601 2127
  535.         ZOutTxt$ = RIGHT$(STR$(TempLinesInMsg),2) + _                ' BC-DESC/RM012601
  536.              ": " + _
  537.              ZOutTxt$(ZLinesInMsg) _
  538.      ELSE ZOutTxt$ = ZOutTxt$(ZLinesInMsg)
  539.      GOSUB 4810
  540.      CALL LineEdit(ZLinesInMsg,ZRightMargin + 1)
  541.      IF ZWaitExpired THEN _
  542.         GOTO 2300 _
  543.      ELSE IF ZSubParm = -1 THEN _
  544.              MParm = 10 : _                                         ' MS174/RM08139301
  545.              EXIT SUB                                               ' MS174/RM08139301/RM09229303
  546.      CALL FindFKey
  547.      IF ZSubParm < 0 THEN _
  548.         MParm = 7 : _                                                ' MS174/RM08139301
  549.         EXIT SUB                                                     ' MS174/RM08139301/RM09229303
  550.      IF ZOutTxt$(ZLinesInMsg) = "" THEN _
  551.         ZLinesInMsg = ZLinesInMsg - 1 : _
  552.         GOTO 2300
  553. 2140 WasJ = ZLinesInMsg
  554.      GOSUB 2200
  555.      IF WasX THEN _
  556.         GOTO 2300
  557.      GOTO 2125
  558. 2200 WasX = 0
  559.      IF WasJ < (ZMaxMsgLines - 2) THEN _
  560.         RETURN
  561.      ZOutTxt$ = MID$("2 lines leftLast line   Full",12 * (WasJ-(ZMaxMsgLines - 2)) + 1,12)
  562.      WasX = (WasJ > (ZMaxMsgLines - 1))
  563. 2210 GOSUB 4815
  564.      RETURN
  565. '
  566. ' *****  FINAL MESSAGE DISPOSITION   ****
  567. '
  568. 2300 CALL SkipLine (1)
  569.      IF ZExpertUser THEN _
  570.         GOTO 2315
  571. 2302 ZOutTxt$ = "A)bort, " + LEFT$("B)atch import, ",-15 * (ZSysop OR ZLocalUser)) + _
  572.                 "C)ontinue adding, D)elete lines, E)dit a line"
  573.      CALL TopPrompt
  574.      ZOutTxt$ = "I)nsert lines, L)ist, M)argin change, R)evise subj, S)ave msg, ?)help"
  575.      CALL TopPrompt
  576. 2315 ZOutTxt$ = "Edit Sub-function <A," + _
  577.           LEFT$("B,",-2 * (ZSysop OR ZLocalUser)) + _
  578.           "C,D,E,I,L,M,R,S,?>"
  579.      GOSUB 4785
  580.      IF ZWasQ = 0 THEN _
  581.         GOTO 2315
  582.      CALL AraAllCaps (ZUserIn$(),ZAnsIndex)
  583.      ZWasZ$ = ZUserIn$(ZAnsIndex)
  584. 2330 ON INSTR("ABCDEILMRS?",ZWasZ$) GOTO 2400,2335,2332,2500,2600,2800,3000,3100,2440,3400,2345
  585.      GOTO 2300
  586. 2332 IF ZLinesInMsg < 1 THEN _
  587.         ZLinesInMsg = 1
  588.      GOTO 2127
  589. 2335 WasX = ZLinesInMsg
  590.      CALL MsgImport (ZMaxMsgLines,ZRightMargin,ZLinesInMsg,ZOutTxt$())
  591.      IF ZWelcomeAboard THEN _                                        ' NEWU174
  592.         GOTO 3406                                                    ' NEWU174
  593.      IF ZLinesInMsg > WasX THEN _
  594.         GOTO 3000 _
  595.      ELSE GOTO 2300
  596. '
  597. ' *****  DISPLAY MESSAGE SUBCOMMANDS HELP FILE   ****
  598. '
  599. 2345 ZFileName$ = ZHelp$(4)
  600.      CALL InitWelc (2)                                               ' IW174/RM08059306
  601.      GOTO 2302
  602. 2350 IF ZCurPUI$ = "" OR ZSubBoard THEN _
  603.         ZCurPUI$ = ZMainPUI$
  604.      CALL FindIt (ZCurPUI$)
  605.      ZCustomPUI = ZOK
  606.      IF NOT ZOK THEN _
  607.         ZCurPUI$ = ""
  608.      ZPrevPUI$ = ""
  609.      RETURN
  610. '
  611. ' ****  ABORT MESSAGE   ***
  612. '
  613. 2400 GOSUB 2435
  614.      IF NOT ZYes THEN _
  615.         GOTO 2300
  616. 2430 ZOutTxt$ = "Aborted"
  617.      GOSUB 4795
  618.      GOTO 3650
  619. 2435 ZOutTxt$ = "Abort " + _
  620.           ZMsgHeader$ + _
  621.           " (Y,[N])"
  622.      GOSUB 4785
  623.      RETURN
  624. '
  625. ' *****  CHANGE SUBJECT OF A MESSAGE  ****
  626. '
  627. 2440 GOSUB 2065
  628.      GOTO 2300
  629. '
  630. ' *****  (BLOCK) DELETE MESSAGE LINE(S)  *****
  631. '
  632. 2500 ZOutTxt$ = "Delete from"
  633.      GOSUB 3300
  634.      IF ZWasQ = 0 THEN _                                             ' RM12129302
  635.         IF Mark1 = 0 THEN _                                          ' RM12129302
  636.         GOTO 2300                                                    ' RM12129302
  637.      Mark1 = ZTestedIntValue
  638.      IF ZAnsIndex < ZLastIndex AND ZUserIn$(ZAnsIndex+1) = "-" THEN _ ' KG031101
  639.            ZAnsIndex = ZAnsIndex + 1 _                               ' KG031101
  640.      ELSE Temp = INSTR(ZUserIn$(ZAnsIndex),"-") : _                  ' KG031101
  641.              IF Temp > 0 AND Temp < LEN(ZUserIn$(ZAnsIndex)) THEN _  ' KG031101
  642.                 ZUserIn$(ZAnsIndex) = MID$(ZUserIn$(ZAnsIndex),Temp+1) : _ ' KG031101
  643.                 ZAnsIndex = ZAnsIndex - 1                            ' KG031101
  644. 2520 Temp$ = "Up to and including Line # "                           ' BC-DESC/RM012601/RM02029401
  645. '    IF ZGetExtDesc THEN _                                           ' BC-DESC/RM012601
  646. '       Temp$ = Temp$ + STR$(Mark1 + 1) + ")" _                      ' BC-DESC/RM012601
  647. '    ELSE _                                                          ' BC-DESC/RM012601
  648. '       Temp$ = Temp$ + STR$(Mark1) + ")"                            ' BC-DESC/RM012601
  649.      CALL ChangeInt (ZFalse,Temp$,0,Mark1,ZLinesInMsg)
  650.      IF ZWasQ = 0 THEN _
  651.         CALL SkipLine (1) : _                                        ' RM02029401
  652.         ZOutTxt$ = "NO Lines Deleted!" : _                           ' RM02029401
  653.         GOSUB 4815 : _                                               ' RM02029401
  654.         GOTO 2555 _                                                  ' RM02029401
  655.      ELSE Mark2 = ZTestedIntValue
  656.      CALL SkipLine(1)
  657.      GOTO 2530
  658. 2522 FOR WasX = Mark1 TO Mark2
  659.         CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  660.         IF ZNo OR ZRet THEN _
  661.            WasX = Mark2 + 1 _
  662.         ELSE ZOutTxt$ = ZOutTxt$(WasX) : _
  663.            GOSUB 4805
  664.      NEXT
  665.      CALL SkipLine(1)
  666. 2530 IF ZGetExtDesc THEN _                                           ' BC-DESC/RM012601
  667.         TempMark1 = Mark1 + 1 : _                                    ' BC-DESC/RM012601
  668.         TempMark2 = Mark2 + 1 _                                      ' BC-DESC/RM012601
  669.      ELSE _                                                          ' BC-DESC/RM012601
  670.         TempMark1 = Mark1 : _                                        ' BC-DESC/RM012601
  671.         TempMark2 = Mark2                                            ' BC-DESC/RM012601
  672.      ZOutTxt$ = "Delete lines" + STR$(TempMark1) + "-" + _           ' BC-DESC/RM012601 2530
  673.         MID$(STR$(TempMark2),2) + " (Y,[N],L)ist)"                   ' BC-DESC/RM012601
  674.      GOSUB 4785
  675.      Temp$ = ZUserIn$(ZAnsIndex)
  676.      CALL AllCaps(Temp$)
  677.      IF Temp$ = "L" THEN GOTO 2522
  678.      IF NOT ZYes THEN _
  679.         ZOutTxt$ = "NOT Deleted" : _
  680.         GOSUB 4815 : _
  681.         GOTO 2555
  682. 2550 ZBlockSize = (Mark2 - Mark1) + 1
  683.      EndOfBuffer = ZLinesInMsg + 1
  684.      ZLinesInMsg = ZLinesInMsg - ZBlockSize
  685.      FOR WasX = Mark1 TO ZLinesInMsg
  686.         ZOutTxt$(WasX) = ZOutTxt$(WasX + ZBlockSize)
  687.      NEXT
  688.      FOR WasX = (ZLinesInMsg + 1) TO (EndOfBuffer)
  689.         ZOutTxt$(WasX) = ""
  690.      NEXT
  691.      ZOutTxt$ = "Deleted" + STR$(ZBlockSize) + " line(s)"
  692.      GOSUB 4815
  693. 2555 Mark1 = 0
  694.      Mark2 = 0
  695.      GOTO 2300
  696. '
  697. ' ****  EDIT MESSAGE LINE  ***
  698. '
  699. 2600 ZOutTxt$ = "Edit"
  700.      GOSUB 3300
  701.      IF ZWasQ = 0 THEN _                                             ' RM12129302
  702.         GOTO 2300                                                    ' RM12129302
  703.      IF ZWasQ <> 0 THEN _
  704.         CALL EditALine (ZTestedIntValue)
  705.      IF ZSubParm < 0 THEN _
  706.         MParm = 7 : _                                                ' MS174/RM08139301
  707.         EXIT SUB                                                     ' MS174/RM08139301/RM09229303
  708.      GOTO 2300
  709. 2800 IF ZLinesInMsg >= ZMaxMsgLines AND NOT ZSysop THEN _
  710.         ZOutTxt$ = "Message full" : _
  711.         GOSUB 4815 : _
  712.         GOTO 2300
  713. 2820 ZOutTxt$ = "Insert Before" : _
  714.      GOSUB 3300
  715.      IF ZWasQ = 0 THEN _                                             ' RM12129302
  716.         GOTO 2300                                                    ' RM12129302
  717. 2830 WasLL = ZLinesInMsg
  718.      WasK = ZLinesInMsg - ZTestedIntValue
  719.      FOR WasX = ZTestedIntValue TO ZLinesInMsg
  720.         ZUserIn$(WasX + 1 - ZTestedIntValue) = ZOutTxt$(WasX)
  721.         ZOutTxt$(WasX) = ""
  722.      NEXT
  723.      ZLinesInMsg = ZTestedIntValue
  724. 2840 ZOutTxt$ = RIGHT$(STR$(ZLinesInMsg),2) + _
  725.           ": " + ZOutTxt$(ZLinesInMsg)
  726.      GOSUB 4810
  727.      CALL LineEdit(ZLinesInMsg,ZRightMargin + 1)
  728.      IF ZOutTxt$(ZLinesInMsg) = "" THEN _
  729.         GOTO 2920
  730. 2870 ZLinesInMsg = ZLinesInMsg + 1
  731.      WasJ = ZLinesInMsg + WasK - 1
  732.      GOSUB 2200
  733.      IF NOT WasX THEN _
  734.         GOTO 2840
  735. 2920 FOR WasX = 1 TO WasK + 1
  736.         ZOutTxt$(ZLinesInMsg + WasX - 1) = ZUserIn$(WasX)
  737.      NEXT
  738.      REDIM ZUserIn$(ZMsgDim)
  739.      ZLinesInMsg = WasLL + ZLinesInMsg - ZTestedIntValue
  740.      GOTO 2300
  741. '
  742. ' *****  LIST MESSAGE CONTENTS   ****
  743. '
  744. 3000 GOSUB 3010
  745.      GOTO 2300
  746. 3010 ZStopInterrupts = ZFalse
  747.      CALL SkipLine (1)
  748.      IF (ZWasQ = 1 OR MsgFwd) AND NOT ZGetExtDesc THEN _
  749.         WasL = 1 : _
  750.         ZOutTxt$ = ZFG3$ + "To: " + _
  751.              MsgTo$ + _
  752.              ZFG4$ + " Re: " + _
  753.              Subject$ + ZEmphasizeOff$ : _
  754.         GOSUB 4815 : _
  755.         CALL QuickTPut (MID$("    ",1,-4 * (NOT ZRemoteEcho)),0) : _
  756.         GOSUB 3200
  757. 3020 IF ZGetExtDesc THEN WasL = 1
  758.      FOR WasX = WasL TO ZLinesInMsg
  759.         CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
  760.         IF ZNo OR ZRet THEN _
  761.            WasX = ZLinesInMsg + 1 _
  762.         ELSE _
  763.            IF ZGetExtDesc THEN _                                     ' BC-DESC/RM012601
  764.               ZOutTxt$ = RIGHT$(STR$(WasX + 1),2) + _                ' BC-DESC/RM012601
  765.                  ": " + ZOutTxt$(WasX) : _                           ' BC-DESC/RM012601
  766.               GOSUB 4815 _                                           ' BC-DESC/RM012601
  767.            ELSE _                                                    ' BC-DESC/RM012601
  768.               ZOutTxt$ = RIGHT$(STR$(WasX),2) + _
  769.                    ": " + ZOutTxt$(WasX) : _                         ' BC-DESC/RM012601
  770.               GOSUB 4815
  771.      NEXT
  772.      RETURN
  773. '
  774. ' *****  CHANGE MARGIN WIDTH   ****
  775. '
  776. 3100 CALL ChangeInt (ZTrue,"Right margin",ZRightMargin,8,72)
  777.      IF ZWasQ <> 0 THEN _
  778.         ZRightMargin = ZTestedIntValue
  779. 3150 IF UtilMarginChange THEN _
  780.         RETURN
  781.      GOTO 2300
  782. 3200 ZOutTxt$ = "[" + _
  783.           STRING$(ZRightMargin - 2,45) + _
  784.           "]"
  785.      IF ZRemoteEcho OR ZLocalUser THEN _
  786.         ZOutTxt$ = "    " + _
  787.              ZOutTxt$
  788.      GOSUB 4795
  789.      RETURN
  790. 3300 Temp$ = ZOutTxt$ + " Line #"
  791.      Temp = MsgLockLines + 1
  792.      CALL SkipLine (-(ZAnsIndex >= ZLastIndex))
  793.      CALL ChangeInt (ZFalse,Temp$,0,Temp,ZLinesInMsg)
  794.      IF ZSubParm = -1 THEN _
  795.         MParm = 2 : _                                                ' MS174/RM08139301
  796.         RETURN                                                       ' MS174/RM08139301 RETURN 10595
  797.      RETURN                                                          ' RM12129302
  798. '
  799. ' ****  SAVE MESSAGE   ***
  800. '
  801. 3400 IF ZGetExtDesc THEN _
  802.         ZSysopComment = ZFalse : _
  803.         RETURN
  804.      IF ZSysopComment THEN _
  805.         ZSysopComment = ZFalse : _
  806.         GOTO 1850
  807.      IF ZOutTxt$(1) = "" THEN _                                      ' RM07249301
  808.         CALL SkipLine (1) : _                                        ' RM07249301
  809.         CALL QuickTPut1 ("CAN NOT save messages that begin with NULL lines") : _ ' RM07249301/DS12189302
  810.         CALL QuickTPut1 ("Either DELETE the null line(s) or ABORT the message") : _ ' RM07259301
  811.         IF I = 1 THEN _                                              ' RM02289401
  812.            CALL DelayTime (2) : _                                    ' RM02289401
  813.            I = 0 : _                                                 ' RM02289401
  814.            GOTO 2110 _                                               ' RM02289401
  815.         ELSE _                                                       ' RM02289401
  816.            GOTO 2300                                                 ' RM07249301
  817. 3405 IF ZSysopMsg THEN _
  818.         MsgPswd$ = "^READ^" _
  819.      ELSE Temp$ = MsgPswd$ : _
  820.           CALL MsgProt (MsgTo$,Found,MsgPswd$) : _
  821.           IF MsgPswd$ = "" THEN _
  822.              MsgPswd$ = Temp$ : _
  823.              IF I = 1 THEN _                                         ' RM01269401
  824.                 I = 0 : _                                            ' RM01269401
  825.                 GOTO 2110 _                                          ' RM01269401
  826.              ELSE _                                                  ' RM01269401
  827.                 GOTO 2300
  828.      SaveReplyStatus = ZReply
  829.      ZReply = ZTrue
  830. 3406 IF ZWelcomeAboard THEN _                                        ' NEWU174
  831.         SaveReplyStatus = ZReply : _                                 ' NEWU174
  832.         ZReply = ZTrue : _                                           ' NEWU174
  833.         MsgFrom$ = "SYSOP" : _                                       ' NEWU174
  834.         MsgPswd$ = "^READ^"                                          ' NEWU174
  835.      ZSysopMsg = ZFalse
  836.      ZReply = SaveReplyStatus
  837.      GOSUB 4835
  838.      GOSUB 4700
  839.      IF ZJParm = 3 THEN _                                            ' MS174/RM08139301
  840.         RETURN                                                       ' MS174/RM08139301
  841.      IF LOF(1) = 0 THEN _
  842.         ZWasDF$ = ZActiveMessageFile$ : _
  843.         CLOSE 1 : _
  844.         KILL ZActiveMessageFile$ : _
  845.         GOSUB 4840 : _
  846.         MParm = 4 : _                                                ' MS174/RM08139301
  847.         RETURN                                                       ' MS174/RM08139301 RETURN 13600
  848.      CALL GetMessageHdr                                              ' GM174/RM08059303
  849.      MsgRecSave$ = ZMsgRec$
  850.      MsgCorrected = ZFalse
  851.      CALL FixMessageHdr                                              ' FM174/RM08059304/RM08119301
  852.      ZWasSL = 0
  853.      ZWasN$ = ""
  854.      ZLastIndex = 0
  855.      ZHighMsgNumber = ZHighMsgNumber + 1                             ' RM08119301
  856. 3410 ZActiveMessages = ZActiveMessages + 1                           ' RM08159301
  857.      MsgNum$ = STR$(ZHighMsgNumber) + _                              ' RM08119301
  858.                        SPACE$(5 - LEN(STR$(ZHighMsgNumber)))         ' RM08119301
  859.      IF MsgPswd$ = "^READ^" THEN _
  860.         MID$(MsgNum$,1,1) = "*" : _
  861.         SecForMsg = ZPrivateReadSec _
  862.      ELSE SecForMsg = ZPublicReadSec
  863. 3460 IF ZWelcomeAboard THEN _                                        ' NEWU174
  864.         MsgFrom$ = LEFT$(MsgFrom$ + SPACE$(31),31) : _               ' NEWU174
  865.         GOTO 3461                                                    ' NEWU174
  866.      IF NOT MsgFwd THEN _                                            ' NEWU174
  867.         MsgFrom$ = LEFT$(ZActiveUserName$ + SPACE$(31),31) _
  868.      ELSE _
  869.         MsgFrom$ = LEFT$(MsgFrom$ + SPACE$(31),31)
  870. 3461 MsgTo$ = LEFT$(MsgTo$ + SPACE$(31),31)                          ' NEWU174
  871.      MID$(MsgTo$,23,8) = TIME$
  872.      MID$(MsgTo$,31,1) = CHR$(ZNumHeaders)
  873.      Subject$ = LEFT$(OrigSubject$ + SPACE$(25),25)
  874.      MsgPswd$ = LEFT$(MsgPswd$ + SPACE$(15),15)
  875.      IF QuotedReply AND _
  876.         ZLinesInMsg > ZMaxMsgLines THEN _
  877.            ZLinesInMsg = ZMaxMsgLines
  878.      FOR WasJ = 1 TO ZLinesInMsg
  879.         ZOutTxt$(WasJ) = ZOutTxt$(WasJ) + _
  880.                 CHR$(227)
  881.         ZWasSL = ZWasSL + LEN(ZOutTxt$(WasJ))
  882.      NEXT
  883.      NumRecs = ZWasSL \ 128 + ZNumHeaders - (ZWasSL MOD 128 <> 0)
  884.      ZWasN$ = STR$(NumRecs)
  885. 3530 Temp = ZNextMsgRec
  886.      ZNextMsgRec = Temp + VAL(ZWasN$)
  887.      LSET ZMsgRec$ = MsgRecSave$
  888.      CALL UpdtMessageHdr                                             ' UM174/RM08059305           ' UM174/RM08059305
  889.      GET 1,Temp
  890.      ZMsgPtr(ZActiveMessages,1) = Temp                               ' RM08159301
  891.      ZMsgPtr(ZActiveMessages,2) = ZHighMsgNumber                     ' RM08119301/RM08159301
  892.      LSET ZMsgRec$ = MsgNum$ + _
  893.                      MsgFrom$ + _
  894.                      MsgTo$ + _
  895.                      ZCurDate$ + _
  896.                      Subject$ + _
  897.                      MsgPswd$ + _
  898.                      ZActiveMessage$ + _
  899.                      ZWasN$ + _
  900.                      SPACE$(4 - LEN(ZWasN$)) + _
  901.                      MKI$(SecForMsg)
  902. ' ---[ write out list of people msg is to ]---
  903.      UserFileIndexSave = ZUserFileIndex
  904.      UserRecordHold$ = ZUserRecord$
  905.      CALL OpenWork (2,ZNodeWorkFile$)
  906.      WHILE NOT EOF(2)
  907.         CALL ReadParms (ZWorkAra$(),2,1)
  908.         MID$(ZMsgRec$,37,22) = LEFT$(ZWorkAra$(1)+ SPACE$(22),22)
  909.         RcvrRecNum = VAL(ZWorkAra$(2))
  910.         PUT 1,Temp
  911.         Temp = Temp + 1
  912.         NumRecs = NumRecs - 1
  913. ' ---[ notify receiver that has new mail waiting ]---
  914.         CALL SetUserFlag (RcvrRecNum, 512, "mail")
  915.      WEND
  916.      ZWasN$ = ""
  917.      IF ZWelcomeAboard THEN _                                        ' NEWU174
  918.         GOTO 3600                                                    ' NEWU174
  919.      ZOutTxt$ = "Adding new msg #" + _
  920.           STR$(ZHighMsgNumber)                                       ' RM08119301
  921.      IF NOT ZLocalUser THEN _
  922.         CALL UpdtCalr (ZOutTxt$,1)
  923.      GOSUB 4810
  924. 3600 NumDots = 0                                                     ' NEWU174
  925.      FOR WasJ = 1 TO ZLinesInMsg
  926.         IF NOT ZWelcomeAboard THEN _                                 ' NEWU174
  927.            CALL MarkTime (NumDots)                                   ' NEWU174
  928.         ZWasN$ = ZWasN$ + _
  929.              ZOutTxt$(WasJ)
  930.         IF LEN(ZWasN$) > 127 THEN _
  931.            LSET ZMsgRec$ = ZWasN$ : _
  932.            PUT 1 : _
  933.            ZWasN$ = MID$(ZWasN$,129)
  934. 3630 NEXT
  935.      IF LEN(ZWasN$) > 0 THEN _
  936.         LSET ZMsgRec$ = ZWasN$ : _
  937.         PUT 1
  938.      REDIM ZOutTxt$(ZMsgDim)
  939.      IF MsgCorrected THEN _
  940.         MsgCorrected = ZFalse : _
  941.         ActionFlag = ZTrue : _
  942.         CALL SkipLine (1) : _
  943.         GOSUB 1900
  944. 3640 CALL SkipLine (1)
  945.      GET 1,1
  946.      GOSUB 4830
  947.      ZUserFileIndex = UserFileIndexSave
  948.      LSET ZUserRecord$ = UserRecordHold$
  949. 3650 QuotedReply = ZFalse
  950.      MsgLockLines = 0
  951.      IF ZWelcomeAboard THEN _                                        ' NEWU174
  952.         RETURN                                                       ' NEWU174
  953.      IF ZReply OR MsgFwd THEN _
  954.         ZReply = ZFalse : _
  955.         ZAnsIndex = SaveAnsIndex : _
  956.         RETURN                                                       ' RM03119401
  957.      IF ZGetExtDesc THEN _
  958.         ZLinesInMsg = 0
  959.      IF GetOut THEN _                                                ' RM03319401
  960.         MParm = 1                                                    ' RM03319401
  961.      RETURN
  962. '
  963. ' ****  K - COMMAND FROM MAIN MENU (KILL MESSAGE)  ***
  964. '
  965. 3900 ZKillMessage = ZFalse
  966.      CALL SkipLine (1)
  967. 3930 ZOutTxt$ = "Msg #(s) to Kill" + LEFT$(", M)arked",-9*(ZMarkedMsgs$ <> "")) + ZPressEnterExpert$
  968.      GOSUB 4790
  969.      IF ZWasQ = 0 THEN _
  970.         RETURN
  971.      GOSUB 1893
  972.      ZWasZ$ = ZUserIn$(ZAnsIndex)                                    ' KGK020101
  973.      CALL UnMarkItems (ZMarkedMsgs$,ZAnsIndex,ZLastIndex,Found,ZTrue)
  974. 3935 CALL CheckInt (ZUserIn$(ZAnsIndex))
  975.      IF ZErrCode <> 0 THEN _
  976.         GOTO 3930
  977.      MsgToKill = ZTestedIntValue
  978. 3950 GOSUB 4700
  979.      CALL KillMsg (MsgToKill,ZActiveMessages)                        ' RM08159301
  980. 4040 IF ZKillMessage THEN _
  981.         RETURN
  982.      GOTO 3930
  983. '
  984. ' ****  Sysop Available toggle
  985. '
  986. 4130  ZSubParm = -8
  987.       CALL FindFKey
  988.       ZSubParm = 0
  989.       RETURN
  990. '
  991. ' ****  X)pert Toggle
  992. '
  993. 4240 CALL Toggle(9)
  994.      RETURN
  995. '
  996. ' ****  T)opic - QUICK SCAN MESSAGES  ***
  997. '
  998. 4320 QuickScanMsgs = ZTrue
  999.      ReadMsgs = ZFalse
  1000.      ScanMsgs = ZFalse
  1001.      MsgStart = 76
  1002.      MsgEnd = 100
  1003.      SecIndex= 0
  1004.      GOTO 4350
  1005. '
  1006. ' ****  R - COMMAND FROM MAIN MENU (READ MESSAGES)  ****
  1007. '
  1008. 4330 IF ZLinkNext THEN _                                             ' RM08219302
  1009.         ZLinkNext = ZFalse : _                                       ' RM08219302
  1010.         GOSUB 1893 : _
  1011.         GOSUB 4700 : _
  1012.         NumMsgsSelected = 1 : _
  1013.         ZAnsIndex = 1 : _
  1014.         MsgIndex = 1 : _
  1015.         ZLastIndex = 1 : _
  1016.         CanKill = (ZSysop OR ZUserSecLevel >= ZSecKillAny) : _
  1017.         IF LinkForward THEN _
  1018.            CurMsg = ZLastMsgRead + 1 : _
  1019.            GOTO 4450 _
  1020.         ELSE CurMsg = ZHighMsgNumber : _                             ' RM08119301
  1021.              GOTO 4490
  1022.      QuickScanMsgs = ZFalse
  1023.      ReadMsgs = ZTrue
  1024.      Forward = ZFalse
  1025.      ZGlobalRead = ZFalse
  1026.      HiLiteRec = -1
  1027.      ScanMsgs = ZFalse
  1028.      MsgStart = 6
  1029.      MsgEnd = 100
  1030.      IF ZLocalUserMode OR NOT ZLocalUser THEN _
  1031.         IF ReadMsgIn$ <> ZActiveMessageFile$ THEN _
  1032.            ReadMsgIn$ = ZActiveMessageFile$ : _
  1033.            CALL UpdtCalr ("Read Messages in " + ReadMsgIn$,1)
  1034.      GOSUB 4895
  1035.      GOTO 4350
  1036. '
  1037. ' ****  S - COMMAND FROM MAIN MENU (SCAN MESSAGE HEADERS)  ***
  1038. '
  1039. 4340 IF ZWasQ < 2 THEN _
  1040.         GOSUB 4895
  1041. 4345 QuickScanMsgs = ZFalse
  1042.      ReadMsgs = ZFalse
  1043.      ScanMsgs = ZTrue
  1044.      MsgStart = 6
  1045.      MsgEnd = 100
  1046.      SecIndex = 0
  1047. '
  1048. ' ** MESSAGE READ MAINLINE (QUICK SCAN, READ & SCAN) ALL USE THIS ROUTINE *
  1049. '
  1050. 4350 SearchHeader$ = ""
  1051.      SubInHeader$ = ""
  1052. 4352 SearchString$ = ""
  1053.      DontPrint = ZFalse
  1054.      JustReplied = ZFalse
  1055.      QuotedReply = ZFalse
  1056.      CanKill = (ZSysop OR ZUserSecLevel >= ZSecKillAny)
  1057.      GOSUB 1893
  1058.      GOSUB 4700
  1059.      ZWasZ$ = ""
  1060.      FOR WasI = 2 TO ZLastIndex                                      ' KG012802
  1061.         IF INSTR("Ss*",ZUserIn$(WasI)) > 0 THEN _
  1062.            ZUserIn$(WasI) = MID$(STR$(ZLastMsgRead+1),2) + "+"
  1063.         IF INSTR("Ll",ZUserIn$(WasI)) > 0 THEN _
  1064.            ZUserIn$(WasI) = MID$(STR$(ZHighMsgNumber),2) + "-"       ' RM08119301
  1065.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  1066.            GOSUB 4640                                                ' KG013001
  1067.      NEXT
  1068. 4360 ZWasLG$(11) = ZWasZ$
  1069.      NumMsgsSelected = ZLastIndex
  1070.      MsgIndex = ZAnsIndex
  1071.      ZLastIndex = 0
  1072.      AddressedToUser = ZFalse
  1073.      ToRequested = ZFalse
  1074.      FromRequested = ZFalse
  1075.      ZLinkNext = ZFalse                                              ' RM08219302
  1076.      CALL SaveUserActivity("M", ZNodeRecIndex, ZFalse)               ' RCHAT401
  1077. 4370 MsgIndex = MsgIndex  + 1
  1078. 4371 IF MsgIndex <= NumMsgsSelected THEN _
  1079.         IF LEN(ZUserIn$(MsgIndex)) = 1 AND _
  1080.            INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _
  1081.            GOTO 4370 _
  1082.         ELSE _
  1083.         CALL CheckInt (ZUserIn$(MsgIndex)) : _
  1084.         IF ZErrCode <> 0 THEN _
  1085.            ZWasEL = 4371 : _
  1086.            MParm = 8 : _                                             ' MS174/RM08139301
  1087.            RETURN _                                                  ' MS174/RM08139301 GOTO 13000 _
  1088.         ELSE CurMsg = ZTestedIntValue : _
  1089.              ZAnsIndex = MsgIndex : _
  1090.              GOTO 4415
  1091. 4380 WasA1$ = "Msg #" + _
  1092.            STR$(LowMsgNumber) + _
  1093.            "-" + _
  1094.            MID$(STR$(ZMsgPtr(ZActiveMessages,2)),2) + _              ' RM08159301
  1095.            " (H)lp,S)ince,L)ast" + _
  1096.            LEFT$(",G)lobal",8*(ZLinkedConf$ ="" OR ZGlobalRead)+8)
  1097.      CALL SkipLine (-QuickScanMsgs)                                  ' KG062301
  1098.      IF ZGlobalRead THEN _
  1099.         CALL QuickTPut1 ("Reading globally")
  1100.      IF AddressedToUser OR ToRequested OR FromRequested THEN _
  1101.         ZWasY$ = LEFT$("TO",-2*(ToRequested OR AddressedToUser)) + _
  1102.              LEFT$("/",-AddressedToUser) + _
  1103.              LEFT$("FROM",-4*(FromRequested OR AddressedToUser)) : _
  1104.         CALL QuickTPut1 ("Include only msgs "+ZWasY$+" you.  Read what msgs (? for help)") _
  1105.      ELSE WasA1$ = WasA1$ + ",T)o,F)rom,M)" : _
  1106.           IF ReadMsgs AND ZMarkedMsgs$ <> "" THEN _
  1107.              WasA1$ = WasA1$ + "arked" _
  1108.           ELSE WasA1$ = WasA1$ + "ine"
  1109.      IF SearchString$ = "" THEN _
  1110.         WasA1$ = WasA1$ + _
  1111.              ", text" _
  1112.      ELSE CALL QuickTPut1 ("Include only msgs with text " + SearchString$ + ".  Read what msgs (? for help)")
  1113. 4390 ZOutTxt$ = WasA1$ + ", [Q]uit)"
  1114.      ZMacroMin = 99
  1115.      ZTurboKey = 0
  1116. 4400 GOSUB 4790
  1117.      IF ZWasQ = 0 THEN _
  1118.         RETURN
  1119. 4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _
  1120.         WasY = INSTR("QqHh?",ZUserIn$(ZAnsIndex)) : _
  1121.         IF WasY > 2 THEN _
  1122.             ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
  1123.             CALL InitWelc (2) : _                                    ' IW174/RM08059306
  1124.             GOTO 4390 _
  1125.         ELSE IF WasY > 0 THEN _
  1126.                 RETURN
  1127.      MsgIndex = 0
  1128.      NumMsgsSelected = ZWasQ
  1129.      GOTO 4370
  1130. 4415 Forward = ZFalse
  1131.      Reverse = ZFalse
  1132.      FOR WasI = ZAnsIndex to ZLastIndex
  1133.         IF INSTR("Gg",ZUserIn$(WasI)) > 0 THEN _
  1134.            GOSUB 4640                                                ' KG020201
  1135.      NEXT
  1136.      IF ZAnsIndex <= ZLastIndex OR LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' DR020301
  1137.         IF INSTR("Ss*",ZUserIn$(ZAnsIndex)) > 0 THEN _
  1138.            CurMsg = ZLastMsgRead + 1 : _
  1139.            Forward = ZTrue : _
  1140.            GOTO 4430 _
  1141.         ELSE IF INSTR("Ll",ZUserIn$(ZAnsIndex)) > 0 THEN _
  1142.                 CurMsg = ZHighMsgNumber : _                          ' RM08119301
  1143.                 Reverse = ZTrue : _
  1144.                 GOTO 4490 _
  1145.         ELSE IF INSTR("Gg",ZUserIn$(ZAnsIndex)) > 0 THEN _
  1146.                 ZGlobalRead = ZTrue : _
  1147.                 GOTO 4370
  1148. 4416 IF INSTR("Mm",ZUserIn$(ZAnsIndex)) = 0 THEN _
  1149.         GOTO 4418
  1150.      IF ReadMsgs THEN _
  1151.         ZWasZ$ = "M" : _
  1152.         CALL UnMarkItems (ZMarkedMsgs$,MsgIndex,NumMsgsSelected,Found,ReadMsgs) : _
  1153.         MsgIndex = MsgIndex + Found _
  1154.      ELSE Found = ZFalse
  1155.      AddressedToUser = NOT Found
  1156.      GOTO 4370
  1157. 4418 ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
  1158.      IF ZWasA > 0 THEN _
  1159.         ToRequested = (ZWasA > 2) : _
  1160.         FromRequested = (ZWasA < 3) : _
  1161.         GOTO 4370
  1162.      IF CurMsg = 0 THEN _
  1163.         IF SearchHeader$ <> "" THEN _
  1164.            GOTO 4370 _
  1165.         ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _
  1166.              SearchCt = 0 : _
  1167.              CALL AllCaps (SearchString$) : _
  1168.              CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
  1169.              SearchHeader$ = SearchString$ : _
  1170.              SubInHeader$ = SearchHeader$ : _
  1171.              GOTO 4370
  1172.      CALL SkipLine (-ReadMsgs)                                       ' KG062301
  1173. 4430 IF RIGHT$(ZUserIn$(ZAnsIndex),1) = "+" THEN _
  1174.         Forward = ZTrue
  1175.      IF RIGHT$(ZUserIn$(ZAnsIndex),1) = "-" THEN _
  1176.         Reverse = ZTrue : _
  1177.         GOTO 4490
  1178. 4450 ZMsgDimIndex = 1    ' search FORWARD/EXACT for current msg
  1179. 4452 IF ZMsgDimIndex > ZActiveMessages THEN _                        ' RM08159301
  1180.         GOTO 4515
  1181.      IF ReadMsgs AND _
  1182.         ZMsgPtr(ZMsgDimIndex,2) = CurMsg THEN _
  1183.         GOTO 4520
  1184. 4470 IF ((ReadMsgs AND Forward) OR _
  1185.         QuickScanMsgs OR ScanMsgs) AND _
  1186.         ZMsgPtr(ZMsgDimIndex,2) >= CurMsg THEN _
  1187.         GOTO 4520
  1188. 4480 ZMsgDimIndex = ZMsgDimIndex + 1
  1189.      GOTO 4452
  1190. 4490 ZMsgDimIndex = ZActiveMessages  ' search REVERSE for current msg ' RM08159301
  1191. 4492 IF ZMsgDimIndex < 1 THEN _
  1192.         GOTO 4515
  1193.      IF ZMsgPtr(ZMsgDimIndex,2) <= CurMsg THEN _
  1194.         GOTO 4540
  1195. 4510 ZMsgDimIndex = ZMsgDimIndex - 1
  1196.      GOTO 4492
  1197. 4515 IF Forward THEN _
  1198.         ZOutTxt$ = "No new messages" : _
  1199.         ZLastMsgRead = ZHighMsgNumber : _                            ' RM08119301
  1200.         ZMailWaiting = ZFalse _
  1201.      ELSE ZOutTxt$ = "No such msg #" + _
  1202.                STR$(CurMsg)
  1203.      IF SubInHeader$ = "" THEN _
  1204.         GOSUB 4815
  1205.      ZLastIndex = 0
  1206.      GOTO 4637
  1207. 4520 EndingMsgIndex = ZMsgDimIndex   ' read a single message
  1208.      IF ReadMsgs AND NOT Forward THEN _
  1209.         GOTO 4560
  1210. 4530 StartMsgIndex = ZMsgDimIndex
  1211.      EndingMsgIndex = ZActiveMessages                                ' RM08159301
  1212.      WasSO = 1
  1213.      GOTO 4550
  1214. 4540 StartMsgIndex = ZMsgDimIndex
  1215.      EndingMsgIndex = 1
  1216.      WasSO = -1
  1217. 4550 WasXXX = EndingMsgIndex + WasSO
  1218.      ZMsgDimIndex = StartMsgIndex
  1219. 4552 IF ZMsgDimIndex = WasXXX THEN _    ' top msg read loop end is 4635
  1220.         CALL Carrier : _
  1221.         GOTO 4637
  1222. 4560   CurHeader = ZMsgPtr(ZMsgDimIndex,1)
  1223.        IF CurHeader < 1 THEN _
  1224.           GOTO 4515
  1225.        CALL CheckKBStop
  1226.        IF ZRet THEN _
  1227.          GOTO 4637
  1228.        GET 1,CurHeader
  1229.        ZPswdFailed = ZFalse
  1230.        UserInHeader = ZFalse
  1231.        ZWasZ$ = MID$(ZMsgRec$,101,15)
  1232.        MsgPswd$ = ZWasZ$
  1233.        CALL Trim(MsgPswd$)
  1234. 4561   GOSUB 4660
  1235.        GOSUB 4655
  1236. 4562   IF NOT CanKill THEN _
  1237.           IF INSTR(ZMsgRec$,"^READ^") > 0 AND NOT UserInHeader THEN _
  1238.              ZPswdFailed = ZTrue : _
  1239.              IF Forward OR Reverse THEN _
  1240.                 GOTO 4635
  1241. 4563   CurMsg = VAL(MID$(ZMsgRec$,2,4))
  1242.        IF ToRequested THEN _
  1243.           IF NOT MsgToCaller THEN _
  1244.              GOTO 4629
  1245.        IF FromRequested THEN _
  1246.           IF NOT MsgFromCaller THEN _
  1247.              GOTO 4629
  1248.        IF AddressedToUser AND NOT UserInHeader THEN _
  1249.           GOTO 4629
  1250.        WasX$ = MID$(ZMsgRec$,121,2)
  1251.        IF WasX$ = "  " THEN _
  1252.           MsgSec = ZMinLogonSec _
  1253.        ELSE MsgSec = CVI(WasX$)
  1254.        IF ZUserSecLevel < MsgSec THEN IF NOT ZSysOp THEN _
  1255.           GOTO 4629
  1256. 4580   IF INSTR(ZMsgRec$,ZWasLG$(11)) = 0 THEN _
  1257.           GOTO 4635
  1258. 4581   IF MID$(ZMsgRec$,116,1) = ZDeletedMsg$ THEN _
  1259.           GOTO 4630
  1260.        JustSearching = ZFalse
  1261.        IF SearchHeader$ <> "" THEN _
  1262.           ZFF = INSTR(ZMsgRec$,SearchHeader$) : _
  1263.           IF ZFF >= MsgStart AND ZFF <= MsgEnd THEN _
  1264.              HiLitePos = ZFF : _
  1265.              SearchCt = 0 : _
  1266.              GOTO 4582 _
  1267.           ELSE IF ReadMsgs AND SearchString$ <> "" THEN _
  1268.                   JustSearching = ZTrue : _
  1269.                   GOTO 4582 _
  1270.                ELSE GOTO 4629
  1271. 4582   WasPG = ZFalse
  1272.        IF MID$(ZWasZ$,1,1) = "!" THEN _
  1273.           IF NOT CanKill THEN _
  1274.              WasPG = ZTrue : _
  1275.              ZPswdSave$ = MID$(ZWasZ$,2) + _
  1276.                               " " : _
  1277.              ZAttemptsAllowed = 0 : _
  1278.              ZSubParm = 1 : _
  1279.              CALL PassWrd
  1280. 4584   IF ZPswdFailed AND _
  1281.           (QuickScanMsgs OR (ScanMsgs AND NOT WasPG)) THEN _
  1282.           GOTO 4635
  1283. 4585   IF ZPswdFailed THEN _
  1284.           IF WasPG THEN _
  1285.              WasSJ$ = "<PASSWORD>" _
  1286.           ELSE WasSJ$ = "<PROTECTED>" _
  1287.        ELSE WasSJ$ = MID$(ZMsgRec$,76,25)
  1288. 4590   IF QuickScanMsgs THEN _
  1289.           ZOutTxt$ = LEFT$(ZMsgRec$,5) + _
  1290.                " " + _
  1291.                LEFT$(WasSJ$,19) + _
  1292.                " " : _
  1293.           CALL CheckColor (ZOutTxt$,SubInHeader$,ZEmphasizeOff$) : _
  1294.           GOSUB 4810 : _
  1295.           SecIndex = SecIndex + 1 : _
  1296.           IF SecIndex = 3 THEN _
  1297.              SecIndex = 0 : _
  1298.              CALL SkipLine (1) : _
  1299.              GOTO 4630  _
  1300.           ELSE GOTO 4630
  1301. 4600   IF ScanMsgs THEN _
  1302.           GOSUB 4715 : _
  1303.           GOTO 4630
  1304.        IF NOT JustSearching THEN _
  1305.           GOSUB 4710 : _
  1306.           IF QuotedReply THEN _
  1307.              QuotedReply = ZFalse : _
  1308.              GOTO 4602
  1309.        IF ZRet THEN _
  1310.           GOTO 4630
  1311.        CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
  1312.        ShowKill =  - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill))
  1313.        IF ZExpertUser THEN _
  1314.           WasA1$ = ",H" + _
  1315.                 MID$(",R",1,- (ZUserSecLevel >= ZOptSec(5)) * 2) + _
  1316.                 ",T,M,=,+,-" + _
  1317.                 MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
  1318.                 MID$(",K",1,ShowKill * 2) + _
  1319.                 MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
  1320.                 MID$(",S",1, - CanChangeSec * 2) + _                 ' ME174/RM08039302
  1321.                 MID$(",E",1, - (ZSysOp AND ZLocalUser) * 2) : _      ' ME174/RM08039302
  1322.           GOTO 4601
  1323.        GOSUB 4617
  1324. 4601   ZTurboKey = -ZTurboKeyUser
  1325. 4602   IF NOT ZPswdFailed THEN _
  1326.           GOTO 4603
  1327.        IF WasPG AND (NOT ZNonStop) THEN _
  1328.           ZAttemptsAllowed = 2 : _
  1329.           ZSubParm = 2 : _
  1330.           CALL PassWrd
  1331.        IF ZPswdFailed THEN _
  1332.           GOTO 4629
  1333.        CALL QuickTPut1 ("   Re:  " + MID$(ZMsgRec$,76,25))
  1334. 4603   IF NOT JustSearching THEN                                     ' GG040901
  1335.           IF ZWasGR > 0 THEN _                                       ' RM040401
  1336.              Temp$ = STRING$(ZRightMargin,205) _                     ' RM040401
  1337.           ELSE _                                                     ' RM040401
  1338.              Temp$ = STRING$(ZRightMargin,61)                        ' RM040401
  1339.           CALL QuickTPut (ZFG5$ + Temp$ + ZEmphasizeOff$,1)          ' GG040901/RM040401
  1340.        ENDIF                                                         ' RM040401
  1341.        GOSUB 4750
  1342.        JustReplied = ZFalse
  1343.        DontPrint = ZFalse
  1344.        IF JustSearching THEN _
  1345.           GOTO 4629
  1346.        IF ZAnsIndex > NumMsgsSelected THEN _
  1347.           GOTO 4650
  1348.        CALL SkipLine (1)
  1349.        GOSUB 4890
  1350.        ZKillMessage = ZFalse
  1351.        ZReply = ZFalse
  1352. 4604   ZTurboKey = -ZTurboKeyUser
  1353.        CALL AskMore (WasA1$,ZTrue,ZFalse,WasXX,ZFalse)
  1354.        IF ZSubParm = -1 THEN _                                       ' RM12119301
  1355.           EXIT SUB                                                   ' RM12119301
  1356.        IF ZNo THEN _
  1357.           IF WasXX >= 32000 THEN _
  1358.              WasXX = 0 : _
  1359.              ZAnsIndex = ZLastIndex + 1 : _
  1360.              RETURN _
  1361.           ELSE GOTO 4637
  1362.        IF ZNonStop THEN _
  1363.           GOTO 4629
  1364.        CALL AraAllCaps(ZUserIn$(),1)
  1365.        ZReply = (ZReply OR ZUserIn$(1) ="R")
  1366. 4605   ON INSTR(" FUST+-KRH?=ME",LEFT$(ZUserIn$(1),1)) GOTO _
  1367.           4620,4606,4607,4608,4609,4610,4610,4611,4621,4612,4614,4615,4652,4616 ' ME174/RM08039302
  1368.        GOTO 4620
  1369. 4606   IF NOT (UserInHeader OR CanChangeSec) THEN _   ' Forward
  1370.          GOTO 4620
  1371.        MsgFwd = ZTrue
  1372.        GOTO 4623
  1373. 4607   IF ZUserSecLevel < ZOptSec(54) THEN _    ' User edit
  1374.           GOTO 4620
  1375.        EditFromRead = 1
  1376.        ReturnRead = ZFalse                                           ' SU174/RM08079301
  1377.        ZReply=ZTrue
  1378.        CALL PutMsgAttr
  1379.        TempHashValue$ = MsgFrom$
  1380.        CALL Trim (TempHashValue$)
  1381.        IF TempHashValue$ = "SYSOP" THEN _
  1382.           TempHashValue$ = ZSecretName$
  1383.        GOTO 4780
  1384. 4608   IF CanChangeSec THEN _            ' Security to read
  1385.           CALL PutMsgAttr : _
  1386.           GOSUB 4665 : _
  1387.           ZReply = ZFalse : _
  1388.           QuotedReply = ZTrue : _
  1389.           CALL GetMsgAttr : _
  1390.           DontPrint = ZTrue : _
  1391.           ZUserIn$ = "=" : _
  1392.           JustReplied = ZTrue : _
  1393.           GOTO 4560
  1394.        GOTO 4620
  1395. 4609   CALL SetThread (CurMsg, OrigSubject$)     ' Thread
  1396.        IF ZWasQ > 0 THEN _
  1397.           SearchHeader$ = ZUserIn$(2) : _
  1398.           SubInHeader$ = SearchHeader$ : _
  1399.           CALL Trim (SubInHeader$) : _
  1400.           GOTO 4352
  1401.        GOTO 4620
  1402. 4610   ZWasA = INSTR(" +-",ZUserIn$(1))      ' +/- read direction
  1403.        CurMsg = CurMsg + 5 - 2 * ZWasA
  1404.        Forward = (ZWasA = 2)
  1405.        Reverse = (NOT Forward)
  1406.        SearchString$ = ""
  1407.        IF Reverse THEN _
  1408.           GOTO 4490 _
  1409.        ELSE GOTO 4450
  1410. 4611   IF (UserInHeader OR CanKill) THEN _     ' Kill
  1411.          IF ZUserSecLevel >= ZOptSec(9) THEN _
  1412.             CALL PutMsgAttr : _
  1413.             MsgToKill = CurMsg : _
  1414.             Temp = ZWasQ : _
  1415.             GOSUB 3950 : _
  1416.             CALL GetMsgAttr : _
  1417.             GOTO 4629 _
  1418.          ELSE ZViolation$ = "MORE KILL" : _
  1419.               GOSUB 4880 : _
  1420.               GOTO 4629
  1421.        GOTO 4620
  1422. 4612   ZFileName$ = ZHelp$(7)  ' H - help
  1423.        CALL InitWelc (2)                                             ' IW174/RM08059306
  1424. 4614   GOSUB 4617
  1425.        GOTO 4604
  1426. 4615   CALL SkipLine (1) ' = read again
  1427.        GOTO 4560
  1428. 4616   CALL MessageExport (EMsgRec$, ESent$, Year$, MsgSec, MsgTo$, MsgFrom$, Subject$) ' ME174/RM08039302
  1429.        GOTO 4620                                                     ' ME174/RM08039302
  1430. 4617   WasA1$ = ",H)lp" + _
  1431.                 MID$(",R)ply",1, - (ZUserSecLevel >= ZOptSec(5)) * 6) + _
  1432.                 ",T)hrd,M)rk,=,+,-" + _
  1433.                 MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
  1434.                 MID$(",K)ill",1, ShowKill * 6) + _
  1435.                 MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _
  1436.                 MID$(",S)ec",1, - CanChangeSec * 5) + _              ' ME174/RM08039302
  1437.                 MID$(",E)xpt",1, - (ZSysOp AND ZLocalUser) * 6)      ' ME174/RM08039302
  1438.        RETURN
  1439. 4620   IF NOT ZReply THEN _
  1440.           GOTO 4629
  1441. 4621   IF ZUserSecLevel < ZOptSec(5) THEN _     ' Reply
  1442.           ZViolation$ = "MORE RE" : _
  1443.           GOSUB 4880 : _
  1444.           ZReply = ZFalse : _
  1445.           GOTO 4629
  1446.        IF LEFT$(OrigSubject$,3) <> "(R)" THEN _
  1447.           OrigSubject$ = "(R)" + _
  1448.                      LEFT$(OrigSubject$,22)
  1449. 4622   MsgTo$ = MsgFrom$
  1450.        CALL Trim (MsgTo$)
  1451.        MsgFrom$ = ZActiveUserName$
  1452. 4623   DontPrint = ZFalse
  1453.        CALL PutMsgAttr
  1454.        IF MsgFwd THEN GOTO 4624
  1455.        IF ZNoQuoting THEN GOTO 4627
  1456.        ZOutTxt$ = ZFG6$ + "Quote " + ZFG7$ + MsgTo$ + "'s" + ZFG6$ + _ ' RM060301
  1457.                   " message (Y,[N]" + ZFG6$ + ")" + ZEmphasizeOff$
  1458.        GOSUB 4875
  1459.        IF ZRet OR NOT ZYes THEN _
  1460.           GOTO 4627
  1461. 4624   QuotedReply = ZTrue
  1462.        ZLinesInMsg = ZLinesInMsg - 1
  1463.        IF HiLitedLine > 0 THEN _
  1464.           ZOutTxt$(HiLitedLine) = ZOutTxt$(0) : _
  1465.           HiLitedLine = 0
  1466.        IF MsgFwd THEN _
  1467.           TempRightMargin = ZRightMargin _
  1468.        ELSE _
  1469.           TempRightMargin = ZRightMargin - 2
  1470.        CALL WordWrap (TempRightMargin,ZLinesInMsg,ZOutTxt$())
  1471.        IF ZLinesInMsg > ZMsgDim THEN _
  1472.           ZLinesInMsg = ZMsgDim : _
  1473.           CALL QuickTPut1 ("Original msg truncated to " + _
  1474.                       STR$(ZMsgDim) + " lines for editing!")
  1475.        IF MsgFwd THEN GOTO 4625
  1476.        QuoteInit = INSTR(MsgTo$, " ")                                ' QUOT174
  1477.        QuoteInit = QuoteInit + 1                                     ' QUOT174
  1478.        QuoteMark$ = LEFT$(MsgTo$, 1) + _                             ' QUOT174
  1479.           MID$(MsgTo$, QuoteInit, 1) + ">"                           ' QUOT174
  1480.        IF MsgTo$ = "SYSOP" THEN _                                    ' QUOT174
  1481.           QuoteMark$ = LEFT$(ZSysopFirstName$, 1) + _                ' QUOT174
  1482.              LEFT$(ZSysopLastName$, 1) + ">"                         ' QUOT174
  1483.        FOR WasX = 1 TO ZLinesInMsg
  1484.           IF MID$(ZOutTxt$(WasX), 3, 1) = ">" THEN _                 ' QUOT174
  1485.              ZOutTxt$(WasX) = ZOutTxt$(WasX) _                       ' QUOT174
  1486.           ELSE ZOutTxt$(WasX) = QuoteMark$ + ZOutTxt$(WasX)          ' QUOT174
  1487.        NEXT
  1488. 4625   WasX$ = MsgTo$
  1489.        GOSUB 2001
  1490. '      IF NOT ZReply AND NOT MsgFwd AND MsgLockLines = 0 THEN _      ' RM03119401
  1491. '         GOTO 4628                                                  ' RM03119401
  1492.        IF (ZActiveMessages >= ZMaxMsgs) OR MsgTo$ = "" THEN _        ' RM08159301
  1493.           GOTO 4628
  1494.        IF MsgFwd THEN _
  1495.           MsgFwd$ = ZActiveUserName$ : _
  1496.           CALL Trim (MsgFwd$) : _
  1497.           CALL Trim (WasX$) : _
  1498.           MsgFwd$ = "Msg was to " + WasX$ + _
  1499.              ", forwarded by " + MsgFwd$
  1500.        IF (MsgFwd AND CanChangeSec AND NOT MsgFromCaller) THEN _
  1501.           CALL Trim (MsgFrom$) : _
  1502.           ZOutTxt$ = "Message was from " + _
  1503.              MsgFrom$ + _
  1504.              ", change to " + _
  1505.              ZActiveUserName$ + _
  1506.              " (Y,[N])" : _
  1507.           GOSUB 4875 : _
  1508.           IF ZYes THEN _
  1509.              MsgFrom$ = ZActiveUserName$ : _
  1510.              CALL Trim (MsgFrom$) : _
  1511.              GOTO 4626
  1512.        IF MsgFwd AND NOT MsgFromCaller THEN _
  1513.           FOR MsgFwdCount = ZLinesInMsg TO 1 STEP -1 : _
  1514.              ZOutTxt$(MsgFwdCount + 2) = ZOutTxt$(MsgFwdCount) : _
  1515.           NEXT MsgFwdCount : _
  1516.           ZOutTxt$(1) = MsgFwd$ : _
  1517.           ZOutTxt$(2) = "" : _
  1518.           ZLinesInMsg = ZLinesInMsg + 2 : _
  1519.           IF NOT CanChangeSec THEN _
  1520.              MsgLockLines = 1
  1521. 4626   ZWasZ$ = "L"
  1522.        WasL = 1
  1523.        GOSUB 2101                                                    ' EDIT174
  1524.        IF ZYes THEN                                                  ' EDIT174
  1525.           GOSUB 2110                                                 ' EDIT174
  1526.        ELSE                                                          ' EDIT174
  1527.        IF ZLinesInMsg >= ZMaxMsgLines THEN _
  1528.           CALL QuickTPut ("Msg cannot exceed" + _
  1529.                       STR$(ZMaxMsgLines) + " lines! ",0)
  1530.        IF NOT MsgFwd THEN _
  1531.           CALL SkipLine (1) : _                                      ' EDIT174
  1532.           CALL QuickTPut1 (ZFG5$ + "Please delete unneeded lines, then " + _ ' RM060301
  1533.                ZFG7$ + "[C]" + ZFG5$ + " continues reply" + ZEmphasizeOff$)
  1534.        GOSUB 3200
  1535.        GOSUB 3020
  1536.        GOSUB 2300
  1537.        END IF                                                        ' EDIT174
  1538.        GOTO 4628
  1539. 4627   GOSUB 2000
  1540. 4628   ZReply = ZFalse
  1541.        JustReplied = ZTrue
  1542.        QuotedReply = ZTrue
  1543.        CALL GetMsgAttr
  1544.        DontPrint = ZTrue
  1545.        ZUserIn$ = "="
  1546.        QuotedReply = ZTrue
  1547.        MsgFwd = ZFalse
  1548.        GOTO 4560
  1549. 4629   QuotedReply = ZFalse
  1550.        JustReplied = ZFalse
  1551.        IF NOT Forward AND NOT Reverse THEN _
  1552.           GOTO 4370
  1553. 4630   IF ZMsgDimIndex = EndingMsgIndex AND NOT ReadMsgs THEN _      ' RM031901
  1554.           CALL QuickTPut1 (ZFG6$ + "-- End of Msgs --" + ZEmphasizeOff$) : _ 'RM031901
  1555.           CALL AskMore (",M)ark, #(s) to read",ZTrue,ZFalse,WasXX,ZFalse) _ ' RM031901
  1556.        ELSE _                                                        ' RM031901
  1557.           CALL AskMore (",M)ark, #(s) to read",ZTrue,ZTrue,WasXX,ZFalse) ' RM031901
  1558.        IF ZWasQ = 0 OR ZYes THEN _
  1559.           GOTO 4631
  1560.        IF ZNo THEN _
  1561.           RETURN
  1562.        IF ZSubParm = -1 THEN _
  1563.           MParm = 2 : _
  1564.           RETURN                                                     ' MS174/RM08139301 RETURN 10595
  1565.        IF ZRet THEN _
  1566.           RETURN
  1567.        ZWasZ$ = ZUserIn$(1)
  1568.        CALL AllCaps (ZWasZ$)
  1569.        IF ZWasZ$ = "M" THEN _
  1570.           ZLastIndex = ZWasQ : _
  1571.           ZAnsIndex = 1 : _
  1572.           CALL AskItems ("M",ZWasZ$,ZTrue,"msg",ZMarkedMsgs$,ZFalse) ' RM01209401
  1573.        IF VAL(ZWasZ$) > 0 THEN _
  1574.           FOR WasI = ZWasQ TO 1 STEP -1 : _
  1575.              ZUserIn$(WasI + 1) = ZUserIn$(WasI) : _
  1576.           NEXT : _
  1577.           ZUserIn$(1) = MID$(ZAllOpts$,INSTR(ZOrigCommands$,"R"),1) : _
  1578.           ZLastIndex = ZWasQ + 1 : _
  1579.           ZAnsIndex = 1 : _
  1580.           MParm = 5 : _                                              ' MS174/RM08139301
  1581.           RETURN                                                     ' KG062301/RM08139301 RETURN 1235
  1582. 4631   IF NOT Forward AND NOT Reverse THEN _                         ' KG062301
  1583.           GOTO 4370                                                  ' KG062301
  1584.        CALL CheckCarrier                                             ' KG062301
  1585.        IF ZSubParm THEN _
  1586.           MParm = 2 : _
  1587.           RETURN                                                      ' MS174/RM08139301 RETURN 10595
  1588.        IF ZRet THEN _
  1589.           RETURN
  1590. 4635 IF WasSO = 0 THEN _      ' end msg read loop top is 4552
  1591.         WasSO = 1
  1592.      IF SearchString$ <> "" THEN _
  1593.         SearchCt = SearchCt + 1 : _
  1594.         IF SearchCt > 99 THEN _
  1595.            SearchCt = 0 : _
  1596.            ZOutTxt$ = "Searched for " + SearchString$ + " thru msg" + _
  1597.                       STR$(CurMsg) + "  Continue ([Y],N)" : _
  1598.            GOSUB 4790 : _
  1599.            IF ZNo THEN _
  1600.               RETURN
  1601.      ZMsgDimIndex = ZMsgDimIndex + WasSO
  1602.      GOTO 4552
  1603. 4637 ZLastIndex = 0
  1604.      CALL SkipLine (1)
  1605.      IF Forward OR Reverse THEN _
  1606.         CALL NextConf (ZGlobalRead) : _
  1607.         IF ZHomeConf$ <> "" THEN _
  1608.            ZLinkNext = ZTrue : _                                     ' RM08219302
  1609.            LinkForward = Forward : _
  1610.            ZConfMailJoin = ZTrue : _                                 ' RM02079401
  1611.            MParm = 6 : _                                             ' MS174/RM08139301
  1612.            RETURN                                                    ' MS174/RM08139301 RETURN 1205
  1613.      IF ReadMsgs THEN _
  1614.         SearchString$ = "" : _
  1615.         SearchHeader$ = "" : _
  1616.         SubInHeader$ = "" : _
  1617.         ToRequested = ZFalse : _
  1618.         FromRequested = ZFalse : _
  1619.         AddressedToUser = ZFalse : _
  1620.         GOTO 4370
  1621. 4640 FOR WasJ = WasI to ZLastIndex-1                                 ' KG013001
  1622.         ZUserIn$(WasJ) = ZUserIn$(WasJ+1)                            ' KG013001
  1623.      NEXT                                                            ' KG013001
  1624.      ZGlobalRead = ZTrue                                             ' KG013001
  1625.      ZLastIndex = ZLastIndex - 1                                     ' KG013001
  1626.      RETURN                                                          ' KG013001
  1627. 4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
  1628.      CALL QuickTPut1 ("--End Msgs--")
  1629.      RETURN
  1630. 4652 '****     mark current message         ****
  1631.      ZMarkedMsgs$ = ZMarkedMsgs$ + STR$(CurMsg) + ZCarriageReturn$
  1632.      CALL ReportMarked (ZMarkedMsgs$,"msg")
  1633.      GOTO 4604
  1634. 4655 '****     update last message read     ****
  1635.      IF SearchHeader$ <> "" OR SearchString$ <> "" OR NOT ReadMsgs THEN _
  1636.         RETURN
  1637. 4656 IF ZMsgPtr(ZMsgDimIndex,2) > ZLastMsgRead THEN _
  1638.         ZMailWaiting = ZFalse : _
  1639.         ZLastMsgRead = ZMsgPtr(ZMsgDimIndex,2)
  1640.      RETURN
  1641. 4660 ZNumHeaders = ASC(MID$(ZMsgRec$,67,1))
  1642.      FirstActive = 0
  1643.      IF ZNumHeaders < 1 THEN _
  1644.         ZNumHeaders = 1
  1645.      CurrHeaderRecNum = LOC(1)
  1646.      WasI = 1
  1647. 4661 WasY = (ASC(MID$(ZMsgRec$,116,1)) = 225)
  1648.      IF FirstActive = 0 THEN _
  1649.         IF WasY THEN _
  1650.            FirstActive = LOC(1)
  1651.      GOSUB 4662
  1652.      GET 1
  1653.      CALL ChkIfMsgHeader
  1654.      IF NOT ZOK THEN _
  1655.         ZNumHeaders = WasI
  1656.      IF MsgToCaller AND (WasY OR (ZUserSecLevel < ZSecKillAny)) THEN _
  1657.         CurrHeaderRecNum = LOC(1) - 1 _
  1658.      ELSE WasI = WasI + 1 : _
  1659.           IF WasI <= ZNumHeaders THEN _
  1660.               GOTO 4661 _
  1661.           ELSE IF FirstActive > 0 THEN _
  1662.                   CurrHeaderRecNum = FirstActive
  1663.      GET 1, CurrHeaderRecNum
  1664.      UserInHeader = (MsgFromCaller OR MsgToCaller)
  1665.      RETURN
  1666. 4662 CALL ChkMsgName (MsgFromCaller,MsgToCaller)
  1667.      RETURN
  1668. '
  1669. ' ****  S - CHANGE MESSAGE SECURITY   ***
  1670. '
  1671. 4665 CALL Trim (MsgFrom$)
  1672.      ZOutTxt$ = "Change sender's name from " + _
  1673.         MsgFrom$ + _
  1674.         " to"
  1675.      GOSUB 4860
  1676.      IF ZWasQ = 0 THEN _
  1677.         GOTO 4666
  1678.      IF LEN(ZUserIn$) > 30 THEN _
  1679.         CALL QuickTPut1 ("30 chars max") : _
  1680.         GOTO 4665
  1681.      CALL AllCaps (ZUserIn$)
  1682.      MsgFrom$ = ZUserIn$
  1683. 4666 CALL Trim (MsgTo$)
  1684.      ZOutTxt$ = "Change receiver's name from " + _
  1685.         MsgTo$ + _
  1686.         " to"
  1687.      GOSUB 4860
  1688.      IF ZWasQ = 0 THEN _
  1689.         GOTO 4667
  1690.      IF LEN(ZUserIn$) > 30 THEN _
  1691.         CALL QuickTPut1 ("30 chars max") : _
  1692.         GOTO 4666
  1693.      CALL AllCaps (ZUserIn$)
  1694.      MsgTo$ = ZUserIn$
  1695.      TempMsgTo$ = ZUserIn$
  1696.      CALL SetWhoTo (ZFalse,MsgTo$,MsgFrom$,RcvrRecNum,Found,ZTrue)   ' KG012502
  1697.      IF MsgTo$ = "" THEN MsgTo$ = TempMsgTo$
  1698. 4667 CALL Trim (Subject$)
  1699.      ZOutTxt$ = "Change subject from " + _
  1700.         Subject$ + _
  1701.         " to"
  1702.      GOSUB 4860
  1703.      IF ZWasQ = 0 THEN _
  1704.         GOTO 4668
  1705.      IF LEN(ZUserIn$) > 25 THEN _
  1706.         CALL QuickTPut1 ("25 chars max") : _
  1707.         GOTO 4667
  1708.      CALL AllCaps (ZUserIn$)
  1709.      Subject$ = ZUserIn$
  1710. 4668 CALL ChangeInt (ZTrue,"min sec to read",MsgSec,-32000,ZSysopSecLevel)
  1711.      IF ZWasQ <> 0 THEN _
  1712.         MsgSec = ZTestedIntValue
  1713. 4669 ZReply = ZTrue
  1714.      CALL MsgProt (MsgTo$,Found,MsgPswd$)
  1715.      ZReply = ZFalse
  1716. 4670 MsgTo$ = LEFT$(MsgTo$ + SPACE$(22),22)
  1717.      MsgFrom$ = LEFT$(MsgFrom$ + SPACE$(31),31)
  1718.      Subject$ = LEFT$(Subject$ + SPACE$(25),25)
  1719.      MsgPswd$ = LEFT$(MsgPswd$ + SPACE$(15),15)
  1720.      ZSubParm = 3
  1721.      CALL FileLock
  1722.      GET 1,CurHeader
  1723.      MID$(ZMsgRec$,37,22) = MsgTo$
  1724.      MID$(ZMsgRec$,6,31) = MsgFrom$
  1725.      MID$(ZMsgRec$,76,25) = Subject$
  1726.      MID$(ZMsgRec$,121,2) = MKI$(MsgSec)
  1727.      MID$(ZMsgRec$,101,15) = MsgPswd$
  1728.      IF LEFT$(MsgPswd$,6) = "^READ^" THEN _
  1729.         MID$(ZMsgRec$,1,1) = "*" _
  1730.      ELSE _
  1731.         MID$(ZMsgRec$,1,1) = " "
  1732.      PUT 1,CurHeader
  1733.      ZSubParm = 4
  1734.      CALL FileLock
  1735.      CALL QuickTPut1 ("Message header changed")
  1736.      CALL SkipLine (1)
  1737.      RETURN
  1738. '
  1739. ' *****  OPEN AND SETUP MESSAGE BASE  *****
  1740. '
  1741. 4700 CALL OpenMsg
  1742.      IF ZErrCode = 64 THEN _
  1743.         ZErrCode = 0 : _
  1744.         ZJParm = 4 : _                                               ' RM08119301
  1745.         CALL JoinConference (Found)                                  ' JC174/RM08109301/RM09259302
  1746.      FIELD 1, 128 AS ZMsgRec$
  1747.      RETURN
  1748. '
  1749. ' *  FORMAT MESSAGE HEADER INFORMATION FOR DISPLAY
  1750. '
  1751. 4710 IF ZRet THEN _
  1752.         RETURN
  1753. 4715 IF MID$(ZMsgRec$,37,5) = "ALL  " THEN _
  1754.         MsgTo$ = "ALL" : _
  1755.         GOTO 4725
  1756. 4720 MsgTo$ = MID$(ZMsgRec$,37,22)
  1757.      CALL Trim (MsgTo$)
  1758.      IF ZNumHeaders > 1 THEN _
  1759.         MsgTo$ = MsgTo$ + " et al."
  1760. 4725 IF LEN(MsgTo$) < 23 THEN _
  1761.         MsgTo$ = MsgTo$ + _
  1762.                       SPACE$(23 - LEN(MsgTo$))
  1763.      Subject$ = MID$(ZMsgRec$,76,25)
  1764.      CALL Trim (Subject$)
  1765.      CALL AllCaps (Subject$)
  1766.      OrigSubject$ = Subject$
  1767.      IF ZPswdFailed THEN _
  1768.         Subject$ = WasSJ$
  1769. 4730 MsgFrom$ = MID$(ZMsgRec$,6,31)
  1770.      CALL Trim (MsgFrom$)
  1771.      IF LEN(MsgFrom$) < 23 THEN _
  1772.         MsgFrom$ = MsgFrom$ + _
  1773.                         SPACE$(23 - LEN(MsgFrom$))
  1774.      IF ZUserSecLevel >= ZSecChangeMsg THEN _
  1775.         Year$ = "  Security:" + _
  1776.               STR$(MsgSec) _
  1777.         ELSE Year$ = ""
  1778.      IF MID$(ZMsgRec$,101,1) = "!" THEN _
  1779.         MID$(ZMsgRec$,1,1) = "!"
  1780.      EMsgRec$ = LEFT$(ZMsgRec$,5)                                    ' ME174/RM08039302
  1781.      ZOutTxt$ = ZFG1$ + "Msg #: " + EMsgRec$ + _                     ' ME174/RM08039302
  1782.           Year$ + SPACE$ (22-LEN(Year$)) + ZConfName$
  1783.      ESent$ = MID$(ZMsgRec$,68,8) + " " + MID$(ZMsgRec$,59,5)        ' ME174/RM08039302
  1784.      Year$ = ZFG4$ + "   Sent: " + ESent$                            ' ME174/RM08039302
  1785.      IF MID$(ZMsgRec$,123,6) = SPACE$(6) THEN _                      ' DGSMSGRCV
  1786.          DGSMSGRCV$ = " -> " _                                       ' DGSMSGRCV
  1787.      ELSE _                                                          ' DGSMSGRCV
  1788.          DGSMSGRCV$ = " => "                                         ' DGSMSGRCV
  1789.      IF NOT ZRet THEN _
  1790.         IF ReadMsgs THEN _
  1791.            CALL QuickTPut1 (ZOutTxt$): _
  1792.            WasX$ = MsgFrom$ : _
  1793.            CALL CheckColor (WasX$,SubInHeader$,ZFG2$) : _
  1794.            CALL QuickTPut1 (ZFG2$ + " From:  " + WasX$ + Year$) : _
  1795.            GOSUB 4735 : _
  1796.            WasX$ = MsgTo$ : _
  1797.            CALL CheckColor (WasX$,SubInHeader$,ZFG3$) : _
  1798.            CALL QuickTPut1 (ZFG3$ + "   To:  " + WasX$ + "  " + ZFG2$ + Year$) : _
  1799.            CALL CheckColor (Subject$,SubInHeader$,ZFG4$) : _
  1800.            ZOutTxt$ = ZFG4$ + "   Re:  " + _
  1801.                 Subject$ + ZEmphasizeOff$ _
  1802.         ELSE ZOutTxt$ = ZFG1$ + LEFT$(ZMsgRec$,5) + _
  1803.                   " " + _
  1804.                   MID$(ZMsgRec$,68,5) + _
  1805.                   " " + _
  1806.                   + ZFG2$ + LEFT$(MsgFrom$,18) + _
  1807.                     DGSMSGRCV$ + _                                   ' DGSMSGRCV
  1808.                   + ZFG3$ + LEFT$(MsgTo$,19) + _
  1809.                   " " + _
  1810.                   + ZFG4$ + LEFT$(Subject$,24) + ZEmphasizeOff$ : _
  1811.              CALL CheckColor (ZOutTxt$,SubInHeader$,"") : _
  1812.              GOTO 4745
  1813.      IF QuickScanMsgs OR _
  1814.         ScanMsgs THEN _
  1815.            GOTO 4745 _
  1816.      ELSE GOTO 4740
  1817. 4735 IF MID$(ZMsgRec$,123,6) = STRING$(6,0) OR _
  1818.         MID$(ZMsgRec$,123,6) = SPACE$(6) THEN _
  1819.            Year$ = " Rcvd: -NO-" : _
  1820.            RETURN
  1821.      Year$ = " Rcvd: " + _
  1822.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,123,1))),2) + _
  1823.            "-" + _
  1824.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,124,1))),2) + _
  1825.            "-" + _
  1826.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,125,1))),2) + _
  1827.            " " + _
  1828.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,126,1))),2) + _
  1829.            ":" + _
  1830.            RIGHT$(STR$(ASC(MID$(ZMsgRec$,127,1))),2)
  1831.      FOR WasI = 8 TO 15
  1832.         IF MID$(Year$,WasI,1) = " " THEN _
  1833.            MID$(Year$,WasI,1) = "0"
  1834.      NEXT
  1835.      FOR WasI = 17 TO 21
  1836.         IF MID$(Year$,WasI,1) = " " THEN _
  1837.            MID$(Year$,WasI,1) = "0"
  1838.      NEXT
  1839.      RETURN
  1840. 4740 IF (NOT MsgToCaller) THEN _
  1841.         ZWasA = (MID$(ZMsgRec$,37,5) = "ALL  ") : _
  1842.         IF NOT ZWasA THEN _
  1843.            GOTO 4745
  1844.      IF MsgFromCaller AND NOT ZSysOp THEN _
  1845.         GOTO 4745
  1846.      Year$ = DATE$
  1847.      WasWK$ = TIME$
  1848.      MID$(ZMsgRec$,123,6) = CHR$(VAL(MID$(Year$,1,2))) + _
  1849.                                    CHR$(VAL(MID$(Year$,4,2))) + _
  1850.                                    CHR$(VAL(MID$(Year$,9,2))) + _
  1851.                                    CHR$(VAL(MID$(WasWK$,1,2))) + _
  1852.                                    CHR$(VAL(MID$(WasWK$,4,2))) + _
  1853.                                    CHR$(VAL(MID$(WasWK$,7,2)))
  1854.      GOSUB 4835
  1855.      PUT 1,CurrHeaderRecNum
  1856.      GOSUB 4840
  1857. 4745 GOSUB 4815
  1858.      ZOutTxt$ = ""
  1859.      RETURN
  1860. '
  1861. ' * UNCOMPRESS MESSAGE PRIOR TO DISPLAY
  1862. '
  1863. 4750 IF NOT JustSearching THEN _
  1864.         GOSUB 4656: _
  1865.         CALL SkipLine (1) : _
  1866.         ZLinesInMsg = 1 : _
  1867.         MsgDimXtra = ZMaxMsgLinesDef + 25 : _                        ' RM022101/RM10159302/RM11279301/RM03119401
  1868.         REDIM ZOutTxt$(MsgDimXtra) : _
  1869.         Remain$ = "" : _
  1870.         HiLitedLine = 0
  1871.      RecToRead = ZMsgPtr(ZMsgDimIndex,1) + ZNumHeaders - 1
  1872.      FOR WasX = ZNumHeaders + 1 TO VAL(MID$(ZMsgRec$,117,4))
  1873.         WasJ = 1
  1874.         RecToRead = RecToRead + 1
  1875.         GET 1, RecToRead
  1876.         IF JustSearching THEN _
  1877.            ZOutTxt$ = ZMsgRec$ : _
  1878.            CALL AllCaps (ZOutTxt$) : _
  1879.            HiLitePos = INSTR(ZOutTxt$,SearchString$) : _
  1880.            IF HiLitePos > 0 THEN _
  1881.               SearchCt = 0 : _
  1882.               HiLiteRec = LOC(1) : _
  1883.               WasX = 9999 : _
  1884.               GOTO 4775 _
  1885.            ELSE GOTO 4775
  1886. 4755    ZWasB = INSTR(WasJ,ZMsgRec$,CHR$(227))
  1887.         IF ZRet THEN _
  1888.            RETURN
  1889. 4760    ZWasC = ZWasB - WasJ
  1890.         IF ZWasC < 0 THEN _
  1891.            ZWasC = 128
  1892. 4765    ZOutTxt$ = MID$(ZMsgRec$,WasJ,ZWasC)
  1893.         IF HiLiteRec = LOC(1) THEN _
  1894.            IF HiLitePos >= WasJ AND HiLitePos < WasJ+ZWasC THEN _
  1895.               HiLiteRec = -1 : _
  1896.               Bracketed = ZTrue : _
  1897.               ZOutTxt$(0) = ZOutTxt$ : _
  1898.               CALL Bracket (ZOutTxt$,HiLitePos-WasJ+1,HiLitePos+LEN(SearchString$)-WasJ,ZEmphasizeOn$,ZEmphasizeOff$)
  1899.         IF ZWasB = 0 THEN _
  1900.            Remain$ = ZOutTxt$ : _
  1901.            GOTO 4775 _
  1902.         ELSE ZOutTxt$ = Remain$ + ZOutTxt$ : _
  1903.              Remain$ = "" : _
  1904.              WasJ = ZWasB + 1
  1905. 4770    IF LEFT$(ZOutTxt$,1) = ZStartOfHeader$ OR _
  1906.            LEFT$(ZOutTxt$,LEN(ZScreenOutMsg$)) = ZScreenOutMsg$ THEN _
  1907.            GOTO 4755
  1908.         ZOutTxt$(ZLinesInMsg) = ZOutTxt$
  1909.         IF Bracketed THEN _
  1910.            Bracketed = ZFalse : _
  1911.            HiLitedLine = ZLinesInMsg
  1912.         ZLinesInMsg = ZLinesInMsg + 1
  1913.         IF ZLinesInMsg > MsgDimXtra THEN _
  1914.            ZLinesInMsg = ZLinesInMsg - 1 : _
  1915.            CALL SkipLine (1) : _
  1916.            CALL QuickTPut1 ("Message too long.  Truncated to" + STR$(MsgDimXtra) + " lines!") : _
  1917.            ZOutTxt$ = "" : _
  1918.            RETURN
  1919.         IF NOT DontPrint THEN _
  1920.            GOSUB 4815 : _
  1921.            IF ZRet THEN _
  1922.               ZOutTxt$ = "" : _
  1923.               RETURN _
  1924.            ELSE CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) : _
  1925.                 IF ZNo THEN _
  1926.                    DontPrint = ZTrue
  1927.         GOTO 4755
  1928. 4775 NEXT
  1929.      IF DontPrint = ZTrue THEN _
  1930.         MParm = 3 : _                                                ' MS174/RM08139301
  1931.         RETURN                                                       ' MS174/RM08139301 GOTO 5160
  1932.      IF JustSearching AND HiLitePos > 0 THEN _
  1933.         JustSearching = ZFalse : _
  1934.         GET 1,ZMsgPtr(ZMsgDimIndex,1) : _
  1935.         GOSUB 4710 : _
  1936.         GOTO 4750
  1937.      ZOutTxt$ = ""
  1938.      RETURN
  1939. 4780 CALL UserMaint (EditFromRead, TempHashValue$, ReturnRead)       ' SU174/RM08079303/RM08199302
  1940.      IF ZSubParm < 0 THEN _                                          ' SU174/RM08079303
  1941.         MParm = 2 : _
  1942.         RETURN                                                       ' SU174/RM08079303/RM08139301 RETURN 10595
  1943.      IF ReturnRead THEN _                                            ' SU174/RM08079303
  1944.         ReturnRead = ZFalse : _                                      ' SU174/RM08079303
  1945.         GOTO 4560                                                    ' SU174/RM08079303
  1946.      RETURN                                                          ' SU174/RM08079303
  1947. 4785 ZTurboKey = -ZTurboKeyUser
  1948. 4790 CALL PopCmdStack
  1949.      GOTO 4870
  1950. 4795 ZSubParm = 1
  1951.      GOTO 4820
  1952. 4800 ZSubParm = 2
  1953.      GOTO 4820
  1954. 4805 ZSubParm = 3
  1955.      GOTO 4820
  1956. 4810 ZSubParm = 4     ' no cr/lf
  1957.      GOTO 4820
  1958. 4815 ZSubParm = 5     ' cr/lf
  1959.      GOTO 4820
  1960. 4820 CALL TPut
  1961. 4825 IF ZSubParm < 0 THEN _
  1962.         MParm = 7 : _                                                ' MS174/RM08139301
  1963.         EXIT SUB                                                     ' MS174/RM08139301/RM09229303
  1964.      IF ZSubParm = 8 THEN _
  1965.         GOSUB 4860
  1966.      RETURN
  1967. ' 4830 ZSubParm = 1  ' LOCK USERS & MESSAGES
  1968. '      GOTO 4855
  1969. 4830 ZSubParm = 2  ' UNLOCK MESSAGES AND FLUSH
  1970.      Flushed = ZTrue
  1971.      GOTO 4855
  1972. 4835 ZSubParm = 3  ' LOCK MESSAGES
  1973.      GOTO 4855
  1974. 4840 ZSubParm = 4  ' UNLOCK MESSAGES
  1975.      GOTO 4855
  1976. 4845 ZSubParm = 9  ' LOCK COMMENTS/UPLOAD DIR
  1977.      GOTO 4855
  1978. 4850 ZSubParm = 10 ' UNLOCK COMMENTS/UPLOAD DIR
  1979. 4855 CALL FileLock
  1980.      IF Flushed THEN _
  1981.         FIELD 1,128 AS ZMsgRec$ : _
  1982.         Flushed = ZFalse
  1983.      IF ZSubParm = -1 THEN _
  1984.         ZSubParm = -9 : _
  1985.         CALL FindFKey : _
  1986.         MParm = 7 : _                                                ' MS174/RM08139301
  1987.         EXIT SUB                                                     ' MS174/RM08139301/RM09229303
  1988.      RETURN
  1989. '
  1990. ' * STANDARD ENTRY FOR RBBS-PC'S COMMON TERMINAL INPUT ROUTINE
  1991. '
  1992. 4860 GOSUB 4870
  1993.      ZSubParm = 1
  1994. 4865 CALL TGet
  1995. 4870 IF ZSubParm < 0 THEN _
  1996.         MParm = 7 : _                                                ' MS174/RM08139301
  1997.         EXIT SUB                                                     ' MS174/RM08139301/RM09229303
  1998.      RETURN
  1999. 4875 ZTurboKey = -ZTurboKeyUser
  2000.      GOTO 4860
  2001. '
  2002. ' *****  RECORD SECURITY VIOLATIONS   ****
  2003. '
  2004. 4880 CALL SecViolation
  2005.      IF NOT ZDenyAccess THEN _
  2006.         RETURN
  2007. 4885 CALL DenyAccess
  2008.      MParm = 11                                                      ' MS174/RM08139301
  2009.      RETURN                                                          ' MS174/RM08139301 GOTO 10620
  2010. '
  2011. ' * CALCULATE TIME REMAINING FOR USER
  2012. '
  2013. 4890 CALL CheckTimeRemain (MinsRemaining)
  2014.      IF ZSubParm = -1 THEN _
  2015.         MParm = 12                                                   ' MS174/RM08139301
  2016.         RETURN                                                       ' MS174/RM08139301 RETURN 10553
  2017.      RETURN
  2018. 4895 CALL QuickTPut1 (ZFG7$ + ZConfName$ + ZFG5$ + " Message base" + ZEmphasizeOff$) ' RM052901
  2019.      RETURN
  2020.      END SUB
  2021. '                                                                    ' PI174/RM08059301
  2022. 5111  '$SUBTITLE: 'PersInfo -- subroutine to change Personal Info'   ' PI174/RM08059301
  2023. ' $PAGE                                                              ' PI174/RM08059301
  2024. '                                                                    ' PI174/RM08059301
  2025. ' NAME: PersInfo                                                     ' PI174/RM08059301
  2026. '                                                                    ' PI174/RM08059301
  2027. ' PURPOSE: To allow user to change personal infomation - "P" from    ' PI174/RM08059301
  2028. '          the utilities Menu.  Formerly in RBBS-PC.BAS              ' PI174/RM08059301
  2029. '                                                                    ' PI174/RM08059301
  2030. ' INPUTS:                                                            ' PI174/RM08059301
  2031. '                                                                    ' PI174/RM08059301
  2032. ' OUTPUTS:                                                           ' PI174/RM08059301
  2033. '                                                                    ' PI174/RM08059301
  2034. '                                                                    ' PI174/RM08059301
  2035.       SUB PersInfo STATIC
  2036. 5112  CALL QuickTPut1 (ZUserLocation$ + " now " + ZWasCI$)
  2037.       WasA1$ = "Enter new "
  2038.       ZMacroMin = 99
  2039.       ZParseOff = ZTrue
  2040. 5114  ZOutTxt$ = WasA1$ + ZUserLocation$
  2041.       IF NOT ZNewUser THEN _
  2042.          ZOutTxt$ = ZOutTxt$ + ZPressEnter$
  2043.       ZParseOff = ZTrue
  2044.       GOSUB 5140                                                     ' PI174/RM08059301
  2045.       IF ZWasQ = 0 OR ZUserIn$ = SPACE$(LEN(ZUserIn$)) THEN _
  2046.          IF ZNewUser THEN _
  2047.             GOTO 5114 _                                              ' PI174/RM08059301
  2048.          ELSE GOTO 5116
  2049.       CALL AllCaps (ZUserIn$)
  2050.       CALL QuickTPut1 ("Set to " + ZUserIn$)
  2051.       LSET ZCityState$ = ZUserIn$
  2052.       ZWasCI$ = ZUserIn$
  2053. 5116  CALL NewPassword ("Enter new password" + ZPressEnter$,ZTrue)
  2054.       IF ZSubParm < 0 THEN _
  2055.          EXIT SUB                                                    ' PI174/RM08059301
  2056.       IF ZWasQ = 0 THEN _
  2057.          EXIT SUB                                                    ' PI174/RM08059301
  2058. 5120  ZOutTxt$ = "Re-enter new password ([ENTER] cancels)"
  2059.       ZHidden = ZTrue
  2060.       GOSUB 5150                                                     ' PI174/RM08059301
  2061.       ZHidden = ZFalse
  2062.       IF ZWasQ = 0 THEN _
  2063.          EXIT SUB                                                    ' PI174/RM08059301
  2064.       CALL AllCaps (ZUserIn$)
  2065.       IF ZWasZ$ <> ZUserIn$ THEN _
  2066.          ZOutTxt$ = "Passwords don't match!" : _
  2067.          GOSUB 5144 : _                                              ' PI174/RM08059301
  2068.          GOTO 5120                                                   ' PI174/RM08059301
  2069. 5125  IF ZMaxPswdChanges AND _
  2070.          ChangeThisSession > ZMaxPswdChanges AND _
  2071.          NOT ZSysop THEN _
  2072.              ZOutTxt$ = "No changes permitted" : _
  2073.              GOSUB 5142 : _                                          ' PI174/RM08059301
  2074.              EXIT SUB _                                              ' PI174/RM08059301
  2075.       ELSE CALL SrchPasswrds (Found) : _
  2076.            IF NOT Found THEN _
  2077.               GOTO 5129 _
  2078.            ELSE ZOutTxt$ = "Temporary change" : _
  2079.                 GOSUB 5142 : _                                       ' PI174/RM08059301
  2080.                 ZPswd$ = ZTempPassword$ : _
  2081.                 ZSecsPerSession! = ZTempTimeAllowed * 60 : _
  2082.                 ZUserSecLevel = ZTempSecLevel : _
  2083.                 ZOutTxt$ = "Granted access level" + STR$(ZUserSecLevel) + _
  2084.                 MID$(" (SYSOP)",1,-8 * (ZUserSecLevel >= ZSysopSecLevel)) : _
  2085.                 GOSUB 5142 : _                                       ' PI174/RM08059301
  2086.                 ZSysop = (ZUserSecLevel >= ZSysopSecLevel) : _
  2087.                 CALL SetPrompt : _
  2088.                 CALL XferType (2,ZTrue)
  2089.       IF ZActiveUserName$ = "SYSOP" THEN _
  2090.          ZUserIn$(1) = "********"
  2091. 5126  CALL UpdtCalr ("Used temp password " + ZUserIn$,2)
  2092.       EXIT SUB                                                        ' PI174/RM08059301
  2093. 5129  IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  2094.          CALL QuickTPut1 ("Please Quit Conference to change personal info") : _
  2095.          EXIT SUB                                                    ' PI174/RM08059301
  2096.       ZSubParm = 6  ' LOCK USER BLOCK
  2097.       CALL FileLock                                                  ' PI174/RM08059301
  2098.       CALL OpenUser (ZHighestUserRecord)
  2099. 5130  IF ZUserFileIndex < 1 OR _
  2100.          ZUserFileIndex > 32767 THEN _
  2101.          ZErrCode=0 : _                                              ' PI174/RM08059301
  2102.          EXIT SUB                                                    ' PI174/RM08059301
  2103.       GET 5,ZUserFileIndex
  2104.       CALL AllCaps (ZUserIn$)
  2105.       LSET ZPswd$ = ZUserIn$
  2106.       IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN _
  2107.          PUT 5,ZUserFileIndex
  2108.       ZSubParm = 8  ' UNLOCK USER BLOCK
  2109.       CALL FileLock                                                  ' PI174/RM08059301
  2110.       ZOutTxt$ = "Password changed"
  2111.       ZStopInterrupts = ZTrue
  2112.       GOSUB 5142                                                     ' PI174/RM08059301
  2113.       IF ZMaxPswdChanges THEN _
  2114.          ChangeThisSession = ChangeThisSession + 1
  2115. 5131  CALL UpdtCalr ("New Password " + ZUserIn$(1),2)
  2116.       EXIT SUB                                                       ' PI174/RM08059301
  2117. 5140  CALL PopCmdStack
  2118.       GOTO 5152                                                      ' PI174/RM08059301
  2119. 5142  ZSubParm = 1
  2120.       GOTO 5146                                                      ' PI174/RM08059301
  2121. 5144  ZSubParm = 5
  2122.       GOTO 5146                                                      ' PI174/RM08059301
  2123. 5146  CALL TPut
  2124. 5148  IF ZSubParm < 0 THEN _                                         ' PI174/RM08059301
  2125.          EXIT SUB                                                    ' PI174/RM08059301
  2126.       IF ZSubParm = 8 THEN _
  2127.          GOSUB 5150                                                  ' PI174/RM08059301
  2128.       RETURN
  2129. 5150  GOSUB 5152
  2130.       ZSubParm = 1
  2131.       CALL TGet
  2132. 5152  IF ZSubParm < 0 THEN _
  2133.          EXIT SUB                                                    ' PI174/RM08059301
  2134.       RETURN
  2135.       END SUB                                                        ' JC174/RM08109301
  2136. '                                                                    ' JC174/RM08109301
  2137. '$SUBTITLE: 'JoinConference -- subroutine to join a conference'      ' JC174/RM08109301
  2138. ' $PAGE                                                              ' JC174/RM08109301
  2139. '                                                                    ' JC174/RM08109301
  2140. ' NAME: JoinConference                                               ' JC174/RM08109301
  2141. '                                                                    ' JC174/RM08109301
  2142. ' PURPOSE: To join a conference.  Formerly in RBBS-PC.BAS.           ' JC174/RM08109301
  2143. '                                                                    ' JC174/RM08109301
  2144. ' INPUTS:   ZJParm            1 - Join a conference                  ' JC174/RM08109301
  2145. '                             2 - Join Main                          ' JC174/RM08109301
  2146. '                             3 - 5301
  2147. '                             4 - 5350
  2148. '                             5 - News/Bulletin check
  2149. '                             6 - NewUser News/Bulletin check
  2150. '                             7 - compute days in registration
  2151. '                             8 - Check for Active User              ' RM09259302
  2152. '
  2153. ' OUTPUTS:  ZJParm            1 - goto 202 on return to RBBS-PC.BAS  ' JC174/RM08109301
  2154. '                             2 - return 13600 in RBBS-PC.BAS        ' JC174/RM08109301
  2155. '                             3 - return 108 in RBBS-PC.BAS          ' JC174/RM08109301
  2156. '                             4 - return 852 in RBBS-PC.BAS          ' JC174/RM08119301
  2157. '                             5 - return 1205 in RBBS-PC.BAS         ' JC174/RM08119301
  2158. '                             6 - return 10595 in RBBS-PC.BAS
  2159. '
  2160.       SUB JoinConference (Found) STATIC                              ' JC174/RM08109301/RM09229301/RM09259302
  2161.       Temp = 0
  2162.       Temp = ZJParm
  2163.       ZJParm = 0
  2164.       ON Temp GOSUB 5300,5323,5301,5350,5450,5451,5540,5460          ' RM09029301/RM09259302
  2165.       EXIT SUB
  2166. '
  2167. ' ****  J - COMMAND FROM MAIN MENU (JOIN CONFERENCE)  ***
  2168. '
  2169. 5300 WasA1$ = ZConfMenu$
  2170.      CALL BreakFileName (ZActiveMessageFile$,MsgDrvPath$,WasX$,ZWasY$,ZTrue)
  2171.      CALL Talk (12,ZOutTxt$)
  2172. 5301 ZStackC = ZTrue
  2173.      CALL SubMenu ("Join what, L)ist M)ain N)ext, all/mail S)ince P)ers, or name ([Q]uit)",_
  2174.          WasA1$,MsgDrvPath$,"M.DEF",",M,MAIN,N,S,P,Q,", _
  2175.          ZTrue,ZFalse,ZFalse,"C.DEF",WasX,ZFalse)
  2176.      IF ZWasQ = 0 THEN _
  2177.         RETURN
  2178.      IF NOT ZSysOp THEN _                                            ' RM07149301
  2179.         ZActiveUserName$ = ZOrigUserNameDGS$ : _                     ' DGSALIAS
  2180.         ZFirstName$ = OrigFirstName$                                 ' DGSALIAS
  2181.      IF ZSubParm = -1 THEN _
  2182.         ZJParm = 6 : _
  2183.         RETURN                                                       ' JC174/RM08109301 RETURN 10595
  2184. 5323 IF ZWasZ$ = "MAIN" THEN _
  2185.         ZWasZ$ = "M"
  2186.      WasX = (ZWasZ$ = "M")
  2187.      IF ZWasZ$ = ConfNameSave$ OR (WasX AND ZConfName$ = "MAIN") THEN _
  2188.         CALL QuickTPut1 ("You are already in " + ZConfName$) : _     ' RM02269402
  2189.         RETURN
  2190.      IF ZUserIn$(ZAnsIndex+1) = "!" AND ZAnsIndex < ZLastIndex THEN _ ' KG012801
  2191.         ZTurboLogon = ZTrue : _                                      ' KG012801
  2192.         ZAnsIndex = ZAnsIndex + 1                                    ' KG012801
  2193.      ON INSTR("MNSPQ",ZWasZ$) GOTO 5350,5410,5415,5425,5532
  2194.      IF NOT ZOK THEN _
  2195.         GOTO 5300
  2196.      CLOSE 2
  2197. '
  2198. ' ****  UPDATE PREVIOUS MESSAGE BASE CHECKPOINT RECORD  ***
  2199. '
  2200. 5324 PrevConfName$ = ZConfName$
  2201.      ZConfName$ = ZWasZ$
  2202.      ZConfFileName$ = ZConfName$
  2203.      PrevMsg$ = ZActiveMessageFile$
  2204.      ZActiveMessageFile$ = ZFileName$
  2205.      GOSUB 5343
  2206. '
  2207. ' ****  UPDATE PREVIOUS USER RECORD  ***
  2208. '
  2209. 5325 GOSUB 5380
  2210. '
  2211. ' *****  CHECK WHETHER HAVE SUBBOARD (I.E. CONFIG.DEF EXISTS)  ****
  2212. '
  2213. 5327 UserRecordHold$ = ZUserRecord$
  2214.      ConfModeSave = ZConfMode
  2215.      ZConfMode = ZTrue
  2216.      PrevUser$ = ZActiveUserFile$
  2217.      PrevIndex = ZUserFileIndex
  2218.      PrevMainUser$ = ZMainUserFile$
  2219.      PrevUSL = ZUserSecLevel
  2220.      PrevDef$ = ZCurDef$
  2221. 5328 WasX$ = ZConfName$ + _
  2222.           "C.DEF"
  2223.      CALL FindIt (WasX$)
  2224.      ZSubBoard = ZOK
  2225.      IF NOT ZSubBoard THEN _
  2226.         CALL BreakFileName (ZMainMsgFile$,MsgDrvPath$,ZWasDF$,ZWasY$,ZTrue) : _
  2227.         WasX$ = MsgDrvPath$ + WasX$ : _
  2228.         CALL FindIt (WasX$) : _
  2229.         ZSubBoard = ZOK
  2230.      IF ZSubBoard THEN _
  2231.         IF LEN(ZConfName$) = 6 THEN _
  2232.            IF LEFT$(ZConfName$,4) = "RBBS" AND RIGHT$(ZConfName$,1) = "P" THEN _
  2233.               ZSubBoard = ZFalse
  2234.      IF NOT ZSubBoard THEN _
  2235.         GOSUB 5435 : _
  2236.         ZFileName$ = ZWelcomeFileDrvPath$ + _
  2237.                      ZConfName$ + _
  2238.                      "W.DEF" _
  2239.         ELSE CALL ReadDef (WasX$) : _
  2240.              IF ZErrCode > 0 THEN _
  2241.                 CALL UpdtCalr ("Error"+STR$(ZErrCode)+" reading config file "+WasX$,2) : _
  2242.                 ZErrCode = 0 : _
  2243.                 ZInConfMenu = ZFalse : _
  2244.                 ZOutTxt$ = "error reading subboard" : _
  2245.                 GOTO 5341 _
  2246.              ELSE WasX$ = ZMainUserFile$ : _
  2247.                   ZFileName$ = "" : _
  2248.                   CALL FindIt (ZMainMsgFile$) : _
  2249.                   IF NOT ZOK THEN _
  2250.                      ZOutTxt$ = "msg file missing for" : _
  2251.                      ZInConfMenu = ZFalse : _
  2252.                      GOTO 5341 _
  2253.                   ELSE ZActiveMessageFile$ = ZMainMsgFile$ : _
  2254.                        ZMsgDim = ZMaxMsgLinesDef : _                 ' RM03119401
  2255.                        GOSUB 5343
  2256.      UpdateDate = ZTrue
  2257.      CALL FindIt (WasX$)
  2258.      IF ZOK THEN _
  2259.         GOTO 5330
  2260. '
  2261. ' *****  NO USER FILE - A PUBLIC CONFERENCE   ****
  2262. '
  2263.      ZMainUserFile$ = PrevMainUser$
  2264.      IF (ZUserSecLevel < ZAutoAddSec) THEN _
  2265.         GOTO 5340
  2266.      GOTO 5345
  2267. '
  2268. ' ****  CHECK CONFERENCE USER'S FILE  ***
  2269. '
  2270. 5330 ZActiveUserFile$ = WasX$
  2271.      IF ZMainUserFileIndex < 1 THEN _
  2272.         Found = ZFalse : _
  2273.         ZUserFileIndex = 0 : _
  2274.         GOTO 5335
  2275.      CALL WordInFile (ZConfMenu$,ZConfName$,ZInConfMenu)
  2276.      IF ZActiveUserName$ = "SYSOP" THEN _
  2277.         TempHashValue$ = ZOrigUserName$
  2278.      GOSUB 5460
  2279.      GOSUB 5500
  2280.      IF ZJParm = 1 THEN _                                            ' RM08199303
  2281.         RETURN                                                       ' RM08199303
  2282. 5335 IF Found THEN _
  2283.         GOSUB 5445 : _
  2284.         ZMainUserFileIndex = -(ZSubBoard * ZUserFileIndex)_
  2285.                                -((NOT ZSubBoard) * ZMainUserFileIndex) : _
  2286.         Temp = -(ZSubBoard * ZMinLogonSec) _
  2287.                -((NOT ZSubBoard) * ZAutoAddSec) : _
  2288.         CALL SetPrivileges : _
  2289.         ZErrCode = 0 : _
  2290.         GOSUB 5430 : _
  2291.         WasI = (ZUserSecLevel < ZOrigMainSec) : _                    ' RM08199303
  2292.         WasJ = (ZUserSecLevel < Temp) : _
  2293.         WasK = (WasI AND WasJ) : _
  2294.         IF WasK THEN _
  2295.            ZOutTxt$ = "you have been locked out of" : _
  2296.            GOTO 5341 _
  2297.         ELSE GOSUB 5375 : _
  2298.              GOTO 5345
  2299. '
  2300. ' **** USER NOT FOUND.  AUTO-ADD TO SUBBOARD IF SUFFICIENT SECURITY ***
  2301. '
  2302.      ZNewUser = ZTrue
  2303.      IF ZSubBoard THEN _
  2304.         ZAutoAddSec = ZMinLogonSec
  2305.      IF (ZOrigSec >= ZAutoAddSec) AND _
  2306.         (ZUserFileIndex > 0) AND (ZMainUserFileIndex > 0) THEN _
  2307.         LSET ZUserRecord$ = UserRecordHold$ : _
  2308.         CALL QuickTPut1 ("MEMBER privileges granted in " + ZConfName$) : _
  2309.         MID$(ZUserOption$,3,2) = MKI$(0) : _
  2310.         MID$(ZUserOption$,1,2) = MKI$(0) : _
  2311.         ZActiveUserName$ = LEFT$(UserRecordHold$,30) : _
  2312.         CALL Trim (ZActiveUserName$) : _
  2313.         Temp = -(ZSubBoard * ZDefaultSecLevel) _
  2314.                -((NOT ZSubBoard) * ZUserSecSave) : _
  2315.         CALL SetSysOp : _
  2316.         Temp = -(ZWasA * ZSysopSecLevel) - ((NOT ZWasA) * Temp) : _
  2317.         LSET ZSecLevel$ = MKI$(Temp) : _
  2318.         ZUserSecLevel = Temp : _
  2319.         GOSUB 5375 : _
  2320.         ZPageLength = ZPageLengthDef : _
  2321.         GOSUB 5504 : _
  2322.         GOSUB 5475 : _
  2323.         UpdateDate = ZTrue : _
  2324.         Found = ZTrue : _
  2325.         GOTO 5335
  2326.      IF ZOrigSec >= ZAutoAddSec THEN _
  2327.         CALL QuickTPut1 ("GUEST privileges granted in " + ZConfName$) : _
  2328.         ZActiveUserFile$ = PrevUser$ : _
  2329.         UpdateDate = ZFalse : _
  2330.         ZUserFileIndex = PrevIndex : _
  2331.         GOSUB 5382 : _
  2332.         ZUserFileIndex = 0 : _
  2333.         GOTO 5345
  2334.      ZNewUser = ZFalse
  2335. 5340 IF ZInConfMenu THEN _
  2336.         ZOutTxt$ = "you are not in conference" _
  2337.      ELSE ZOutTxt$ = "no such option"
  2338. 5341 ZOutTxt$ = ZOutTxt$ + " " + ZConfName$
  2339. '
  2340. ' ****  CANNOT JOIN THE REQUESTED CONFERENCE.  THEREFORE, GO BACK  ***
  2341. '
  2342.      ZOutTxt$ = "Sorry, " + _
  2343.           ZFirstName$ + _
  2344.           ", " + _
  2345.           ZOutTxt$
  2346.      GOSUB 5485
  2347.      ZConfName$ = PrevConfName$
  2348.      ZConfFileName$ = ZConfName$
  2349.      IF ZSubBoard THEN _
  2350.         CALL ReadDef (PrevDef$)
  2351.      ZActiveMessageFile$ = PrevMsg$
  2352.      GOSUB 5343
  2353.      ZUserFileIndex = PrevIndex
  2354.      ZActiveUserFile$ = PrevUser$
  2355.      GOSUB 5382
  2356.      ZConfMode = ConfModeSave
  2357.      GOSUB 5506
  2358.      ZAnsIndex = 0
  2359.      ZLastIndex = 0
  2360.      GOTO 5301
  2361. '
  2362. ' ****  RESTORE A MESSAGE BASE   ***
  2363. '
  2364. 5343 GOSUB 5344
  2365.      CALL GetMessageHdr                                              ' GM174/RM08059303
  2366.      RETURN
  2367. '
  2368. ' *****  OPEN AND SETUP MESSAGE BASE  *****
  2369. '
  2370. 5344 CALL OpenMsg
  2371.      IF ZErrCode = 64 THEN _
  2372.         ZErrCode = 0 : _
  2373.         GOTO 5350
  2374.      FIELD 1, 128 AS ZMsgRec$
  2375.      RETURN
  2376. '
  2377. ' *****  SUCCESSFUL CONFERENCE JOIN  ****
  2378. '
  2379. 5345 DGSStl$ = ""                                                    ' DGSALIAS
  2380.      WHILE DGSAlias$ = ""                                            ' DGSALIAS
  2381.         Call AliasDGS (ZConfName$,ZOrigUserNameDGS$,DGSAlias$, _     ' DGSALIAS/RM0519
  2382.                        DGSStl$,DGSFileName$)                         ' DGSALIAS
  2383.      WEND                                                            ' DGSALIAS
  2384.      DGSAlias$ = ""                                                  ' DGSALIAS
  2385.      ZNewsFileName$ = ZWelcomeFileDrvPath$ + ZConfName$ + ".NWS"     ' DGSALIAS
  2386.      CALL FindFile (MsgDrvPath$ + ZConfName$ + "N.DEF",ZNetConference) ' NET174/RM123101
  2387.      CALL DeLink (ZConfName$)
  2388.      ConfNameSave$ = ZConfName$
  2389.      ZConfName$ = ZConfName$ + " " + MID$("ConferenceSubboard",1-10*ZSubBoard,10)
  2390.      IF ZGlobalSysop THEN _
  2391.         ZActiveUserName$ = "SYSOP"
  2392.      ZMarkedMsgs$ = ""
  2393.      ZTurboBase = ZFalse                                             ' RM03169401
  2394. 5347 CALL UpdtCalr ("Entered " + ZConfName$,3)
  2395.      CALL QuickTPut1 ("Welcome to " + ZConfName$)
  2396.      IF NOT ZTurboLogon THEN _
  2397.         CALL InitWelc (2)                                            ' IW174/RM08059306
  2398.      GOSUB 5455
  2399. 5348 GOSUB 5506
  2400.      GOSUB 5512
  2401.      ZBoardCheckDate$ = LEFT$("00-00-00",-ZNewUser*8) + _            ' RM08119301
  2402.                        LEFT$(ZLastDateTimeOn$,-(NOT ZNewUser)*8)
  2403.      IF ZSubBoard THEN _
  2404.         ZHasDoored = ZFalse : _
  2405.         ZActiveFMSDir$ = "" : _
  2406.         ZTimeLoggedOn$ = TIME$ : _
  2407.         ZJParm = 3 : _
  2408.         RETURN                                                       ' JC174/RM08119301 RETURN 108
  2409.      ZNewUser = ZFalse
  2410.      IF ZLastMsgRead > ZHighMsgNumber THEN _
  2411.         ZLastMsgRead = 0 : _
  2412.         MID$(ZUserOption$,3,2) = MKI$(0)
  2413.      IF UpdateDate THEN _
  2414.         ZTimeLoggedOn$ = TIME$ : _
  2415.         LSET ZLastDateTimeOn$ = ZCurDate$ + _
  2416.                                   " " + _
  2417.                                   ZTimeLoggedOn$ : _
  2418.      IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN _
  2419.         PUT 5,ZUserFileIndex
  2420.         GOSUB 5514
  2421.      IF PrevUSL <> ZUserSecLevel THEN _
  2422.         CALL SetPrompt
  2423.      GOSUB 5450
  2424.      ZJParm = 4
  2425.      RETURN                                                          ' JC174/RM08119301 RETURN 852
  2426. '
  2427. ' ****  JOIN M)AIN   ***
  2428. '
  2429. 5350 IF ZConfName$ <> "MAIN" THEN _
  2430.         CALL QuickTPut1 ("Rejoining " + ZOrigMsgName$)
  2431.      ZActiveUserName$ = ZOrigUserNameDGS$                            ' DGSALIAS
  2432.      ZFirstName$ = OrigFirstName$                                    ' DGSALIAS
  2433.      CALL DeLink (ZConfName$)
  2434.      ZConfFileName$ = ZOrigMsgName$
  2435.      ZNewsFileName$ = ZOrigNewsFileName$
  2436.      ZTurboLogon = ZTrue
  2437.      ZMarkedMsgs$ = ""
  2438.      ZWasQ = 0
  2439.      ZNewUser = ZFalse
  2440.      ZInConfMenu = ZTrue
  2441.      IF ZActiveUserName$ = "SYSOP" THEN _
  2442.         ZActiveUserName$ = ZSecretName$ : _
  2443.         CALL Trim (ZActiveUserName$)
  2444.      ZConfigFileName$ = ZOrigCnfg$
  2445.      CALL ReadDef (ZConfigFileName$)
  2446.      IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
  2447.         ZActiveMessageFile$ = ZOrigMsgFile$ : _
  2448.         GOSUB 5343
  2449.      IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
  2450.         GOSUB 5380 : _
  2451.         ZActiveUserFile$ = ZOrigUserFile$ : _
  2452.         ZActiveUserName$ = ZOrigUserName$ : _
  2453.         GOSUB 5460 : _
  2454.         GOSUB 5512 : _
  2455.         IF Found THEN _
  2456.            GOSUB 5445 : _
  2457.            ZMainUserFileIndex = ZUserFileIndex : _
  2458.            CALL SetPrompt : _
  2459.            CALL XferType (2,ZTrue) _
  2460.         ELSE ZUserFileIndex = 0 : _
  2461.              ZMainUserFileIndex = 0
  2462.      CALL UpdtCalr ("Exited " + ZConfName$,3)
  2463.      ZConfName$ = "MAIN"
  2464.      ConfNameSave$ = ZConfName$
  2465.      ZNetConference = ZFalse                                         ' NET174/RM123101
  2466.      IF ZCurPUI$ = "" OR ZSubBoard THEN _
  2467.         ZCurPUI$ = ZMainPUI$
  2468.      CALL FindIt (ZCurPUI$)
  2469.      ZCustomPUI = ZOK
  2470.      IF NOT ZOK THEN _
  2471.         ZCurPUI$ = ""
  2472.      ZPrevPUI$ = ""
  2473.      ZUplds = ZGlobalUplds
  2474.      ZDnlds = ZGlobalDnlds
  2475.      ZDLToday! = ZGlobalDLToday!
  2476.      ZBytesToday! = ZGlobalBytesToday!
  2477.      ZDLBytes! = ZGlobalDLBytes!
  2478.      ZULBytes! = ZGlobalULBytes!
  2479.      ZDropTimes = ZGlobalDropTimes                                   ' DROP174
  2480.      ZBankTime = ZGlobalBankTime
  2481. 5360 ZConfMode = ZFalse
  2482.      ZBoardCheckDate$ = ZLastDateTimeOn$
  2483.      ZSubBoard = ZTrue
  2484.      GOSUB 5506
  2485.      ZJParm = 3
  2486.      RETURN                                                          ' JC174/RM08119301 RETURN 108
  2487. 5375 IF ((ZUserSecLevel < ZAutoUpgradeSec) AND ZSubBoard) OR _
  2488.         ((ZUserSecLevel < ZOrigUpgradeSec) AND NOT ZSubBoard) THEN _  ' RM08199303
  2489.            IF ZUserSecLevel <> ZOrigSec THEN _
  2490.               ZUserSecLevel = ZOrigSec : _
  2491.               LSET ZSecLevel$ = MKI$(ZUserSecLevel)
  2492.      RETURN
  2493. '
  2494. ' *****  UPDATE CURRENT USERS RECORD  ****
  2495. '
  2496. 5380 IF ZUserFileIndex < 1 THEN _
  2497.         RETURN
  2498.      IF ZAdjustedSecurity AND NOT ZSysop THEN _
  2499.         LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  2500.         ZUserSecSave = ZUserSecLevel
  2501.      IF ZSubBoard THEN _                                             ' DGSALIAS/RM10079301
  2502.         ZActiveUserName$ = ZOrigUserNameDGS$ : _                     ' DGSALIAS
  2503.         ZFirstName$ = OrigFirstName$                                 ' DGSALIAS
  2504.      CALL UpdateU (ZFalse)
  2505.      RETURN
  2506. '
  2507. ' *****  RESTORE A USER RECORD  ****
  2508. '
  2509. 5382 IF ZUserFileIndex < 1 THEN _
  2510.         ZUserSecLevel = ZDefaultSecLevel : _
  2511.         RETURN
  2512.      CALL OpenUser (ZHighestUserRecord)
  2513.      GET 5,ZUserFileIndex
  2514.      GOSUB 5445
  2515.      RETURN
  2516. 5410 CALL NextConf (ZTrue)
  2517.      IF ZHomeConf$ <> "" THEN _
  2518.         ZConfMailJoin = ZTrue : _                                    ' RM02079401
  2519.         ZJParm = 5 : _
  2520.         RETURN                                                       ' JC174/RM08119301 RETURN 1205
  2521.      IF ZLinkedConf$ = "" THEN _
  2522.         CALL QuickTPut1("No conferences linked")
  2523.      GOTO 5301
  2524. 5415 ZLinkNew = ZTrue                                                ' RM02079401
  2525. 5420 CALL ConfMail (ZMailCheckConfirm,ZLinkNew,ZLinkPers)            ' RM02079401
  2526.      ZConfMailJoin = (ZHomeConf$ <> "")                              ' RM02079401
  2527.      GOTO 5410
  2528. 5425 ZLinkPers = ZTrue                                               ' RM02079401
  2529.      GOTO 5420
  2530. 5430 IF ZSubBoard THEN _
  2531.         GOSUB 5540
  2532.      RETURN
  2533. 5435 CALL BreakFileName (ZActiveMsgFile$,UserDrvPath$,ZWasDF$,ZWasY$,ZTrue)
  2534.      WasX$ = UserDrvPath$ + _
  2535.              ZConfName$ + _
  2536.              "U.DEF"
  2537.      CALL FindIt (WasX$)
  2538.      IF NOT ZOK THEN _
  2539.         CALL BreakFileName (ZActiveUserFile$,UserDrvPath$,ZWasDF$,ZWasY$,ZTrue) : _ ' KG040602
  2540.         WasX$ = UserDrvPath$ + _
  2541.                 ZConfName$ + _
  2542.                 "U.DEF"
  2543.      RETURN
  2544. 5440 IF LOF(5) < 1 THEN _
  2545.         ZWasDF$ = ZActiveUserFile$ : _
  2546.         ZJParm = 2 : _
  2547.         RETURN                                                       ' JC174/RM08119301 RETURN 13600
  2548.      FIELD 5,31 AS ZUserName$, _
  2549.              15 AS ZPswd$, _
  2550.               2 AS ZSecLevel$, _
  2551.              14 AS ZUserOption$,  _
  2552.              24 AS ZCityState$, _
  2553.               1 AS MachineType$, _                                   ' DROP174
  2554.               1 AS ZDropTimes$, _                                    ' DROP174
  2555.               1 AS ZBankTime$,_
  2556.               4 AS ZTodayDl$, _
  2557.               4 AS ZTodayBytes$, _
  2558.               4 AS ZDlBytes$, _
  2559.               4 AS ZULBytes$, _
  2560.              14 AS ZLastDateTimeOn$, _
  2561.               3 AS ZListNewDate$, _
  2562.               2 AS ZUserDnlds$, _
  2563.               2 AS ZUserUplds$, _
  2564.               2 AS ZElapsedTime$
  2565.      FIELD 5,128 AS ZUserRecord$
  2566.      RETURN
  2567. '
  2568. ' * GET USER DEFAULTS
  2569. '
  2570. 5445 GOSUB 5440
  2571.      CALL SetSysOp
  2572.      CALL SetUserPref
  2573.      RETURN
  2574. 5450 NewsDate# = VAL(MID$(ZBoardCheckDate$,4,2)) + _
  2575.         (100 * VAL(MID$(ZBoardCheckDate$,1,2))) + _
  2576.         (10000# * (1900 + VAL(MID$(ZBoardCheckDate$,7,2))))
  2577.      GOTO 5452
  2578. 5451 NewsDate# = 0
  2579. 5452 ZFileName$ = ZNewsFileName$
  2580.      CALL RBBSFind (ZFileName$,WasZ,WasY,ZMsgPtr,WasD)
  2581.      IF WasZ <> 0 THEN _
  2582.         RETURN
  2583.      FDate# = WasD + (100 * ZMsgPtr) + (10000# * (WasY + 1980))
  2584.      IF NewsDate# > FDate# THEN _
  2585.         RETURN
  2586.      IF ZTurboLogon THEN _
  2587.         CALL QuickTPut1(ZFG7$ + "NEWS" + ZFG5$ + " file updated since last call" + ZEmphasizeOff$) : _ ' RM051701
  2588.         RETURN
  2589.      ZStopInterrupts = ZFalse
  2590.      CALL InitWelc (2)                                               ' IW174/RM08059306
  2591.      WasZ = 0
  2592.      RETURN
  2593. 5455 GOSUB 5504
  2594.      GOSUB 5344
  2595.      IF LOF(1) = 0 THEN _
  2596.         ZWasDF$ = ZActiveMessageFile$ : _
  2597.         CLOSE 1 : _
  2598.         KILL ZActiveMessageFile$ : _
  2599.         GOSUB 5506 : _
  2600.         ZJParm = 2 : _
  2601.         RETURN                                                       ' JC174/RM08119301 RETURN 13600
  2602.      CALL GetMessageHdr                                              ' GM174/RM08059303
  2603.      RETURN
  2604. 5460  TempHashValue$ = ZHashValue$
  2605.       TempIndivValue$ = ZIndivValue$
  2606. 5465  GOSUB 5455
  2607.       GOSUB 5508
  2608.       IF ZInConfMenu THEN _
  2609.          IF NOT ZPrivateDoor THEN _
  2610.             CALL QuickTPut1 ("Checking Users...")
  2611. 5470  CALL OpenUser (ZHighestUserRecord)
  2612.       GOSUB 5440
  2613.       CALL FindUser (TempHashValue$,TempIndivValue$,ZStartHash,ZLenHash,_
  2614.                      ZStartIndiv,ZLenIndiv,ZHighestUserRecord,Found,_
  2615.                      ZUserFileIndex,ZWasSL)
  2616.      IF Found THEN _
  2617.         RETURN
  2618.      IF ZCurUserCount < (ZHighestUserRecord-1)*.95 THEN _
  2619.         RETURN
  2620.      ZOutTxt$ = "No room for new users in " + ZConfName$
  2621.      CALL UpdtCalr (ZOutTxt$,2)
  2622.      IF ZActiveUserFile$ <> ZMainUserFile$ THEN _
  2623.         ZUserFileIndex = 0 : _
  2624.         RETURN
  2625.       IF ZRememberNewUsers AND NOT ZSurviveNoUserRoom THEN _
  2626.          ZOutTxt$ = "Sorry, " + ZFirstName$ + ", " + ZOutTxt$ : _
  2627.          GOSUB 5485
  2628.       ZUserFileIndex = 0
  2629.       IF ZSurviveNoUserRoom THEN _
  2630.          ZRememberNewUsers = ZFalse
  2631.       RETURN
  2632. 5475  CALL GetMessageHdr                                             ' GM174/RM08059303
  2633.       ZCurUserCount = ZCurUserCount + (ZWasSL = 0) * ZRememberNewUsers
  2634. 5480  CALL UpdtMessageHdr                                            ' JC174/RM08059305           ' UM174/RM08059305
  2635.       GOSUB 5502
  2636.       IF ZRememberNewUsers THEN _
  2637.          GOSUB 5510
  2638.       GOSUB 5512
  2639.       RETURN
  2640. 5485  ZSubParm = 1
  2641.       GOTO 5490
  2642. 5490  CALL TPut
  2643. 5495  IF ZSubParm < 0 THEN _
  2644.          ZJParm = 1 : _
  2645.          RETURN                                                      ' JC174/RM08119301 GOTO 202
  2646.       IF ZSubParm = 8 THEN _
  2647.          GOSUB 5524
  2648.       RETURN
  2649. 5500  ZSubParm = 1  ' LOCK USERS & MESSAGES
  2650.       GOTO 5522
  2651. 5502  ZSubParm = 2  ' UNLOCK MESSAGES AND FLUSH
  2652.       Flushed = ZTrue
  2653.       GOTO 5522
  2654. 5504  ZSubParm = 3  ' LOCK MESSAGES
  2655.       GOTO 5522
  2656. 5506  ZSubParm = 4  ' UNLOCK MESSAGES
  2657.       GOTO 5522
  2658. 5508  ZSubParm = 5  ' LOCK USERS
  2659.       GOTO 5522
  2660. 5510  ZSubParm = 6  ' LOCK USER BLOCK
  2661.       GOTO 5522
  2662. 5512  ZSubParm = 7  ' UNLOCK USERS
  2663.       GOTO 5522
  2664. 5514  ZSubParm = 8  ' UNLOCK USER BLOCK
  2665.       GOTO 5522
  2666. 5522  CALL FileLock
  2667.       IF Flushed THEN _
  2668.          FIELD 1,128 AS ZMsgRec$ : _
  2669.          Flushed = ZFalse
  2670.       IF ZSubParm = -1 THEN _
  2671.          ZSubParm = -9 : _
  2672.          CALL FindFKey : _
  2673.          ZJParm = 1 : _
  2674.          RETURN                                                      ' JC174/RM08119301 GOTO 202
  2675.       RETURN
  2676. 5524  GOSUB 5530
  2677.       ZSubParm = 1
  2678. 5526  CALL TGet
  2679. 5530  IF ZSubParm < 0 THEN _
  2680.          ZJParm = 1 : _
  2681.          RETURN                                                      ' JC174/RM08119301 GOTO 202
  2682. 5532  RETURN
  2683. 5540 IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
  2684.         CALL CompDate (ZUserRegYY,ZUserRegMM,ZUserRegDD,UserComputeDate!) : _
  2685.         ZRegDaysRemaining = UserComputeDate! + _
  2686.                              ZDaysInRegPeriod - _
  2687.                              ZTodayComputeDate! : _                  ' RM08209301
  2688.         CALL ExpireDate (UserComputeDate!,ZDaysInRegPeriod,ZExpirationDate$) _
  2689.      ELSE ZDaysInRegPeriod = 0
  2690.      IF NOT ZPrivateDoor THEN _
  2691.         IF ZRegDaysRemaining < 0 AND ZDaysInRegPeriod > 0 THEN _
  2692.         IF ZUserSecLevel > ZTempExpiredSec THEN _
  2693.            CALL QuickTPut1 (ZWasLG$(9) + _
  2694.                        " - security level set to" + _
  2695.                        STR$(ZTempExpiredSec)) : _
  2696.            ZFileName$ = ZHelpPath$ + "RGXPIRD" + ZHelpExtension$ : _ ' RM08219301
  2697.            CALL Graphic (ZFileName$) : _                             ' RM08219301
  2698.            ZStopInterrupts = ZTrue : _                               ' RM08219301
  2699.            CALL BufFile (ZFileName$,WasX) : _                        ' RM08219301
  2700.            ZStopInterrupts = ZFalse : _                              ' RM08219301
  2701.            CALL DelayTime (5) : _                                    ' RM08219301
  2702.            ZLogonErrorIndex = 9 : _
  2703.            ZUserSecLevel = ZTempExpiredSec : _
  2704.            LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
  2705.            CALL SetPrivileges : _
  2706.            ZErrCode = 0
  2707.      RETURN
  2708.      END SUB                                                         ' JC174/RM08109301
  2709. '                                                                    ' SU174/RM08079303
  2710. '$SUBTITLE: 'UserMaint -- subroutine for user Maintenance'           ' SU174/RM08079303
  2711. ' $PAGE                                                              ' SU174/RM08079303
  2712. '                                                                    ' SU174/RM08079303
  2713. ' NAME: UserMaint                                                    ' SU174/RM08079303
  2714. '                                                                    ' SU174/RM08079303
  2715. ' PURPOSE: User maintenance routine.  Formerly in RBBS-PC.BAS        ' SU174/RM08079303
  2716. '                                                                    ' SU174/RM08079303
  2717. ' INPUTS:                                                            ' SU174/RM08079303
  2718. '                                                                    ' SU174/RM08079303
  2719. ' OUTPUTS:                                                           ' SU174/RM08079303
  2720. '                                                                    ' SU174/RM08079303
  2721. '                                                                    ' SU174/RM08079303
  2722. '                                                                    ' SU174/RM08079303
  2723.       SUB UserMaint (EditFromRead, TempHashValue$, ReturnRead)       ' SU174/RM08079303/RM08199302
  2724.       ReturnRead = ZFalse                                            ' SU174/RM08079303
  2725. '     ON UParm GOSUB
  2726. '     EXIT SUB
  2727. 11000 WasTU = ZUserFileIndex
  2728.       CALL DefaultU
  2729.       UserRecordHold$ = ZUserRecord$
  2730.       RegDateHold$ = ZRegDate$
  2731.       UserSecLevelSave = ZUserSecLevel
  2732. 11001 ZStopInterrupts = ZTrue
  2733.       WasI = 1
  2734.       ScanUsers = ZFalse
  2735.       IF EditFromRead = 1 THEN GOTO 11341
  2736.       ZOutTxt$ = "A)dd, L)st, P)rt, M)od, S)can users"
  2737.       ZTurboKey = -ZTurboKeyUser
  2738.       CALL PopCmdStack
  2739.       IF ZSubParm < 0 THEN _
  2740.          EXIT SUB
  2741. 11003 IF ZWasQ = 0 THEN _
  2742.       IF EditFromRead > 0 THEN _
  2743.          GOTO 11325 _
  2744.       ELSE _
  2745.          ZUserFileIndex = WasTU : _
  2746.          LSET ZUserRecord$ = UserRecordHold$ : _
  2747.          GOSUB 13100 : _
  2748.          CALL SetSysOp : _
  2749.          CALL SetUserPref : _
  2750.          EXIT SUB
  2751.       WasQQ = 0
  2752.       ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)
  2753.       CALL AllCaps (ZWasZ$)
  2754.       IF ZWasZ$ = "A" THEN _
  2755.          GOTO 12300 _
  2756.       ELSE IF ZWasZ$ = "M" THEN _
  2757.               ZStopInterrupts = ZTrue _
  2758.            ELSE IF ZWasZ$ = "P" THEN _
  2759.                    WasQQ = ZTrue _
  2760.                 ELSE IF ZWasZ$ = "S" THEN _
  2761.                         ScanUsers = ZTrue : _
  2762.                         ZStopInterrupts = ZTrue _
  2763.                      ELSE IF ZWasZ$ <> "L" THEN _
  2764.                              GOTO 11001
  2765. 11005 CALL OpenUser (ZHighestUserRecord)
  2766.       GOSUB 13100
  2767.       WasZ = 1
  2768.       IF ScanUsers THEN _
  2769.          ZOutTxt$ = "Scan for N)ame, P)wd, C)" + ZUserLocation$ + ", L)evel" + _
  2770.               LEFT$(", H)ash id",-9*(ZStartHash > 1 AND ZLenHash > 0)) : _
  2771.          GOSUB 13110 : _
  2772.          ZOutTxt$ = "" : _
  2773.          ScanFunction$ = LEFT$(ZUserIn$(1),1) : _
  2774.          CALL AllCaps (ScanFunction$) : _
  2775.          ZCR = 0 : _
  2776.          ZSubParm = 5 : _ ' cr/lf
  2777.          CALL TPut : _
  2778.          GOSUB 12966 : _
  2779.          GOTO 12962
  2780. 11010 FOR WasJ = WasZ TO ZHighestUserRecord
  2781.          GET 5,WasJ
  2782. 11015    CALL DispUserRec (WasQQ)
  2783.          IF NOT ZOK THEN _
  2784.             GOTO 11310
  2785.          IF ZRet <> 0 THEN _
  2786.            GOTO 11330
  2787. 11107   IF NOT ZStopInterrupts THEN _
  2788.            GOTO 11310
  2789. 11110   ZOutTxt$ = "D)el  F)ind  M)enu  N)ewPW  P)rnt  R)eset Grfx  C)" _
  2790.              + ZUserLocation$ + "  Q)uit"                            '  KG021602
  2791.         CALL TopPrompt
  2792.         ZOutTxt$ = "S)ecLvl  U)ser#  X)fer Cnts  T)ime Used  B)ank Acct  " + _ ' DROP174
  2793.                    "!)Carrier Drops"                                 ' DROP174/RM09030293
  2794.         CALL TopPrompt                                               ' RM09029301
  2795.         ZOutTxt$ = "#)Times on "                                     ' RM09029301
  2796.         IF ZRestrictByDate THEN _
  2797.            ZOutTxt$ = ZOutTxt$ + _
  2798.                 " $)RegDate"
  2799.         GOSUB 13110
  2800.         IF NOT ScanUsers AND ZWasQ = 0 THEN _
  2801.            GOTO 11310
  2802. 11115   ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)
  2803.         CALL AllCaps (ZWasZ$)
  2804.         WasX = INSTR("DNPQFSMR$UXTBC!#",ZWasZ$)                      ' DROP174/RM09029301
  2805.         IF ZWasZ$ = "" AND ScanUsers THEN _
  2806.            GOTO 12965
  2807.         ON WasX GOTO 11130,11160,11220,11320,11340,11390,11330, _
  2808.                      11400,11450,11127,11490,11420,11423,11190, _    ' DROP174
  2809.                      11424,11430                                     ' DROP174/RM09029301
  2810.         GOTO 11110
  2811. 11125   WasZ = VAL(ZUserIn$)
  2812.         IF WasZ < 1 OR WasZ > ZHighestUserRecord THEN _
  2813.            GOTO 11015                                                ' RM08039301
  2814.         GOTO 11010
  2815. 11127   ZOutTxt$ = "What record # ([ENTER] Quits)"                   ' RM08039301
  2816.         GOSUB 13115
  2817.         GOTO 11125
  2818. '
  2819. ' *  D - COMMAND FROM 5- USER MAINTENANCE OPTIONS (DELETE USER)
  2820. '
  2821. 11130   ZOutTxt$ = "Delete user (Y,[N])"
  2822.         GOSUB 13200
  2823.         IF ZYes THEN _
  2824.            LSET ZUserName$ = CHR$(0) + _
  2825.                              "deleted user" : _
  2826.            LSET ZSecLevel$ = MKI$(ZMinLogonSec - 1) : _
  2827.            LSET ZLastDateTimeOn$ = "01-01-80" + _
  2828.                                      " " + _
  2829.                                      ZTimeLoggedOn$
  2830.         GOTO 11290
  2831. '
  2832. ' *  N - COMMAND FROM 5- USER MAINTENANCE OPTIONS (CHANGE USER PASSWORD)
  2833. '
  2834. 11160   GOSUB 12800
  2835.         GOTO 11290
  2836. '
  2837. ' *  P - COMMAND FROM 5- USER MAINTENANCE OPTIONS (PRINT USER FILE)
  2838. '
  2839. 11185   CALL QuickTPut1 (ZUserLocation$ + " now " + ZWasCI$)
  2840.         WasA1$ = "Enter new "
  2841.         RETURN
  2842. 11190 ' *** C - COMMAND FROM 5 - CHANGE CITY/STATE ***
  2843.         CityStateSave$ = ZWasCI$
  2844.         ZWasCI$ = ZCityState$
  2845.         CALL Trim (ZWasCI$)
  2846.         GOSUB 11185
  2847.         GOSUB 12960
  2848.         ZWasCI$ = CityStateSave$
  2849.         GOTO 11290
  2850. 11220   WasQQ = NOT WasQQ
  2851.         GOTO 11015
  2852. 11290   ZUserFileIndex = LOC(5)
  2853.         GOSUB 13230
  2854.         IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN _
  2855.            PUT 5,ZUserFileIndex
  2856.         GOSUB 13232
  2857.         ZUserFileIndex = 0
  2858.         GOTO 11015
  2859. 11310   IF ScanUsers THEN _
  2860.            GOTO 12965
  2861. 11311 NEXT
  2862. '
  2863. ' *  Q - COMMAND FROM 5- USER MAINTENANCE OPTIONS (QUIT TO MAIN MENU)
  2864. '
  2865. 11320 ZUserFileIndex = WasTU
  2866.       LSET ZUserRecord$ = UserRecordHold$
  2867.       ZRegDate$ = RegDateHold$
  2868.       IF EditFromRead > 0 THEN _
  2869.          GOTO 11325
  2870.       EXIT SUB
  2871. 11325 ZReply = ZFalse
  2872.       JustReplied = ZTrue
  2873.       QuotedReply = ZTrue
  2874.       EditFromRead = 0
  2875.       CALL GetMsgAttr
  2876.       DontPrint = ZTrue
  2877.       ZUserIn$ = "="
  2878.       ReturnRead = ZTrue                                             ' SU174/RM08079303
  2879.       EXIT SUB
  2880. '
  2881. ' *  M - COMMAND FROM 5- USER MAINTENANCE OPTIONS (MAIN USER MAINT. MENU)
  2882. '
  2883. 11330 CLOSE 2
  2884.       IF EditFromRead > 0 THEN _
  2885.          EditFromRead = 2
  2886.       GOTO 11001
  2887. '
  2888. ' *  F - COMMAND FROM 5- USER MAINTENANCE OPTIONS (FIND USER)
  2889. '
  2890. 11340 ZOutTxt$ = ZPromptHash$ + _
  2891.            " to find.  2 Char. Min.  ([ENTER] Quits)"                ' RM101801/RM08039301
  2892.       CALL SkipLine (1)
  2893.       ZParseOff = ZTrue
  2894.       GOSUB 13115
  2895.       IF ZWasQ = 0 THEN _
  2896.          GOTO 11015                                                  ' RM08039301
  2897.       CALL Trim (ZUserIn$)                                           ' RM01149401
  2898.       TempHashValue$ = ZUserIn$
  2899. 11341 IF LEN(TempHashValue$) < 2 OR LEN(TempHashValue$) > ZLenHash THEN _  ' RM08039301
  2900.          GOTO 11340
  2901.       CALL AllCaps (TempHashValue$)
  2902.       IF ZStartIndiv < 1 THEN _
  2903.          GOTO 11345
  2904. 11342 ZOutTxt$ = ZPromptIndiv$ + _
  2905.            " to find"
  2906.       GOSUB 13200
  2907.       IF ZWasQ = 0 THEN _
  2908.          GOTO 11342
  2909.       TempIndivValue$ = ZUserIn$
  2910.       IF LEN(TempIndivValue$) > ZLenIndiv THEN _
  2911.          GOTO 11342
  2912.       CALL AllCaps (TempIndivValue$)
  2913. 11345 GOSUB 12600
  2914.       ZSubParm = 7  ' UNLOCK USERS
  2915.       GOSUB 13236
  2916.       ZSubParm = 4  ' UNLOCK MESSAGES
  2917.       GOSUB 13236
  2918.       IF NOT Found THEN _                                            ' RM101801
  2919.          ZOutTxt$ = "Modify User: " : _                              ' RM101801
  2920.          CALL QuickPeek (TempHashValue$,Found) : _                   ' RM101801/RM02129401
  2921.          ZSubParm = 7  ' UNLOCK USERS
  2922.          GOSUB 13236 : _                                             ' RM101801
  2923.          ZSubParm = 4 : _  ' UNLOCK MESSAGES
  2924.          GOSUB 13236                                                 ' RM101801
  2925.       ZUserFileIndex = 0
  2926.       IF Found THEN _
  2927.          GOTO 11015
  2928. 11380 ZOutTxt$ = TempHashValue$ + _
  2929.            " " + _
  2930.            TempIndivValue$ + _
  2931.            " not found"
  2932.       ZSubParm = 3
  2933.       CALL TPut
  2934.       IF ZSubParm < 0 THEN _
  2935.          EXIT SUB
  2936.       GOTO 11310
  2937. '
  2938. ' *  S - COMMAND FROM 5- USER MAINTENANCE OPTIONS (CHANGE USER SECURITY)
  2939. '
  2940. 11390 GOSUB 11395
  2941.       IF ZWasQ > 0 THEN _
  2942.          LSET ZSecLevel$ = MKI$(WasOF)
  2943.       GOTO 11290
  2944. 11395 ZOutTxt$ = "New sec level" + ZPressEnter$
  2945.       GOSUB 13115
  2946.       ZWasZ$ = ZUserIn$(ZAnsIndex)
  2947.       WasOF = VAL(ZWasZ$)
  2948.       IF WasOF > ZUserSecLevel THEN _
  2949.          WasOF = ZUserSecLevel
  2950.       RETURN
  2951. '
  2952. ' *  R - COMMAND FROM 5- USER MAINTENANCE OPTIONS (RESET USER GRAPHICS)
  2953. '
  2954. 11400 ZWasA = CVI(MID$(ZUserOption$,9,2))
  2955.       ZWasA = ZWasA AND &HFAFF                ' TURN HIGHLIGHTING OFF
  2956.       LSET ZUserOption$ = LEFT$(ZUserOption$,5) + _
  2957.                            "0" + _
  2958.                            MID$(ZUserOption$,7,2) + _
  2959.                            MKI$(ZWasA) + _
  2960.                            MID$(ZUserOption$,11)
  2961.       GOTO 11290
  2962. 11420        ' * T - COMMAND FROM 5 - TIME USED
  2963.       Temp = CVI (ZElapsedTime$)
  2964.       CALL ChangeInt (ZTrue,"Time Used",Temp,-21900,2000)
  2965.       IF ZWasQ <> 0 THEN _
  2966.          LSET ZElapsedTime$ = MKI$(ZTestedIntValue)
  2967.       GOTO 11290
  2968. 11423        ' * B - COMMAND FROM 5 - BANKED TIME
  2969.       Temp = ASC(ZBankTime$)
  2970.       CALL ChangeInt (ZTrue,"Banked Time",Temp,0,255)
  2971.       IF ZWasQ <> 0 THEN _
  2972.          LSET ZBankTime$ = CHR$(ZTestedIntValue)
  2973.       GOTO 11290
  2974. 11424        ' * ! - COMMAND FROM 5 - DROPPED CARRIERS               ' DROP174
  2975.       Temp = ASC(ZDropTimes$)                                        ' DROP174
  2976.       CALL ChangeInt (ZTrue,"Dropped Carriers",Temp,0,255)           ' DROP174
  2977.       IF ZWasQ <> 0 THEN _                                           ' DROP174
  2978.          LSET ZDropTimes$ = CHR$(ZTestedIntValue)                    ' DROP174
  2979.       GOTO 11290                                                     ' DROP174
  2980. 11430        ' * # - COMMAND FROM 5 - NUMBER OF LOG ONS              ' RM09029301
  2981.       Temp = CVI(MID$(ZUserOption$,1,2))                             ' RM09029301
  2982.       CALL ChangeInt (ZTrue,"Times On",Temp,0,32000)                 ' RM09029301
  2983.       IF ZWasQ <> 0 THEN _                                           ' RM09029301
  2984.          LSET ZUserOption$ = MKI$(ZTestedIntValue) + MID$(ZUserOption$,3) ' RM09029301
  2985.       GOTO 11290                                                     ' RM09029301
  2986.  
  2987. '
  2988. ' *  $ - COMMAND FROM 5 - USER MAINTENANCE (CHANGE REGISTRATION DATE)
  2989. '
  2990. 11450 ZOutTxt$ = "Enter new registration date (MM-DD-YY)"
  2991.       GOSUB 13115
  2992.       IF ZWasQ = 0 THEN _
  2993.          GOTO 11015
  2994. 11455 WorkDate$ = ZUserIn$(ZAnsIndex)
  2995.       IF LEN(WorkDate$) < 8 THEN _
  2996.          GOTO 11450
  2997.       CALL ResetRegDate (WorkDate$)
  2998.       IF NOT ZOK THEN _
  2999.          GOTO 11450
  3000.       LSET ZUserOption$ = LEFT$(ZUserOption$,10) + _
  3001.                            ZRegDate$ + _
  3002.                            MID$(ZUserOption$,13)
  3003.       CALL SetRegDisplay
  3004.       ZRegDate$ = RegDateHold$
  3005.       GOTO 11290
  3006. '
  3007. ' *  X - COMMAND FROM 5 - USER MAINTENANCE (CHANGE XFER COUNTERS)             *
  3008. '
  3009. 11490 CALL CmndSysOpXfer
  3010.       GOTO 11290
  3011. '
  3012. ' *  A - COMMAND FROM 5- USER MAINTENANCE OPTIONS (ADD USER)
  3013. '
  3014. 12300 WasA1$ = ""
  3015.       Attempts = 0
  3016.       FirstNameSave$ = ZFirstName$
  3017.       LastNameSave$ = ZLastName$
  3018.       ActiveUserNameSave$ = ZActiveUserName$
  3019.       CityStateSave$ = ZWasCI$
  3020.       HashValueSave$ = HashValue$
  3021.       IndivValueSave$ = ZIndivValue$
  3022.       GOSUB 12500
  3023.       GOSUB 12840
  3024.       GOSUB 12850
  3025.       GOSUB 12598
  3026.       IF ZUserFileIndex = 0 THEN _
  3027.          ZSubParm = 1 : _  ' LOCK USERS & MESSAGES
  3028.          GOSUB 13236 : _
  3029.          GOTO 12330
  3030.       IF Found THEN _
  3031.          WasD$ = "User already exists" : _
  3032.          NumReturns = 1 : _
  3033.          CALL LPrnt(WasD$,NumReturns) : _
  3034.          ZSubParm = 1 : _  ' LOCK USERS & MESSAGES
  3035.          GOSUB 13236 : _
  3036.          GOTO 12330
  3037. 12310 GOSUB 12630
  3038.       GOSUB 12800
  3039. 12311 GOSUB 11395
  3040.       IF ZWasQ = 0 THEN GOTO 12311
  3041.       ZTempSecLevel = WasOF
  3042.       CALL SetNewUserDef
  3043.       LSET ZLastDateTimeOn$ = ZCurDate$ + _
  3044.                                 " " + _
  3045.                                 ZTimeLoggedOn$
  3046.       GOSUB 12960
  3047.       CALL AllCaps (ZUserIn$)
  3048.       LSET ZCityState$ = ZUserIn$
  3049.       LSET ZElapsedTime$ = MKI$(0)
  3050.       IF ZStartHash > 1 THEN _
  3051.          MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
  3052.       IF ZStartIndiv > 1 THEN _
  3053.          MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$
  3054.      IF ZUserFileIndex > 0 AND ZUserFileIndex < 32768 THEN _
  3055.         PUT 5,ZUserFileIndex
  3056. 12320 GOSUB 13232
  3057. 12330 ZUserSecLevel = UserSecLevelSave
  3058.       ZFirstName$ = FirstNameSave$
  3059.       ZLastName$ = LastNameSave$
  3060.       ZActiveUserName$ = ActiveUserNameSave$
  3061.       ZWasCI$ = CityStateSave$
  3062.       HashValue$ = HashValueSave$
  3063.       ZIndivValue$ = IndivValueSave$
  3064.       ZUserFileIndex = WasTU
  3065.       LSET ZUserRecord$ = UserRecordHold$
  3066.       GOTO 11001
  3067. '
  3068. ' *  GET USER First AND Last NAMES
  3069. '
  3070. 12500 IF Attempts > 5 THEN _
  3071.          ZFF = ZTrue : _
  3072.          RETURN
  3073. 12510 Attempts = Attempts + 1
  3074.       ZOutTxt$ = WasA1$ + _
  3075.            ZFirstNamePrompt$
  3076.       CALL SkipLine (1)
  3077.       ZLogonActive = ZTrue
  3078.       GOSUB 12555
  3079.       ZLogonActive = ZFalse
  3080.       CALL Trim (ZWasZ$)
  3081.       ZFirstName$ = ZWasZ$
  3082. 12530 ZOutTxt$ = WasA1$ + _
  3083.            ZLastNamePrompt$
  3084.       ZParseOff = ZTrue
  3085.       GOSUB 12555
  3086. 12540 CALL Trim (ZWasZ$)
  3087.       ZLastName$ = ZWasZ$
  3088.       IF LEN(ZLastName$) < 2 THEN _
  3089.          IF LEN(ZFirstName$) > 2 THEN _
  3090.             GOTO 12500
  3091.       IF (LEN(ZFirstName$) + LEN(ZLastName$)) > 30 THEN _
  3092.          GOTO 12500
  3093.       IF UserSecLevelSave < ZSysopSecLevel THEN _
  3094.          IF (LEN(ZFirstName$) < 2 OR LEN(ZLastName$) < 2) THEN _
  3095.             GOTO 12500 _
  3096.          ELSE IF LEFT$(ZFirstName$,1)=" " OR LEFT$(ZLastName$,1)=" " THEN _
  3097.                  GOTO 12500
  3098. 12550 ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
  3099.       ZWasZ$ = ZFirstName$
  3100.       RETURN
  3101. '
  3102. ' *  CHECK FOR NAMES NOT ALLOWED
  3103. '
  3104. 12555 GOSUB 13115
  3105.       IF ZWasQ = 0 THEN _
  3106.          RETURN
  3107. 12556 ZWasZ$ = ZUserIn$(ZAnsIndex)
  3108. 12557 CALL AllCaps (ZWasZ$)
  3109.       CALL RemNonAlf (ZWasZ$,31,91)
  3110.       RETURN
  3111. '
  3112. ' *   SEARCH USER FILE ROUTINE
  3113. '
  3114. 12598 TempHashValue$ = HashValue$
  3115.       TempIndivValue$ = ZIndivValue$
  3116. 12600 ZSubParm = 3  ' LOCK MESSAGES
  3117.       GOSUB 13236
  3118.       CALL OpenMsg
  3119.       FIELD 1, 128 AS ZMsgRec$
  3120.       CALL GetMessageHdr                                             ' GM174/RM08059303
  3121.       ZSubParm = 5  ' LOCK USERS
  3122.       GOSUB 13236
  3123. 12605 CALL OpenUser (ZHighestUserRecord)
  3124.       GOSUB 13100
  3125.       CALL FindUser (TempHashValue$,TempIndivValue$,ZStartHash,ZLenHash,_
  3126.                      ZStartIndiv,ZLenIndiv,ZHighestUserRecord,Found,_
  3127.                      ZUserFileIndex,ZWasSL)
  3128.       IF Found THEN _
  3129.          RETURN
  3130.       IF ZCurUserCount < (ZHighestUserRecord-1)*.95 THEN _
  3131.          RETURN
  3132.       ZOutTxt$ = "No room for new users in " + ZConfName$
  3133.       IF ZActiveUserFile$ <> ZMainUserFile$ THEN _
  3134.          ZUserFileIndex = 0 : _
  3135.          RETURN
  3136.       IF ZRememberNewUsers AND NOT ZSurviveNoUserRoom THEN _
  3137.          ZOutTxt$ = "Sorry, " + ZFirstName$ + ", " + ZOutTxt$ : _
  3138.          ZSubParm = 1 : _
  3139.          CALL TPut : _
  3140.          IF ZSubParm < 0 THEN _
  3141.             EXIT SUB
  3142.       ZUserFileIndex = 0
  3143.       IF ZSurviveNoUserRoom THEN _
  3144.           ZRememberNewUsers = ZFalse
  3145.       RETURN
  3146. '
  3147. ' *  AUGMENT USER COUNT, LOCK 4 REC BLOCK IN USER, UNLOCK FILES
  3148. '
  3149. 12630 CALL GetMessageHdr                                             ' GM174/RM08059303
  3150.       ZCurUserCount = ZCurUserCount + (ZWasSL = 0) * ZRememberNewUsers
  3151. 12632 CALL UpdtMessageHdr                                            ' UM174/RM08059305           ' UM174/RM08059305
  3152.       ZSubParm = 2  ' UNLOCK MESSAGES AND FLUSH
  3153.       Flushed = ZTrue
  3154.       GOSUB 13236
  3155.       IF ZRememberNewUsers THEN _
  3156.          ZSubParm = 6 : _  ' LOCK USER BLOCK
  3157.          GOSUB 13236
  3158.       ZSubParm = 7  ' UNLOCK USERS
  3159.       GOSUB 13236
  3160.       RETURN
  3161. '
  3162. ' *  GET PASSWORD FROM NEWUSER
  3163. '
  3164. 12800 CALL NewPassword ("Enter PASSWORD you'll use to logon again",ZFalse)
  3165.       IF ZSubParm < 0 THEN _
  3166.          EXIT SUB
  3167.       IF UserSecLevelSave < ZSysopSecLevel THEN _
  3168.          IF ZUserIn$ = SPACE$(LEN(ZUserIn$)) THEN _
  3169.             GOTO 12800
  3170.       LSET ZPswd$ = ZWasZ$
  3171.       RETURN
  3172. '
  3173. ' *  GET HASH VALUE FOR CURRENT USER TO LOOK UP IN THE USER'S FILE
  3174. '
  3175. 12840 IF ZStartHash = 1 THEN _
  3176.          HashValue$ = ZActiveUserName$ : _
  3177.          RETURN
  3178.       WasX$ = WasA1$ + _
  3179.            ZPromptHash$
  3180.       CALL UntilRight (WasX$,HashValue$,2,ZLenHash)
  3181.       RETURN
  3182. '
  3183. ' *  GET FIELD TO INDIVIDUATE ONE USER FROM ANOTHER (NAME FIELD IS DEFAULT)
  3184. '
  3185. 12850 IF ZStartIndiv < 1 OR ZLenIndiv < 1 THEN _
  3186.          RETURN
  3187.       IF ZStartIndiv = 1 THEN _
  3188.          ZIndivValue$ = ZActiveUserName$ : _
  3189.          RETURN
  3190.       IF ZExitToDoors THEN _
  3191.          RETURN
  3192.       WasX$ = WasA1$ + _
  3193.            ZPromptIndiv$
  3194.       CALL UntilRight (WasX$,ZIndivValue$,2,ZLenIndiv)
  3195.       RETURN
  3196. '
  3197. ' *  GET CITY AND STATE
  3198. '
  3199. 12960 ZOutTxt$ = WasA1$ + _
  3200.                  ZUserLocation$
  3201.       IF NOT ZNewUser THEN _
  3202.          ZOutTxt$ = ZOutTxt$ + ZPressEnter$
  3203.       ZParseOff = ZTrue
  3204.       GOSUB 13115
  3205.       IF ZWasQ = 0 OR ZUserIn$ = SPACE$(LEN(ZUserIn$)) THEN _
  3206.          IF ZNewUser THEN _
  3207.             GOTO 12960 _
  3208.          ELSE RETURN
  3209.       CALL AllCaps (ZUserIn$)
  3210.       CALL QuickTPut1 ("Set to "+ZUserIn$)
  3211.       LSET ZCityState$ = ZUserIn$
  3212.       ZWasCI$ = ZUserIn$
  3213.       RETURN
  3214. '
  3215. ' *  S - COMMAND FROM 5 - USER MAINTENANCE OPTIONS (SCAN USERS)
  3216. '
  3217. 12962 WasX = 0
  3218.       ZFF = ZFalse
  3219.       ZMacroMin = 99
  3220.       ZOutTxt$ = "String to search"
  3221.       ZOutTxt$ = ZOutTxt$ + _
  3222.            ZPressEnter$
  3223.       CALL TGet
  3224.       IF ZSubParm < 0 THEN _
  3225.          EXIT SUB
  3226.       IF ZWasQ = 0 THEN _
  3227.          GOTO 11001
  3228.       CALL AllCaps (ZUserIn$)
  3229.       WasWK$ = ZUserIn$
  3230.       IF ScanFunction$ = "L" THEN _
  3231.          WasWK$ = "," + _
  3232.                STR$(VAL(WasWK$)) + _
  3233.                ","
  3234. 12963 GET 5,WasI
  3235.       GOSUB 12966
  3236.       WasX = INSTR(ScanField$,WasWK$)
  3237.       IF WasX > 0 THEN _
  3238.          GOTO 11015
  3239. 12965 WasI = WasI + 1
  3240.       IF WasI > ZHighestUserRecord THEN _
  3241.          LSET ZUserRecord$ = UserRecordHold$ : _
  3242.          GOTO 11001
  3243.       WasX = 0
  3244.       GOTO 12963
  3245. 12966 ZFF = INSTR("NCPLH",ScanFunction$)
  3246. 12967 ON ZFF GOTO 12968,12969,12970,12972,12971
  3247.       GOTO 11001
  3248. '
  3249. ' *  N - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR NAME)
  3250. '
  3251. 12968 ScanField$ = ZUserName$
  3252.       RETURN
  3253. '
  3254. ' *  C - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR CITY/ST)
  3255. '
  3256. 12969 ScanField$ = ZCityState$
  3257.       RETURN
  3258. '
  3259. ' *  P - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR PASSWORD)
  3260. '
  3261. 12970 ScanField$ = ZPswd$
  3262.       RETURN
  3263. '
  3264. ' *  H - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR HASH ID)
  3265. '
  3266. 12971 IF ZStartHash > 0 AND ZLenHash > 0 THEN _
  3267.          ScanField$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
  3268.       RETURN
  3269. '
  3270. ' *  L - COMMAND FROM 5 - USER MAINTENANCE SCAN FUNCTION (SEARCH FOR LEVEL)
  3271. '
  3272. 12972 ScanField$ = "," + _
  3273.                     STR$(CVI(ZSecLevel$)) + _
  3274.                     ","
  3275.       RETURN
  3276. 13100 FIELD 5,31 AS ZUserName$, _
  3277.               15 AS ZPswd$, _
  3278.                2 AS ZSecLevel$, _
  3279.               14 AS ZUserOption$,  _
  3280.               24 AS ZCityState$, _
  3281.                1 AS MachineType$, _                                   ' DROP174
  3282.                1 AS ZDropTimes$, _                                    ' DROP174
  3283.                1 AS ZBankTime$,_
  3284.                4 AS ZTodayDl$, _
  3285.                4 AS ZTodayBytes$, _
  3286.                4 AS ZDlBytes$, _
  3287.                4 AS ZULBytes$, _
  3288.               14 AS ZLastDateTimeOn$, _
  3289.                3 AS ZListNewDate$, _
  3290.                2 AS ZUserDnlds$, _
  3291.                2 AS ZUserUplds$, _
  3292.                2 AS ZElapsedTime$
  3293.       FIELD 5,128 AS ZUserRecord$
  3294.       RETURN
  3295. 13110 ZTurboKey = -ZTurboKeyUser
  3296. 13115 CALL PopCmdStack
  3297.       GOTO 13190
  3298. 13190 IF ZSubParm < 0 THEN _
  3299.          EXIT SUB
  3300.       RETURN
  3301. 13200 GOSUB 13204
  3302.       ZSubParm = 1
  3303. 13202 CALL TGet
  3304. 13204 IF ZSubParm < 0 THEN _
  3305.          EXIT SUB
  3306.       RETURN
  3307. 13230 ZSubParm = 6  ' LOCK USER BLOCK
  3308.       GOTO 13236
  3309. 13232 ZSubParm = 8  ' UNLOCK USER BLOCK
  3310.       GOTO 13236
  3311. 13236 CALL FileLock
  3312.       IF Flushed THEN _
  3313.          FIELD 1,128 AS ZMsgRec$ : _
  3314.          Flushed = ZFalse
  3315.       IF ZSubParm = -1 THEN _
  3316.          ZSubParm = -9 : _
  3317.          CALL FindFKey : _
  3318.          EXIT SUB
  3319.       RETURN
  3320.       END SUB                                                        ' SU174/RM08079303
  3321. '                                                                    ' GM174/RM08059303
  3322. 23000 '$SUBTITLE: 'GetMessageHdr -- subroutine get message header'   ' GM174/RM08059303
  3323. ' $PAGE                                                              ' GM174/RM08059303
  3324. '                                                                    ' GM174/RM08059303
  3325. ' NAME: GetMessageHdr                                                ' GM174/RM08059303
  3326. '                                                                    ' GM174/RM08059303
  3327. ' PURPOSE: To retreive message header.  Formerly in RBBS-PC.BAS      ' GM174/RM08059303
  3328. '                                                                    ' GM174/RM08059303
  3329. ' INPUTS:                                                            ' GM174/RM08059303
  3330. '                                                                    ' GM174/RM08059303
  3331. ' OUTPUTS:                                                           ' GM174/RM08059303
  3332. '                                                                    ' GM174/RM08059303
  3333. '                                                                    ' GM174/RM08059303
  3334.       SUB GetMessageHdr                                              ' GM174/RM08059303
  3335.       FIELD 1, 128 AS ZMsgRec$                                       ' GM174/RM08059303
  3336.       GET 1,1
  3337.       ZHighMsgNumber = VAL(LEFT$(ZMsgRec$,8))
  3338.       ZAutoAddSec   = CVI(MID$(ZMsgRec$,9,2))
  3339.       ZCallsToDate! = VAL(MID$(ZMsgRec$,11,10))
  3340.       ZMsgSecCats$ = LEFT$("U",-(MID$(ZMsgRec$,21,1) <> "/")) + _
  3341.                      LEFT$("R",-(MID$(ZMsgRec$,22,1) <> "/")) + _
  3342.                      LEFT$("P",-(MID$(ZMsgRec$,23,1) <> "/")) + "EH"
  3343.       IF ZUserSecLevel >= ZSecKillAny THEN _
  3344.           ZMsgSecCats$ = "URPEH"
  3345.       IF ZMsgSecCats$ = "EH" THEN _
  3346.          ZMsgSecCats$ = "UEH"
  3347.       ZCurUserCount = VAL(MID$(ZMsgRec$,57,5))
  3348.       ZFirstMsgRecord = VAL(MID$(ZMsgRec$,68,7))
  3349.       ZNextMsgRec = VAL(MID$(ZMsgRec$,75,7))
  3350.       ZHighestMsgRecord = VAL(MID$(ZMsgRec$,82,7))
  3351.       IF ZActiveMessageFile$ = ZOrigMsgFile$ THEN _
  3352.          ZMaxNodes = VAL(MID$(ZMsgRec$,127))
  3353.       END SUB                                                        ' GM174/RM08059304
  3354. '                                                                    ' FM174/RM08059304
  3355. 23100 '$SUBTITLE: 'FixMessageHdr -- subroutine to fix message header' ' FM174/RM08059304
  3356. ' $PAGE                                                              ' FM174/RM08059304
  3357. '                                                                    ' FM174/RM08059304
  3358. ' NAME: FixMessageHdr                                                ' FM174/RM08059304
  3359. '                                                                    ' FM174/RM08059304
  3360. ' PURPOSE: To fix message header.  Formerly in RBBS-PC.BAS           ' FM174/RM08059304
  3361. '                                                                    ' FM174/RM08059304
  3362. ' INPUTS:                                                            ' FM174/RM08059304
  3363. '                                                                    ' FM174/RM08059304
  3364. ' OUTPUTS:                                                           ' FM174/RM08059304
  3365. '                                                                    ' FM174/RM08059304
  3366. '                                                                    ' FM174/RM08059304
  3367.       SUB FixMessageHdr                                              ' FM174/RM08059304
  3368.       FIELD 1, 128 AS ZMsgRec$                                       ' FM174/RM08059303
  3369. 23105 GET 1,ZNextMsgRec
  3370.       IF MID$(ZMsgRec$,61,1) = ":" THEN _
  3371.          CALL CheckInt (MID$(ZMsgRec$,117,4)) : _
  3372.          IF ZErrCode = 0 AND (ZTestedIntValue > 1) AND (ZTestedIntValue < 100) THEN _
  3373.             WasY = ZTestedIntValue : _
  3374.             CALL CheckInt (MID$(ZMsgRec$,2,4)) : _
  3375.             IF ZErrCode = 0 AND ZTestedIntValue > ZHighMsgNumber THEN _
  3376.                ZHighMsgNumber = ZTestedIntValue : _
  3377.                ZNextMsgRec = ZNextMsgRec + WasY : _
  3378.                CALL QuickTPut1 ("Fixing Msg Header") : _
  3379.                MsgCorrected = ZTrue : _
  3380.                GOTO 23105                                            ' FM174/RM08059304
  3381.       END SUB                                                        ' FM174/RM08059304
  3382. '                                                                    ' UM174/RM08059305
  3383. 24000 '$SUBTITLE: 'UpdtMessageHdr -- subroutine to update message header' ' UM174/RM08059305
  3384. ' $PAGE                                                              ' UM174/RM08059305
  3385. '                                                                    ' UM174/RM08059305
  3386. ' NAME: UpdtMessageHdr                                               ' UM174/RM08059305
  3387. '                                                                    ' UM174/RM08059305
  3388. ' PURPOSE: To update message header.  Formerly in RBBS-PC.BAS        ' UM174/RM08059305
  3389. '                                                                    ' UM174/RM08059305
  3390. ' INPUTS:                                                            ' UM174/RM08059305
  3391. '                                                                    ' UM174/RM08059305
  3392. ' OUTPUTS:                                                           ' UM174/RM08059305
  3393. '                                                                    ' UM174/RM08059305
  3394. '                                                                    ' UM174/RM08059305
  3395.       SUB UpdtMessageHdr                                             ' UM174/RM08059305
  3396.       FIELD 1, 128 AS ZMsgRec$                                       ' UM174/RM08059303
  3397.       MID$(ZMsgRec$,1,8) = STR$(ZHighMsgNumber)
  3398.       MID$(ZMsgRec$,11,10) = STR$(ZCallsToDate!)
  3399.       MID$(ZMsgRec$,57,5) = STR$(ZCurUserCount)
  3400.       MID$(ZMsgRec$,68,7) = STR$(ZFirstMsgRecord)
  3401.       MID$(ZMsgRec$,75,7) = STR$(ZNextMsgRec)
  3402.       MID$(ZMsgRec$,82,7) = STR$(ZHighestMsgRecord)
  3403.       PUT 1,1
  3404.       END SUB                                                        ' UM174/RM08059304
  3405. '                                                                    ' ES174/RM08069301
  3406. 42849 '$SUBTITLE: 'EchoSet -- subroutine to allow user to set echo pref' ' ES174/RM08069301
  3407. ' $PAGE                                                              ' ES174/RM08069301
  3408. '                                                                    ' ES174/RM08069301
  3409. ' NAME: EchoSet                                                      ' ES174/RM08069301
  3410. '                                                                    ' ES174/RM08069301
  3411. ' PURPOSE: To allow user to set echo preference.  Formerly in RBBS-PC.BAS ' ES174/RM08069301
  3412. '                                                                    ' ES174/RM08069301
  3413. ' INPUTS:                                                            ' ES174/RM08069301
  3414. '                                                                    ' ES174/RM08069301
  3415. ' OUTPUTS:                                                           ' ES174/RM08069301
  3416. '                                                                    ' ES174/RM08069301
  3417. '                                                                    ' ES174/RM08069301
  3418.       SUB EchoSet
  3419.       CALL ReportEcho
  3420. 42851 ZOutTxt$ = "Change to R)BBS, C)aller's software" + _
  3421.            MID$(", I)ntermediate host",1,-20 * (ZHostEchoOn$ <> "")) + _
  3422.            ZPressEnterExpert$
  3423.       ZTurboKey = -ZTurboKeyUser
  3424.       CALL PopCmdStack
  3425.       IF ZSubParm < 0 THEN _
  3426.          EXIT SUB
  3427.       IF ZWasQ = 0 THEN _
  3428.          EXIT SUB                                                    ' ES174/RM08069301
  3429. 42852 ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1)
  3430.       CALL AllCaps (ZWasZ$)
  3431.       IF INSTR("ICR",ZWasZ$) = 0 THEN _
  3432.          GOTO 42851
  3433.       ZEchoer$ = ZWasZ$
  3434.       CALL SetEcho (ZEchoer$)
  3435.       CALL ReportEcho
  3436.       END SUB                                                        ' ES174/RM08069301
  3437. '                                                                    ' STAT174
  3438. 65000 ' ****  S - COMMAND FROM THE UTILITIES MENU (STATISTICS) ****  ' STAT174
  3439.       SUB Statistics                                                 ' STAT174/RM08059302/RM08119301/RM08159301
  3440.       ActionFlag = ZTrue                                             ' STAT174
  3441.       IF ZActiveMessageFile$ = ZPrevBast$ THEN _                     ' STAT174
  3442.          ActionFlag = ZFalse                                         ' STAT174
  3443.       CALL SkipLine (1)                                              ' STAT174/RM030601
  3444.       CALL QuickTPut1 (ZFG5$ + "RBBS-PC " + ZFG7$ + ZVersionID$ + ZFG5$ + " Node " + ZFG7$ + ZNodeID$) ' STAT174
  3445.       CALL QuickTPut1 (ZFG7$ + ZRBBSName$ + ZFG5$ + " - Mods by " + ZFG7$ + "Many" + ZEmphasizeOff$) ' STAT174/RM10059302
  3446.       ZOutTxt$ = ""                                                  ' STAT174
  3447.       IF NOT ZConfMode THEN _                                        ' STAT174
  3448.          ZOutTxt$ = ZFG1$ + "Caller Number ............... " + ZFG7$ + STR$(ZCallsToDate!) + "  " + ZCrLf$ ' STAT174/RM08119301
  3449.       IF ZActiveMessages > 0 THEN _                                  ' RM08159301
  3450.          ZOutTxt$ = ZOutTxt$ + ZFG1$ + "Active Messages ............. " + ZFG7$ + STR$(ZActiveMessages) + ZCrLf$ ' STAT174/RM08159301
  3451.       ZOutTxt$ = ZOutTxt$ + ZFG1$ + "Next Msg Number ............. " + ZFG7$ + STR$(ZHighMsgNumber + 1) + ZCrLf$ ' STAT174
  3452.       IF ZLastMsgRead > 0 THEN _                                     ' STAT174
  3453.          ZOutTxt$ = ZOutTxt$ + ZFG1$ + "Last Msg You Read ........... " + ZFG7$ + STR$(ZLastMsgRead) + ZCrLf$ ' STAT174/RM12249301
  3454.       IF NOT ZTimeBankInActive AND ZMaxBank > 0 THEN _               ' RM12249301
  3455.          ZOutTxt$ = ZOutTxt$ + ZFG1$ + "Banked Time ................. " + ZFG7$ + STR$(ZGlobalBankTime) + ZFG1$ + " mins" + ZCrLf$ ' STAT174/RM12249301
  3456.       ZOutTxt$ = ZOutTxt$ + ZFG1$ + "Dropped Carriers... " + ZFG7$ + _ ' DROP174/RM12249301
  3457.               STR$(ZDropTimes) + ZFG1$ + "  Reset at: " + ZFG7$ + STR$(ZDropCarSecChng) + ZCrLf$ ' DROP174
  3458.       IF ZLastMsgRead = 0 THEN _                                     ' STAT174/RM12249301
  3459.          ZOutTxt$ = ZOutTxt$ + ZFG7$ + "You Have NOT Read Any Messages Yet! " + ZCrLf$ ' STAT174/RM12249301
  3460.       ZSubParm = 2                                                   ' STAT174
  3461.       CALL TPut                                                      ' STAT174
  3462.       IF ZRemindFileXfers AND NOT ZNewUser THEN _                    ' RM10069304
  3463.          CALL QuickTPut1 (ZFGB$ + "Files Downloaded ............ " + ZFG7$ + _
  3464.                   STR$(ZDnlds) + SPACE$(6-LEN(STR$(ZDnlds))) + ZEmphasizeOff$) : _ ' DGS092501-DS/RM10069304
  3465.          CALL QuickTPut1 (ZFGB$ + "Files Uploaded .............. " + _
  3466.                   ZFG7$ + STR$(ZUplds) + SPACE$(6-LEN(STR$(ZUplds))) + _
  3467.                   ZEmphasizeOff$)                                    ' DGS092501-DS/RM10069304
  3468.       CALL SkipLine(1)                                               ' DGS092501-DS
  3469.       IF ZSubParm < 0 THEN _                                         ' STAT174
  3470.          EXIT SUB                                                    ' STAT174
  3471.       ZWasZ$ = ZUpldDriveFile$                                       ' STAT174
  3472.       CALL FindFree                                                  ' STAT174
  3473.       CALL QuickTPut1 (ZFG5$ + "Upload Disk has" + ZFG7$ + ZFreeSpace$) ' STAT174
  3474.       IF ZDebug THEN                                                 ' RM12189301
  3475.          CALL QuickTPut1 (ZFG5$ + "Basic Temp String Space  = " + ZFG7$ + (STR$(CINT(FRE("A")/1024)) + "K")) ' STAT174/RM03309401
  3476.          CALL QuickTPut1 (ZFG5$ + "Basic String Seg Memory  = " + ZFG7$ + (STR$(CINT(FRE(ZOutTxt$)/1024)) + "K")) ' STAT174/RM03309401
  3477.          CALL QuickTPut1 (ZFG5$ + "Basic Far String Memory  = " + ZFG7$ + (STR$(CINT(FRE(-1)/1024)) + "K")) ' STAT174/RM03309401
  3478.          CALL QuickTPut1 (ZFG5$ + "Stack Space Availailable = " + ZFG7$ + (STR$(CINT(FRE(-2)/1024)) + "K")) ' STAT174/RM03309401
  3479.       ENDIF                                                          ' RM12189301
  3480.       IF ZDOSversion$ <> "" THEN _                                   ' SIN174/RM042401
  3481.          ZOutTxt$ = ZFG5$ + "Running under " + ZFG7$ + "DOS Version " + ZDOSversion$ _ ' SIN174
  3482.       ELSE _                                                         ' SIN174/RM042401
  3483.          ZOutTxt$ = ZFG5$ + "Running under " + ZFG7$ + "OS/2 Version " + ZOS2version$ ' SIN174/RM042401/RM07249302
  3484.       IF ZDVversion$ <> "" THEN _                                    ' SIN174
  3485.          ZOutTxt$ = ZOutTxt$ + ZFG5$ + " and " + ZFG7$ + "DESQview Version " + _ ' SIN174
  3486.                     ZDVversion$ + ZEmphasizeOff$ _                   ' SIN174
  3487.       ELSE _                                                         ' SIN174
  3488.          ZOutTxt$ = ZOutTxt$ + ZEmphasizeOff$                        ' SIN174
  3489.       CALL QuickTPut1 (ZOutTxt$)                                     ' SIN174
  3490.       Temp$ = STR$(ZBaudTest!) + ZFG5$ + MID$(ZBaudParity$,INSTR(ZBaudParity$," B")) ' RM030501
  3491.       IF ZKeepInitBaud THEN _                                        ' RM030501
  3492.          ZOutTxt$ = ZFG5$ + "Host Operating at " + ZFG7$ + ZModemInitBaud$ + ZFG5$ + _
  3493.                     " BPS, Line Speed" + ZFG7$ + Temp$ + ZEmphasizeOff$ _ ' RM030501
  3494.       ELSE _                                                         ' RM030501
  3495.          ZOutTxt$ = ZFG5$ + "Connected at " + ZFG7$ + Temp$ + ZEmphasizeOff$ ' RM030501
  3496.       CALL QuickTPut1 (ZOutTxt$)                                     ' RM030501
  3497.       IF (NOT ZSysop) AND (ZUserSecLevel < ZSecKillAny) THEN _       ' STAT174
  3498.          CALL Delaytime (2) : _                                      ' STAT174
  3499.          EXIT SUB                                                    ' STAT174
  3500.       UserWork = (ZHighestUserRecord * .95) + 1                      ' STAT174
  3501.       IF ZMsgsCanGrow THEN _                                         ' STAT174
  3502.          ZWasY$ = " open" _                                          ' STAT174
  3503.       ELSE _                                                         ' STAT174
  3504.          ZWasY$ = STR$(ZHighestMsgRecord + 1 - ZMaxNodes - ZNextMsgRec) ' STAT174/RM08119301
  3505.       ZOutTxt$ = ZFG5$ + "USERS: used" + ZFG7$ + STR$(ZCurUserCount - 1) ' STAT174
  3506.       ZOutTxt$ = ZOutTxt$ + ZFG5$ + " avl" + ZFG7$ + STR$(UserWork - ZCurUserCount) ' STAT174
  3507.       IF ZActiveMessages > 0 THEN                                    ' STAT174/RM08159301
  3508.          ZOutTxt$ = ZOutTxt$ + ZFG5$ + "  MSGS: used" + ZFG7$ + STR$(ZActiveMessages) + ZFG5$ + " avl" ' STAT174/RM08159301
  3509.          ZOutTxt$ = ZOutTxt$ + ZFG7$ + STR$(ZMaxMsgs - ZActiveMessages)  ' STAT174/RM08159301
  3510.          ZOutTxt$ = ZOutTxt$ + ZFG5$ + "  MSG REC: used" + ZFG7$ + STR$(ZNextMsgRec - 1) + ZFG5$ + " avl" ' STAT174
  3511.          ZOutTxt$ = ZOutTxt$ + ZFG7$ + ZWasY$                        ' STAT174
  3512.       ENDIF                                                          ' RM08159301
  3513.       ZOutTxt$ = ZOutTxt$ + ZEmphasizeOff$                           ' RM08159301
  3514.       ZSubParm = 2                                                   ' STAT174
  3515.       CALL TPut                                                      ' STAT174
  3516.       IF ZSubParm < 0 THEN _                                         ' STAT174
  3517.          EXIT SUB                                                    ' STAT174
  3518.       IF ZMenuIndex = 4 THEN _                                       ' RM032001
  3519.          CALL AskMore ("",ZTrue,ZFalse,WasX,ZTrue) _                 ' RM032001
  3520.       ELSE _                                                         ' RM032001
  3521.          CALL DelayTime (2)                                          ' RM032001
  3522.       END SUB                                                        ' STAT174
  3523. '                                                                    ' SP174
  3524. 65002 SUB ShowUsrProfile                                             ' SP174/RM08059302
  3525.       CALL SkipLine(1)                                               ' SP174/RM020201
  3526.       WasX$ = DATE$                                                  ' SP174/RM020201
  3527.       CALL TRIM(WasX$)                                               ' SP174/RM020201
  3528.       CALL QuickTPut1 (ZFG6$ + "User Profile as of " + ZFG7$ + WasX$ + _
  3529.               ZFG6$ + " at " + ZFG7$ + ZTime$ + ZEmphasizeOff$)      ' SP174/RM020201
  3530.       CALL SkipLine(1)                                               ' SP174/RM013102
  3531.       WasX$ = ZFG5$ + " User Name : " + ZFG7$ + ZActiveUserName$ + _ ' SP174/RM013102
  3532.               STRING$((45 - (LEN(ZActiveUserName$) + 13)),32) + _
  3533.               ZFG5$ + " Security  : " + ZFG7$ + STR$(ZUserSecSave) + ZCrLf$ ' STAT174
  3534.       IF NOT ZSysOp THEN _                                           ' SP174/RM08059302
  3535.          Temp$ = ZPswd$ _                                            ' SP174/RM08059302
  3536.       ELSE _                                                         ' SP174/RM08059302
  3537.          Temp$ = "******"                                            ' SP174/RM08059302
  3538.       WasX$ = WasX$ + ZFG5$ + " Password  : " + ZFG7$ + Temp$ + _    ' SP174/RM013102/RM08059302
  3539.               STRING$((45 - (LEN(Temp$) + 13)),32) + _
  3540.               ZFG5$ + " Read Msg. : " + ZFG7$ + STR$(ZLastMsgRead)   ' SP174/RM08059302
  3541.       CALL QuickTPut1 (WasX$ + ZEmphasizeOff$)                       ' SP174
  3542.       WasX$ = ZFG5$ + " Times On  : " + ZFG7$ + STR$(ZTimesLoggedOn) + _ ' SP174/RM013102
  3543.               STRING$((45 - (LEN(STR$(ZTimesLoggedOn)) + 13)),32) + _
  3544.               ZFG5$ + " Last On   : " + ZFG7$ + ZLastDateTimeOnSave$ + ZCrLf$ ' SP174
  3545.       WasX$ = WasX$ + ZFG5$ + " Downloads : " + ZFG7$ + STR$(ZDnlds) + _ ' SP174/RM013102
  3546.               STRING$((45 - (LEN(STR$(ZDnlds)) + 13)),32) + _
  3547.               ZFG5$ + " Uploads   : " + ZFG7$ + STR$(ZUplds)         ' SP174
  3548.       CALL QuickTPut1 (WasX$ + ZEmphasizeOff$)                       ' SP174
  3549.       WasX$ = ZFG5$ + " Dl-Bytes  : " + ZFG7$ + STR$(ZDLBytes!) + _ ' SP174/RM013102
  3550.               STRING$((45 - (LEN(STR$(ZDLBytes!)) + 13)),32) + _
  3551.               ZFG5$ + " Ul-Bytes  : " + ZFG7$ + STR$(ZULBytes!) + ZCrLf$ ' SP174
  3552.       WasX$ = WasX$ + ZFG5$ + " User Mode : " + ZFG7$ + MID$("NoviceExpert",1 - 6 * ZExpertUser,6) + _ ' SP174/RM013102
  3553.               STRING$((45 - (LEN(MID$("NoviceExpert",1 - 6 * ZExpertUser,6)) + 13)),32) + _
  3554.               ZFG5$ + " Graphics  : " + ZFG7$ + MID$("None AsciiColor",ZWasGR * 5 + 1,5) ' SP174
  3555.       CALL QuickTPut1 (WasX$ + ZEmphasizeOff$)                        ' SP174
  3556.       WasX$ = ZFG5$ + " Protocol  : " + ZFG7$ + ZUserXferDefault$ + _ ' SP174/RM013102
  3557.               STRING$((45 - (LEN(ZUserXferDefault$) + 13)),32) + _
  3558.               ZFG5$ + " Upper Case: " + ZFG7$ + MID$("and lowerONLY",1 - 9 * ZUpperCase,9) + ZCrLf$ ' SP174
  3559.       WasX$ = WasX$ + ZFG5$ + " Line Feeds: " + ZFG7$ + FNOFFON$(ZLineFeeds) + _ ' SP174/RM013102
  3560.               STRING$((45 - (LEN(FNOFFON$(ZLineFeeds)) + 13)),32) + _
  3561.               ZFG5$ + " Nulls     : " + ZFG7$ + FNOFFON$(ZNulls)     ' SP174
  3562.       CALL QuickTPut1 (WasX$ + ZEmphasizeOff$)                       ' SP174
  3563.       WasX$ = ZFG5$ + " City/State: " + ZFG7$ + ZCityState$ + ZEmphasizeOff$ ' SP174/RM020201
  3564.       IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _             ' SP174/RM013102
  3565.          IF ZUserSecLevel > ZTempExpiredSec THEN _                   ' SP174/RM013102
  3566.             WasX$ = WasX$ + STRING$((45 - (LEN(ZCityState$) + 13)),32) + _
  3567.             ZFG5$ + " Expiration: " + ZFG7$ + ZExpirationDate$       ' SP174/RM020201
  3568.       CALL QuickTPut1 (WasX$ + ZEmphasizeOff$)                       ' SPT174/RM020201
  3569.       CALL SkipLine(1)                                               ' SP174/RM013102
  3570.       CALL Toggle (-8)                                               ' SP174
  3571.       CALL Toggle (-5)                                               ' SP174
  3572.       CALL Toggle (-10)                                              ' SP174
  3573.       CALL Toggle (-2)                                               ' SP174
  3574.       CALL Toggle (-4)                                               ' SP174
  3575.       CALL Toggle (-1)                                               ' SP174
  3576.       CALL Toggle (-11)                                              ' RCHAT401
  3577.       CALL AskMore ("",ZTrue,ZFalse,WasX,ZTrue)                      ' SP174
  3578.       END SUB                                                        ' SP174
  3579. '                                                                    ' LAST174
  3580. 65030 ' $SUBTITLE: 'GetLC - subroutine to retrieve Last User on RBBS' ' LAST174
  3581. ' $PAGE                                                              ' LAST174
  3582. '                                                                    ' LAST174
  3583. '  NAME    -- GetLC                                                  ' LAST174
  3584. '                                                                    ' LAST174
  3585. '                 PARAMETER                    MEANING               ' LAST174
  3586. '                                                                    ' LAST174
  3587. '  INPUTS  --                                                        ' LAST174
  3588. '                                                                    ' LAST174
  3589. '  OUTPUTS --                                                        ' LAST174
  3590. '                                                                    ' LAST174
  3591. '  PURPOSE --  To retrieve the last user on RBBS for display on the  ' LAST174
  3592. '              MENU0 screen                                          ' LAST174
  3593. '                                                                    ' LAST174
  3594. '  WRITTEN BY: R. Molinelli                                          ' LAST174
  3595. '                                                                    ' LAST174
  3596.       SUB GetLC                                                      ' LAST174/RM11159302
  3597.       ZLastCaller$ = " "                                             ' LAST174
  3598.       ZActiveMessageFile$ = ZOrigMsgFile$                            ' LAST174
  3599.       CALL OpenMsg                                                   ' LAST174
  3600.       FIELD 1, 128 AS ZMsgRec$                                       ' LAST174
  3601.       GET 1,ZNodeRecIndex                                            ' LAST174
  3602.       IF MID$(ZMsgRec$,55,2) = "-1" AND NOT ZSysop THEN _            ' LAST174
  3603.          ZLastCaller$ = "SysOp" _                                    ' LAST174
  3604.       ELSE _                                                         ' LAST174
  3605.          ZLastCaller$ = MID$(ZMsgRec$,1,26)                          ' LAST174
  3606.       CALL TrimTrail (ZLastCaller$," ")                              ' LAST174
  3607.       IF MID$(ZMsgRec$,101,2) <> " 0" THEN _                         ' LAST174
  3608.          LCT$ = MID$(ZMsgRec$,93,22) : _                             ' LAST174
  3609.          CALL TrimTrail (LCT$," ") : _                               ' LAST174
  3610.          ZLastCaller$ = ZLastCaller$ + " from " + LCT$               ' LAST174
  3611.       END SUB                                                        ' LAST174
  3612. '                                                                    ' RM10019301
  3613. 65045 ' $SUBTITLE: 'ReadColorDef - subroutine to retrieve Colors for RBBS' ' RM10019301
  3614. ' $PAGE                                                              ' RM10019301
  3615. '                                                                    ' RM10019301
  3616. '  NAME    -- ReadColorDef                                           ' RM10019301
  3617. '                                                                    ' RM10019301
  3618. '                 PARAMETER                    MEANING               ' RM10019301
  3619. '                                                                    ' RM10019301
  3620. '  INPUTS  --  Color Variables                                       ' RM10019301
  3621. '                                                                    ' RM10019301
  3622. '  OUTPUTS --  Global Color Variables                                ' RM10019301
  3623. '                                                                    ' RM10019301
  3624. '  PURPOSE --  To read the NCLRxxx.DEF file to set the colors that   ' RM10019301
  3625. '              RBBS will use for display.                            ' RM10019301
  3626. '                                                                    ' RM10019301
  3627. '  WRITTEN BY: T. Hansen & R. Molinelli                              ' RM10019301
  3628. '                                                                    ' RM10019301
  3629.       SUB ReadColorDef                                               ' RM10019301
  3630.       CALL BreakFileName (ZCallersFile$,Drive$,WasX$,WasY$,ZTrue)    ' RM11159301
  3631.       IF RIGHT$(Drive$,1) <> "\" THEN _                              ' RM11159301
  3632.          Drive$ = Drive$ + "\"                                       ' RM11159301
  3633.       Temp$ =  Drive$ + "NCLR" + ZNodeID$ + ".DEF"                   ' RM11159301
  3634.       CALL FindFile (Temp$,Found)
  3635.       IF NOT Found THEN _
  3636.          ZOutTxt$ = "Configuration file " + Temp$ + " missing" : _   ' DGS101193-TH
  3637.          CALL PScrn (ZOutTxt$) : _                                   ' DGS101193-TH
  3638.          CALL UpdtCalr(ZOutTxt$,2) : _                               ' DGS101193-TH
  3639.          EXIT SUB
  3640.       CALL OpenWork (2,Temp$)
  3641.       IF ZErrCode > 0 THEN _                                         ' DGS092993-TH
  3642.          ZErrCode = 0 : _                                            ' DGS092993-TH
  3643.          ZOutTxt$ = "Configuration file " + Temp$ + " improper format" : _ ' RM10119301
  3644.          CALL PScrn (ZOutTxt$) : _                                   ' DGS092993-TH
  3645.          CALL UpdtCalr(ZOutTxt$,2) : _                               ' RM10119301
  3646.          EXIT SUB                                                    ' DGS092993-TH
  3647.       CALL ReadDir (2,1)
  3648.       ZFG1Def$ = ZEscape$ + ZOutTxt$
  3649.       CALL ReadDir (2,1)
  3650.       ZFG2Def$ = ZEscape$ + ZOutTxt$
  3651.       CALL ReadDir (2,1)
  3652.       ZFG3Def$ = ZEscape$ + ZOutTxt$
  3653.       CALL ReadDir (2,1)
  3654.       ZFG4Def$ = ZEscape$ + ZOutTxt$
  3655.       CALL ReadDir (2,1)
  3656.       ZFG5Def$ = ZEscape$ + ZOutTxt$
  3657.       CALL ReadDir (2,1)
  3658.       ZFG6Def$ = ZEscape$ + ZOutTxt$
  3659.       CALL ReadDir (2,1)
  3660.       ZFG7Def$ = ZEscape$ + ZOutTxt$
  3661.       CALL ReadDir (2,1)
  3662.       ZFG8Def$ = ZEscape$ + ZOutTxt$
  3663.       CALL ReadDir (2,1)
  3664.       ZFG9Def$ = ZEscape$ + ZOutTxt$
  3665.       CALL ReadDir (2,1)
  3666.       ZFGADef$ = ZEscape$ + ZOutTxt$
  3667.       CALL ReadDir (2,1)
  3668.       ZFGBDef$ = ZEscape$ + ZOutTxt$
  3669.       CALL ReadDir (2,1)
  3670.       ZFGCDef$ = ZEscape$ + ZOutTxt$
  3671.       CALL ReadDir (2,1)
  3672.       ZFGDDef$ = ZEscape$ + ZOutTxt$
  3673.       CALL ReadDir (2,1)
  3674.       ZFGEDef$ = ZEscape$ + ZOutTxt$
  3675.       CALL ReadDir (2,1)
  3676.       ZFGFDef$ = ZEscape$ + ZOutTxt$
  3677.       CALL ReadDir (2,1)
  3678.       ZBG0Def$ = ZEscape$ + ZOutTxt$
  3679.       CALL ReadDir (2,1)
  3680.       ZBG1Def$ = ZEscape$ + ZOutTxt$
  3681.       CALL ReadDir (2,1)
  3682.       ZBG2Def$ = ZEscape$ + ZOutTxt$
  3683.       CALL ReadDir (2,1)
  3684.       ZBG3Def$ = ZEscape$ + ZOutTxt$
  3685.       CALL ReadDir (2,1)
  3686.       ZBG4Def$ = ZEscape$ + ZOutTxt$
  3687.       CALL ReadDir (2,1)
  3688.       ZBG5Def$ = ZEscape$ + ZOutTxt$
  3689.       CALL ReadDir (2,1)
  3690.       ZBG6Def$ = ZEscape$ + ZOutTxt$
  3691.       CALL ReadDir (2,1)
  3692.       ZBG7Def$ = ZEscape$ + ZOutTxt$
  3693.       CLOSE 2
  3694.       END SUB                                                        ' RM10019301
  3695.