File:  [Research Unix] / researchv10no / cmd / pfort / OUTSYM.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 OUTSYM
      INTEGER HASH, STACK, BL, DSA, OUTUT, SYMHD, BNEXT, SYMLEN, ATT(8)
      INTEGER CODE(11), CC(30), C(4), Q(70), SYM, PDSA
      INTEGER OUTUT2, OUTUT3, OUTUT4
      LOGICAL OK
      LOGICAL OPT, P1ERR, COMM
      COMMON /CHASH/ LHASH, HASH(401)
      COMMON /OPTNS/ OPT(5), P1ERR
      COMMON /CTABL/ LDSA, PDSA, DSA(5000)
      COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
     *    OUTUT4
      COMMON /TABL/ NEXT, LAB, SYM, BNEXT
      COMMON /FACTS/ NAME, NOST, ITYP, IASF
      COMMON /CEXPRS/ LSTACK, STACK(620)
      COMMON /TRANS/ Q
      DATA BL /1H /
      DATA CODE(1) /1HD/, CODE(2) /1HR/, CODE(3) /1HI/, CODE(4) /1HC/,
     *    CODE(5) /1HL/, CODE(11) /1HE/, CODE(7) /1HA/, CODE(8) /1HS/,
     *    CODE(9) /1HF/, CODE(10) /1HN/, CODE(6) /1HH/, C(1) /4/, C(2)
     *    /11/, C(3) /7/, C(4) /8/
      DATA CC(2), CC(16), CC(20), CC(22), CC(26), CC(28) /6*1H /,
     *    CC(3), CC(5), CC(9), CC(11) /1HF,1HS,1HF,1HF/, CC(1), CC(4) /
     *    1HU,1HA/, CC(6), CC(8), CC(10), CC(12), CC(14) /1HF,4*1HN/,
     *    CC(7), CC(13) /2*1HS/, CC(15) /1HC/, CC(17) /1HG/, CC(18) /
     *    1HT/, CC(19) /1HL/, CC(21) /1HV/, CC(25) /1HM/, CC(23) /1HB/,
     *    CC(24) /1HD/, CC(27) /1HE/
      DATA CC(29) /1HI/, CC(30) /1HF/
C
C     ROUTINE PRINTS OUT SYMBOL TABLE FOR A PROGRAM UNIT
C
      IF (NAME.EQ.0 .OR. .NOT.OPT(1)) RETURN
      II = IGATT1(NAME,8)
      CALL S5UNPK(DSA(NAME+4), STACK(1), 6)
      WRITE (OUTUT,99999) (STACK(I),I=1,6)
99999 FORMAT (14H1PROGRAM UNIT , 5X, 6A1)
      IF (II.EQ.11 .OR. II.EQ.12 .OR. DSA(NAME+2).EQ.0) GO TO 60
C
C     PRINT FCN/SUBROUTINE ARGS
C
      KK = DSA(NAME+2)
      I = 0
   10 L = 20
      CALL RDLIST(KK, 9, M, 0)
      IF (M) 20, 60, 20
   20 DO 30 I1=1,M
        J = STACK(I1) + 4
        CALL S5UNPK(DSA(J), STACK(L), 6)
        L = L + 7
        STACK(L-1) = BL
   30 CONTINUE
      MM = M*7 + 19
      IF (I) 40, 40, 50
   40 WRITE (OUTUT,99998) (STACK(L),L=20,MM)
