*DECK     CSCDQE
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS 
PROC CSCDQE;
# TITLE CSCDQE - DISPATCH QUEUE ENTRIES FOR THE CONNECTION LAYER.  #
  
      BEGIN  # CSCDQE # 
# 
**    CSCDQE - DISPATCH QUEUE ENTRIES FOR THE CONNECTION LAYER. 
* 
*     D.G. DEPEW.            82/02/17.
* 
*     THIS PROCEDURE IS THE MAIN ROUTINE FOR THE CONNECTION LAYER.  ITS 
*     MAIN FUNCTION IS TO ROUTE ENTRIES IN THE CONNECTION TRAFFIC QUEUE 
*     (*CNQ*) TO THE INDIVIDUAL C-LAYER PROCESSORS. 
* 
*     PROC CSCDQE 
* 
*     ENTRY   1. THE CONNECTION TRAFFIC QUEUE CONTAINS ONE OR MORE
*                ENTRIES. 
* 
*     EXIT    1. THE CONNECTION TRAFFIC QUEUE IS EMPTY. 
*             2. VARIOUS ENTRIES HAVE BEEN PLACED IN THE OUTGOING 
*                TRAFFIC QUEUE (*OTQ*), THE OPERATOR TYPEIN QUEUE 
*                (*OPTQ*) AND THE PROTOCOL EVENT QUEUE (*PEQ*). 
# 
  
# 
****  PROC CSCDQE - XREF LIST.
# 
      XREF
        BEGIN 
        PROC CSCANT;         # ACCEPT NOP TYPEIN (UPON INPUT)          #
        PROC CSCBPA;         # BEGIN PROTOCOL ACTION                   #
        PROC CSCCPA;         # COMPLETE PROTOCOL ACTION                #
        PROC CSCPHT;         # PREPARE HOP TEXT (FOR OUTPUT)           #
        PROC CSCPNT;         # PREPARE NOP TEXT (FOR OUTPUT)           #
        PROC CSCUFS;         # UPDATE FLOW CONTROL STATUS              #
        PROC CSCUHS;         # UPDATE HOP STATUS                       #
        PROC SSTRQE;         # REMOVE QUEUE ENTRY                      #
        END 
# 
****
# 
  
  
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
  
  
  
  
  
      FOR I=0  WHILE CNQL NQ 0
      DO                     # PROCESS CONNECTION TRAFFIC Q TIL EMPTY  #
        BEGIN 
  
  
# 
*     REMOVE THE ENTRY FROM THE CONNECTION TRAFFIC QUEUE AND CALL THE 
*     APPROPRIATE C-LAYER ROUTINE IN ACCORDANCE WITH THE CS INTERNAL
*     SM IDENTIFIER.
# 
        SSTRQE (P<CNQ>, WCBUF[0], ABHBUF[0], MSGBUF[0]);
  
        IF WCB$SMID[0] EQ SMID"DATAIN"
        THEN                           # INBOUND DATA FROM A TERMINAL  #
          CSCANT;                      # ACCEPT NOP TYPEIN             #
  
        ELSE IF WCB$SMID[0] EQ SMID"TTEXT"
        THEN                           # OUTBOUND DATA TO AN OPERATOR  #
          IF ABHADR[0] EQ HOPORD$ 
          THEN
            CSCPHT;                    # PREPARE HOP TEXT              #
          ELSE
            CSCPNT;                    # PREPARE NOP TEXT              #
  
        ELSE IF WCB$SMID[0] EQ SMID"SHUINS" 
          OR WCB$SMID[0] EQ SMID"CONREQ"
          OR WCB$SMID[0] EQ SMID"CONCB" 
          OR WCB$SMID[0] EQ SMID"TCHTCH"
          OR WCB$SMID[0] EQ SMID"CONENDN" 
        THEN                           # CONNECTION PROTOCOL SM        #
          CSCBPA;                      # BEGIN PROTOCOL ACTION         #
  
        ELSE IF WCB$SMID[0] EQ SMID"CONREQN"
          OR WCB$SMID[0] EQ SMID"CONENDR" 
          OR WCB$SMID[0] EQ SMID"HOPSRTN" 
        THEN                           # PROTOCOL RESPONSE FM I-LAYER  #
          CSCCPA;                      # COMPLETE PROTOCOL ACTION      #
  
        ELSE IF WCB$SMID[0] EQ SMID"FCACK"
          OR WCB$SMID[0] EQ SMID"INTRUSR" 
          OR WCB$SMID[0] EQ SMID"BIMARK"
          OR WCB$SMID[0] EQ SMID"FCINA" 
          OR WCB$SMID[0] EQ SMID"FCINIT"
          OR WCB$SMID[0] EQ SMID"FCNAK" 
        THEN                           # FLOW CONTROL SM               #
          CSCUFS;                      # UPDATE FLOW STATUS            #
  
        ELSE                           # MUST BE SPEC HOST OPERATOR SM #
          CSCUHS;                      # UPDATE HOP STATUS             #
  
        END 
  
      END  # CSCDQE # 
  
      TERM
