*DECK     CSTITR
USETEXT TEXTCS
USETEXT TXTCTCS 
USETEXT TXTSMCS 
USETEXT TXTAPSS 
USETEXT TXTSUSS 
PROC CSTITR (LASTRSP);
# TITLE CSTITR - ISSUE TERMINAL RESPONSE.                              #
  
      BEGIN  # CSTITR # 
# 
**    CSTITR - ISSUE TERMINAL RESPONSE. 
* 
*     D. G. DEPEW            81/10/22.
* 
*     CSTITR BUILDS AND PLACES IN THE OUTGOING TRAFFIC QUEUE A SINGLE 
*     CONFIGURE TERMINAL NORMAL RESPONSE SM (CNF/TE/N). 
* 
*     PROC CSTITR (LASTRSP) 
* 
*     ENTRY   BASED ARRAYS *LINEREC*, *TRMINFO* AND *DEVNTRY* POINT TO
*               THE CORRECT LINE RECORD, TERMINAL ENTRY WITHIN THE LINE 
*               RECORD AND DEVICE ENTRY WITHIN THE TERMINAL ENTRY,
*               RESPECTIVELY. 
*             LASTRSP = TRUE,  IF THIS IS THE LAST CNF/TE/N SM TO BE
*                              ISSUED FOR THE LINE. 
*             LASTRSP = FALSE, IF THIS IS NOT THE LAST CNF/TE/N SM TO BE
*                              ISSUED FOR THE LINE. 
*             CERTAIN FIELDS OF THE CNF/TE/N RESPONSE THAT ARE THE SAME 
*               FOR ALL DEVICES ON A GIVEN LINE HAVE ALREADY BEEN SET 
*               (IN PROC CSTSCT), NAMELY: 
*               -IN THE APPLICATION BLOCK HEADER: 
*                  THE APPLICATION BLOCK TYPE (NO CHG FM INPUT) 
*                  THE APPLICATION CHARACTER TYPE (NO CHG FM INPUT) 
*                  THE CONNECTION NUMBER (ZERO - NO CHG FM INPUT) 
*                  THE DESTINATION NODE 
*                  THE SOURCE NODE
*               -IN THE SUPERVISORY MESSAGE BODY: 
*                  THE PFC/SFC CODE 
*                  THE PORT NUMBER
*                  THE SUBPORT NUMBER (ALWAYS ZERO).
* 
*     EXIT    A CNF/TE/N RESPONSE SM FOR THE INDICATED DEVICE HAS BEEN
*               PLACED IN THE OUTGOING TRAFFIC QUEUE. 
*             ITEM *NRDEV* (IN TXTCTCS) HAS BEEN INCREMENTED BY ONE.
*             THE NCF DATA QUEUE MAY HAVE MOVED, CAUSING BASED ARRAYS 
*               *LINEREC*, *TRMINFO* AND *DEVNTRY* TO POINT AT RANDOM 
*               CORE LOCATIONS (SEE NOTE).
* 
*     NOTE    THIS ROUTINE CALLS PROC SSTAQE (TO QUEUE CNF/TE/N IN OTQ),
*             WHICH IN TURN CALLS PROC SSTATS (TO ALLOCATE CORE IN OTQ),
*             WHICH CAN CAUSE STORAGE (MANAGED TABLES) TO MOVE. 
# 
  
      ITEM LASTRSP  B;       #LAST CNF/TE/N RESPONSE FOR A LINE FLAG   #
  
# 
****  PROC CSTITR - XREF LIST.
# 
      XREF
        BEGIN 
        PROC SSBEBF;         #EXTRACT BITFIELD                         #
        PROC SSBSBF;         #STORE BITFIELD                           #
        FUNC SSDCDA;         #CONVERT DISPLAY CODE TO ASCII            #
        PROC SSTAQE;         #ACCEPT QUEUE ENTRY                       #
        FUNC XCHD;           #CONV BIN INTEGER TO HEX DSP CODE (MACREL)#
        END 
# 
****
# 
  
  
      ITEM I;                #LOOP INDUCTION VARIABLE                  #
      ITEM OTQSIZ;           #LENGTH OF CNF/TE/N IN OUTGOING TRAFFIC Q #
      ITEM DSPORD;           #DEV NTRY WD ORD OF DEV NAME OR FN/FV PAIR#
      ITEM DSPBIT;           #DEV NTRY ST BIT OF DEV NAME OR FN/FV PAIR#
      ITEM ASCORD;           #CNF/TE/N WD ORD OF DEV NAME OR FN/FV PAIR#
      ITEM ASCBIT;           #CNF/TE/N ST BIT OF DEV NAME OR FN/FV PAIR#
      ITEM ONECHAR;          #SINGLE CHAR OR FNFV RT JUST W/LEAD ZEROES#
  
  
  
  
  
      CONTROL FASTLOOP; 
  