99998 FORMAT (//10H ARGUMENTS, 9X, 63A1)
      I = 1
      GO TO 10
   50 WRITE (OUTUT,99997) (STACK(L),L=20,MM)
99997 FORMAT (19X, 63A1)
      GO TO 10
C
C     PRINT SYMBOLS FOR PROGRAM UNIT
C
   60 CALL SORT(SYM, LBR)
      COMM = .FALSE.
      WRITE (OUTUT,99996)
99996 FORMAT (//1X, 4HNAME, 5X, 4HTYPE, 2X, 3HUSE, 1X, 10HATTRIBUTES,
     *    1X, 10HREFERENCES//)
      DO 230 JBR=1,LBR
        SYMHD = HASH(JBR)
        DO 70 I=20,35
          STACK(I) = BL
   70   CONTINUE
        DO 80 I=1,8
          ATT(I) = IGATT1(SYMHD,I)
   80   CONTINUE
C     SKIPS OVER SYMBOL TABLE ENTRY FOR MAIN, BLOCK DATA,
C     AND CURRENT SUBROUTINE NAME
        IF (SYMHD.EQ.NAME .AND. ATT(8).NE.4) GO TO 230
        IF (ATT(8).NE.7) GO TO 90
        COMM = .TRUE.
        GO TO 230
   90   CALL S5UNPK(DSA(SYMHD+4), STACK(20), 6)
        I1 = ATT(8)
        L = 2*(I1+1) - 1
        STACK(28) = CC(L)
        STACK(29) = CC(L+1)
C     LEAVE BLANK IRRELEVANT TYPE INFO FOR EXT SUBR, COMMON, EXT ENTS
      IF(ATT(8).EQ.6 .OR. ATT(8).EQ.7 .OR. ATT(8).EQ.13)
     1 GOTO 100
      I1 = MOD(ATT(1),8)
      IF (ATT(1).GE.8) STACK(26)=CODE(11)
      STACK(27) = CODE(I1 + 1)
  100   DO 110 I=1,4
          L = I + 29
          J = C(I)
          IF (ATT(I+1).EQ.1) STACK(L) = CODE(J)
  110   CONTINUE
        IF (ATT(8).EQ.7) STACK(30) = BL
        IF (ATT(8).NE.10 .AND. ATT(8).NE.8) GO TO 140
        IF (ATT(7)) 120, 130, 120
  120   STACK(34) = CODE(7)
        J = ATT(7) + 1
        STACK(35) = Q(J)
        GO TO 140
  130   STACK(34) = CODE(8)
C
C     XREF LIST
C
  140   IF (OPT(2)) GO TO 160
  150   WRITE (OUTUT,99995) (STACK(L),L=20,35)
        GO TO 230
  160   OK = .FALSE.
        N = DSA(SYMHD+1)
        IF (N.LE.0) GO TO 150
      N = DSA( N+1 )
 170  CALL RFLIST( N, M, J, DSA(SYMHD+1) )
C
C     FIRST TIME PRINT WHOLE LINE
C
        K = M
        IF (M.GE.57) K = 57
        WRITE (OUTUT,99995) (STACK(L),L=20,35), (STACK(L),L=50,K)
99995   FORMAT (1X, 6A1, 5X, 2A1, 3X, 2A1, 3X, 6A1, 2X, 8(I5, 1X))
        IF (M-57) 220, 220, 180
  180   L = (M-57)/8
        LL = 58
        IF (L) 220, 210, 190
  190   DO 200 K=1,L
          LK = LL + 7
          WRITE (OUTUT,99994) (STACK(I),I=LL,LK)
          LL = LK + 1
  200   CONTINUE
        IF (LK.EQ.M) GO TO 220
  210   WRITE (OUTUT,99994) (STACK(I),I=LL,M)
99994   FORMAT (30X, 8(I5, 1X))
C
C     MAY HAVE TO CALL REFLIST AGAIN
C
  220   IF (J) 230, 230, 170
  230 CONTINUE
C
C     PRINT LABELS
C
      IF (LAB.EQ.0) GO TO 320
      CALL SORT(LAB, LBR)
      DO 310 JBR=1,LBR
        LABHD = HASH(JBR)
        CALL S5UNPK(DSA(LABHD+4), STACK(20), 6)
        OK = .FALSE.
        IF (OPT(2)) GO TO 240
        WRITE (OUTUT,99993) (STACK(L),L=20,25)
        GO TO 310
  240   II = DSA(LABHD+1)
      II = DSA(II+1)
 250  CALL RFLIST(II, M, J, DSA(LABHD+1) )
        K = M
        IF (M.GE.57) K = 57
        WRITE (OUTUT,99993) (STACK(I),I=20,25), (STACK(I),I=50,K)
99993   FORMAT (1X, 6A1, 23X, 8(I5, 1X))
        IF (M-57) 300, 300, 260
  260   L = (M-57)/8
        LL = 58
        IF (L) 300, 290, 270
  270   DO 280 K=1,L
          LK = LL + 7
          WRITE (OUTUT,99992) (STACK(I),I=LL,LK)
          LL = LK + 1
  280   CONTINUE
        IF (LK.EQ.M) GO TO 300
  290   WRITE (OUTUT,99992) (STACK(I),I=LL,M)
99992   FORMAT (30X, 8(I5, 1X))
  300   IF (J) 310, 310, 250
  310 CONTINUE
  320 IF (.NOT.COMM) GO TO 390
      CALL SORT(SYM, LBR)
      WRITE (OUTUT,99991)
99991 FORMAT (//14H COMMON BLOCKS//)
      DO 380 JBR=1,LBR
        SYMHD = HASH(JBR)
        I = IGATT1(SYMHD,8)
        IF (I.NE.7) GO TO 380
        CALL S5UNPK(DSA(SYMHD+4), STACK(100), 6)
        N = 0
        II = DSA(SYMHD+2)
  330   L = 11
        CALL RDLIST(II, 10, M, 0)
        IF (M) 340, 380, 340
  340   DO 350 I=1,M
          J = STACK(I) + 4
          CALL S5UNPK(DSA(J), STACK(L), 6)
          L = L + 7
          STACK(L-1) = BL
  350   CONTINUE
        L = L - 1
        IF (N) 360, 360, 370
  360   WRITE (OUTUT,99990) (STACK(I),I=100,105), (STACK(I),I=11,L)
99990   FORMAT (1X, 6A1, 3X, 70A1)
        N = 1
        GO TO 330
  370   WRITE (OUTUT,99989) (STACK(K),K=11,L)
99989   FORMAT (10X, 70A1)
        GO TO 330
  380 CONTINUE
  390 RETURN
      END

unix.superglobalmegacorp.com

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