C* WRITE STATEMENT - UNDWRI C C A SEARCH IS MADE FOR IMPLIED DO LOOPS SO THAT ALL INDEX C VARIABLES USED MAY BE DEFINED C E.G., IN THE WRITE STATEMENT: C WRITE(5,1010) (K(L), L = 1,N) C THE VARIABLE L IS DEFINED. C SUBROUTINE WC(IEND) BYTE STRING,ISTR,VAR COMMON STRING(660),ISTR(660),VAR(6) C WRITE(6,6010) IEND C6010 FORMAT('0', 'SUB WC: IEND =', I4) C WRITE(6,6020) (ISTR(II), II = 1,IEND) C6020 FORMAT('0','SUB WC: ISTR =', 50I1) C WRITE(6,6030) (STRING(II), II = 1,IEND) C6030 FORMAT('0','SUB WC: STRING =', 50A1) I=1 I3=1 ! 3 IN ISTR REPRESENTS LEFT PARENTHESES I4=0 ! 4 IN ISTR REPRESENTS RIGHT PARENTHESES 10 I=I+1 IF (I.GT.IEND) RETURN IF (ISTR(I).EQ.3) I3=I3+1 IF (ISTR(I).EQ.4) I4=I4+1 IF (I3.NE.I4) GO TO 10 ! L AND R PARENS SHOULD BE C ! EQUAL AFTER WRITE(...) C C WRITE(...) HAS BEEN SCANNED, START ON VARIABLE LIST C SCAN UNTIL '=' HAS BEEN FOUND, OR END OF STATEMENT 20 I=I+1 IF (I.GT.IEND) RETURN IF (ISTR(I).NE.5) GO TO 20 ! '=' NOT FOUND C C MATCH ON '=' SIGN C SCAN BACKWARDS TO THE PRECEDING INDEX VARIABLE NAME IEQPOS = I DO 30 IBACK = 1,7 IF (ISTR(IEQPOS-IBACK) .EQ. 0) GOTO 30 ! STILL PART OF NAME I = IEQPOS - IBACK ! POINT TO START OF NAME - 1 GOTO 35 30 CONTINUE C C POSITIONED AT START OF VARIABLE NAME - 1. PARSE NAME AND C STORE IN VAR 35 J = 0 40 I = I + 1 IF (I .GT. IEND) RETURN IF (ISTR(I) .NE. 0) GOTO 50 J=J+1 ! J = NUMBER OF LETTERS OF NAME VAR(J)=STRING(I) GO TO 40 C C VARIABLE NAME NOW IN VAR, CALL CHECK TO DEFINE IT 50 IF (J.GT.0) CALL CHECK(J) C WRITE(6,6040) (VAR(II), II = 1,J) C6040 FORMAT(' SUB WC: VAR =',6A1) IF (J.LT.0) RETURN GOTO 20 ! CONTINUE PARSING REST OF EXPRESSION END