*DECK     CSESSM
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXTAPSS 
USETEXT TXTSMCS 
USETEXT TXTSUSS 
      PROC CSESSM;
# TITLE - SEND SUPERVISION MESSAGE.                                    #
      BEGIN 
# 
**    CSESSM - SEND SUPERVISION MESSAGE.
* 
*     D.K. ENDO    82/03/18 
* 
*     THIS PROCEDURE SEND MESSAGES TO OPERATORS INDICATING THE SUPERVI- 
*     SION OF AN NPU BY CS. 
* 
*     PROC CSESSM 
* 
*     ENTRY        1. SUP/IN/R, SUP/CB/R, OR SUP/IN/A SM. 
* 
*     EXIT         2. ENTRIES IN THE OPERATOR RESPONSE QUEUE WITH THE 
*                     MESSAGES INFORMING SUPERVISION STATUS.
# 
# 
****  PROC CSESSM - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC CSESLE;         # SEND LOG (FILE) ENTRY                   #
        PROC SSCATR;         # ACCEPT TIMER REQUEST                    #
        PROC SSBSBF;         # STORE BIT FIELD                         #
        PROC SSTAQE;         # ADD QUEUE ENTRY                         #
        FUNC XCDD C(10);     # CONVERT DECIMAL INTEGER TO DISPLAY CODE #
        FUNC XCHD U;         # CONVERT HEX INTEGER TO DISPLAY CODE     #
        END 
# 
****
# 
      DEF GOR$TXTL # 30 #;   # CHAR COUNT OF -GO REQUIRED- TEXT        #
      DEF LEM$TXTL # 70 #;   # CHAR COUNT OF -LEVEL MISMATCH- TEXT     #
      DEF LSP$TXTL # 50 #;   # CHAR COUNT OF -LOST SUPERVISION- TEXT   #
      DEF NCM$TXTL # 80 #;   # CHAR COUNT OF -NCF MISMATCH- TEXT       #
      DEF NPS$TXTL # 40 #;   # CHAR COUNT OF NPU STATUS TEXT           #
      DEF PCN$TXTL # 60 #;   # CHAR COUNT OF -PREVIOUS NS/CS- TEXT     #
      DEF SPG$TXTL # 40 #;   # CHAR COUNT OF -SUPERVISION GAIN- TEXT   #
      DEF UNS$TXTL # 50 #;   # CHAR COUNT OF -UNKNOWN NPU- TEXT        #
      DEF VLV$TXTL # 60 #;   # CHAR COUNT OF -VERSION/LEVEL/VARIENT- TX#
  
  
      ITEM CNST1;            # CONSTANT ---> 1                         #
      ITEM CNST2;            # CONSTANT ---> 2                         #
      ITEM CNST3;            # CONSTANT ---> 3                         #
      ITEM NODE$ID;          # NPU NODE I.D.                           #
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
  
  
# 
      THIS ARRAY DEFINES A TEMPORARY FOR STORING A CHARACTER STRING TO
      BE LATER PLACED IN A TEXT 
# 
      ARRAY CTEMP$WORD [00:00] S(1);
        BEGIN 
        ITEM CTEMP      C(00,00,10);
        ITEM CTEMP3     C(00,42,03);
        END 
  
  
# 
      THIS ARRAY DEFINES THE -GO REQUIRED- MESSAGE TEXT THAT IS SENT
      OUT WHEN A SUP/GO/R IS RECEIVED.
# 
      ARRAY GOR$TXT [00:00] S(3); 
        BEGIN 
        ITEM GOR$TIM    C(00,00,10) = [" "];
        ITEM GOR$MSG    C(01,00,15) = [" GO IS REQUIRED"];
        ITEM GOR$ZBYT   U(02,30,30) = [0];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -LEVEL MISMATCH- MESSAGE TEXT SENT WHEN A
      SUP/IN/A SM IS SENT WITH NPU$STAT OF LEVMIS.
