*DECK     NVFCDQE 
USETEXT          TXTANVF
USETEXT          TEXTSS 
USETEXT          TEXTNVF
USETEXT          TXTAPSS
PROC  NVFCDQE;
# TITLE NVFCDQE - DISPATCH QUEUE ENTRIES FOR CONNECTION LAYER PROCESS. #
  
      BEGIN # NVFDQE #
# 
**    NVFCDQE - DISPATCH QUEUE ENTRIES FOR CONNECTION LAYER PROCESS.
* 
*     S. H. FISCHER.         81/12/07.
*     D. G. DEPEW.           82/04/09.
*     C. J. BRION            82/06/01,83/04/23. 
* 
*     THIS PROCEDURE IS THE MAIN ROUTINE FOR THE CONNECTION LAYER.  ITS 
*     MAIN FUNCTION IS TO ROUTE ENTRIES IN THE CONNECTION TRAFFIC QUEUE 
*     (*CTQ*) TO THE INDIVIDUAL C-LAYER PROCESSORS. 
* 
*     PROC NVFCDQE
* 
*     ENTRY   1. THE CONNECTION TRAFFIC QUEUE CONTAINS ONE OR MORE
*                ENTRIES. 
* 
*     EXIT    1. THE CONNECTION TRAFFIC QUEUE IS EMPTY. 
*             2. VARIOUS ENTRIES MAY HAVE BEEN PLACED IN THE OUTGOING 
*                TRAFFIC QUEUE (*OTQ*), THE OPERATOR TYPEIN QUEUE 
*                (*OPTQ*), THE PROTOCOL EVENT QUEUE (*PEQ*), THE
*                TERMINAL-TO-APPLICATION CONNECTION INPUT QUEUE 
*                (*TAINPQ*), AND/OR THE APPLICATION-TO-APPLICATION
*                CONNECTION INPUT QUEUE (*AAINPQ*) DEPENDING UPON WHAT
*                INPUT WAS RECEIVED VIA THE *CTQ*.  REFER TO THE
*                INDIVIDUAL CALLED ROUTINE DESCRIPTIONS FOR DETAILS.
# 
  
  
  
  
# 
****  PROC NVFCDQE - XREF LIST. 
# 
      XREF
        BEGIN 
        PROC SSTRQE;         # REMOVE QUEUE ENTRY                      #
        PROC NVFCAUT;        # ACCEPT USER TEXT                        #
        PROC NVFCPHT;        # PREPARE HOP TEXT                        #
        PROC NVFCPUT;        # PREPARE USER TEXT                       #
        PROC NVFCBPA;        # BEGIN PROTOCOL ACTION                   #
        PROC NVFCCPA;        # COMPLETE PROTOCOL ACTION                #
        PROC NVFCUFS;        # UPDATE FLOW STATUS                      #
        PROC NVFCUHS;        # UPDATE HOP STATUS                       #
        PROC NVFCUPS;        # UPDATE PID STATUS                       #
        END 
# 
****
# 
  
  
  
  
      ITEM I     I;          # LOOP VARIABLE                           #
  
  
  
  
# 
**    BLSWT - BLOCK SWITCH. 
* 
*     THE MAJOR DISPATCH KEY IS APPLICATION BLOCK TYPE. 
*     THIS SWITCH IS USED TO SELECT THE APPROCIATE ROUTINE TO PROCESS 
*     THE BLOCK. SUPERVISORY MESSAGES NEED ADDITIONAL SWITCHING.
# 
  
# 
****                           BLOCK TYP     ROUTINE
# 
      SWITCH  BLSWT 
                 LBLNULL,    # APPNULL   0   NVFCAUT                   #
                 LBLBLK,     # APPBLK    1   NVFCAUT                   #
                 LBLMSG,     # APMSG     2   NVFCAUT                   #
                 LBLCMD,     # APPCMD    3   NVFCAUT - NVFC***         #
                 ENDTAS,     #           4                             #
                 ENDTAS,     #           5                             #
                 ENDTAS,     #           6                             #
                 LBLTTX,     # APPTTX$   7   NVFCPUT                   #
                 LBLPTX,     # APPPTX$   8   NVFCPUT                   #
                 LBLPR,      # APPPR$    9   NVFCPUT - NVFCCPA         #
                 LBLHOP,     # HOPTX$   10   NVFCPHT                   #
                    ; 
  
#                                      ***  = SEE SWITCH SMSWT         #
# 
****
# 
  
  
  
  
# 
**    SMSWT - SUPERVISORY MESSAGE SWITCH (INBOUND ASYNCHRONOUS SM S). 
* 
*     THIS SWITCH IS USED TO SELECT THE APPROCIATE ROUTINE TO PROCESS 
*     INBOUND ASYNCHRONOUS SUPERVISORY MESSAGES.
# 
  
