*DECK NPHECP
USETEXT NIPDEF
USETEXT BACKBUF
USETEXT NBT
USETEXT PT
USETEXT PARAMP
USETEXT NHEADER
USETEXT NCNT
USETEXT PCNB
USETEXT DRHDR
USETEXT SUPMSG
PRGM NPHECP;
STARTIMS;
#
*1DC NPHECP
*
*
* 1. PROC NAME AUTHOR DATE
* NPHECP A. BEN-ARTZI 82/09/14
*
* 2. FUNCTIONAL DESCRIPTION
* PROCESS HE/CP FROM PIP
*
* 3. METHOD USED
* CLEAR NBT DOWN LINE BLOCKS QUEUED
*
* 4. ENTRY PARAMETERS
* PARAMP1 - SM BUFFER (HE/CP)
*
* 5. EXIT PARAMETERS
* PARAMP2 - IF NON-ZERO THEN BAD BLOCK
*
* 6. SYMPL TEXTS USED
* NIPDEF
* BACKBUF SPECIAL BUFFER FOR DOWNLINE BACKS
* NBT
* SUPMSG PARAMP OPSIZE
* NHEADER DRHDR
*
* 7. ROUTINES CALLED
* XTRACE - TRACE PROCEDURE CALL
* OMSG - SEND MESSAGE TO DAYFILE
* MSETIL - SET INTERLOCK TO PIP
* MCLRIL - CLEAR PIP INTERLOCK
* OCTCON - CONVERT TO OCTAL DISPLAY CODE
* XCDD - CONVERT TO DECIMAL DISPLAY CODE
* MRELS - RELEASE BUFFER
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
* THIS PRIMARY OVERLAY IS CALLED BY NPNIPSM.
* W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY
*CALL OPSIZE
*
#
STOPIMS;
#
PARAMP1 - SM BUFFER (HE/CP)
EXIT PARAMETER
PARAMP2 - IF NON-ZERO THEN BAD BLK
#
#
EXTERNAL VARIABLES
#
XREF
BEGIN
PROC XTRACE; # TRACE PROCEDURE CALL #
PROC OMSG ;
PROC MSETIL ;
PROC MCLRIL ;
PROC MRELS ;
FUNC XCDD C(10) ;
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
#
INTERNAL VARIABLES
#
ITEM NBTIND; # CURRENT INDEX INTO NBT INPUT FET #
ITEM FOUND B; # CET ENTRY FOUND FLAG #
ITEM TEMP ; # LOOP VARIABLE #
ITEM I; # LOOP VARIABLE #
ITEM CNXX; # TEMPORARY VARIABLE FOR CONNECTION NUMBER#
ARRAY TWORD S(2) ;
BEGIN
ITEM TWORD1 U(0,0,60) ;
ITEM TWORD2 U(1,0,60) ;
END
ARRAY HECPMS S(4) ;
BEGIN
ITEM HECPM0 C(0,0,30) = ["EST XXX - FRONT END INTERFACE "];
ITEM HECPM2 C(2,0,10) = ["ERROR EE. "];
ITEM HECPM3 U(3,0,60) = [0]; # END OF MESSAGE #
ITEM HE$XXX1 C(0,24,1); # 1ST DIGIT OF THE FRONT END EST #
ITEM HE$XXX2 C(0,30,1); # 2ND DIGIT OF THE FRONT END EST #
ITEM HE$XXX3 C(0,36,1); # 3RD DIGIT OF THE FRONT END EST #
ITEM HE$EE C(2,36,2) = [0]; # ERROR CODE #
END
ARRAY EHECPMS S(3) ;
BEGIN
ITEM EHECPM0 C(0,0,25)=["NW01, NNN,FFEE, CCC ."];
ITEM EHECPM2 U(2,6,54)=[0]; # END OF MESSAGE #
ITEM EHE$NNN C(0,36,3); # COUPLER NODE NUMBER #
ITEM EHE$EE1 C(1,12,1); #FIRST DIGIT OF COUPLER STATUS WORD #
ITEM EHE$EE2 C(1,18,1); #SECOND DIGIT OF COUPLER STATUS WORD#
ITEM EHE$CCC1 C(1,36,1);
ITEM EHE$CCC2 C(1,42,1);
ITEM EHE$CCC3 C(1,48,1);
END
ARRAY HEXCONP [0:15] P(1) ;
BEGIN
ITEM V C(0,0,1) = ["0","1","2","3","4","5","6","7",
"8","9","A","B","C","D","E","F"];
END
#**********************************************************************#
BEGIN
CONTROL IFEQ DEBUG,1;
XTRACE("NHECP");
CONTROL FI;
P<NHEADER> = PARAMP1 + BLKHSIZE;
FOUND = FALSE;
FOR I = 0 STEP NBTFETNO WHILE NOT FOUND AND I LQ NBTMAXID
DO # SEARCH NBT FOR MATCHING COUPLER NODE #
BEGIN
IF NBTIUF[I] AND NBTHN[I] EQ DN[0]
THEN
BEGIN # FOUND NBT ENTRY #
FOUND = TRUE;
NBTIND = I; # SAVE NBT INDEX #
END
END
IF FOUND
THEN
BEGIN # NBT FOUND #
HE$XXX1[0] = V [ NBTEST1[NBTIND] ]; #1ST DIGIT OF FRONT END EST#
HE$XXX2[0] = V [ NBTEST2[NBTIND] ]; #2ND DIGIT OF FRONT END EST#
HE$XXX3[0] = V [ NBTEST3[NBTIND] ]; #3RD DIGIT OF FRONT END EST#
P<SMNIP> = P<NHEADER> + NBHSIZE;
I = HEEC[0]; #COUPLER ERROR CODE FROM PIP#
TEMP = XCDD(I); #CONVERT ERROR CODE TO DECIMAL DISPLAY CODE#
HE$EE[0] = C<8,2>TEMP;
OMSG(HECPMS,0); #DAYFILE COUPLER ERROR MESSAGE#
I = DN[0]; #HOST NODE NUMBER OF COUPLER#
TEMP = XCDD(I); #CONVERT ERROR CODE TO DECIMAL DISPLAY CODE#
EHE$NNN[0] = C<7,3>TEMP;
EHE$EE1[0] = V [ HEEC1[0] ]; #FORMAT HEXADECIMAL ERROR CODE#
EHE$EE2[0] = V [ HEEC2[0] ];
EHE$CCC1[0] = V [ HECSR1[0] ]; #COUPLER STATUS WORD, DIGIT 1#
EHE$CCC2[0] = V [ HECSR2[0] ]; #COUPLER STATUS WORD, DIGIT 2#
EHE$CCC3[0] = V [ HECSR3[0] ]; #COUPLER STATUS WORD, DIGIT 3#
OMSG(EHECPMS,4) ; # SEND MESSAGE TO ERROR LOG FILE #
# UPDATE NBT #
#
RELEASE ALL DOWN LINE MESSAGES (ALWAYS AT LEAST ONE)
#
IF NOT HEMDI[0] # IF SOFT ERROR FLAG NOT SET #
THEN
BEGIN
MSETIL(0) ;
FOR I = NBTIND+2 STEP 1 UNTIL NBTIND+4 DO
BEGIN
P<DRHDRWD> = NBTFIRST[I];
FOR TEMP = TEMP WHILE P<DRHDRWD> NQ 0 # WE DID NOT PASS #
DO
BEGIN
IF BLKID[0] EQ PRUSPECID
THEN
BEGIN # SPECIAL OUTBOUND BLK FOR PCNB #
P<NHEADER> = P<DRHDRWD> + BLKHSIZE ;
P<PCNB> = NHWORD[0] ; #CAN NOW CONVERT NCNB TO PCNB#
CNXX = PCNBCN[0] ; # SAVE CONNECTION NUMBER #
# SET BATCH STREAM STATE AND BLOCK HANDLER STATE #
P<NCNT> = PCNBCTAD[0] ;
NCNTBSS[CNXX + NCNTHSIZE] = BSSI ;
IF PCNBDT[0] EQ DT$CR
OR ( PCNBXFR[0] # FILE TRANSFER CONN #
AND PCNBREC[0] ) # RECEIVING #
THEN
BEGIN
NCNTBHS[CNXX + NCNTHSIZE] = BHSPRUI ; # INPUT PRU #
END
ELSE
BEGIN
NCNTBHS[CNXX + NCNTHSIZE] = BHSPRUO ; # PRU OUTPUT #
END
PCNBID[0] = PCNBIDVALUE ; # ID NOW IS PCNB #
BLKID[0] = POBIDVALUE; # CONVERT TO REGULAR ID #
END
TEMP = NEXTPTR[0] ; # NEXT DOWN-LINE MESSAGE #
IF (P<DRHDRWD> LS BACKBLWA) AND
(P<DRHDRWD> GQ BACKBFWA)
THEN # THIS IS BACK ENTRY IN BACK BUFFER #
BEGIN
P<DRHDRWD> = P<DRHDRWD> - 1; # 1ST WD OF BCK BUF ENTRY#
CMWORD[0] = BACKFFREE; # PTR TO NEXT FREE ENTRY #
BACKFFREE = P<DRHDRWD>; # NEW FIRST FREE ENTRY #
END
ELSE # THIS IS REGULAR DYNAMIC BUFFER #
BEGIN
MRELS(P<DRHDRWD>); # RELEASE BUFFER #
END
P<DRHDRWD> = TEMP ;
END
NBTOUT[I] = 0 ;
NBTIN [I] = 0 ;
NBTFIRST[I] = 0 ;
END
MCLRIL ;
END # END OF SOFT ERROR FLAG #
END # END OF FOUND #
GOTO RJMAIN ;
END
TERM