# 
      ARRAY LEM$TXT [00:00] S(7); 
        BEGIN 
        ITEM LEM$TIM    C(00,00,10) =[" "]; 
        ITEM LEM$MSG    C(01,00,41) = 
                       [" NCF / CCP VERSION MISMATCH, RELOAD WITH "]; 
        ITEM LEM$VE1    U(05,06,12) ; 
        ITEM LEM$DOT    C(05,18,1) = ["."]; 
        ITEM LEM$VE2    U(05,24,6); 
        ITEM LEM$LEV    C(05,30,09) = [" CCP VERSION"]; 
        ITEM LEM$ZBYT   U(06,36,24) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -LOST SUPERVISION- MESSAGE TEXT THAT IS
      SENT OUT WHEN A SUP/CB/R IS RECEIVED. 
# 
      ARRAY LSP$TXT [00:00] S(5); 
        BEGIN 
        ITEM LSP$TIM    C(00,00,10) = [" "];
        ITEM LSP$MSG    C(01,00,36) = 
                             [" CONNECTION BROKEN, SUPERVISION LOST"];
        ITEM LSP$ZBYT   U(04,36,24) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -NCF MISMATCH- MESSAGE TEXT SENT WHEN A
      SUP/IN/A SM IS SENT AND NPU$STAT IS NCFMIS. 
# 
      ARRAY NCM$TXT [00:00] S(8); 
        BEGIN 
        ITEM NCM$TIM    C(00,00,10) =[" "]; 
        ITEM NCM$MSG    C(01,00,31) = 
                             [" NCF MISMATCH/CCP NCF VERSION: "]; 
        ITEM NCM$VE1    U(04,06,18);
        ITEM NCM$LEV    C(04,24,09) = [", LEVEL: "];
        ITEM NCM$LE1    U(05,18,18);
        ITEM NCM$VAR    C(05,36,11) = [", VARIANT: "];
        ITEM NCM$VA1    U(06,42,18);
        ITEM NCM$ZBYT   U(07,00,60) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE NPU STATUS MESSAGE THAT IS SENT WHEN THIS
      PROC GETS INVOKED.  IT IS THE FIRST TEXT SENT.
# 
      ARRAY NPS$TXT [00:00] S(4); 
        BEGIN 
        ITEM NPS$TIM    C(00,00,10);
        ITEM NPS$NPU    C(01,00,05) = ["NPU: "];
        ITEM NPS$NNM    C(01,30,07);
        ITEM NPS$ST     C(02,12,04) = [",AC,"]; 
        ITEM NPS$NID    C(02,36,03);
        ITEM NPS$ZBYT1  U(02,54,06) = [ 0 ];
        ITEM NPS$ZBYT2  U(03,00,60) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -PREVIOUS CS/NS- MESSAGE TEXT SENT WENT A
      SUP/IN/R SM IS RECEIVED.
# 
      ARRAY PCN$TXT [00:00] S(6); 
        BEGIN 
        ITEM PCN$TIM    C(00,00,10) =[" "]; 
        ITEM PCN$PCS    C(01,00,19) = [" PREVIOUS CS NODE: "];
        ITEM PCN$PS     C(02,54,03);
        ITEM PCN$PNC    C(03,12,20) = [", PREVIOUS NS NODE: "]; 
        ITEM PCN$PL     C(05,12,03);
        ITEM PCN$ZBYT   U(05,30,30) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -SUPERVISION GAINED- MESSAGE TEXT SENT WHEN
      A SUP/IN/R SM IS RECEIVED.
# 
      ARRAY SPG$TXT [00:00] S(4); 
        BEGIN 
        ITEM SPG$TIM    C(00,00,10) = [" "];
        ITEM SPG$MSG    C(01,00,19) = [" SUPERVISION GAINED"];
        ITEM SPG$ZBYT1  U(02,54,06) = [ 0 ];
        ITEM SPG$ZBYT2  U(03,00,60) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE TIMER REQUEST BLOCK USED TO REPEAT THE 
      *NEED GO* MESSAGE IF A *GO* HAS NOT BEEN GIVEN BY AN NPU. 
# 
      ARRAY TRB [00:00] S(4); 
        BEGIN 
        ITEM TRB$SMID   U(00,00,12) = [SMID"SUPGOI"]; 
        ITEM TRB$WC     U(00,48,12) = [4];
        ITEM TRB$DN     U(01,06,08);             # DESINTATION NODE    #
        ITEM TRB$CNUM   U(01,18,18);             # CANCEL NUMBER       #
        ITEM TRB$PFCSFC U(03,00,08) = [SUPGO];   # PFC SFC FOR SUP/GO  #
        ITEM TRB$DELAY  U(03,24,18) = [DTIME$];  # SEND EVERY MINUTE   #
        ITEM TRB$QNUM   U(03,42,18);             # QUEUE NUMBER        #
        END 
  
  
