home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / CDOR0811.ZIP / CDORMRGS.ZIP / RCHAT401.MRG < prev    next >
Encoding:
Text File  |  1993-08-11  |  34.3 KB  |  853 lines

  1. * ------------[ BLED merge (c) Ken Goosens ]-------------
  2. * Merge this against RCHAT401.BAS to produce RCHAT401.NEW
  3. * RCHAT401.BAS:  Date 9-14-92  Size 31858 bytes
  4. * ------------[ Created 08-11-1993 19:37:48 ]------------
  5. * REPLACING old line(s) by new
  6. * ------[ first line different ]------
  7. ' $segment
  8. '
  9. ' RChat401  --  Or, RBBS-Chat, release 4.01.  A character by character
  10. '               internode chat program..
  11. '
  12. '  Not the worlds prettiest, or cleanest code.. but I'm under no illusions..
  13. '
  14. '  Copyright 1989-1992 By John Morris  All Rights Reserved
  15. '
  16. '  I'm not a big fan of global variables, but here goes..
  17. '
  18. '  $INCLUDE: 'RBBS-VAR.MOD'   'RBBS-VAR.BAS minus the DEF FN...
  19. '
  20.  
  21. REM **********************************************************************
  22. REM ***  Change 'CONST LogChatToDisk = -1' if you wish to record       ***
  23. REM ***  all of the chats. This is for your protection!   If you turn  ***
  24. REM ***  this option on (-1) then the users will be notified that      ***
  25. REM ***  the chat is being recorded (they have a right to know!)       ***
  26. REM ***  Chat filenames have this format: MM-DD-HH.CHAT or             ***
  27. REM ***  month-day-hour.CHT                                            ***
  28. REM **********************************************************************
  29.  
  30.    CONST LogChatToDisk = 0
  31. '  CONST ChatFileName$ = "H:RBBSCHAT.DEF"                            ' DD092401/RCHAT
  32.                                            'change this to a RAM drive for
  33.                                            'best possible speed (see docs)
  34.                                            'must change to match BBS default
  35.                                            'drive or RAM disk..
  36.    DEFINT A - Z
  37.  
  38. REM *************************************************************
  39. REM ** The following are needed by only 2 or 3 subprograms, so,**
  40. REM ** they are declared COMMON, and then SHARED only in some  **
  41. REM ** of the subprgms.. the fewer that have access the better **
  42. REM *************************************************************
  43.  
  44.    COMMON /Chat/ DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  45.    COMMON /Chat/ NodesToSquelch$, RePage, DOSVersion
  46.  
  47. REM *************************************************************
  48. REM ** The below are the shared fields used by the subprograms **
  49. REM ** Each and every one is declared as COMMON SHARED so every**
  50. REM ** subprogram has access to the following variables        **
  51. REM *************************************************************
  52.  
  53.    COMMON SHARED /ChatField/ ChatActivity$, PagingNode$, PrivateFor$
  54.    COMMON SHARED /ChatField/ ChatInput$, ChatName$, InTrueChat$
  55.    COMMON SHARED /ChatField/ TrueChatIndex$, SavingToDisk$, BBSActivity$
  56.  
  57. '
  58. * REPLACING old line(s) by new
  59. 59800 ' $SUBTITLE: 'LogNewForChat - Save user info for chat'
  60. ' $PAGE
  61. '
  62. '  NAME    -- LogNewForChat
  63. '
  64. '  INPUTS  -- NodesInSystem -- needed for creation of RBBSCHAT.DEF
  65. '
  66. '  OUTPUTS -- Updates the node record in RBBSCHAT.DEF with this users
  67. '             name and chat activity (always "I") when the user logs on.
  68. '
  69. '  PURPOSE -- See OUTPUTS. Also, if no RBBSCHAT.DEF is not found, one will be
  70. '             created.
  71. '
  72.       SUB LogNewForChat(NodesInSystem) STATIC
  73.  
  74.       SHARED DOSVersion
  75.  
  76. * ------[ first line different ]------
  77.       CALL FindItX (ZChatFileName$, 10)                              ' DD092401/RCHAT
  78.       REM ** If "RBBSCHAT.DEF" does not exist, then create it **
  79.       IF NOT ZOK THEN
  80.          CALL OpenWrk10 (ZChatFileName$)                             ' DD092401/RCHAT
  81.          FIELD 10, 128 AS TempNode$
  82.          LSET TempNode$ = SPACE$(128)
  83.          FOR Index = 1 TO ZMaxNodes
  84.             CALL Update10 (Index, ZFalse)
  85.          NEXT
  86.       END IF
  87.       ChatIndex = ZNodeRecIndex - 1
  88.       CLOSE 10
  89.       CALL OpenWrk10 (ZChatFileName$)                                ' DD092401/RCHAT
  90.       CALL Field10
  91.       CALL LockUnlock10 (ZTrue)
  92.       CALL Update10 (ChatIndex, ZTrue)
  93.       LSET ChatActivity$ = CHR$(73)    ' I means inactive            ' DD021301
  94.       LSET PagingNode$ = MKI$(0)
  95.       LSET ChatName$ = SPACE$(31)
  96.       IF ZActiveUserName$ = ZSysopPswd1$ + SPACE$(1) + ZSysopPswd2$ THEN ' DD021301
  97.          LSET ChatName$ = "SYSOP"
  98.        ELSE
  99.          LSET ChatName$ = ZActiveUserName$
  100.       END IF
  101.       LSET ChatInput$ = SPACE$(72)
  102.       LSET InTrueChat$ = CHR$(73)                               'I   ' DD021301
  103.       CALL Update10 (ChatIndex, ZFalse)
  104.       CALL LockUnlock10 (ZFalse)
  105.       CLOSE 10
  106.       HasPaged = 0
  107.       END SUB
  108.  
  109. * REPLACING old line(s) by new
  110. 59810 ' $SUBTITLE: 'CBCHECK - Check for a page attempt'
  111. ' $PAGE
  112. '
  113. '  NAME    -- CBCHECK
  114. '
  115. '  INPUTS  -- NONE
  116. '
  117. '  OUTPUTS -- ChatActivity$   Changed to reflect whether or not they
  118. '                             are going to chat
  119. '             WillChat        If WillChat is TRUE, then the user will
  120. '                             automatically be thrust unawares into
  121. '                             chat mode.. They said yes... didn't they?
  122. '
  123. '  PURPOSE -- Check to see if we have been paged from another node
  124. '
  125.       SUB CBCheck(WillChat) STATIC
  126.  
  127.       ' You might just wanna REM this out..
  128.       IF NOT ZAvailableForChat THEN
  129.          EXIT SUB
  130.       END IF
  131.  
  132.       WillChat = ZFalse
  133.       ZOutTxt$ = ""
  134.       IsTrueChat = ZFalse
  135. * ------[ first line different ]------
  136.       CALL FindItX (ZChatFileName$, 10)                              ' DD092401/RCHAT
  137.       IF NOT ZOK THEN
  138.          EXIT SUB
  139.       END IF
  140.       ChatIndex = ZNodeRecIndex - 1
  141.       CLOSE 10
  142.       CALL OpenWrk10 (ZChatFileName$)                                ' DD092401/RCHAT
  143.       CALL Field10
  144.       CALL Update10 (ChatIndex, ZTrue)
  145.       IF ChatActivity$ = CHR$(82) THEN   'R means request for chat   ' DD021301
  146.          PagerIndex = CVI(PagingNode$)
  147.          CALL RingCaller
  148.          CALL Update10 (PagerIndex, ZTrue)
  149.          IsTrueChat = (InTrueChat$ = CHR$(65))                  'A   ' DD021301
  150.          ZOutTxt$ = ChatName$
  151.          CALL TrimTrail (ZOutTxt$, SPACE$(1))                        ' DD021301
  152.          CALL NameCaps(ZOutTxt$)
  153.          CALL UpdtCalr("Paged for Chat by " + ZOutTxt$ + " on node" + STR$(PagerIndex), 1)
  154.          CALL QuickTPut( ZOutTxt$ + " is requesting that you join in a chat!", 1)
  155.          ZOutTxt$ = "Would you like to join the chat" + _            ' DD021301
  156.                      ZYesPrompt$                                     ' DD021301
  157.          ZSubParm = 1
  158.          CALL TGet
  159.          IF ZSubParm = -1 THEN
  160.             CLOSE 10
  161.             EXIT SUB
  162.          END IF
  163.          CALL LockUnlock10 (ZTrue)
  164.          CALL Update10 (ChatIndex, ZTrue)
  165.          IF ZNo THEN
  166.             LSET ChatActivity$ = CHR$(78)   'No, I don't think I'll chat ' DD021301
  167.           ELSE
  168.             LSET ChatActivity$ = CHR$(89)   'Yeah, I might just join a chat ' DD021301
  169.             WillChat = ZTrue
  170.          END IF
  171.          IF IsTrueChat THEN
  172.             LSET InTrueChat$ = CHR$(89)                         'Y   ' DD021301
  173.           ELSE
  174.             LSET InTrueChat$ = CHR$(73)                         'I   ' DD021301
  175.          END IF
  176.          CALL Update10 (ChatIndex, ZFalse)
  177.          CALL LockUnlock10 (ZFalse)
  178.       END IF
  179.       CLOSE 10
  180.       END SUB
  181.  
  182. * REPLACING old line(s) by new
  183. 59820 ' $SUBTITLE: 'PageEm - attempt to page another user to chat'
  184. ' $PAGE
  185. '
  186. '  NAME    -- PageEm
  187. '
  188. '  INPUTS  -- ShowOnly         Show whos is on the other nodes only
  189. '             NodesInSystem    Number of nodes in this system
  190. '
  191. '  OUTPUTS -- HasPaged        -1 exit chat mode
  192. '                              0 don't check for reply to page
  193. '                              1 - NodesInSystem check for page reply
  194. '
  195. '  PURPOSE -- Page another user on the system and set up for a reply
  196. '             from the other user
  197. '
  198.       SUB PageEm(CurrentNodeIndex, NodesInSystem) STATIC
  199.  
  200.       REM ** Page 'Em needs access to the COMMON variable HasPaged & RePage **
  201.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, RePage
  202.  
  203. RePageEm:
  204.       HasPaged = 0
  205.       CALL WhosOn (NodesInSystem)
  206.       CALL SkipLine(1)
  207. * ------[ first line different ]------
  208.       CALL QuickTPut ("Chat with which node (1 -" + _                ' DD050302
  209.                       STR$(NodesInSystem) + CHR$(41),0)              ' DD050203
  210.       ZOutTxt$ = ZPressEnterExpert$                                  ' DD050203
  211.       ZSubParm = 1
  212.       CALL TGet
  213.       IF ZWasQ = 0 OR ZSubParm = -1 THEN
  214.          EXIT SUB
  215.       END IF
  216.       CALL CheckInt(ZUserIn$(1))
  217.       CALL Field10
  218.       IF ZTestedIntValue > 0 AND ZTestedIntValue <= NodesInSystem AND _
  219.          ZTestedIntValue <> CurrentNodeIndex THEN
  220.          CALL Update10 (ZTestedIntValue, ZTrue)
  221.          IF ChatActivity$ = CHR$(65) THEN        'A if other node already ' DD021301
  222.             IF InTrueChat$ = CHR$(65) THEN       'A can't page 'em if in true chat ' DD021301
  223.                CALL QuickTPut1("Sorry, the node you requested is in a private chat!")
  224.                EXIT SUB
  225.             END IF
  226.             '
  227.             'If the other node is active in chat , but not in a private chat
  228.             'then we'll just drop down to 'CALL CBTrueChat'
  229.             '
  230.           ELSE
  231.             HasPaged = ZTestedIntValue
  232.             ZOutTxt$ = "Should this be a private chat" + ZYesPrompt$ ' DD021301
  233.             ZSubParm = 1
  234.             CALL TGet
  235.             IF ZYes OR (ZWasQ = 0) THEN
  236.                DoTrueChat = ZTrue
  237.                LowerNode = HasPaged
  238.                UpperNode = HasPaged
  239.             END IF
  240.             CALL QuickTPut1("Hang on,  I'll let them know you want to chat")
  241.             CALL QuickTPut1("If you don't get an answer within a couple minutes,")
  242.             CALL QuickTPut1("then you probably won't get an answer")
  243.             LSET ChatActivity$ = CHR$(82)        'R means Request    ' DD021301
  244.             LSET PagingNode$ = MKI$(CurrentNodeIndex)
  245.             CALL LockUnlock10 (ZTrue)
  246.             CALL Update10 (ZTestedIntValue, ZFalse)
  247.             CALL LockUnlock10 (ZFalse)
  248.  
  249.             IF DoTrueChat THEN
  250.                CALL LockUnlock10 (ZTrue)
  251.                CALL Update10 (CurrentNodeIndex, ZTrue)
  252.                LSET InTrueChat$ = CHR$(65)                      'A   ' DD021301
  253.                CALL Update10 (CurrentNodeIndex, ZFalse)
  254.                CALL LockUnlock10 (ZFalse)
  255.             END IF
  256.          END IF
  257.  
  258.          CALL CBTrueChat(NodesInSystem)
  259.  
  260.          ' user might want to repage some other node.. we'll just loop back
  261.          ' and start over..
  262.          IF RePage THEN
  263.             GOTO RePageEm
  264.          END IF
  265.  
  266.       END IF
  267.       END SUB
  268.  
  269. * REPLACING old line(s) by new
  270. 59830 ' $SUBTITLE: 'CBTrueChat - The letter by letter chat'
  271. ' $PAGE
  272. '
  273. '  NAME    -- CBTrueChat
  274. '
  275. '  INPUTS  -- NodesInSystem
  276. '
  277. '  INTERNAL - NodesToSquelch$      STRING OF NODES NOT TO RECEIVE TEXT FROM
  278. '             HasPaged             NODE (IF ANY) THAT THIS USER PAGED
  279. '             CurrentNodeIndex     NODE RECORD IN "RBBSCHAT.DEF"
  280. '             ChatActivity$        CURRENT STATUS OF EACH NODE
  281. '             PagingNode$          NODE WHICH HAS PAGED THIS ONE
  282. '             ChatInput$           CURRENT TEXT INPUT BY USER FOR CHATTING
  283. '             ChatName$            NAME OF USER ON EACH NODE (NOT CURRENTLY USED)
  284. '             SquelchIt            BOOLEAN - MEANS NODE IS IGNORED
  285. '             ZUserIn$()           USED TO SAVE CURRENT STATUS OF EACH NODE
  286. '                                  THIS INFO IS LATER COMPARED, AND IF THAT
  287. '                                  STATUS IS CHANGED, THEN THE USER IS NOTIFIED
  288. '                                  OF THE CHANGE
  289. '             DoTrueChat           Means we are in a true chat mode, we'll
  290. '                                  only check one node for input
  291. '
  292. '
  293. '  OUTPUTS -- NONE
  294. '
  295. '  PURPOSE -- To allow users to chat between nodes in several different
  296. '             ways.
  297. '
  298.       SUB CBTrueChat(NodesInSystem) STATIC
  299.  
  300.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  301.       SHARED NodesToSquelch$, RePage
  302.  
  303. * ------[ first line different ]------
  304.       CALL SaveUserActivity(CHR$(67), ZNodeRecIndex, ZFalse)    'C   ' DD021301
  305.  
  306.       ZCol = 1
  307.       SendRemote = ZRemoteEcho
  308.       SaveToDisk = ZFalse
  309.       DoTrueChat = ZFalse
  310.       NodesToSquelch$ = ""
  311.  
  312.       REM This can now be set by 'PageEm' -before- CBTrueChat is ever called..
  313.       ' HasPaged = 0
  314.  
  315.       IF HasPaged AND LogChatToDisk THEN
  316.          CALL SetUpLogFile
  317.       END IF
  318.  
  319.       ChatSubParm = 0
  320.       CALL FindItX (ZChatFileName$, 10)                              ' DD092401/RCHAT
  321.       IF ZOK THEN
  322.          CurrentNodeIndex = ZNodeRecIndex - 1
  323.          CLOSE 10
  324.          CALL OpenWrk10 (ZChatFileName$)                             ' DD092401/RCHAT
  325.          CALL Field10
  326.  
  327.          IF NOT RePage THEN
  328.             CALL UpdtCalr("Entered CBTrueCh@ sim at " + TIME$, 1)
  329.          END IF
  330.  
  331.          CALL QuickTPut1("Type Ctrl-Q or ESCape for a list of commands")
  332.  
  333.          REDIM TrueChatIndexHold(NodesInSystem)
  334.  
  335.          RePage = ZFalse
  336.  
  337.          CALL LockUnlock10 (ZTrue)
  338.          CALL Update10 (CurrentNodeIndex, ZTrue)
  339.          REM ** Set up for truechat mode.. two nodes in a private chat **
  340.          IF InTrueChat$ = CHR$(89) OR InTrueChat$ = CHR$(65) THEN    ' DD021301
  341.             IF InTrueChat$ = CHR$(89) THEN                      'Y   ' DD021301
  342.                 LSET InTrueChat$ = CHR$(65)                     'A   ' DD021301
  343.                 LowerNode = CVI(PagingNode$)
  344.                 UpperNode = CVI(PagingNode$)
  345.             END IF
  346.             DoTrueChat = ZTrue
  347.           ELSE
  348.             LowerNode = 1
  349.             UpperNode = NodesInSystem
  350.          END IF
  351.          LSET ChatActivity$ = CHR$(65)                          'A   ' DD021301
  352.          LSET TrueChatIndex$ = MKI$(1)
  353.          CALL Update10 (CurrentNodeIndex, ZFalse)
  354.          CALL LockUnlock10 (ZFalse)
  355.  
  356.          REM ** Load in current node status for later comparison **
  357.          FOR LineIndex = 1 TO NodesInSystem
  358.             CALL Update10 (LineIndex, ZTrue)
  359.             ZUserIn$(LineIndex) = ChatActivity$
  360.             REM ** save current index so we don't get a bunch of trash if **
  361.             REM ** a chat is already in progress.                         **
  362.             IF ChatActivity$ = CHR$(65) THEN                    'A   ' DD021301
  363.                TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  364.              ELSE
  365.                TrueChatIndexHold(LineIndex) = 1
  366.             END IF
  367.          NEXT
  368.  
  369.          REM ** Set Autologoff time before we start looping **
  370.          ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  371.  
  372.          REM ** We are currently getting name from MESSAGES file.. set that up..
  373.          WasA1$ = ZActiveMessageFile$
  374.          ZActiveMessageFile$ = ZOrigMsgFile$
  375.          CALL OpenMsg
  376.          FIELD 1, 128 AS ZMsgRec$
  377.  
  378.          DO 'the wild chat thingie..
  379.  
  380. REM **************************************************************************
  381. REM ******Check for answer to page, or text from other users in chat  ********
  382. REM ******If the other guy has 'page availability' turned off, then   ********
  383. REM ******we simply won't tell this guy.. he won't know the difference********
  384. REM **************************************************************************
  385.             FOR LineIndex = LowerNode TO UpperNode
  386.  
  387.                SquelchIt = ZFalse
  388.                IF LineIndex <> CurrentNodeIndex THEN
  389.  
  390.                   CALL Update10 (LineIndex, ZTrue)
  391.                   Index$ = MID$(STR$(LineIndex), 2, 1)
  392.  
  393.                   REM ** Check to see if node (LineIndex) has been squelched **
  394.                   IF NodesToSquelch$ <> "" THEN
  395.                      SquelchIt = (INSTR(NodesToSquelch$, Index$) > 0)
  396.                   END IF
  397.  
  398.                   REM ** Check to see if other node in truechat **
  399.                   IF NOT SquelchIt AND NOT DoTrueChat THEN
  400.                      SquelchIt = (InTrueChat$ = CHR$(65))       'A   ' DD021301
  401.                   END IF
  402.  
  403.                   REM ** Check for answer to page (if a page was done) **
  404.                   IF HasPaged = LineIndex THEN
  405.                      IF ChatActivity$ <> CHR$(82) THEN          'R   ' DD021301
  406.                         IF ChatActivity$ = CHR$(78) THEN        'N   ' DD021301
  407.                            CALL QuickTPut("Paged user said NO to chat mode!", 1)
  408.                            HasPaged = 0
  409.                          ELSEIF ChatActivity$ = CHR$(89) THEN   'Y   ' DD021301
  410.                            REM ** if the other dude answered Yes, they will automatically
  411.                            REM ** be sent into the chat mode.. so don't bother telling the
  412.                            REM ** guy that they answered yes.. just turn off HasPaged
  413.                            HasPaged = 0
  414.                         END IF
  415.                      END IF
  416.                   END IF
  417.  
  418.                   ChatTemp$ = ""
  419.                   NameTemp$ = ""
  420.  
  421.                   REM ** Check for change in node activity              **
  422.                   REM ** In this case, see if someone has left the chat **
  423.                   REM ** node must not be squelched                     **
  424.                   IF NOT SquelchIt THEN
  425.                      IF (ZUserIn$(LineIndex) = CHR$(65)) AND (ChatActivity$ = CHR$(73)) THEN ' DD021301
  426.                         GOSUB 59840
  427.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has exited chat mode!", 1)
  428.                         IF DoTrueChat THEN
  429.                            DoTrueChat = ZFalse
  430.                            CALL LockUnlock10 (ZTrue)
  431.                            CALL Update10 (CurrentNodeIndex, ZTrue)
  432.                            LSET InTrueChat$ = CHR$(73)          'I   ' DD021301
  433.                            LSET ChatInput$ = SPACE$(72)
  434.                            LSET TrueChatIndex$ = MKI$(1)
  435.                            CALL Update10 (CurrentNodeIndex, ZFalse)
  436.                            CALL LockUnlock10 (ZFalse)
  437.                            REM ** TrueChat over.. start looping thru all nodes
  438.                            LowerNode = 1
  439.                            UpperNode = NodesInSystem
  440.                         END IF
  441.                      END IF
  442.                      REM ** OR, If someone has joined the chat **
  443.                      IF (ZUserIn$(LineIndex) <> CHR$(65)) AND (ChatActivity$ = CHR$(65)) THEN ' DD021301
  444.                         GOSUB 59840
  445.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has entered the chat!", 1)
  446.                         REM ** Save the ring buffer index as they currently see it **
  447.                         TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  448.                      END IF
  449.                   END IF
  450.  
  451.                   REM ** Save new node status (if any) **
  452.                   ZUserIn$(LineIndex) = ChatActivity$
  453.  
  454.                   REM ** If other node is active (& not squelched) check it **
  455.                   IF (ChatActivity$ = CHR$(65)) AND (NOT SquelchIt) THEN ' DD021301
  456.  
  457.                      IF (CVI(TrueChatIndex$) <> TrueChatIndexHold(LineIndex)) THEN
  458.  
  459.                         OtherNodeInput$ = MID$(ChatInput$, TrueChatIndexHold(LineIndex), 1)
  460.  
  461.                         IF OtherNodeInput$ = CHR$(8) THEN
  462.                            CALL LPrnt(ZLocalBkSp$, 0)
  463.                            CALL PutCom (ZBackSpace$)
  464.                            IF SaveToDisk THEN
  465.                               CALL PrintWork(ZBackSpace$)
  466.                            END IF
  467.                            IF ZCol > 0 THEN
  468.                               ZCol = ZCol - 1
  469.                            END IF
  470.                          ELSEIF OtherNodeInput$ = ZCarriageReturn$ THEN
  471.                            CALL SkipLine(1)
  472.                            IF SaveToDisk THEN
  473.                               CALL PrintWorkA(2,"")                  ' DD040601
  474.                            END IF
  475.                            ZCol = 1
  476.                          ELSE
  477.                            IF SaveToDisk THEN 'save to disk before colorization
  478.                               CALL PrintWork(OtherNodeInput$)
  479.                            END IF
  480.                            CALL ColorText(OtherNodeInput$, LineIndex)
  481.                            CALL LPrnt (OtherNodeInput$, 0)
  482.                            CALL PutCom(OtherNodeInput$)
  483.                            ZCol = ZCol + 1
  484.                            IF (ZCol > 65 AND OtherNodeInput$ = CHR$(32)) THEN
  485.                               CALL SkipLine(1)
  486.                               IF SaveToDisk THEN
  487.                                  CALL PrintWorkA(2,"")               ' DD040601
  488.                               END IF
  489.                               ZCol = 1
  490.                            END IF
  491.                         END IF
  492.                         TrueChatIndexHold(LineIndex) = TrueChatIndexHold(LineIndex) + 1
  493.                         IF TrueChatIndexHold(LineIndex) > 72 THEN TrueChatIndexHold(LineIndex) = 1
  494.  
  495.                      END IF
  496.                   END IF
  497.                END IF
  498.             NEXT
  499.  
  500. REM *************************************************************************
  501. REM *******Get text from local user (local, as in, this node of RBBS)********
  502. REM *******Also local, as in.. SysOp                                 ********
  503. REM *************************************************************************
  504.  
  505.             CALL FindFKey                ' will also get local key pressed
  506.             IF ZSubParm < 0 THEN
  507.                EXIT DO
  508.             END IF
  509.  
  510.             Key$ = ""
  511.             IF NOT ZLocalUser THEN
  512.                CALL EOFComm (Char%)
  513.               ELSE
  514.                Char% = -1
  515.             END IF
  516.             IF Char% <> -1 THEN          'if remote key in then get it
  517.                CALL GetCom(Key$)
  518.               ELSE
  519.                Key$ = ZKeyPressed$       'INKEY$ is performed in FindFKey
  520.             END IF
  521.             IF Key$ <> "" THEN
  522.                IF LEN(Key$) = 1 THEN
  523.                   IF Key$ = ZEscape$ OR Key$ = CHR$(17) THEN
  524.                      CALL ChatCommand(ChatSubParm, CurrentNodeIndex, NodesInSystem)
  525.                      IF ChatSubParm OR RePage THEN
  526.                         EXIT DO
  527.                      END IF
  528.                    ELSE
  529.                      CALL LockUnlock10 (ZTrue)
  530.                      CALL Update10(CurrentNodeIndex, ZTrue)
  531.                      TempChatInput$ = ChatInput$
  532.                      TempTrueChatIndex = CVI(TrueChatIndex$)
  533.                      MID$(TempChatInput$, TempTrueChatIndex, 1) = Key$
  534.                      LSET ChatInput$ = TempChatInput$
  535.                      TempTrueChatIndex = TempTrueChatIndex + 1
  536.                      IF TempTrueChatIndex > 72 THEN
  537.                         TempTrueChatIndex = 1
  538.                      END IF
  539.                      LSET TrueChatIndex$ = MKI$(TempTrueChatIndex)
  540.                      CALL Update10(CurrentNodeIndex, ZFalse)
  541.                      CALL LockUnlock10 (ZFalse)
  542.                      IF Key$ <> CHR$(8) THEN
  543.                         IF SaveToDisk THEN
  544.                            CALL PrintWork(Key$)
  545.                         END IF
  546.                         IF ZWasGR > 1 AND Key$ <> ZCarriageReturn$ THEN ' DD040201
  547.                            Key$ = ZEmphasizeOff$ + Key$
  548.                         END IF
  549.                         CALL QuickTPut(Key$, 0)
  550.                       ELSE
  551.                         CALL LPrnt(ZLocalBkSp$, 0)
  552.                         IF (NOT ZLocalUser) AND SendRemote THEN
  553.                            CALL PutCom (ZBackSpace$)
  554.                         END IF
  555.                         IF SaveToDisk THEN
  556.                            CALL PrintWork(ZBackSpace$)
  557.                         END IF
  558.                         ZCol = ZCol - 2
  559.                      END IF
  560.                      IF Key$ = ZCarriageReturn$ THEN
  561.                         CALL SkipLine (1)                            ' DD092401
  562.                         IF SendRemote AND ZLineFeeds THEN
  563.                            CALL PutCom(ZLineFeed$)
  564.                         END IF
  565.                         ZCol = 0
  566.                      END IF
  567.                      ZCol = ZCol + 1
  568.                   END IF
  569.                   REM ** Reset auto log-off timeski..
  570.                   ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  571.                END IF
  572.             END IF
  573.  
  574.             REM ** I'll call the below.. pseudo-wordwrap.. or a way to
  575.             REM ** get around having to do word wrap.. it ain't easy in
  576.             REM ** char by char mode... Much easier in C than in BASIC
  577.  
  578.             IF (ZCol > 72) OR (ZCol > 65 AND Key$ = CHR$(32)) THEN
  579.                CALL SkipLine(1)
  580.                IF SaveToDisk THEN
  581.                   CALL PrintWorkA(2,"")                              ' DD040601
  582.                END IF
  583.                ZCol = 1
  584.             END IF
  585.  
  586.             CALL CheckCarrier
  587.             IF ZSubParm = -1 THEN
  588.                EXIT DO
  589.             END IF
  590.             CALL CheckTimeRemain(MinsRemaining)
  591.             IF ZSubParm = -1 THEN
  592.                EXIT DO
  593.             END IF
  594.             CALL CheckTime(ZAutoLogoff!, TempElapsed!, 1)
  595.             IF TempElapsed! <= 0 THEN
  596.                ZWaitExpired = ZTrue
  597.                EXIT DO
  598.             END IF
  599.  
  600.          LOOP
  601.  
  602.          CALL LockUnlock10 (ZTrue)
  603.          CALL Update10 (CurrentNodeIndex, ZTrue)
  604.          LSET ChatInput$ = SPACE$(72)
  605.          LSET ChatActivity$ = CHR$(73)                          'I   ' DD021301
  606.          LSET InTrueChat$ = CHR$(73)                            'I   ' DD021301
  607.          CALL Update10 (CurrentNodeIndex, ZFalse)
  608.          CALL LockUnlock10 (ZFalse)
  609.          IF HasPaged > 0 THEN
  610.             CALL LockUnlock10 (ZTrue)
  611.             CALL Update10 (HasPaged, ZTrue)
  612.             IF ChatActivity$ = CHR$(82) THEN                    'R   ' DD021301
  613.                LSET ChatActivity$ = CHR$(73)                    'I   ' DD021301
  614.                CALL Update10 (HasPaged, ZFalse)
  615.             END IF
  616.             CALL LockUnlock10 (ZFalse)
  617.          END IF
  618.          CLOSE 10
  619.  
  620.          CLOSE 2
  621.          ZActiveMessageFile$ = WasA1$
  622.  
  623.          ERASE TrueChatIndexHold    'free memory taken by integer array
  624.  
  625.       END IF
  626.  
  627.       HasPaged = 0
  628.  
  629.       EXIT SUB
  630.  
  631. * REPLACING old line(s) by new
  632. 59840 GET 1, (LineIndex + 1)
  633.       IF MID$(ZMsgRec$, 55, 2) = "-1" AND NOT ZSysop THEN
  634.          NameTemp$ = "SYSOP"
  635.        ELSE
  636.          NameTemp$ = MID$(ZMsgRec$, 1, 26)
  637.       END IF
  638. * ------[ first line different ]------
  639.       CALL TrimTrail (NameTemp$, SPACE$(1))                          ' DD021301
  640.       CALL NameCaps(NameTemp$)
  641.       RETURN
  642.  
  643.       END SUB
  644.  
  645. * REPLACING old line(s) by new
  646. 59900 SUB ColorText(Text$, NodeIndex) STATIC
  647.  
  648. * ------[ first line different ]------
  649.       IF ZWasGR > 1 THEN                                             ' DD040201
  650.          TextColor = (NodeIndex MOD 5) + 2
  651.          Text$ = CHR$(27) + "[1;3" + RIGHT$(STR$(TextColor), 1) + ";40m" + Text$
  652.       END IF
  653.  
  654.       END SUB
  655.  
  656. REM **
  657. REM ** Save what a user is doing in the BBS.. for W)hos on mods..... **
  658. REM **
  659. * REPLACING old line(s) by new
  660. 59910 SUB SaveUserActivity(Activity$, NodeRecordIndex, ReadIt) STATIC
  661.  
  662.       ChatNodeIndex = NodeRecordIndex - 1
  663.  
  664.       CLOSE 10
  665. * ------[ first line different ]------
  666.       CALL OpenWrk10 (ZChatFileName$)                                ' DD092401/RCHAT
  667.       CALL Field10
  668.  
  669.       IF ReadIt THEN
  670.          CALL Update10(ChatNodeIndex, ZTrue)
  671.          Activity$ = BBSActivity$
  672.        ELSE
  673.          CALL LockUnlock10 (ZTrue)
  674.          CALL Update10(ChatNodeIndex, ZTrue)
  675.          LSET BBSActivity$ = Activity$
  676.          CALL Update10(ChatNodeIndex, ZFalse)
  677.          CALL LockUnlock10 (ZFalse)
  678.       END IF
  679.  
  680.       IF NOT ReadIt THEN
  681.          CLOSE 10
  682.       END IF
  683.  
  684.       END SUB
  685.  
  686. REM **
  687. REM ** Chat command line mode.. this is where they can do certain functions
  688. REM ** pertaining to the chat
  689. REM **
  690. REM ** ChatSubParm is returned TRUE when a user wishes to exit the chat mode
  691.  
  692. * REPLACING old line(s) by new
  693. * ------[ first line different ]------
  694. 59922    ZFileName$ = ZWelcomeFileDrvPath$ + "CHAT.MNU"              ' DD040807
  695.          CALL Graphic(ZFileName$)
  696.          CALL BufFile(ZFileName$, WasX)
  697.       END IF
  698.       ZOutTxt$ = ZFGE$ + ZConfName$ + + ZFG2$ + CHR$(58) + _         ' DD022801
  699.                  ZEmphasizeOff$                                      ' DD022801
  700.       ZSubParm = 4                                                   ' DD022801
  701.       CALL TPut                                                      ' DD022801
  702.       CALL DispTimeRemain (MinsRemaining)                            ' DD022801
  703.       ZOutTxt$ = ZFGF$ + "CHAT " + ZFG2$ + "command " + ZEmphasizeOff$ ' DD022801
  704.       IF ZExpertUser THEN
  705.          ZOutTxt$ = ZOutTxt$ + "<[C],H,W,Q,X"
  706.          IF NOT DoTrueChat THEN
  707.             ZOutTxt$ = ZOutTxt$ + ",P,S,U"
  708.          END IF
  709.        ELSE
  710.          ZOutTxt$ = ZOutTxt$ + "<[C]hat,H)elp,W)ho,Q)uit,X)pert"
  711.          IF NOT DoTrueChat THEN
  712.             ZOutTxt$ = ZOutTxt$ + ",P)age,S)qlch,U)nsqlch"
  713.          END IF
  714.       END IF
  715.       ZOutTxt$ = ZOutTxt$ + CHR$(62)                                 ' DD021301
  716.       ZSubParm = 1
  717.       CALL TGet
  718.       IF ZSubParm = -1 THEN
  719.          GOTO 59950                                                  ' DD022801
  720.       END IF
  721.       ChatSubParm = ZFalse
  722.       IF ZWasQ > 0 THEN
  723.          CALL AllCaps(ZUserIn$(1))
  724.          SELECT CASE LEFT$(ZUserIn$(1), 1)
  725.  
  726.             CASE CHR$(67)    REM ** Return to chat mode         'C   ' DD021301
  727.                EXIT SUB
  728.  
  729.             CASE CHR$(72), CHR$(63) REM ** Help.. means show the Chat menu ' DD021301
  730.                GOTO 59922
  731.  
  732.             CASE CHR$(87)    REM ** Show whos on the system     'W   ' DD021301
  733.                CALL WhosOn(NodesInSystem)
  734.                GOTO 59921
  735.  
  736.             CASE CHR$(81)    REM ** Quit/Exit out of chat mode  'Q   ' DD021301
  737.                ChatSubParm = ZTrue
  738.                EXIT SUB
  739.  
  740.             CASE CHR$(88)    REM ** Toggle expert mode          'X   ' DD021301
  741.                CALL Toggle(9)
  742.                GOTO 59921
  743.  
  744.             REM Got to eliminate this for now..
  745.             CASE CHR$(80)    REM ** Page another node to chat   'P   ' DD021301
  746.                RePage = ZTrue
  747.                EXIT SUB
  748.  
  749.             CASE CHR$(83)    REM ** Squelch -- turn off reception of any node ' DD021301
  750.                IF NOT DoTrueChat THEN
  751.                   ZOutTxt$ = "Which node do you wish to squelch (1 -" + STR$(NodesInSystem) + CHR$(41) + PRESS.ENTER$ ' DD021301
  752.                   ZSubParm = 1
  753.                   CALL TGet
  754.                   IF ZSubParm = -1 THEN
  755.                      GOTO 59950                                      ' DD022801
  756.                   END IF
  757.                   IF ZWasQ > 0 THEN
  758.                      CALL CheckInt(ZUserIn$(1))
  759.                      IF ZTestedIntValue <> CurrentNodeIndex THEN
  760.                         NodesToSquelch$ = NodesToSquelch$ + MID$(STR$(ZTestedIntValue), 2, 1)
  761.                         CALL QuickTPut("Node" + STR$(ZTestedIntValue) + " has been squelched!", 1)
  762.                       ELSE
  763.                         CALL QuickTPut1("Why Squelch Yourself?")
  764.                      END IF
  765.                   END IF
  766.                END IF
  767.                GOTO 59921
  768.  
  769.             CASE CHR$(85)    REM ** Turn reception of a node back to ON ' U ' DD021301
  770.                IF NOT DoTrueChat THEN
  771.                   IF NodesToSquelch$ <> "" THEN
  772.                      ZOutTxt$ = "Which node do you wish to UNsquelch (1 -" + STR$(NodesInSystem) + CHR$(41) + PRESS.ENTER$ ' DD021301
  773.                      ZSubParm = 1
  774.                      CALL TGet
  775.                      IF ZSubParm = -1 THEN
  776.                         GOTO 59950                                   ' DD022801
  777.                      END IF
  778.                      IF ZWasQ > 0 THEN
  779.                         CALL CheckInt(ZUserIn$(1))
  780.                         Squelched = INSTR(NodesToSquelch$, MID$(STR$(ZTestedIntValue), 2, 1))
  781.                         IF Squelched = 1 THEN
  782.                            IF LEN(NodesToSquelch$) = 1 THEN
  783.                               NodesToSquelch$ = ""
  784.                             ELSE
  785.                               NodesToSquelch$ = MID$(NodesToSquelch$, Squelched + 1)
  786.                            END IF
  787.                          ELSEIF Squelched > 1 THEN
  788.                            NodesToSquelch$ = LEFT$(NodesToSquelch$, Squelched - 1) + _
  789.                                              MID$ (NodesToSquelch$, Squelched + 1)
  790.                         END IF
  791.                         IF Squelched > 0 THEN
  792.                            CALL QuickTPut("Node" + STR$(ZTestedIntValue) + " has been UNsquelched!", 1)
  793.                         END IF
  794.                      END IF
  795.                   END IF
  796.                END IF
  797.                GOTO 59921
  798.  
  799.             CASE ELSE   REM ** Illegal command entered.. show menu..
  800.                CALL QuickTPut1("Unknown command <" + LEFT$(ZUserIn$(1), 1) + ChR$(62)) ' DD021301
  801.                GOTO 59922
  802.  
  803.          END SELECT
  804.       END IF
  805.       EXIT SUB
  806.  
  807.       REM ** user dropped carrier.. return in a way to abort chat mode
  808. * INSERTING new line(s)
  809. 59930
  810. * DELETING old line(s)
  811. 59940
  812. 59930
  813. * INSERTING new line(s)
  814. 59950 ChatSubParm = ZTrue
  815.       END SUB
  816.  
  817.       REM ** here is where we set up chat log file.. hopefully with a unique
  818.       REM ** filename. The logging code is still quite fallible..
  819. 59960 SUB SetUpLogFile STATIC                                        ' DD022801
  820.  
  821.       SHARED SaveToDisk
  822.  
  823.       TempTime$ = TIME$
  824.       TempDate$ = DATE$
  825.       FileName$ = LEFT$(TempDate$, 2) + _     'filename format is now:
  826.                   MID$ (TempDate$, 4, 2) + _  '   mmddhhmm.Css
  827.                   LEFT$(TempTime$, 2) + _
  828.                   MID$ (TempTime$, 4, 2) + _
  829.                   ".C" + _
  830.                   RIGHT$(Temptime$, 2)
  831.       CLOSE 2
  832.       CALL OpenOutW(FileName$)
  833.       CALL QuickTPut1("The SysOp has chosen to record all chats to disk.")
  834.       CALL LockUnlock10 (ZTrue)
  835.       CALL Update10 (CurrentNodeIndex, ZTrue)
  836.       LSET SavingToDisk$ = CHR$(89)                             'Y   ' DD021301
  837.       CALL Update10 (CurrentNodeIndex, ZFalse)
  838.       CALL LockUnlock10 (ZFalse)
  839.       SaveToDisk = ZTrue
  840.       END SUB
  841.  
  842. * REPLACING old line(s) by new
  843. 59999 SUB LockUnlock10(LockMode) STATIC
  844. * ------[ first line different ]------
  845.       ZWasEN$ = ZChatFileName$                                       ' DD092401/RCHAT
  846.       IF LockMode THEN
  847.          ZSubParm = 9
  848.        ELSE
  849.          ZSubParm = 10
  850.       END IF
  851.       CALL FileLock
  852.       END SUB
  853.