*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, OTQSIZ, ABH[1], CSSM[1]); NRDEV = NRDEV + 1; # COUNT NUMBER DEVICES CONFIGURED PER LINE# END # CSTITR # TERM