# 
      THIS ARRAY DEFINES THE -UNKNOWN NPU SUPERVISION- MESSAGE, SENT
      WHEN A SUP/IN/UN SM IS RECEIVED.
# 
      ARRAY UNS$TXT [00:00] S(5); 
        BEGIN 
        ITEM UNS$TIM    C(00,00,10) = [" "];
        ITEM UNS$MSG1   C(01,00,20) = [" SUPERVISION REQUEST"]; 
        ITEM UNS$MSG2   C(03,00,17) = [" FROM UNKNOWN NPU"];
        ITEM UNS$ZBYT   U(04,42,18) = [ 0 ];
        END 
  
  
# 
      THIS ARRAY DEFINES THE -VERSION/LEVEL/VARIANT- MESSAGE TEXT SENT
      WHEN A SUP/IN/R SM IS RECEIVED. 
# 
      ARRAY VLV$TXT [00:00] P(7) ;
      BEGIN 
        ITEM VLV$TIM    C(00,00,10) = [" "];
        ITEM VLV$VER    C(01,00,14) = [" CCP VERSION: "]; 
        ITEM VLV$VE1    U(02,24,24);
        ITEM VLV$LEV    C(03,00,10) = [", LEVEL:  "]; 
        ITEM VLV$LE1    U(04,00,24);
        ITEM VLV$VAR    C(04,24,11) = [", VARIANT: "];
        ITEM VLV$VA1    U(05,30,24);
        ITEM VLV$ZBYT   U(05,54,06) = [0];
        ITEM VLV$ZWRD   U(06,00,60) = [0] ; 
        END 
      CONTROL EJECT;
#                                                                      #
#                            CSESSM CODE BEGINS HERE                   #
#                                                                      #
# 
*     IF THIS SM IS SUP/IN/A THEN SET THE AUDIENCE GROUP TO TWO (HOP AND
*     CONTROLLING NOP) AND SET THE NODE I.D. TO THE DESTINATION NODE
*     VALUE, ELSE SET THE AUDIENCE GROUP TO ONE (HOP AND ALL NOP-S) AND 
*     SET THE NODE I.D. TO THE SOURCE NODE I.D. VALUE.  APPEND THE
*     CURRENT TIME, THE NPU NAME, AND THE NODE I.D. TO THE MESSAGE. 
*     SEND THE MESSAGE OFF TO THE OPERATOR RESPONSE QUEUE,
# 
  
  
      WCB$WORD[1] = 0;
      WCB$WC[1] = 2 + (NPS$TXTL / 10);
  
  
      ABHWORD[1] = 0; 
      ABHTLC[1] = NPS$TXTL; 
  
  
      IF WCB$SMID[0] EQ SMID"SUPINA" OR 
         WCB$SMID[0] EQ SMID"SUPGO" OR
         WCB$SMID[0] EQ SMID"SUPGOI" OR 
         WCB$SMID[0] EQ SMID"SUPINUN" 
      THEN
        BEGIN 
        ABHADR[1] = AUDGR4$;
        END 
      ELSE
        BEGIN 
        ABHADR[1] = AUDGR1$;
        END 
  
  
      IF WCB$SMID[0] EQ SMID"SUPCB" OR
         WCB$SMID[0] EQ SMID"SUPGO" OR
         WCB$SMID[0] EQ SMID"SUPINUN" 
      THEN
        BEGIN 
        NODE$ID = ABHSN[0]; 
        END 
      ELSE
        BEGIN 
        NODE$ID = ABHDN[0]; 
        END 
  
  
      NPS$TIM[0] = CTM$CLOCK; 
  
  
      FOR I=0 STEP 1 WHILE NODE$ID NQ NPU$NID[I] AND
                           I LS CSNPCNT 
      DO
        BEGIN 
        END 
  
      CNST1 = 1;
      CNST2 = 30; 
      CNST3 = 42; 
  
      IF I LS CSNPCNT 
      THEN
        BEGIN 
        IF (WCB$SMID[0] EQ SMID"SUPGO" OR WCB$SMID[0] EQ SMID"SUPGOI")
           AND NPU$CNOP[I] EQ 0 
        THEN
          BEGIN 
          ABHADR[1] = AUDGR2$;
          END 
        SSBSBF(NPS$TXT,CNST1,CNST2,CNST3,B<0,42>NPU$WORD[I]); 
        END 
      ELSE
        BEGIN 
        SSBSBF(NPS$TXT,CNST1,CNST2,CNST3,"   UNKNOWN"); 
        END 
  
