CTITLECSNODE -- CONNECT NODES/BRANCHES/PROCESSES 00000100 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA DESIGN F. COLLINS/R. MCMILLAN 00000200 CA AUTHOR R. MCMILLAN 00000300 CA LANGUAGE VS FORTRAN 00000401 CA SYSTEM IBM AND CRAY 00000501 CA WRITTEN 2-21-75 00000600 C REVISED 10-02-84 BY N. MOZLEY TO ADD CARRAY (CHARACTER ARRAY) 00000700 C TO AVOID VS FORTRAN WARNING MESSAGES. 00000800 C REVISED 12-05-84 BY R. KNIGHT. DUAL IBM/CRAY VERSION. 00000900 C REMOVED 'CARRAY'. 00001000 CA 00001100 CA 00001200 CA CALL CSNODE 00001300 CA 00001400 CA 00001500 CA THIS ROUTINE CONNECTS ALL BRANCHES TO THE APPROPRIATE NODES 00001600 CA AND SETS THE NUMBER OF BRANCHES IN THE NODE ENTRY. IT ALSO 00001700 CA CONNECTS ALL PROCESSES TO THE APPROPRIATE BRANCHES AND FOR EACH 00001800 CA PROCESS IMMEDIATELY FOLLOWING A BRANCH IT SETS KPTAMF EQUAL TO 6 00001900 CA SO THE TRACE ARRAY MANAGER WILL TAKE NO ACTION. ERROR CODES ARE 00002000 CA RETURNED IN MCRTF IF A BRANCH DOES NOT FOLLOW A NODE OR THERE ARE 00002100 CA NO PROCESSES IN A BRANCH. 00002200 C 00002300 C 00002400 C ERRORS 00002500 C MCRTF=-20 BRANCH DOES NOT FOLLOW A NODE 00002600 C =-21 NO PROCESSES IN A BRANCH 00002700 C 00002800 C 00002900 C COMMON /P/ VARIABLES 00003000 C 00003100 C IN KPNA 00003200 C IN KPRNO 00003300 C IN KPNBR 00003400 C IN KPIBN 00003500 C IN KPTAMF 00003600 C OUT MCNODE 00003700 C OUT MCNOBR 00003800 C OUT MCNABR 00003900 C IN MCNKP 00004000 C OUT MCRTF 00004100 C IN PTNCW 00004200 C IN/OUT PROTAB 00004300 C 00004400 C INTERNAL VARIABLES AND CONSTANTS 00004500 C 00004600 C BEGIN = PROTAB INDEX TO RESTART SCAN FOR A NODE 00004700 C CARRAY = INITIALIZATION ARRAY FOR CHARACTER DATA 00004800 C BRAN = CHARACTER STRING "BRAN" 00004900 C I = DO LOOP VARIABLE 00005000 C INDBR = PROCESS INDEX OF BRANCH 00005100 C INDEX1 = PROTAB INDEX OF NODE 00005200 C INDEX2 = PROTAB INDEX OF BRANCH 00005300 C INDIBN = INCREMENT IN PROTAB ENTRY FOR KPIBN 00005400 C INDNBR = INCREMENT IN PROTAB ENTRY FOR KPNBR 00005500 C INTAMF = INCREMENT IN PROTAB ENTRY FOR KPTAMF 00005600 C LAST = INDEX OF LAST PROTAB ENTRY 00005700 C NBR = CURRENT COUNT OF BRANCHES AT A NODE 00005800 C NODE = CHARACTER STRING "NODE" 00005900 C 00006000 C EJECT 00006100 SUBROUTINE CSNODE 00006200 C 00006300 IMPLICIT INTEGER (A-Z) 00006400 C 00006500 C COMMON /P/ STATEMENTS GENERATED BY UTCGI4 11/28/83 00006600 CIBM COMMON /P/ STARTP , M00000( 102) 00006700 CIBM REAL *8 STARTP 00006800 COMMON /P/ STARTP ( 2) , M00000( 102) 00006900 COMMON /P/ KPNA 00007000 COMMON /P/ KPRNO , M00420( 20) 00007100 COMMON /P/ KPNBR 00007200 COMMON /P/ KPIBN , M00508 00007300 COMMON /P/ KPTAMF , M00516( 47) 00007400 COMMON /P/ MCNODE 00007500 COMMON /P/ MCNOBR 00007600 COMMON /P/ MCNABR , M00716( 3) 00007700 COMMON /P/ MCRTF , M00732( 3) 00007800 COMMON /P/ MCNKP , M00748( 134) 00007900 COMMON /P/ PTNCW , M01288( 37) 00008000 COMMON /P/ PROTAB ( 2) 00008100 COMMON /P/ ENDP 00008200 C 00008300 COMMON /SYSTEM/ SYSTEM, SYBYPW, SYLOCF 00008400 C 00008500 C 00008600 INTEGER NODE 00008700 INTEGER BRAN 00008800 C 00008900 DATA NODE /'NODE'/ 00009000 DATA BRAN /'BRAN'/ 00009100 C 00009200 C EJECT 00009300 C 00009400 MCNODE=0 00009500 MCNOBR=0 00009600 INDNBR=(LOC(KPNBR )-LOC(KPNA))/SYLOCF 00009700 INDIBN=(LOC(KPIBN )-LOC(KPNA))/SYLOCF 00009800 INTAMF=(LOC(KPTAMF)-LOC(KPNA))/SYLOCF 00009900 LAST=PTNCW*MCNKP 00010000 MCRTF=0 00010100 BEGIN=1 00010200 C 00010300 10 DO 20 00010400 * I=BEGIN,LAST,PTNCW 00010500 IF (PROTAB(I).EQ.NODE) GO TO 30 00010600 20 CONTINUE 00010700 C 00010800 GO TO 2000 00010900 C 00011000 30 BEGIN =I+PTNCW 00011100 MCNODE=MCNODE+1 00011200 INDEX1=I 00011300 C SET KPIBN FOR NODE 00011400 PROTAB(INDEX1+INDIBN)=0 00011500 NBR =0 00011600 C 00011700 C COUNT AND FIX BRANCHES 00011800 C 00011900 INDEX2=BEGIN 00012000 C PROCESS AFTER NODE MUST BE A BRANCH 00012100 IF (PROTAB(INDEX2 ).NE.BRAN .OR. 00012200 * PROTAB(INDEX2+1).NE.PROTAB(INDEX1+1)) GO TO 1000 00012300 C MAKE BRANCH POINT TO NODE 00012400 40 PROTAB(INDEX2+INDIBN)=INDEX1/PTNCW+1 00012500 NBR =NBR+1 00012600 INDBR =INDEX2/PTNCW+1 00012700 INDEX2=INDEX2+PTNCW 00012800 IF (INDEX2.GT.LAST) GO TO 1010 00012900 PROTAB(INDEX2+INTAMF)=6 00013000 C 00013100 DO 50 00013200 * I=INDEX2,LAST,PTNCW 00013300 IF (PROTAB(I).EQ.NODE.OR.PROTAB(I).EQ.BRAN) GO TO 60 00013400 C MAKE PROCESS POINT TO BRANCH 00013500 PROTAB(I+INDIBN)=INDBR 00013600 50 CONTINUE 00013700 C 00013800 GO TO 80 00013900 C 00014000 C MUST HAVE AT LEAST ONE PROCESS IN A BRANCH 00014100 60 IF (I.EQ.INDEX2) GO TO 1010 00014200 C 00014300 DO 70 00014400 * INDEX2=I,LAST,PTNCW 00014500 IF (PROTAB(INDEX2 ).EQ.BRAN .AND. 00014600 * PROTAB(INDEX2+1).EQ.PROTAB(INDEX1+1)) GO TO 40 00014700 70 CONTINUE 00014800 C 00014900 C SET NUMBER OF BRANCHES IN NODE ENTRY 00015000 80 PROTAB(INDEX1+INDNBR)=NBR 00015100 MCNOBR=MCNOBR+NBR 00015200 GO TO 10 00015300 C 00015400 C ERROR - BRAN DOES NOT FOLLOW NODE 00015500 1000 MCRTF=-20 00015600 GO TO 2010 00015700 C 00015800 C ERROR - NO PROCESSES IN BRANCH 00015900 1010 MCRTF=-21 00016000 GO TO 2010 00016100 C 00016200 2000 MCNABR=MCNOBR 00016300 C 00016400 2010 RETURN 00016500 C 00016600 END 00016700