#     FIRST MOVE ALL THE FIXED POSITION FIELDS EXCEPT THE DEVICE NAME  #
#     INTO THE CNF/TE/A WORKING STORAGE AREA.                          #
  
      CNFA1N[1] = TE$A1[0];                 # ADDRESS ONE              #
      CNFA2DT[1] = DE$A2DT[0];              # ADDRESS TWO, DEVICE TYPE #
      CNFSTIP[1] = TE$STIP[0];              # SUB-TIP TYPE             #
      CNFTC[1] = TE$TC[0];                  # TERMINAL CLASS           #
      CNFST[1] = DE$ISTAT[0];               # INITIAL STATUS OF DEVICE #
      IF LASTRSP
      THEN                   # LAST CNF/TE/N RESPONSE FOR THE LINE     #
        CNFLAST[1] = 1; 
      ELSE                   # MORE CNF/TE/N RESPONSES TO FOLLOW       #
        CNFLAST[1] = 0; 
      CNFCDN[1] = TE$CSET[0];               # CODE SET                 #
  
#     NOW CONVERT (FROM DISPLAY CODE TO ASCII) AND STORE THE DEVICE    #
#     NAME.  WE MUST TAKE GROUPED LINES INTO ACCOUNT BY APPENDING THE  #
#     PORT NUMBER (IN CHARACTER CODED HEXIDECIMAL) TO THE ROOT DEVICE  #
#     NAME.                                                            #
  
      IF LR$GC[0] NQ 0
      THEN                   # THIS LINE PART OF A GROUP               #
        DE$SUFFIX[0] = XCHD (CNFP[0]+X"100");    # INSURE LEAD ZEROES  #
      DSPORD = 1;            # SET UP TO EXTRACT AND STORE CHARACTERS  #
      DSPBIT = 0; 
      ASCORD = 1; 
      ASCBIT = 4; 
      FOR I=1  STEP 1  UNTIL 7
      DO                     # GET, CONVERT, STORE ONE CHAR AT A TIME  #
        BEGIN 
        SSBEBF (DEVNTRY[0], DSPORD, DSPBIT, 6, ONECHAR);
        IF ONECHAR NQ O"55" 
        THEN                 # STORE NON-BLANK CHAR IN NEXT AVAIL POS  #
          BEGIN 
          ONECHAR = SSDCDA (ONECHAR); 
          SSBSBF (CSSM[1], ASCORD, ASCBIT, 8, ONECHAR); 
          END 
        END 
      IF ASCBIT NQ 0
      THEN                   # LESS THAN 7 CHAR STORE, MUST BLANK FILL #
        SSBSBF (CSSM[1], ASCORD, ASCBIT, 60-ASCBIT, X"202020202020"); 
  
#     NOW MOVE THE FN/FV PAIRS.                                        #
  
      DSPORD = 2;            # SET UP TO EXTRACT AND STORE FN/FV PAIRS #
      DSPBIT = 24;
      ASCORD = 2; 
      ASCBIT = 32;
      FOR I=1  STEP 1  UNTIL DE$FNFV[0] 
      DO                     # GET AND STORE ONE FN/FV PAIR AT A TIME  #
        BEGIN 
        SSBEBF (DEVNTRY[0], DSPORD, DSPBIT, 16, ONECHAR); 
        SSBSBF (CSSM[1], ASCORD, ASCBIT, 16, ONECHAR);
        END 
  
#     ALL THAT IS LEFT TO DO IS SET THE TEXT LENGTH IN CHARACTERS IN   #
#     THE APPLICATION BLOCK HEADER.  THEN, SHIP THE PIG.               #
  
      ABHTLC[1] = NCNFN + 2 * DE$FNFV[0]; 
      OTQSIZ = 2  +  (ABHTLC[1] * 2 + 14) / 15; 
      SSTAQE (P<OTQ>, OTQSIZ, ABH[1], CSSM[1]); 
      NRDEV = NRDEV + 1;     # COUNT NUMBER DEVICES CONFIGURED PER LINE#
  
      END  # CSTITR # 
  
      TERM
