*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