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

📄 renumb.for

📁 This Source-Navigator, an IDE for C/C++/Fortran/Java/Tcl/PHP/Python and a host of other languages.
💻 FOR
字号:
      SUBROUTINE RENUMB*-----------------------------------------------------------------------**   Processes one routine statement by statement:*   filtering, replacements**-----------------------------------------------------------------------      include 'param.h'      include 'alcaza.h'      include 'class.h'      include 'flags.h'      include 'cursta.h'      include 'state.h'      include 'jobsum.h'      include 'flwork.h'      include 'condec.h'      DIMENSION IKL(3)*   IKL(1) = last ch. of 'FMT=' or 0*   IKL(2) =             'ERR='*   IKL(3) =             'END='      LOGICAL FMTFL*--- FMTFL true when 'FMT=' found      CHARACTER SKL(3)*5,STEMP*1,STEMP3*3, SBUFF*5       DATA SKL/'#FMT=','#ERR=','#END='/      include 'condat.h'*--- if no statement numbers, return      IF (NSTANU.EQ.0) GOTO 999*--- replace statement number if any      NN=NEXTIN(SIMA(NFLINE(NSTREF)),1,5)      IF (NN.NE.0)  THEN*--- get number from table         IF (NSTANU.LE.40)  THEN            DO 10 J=1,NSTANU               IF (NN.EQ.KSTANU(J)) GOTO 20   10       CONTINUE            J=0   20       CONTINUE         ELSE            CALL BINSRC(NN,KSTANU,NSTANU,J,L)         ENDIF         IF (J.GT.0)  THEN            NN=KSTARE(J)         ELSE            NN=0         ENDIF         IF(NN.GT.0)  THEN            IF (IMODIF(NSTREF).LT.10) IMODIF(NSTREF)=IMODIF(NSTREF)+10            WRITE (SNEWST(1),'(I5)') NN         ENDIF      ENDIF      NMOD=IMODIF(NSTREF)      ICL=ICURCL(1)      IF(ICL.EQ.IIF.or.icl.eq.iif+71)  THEN*--- get class of second part         ICL=ICURCL(2)*--- ISTIND specifies tpyes         ISTIND=ISTMDS(10,ICL)         IF (ISTIND.EQ.0) GOTO 999*--- set pointer after first bracket         IPT=INDEX(SSTA(:NCHST),'(')         IF (IPT.EQ.0) GOTO 999         CALL SKIPLV(SSTA,IPT+1,NCHST,.FALSE.,IPT,ILEV)         IF (IPT.EQ.0) GOTO 999         SSTR(:IPT)=SSTA(:IPT)         IPS=IPT      ELSE         ISTIND=ISTMDS(10,ICL)         IF (ISTIND.EQ.0) GOTO 999         IPT=0         IPS=0*--- IPS = pointer in new string SSTR, IPT in old SSTA      ENDIF*--- now IPT in front of statement**--- treat the five different cases      IF(ISTIND.EQ.1)  THEN*--- one number, directly behind key         KFCH=0         CALL SKIPTP(2,SSTA,IPT+1,NCHST,.FALSE.,IPTT,ILEV)         IF(IPTT.EQ.0.OR.IPTT.EQ.NCHST) GOTO 60         STEMP=SSTA(IPTT+1:IPTT+1)         IF(STEMP.EQ.' '.AND.IPTT+2.LE.NCHST)  STEMP=SSTA(IPTT+2:IPTT+2)         IF(NUMCH(STEMP))  THEN            CALL GETINT(SSTA,IPT+1,NCHST,KFCH,KLCH,NN)         ENDIF         GOTO 60      ENDIF*--- for all other cases, find bracket      LL=INDEX(SSTA(IPT+1:NCHST),'(')+IPT      IF (LL.EQ.IPT) GOTO 999      CALL SKIPLV(SSTA,LL+1,NCHST,.FALSE.,LR,ILEV)      IF (LR.EQ.0) GOTO 999*--- first bracket between LL and LR*--- look for 'FMT=' etc.      DO 30 I=1,3         CALL MATCH(SKL(I),1,5,SSTA,LL,LR,.FALSE.,IKL(I),ILEV,NSPEC,IWS,     +   IWS)         IF (I.EQ.1) FMTFL=IKL(1).GT.0   30 CONTINUE      N=0*--- count and order      DO 40 I=1,3         IF (IKL(I).GT.0)  THEN            N=N+1            IKL(N)=IKL(I)         ENDIF   40 CONTINUE      IF (N.GT.1)  THEN         CALL SORTSP(N,IKL,NSPEC)      ELSE         NSPEC=N      ENDIF*--- NFL is a flag for different passes      NFL=0   50 CONTINUE      KFCH=0      IF (ISTIND.EQ.2)  THEN*--- all numbers inside first bracket         CALL GETINT(SSTA,LL+1,LR,KFCH,KLCH,NN)         LL=KLCH      ELSEIF (ISTIND.EQ.3)  THEN*--- all numbers follow first bracket         CALL GETINT(SSTA,LR+1,NCHST,KFCH,KLCH,NN)         LR=KLCH      ELSEIF (ISTIND.EQ.4)  THEN*--- inside first bracket 'FMT=' etc.,*   or if no 'FMT=', second item         IF (.NOT.FMTFL)  THEN            CALL POSCH(',',SSTA,LL+1,LR-1,.FALSE.,0,IPOS,ILEV)            IF(IPOS.EQ.0) GOTO 999            CALL GETNBL(SSTA(IPOS+1:LR),STEMP,N)            IF(N.GT.0.AND.NUMCH(STEMP))  THEN               CALL GETINT(SSTA,IPOS+1,LR,KFCH,KLCH,NN)               LL=KLCH            ENDIF         ELSE            NFL=NFL+1            IF (NFL.LE.NSPEC)  THEN               CALL GETNBL(SSTA(IKL(NFL)+1:LR),STEMP,N)               IF(N.GT.0.AND.NUMCH(STEMP))  THEN                  CALL GETINT(SSTA,IKL(NFL)+1,LR,KFCH,KLCH,NN)                  LL=KLCH               ENDIF            ENDIF         ENDIF      ELSEIF (ISTIND.EQ.5)  THEN*--- alternate returns, '(*' or ',*'         IF (NFL.EQ.0)  THEN            STEMP3='#(*'         ELSE            STEMP3='#,*'         ENDIF         NFL=NFL+1         CALL MATCH(STEMP3,1,3,SSTA,LL,LR,.FALSE.,KPOS,ILEV,NSPEC,IWS,     +   IWS)         IF (KPOS.GT.0)  THEN            LL=KPOS            CALL GETINT(SSTA,LL+1,LR,KFCH,KLCH,NN)            LL=KLCH         ENDIF      ENDIF   60 CONTINUE*--- if KFCH > 0, number found      IF (KFCH.GT.0)  THEN         IF (NMOD.LT.10) NMOD=NMOD+10*--- transmit part up to pointer         N=KFCH-IPT-1         IF (N.GT.0)  THEN            SSTR(IPS+1:IPS+N)=SSTA(IPT+1:IPT+N)            IPS=IPS+N            IPT=KLCH         ENDIF*--- get number from table         IF (NSTANU.LE.40)  THEN            DO 70 J=1,NSTANU               IF (NN.EQ.KSTANU(J)) GOTO 80   70       CONTINUE            J=0   80       CONTINUE         ELSE            CALL BINSRC(NN,KSTANU,NSTANU,J,L)         ENDIF         IF (J.GT.0)  THEN            NN=KSTARE(J)         ELSE            NN=0         ENDIF*--- add to SSTR         WRITE (SBUFF,'(I5)') NN         DO 90 J=1,5            STEMP=SBUFF(J:J)            IF (STEMP.NE.' ')  THEN               IPS=IPS+1               SSTR(IPS:IPS)=STEMP            ENDIF   90    CONTINUE         FMTFL=.TRUE.         IF (ISTIND.GT.1) GOTO 50      ENDIF      IF (NFL.EQ.1.AND.ISTIND.EQ.5) GOTO 50      IF (.NOT.FMTFL.AND.ISTIND.EQ.4)  THEN         FMTFL=.TRUE.         GOTO 50      ENDIF*--- transfer rest      N=NCHST-IPT      IF (N.GT.0)  THEN         SSTR(IPS+1:IPS+N)=SSTA(IPT+1:NCHST)         IPS=IPS+N      ENDIF      IF (NMOD.GT.10)  THEN         IF (IPS.LE.MXLENG)  THEN            IMODIF(NSTREF)=NMOD            NCHST=IPS            SSTA(:IPS)=SSTR(:IPS)         ELSE            WRITE (MPUNIT,10000)            CALL FLPRNT(1,'OVERFLOW',NLLINE(NSTREF)-NFLINE(NSTREF)+1,     +      SIMA(NFLINE(NSTREF)),NDUMMY)            NSTATC(6)=NSTATC(6)+1            STATUS(11)=.TRUE.         ENDIF      ENDIF10000 FORMAT(/' ++++++ Warning - renumbering would lead to overflow',     +' in following statement, not done')  999 END

⌨️ 快捷键说明

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