# 
****                                     PFC/SFC      ROUTINE 
# 
      SWITCH SMSWT:CTQSTAT
                   CNPROTO:  SACC,     # CR/ACC       NVFCBPA          #
                   CNPROTO:  SCB,      # CR/CB        NVFCBPA          #
                   CNPROTO:  SITE,     # CR/ITE       NVFCBPA          #
                   CNPROTO:  SIAP,     # CR/IAP       NVFCBPA   # 
                   CNPROTO:  SRAP,     # CR/RAP       NVFCBPA   # 
                   CNPROTO:  SRCN,     # CR/RCN       NVFCBPA          #
                   CNPROTO:  SSWHN,    # CR/SWH/N     NVFCBPA          #
                   CNPROTO:  STRMN,    # CR/TRM/N     NVFCBPA          #
                   CNPROTO:  STCHAR,   # TCH/TCHAR    NVFCBPA          #
  
                   FLOWCON:  SACK,     # FC/ACK       NVFCUFS          #
                   FLOWCON:  SBRK,     # FC/BRK       NVFCUFS          #
                   FLOWCON:  SIUSR,    # INTR/USR     NVFCUFS          #
                   FLOWCON:  SINA,     # FC/INACT     NVFCUFS          #
                   FLOWCON:  SINIT,    # FC/INIT      NVFCUFS          #
                   FLOWCON:  SNAK,     # FC/NAK       NVFCUFS          #
  
                   SHOPMSG:  SHBRK,    # HOP/BRK      NVFCUHS          #
                   SHOPMSG:  SHCMD,    # HOP/CMD      NVFCUHS          #
                   SHOPMSG:  SHEND,    # HOP/END      NVFCUHS          #
                   SHOPMSG:  SHIG,     # HOP/IG       NVFCUHS          #
                   SHOPMSG:  SHPAGE,   # HOP/PAGE     NVFCUHS          #
                   SHOPMSG:  SHSTART,  # HOP/START    NVFCUHS          #
  
                   SSLLMSG:  SSLL;     # CR/SLL       NVFCUPS          #
# 
****
# 
  
  
  
  
  
#     DISPATCH ENTRIES FROM *CTQ* TO APPROPRIATE ROUTINES.             #
  
      FOR I = 0 WHILE CTQLNGTH NQ 0 
      DO
        BEGIN 
  
#       CLEAR MESSAGE BUFFER.                                          #
  
        FOR I = 0 STEP 1 UNTIL NMSGBUF$ 
        DO
          BEGIN 
          MSG$WORD[I] = 0;
          END 
  
        SSTRQE( P<CTQ>, WCBUF, ABHBUF, MSGBUF ); # XFER TO FIX BUFFER  #
  
  
  
  
  
#       SELECT CASE FOR APPLICATION BLOCK TYPE.                        #
  
  
        GOTO BLSWT[ABHABT[0]];
  
  
  
  
#       NULL, BLK AND MSG BLOCKS INPUT FROM THE NETWORK.               #
  
  LBLNULL:  
  LBLBLK: 
  LBLMSG: 
        NVFCAUT;             # ACCEPT USER TEXT                        #
        GOTO ENDTAS;
  
  
  
  
#       SUPERVISORY MESSAGES INPUT FROM THE NETWORK.                   #
  
  LBLCMD: 
        IF ABHADR[0] EQ 0 
        THEN
          BEGIN  # ASYNCHRONOUS SM #
  
#         SELECT CASE FOR PFC/SFC.                                     #
  
  
          GOTO SMSWT[WCB$SMID[0]];
  
  
  
  
  CNPROTO:  
  
          NVFCBPA;           # BEGIN PROTOCOL ACTION                   #
          GOTO ENDTAS;
  
  
  
  
  SHOPMSG:  
  
          NVFCUHS;           # UPDATE HOP STATUS                       #
          GOTO ENDTAS;
  
  SSLLMSG:  
  
          NVFCUPS;
          GOTO ENDTAS;
  
  FLOWCON:  
  
          NVFCUFS;           # UPDATE FLOW STATUS                      #
  
  
  
  
  
  
  
  
          END 
        ELSE
          BEGIN  # SYNCHRONOUS SM # 
          NVFCUFS;           # UPDATE FLOW STATUS                      #
          END 
        GOTO ENDTAS;
  
  
  
  
#       BLK AND MSG BLOCKS OUTPUT TO THE NETWORK.                      #
  
  LBLTTX: 
  LBLPTX: 
        NVFCPUT;             # PREPARE USER TEXT                       #
        GOTO ENDTAS;
  
  
  
  
#       SUPERVISORY MESSAGES OUTPUT TO THE NETWORK.                    #
  
  LBLPR:  
        IF ABHADR[0] EQ 0 
        THEN
          BEGIN  # ASYNCHRONOUS SM #
          NVFCCPA;           # COMPLETE PROTOCOL ACTION                #
          END 
        ELSE
          BEGIN  # SYNCHRONOUS SM # 
          NVFCPUT;           # PREPARE USER TEXT                       #
          END 
        GOTO ENDTAS;
  
  
  
  
  
#       OPERATOR RESPONSE MESSAGES (TEXT) DESTINED FOR THE HOP.        #
  
  LBLHOP: 
        NVFCPHT;             # PREPARE HOP TEXT                        #
  
  
  
  
  ENDTAS: 
        END 
  
  
      END # NVFCDQE # 
      TERM
