*DECK CSESLL
USETEXT TEXTOV
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS
USETEXT TXTSMCS
PROC CSESLL;
# TITLE - SEND LOGICAL LINK STATUS. #
BEGIN
#
** CSESLL - SEND LOGICAL LINK STATUS.
*
* D.K. ENDO 82/03/19
*
* THIS PROCEDURE FORMATS THE LOGICAL LINK MESSAGE AND SENDS IT OUT
* TO THE OPERATORS.
*
* PROC CSESLL
*
* ENTRY 1. STU/LL/U, STU/LL/N, OR MSG/LL/A SM.
*
* EXIT 1. ENTRY IN THE OPERATOR RESPONSE QUEUE WITH THE TEXT
* 2. MESSAGE TO THE C-LAYER VIA THE CONNECTION QUEUE.
*
#
#
**** PROC CSESLL - XREF LIST BEGINS.
#
XREF
BEGIN
PROC CSESLE; # SEND LOG (FILE) ENTRY #
PROC SSBSBF; # STORE BIT FIELD #
PROC SSTAQE; # ADD QUEUE ENTRY #
FUNC XCDD C(10); # CONVERT DECIMAL INTEGER TO DISPLAY CODE #
END
#
****
#
DEF LLS$TXTL # 70 #; # CHAR COUNT OF LOGLINK STATUS TEXT #
DEF LT$HN # 1 #; # LINK TYPE -- HOST-NPU #
DEF MNS$TXTL # 40 #; # CHAR COUNT OF -MESSAGE NOT SENT- TEXT #
DEF UNC$TXTL # 40 #; # CHAR COUNT OF -UNACTIONED COMMAND- TEXT #
ITEM CNST ; # CONSTANT ---> 1 #
ITEM CNST2; # CONSTANT ---> 2 #
ITEM CNST3; # CONSTANT ---> 3 #
ITEM HID1; # NODE I.D. OF LLINK SUPPORTED BY NPU1 #
ITEM HID2; # NODE I.D. OF LLINK SUPPORTED BY NPU2 #
ITEM I; # LOOP INDUCTION VARIABLE #
ITEM J; # LOOP INDUCTION VARIABLE #
ITEM NID1; # NODE I.D. ONE #
ITEM NID2; # NODE I.D. TWO #
#
THIS ARRAY IS USED AS A TEMPORARY TO STORE CHARACTER STRINGS THAT
WILL LATER BE PUT INTO A TEXT.
#
ARRAY CTEMP$WORD [00:00] S(1);
BEGIN
ITEM CTEMP C(00,00,10);
ITEM CTEMP1 C(00,54,01);
ITEM CTEMP3 C(00,42,03);
END
#
THIS ARRAY DEFINES THE LOGICAL LINK STATUS MESSAGE TEXT TO BE SENT
WHEN THIS PROC IS INVOKED.
#
ARRAY LLS$TXT [00:06] S(1);
BEGIN
ITEM LLS$TIM C(00,00,10);
ITEM LLS$LLK C(01,00,07) = ["LLINK: "];
ITEM LLS$LLN C(01,42,07);
ITEM LLS$C1 C(02,24,01) = [","];
ITEM LLS$ST C(02,30,02);
ITEM LLS$REG C(02,42,04) = [",RL="];
ITEM LLS$RL C(03,06,01);
ITEM LLS$C2 C(03,12,01) = [","];
ITEM LLS$LT C(03,18,03);
ITEM LLS$C3 C(03,36,01) = [","];
ITEM LLS$NN1 C(03,42,07);
ITEM LLS$SL1 C(04,24,01) = ["/"];
ITEM LLS$NID1 C(04,30,03);
ITEM LLS$C4 C(04,48,01) = [","];
ITEM LLS$NN2 C(04,54,07);
ITEM LLS$SL2 C(05,36,01) = ["/"];
ITEM LLS$NID2 C(05,42,03);
ITEM LLS$ZBYT U(06,00,60) = [ 0 ];
END
#
THIS ARRAY DEFINES THE -MESSAGE NOT SENT- TEXT SENT WHEN A
MSG/LL/A IS RECEIVED.
#
ARRAY MNS$TXT [00:00] S(4);
BEGIN
ITEM MNS$LLK C(00,00,07) = ["LLINK: "];
ITEM MNS$LNM C(00,42,07);
ITEM MNS$MSG C(01,24,18) = [", MESSAGE NOT SENT"];
ITEM MNS$ZBYT U(04,12,48) = [ 0 ];
END
#
THIS TABLE CONTAINS ALL THE POSSIBLE STATUS THAT A LOGICAL LINK
CAN HAVE. THE STATUS VALUE CAN BE USED TO INDEX INTO THIS TABLE.
#
DEF MX$ST # 5 #;
ARRAY ST$TABLE [01:MX$ST] S(1);
BEGIN
ITEM ST$VAL C(00,00,02) = [,
"DI",
"DN",
"EN",
"AC"
];
END
#
THIS ARRAY DEFINES THE -UNACTIONED COMMAND- MESSAGE TEXT THAT IS
SENT WHEN A STU/LL/U HAS A REASON CODE OF EIGHT.
#
ARRAY UNC$TXT [00:00] S(4);
BEGIN
ITEM UNC$TIM C(00,00,10) = [" "];
ITEM UNC$MSG C(01,00,19) = [" UNACTIONED COMMAND"];
ITEM UNC$ZBYT1 U(02,54,06) = [ 0 ];
ITEM UNC$ZBYT2 U(03,00,60) = [ 0 ];
END
#
THIS ARRAY DEFINES THE NAME USED WHEN A NAME CAN NOT BE FOUND
#
ARRAY UNK$TXT [00:00] S(1);
BEGIN
ITEM UNK$UNK C(00,18,07) = ["UNKNOWN"];
END
CONTROL EJECT;
# #
# CSESLL CODE BEGINS HERE #
# #
#
* FORMAT THE LOGICAL LINK STATUS MESSAGE TEXT. SEARCH THE LOGICAL
* LINK XREF TABLE FOR THIS LOGICAL LINK. IF FOUND THEN INSERT THE
* LOGLINK NAME, SEARCH THE NPUCB-S FOR THE NAMES OF THE NPU-S
* SUPPORTING THE LINK. INSERT THEM INTO THE TEXT. CONVERT THE NODE
* I.D.-S OF THE NPU-S AND INSERT THEM INTO THE TEXT. IF AN ENTRY WAS
* NOT FOUND, THEN INSERT -UNKNOWN- FOR THE LOGLINK AND NPU NAMES.
* CONVERT THE STATUS, REGULATION LEVEL, AND LINK TYPE AND APPEND
* THEM TO THE TEXT.
#
FOR I=0 STEP 1 WHILE NOT((STUN1[0] EQ LLX$HID1[I] AND
STUN2[0] EQ LLX$HID2[I]) OR
(STUN1[0] EQ LLX$HID2[I] AND
STUN2[0] EQ LLX$HID1[I])) AND
I LS LLXREFL/2
DO
BEGIN
END
IF I LS LLXREFL/2
THEN
BEGIN
CNST = 1;
CNST2 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST2,B<0,42>LLX$WORD[I]);
IF LLX$HID1[I] EQ STUN1[0]
THEN
BEGIN
NID1 = LLX$NID1[I];
NID2 = LLX$NID2[I];
HID1 = LLX$HID1[I];
HID2 = LLX$HID2[I];
END
ELSE
BEGIN
NID1 = LLX$NID2[I];
NID2 = LLX$NID1[I];
HID1 = LLX$HID2[I];
HID2 = LLX$HID1[I];
END
FOR J=0 STEP 1 WHILE NID1 NQ NPU$NID[J] AND
J LS CSNPCNT
DO
BEGIN
END
IF J LS CSNPCNT
THEN
BEGIN
CNST = 3;
CNST2 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST2,B<0,42>NPU$WORD[J]);
END
ELSE
BEGIN
CNST = 3;
CNST2 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST2,UNK$TXT);
END
CTEMP[0] = XCDD(1000 + HID1);
LLS$NID1[0] = CTEMP3[0];
FOR J=0 STEP 1 WHILE NID2 NQ NPU$NID[J] AND
J LS CSNPCNT
DO
BEGIN
END
IF J LS CSNPCNT
THEN
BEGIN
CNST = 4;
CNST2 = 54;
CNST3 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST3,B<0,42>NPU$WORD[J]);
END
ELSE
BEGIN
CNST = 4;
CNST2 = 54;
CNST3 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST3,UNK$TXT);
END
CTEMP[0] = XCDD(1000 + HID2);
LLS$NID2[0] = CTEMP3[0];
END
ELSE
BEGIN
CNST = 1;
CNST2 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST2,UNK$TXT);
CNST = 3;
CNST2 = 42;
SSBSBF(LLS$TXT,CNST,CNST2,CNST2,UNK$TXT);
CTEMP[0] = XCDD(1000 + STUN1[0]);
LLS$NID1[0] = CTEMP3[0];
CNST = 4;
CNST2 = 42;
CNST3 = 54;
SSBSBF(LLS$TXT,CNST,CNST3,CNST2,UNK$TXT);
CTEMP[0] = XCDD(1000 + STUN2[0]);
LLS$NID2[0] = CTEMP3[0];
END
LLS$ST[0] = ST$VAL[STUSTL[0]];
CTEMP[0] = XCDD(STURL[0]);
LLS$RL[0] = CTEMP1[0];
IF STULT[0] EQ LT$HN
THEN
BEGIN
LLS$LT[0] = "H-N";
END
ELSE
BEGIN
LLS$LT[0] = "H-H";
END
#
* IF THIS SM IS STU/LL/U, THEN APPEND THE TIME TO THE MESSAGE, SEND
* THE TEXT OFF TO THE OPERATOR RESPONSE QUEUE WITH AN AUDIENCE GROUP
* OF ONE (HOP AND ALL NOP-S). IF THE REASON CODE IS NON-ZERO THEN
* APPEND THE TIME TO THE -UNACTIONED COMMAND- TEXT AND SEND IT OFF
* TO THE OPERATOR RESPONSE QUEUE WITH AN AUDIENCE GROUP OF ONE.
#
IF WCB$SMID[0] EQ SMID"STULL"
THEN
BEGIN
LLS$TIM[0] = CTM$CLOCK;
WCB$WORD[1] = 0;
WCB$WC[1] = 2 + (LLS$TXTL / 10);
ABHWORD[1] = LLS$TXTL;
ABHADR[1] = AUDGR3$;
FOR J=0 STEP 1 WHILE NPU$NID[J] NQ ABHSN[0] AND
J LS CSNPCNT
DO
BEGIN
END
ABHABN[1] = J;
SSTAQE(P<ORQ>,WCBUF[1],ABH[1],LLS$TXT[0]);
CSESLE(ABHSN[0],WCBUF[1],LLS$TXT);
IF STURCL[0] NQ 0
THEN
BEGIN
WCB$WC[1] = 2 + (UNC$TXTL / 10);
ABHTLC[1] = UNC$TXTL;
SSTAQE(P<ORQ>,WCBUF[1],ABH[1],UNC$TXT);
CSESLE(ABHSN[0],WCBUF[1],UNC$TXT);
END
END
#
* IF THIS SM IS STU/LL/N OR MSG/LL/A, THEN SEND THE TEXT TO THE
* OPERATOR IDENTIFIED BY THE ACN VIA THE C-LAYER, WITH THE INPUT
* ALLOWED FLAG CLEARED.
#
ELSE # THIS SM IS NOT STU/LL/U, ASSUME IT TO BE#
BEGIN # STU/LL/N OR MSG/LL/A. #
WCB$WORD[1] = 0;
WCB$SMID[1] = SMID"TTEXT";
WCB$WC[1] = 2 + (LLS$TXTL / 10) - 1;
ABHWORD[1] = 0;
ABHADR[1] = ABHCN[0];
ABHTLC[1] = LLS$TXTL - 10;
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],LLS$TXT[1]);
#
* IF THIS SM IS MSG/LL/A, SEND A -MESSAGE NOT SENT- TEXT TO THE
* OPERATOR VIA THE C-LAYER.
#
IF WCB$SMID[0] EQ SMID"MSGLLA"
THEN
BEGIN
WCB$WC[1] = 2 + (MNS$TXTL / 10);
ABHTLC[1] = MNS$TXTL;
WCB$IAF[1] = TRUE; # SET INPUT ALLOWED #
CNST = 0;
CNST2 = 42;
SSBSBF(MNS$TXT,CNST,CNST2,CNST2,B<0,42>LLX$WORD[I]);
SSTAQE(P<CNQ>,WCBUF[1],ABH[1],MNS$TXT);
END
END
RETURN; # **** RETURN **** #
END # CSESLL #
TERM