C* REMOVE SUBROUTINE OR EQUIVALENCED VARIABLES - UNDSRM C C SUBOUT C REMOVE VARIABLES THAT ARE ONLY DEFINED IN CALL OR C ENTRY STATEMENTS, ALSO VARIABLES THEY ARE EQUIVALENCED C WITH, IF ANY C C SUBROUTINE SUBOUT C SUBROUTINE SUBOUT BYTE STRING,ISTR,VAR,IB,VARS(8) COMMON STRING(660),ISTR(660),VAR(6),NV COMMON/EQUIV/ IEQG, IEQDEF, IEQARR(30) ! 24-JUN-79 COMMON/ISUBC/ ISUBC COMMON/OUTPUT/ NTOUT DATA NOUT/6/,NVAR/3/, NTTY/5/ C IEQSUB = 0 NN = 0 ITEST = 0 C DO 30 N = 1,NV READ(NVAR'N) VARS, ISUB, IEQ C WRITE(NOUT,1005) VARS, ISUB, IEQ IF (ISUB .EQ. 0) GOTO 20 C C VARIABLE DEFINED ONLY IN CALL, SUBROUTINE OR ENTRY STATEMENT IF (ITEST .EQ. 0) WRITE(NTOUT,1010) WRITE(NTOUT,1020) VARS ITEST = 1 IF (IEQ .EQ. 0) GOTO 30 C C VARIABLE BELONGS TO EQUIVALENCE GROUP "IEQ" IF (IEQSUB .EQ. 0) GOTO 18 DO 15 II = 1,IEQSUB IF (IEQARR(II) .EQ. IEQ) GOTO 20 15 CONTINUE 18 IEQSUB = IEQSUB + 1 IEQARR(IEQSUB) = IEQ ! ADD EQUIVALENCE GROUP TO C ! LIST OF GROUPS TO DELETE GOTO 30 C C REWRITE RECORD, VARIABLE NOT DEFINED IN CALL, SUBROUTINE C OR ENTRY STATEMENT 20 NN = NN + 1 WRITE(NVAR'NN) VARS,ISUB,IEQ 30 CONTINUE NV = NN IF (NV .EQ. 0) RETURN IF (IEQSUB .EQ. 0) RETURN C C REREAD RECORDS, DELETING THOSE VARIABLES BELONGING TO AN C EQUIVALENCE GROUP NOW DEFINED D WRITE(NOUT,1040) (IEQARR(II), II = 1,IEQSUB) NN = 0 DO 50 N = 1,NV READ(NVAR'N) VARS, ISUB, IEQ DO 40 IE = 1,IEQSUB IF (IEQ .EQ. IEQARR(IE)) GOTO 50 40 CONTINUE NN = NN + 1 WRITE(NVAR'NN) VARS 50 CONTINUE NV = NN RETURN 1005 FORMAT('0', 'SUBROUTINE SUBOUT (VARS,ISUB,IEQ): ',8A1, 2I3) 1010 FORMAT('0','VARIABLES DEFINED IN CALL STATEMENTS') 1020 FORMAT(4X, 8A1) 1040 FORMAT(' ', 'SUBROUTINE SUBOUT (IEQARR): ', 30I3) END