Annotation of researchv10no/cmd/pfort/INTEXT.f, revision 1.1.1.1

1.1       root        1:       LOGICAL FUNCTION INTEXT(LL, L1, L2, BR)
                      2: C
                      3: C     LL POINTS TO DSA ENTRY OF FCN NAME
                      4: C     L1 POINTS INTO STACK TO BEGINNING OF ARGS
                      5: C     L2 POINTS INTO STACK TO LAST ARG ENTRY
                      6: C      BR .TRUE. MEANS LOOK FOR BOTH EXTERNALS ND INTRINS
                      7: C     BR FALSE MEANS JUST LOOK FOR EXTERNALS
                      8: C      ROUTINE CHECKS FOR REFERENCES TO INTRINSIC OR BASIC EXTERNAL
                      9: C     FCNS;  RETURNS TRUE IF FINDS INTRINSIC FCN.  CHECKS INTRINSICS
                     10: C      ARGS FOR USAGE, TYPE AND NUMBER.  MARKS POSSIBLE BASIC EXTDRNAL
                     11: C     FCNS SENT DOWN TO IT
                     12: C
                     13:       INTEGER STACK, BL, PDSA, DSA, FCN(6), Z
                     14:       LOGICAL BR
                     15:       COMMON /CEXPRS/ LSTACK, STACK(620)
                     16:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
                     17:       COMMON /INTS/ Z(346)
                     18:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
                     19:       DATA BL /1H /
                     20:       INTEXT = .FALSE.
                     21:       CALL S5UNPK(DSA(LL+4), FCN(1), 6)
                     22:       K = 1
                     23:       DO 40 I=1,55
                     24:         K1 = K + 1
                     25:         K2 = K1 + Z(K) - 1
                     26:         L = 0
                     27:         DO 10 J=K1,K2
                     28:           L = L + 1
                     29:           IF (FCN(L).NE.Z(J)) GO TO 30
                     30:    10   CONTINUE
                     31:         IF (L.EQ.6) GO TO 60
                     32:         L = L + 1
                     33:         DO 20 J=L,6
                     34:           IF (FCN(J).NE.BL) GO TO 30
                     35:    20   CONTINUE
                     36:         GO TO 60
                     37:    30   K = K2 + 2
                     38:    40 CONTINUE
                     39:    50 RETURN
                     40: C
                     41: C     DIFFERENTIATES BETWEEN A POSSIBLE BASIC EXTERNAL AND POSSIBLE
                     42: C      INTRINSIC FCN
                     43: C
                     44:    60 L = MOD(Z(K2+1),1024)/512
                     45: C
                     46: C     IF POSSIBLE BASIC EXTERNAL CHECK TYPE AND SET IT IF NOT ALREADY
                     47: C     EXPLICITLY SET
                     48: C
                     49:       IF (L.NE.1) GO TO 70
                     50:       L = IGATT1(LL,1)
                     51:       IF (L/8.GE.1) GO TO 190
                     52:       L = MOD(Z(K2+1),8)
                     53:       IF (BR) L = L + 8
                     54:       CALL SATT1(LL, 1, L)
                     55: C
                     56: C       MARK AS USED IN PASS 1
                     57: C
                     58:       GO TO 190
                     59: C
                     60: C      CHEKC IF IN EXTERNAL STMT  IF SO NOT AN INTRINSIC
                     61: C
                     62:    70 IF (.NOT.BR) GO TO 50
                     63:       L = IGATT1(LL,8)
                     64:       IF (L.EQ.13) GO TO 50
                     65: C
                     66: C     CHECK IF EXPLICITLY TYPES DIFFERENTLY THAN EXPECTED
                     67: C
                     68:       L = IGATT1(LL,1)
                     69:       J = MOD(Z(K2+1),8)
                     70:       IF (L.GE.8) GO TO 80
                     71:       CALL SATT1(LL, 1, J+8)
                     72:       GO TO 90
                     73:    80 IF (J.NE.MOD(L,8)) GO TO 50
                     74: C
                     75: C     K POINTS TO THE FUNCTION ENTRY IN Z
                     76: C     K1 POINTS TO FIRST LETTER IN FCN-NAME; K2 TO LAST LETTER
                     77: C     FIELDS IN ATTRIBUTE WORD ARE AS FOLLOWS:
                     78: C     BITS 0-2 TYPE FCN
                     79: C     BITS 3-5 TYPE ARGS
                     80: C     BIT 6 IF 1, FIXED NO ARGS; IF 0 VARIABLE NO OF ARGS
                     81: C      BITS 7-8 MINIMUM NUMBER OF ARGS
                     82: C      BITS 9 IF 0, INTRINSIC; IF 1 BASIC EXTERNAL
                     83: C      BITS 10 IF 1 USED IN PASS 1; ELSE NOT REFERENCED
                     84: C
                     85: C     FCN IS INTRINSIC
                     86: C     CHECK NUMBER OF ARGS
                     87: C
                     88:    90 I = MOD(Z(K2+1),128)/64
                     89:       J = MOD(Z(K2+1),512)/128
                     90:       IF (I) 100, 100, 120
                     91: C
                     92: C     VARIABLE NUMBER OF ARGS ALLOWED
                     93: C     MUST BE AT LEAST J
                     94: C
                     95:   100 IF ((L2-L1+1)/2.GE.J) GO TO 130
                     96:  110  CALL ERROR2(29H INCORRECT NUMBER OF ARGS IN , 29, DSA(LL+4),
                     97:      * 1, 1,  1)
                     98:       GO TO 180
                     99: C
                    100: C     FIXED NUMBER OF ARGS
                    101: C
                    102:   120 IF ((L2-L1+1)/2.NE.J) GO TO 110
                    103: C
                    104: C     CHECK THRU ARG LIST OR PROPER TYPE ID AS AN ARG;
                    105: C     CHECK TYPE AND THAT ARGS ARE SCALARS
                    106: C
                    107:   130 L = MOD(Z(K2+1),64)/8
                    108:       DO 170 N=L1,L2,2
                    109: C
                    110: C     CHECK FOR EXPRESSION AS ARG
                    111: C
                    112:         IF (STACK(N).EQ.0) GO TO 160
                    113: C
                    114: C     CHECK USAGE
                    115: C
                    116:         I = IGATT1(STACK(N),8)
                    117:         IF (I.EQ.10 .OR. ((I.EQ.2 .OR. I.EQ.5 .OR. I.EQ.14) .AND.
                    118:      *      STACK(N+1).NE.6)) GO TO 160
                    119:         IF (I.NE.0) GO TO 140
                    120:         CALL SATT1(STACK(N), 8, 10)
                    121:         GO TO 160
                    122:   140   IF (I.EQ.1 .AND. ITYP.NE.31) GO TO 150
                    123:         I = STACK(N)
                    124:         IF (DSA(I+2).EQ.IASF) GO TO 160
                    125:   150   CALL ERROR2(40H ILLEGAL ARGUMENT IN INTRINSIC REFERENCE, 40,
                    126:      *  DSA(LL+4), 1, 1, 1)
                    127:         GO TO 170
                    128: C
                    129: C     CHECK STRUCTURE
                    130: C
                    131:   160   IF (STACK(N+1)/8.EQ.1) CALL ERROR2(
                    132:      *      48H ILLEGAL STRUCTURE OF ARG IN INTRINSIC REFERENCE, 48,
                    133:      *  DSA(LL+4), 1, 1, 1)
                    134: C
                    135: C     CHECK TYPE
                    136: C
                    137:         IF (MOD(STACK(N+1),8).NE.L) CALL ERROR2(
                    138:      *      43H ILLEGAL TYPE OF ARG IN INTRINSIC REFERENCE, 43,
                    139:      *  DSA(LL+4), 1, 1, 1)
                    140:   170 CONTINUE
                    141:   180 INTEXT = .TRUE.
                    142:       I = IGATT1(LL,8)
                    143:       IF (I.NE.0) GO TO 190
                    144:       CALL SATT1(LL, 8, 14)
                    145: C
                    146: C     MARK FCN AS USED
                    147: C
                    148:   190 K = Z(K2+1)/1024
                    149:       IF (K.EQ.0) Z(K2+1) = Z(K2+1) + 1024
                    150:       GO TO 50
                    151:       END

unix.superglobalmegacorp.com

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