*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