# 
*     IF THIS SM IS AN INTERNAL SUP/GO REQUEST AND A GO WAS ALREADY 
*     RECEIVED(GO FLAG IS NOT SET), THEN EXIT.
# 
      IF WCB$SMID[0] EQ SMID"SUPGOI" AND
         NOT NPU$GFLAG[I] 
      THEN
        BEGIN 
        RETURN;              # **** RETURN ****                        #
        END 
  
  
      ABHABN[1] = I;
      CTEMP[0] = XCDD(1000 + NODE$ID);
      NPS$NID[0] = CTEMP3[0]; 
  
  
      SSTAQE(P<ORQ>,WCBUF[1],ABH[1],NPS$TXT[0]);
      CSESLE(NODE$ID,WCBUF[1],NPS$TXT); 
  
  
# 
*     IF THIS SM IS SUP/IN/R, THEN SEND THE -SUPERVISION GAINED- MSG
*     OFF TO THE OPERATOR RESPONSE QUEUE. 
# 
      IF WCB$SMID[0] EQ SMID"SUPINN"
      THEN
        BEGIN 
        WCB$WC[1] = 2 + (SPG$TXTL / 10);
  
  
        ABHTLC[1] = SPG$TXTL; 
        ABHADR[1] = AUDGR3$ ; 
  
  
  
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],SPG$TXT[0]);
        CSESLE(NODE$ID,WCBUF[1],SPG$TXT); 
  
  
# 
*     CONVERT THE CCP VERSION, LEVEL, AND VARIANT VALUES AND APPEND THEM
*     TO THE MESSAGE TEXT AND SEND IT OFF TO THE OPERATOR RESPONSE Q. 
# 
  
  
        VLV$VE1[0] = XCHD(SUPVCVE[0]);
        IF SUPVCVE[0] GQ X"0037"
        THEN
          BEGIN                          # CCP VERSION IS 2.4.X        #
          V24FLAG = TRUE ;
          CCPVERS = XCHD(SUPVCVE[0]) ;   # ACTUAL VERSION OF CCP       #
          END 
  
  
        VLV$LE1[0] = XCHD(SUPVCLE[0]);
  
  
        VLV$VA1[0] = XCHD(SUPVCVA[0]);
  
  
        WCB$WC[1] = 2 + (VLV$TXTL / 10);
  
  
        ABHTLC[1] = VLV$TXTL; 
  
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],VLV$TXT[0]);
        CSESLE(NODE$ID,WCBUF[1],VLV$TXT); 
  
  
# 
*     AND CONVERT THE PREVIOUS CS AND NS NODE I.D.-S AND APPEND THEM TO 
*     THE TEXT AND SEND THE TEXT OFF TO THE OPERATOR RESPONSE QUEUE.
# 
        CTEMP[0] = XCDD(1000 + SUPPS[0]); 
        CNST1 = 2;
        CNST2 = 54; 
        CNST3 = 18; 
        SSBSBF(PCN$TXT,CNST1,CNST2,CNST3,CTEMP$WORD); 
  
  
        CTEMP[0] = XCDD(1000 + SUPPL[0]); 
        PCN$PL[0] = CTEMP3[0];
  
  
        WCB$WC[1] = 2 + (PCN$TXTL / 10);
        ABHTLC[1] = PCN$TXTL; 
  
  
  
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],PCN$TXT[0]);
        CSESLE(NODE$ID,WCBUF[1],PCN$TXT); 
        END 
