*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,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,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,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,WCBUF[1],ABH[1],MNS$TXT); END END RETURN; # **** RETURN **** # END # CSESLL # TERM