*DECK CSESAM USETEXT TEXTOV USETEXT TEXTCS USETEXT TEXTSS USETEXT TXTAPSS USETEXT TXTSMCS PROC CSESAM; # TITLE - SEND ALARM(AND ERROR LOG) MESSAGE. # BEGIN # ** CSESAM - SEND ALARM MESSAGE. * * D.K. ENDO 82/03/31 * * THIS PROCEDURE FORMATS THE ALARMS TO THE OPERATOR FROM THE IN- * COMING ALM/OP/U SM, AND THE ENTRIES TO THE ERROR LOG FILE FROM THE * INCOMING LOG/ER/U SM. * * PROC CSESAM * * ENTRY 1. ALM/OP/U OR LOG/ER/U SM FROM THE EVENT QUEUE. * * EXIT 1. FORMATTED ALARM TO THE OPERATOR RESPONSE QUEUE. * 2. FORMATTED ENTRY TO THE ERROR LOG FILE. * # # **** PROC CSESAM - XREF LIST BEGINS. # XREF BEGIN PROC CSESLE; # SEND LOG (FILE) ENTRY # PROC MESSAGE; # PUTS MESSAGES IN SYSTEMS FILES # PROC SSBSBF; # STORE BIT FIELD # FUNC SSDCAD U; # CONVERT ASCII TO DISPLAY CODE # PROC SSTAQE; # ADD QUEUE ENTRY # FUNC XCDD U; # CONVERT DECIMAL INTEGER TO DISPLAY CODE # FUNC XCHD U; # CONVERT HEX INTEGER TO DISPLAY CODE # END # **** # DEF ERRLG # 4 #; # MESSAGE IDENTIFIER FOR THE ERROR LOG # DEF LNM$TXTL # 30 #; # CHAR COUNT FOR LINE NAME TEXT # DEF NNM$TXTL # 40 #; # CHAR COUNT FOR NPU NAME TEXT # DEF NONTXT$ # 4 #; # NUMBER OF CHARS THAT ARE NOT TEXT # ITEM A$CHAR U = 0; # ONE ASCII CHARACTER # ITEM BPOS; # BIT POSITION OF SM TEXT POINTER # ITEM CHARCNT; # MESSAGE CHARACTER COUNT # ITEM CHARPOS; # BIT POSITION OF MESSAGE TEXT POINTER # ITEM CNST1; # CONSTANT ---> 1 # ITEM CNST2; # CONSTANT ---> 2 # ITEM CNST3; # CONSTANT ---> 3 # ITEM I; # LOOP INDUCTION VARIABLE # ITEM ITEMP U = 0; # UNSIGNED INTEGER TEMPORARY # ITEM MCC; # MESSAGE CHARACTER COUNT # ITEM MWC; # WORD COUNT OF SM TEXT POINTER # ITEM WC; # WORD COUNT OF MESSAGE TEXT POINTER # # THIS ARRAY DEFINES THE ALARM TO OPERATOR TEXT SENT WHEN A ALM/OP/U SM IS RECEIVED. # DEF MX$ALM # 7 #; ARRAY ALM$TXT [01:MX$ALM] S(1); BEGIN ITEM ALM$TIM C(00,00,10) = [" "]; ITEM ALM$WORD U(00,00,60); END # THIS ARRAY DEFINES THE FORMAT OF THE ERROR LOG ENTRY SENT WHEN A LOG/ER/U SM IS RECEIVED. # ARRAY ELT$TXT [00:00] S(4); BEGIN ITEM ELT$NW01 C(00,00,06) = ["NW01, "]; ITEM ELT$NID U(00,36,18); ITEM ELT$C1 C(00,54,01) = [","]; ITEM ELT$EC U(01,00,12); ITEM ELT$BYT1 U(01,12,12); ITEM ELT$BYT2 U(01,24,12); ITEM ELT$BYT3 U(01,36,12); ITEM ELT$P1 C(01,48,01); ITEM ELT$ZBYT1A U(01,54,06); ITEM ELT$ZBYT1B I(02,00,60); ITEM ELT$BYT4 U(01,48,12); ITEM ELT$BYT5 U(02,00,12); ITEM ELT$BYT6 U(02,12,12); ITEM ELT$P2 C(02,24,01) = ["."]; ITEM ELT$ZBYT2 U(02,30,30) = [ 0 ]; END # * THIS ARRAY DEFINES THE LINE NAME TEXT SENT WITH THE OPERATOR * MESSAGE WHEN THE PORT IS SPECIFIED AND A NAME IS FOUND. * # ARRAY LNM$TXT [00:00] S(3); BEGIN ITEM LNM$TIM C(00,00,10) = [" "]; ITEM LNM$LINE C(01,00,06) = ["LINE--"]; ITEM LNM$LNM C(01,36,07); ITEM LNM$ZBYT U(02,18,42) = [0]; END # * THIS ARRAY DEFINES THE NPU NAME MESSAGE SENT WITH THE ALARM * MESSAGE. # ARRAY NNM$TXT [00:00] S(4); BEGIN ITEM NNM$TIM C(00,00,10); ITEM NNM$NPU C(01,00,10) = ["FROM NPU--"]; ITEM NNM$NNM C(02,00,07); ITEM NNM$C1 C(02,42,03) = [": "]; ITEM NNM$ZBYT U(03,00,60) = [0]; END # THIS ARRAY DEFINES THE NAME USED WHEN AN NPU NAME CAN NOT BE FOUND. # ARRAY UNK$TXT [00:00] S(1); BEGIN ITEM UNK$NAME C(00,18,17) = ["UNKNOWN"]; END CONTROL EJECT; # # # CSESAM CODE BEGINS HERE # # # # * IF THIS SM IS ALM/OP/U, THEN APPEND THE CURRENT TIME TO THE TEXT, * SEARCH THE NPUCB-S FOR THIS NPU, IF FOUND APPEND THE NAME TO THE * TEXT, ELSE APPEND -UNKNOWN- FOR THE NAME, CONVERT THE PORT TO * DISPLAY CODE AND APPEND IT TO THE TEXT, CONVERT THE ALARM TEXT TO * DISPLAY CODE AND APPEND IT TO THE TEXT. SEND THE TEXT TO THE * OPERATOR RESPONSE QUEUE WITH AN AUDIENCE GROUP OF TWO. # IF WCB$SMID[0] EQ SMID"ALMOP" THEN BEGIN NNM$TIM[0] = CTM$CLOCK[0]; FOR I=0 STEP 1 WHILE ABHSN[0] NQ NPU$NID[I] AND I LS CSNPCNT DO BEGIN END IF I LS CSNPCNT THEN BEGIN NNM$NNM[0] = NPU$NAME[I]; END ELSE BEGIN NNM$NNM[0] = UNK$NAME[0]; END WCB$WORD[1] = 0; WCB$WC[1] = 2 + (NNM$TXTL / 10); ABHWORD[1] = NNM$TXTL; ABHADR[1] = AUDGR4$; ABHABN[1] = I; SSTAQE(P,WCBUF[1],ABH[1],NNM$TXT); CSESLE(ABHSN[0],WCBUF[1],NNM$TXT); FOR I=2 STEP 1 UNTIL MX$ALM DO BEGIN ALM$WORD[I] = 0; END A$CHAR = 0; BPOS = 32; CHARCNT = 1; MWC = 0; MCC = ABHTLC[0] - NONTXT$; FOR WC=2 STEP 1 WHILE CHARCNT LQ MCC AND WC LS MX$ALM DO BEGIN FOR CHARPOS=0 STEP 6 WHILE CHARCNT LQ MCC AND CHARPOS LS 60 DO BEGIN IF BPOS LQ 52 THEN BEGIN A$CHAR = BMSG$WORD[MWC]; BALM$WORD[WC] = SSDCAD(A$CHAR); BPOS = BPOS + 8; END ELSE IF BPOS EQ 56 THEN BEGIN B<52,4>A$CHAR = BMSG$WORD[MWC]; MWC = MWC + 1; B<56,4>A$CHAR = B<0,4>MSG$WORD[MWC]; BALM$WORD[WC] = SSDCAD(A$CHAR); BPOS = 4; END ELSE BEGIN MWC = MWC + 1; A$CHAR = B<0,8>MSG$WORD[MWC]; BALM$WORD[WC] = SSDCAD(A$CHAR); BPOS = 8; END CHARCNT = CHARCNT + 1; END END IF CHARPOS LQ 48 THEN BEGIN WC = WC - 1; END WCB$WC[1] = 2 + WC; ABHTLC[1] = WC * 10; SSTAQE(P,WCBUF[1],ABH[1],ALM$TXT); CSESLE(ABHSN[0],WCBUF[1],ALM$TXT); IF ALMP[0] NQ 0 THEN BEGIN FOR I=0 STEP 1 WHILE NOT (ALMP[0] EQ LIX$PORT[I] AND ABHSN[0] EQ LIX$NID[I]) AND I LQ LIXL DO BEGIN END IF I LQ LIXL THEN BEGIN WCB$WC[1] = 2 + (LNM$TXTL / 10); ABHTLC[1] = LNM$TXTL; CNST1 = 1; CNST2 = 36; CNST3 = 42; SSBSBF(LNM$TXT,CNST1,CNST2,CNST3,B<0,42>LIX$NAME[I]); SSTAQE(P,WCBUF[1],ABH[1],LNM$TXT); CSESLE(ABHSN[0],WCBUF[1],LNM$TXT); END END END # * IF THIS SM IS LOG/ER/U, THEN CONVERT SOURCE NODE I.D. AND APPEND * IT TO THE TEXT. CONVERT THE ERROR CODE AND APPEND IT TO THE TEXT. * IF THE ERROR CODE -FF- HEX THEN CONVERT THE FIRST THREE BYTES OF * DATA AND APPEND THEM TO THE TEXT, ELSE CONVERT THE FIRST SIX BYTES * OF INFORMATION AND APPEND THEM TO THE TEXT. SEND THE TEXT OFF TO * THE ERROR LOG FILE. # ELSE BEGIN ELT$NID[0] = XCDD(ABHSN[0]); ELT$EC[0] = XCHD(LOGEC[0]); ELT$BYT1[0] = XCHD(LOGB1[0]); ELT$BYT2[0] = XCHD(LOGB2[0]); ELT$BYT3[0] = XCHD(LOGB3[0]); IF LOGEC[0] EQ X"FF" THEN BEGIN ELT$P1[0] = "."; ELT$ZBYT1A[0] = 0; ELT$ZBYT1B[0] = 0; END ELSE BEGIN ELT$BYT4[0] = XCHD(LOGB4[0]); ITEMP = 0; B<52,4>ITEMP = LOGB51[0]; B<56,4>ITEMP = LOGB52[0]; ELT$BYT5[0] = XCHD(ITEMP); ELT$BYT6[0] = XCHD(LOGB6[0]); ELT$P2[0] = "."; ELT$ZBYT2[0] = 0; END MESSAGE(ELT$TXT,ERRLG); END RETURN; # **** RETURN **** # END # CSESAM # TERM