*DECK CSSAEN USETEXT TEXTCS; USETEXT TEXTSS; USETEXT TXTSMCS; USETEXT TXTAPSS; USETEXT TXTSUSS; USETEXT TXCMDCS; PROC CSSAEN; # TITLE CSSAEN - ACTION ENABLE COMMAND # BEGIN # CSSAEN # # ** CSSAEN - ACTION ENABLE COMMAND. * * C. BRION 82/05/18. * * THIS PROCEDURE PROCESSES THE RESOLVED ENABLE COMMAND AND SENDS * THE APPROPRIATE SUPERVISORY MESSAGE TO AN NPU OR NPUS AND THE * COMMAND TEXT IS LOGGED VIA A SUPERVISION EVENT. * * PROC CSSAEN * * ENTRY: * HDRCMD = ONE WORD ARRAY THAT COMPRISES THE COMMAND HEADER WORD. * * PARMS = ARRAY THAT CONTAINS THE COMMAND TEXT STRING, THE SYNTAX * PARAMETER LIST AND THE ADDRESS PARAMETER LIST. * * EXIT: * AN ENABLE SUPERVISORY MESSAGE WILL HAVE BEEN SENT TO THE APPRO- * PRIATE NPU(S). * * A SUPERVISION EVENT IS SENT IN ORDER TO LOG THE COMMAND. * * A NULL TERMINAL TEXT IS SENT TO THE ORIGIN OPERATOR IN ORDER TO * CAUSE THE READY.. MESSAGE. * # # **** PROC CSSAEN XREF LIST. # XREF BEGIN PROC SSBEBF; # SS-EXTRACT BIT FLD # PROC SSBSBF; # SS-STORE BIT FLD # FUNC SSDCDA; # CONVERT DCD TO ASCII # PROC MOVE; # MACREL MOVE CHARACTERS # PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY # END # **** # # # DEF NPINDX # HDR$TXWCNT[0] + 3 # ; # INDEX FOR NPU # # * ENABLST - LIST OF ENABLE ELEMENTS. # STATUS ENABLST TERM, TERMS, LINE, LINES, TRUNK, TRUNKS, LLINK, LLINKS, SVC; # * ITEMS # ITEM ELINDX U; # ELEMENT INDEX # ITEM MOVECNT U; # WORD COUNT FOR MOVE # ITEM ELMID S:ENABLST; # ELEMENT ID # ITEM FINAPIX U; ITEM BEGAPIX U; ITEM I,Y U; ITEM NPUORD U; ITEM DORD,DBIT U; ITEM AORD,ABIT U; ITEM SINGCHAR U; # * BLDENSM - BUILD ENABLE SM SWITCH. # SWITCH BLDENSM:ENABLST BLDTERM:TERM, BLDTERMS:TERMS, BLDLINE:LINE, BLDLINES:LINES, BLDTRUNK:TRUNK, BLDTRUNKS:TRUNKS, BLDLLINK:LLINK, BLDLLINKS:LLINKS, BLDSVC:SVC; ARRAY IGNOREMSG S(7) ; BEGIN ITEM IGMSGW U(00,00,60) ; ITEM IGMSG1 C(00,00,26) =[" COMMAND IGNORED- VERSION "] ; ITEM IGMSG2 U(02,36,24) ; ITEM IGMSG3 C(03,00,30) = [" CCP UNABLE TO ACTION COMMAND "] ; ITEM IGMSG4 U(06,00,60) =[0] ; END # * INITIALIZE LOCAL VARIABLES AND THE OUTGOING SM HEADER AND BODY * STORAGE AREAS. # ABHWORD[1] = 0; WCB$WORD[1] = 0; SPMSG0[1] = 0; PFC[1] = ENB; # SET ENABLE SM PFC # ELINDX = HDR$TXWCNT[0] + 1; # SET PARAMETER INDEX FOR # # ELEMENT TO NOP KEYWORD # # * IF THE NOP KEYWORD IS PRESENT IN THE SYNTAX PARAMETER LIST, THEN * THE ELEMENT INDEX MUST BE MOVED. # IF PAR$PCODE[ELINDX] EQ "NOP" THEN ELINDX = ELINDX + 1; # * ELINDX IS SET TO POINT TO THE COMMAND ELEMENT THAT IS TO BE * ENABLED. EITHER ONE OF A TERMINAL, TERMINALS ON A LINE, TERMINALS * ON A NPU, LINE, LINE ON A NPUS, TRUNK, TRUNKS ON A NPU, A * LOGICAL LINK, OR A ARCHETYPE SVC MAY BE THE ELEMENT TYPE TO * BE ENABLED. * * SET THE LOCAL ELEMENT IDENTIFIER BASED ON THE VALUE OF THE ELE- * MENT KEYWORD. * * NOTE THAT ONLY THE SECOND CHARACTER OF THE KEYWORD IS UNIQUE AND * IS CHECKED FOR THE "SINGLE" TYPE OF ELEMENT. * # IF PAR$PCHR2[ELINDX] EQ "E" # TERMINAL (S) # THEN ELMID = ENABLST"TERM"; ELSE IF PAR$PCHR2[ELINDX] EQ "I" # LINE (S) # THEN ELMID = ENABLST"LINE"; ELSE IF PAR$PCHR2[ELINDX] EQ "R" # TRUNK (S) # THEN ELMID = ENABLST"TRUNK"; ELSE IF PAR$PCHR2[ELINDX] EQ "C" # ARCHETYPE SVC # THEN ELMID = ENABLST"SVC"; ELSE # MUST BE LOGICAL LINK (S) # ELMID = ENABLST"LLINK"; # * NOW, CHECK TO SEE IF THE ENABLE COMMAND IS FOR A GROUP OF ELEMENT * TYPE TERMINALS, LINES, OR TRUNKS BY CHECKING THE THIRD CHARACTER * OF THE KEYWORD. * * IF MULTIPLE IS INDICATED, SIMPLY BUMP THE ELMID VALUE TO SET THE * APPROPRIATE INTERNAL IDENTIFIER. # IF PAR$PCHR3[ELINDX] EQ "S" THEN ELMID = ELMID + 1; # * SET THE BEGINNING AND ENDING ADDRESS PARAMETER LIST INDEX VALUES * SO AS TO INDICATE THE LOCATION OF THE ADDRESS PARAMETERS IN THE * PARMS ARRAY. # BEGAPIX = HDR$TXWCNT[0] + HDR$SPCNT[0]; IF HDR$APCNT[0] EQ 0 THEN BEGIN FINAPIX = BEGAPIX; END ELSE BEGIN FINAPIX = HDR$TXWCNT[0] + HDR$SPCNT[0] + HDR$APCNT[0] - 1; END # * SEARCH THE ADDRESS PARAMETER LIST FOR EACH OCCURRENCE OF THE NPU * ORDINAL KEYWORD "NOR". AFTER EACH NPU ORDINAL KEYWORD, THE * APPROPRIATE ELEMENT ADDRESS PARAMETER VALUE WILL BE FOUND. * * SET UP THE COMMON OUTGOING SM FIELDS AND BRANCH TO THE PROPER * CASE TO BUILD THE ENABLE SM BASED ON THE PREVIOUSLY DETERMINED * INTERNAL ELEMENT IDENTIFIER. # FOR I = BEGAPIX STEP 1 UNTIL FINAPIX DO BEGIN IF PAR$PCODE[I] EQ "NOR" OR PAR$PCODE[NPINDX] EQ "NPS" THEN BEGIN GOTO BLDENSM[ELMID]; BLDTERM: # BUILD ENABLE TERMINAL SM # # * CONVERT THE TERMINAL NAME (DISPLAY CODE) PARAMETER VALUE TO THE * ASCII FORMAT FOR INSERTION INTO THE SM TO THE NPU. # DORD = ELINDX; DBIT = 0; AORD = 1; ABIT = 4; FOR Y = 1 STEP 1 UNTIL 7 DO BEGIN SSBEBF(PARMS[0],DORD,DBIT,6,SINGCHAR); # EXTRACT 6 BITS # SINGCHAR = SSDCDA(SINGCHAR); SSBSBF(CSSM[1],AORD,ABIT,8,SINGCHAR); # STORE 8 BITS # END ENBP[1] = PAR$ELADDR[I+1]; # SET LINE NUMBER IN SM # SFC[1] = TE; ABHTLC[1] = NENBTE; WCB$SMID[1] = SMID"ENBTE"; WCB$WC[1] = LENBTE + 2; GOTO SENDSM; BLDTERMS: # ENABLE TERMINALS SM # # * TERMINALS ON A LINE OR ON A NPU MAY BE REQUESTED. IF ON A LINE, * THEN THE PORT NUMBER OF THE LINE MUST BE SET IN THE SM. OTHER- * WISE, THE PORT NUMBER MUST BE ZERO. # IF PAR$PCODE[ELINDX+1] EQ "LI0" THEN ENBP[1] = PAR$ELADDR[I+1]; SFC[1] = TE; ABHTLC[1] = NENBTE; WCB$SMID[1] = SMID"ENBTE"; WCB$WC[1] = LENBTE + 2; GOTO SENDSM; BLDLINE: # ENABLE LINE OR LINES # BLDLINES: # * IF SINGLE LINE TO BE ENABLED THEN THE PORT NUMBER OF THE LINE * MUST BE SET IN THE SM. OTHERWISE, THE PORT NUMBER IS ZERO WHICH * MEANS THAT ALL LINES ON THE NPU ARE TO BE ENABLED. # SFC[1] = LI; IF PAR$PCHR3[ELINDX] NQ "S" THEN ENBP[1] = PAR$ELADDR[I+1]; ABHTLC[1] = NENBLI; WCB$SMID[1] = SMID"ENBLI"; WCB$WC[1] = LENBLI + 2; GOTO SENDSM; BLDTRUNK: # ENABLE TRUNK OR TRUNKS # BLDTRUNKS: # * IF ONLY A SINGLE TRUNK IS TO BE ENABLED, THEN THE PORT OF THE * TRUNK ON THE NPU MUST BE SET IN THE SM. # SFC[1] = TR; IF PAR$PCHR3[ELINDX] NQ "S" THEN ENBP[1] = PAR$ELADDR[I+1]; IF PAR$PCODE[ELINDX+1] EQ "LD0" THEN BEGIN # LD PARAM SPECIFIED # IF V24FLAG THEN # RUNNING WITH 2.4 CCP # ENBLDF[1] = TRUE ; # SET LAOD FLAG # ELSE BEGIN # NOT RUNNING WITH 2.4 CCP # ABHWORD[1] = 0 ; ABHADR[1] = AUDGR4$ ; ABHTLC[1] = 6 ; IGMSG2[0] = CCPVERS ; # STORE VERSION TO MSG # WCB$WC[1] = 8 ; SSTAQE(P,WCBUF[1],ABH[1],IGMSGW[0]) ; RETURN ; END END # LD PARAM IS SPECIFIED # ABHTLC[1] = NENBTR; WCB$SMID[1] = SMID"ENBTR"; WCB$WC[1] = LENBTR + 2; GOTO SENDSM; BLDLLINK: # ENABLE LLINK OR LLINKS # BLDLLINKS: # * IF A SINGLE LOGICAL LINK IS TO BE ENABLED, THEN THE NODE NUMBERS * OF THE LOGICAL LINK MUST BE SET IN THE SM FOR THE NPU. # SFC[1] = LL; IF PAR$PCHR3[ELINDX] NQ "S" THEN BEGIN ENBN1[1] = PAR$LLNID1[I+1]; ENBN2[1] = PAR$LLNID2[I+1]; END ABHTLC[1] = NENBLL; WCB$SMID[1] = SMID"ENBLL"; WCB$WC[1] = LENBLL + 2; GOTO SENDSM; BLDSVC: # ENABLE ARCHETYPE SVC # # CONVERT THE DISPLAY CODE ARCHETYPE NAME TO ASCII # DORD = ELINDX; # BITFIELD START POSITION # DBIT = 0; AORD = 1; ABIT = 4; FOR Y = 1 STEP 1 UNTIL 5 DO BEGIN SSBEBF(PARMS[0],DORD,DBIT,6,SINGCHAR); # EXTRACT BITFIELD # SINGCHAR = SSDCDA(SINGCHAR); SSBSBF(CSSM[1],AORD,ABIT,8,SINGCHAR); # STORE BITFIELD # END ENBP[1] = PAR$ELADDR[I+1]; # SET PORT NUMBER IN SM # FOR Y = ELINDX STEP 1 UNTIL BEGAPIX DO BEGIN IF PAR$PCODE[Y] EQ "NC0" # FOUND NCIR PARAMETER CODE # THEN ENBNC[1] = PAR$NCIR[Y]; # SET NO. OF SVCS TO ENABLE # END ENBBL[1] = X"2020"; # INSERT TWO BLANKS # SFC[1] = VC; ABHTLC[1] = NENBVC; # LENGTH IN CHAR # WCB$SMID[1] = SMID"ENBVC"; WCB$WC[1] = LENBVC + 2; GOTO SENDSM; SENDSM: # * SET UP THE ABH WORD. IF -NPUS- WAS SPECIFIED, THEN FOR EACH * NPU THAT IS SUPERVISED, SEND THE ENABLE REQUEST. IF -NPUS- * WAS NOT SPECIFIED, THEN SEND THE MESSAGE TO THE NPU. # ABHABT[1] = APPSUP; ABHBT[1] = APPSUP; ABHACT[1] = ACTCSNP$; IF PAR$PCODE[NPINDX] EQ "NPS" THEN BEGIN FOR Y=0 STEP 1 WHILE Y LS CSNPCNT DO BEGIN IF NPU$STAT[Y] EQ SUPSTAT"SUP" THEN BEGIN IF HDR$OPORD[0] EQ HOPORD$ OR HDR$OPORD[0] EQ NPU$CNOP[I] THEN BEGIN ABHDN[1] = NPU$NID[Y]; ABHSN[1] = NPU$HID[Y]; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END END END END ELSE BEGIN NPUORD = PAR$ORD[I]; ABHDN[1] = NPU$NID[NPUORD]; ABHSN[1] = NPU$HID[NPUORD]; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END END # IF PAR$PCODE EQ NOR # END # FOR I LOOP # # * THE COMMAND MUST BE LOGGED BY MOVING THE COMMAND TEXT AND OPER- * ATOR TERMINAL NAME INTO THE CMDTEXT MESSAGE ARRAY AND QUEUING * IT TO THE EVENT QUEUE AS A CMDTXT ENTRY. # WCB$WORD[1] = 0; WCB$SMID[1] = SMID"CMDTXT"; ABHWORD[1] = 0; CMD$TNAM[0] = OC$TNAM[HDR$OPORD[0]]; # * MOVE THE COMMAND TEXT. # P = LOC(CMD$TEXT[0]); # SET UP FOR TEXT MOVE # MOVECNT = HDR$TXWCNT[0]; MOVE(MOVECNT,PARMS[0],MSCMD[0]); WCB$WC[1] = HDR$TXWCNT[0] + 4; ABHTLC[1] = (HDR$TXWCNT[0] + 2) * 10; SSTAQE(P,WCBUF[1],ABH[1],CMDLINE[0]); # * THE NULL TERMINAL TEXT TO ALLOW THE READY.. MESSAGE TO BE SENT * NEEDS TO BE GENERATED. # ABHWORD[1] = 0; WCB$WORD[0] = 0; WCB$WC[1] = 2; WCB$SMID[1] = SMID"TTEXT"; ABHADR[1] = HDR$OPORD[0]; ABHTLC[1] = 0; WCB$IAF[1] = TRUE; SSTAQE(P,WCBUF[1],ABH[1],CSSM[1]); END # CSSAEN # TERM