C** CREF ** PROGRAM TO CROSS REF FORTRAN PROGS C C LOGICAL*1 IFLNAM(30),LSTNAM(30),EXT(4) LOGICAL*1 IPRINT,JPRINT,COUNT(120),DEBUG LOGICAL*1 HEADER(82),NAME(6,120) LOGICAL*1 IFILE,FUNCR,FUNCX,JNAME(15),LOST LOGICAL*1 BLANK,DOT,YES,NO,IRESP COMMON ICOUNT,NUMBER(120,30),NAME,DEBUG,HEADER,COUNT,IPRINT, 1JPRINT,LOST DATA 1 BLANK,DOT,YES,NO/' ','.','Y','N'/ 1,EXT/'.','L','S','T'/ C C THIS PROGRAM IS INTENDED TO AID FORTRAN PROGRAM DOCUMENTATION C AND MAINTENANCE BY CROSS REFERENCING THE VARIABLES C AS CREATED ON CARDS OR BY THE EDITOR. IT ASSUMES THE SOURCE C CODE IS VALID. THE LINE NUMBERS USED FOR REFERENCING VARIABLES C AGREE WITH THOSE ON A COMPILER-GENERATED LISTING. C C CAPACITY: 499 STATEMENT NUMBERS (RENUM ABORTS IF EXCEEDED), C 120 VARIABLE NAMES WITH UP TO 30 REFERENCES EACH (RENUM C IGNORES EXCESS REFERENCES AND ISSUES MESSAGE). C REDUCING VARIABLE CAPACITY FOR THE CROSS REFERENCE TABLE WILL C SIGNIFICANTLY REDUCE CORE NEEDED. C C V1M1, JUL 75 C ADDRESS PROBLEMS OR SUGGESTIONS TO: C DAVE SYKES C MEAD TECH LABS C (513) 426-3111 C C ARC MODIFICATIONS: C L.BECHTEL C 12-OCT-77 C C IF THE FIRST LINE OF THE SOURCE CODE CONTAINS "C** " IN COL C 1-4, IT WILL BE PRINTED AS A HEADER ON EACH PAGE OF OUTPUT. C MULTIPLE SOURCE MODULES IN THE SAME INPUT FILE ARE NOT ALLOWED!! C THE USE OF FORTRAN KEYWORDS AS VARIABLE NAMES MAY CONFUSE THE C SCANS IN UNPREDICTABLE WAYS AND IS BEST AVOIDED. C PROGRAMS BEING RENUMBERED: C CANNOT HAVE STATEMENT NUMBERS WHICH EXTEND FROM THE END OF A C LINE ONTO A CONTINUATION LINE. C CAN HAVE STATEMENT NUMBERS ON CONTINUATION LINES ONLY IN C 'IF' AND 'GO TO' STATEMENTS, AND WHEN THEY FOLLOW A LOGICAL IF. C ANY DATA IN COL 73-80 WILL BE DELETED WHEN A PROGRAM IS RENUMBERE C THE FORTRAN KEYWORD AND CERTAIN SYNTAX ELEMENTS MUST BE C ON A SINGLE LINE (THE FIRST, EXCEPT PERHAPS AFTER A LOGICAL IF C THIS LIMITS UNREASONABLE USE OF INBEDDED BLANKS. C REASONABLY FORMATTED LINES WILL PRESENT NO PROBLEM. C IF A LINE EXTENDS PAST COL 72 BECAUSE THE NEW STATEMENT C NUMBERS ARE LONGER THEN THE OLD ONES, THE EXCESS IS MOVED TO C THE NEXT LINE (IF IT IS A CONTINUATION) OR A NEW C CONTINUATION LINE IS CREATED FOR IT. EXCEPT THAT END-OF-LINE C COMMENTS (!) ARE DELETED RATHER THEN MOVED. C STATEMENT NUMBERS UP TO 99999 ARE ALLOWED IN THE INPUT CODE, THE C OUTPUT STATEMENT NUMBERS WILL BE EVEN NUMBERS UP TO 998. C ONE ERROR MESSAGE IS POSSIBLE AND IS OUTPUT TO THE NEW SOURCE C FILE AS A COMMENT LINE: A POSSIBLE CONVERSION ERROR. IT HAPPENS C IF: (1) RENUM FINDS A STATEMENT NUMBER IN A STATEMENT THAT C IT DID NOT FIND AS A LABEL; OR (2) RENUM FINDS THE KEYWORD C OF A STATEMENT THAT SHOULD CONTAIN A STATEMENT NUMBER BUT C CANNOT FIND A NUMBER BECAUSE THE STATEMENT'S SYNTAX IS NOT AS C EXPECTED (EITHER THE KEYWORD WAS REALLY A VARIABLE NAME OR C THE STATEMENT IS NOT SYNTATICLY COMPLETE ON 1 LINE). C THE DEBUG OPTION MUST BE USED CAREFULLY SINCE IT IS EASY TO CAUSE C MULTIPLE STATEMENT NUMBERS WHICH CAUSE NO PROBLEM UNTIL C SOME LATER TIME WHEN THE FORTRAN COMPILER IS GIVEN A /D. CALL DATE (HEADER(74)) C 200 DEBUG=.FALSE. IPRINT=.TRUE. JPRINT=.TRUE. C C--FILE NAME?? C 6 WRITE(5,40) 40 FORMAT(' FILE NAME ? ',$) READ(5,47,END=90)IFLNAM 47 FORMAT(30A1) 41 FORMAT(A1) CALL ASSIGN(2,IFLNAM) C C--MAKE LIST FILE NAME C DO 100 I=1,30 IF(IFLNAM(I).EQ.BLANK)GO TO 110 IF(IFLNAM(I).EQ.DOT)GO TO 110 LSTNAM(I)=IFLNAM(I) 100 CONTINUE 110 DO 120 J=1,4 LSTNAM(I)=EXT(J) I=I+1 120 CONTINUE CALL ASSIGN(6,LSTNAM) C C--XREF DEBUG LINES C 50 WRITE(5,43) 43 FORMAT(' INCLUDE DEBUG LINES ? [Y/N]:',$) READ(5,41,END=90)IRESP IF(IRESP.NE.YES.AND.IRESP.NE.NO.AND.IRESP.NE.BLANK)GO TO 50 IF (IRESP .EQ. YES) DEBUG=.TRUE. C C======= GO DO THE CROSS REFERENCE INDEX AND PRODUCE LISTINGS C ICOUNT=0 CALL XREF1 IF(ICOUNT.GT.0)CALL XREF2 CALL CLOSE(2) CALL CLOSE(3) GO TO 200 90 STOP END