# 
*     IF THIS SM IS SUP/CB/R, THEN SEND THE -LOST SUPERVISION-MESSAGE 
*     TEXT OFF TO THE OPERATOR RESPONSE QUEUE.
# 
      ELSE IF WCB$SMID[0] EQ SMID"SUPCB"
      THEN
        BEGIN 
  
  
        WCB$WC[1] = 2 + (LSP$TXTL / 10);
        ABHTLC[1] = LSP$TXTL; 
        ABHADR[1] = AUDGR3$ ; 
  
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],LSP$TXT); 
        CSESLE(NODE$ID,WCBUF[1],LSP$TXT); 
        END 
# 
*     IF THIS SM IS SUP/IN/A, THEN SEND THE -NCF/CCP MISMATC TEXT TO
*     THE OPERATOR RESPONSE QUEUE.
# 
      ELSE IF WCB$SMID[0] EQ SMID"SUPINA" 
      THEN
        IF NPU$STAT[I] EQ SUPSTAT"NCFMIS" THEN
           BEGIN
  
  
           NCM$VE1[0] = XCHD(SUPVCVE[0]); 
  
  
           NCM$LE1[0] = XCHD(SUPVCLE[0]); 
  
  
           NCM$VA1[0] = XCHD(SUPVCVA[0]); 
  
  
           WCB$WC[1] = 2 + (NCM$TXTL / 10); 
           ABHTLC[1] = NCM$TXTL;
  
  
           SSTAQE(P<ORQ>,WCBUF[1],ABH[1],NCM$TXT);
           CSESLE(NODE$ID,WCBUF[1],NCM$TXT);
           END
        ELSE           #  NPU$STAT EQ SUPSTAT"LEVMIS"  #
           BEGIN
  
           LEM$VE1[0] = XCHD(B<4,8>SUPVCVE[0]);  # SET HIGH LEVEL NUM  #
  
           LEM$VE2[0] = B<12,6>CSNCFLEV; # LST DIGIT OF NCF LVL TO MSG #
  
           WCB$WC[1] = 2 + (LEM$TXTL / 10); 
           ABHTLC[1] = LEM$TXTL;
  
           SSTAQE(P<ORQ>,WCBUF[1],ABH[1],LEM$TXT);
           CSESLE(NODE$ID,WCBUF[1],LEM$TXT);
           END
  
# 
*     IF THIS SM IS SUP/GO/R, THEN CHECK IF A -GO- HAS BEEN RECEIVED
*     YET.  IF NOT, THEN SEND THE -GO REQUIRE- MESSAGE TEXT OF TO THE 
*     OPERATOR RESPONSE QUEUE AND MAKE A TIMER REQUEST FOR ANOTHER -GO- 
*     MESSAGE TO BE SENT. 
# 
      ELSE IF WCB$SMID[0] EQ SMID"SUPGO" OR 
              WCB$SMID[0] EQ SMID"SUPGOI" 
      THEN
        BEGIN 
  
        IF WCB$SMID[0] EQ SMID"SUPGO" 
        THEN
          BEGIN 
          NPU$GFLAG[I] = TRUE;
          END 
  
        IF NPU$GFLAG[I] 
        THEN
          BEGIN 
  
          WCB$WC[1] = 2 +(GOR$TXTL / 10); 
          ABHTLC[1] = GOR$TXTL; 
  
          SSTAQE(P<ORQ>,WCBUF[1],ABH[1],GOR$TXT[0]);
          CSESLE(NODE$ID,WCBUF[1],GOR$TXT); 
  
          TRB$DN[0] = NODE$ID;
          TRB$QNUM[0] = LOC(P<EVQ>);
          SSCATR(TRB);
  
          NPU$CNUM[I] = TRB$CNUM[0];
          END 
        END 
  
  
# 
      IF THIS SM IS SUP/IN/UN, THEN SEND THE -UNKNOWN NPU- MESSAGE OFF
      TO THE OPERATOR RESPONSE QUEUE. 
# 
      ELSE IF WCB$SMID[0] EQ SMID"SUPINUN"
      THEN
        BEGIN 
  
        WCB$WC[1] = 2 + (UNS$TXTL / 10);
  
        SSTAQE(P<ORQ>,WCBUF[1],ABH[1],UNS$TXT); 
        CSESLE(NODE$ID,WCBUF[1],UNS$TXT); 
        END 
  
  
      RETURN;                # **** RETURN ****                        #
      END # CSESSM #
      TERM
