⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readec.for

📁 这是一个Linux下的集成开发环境
💻 FOR
字号:
      SUBROUTINE READEC*-----------------------------------------------------------------------**--- extracts one complete routine from input file, buffers it.*    the routine must end with an 'END' statement, or EOF**   Routines longer than MXSIMA lines are split.**   Blocks of comment lines in front of routines are treated as*   separate entities.**   The statements are counted, start and end of each statement*   (including comments between cont. lines) kept. Blocks of*   comment lines are treated like statements.**--- output*    SIMA           COMMON/ALCAZA/ statement images*    NLINES,NSTAMM,NFSTAT,NKEEPL    ,/STATE/*    NLTYPE(1..NLINES), NFLINE(1..NSTAMM), NLLINE(1..NSTAMM),*    ICLASS(1..NSTAMM)                         /STATE/*    NSTATC(..)  statistics*    STATUS(1), STATUS(2), STATUS(5), STATUS(6),   /FLAGS/**-----------------------------------------------------------------------      include 'param.h'      include 'alcaza.h'      include 'flags.h'      include 'state.h'      include 'class.h'*      STATUS(6)=STATUS(5)      NCOMM=0      NFSTAT=0      NSTAMM=0      NPL=NLINES      NLINES=0   10 CONTINUE*--- loop over input lines until E.O.F., or END, or*    start of a new routine, or routine too long which*    will then be split behind a convenient statement.      IF(NLINES.EQ.MXSIMA)  THEN*--- buffer full         STATUS(5)=.TRUE.         IF (.NOT.STATUS(6)) WRITE (MPUNIT,10000)MXSIMA,SIMA(1)         CALL READSB(NCOMM,NST,ICL)         IF (NST.GT.0)  THEN*--- last FORTRAN statement could be incomplete - split before;*    check as well for routine header            IF (NST.EQ.NSTAMM.OR.(NFSTAT.GT.1.AND.ISTMDS(14,ICL).NE.0))     +      THEN               NSTAMM=NSTAMM-1               NFSTAT=NFSTAT-1               NKEEPL=NLINES-NLLINE(NSTAMM)            ENDIF         ENDIF         GOTO 999      ENDIF      IF(NKEEPL.EQ.0)  THEN         IF (.NOT.STATUS(1)) CALL INLINE(MIUNIT,SIMA(NLINES+1),STATUS(1)     +   ,NLTYPE(NLINES+1))         IF (STATUS(1))  THEN*--- EOF on input file            STATUS(2)=NLINES.EQ.0            IF (STATUS(2)) GOTO 999            STATUS(5)=.FALSE.            CALL READSB(NCOMM,NST,ICL)*--- last FORTRAN statement could be routine header            IF (NFSTAT.GT.1)  THEN               IF (ISTMDS(14,ICL).NE.0)  THEN*--- leave routine header for next time                  NSTAMM=NST-1                  NFSTAT=NFSTAT-1                  NKEEPL=NLINES-NLLINE(NSTAMM)               ENDIF            ENDIF            GOTO 999         ENDIF      ELSE*--- transfer buffered lines to start of buffer         NKEEPL=NKEEPL-1         NLTYPE(NLINES+1)=NLTYPE(NPL-NKEEPL)         SIMA(NLINES+1)=SIMA(NPL-NKEEPL)      ENDIF*--- now a new line in SIMA(NLINES+1), with type NLTYPE(NLINES+1)      IF(NLTYPE(NLINES+1).EQ.0)  THEN*--- comment line         NCOMM=NCOMM+1         NLINES=NLINES+1      ELSEIF (NLTYPE(NLINES+1).EQ.2)  THEN*--- this is a cont. line - accept comment lines in between         NCOMM=0         NLINES=NLINES+1      ELSE*--- start of FORTRAN statement         CALL READSB(NCOMM,NST,ICL)         NLINES=NLINES+1         IF (NST.GT.0)  THEN*--- previous statement could be END            IF (ICL.EQ.IEND.or.icl.eq.iend+71)  THEN               NKEEPL=1               STATUS(5)=.FALSE.               GOTO 999*--- or routine header ?            ELSEIF (ISTMDS(14,ICL).NE.0)  THEN               IF (NFSTAT.GT.1)  THEN                  NSTAMM=NST-1                  NFSTAT=NFSTAT-1                  NKEEPL=NLINES-NLLINE(NSTAMM)                  STATUS(5)=.FALSE.                  GOTO 999               ELSE                  STATUS(6)=.FALSE.               ENDIF            ENDIF         ENDIF*--- accept the new line as start of a statement         NSTAMM=NSTAMM+1         NFLINE(NSTAMM)=NLINES      ENDIF      GOTO 1010000 FORMAT(/' +++++++++ WARNING - deck with more than ',I5,     +' lines encountered, deck split'/' first line =',A90)  999 END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -