*DECK CSTRCT
USETEXT TEXTCS
USETEXT TXTCTCS
USETEXT TXTSMCS
USETEXT TXTAPSS
USETEXT TXTSUSS
PROC CSTRCT;
# TITLE CSTRCT - RESET CHARACTERISTIC OF TERMINAL. #
BEGIN # CSTRCT #
#
** CSTRCT - RESET CHARACTERISTICS OF TERMINAL.
*
* LIEM THANH NGUYEN 84/12/06.
*
* CSTRCT RESET CHARACTERISTICS OF TERMINAL FROM THE LINE RECORDS
* CONTAINED IN THE NCF DATA QUEUE.
*
* PROC CSTRCT
*
* ENTRY THE FIRST DATA ENTRY IN THE NCF DATA QUEUE.
*
* EXIT THE FIRST DATA QUEUE ENTRY IN THE NCF DATA QUEUE
* HAS BEEN DELETED.
* A RESET TERMINAL RESPONSE SM'S (NORMAL OR ABNORMAL),
* CORRESPONDING TO THE NCF DATA QUEUE ENTRY THAT WAS
* PROCESSED, HAS BEEN PLACED IN THE OUTGOING TRAFFIC
* QUEUE.
*
#
#
**** PROC CSTRCT - XREF LIST.
#
XREF
BEGIN
PROC CSTSCD; #SELECT AND CONFIGURE CORRECT DEVICES #
PROC CSTITR ; #ISSUE TERMINAL REPONSE #
PROC MOVE; #MOVE STORAGE DIRECT ADDRESSING (MACREL) #
PROC SSTAQE; #ACCEPT QUEUE ENTRY #
PROC SSTRTS; #REMOVE STORAGE ANYWHERE IN TABLE #
FUNC SSDCAD U ; # CONVERT ASCII TO DISPLAY CODE CHARACTER #
END
#
****
#
ARRAY CNF$NAME S(1) ;
BEGIN
ITEM CNFNAMU U(0,00,42) ;
ITEM CNFNAME C(0,00,07) ;
ITEM CNFROOT C(0,00,05) ;
ITEM CNFSUF U(0,30,12) ;
END
ITEM CURDEV; # CURRENT OFFSET FOR DEVICE ENTRY #
ITEM CURTERM; # CURRENT OFFSET FOR TERMINAL ENTRY #
ITEM I, J, K, NB ; #LOOP INDUCTION VARIABLES #
ITEM FOUND B ;
ITEM LTES U ;
FOUND = FALSE ; # RESET FOUND #
# WE BEGIN THE PROCESSING OF A SINGLE NCF DATA QUEUE ENTRY BY #
# INITIALIZING A WHOLE BUNCH OF STUFF. #
# THE MEMORY MANAGEMENT ROUTINES GUARANTEE ONE ADDITIONAL WORD AT #
# THE END OF EACH MANAGED TABLE (ABOVE AND BEYOND THE LENGTH OF THE#
# TABLE). SETTING THIS WORD NON-ZERO FOR THE NCF DATA QUEUE #
# INSURES THAT THE INNER LOOPS OF THIS ROUTINE AND PROC CSTSCD DO #
# NOT ACT UPON STORAGE BEYOND THE END OF THE NCF DATA QUEUE. #
NRDEV = 0; # INITIALIZE NUMBER OF DEVICES CONFIGURED #
LTES = NDQ$LRSIZE[0] - LRHDRL$; # WORD COUNT OF TRM NTRYS #
P<LINEREC> = P<NDQ> + NDQ$TCSIZE[0]; # BEGINNING OF LINE REC #
ABHWORD[0] = NDQ$WORD[1]; # BREAK OUT CNF/RC/R SM ABH #
MOVE (NDQ$TCSIZE[0]-2, NDQ[2], CSSM[0]); # AND SM BODY #
# SET UP FIXED FIELDS OF CONFIGURE TERMINAL RESPONSE SM. #
ABHWORD[1] = NDQ$WORD[1];
ABHSN[1] = ABHDN[0]; # REVERSE DN AND SN FOR RESPONSE SM #
ABHDN[1] = ABHSN[0];
SPMSG0[1] = 0; # START CNF/RC RESPONSE SM BODY #
PFCSFC[1] = CNFRCTN; # DEFINED IN TXTSUSS #
CNFP[1] = CNFP[0]; # PORT NUMBER. THAT'S IT FOR NOW #
#
CONVERT 8 BIT ASCII CHARACTER NAME TO DISPLAY CODE NAME
#
FOR I = 0 STEP 1 UNTIL 6
DO
BEGIN
B<(I*6),6>CNFNAMU[0] = SSDCAD(B<I*8,8>CNFRCNM[0]) ;
END
P<TRMINFO> = P<LINEREC> + LRHDRL$; # 1ST TERM NTRY IN LINREC#
CURTERM = 0; # INITIAL OFFSET FOR TERMINAL ENTRY #
FOR J=TE$WC[0] STEP TE$WC[0]
WHILE J LQ LTES
AND NOT FOUND
DO # LOOP TIL END OF LINREC OR TERMINAL MATCH#
BEGIN
P<DEVNTRY> = P<TRMINFO> + TEHDRL$ ; # DEVICE ENTRY #
CURDEV = 0; # INITIAL OFFSET FOR DEVICE ENTRY #
FOR I = DE$WC[0] STEP DE$WC[0] WHILE I LQ TE$WC[0] - TEHDRL$
AND NOT FOUND
DO
BEGIN # LOOP UNTIL END OF TRM AND DEV NTRY#
IF LR$GC[0] EQ 0
THEN
BEGIN # NO GROUP #
IF CNFNAME[0] EQ DE$NAME[0]
THEN
FOUND = TRUE ; # FOUND THE RIGHT ENTRY #
END # NO GROUP #
ELSE
BEGIN # THERE IS GROUP #
# USE ONLY THE ROOT NAME TO COMPARE TO NAME IN NCF #
NB = 0 ; # RESET NON-BLANKS COUNT #
FOR K = 0 STEP 6 UNTIL 36
DO
BEGIN # COUNTING NON-BLANKS #
IF B<I,6>CNFNAMU[0] NQ O"55"
THEN
NB = NB + 1 ; # REMEMBER NUMBER OF NONBLANKS#
END
IF C<0,NB-2>CNFNAMU[0] EQ DE$NAME[0]
THEN
BEGIN # ROOT IS MATCHING #
FOUND = TRUE ; # THIS ENTRY HAS SAME ROOT AND SUFIX #
END # ROOT IS MATCHING #
END # THERE IS GROUP #
IF FOUND
THEN
BEGIN # READY TO RESPONSE #
CSTITR(TRUE) ;
#
RESET BASED ARRAY POINTERS IN CASE NDQ ENTRY HAS BEEN
MOVED
#
P<LINEREC> = P<NDQ> + NDQ$TCSIZE[0]; # LINE REC ARRAY #
P<TRMINFO> = P<LINEREC> + LRHDRL$ + CURTERM;
P<DEVNTRY> = P<TRMINFO> + TEHDRL$ + CURDEV;
END
CURDEV = CURDEV + DE$WC[0]; # OFFSET FOR NEXT DEV ENTRY #
P<DEVNTRY> = P<TRMINFO> + TEHDRL$ + CURDEV;
END # LOOP UNTIL THE END OF DEVICES #
CURTERM = CURTERM + TE$WC[0]; # OFFSET FOR NEXT TERM ENTRY #
P<TRMINFO> = P<LINEREC> + LRHDRL$ + CURTERM;
END # GO THROUGH LINE RECORD FOR DEVICE #
IF NOT FOUND
THEN # NOTHING GOT CONFIGURED #
BEGIN # ISSUE CNF/RC/A #
ABHTLC[1] = NCNFA; # DEFINED IN TXTSMCS. ABH COMPLETE #
PFCSFC[1] = CNFRCTA; # DEFINED IN TXTSUSS. SM COMPLETE #
SSTAQE (P<OTQ>, CTEAQL$, ABH[1], CSSM[1]); # QUEUE CNF/TE/A#
END
SSTRTS (P<NDQ>, 0, NDQ$ESIZE[0]); # DEL 1ST NTRY IN NCF DATA Q#
END # CSTRCT #
TERM