File:  [Research Unix] / researchv10no / cmd / pfort / FORMAT.f
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman

      SUBROUTINE FORMAT
      INTEGER STMT, PSTMT
      LOGICAL TOKPNO, SIGN, ERROR
      COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
C
C     ROUTINE PROCESSES FORMAT STMT
C     FORMAT (Q1 T1 Z1 T2 Z2 ... TN Q2)
C     Q1,Q2 ARE EMPTY OR ARE SEPARARTERS
C     T1,T2 ETC. ARE FORMAT-ITEMS
C     Z1,Z2, ETC. ARE SEPARATERS
C     CHECKS FOR <= 2 LEVELS OF PARENTHESES
C
      ERROR = .FALSE.
      ICNT = 0
C
C     "("
C
      IF (STMT(PSTMT).EQ.65) GO TO 30
   10 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
C
C     SEARCH FOR FORMAT ITEMS
C
   20 RETURN
   30 ICNT = ICNT + 1
      IF (ICNT.GT.2) CALL ERROR1(28H TOO MANY PARENTHESES LEVELS, 28)
      PSTMT = PSTMT + 1
C
C     LOOK FOR Q1
C
      CALL SEPAR(I)
C     TAKES CARE OF FORMAT()
      IF (STMT(PSTMT).EQ.62) GO TO 180
      IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION  (, ,
     *    25)
   40 IF (STMT(PSTMT).EQ.65) GO TO 30
      IF (PSTMT.GE.NSTMT) GO TO 10
      SIGN = .FALSE.
C
C     SEARCH FOR REPEAT FACTER (POSITIVE INTEGER)
C
      IF (TOKPNO(PSTMT,K2,N)) GO TO 70
C
C     HOLLERITH STRINGS
C
      IF (STMT(PSTMT).LT.0) GO TO 120
C
C     "-"       IN P SCALING FORMAT-ITEM
C
      IF (STMT(PSTMT).NE.61) GO TO 50
      SIGN = .TRUE.
      PSTMT = PSTMT + 1
   50 IF (PSTMT.GE.NSTMT) GO TO 10
C
C     LOOK FOR <INT> IN PSCALING FORMAT-ITEM
C     P SCALING FORMAT-ITEM
C     ( -       ) <INTEGER> P REPEAT (A,I,L) <WIDTH> . <INT>
C
      CALL NEXTOK(PSTMT, K2, K)
C
C     CHECK FOR USE OF "-" WITH NON P-SCALING CONSTRUCTS
C
      IF (K.NE.1 .AND. SIGN) GO TO 100
      IF (K.EQ.1) GO TO 60
      N = STMT(PSTMT)
      GO TO 90
   60 SIGN = .TRUE.
      PSTMT = K2
      N = STMT(PSTMT)
      GO TO 80
C
C     LOOK FOR PART OF FORMAT-ITEM AFTER REPEAT FACTOR
C
   70 PSTMT = K2
      N = STMT(PSTMT)
C
C     "("
C
      IF (N.EQ.65) GO TO 30
C
C     "X"
C
      IF (N.EQ.53) GO TO 120
C
C     "P"
C
   80 IF (N.EQ.45) GO TO 130
      IF (SIGN) GO TO 100
C
C     A,I,L
C
   90 IF (N.EQ.30 .OR. N.EQ.38 .OR. N.EQ.41) GO TO 110
C
C     D,E,F,G
C
      IF (N.GE.33 .AND. N.LE.36) GO TO 150
  100 CALL ERROR1(20H ILLEGAL FORMAT ITEM, 20)
      GO TO 20
C
C     A,I,L FOUND. LOOK FOR <WIDTH>
C
  110 IF (PSTMT+1.GE.NSTMT) GO TO 10
      PSTMT = PSTMT + 1
      IF (.NOT.TOKPNO(PSTMT,K2,I)) GO TO 100
      IF (N.NE.30 .OR. I.EQ.1 .OR. ERROR) GO TO 160
      CALL ERROR1(48H WARNING - A FORMAT ITEM NOT PORTABLE FOR N.GT.1,
     *    48)
      ERROR = .TRUE.
      GO TO 160
C
C     SKIP TO NEXT CHAR IN X OR HOLLERITH
C
  120 PSTMT = PSTMT + 1
      GO TO 170
C
C     LOOK FOR CONSTRUCT FOLLOWING THE P. CAN BE A REPEAT
C
  130 IF (PSTMT+1.GE.NSTMT) GO TO 10
      PSTMT = PSTMT + 1
      IF (STMT(PSTMT).GT.9 .OR. STMT(PSTMT).LT.0) GO TO 140
      CALL NEXTOK(PSTMT, K2, K)
      IF (K.NE.1) GO TO 10
      PSTMT = K2
C
C     AFTER D,E,F,G FIND <WIDTH> . <INT>
C
  140 IF (STMT(PSTMT).LT.33 .OR. STMT(PSTMT).GT.36) GO TO 10
  150 IF (PSTMT+1.GE.NSTMT) GO TO 10
      PSTMT = PSTMT + 1
      IF (.NOT.TOKPNO(PSTMT,K2,N)) GO TO 100
      IF (STMT(K2).NE.64) GO TO 100
      IF (K2+1.GE.NSTMT) GO TO 10
      PSTMT = K2 + 1
      CALL NEXTOK(PSTMT, K2, K)
      IF (K.NE.1) GO TO 100
  160 PSTMT = K2
C
C     FINISHED A FORMAT-ITEM
C     LOOK FOR SEPARATER OR ")"
C
  170 IF (STMT(PSTMT).NE.62) GO TO 210
  180 ICNT = ICNT - 1
      IF (ICNT.LT.0) GO TO 190
      IF (PSTMT+1.LT.NSTMT) GO TO 200
      IF (ICNT.EQ.0) GO TO 20
  190 CALL ERROR1(28H ILLEGAL PARENTHESES NESTING, 28)
      GO TO 20
  200 PSTMT = PSTMT + 1
      GO TO 170
  210 CALL SEPAR(I)
      IF (I.EQ.0) CALL ERROR1(24H MISSING FIELD SEPARATOR, 24)
      IF (STMT(PSTMT).NE.62) GO TO 40
      IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION  ,) ,
     *    25)
      GO TO 180
      END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.