*DECK NLOBCH USETEXT AHEADER USETEXT BPIPBUF USETEXT DBGBUF USETEXT DRHDR USETEXT NBT USETEXT NHEADER USETEXT NIPDEF USETEXT OVERLAY USETEXT PARAMP USETEXT SUPMSG USETEXT SYSTIME PROC NLOBCH(BUFAD,ERRORF); # LINK MESSAGE TO PIP OUTBOUND CHAIN # STARTIMS; # *1DC NLOBCH * * 1. PROC NAME AUTHOR DATE * NLOBCH E.T.WAN 81/06/08 * L.T.NGUYEN 81/09/30 * * 2. FUNCTIONAL DESCRIPTION * LINK SM REG/CP AND MESSAGES FROM NS,CS TO PIP OUTBOUND BUFFER. * * 3. METHOD USED * CHECK THAT THERE IS A CORRECT NBT ENTRY FOR THE SPECIFIC * COUPLER. * CHECK NPU OFF FLAG, ACTIVE FLAG, DOWN FLAG, BOOTSTRAP FLAG, AND * LLK FLAG TO ALLOW SUITABLE MESSAGES TO BE LINKED. * CONVERT APPLICATION HEADER TO NETWORK HEADER. * LINK MESSAGE TO PIP OUTBOUND CHAIN. * * 4. ENTRY PARAMETERS * BUFAD MESSAGE BUFFER ADDRESS * * 5. EXIT PARAMETERS * ERRORF * * 6. COMDECKS CALLED * AHEADER * DRHDR * NBT * NHEADER * NIPDEF * SUPMSG * * 7. ROUTINES AND OVERLAYS CALLED * NXBLINK LINK MESSAGE ON PIP OUTBOUND CHAIN * XTRACE TRACE CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * THIS PROCEDURE IS CALLED BY HPPUT AND NCREGCP. * # STOPIMS; # **** EXTERNAL ENTRY POINTS # XREF BEGIN PROC MRELS; # RELEASE BUFFER SPACE # PROC NXBLINK ; # LOG MESSAGE INTO PIP OUT # PROC XTRACE; # RECORD TRACES # END # LOCAL VARIABLES # ITEM BUFAD; # BUFFER ADDRESS # ITEM ERRORF ; # ERROR FLAG # ITEM CNODE; # COUPLER NODE # ITEM I; # LOOP CONTROL VARIABLE # ITEM IND; # INDEX # ITEM INDX; # INDEX # ITEM TEMP; # SAVE APPLICATION BLOCK HEADER # ITEM FOUND B ; # MATCHED NPU FLAG # ITEM TEMPDN ; # TEMPORARY DEST. NODE # #*********************************************************************# BEGIN # NLOBCH # CONTROL IFEQ DEBUG,1; XTRACE("LOBCH") ; CONTROL FI; P = 0; # DATA BLOCK HEADER ADDRESS # P = BUFAD + DBHSIZE + ABHSIZE; # SM ADDRESS # P = BUFAD + DBHSIZE; # APPLICATION HEADER ADDR # CNODE = ABHSN[0]; # COUPLER NODE # P = P; TEMPDN = ABHDN[0] ; # DESTINATION NODE # FOUND = FALSE; ERRORF = 0; # INITIALIZE ERROR FLAG # FOR I = 0 STEP NBTFETNO WHILE I LQ NBTMAXID AND NOT FOUND DO BEGIN # SEARCH FOR NBTE WITH HN = COUPLE # IF NBTHN[I] EQ CNODE AND NBTIUF[I] THEN BEGIN # FOUND THE ENTRY # FOUND = TRUE ; IND = I; # SAVE INDEX # END END # SEARCH FOR NBTE WITH HN = COUPLR # I = IND; INDX = I+4; # INDEX INTO PIP FLAGS IN NBT 5TH FET # IF FOUND # ACTIVE NBT EXISTS FOR THIS HN # AND NOT NBTOF[INDX] # NPU NOT OFF IN EST # AND ((NBTAF[INDX] # NPU ACTIVE # AND NOT NBTMF[INDX]) # AND SAMP IS NOT RUNNING # OR (PFC EQ NPU # NS DUMP-LOAD SM # AND CNODE EQ TEMPDN # FOR LOCAL NPU-S WHICH IS # AND (NOT NBTAF[INDX] # NOT ACTIVE AND SAMP NOT LOADED # OR NBTDF[INDX])) # OR IS IN NPU DUMP-LOAD PHASE # OR (NBTLF[INDX] # PIP WAITING FOR REG/CP RESPONSE # AND PFCSFC[0] EQ REGCP # REG/CP RESPONSE TO PIP ALLOWED # AND REGR[0])) # RESPONSE BIT IS ON # THEN BEGIN # CONVERT ABH TO NETWORK HEADER # TEMP = ABHWORD[0]; # SAVE APPLICATION HEADER # ABHWORD[0] = 0; # CLEAR APPLICATION HEADER # P = BUFAD + DBHSIZE; # NETW HEADER ADDR # P = LOC(TEMP); # APPLICATION HEADER # DN[0] = TEMPDN; # DESTINATION NODE # SN[0] = CNODE; # SOURCE NODE # CN[0] = 0; BT[0] = NETCMD; # BLOCK TYPE # NHACT[0] = ABHACT[0]; # CHARACTER TYPE # CC[0] = ABHTLC[0]; # TEXT LENGTH # IND = NBTINDX[I]*NBTFETNO + OSTFET; NXBLINK(BUFAD,IND) ; END ELSE BEGIN # DISCARD MESSAGE # CONTROL IFEQ DEBUG,1; ERRORF = 1; CONTROL FI; END RETURN; END TERM