FM080.f Source File


Contents

Source Code


Source Code

      PROGRAM FM080

C     COMMENT SECTION                                                   00010080
C                                                                       00020080
C     FM080                                                             00030080
C                                                                       00040080
C         THIS ROUTINE CONTAINS EXTERNAL FUNCTION REFERENCE TESTS.      00050080
C     THE FUNCTION SUBPROGRAMS CALLED BY THIS ROUTINE ARE FF081,        00060080
C     FF082 AND FF083.  THE FUNCTION SUBPROGRAMS ARE DEFINED AS         00070080
C     FF081 = INTEGER, FF082 = REAL, FF083 = IMPLICIT REAL.             00080080
C     THE FUNCTION SUBPROGRAM DUMMY ARGUMENTS MUST AGREE IN ORDER,      00090080
C     NUMBER AND TYPE WITH THE CORRESPONDING ACTUAL ARGUMENTS OF THE    00100080
C     MAIN PROGRAM.     THE ARGUMENTS OF THE FUNCTION SUBPROGRAMS WILL  00110080
C     CORRESPOND TO ACTUAL ARGUMENT LIST REFERENCES OF VARIABLE-NAME,   00120080
C     ARRAY-NAME, ARRAY-ELEMENT-NAME AND EXPRESSION RESPECTIVELY.       00130080
C                                                                       00140080
C         THIS ROUTINE WILL TEST THE VALUE OF THE FUNCTION AND THE      00150080
C     FUNCTION ARGUMENTS RETURNED FOLLOWING THE FUNCTION REFERENCE CALL.00160080
C                                                                       00170080
C                                                                       00180080
C      REFERENCES                                                       00190080
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00200080
C              X3.9-1978                                                00210080
C                                                                       00220080
C        SECTION 2.6, ARRAY                                             00230080
C        SECTION 15.5.2, REFERENCING EXTERNAL FUNCTIONS                 00240080
C        SECTION 17.2, EVENTS THAT CAUSE ENTITIES TO BECOME DEFINED     00250080
      DIMENSION  IADN1A (5),   IADN2A (4,4)                             00260080
      DIMENSION RADN3A (3,6,3), RADN1A (10)                             00270080
      DIMENSION IADN3A (3,4,5)                                          00280080
      INTEGER FF081                                                     00290080
      REAL FF082                                                        00300080
C                                                                       00310080
C      **********************************************************       00320080
C                                                                       00330080
C         A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE         00340080
C     BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD  00350080
C     PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00360080
C     FEDERAL COBOL COMPILER TESTING SERVICE.  THE FORTRAN COMPILER     00370080
C     VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00380080
C     DATA, AND AN EXECUTIVE SYSTEM.  EACH AUDIT ROUTINE IS A FORTRAN   00390080
C     PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC  00400080
C     LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00410080
C     OF EXECUTING THESE TESTS.                                         00420080
C                                                                       00430080
C         THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00440080
C     FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978.                 00450080
C                                                                       00460080
C         SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO -             00470080
C                                                                       00480080
C              NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY           00490080
C                   SOFTWARE STANDARDS VALIDATION GROUP                 00500080
C                          BUILDING 225  RM A266                        00510080
C                         GAITHERSBURG, MD  20899                       00520080
C      **********************************************************       00530080
C                                                                       00540080
C                                                                       00550080
C                                                                       00560080
C     INITIALIZATION SECTION                                            00570080
C                                                                       00580080
C     INITIALIZE CONSTANTS                                              00590080
C      **************                                                   00600080
C     I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER.         00610080
      I01 = 5                                                           00620080
C     I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER.             00630080
      I02 = 6                                                           00640080
C     SYSTEM ENVIRONMENT SECTION                                        00650080
C                                                                       00660080
CX010    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00670080
C     THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5      00680080
C     (UNIT NUMBER FOR CARD READER).                                    00690080
CX011    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00700080
C     THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00710080
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE.         00720080
C                                                                       00730080
CX020    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00740080
C     THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6      00750080
C     (UNIT NUMBER FOR PRINTER).                                        00760080
CX021    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00770080
C     THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00780080
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE.         00790080
C                                                                       00800080
      IVPASS=0                                                          00810080
      IVFAIL=0                                                          00820080
      IVDELE=0                                                          00830080
      ICZERO=0                                                          00840080
C                                                                       00850080
C     WRITE PAGE HEADERS                                                00860080
      WRITE (I02,90000)                                                 00870080
      WRITE (I02,90001)                                                 00880080
      WRITE (I02,90002)                                                 00890080
      WRITE (I02, 90002)                                                00900080
      WRITE (I02,90003)                                                 00910080
      WRITE (I02,90002)                                                 00920080
      WRITE (I02,90004)                                                 00930080
      WRITE (I02,90002)                                                 00940080
      WRITE (I02,90011)                                                 00950080
      WRITE (I02,90002)                                                 00960080
      WRITE (I02,90002)                                                 00970080
      WRITE (I02,90005)                                                 00980080
      WRITE (I02,90006)                                                 00990080
      WRITE (I02,90002)                                                 01000080
C                                                                       01010080
C     TEST SECTION                                                      01020080
C                                                                       01030080
C     EXTERNAL FUNCTION REFERENCE  -  FUNCTION SUBPROGRAM DEFINED AS    01040080
C                                     INTEGER (FF081)                   01050080
C                                                                       01060080
 6741 CONTINUE                                                          01070080
      IVTNUM = 674                                                      01080080
C                                                                       01090080
C         TEST 674 THROUGH 679 TEST THE FUNCTION AND ARGUMENT VALUES    01100080
C     FROM REFERENCE OF FUNCTION FF081.  FUNCTION SUBPROGRAM FF081 IS   01110080
C     DEFINED AS INTEGER.                                               01120080
C                                                                       01130080
C     **** TEST 674 ****                                                01140080
C                                                                       01150080
C     TEST 674 TESTS THE FUNCTION VALUE RETURNED FROM FUNCTION FF081    01160080
C                                                                       01170080
      IF (ICZERO) 36740,6740,36740                                      01180080
 6740 CONTINUE                                                          01190080
      IVON0A        = 0                                                 01200080
      IVON02        = 2                                                 01210080
      IADN1A (3)    = 8                                                 01220080
      IADN1A (2)    = 4                                                 01230080
      IADN2A (1,3)  =10                                                 01240080
      IVON0A = FF081 (IVON02, IADN1A, IADN2A, 999)                      01250080
      GO TO 46740                                                       01260080
36740 IVDELE =  IVDELE + 1                                              01270080
      WRITE (I02,80003) IVTNUM                                          01280080
      IF (ICZERO) 46740,6751,46740                                      01290080
46740 IF (IVON0A - 1015) 26740,16740,26740                              01300080
16740 IVPASS = IVPASS + 1                                               01310080
      WRITE (I02,80001) IVTNUM                                          01320080
      GO TO 6751                                                        01330080
26740 IVFAIL = IVFAIL + 1                                               01340080
      IVCORR = 1015                                                     01350080
      IVCOMP = IVON0A                                                   01360080
      WRITE  (I02,80004) IVTNUM, IVCOMP, IVCORR                         01370080
 6751 CONTINUE                                                          01380080
      IVTNUM = 675                                                      01390080
C                                                                       01400080
C     ****  TEST 675  ****                                              01410080
C                                                                       01420080
C         TEST 675 TESTS THE RETURN VALUE OF VARIABLE-NAME ARGUMENT     01430080
C     IVON02.   VALUE OF IVON02 SHOULD BE 4.                            01440080
C                                                                       01450080
      IF (ICZERO) 36750,6750,36750                                      01460080
 6750 CONTINUE                                                          01470080
      GO TO 46750                                                       01480080
36750 IVDELE = IVDELE + 1                                               01490080
      WRITE (I02,80003) IVTNUM                                          01500080
      IF (ICZERO) 46750,6761,46750                                      01510080
46750 IF (IVON02 - 4) 26750,16750,26750                                 01520080
16750 IVPASS = IVPASS + 1                                               01530080
      WRITE (I02,80001) IVTNUM                                          01540080
      GO TO 6761                                                        01550080
26750 IVFAIL = IVFAIL + 1                                               01560080
      IVCORR = 4                                                        01570080
      IVCOMP = IVON02                                                   01580080
      WRITE  (I02,80004) IVTNUM, IVCOMP, IVCORR                         01590080
 6761 CONTINUE                                                          01600080
      IVTNUM = 676                                                      01610080
C                                                                       01620080
C     ****  TEST 676  ****                                              01630080
C                                                                       01640080
C         TEST 676 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT        01650080
C     IADN1A.  IADN1A (2) IS INCREMENTED BY 40 IN FUNCTION SUBPROGRAM   01660080
C     AND SHOULD RETURN A VALUE OF 44.                                  01670080
C                                                                       01680080
      IF (ICZERO) 36760,6760,36760                                      01690080
 6760 CONTINUE                                                          01700080
      GO TO 46760                                                       01710080
36760 IVDELE = IVDELE + 1                                               01720080
      WRITE (I02,80003) IVTNUM                                          01730080
      IF (ICZERO) 46760,6771,46760                                      01740080
46760 IF (IADN1A (2) - 44) 26760,16760,26760                            01750080
16760 IVPASS = IVPASS + 1                                               01760080
      WRITE (I02,80001) IVTNUM                                          01770080
      GO TO 6771                                                        01780080
26760 IVFAIL = IVFAIL + 1                                               01790080
      IVCORR = 44                                                       01800080
      IVCOMP = IADN1A (2)                                               01810080
      WRITE  (I02,80004) IVTNUM, IVCOMP, IVCORR                         01820080
 6771 CONTINUE                                                          01830080
      IVTNUM = 677                                                      01840080
C                                                                       01850080
C     ****  TEST 677  ****                                              01860080
C                                                                       01870080
C        TEST 677 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT IADN1A. 01880080
C     IADN1A (3) WAS NOT MODIFFED    BY FUNCTION SUBPROGRAM AND SHOULD  01890080
C     HAVE A VALUE OF 8                                                 01900080
C                                                                       01910080
      IF (ICZERO) 36770,6770,36770                                      01920080
 6770 CONTINUE                                                          01930080
      GO TO 46770                                                       01940080
36770 IVDELE = IVDELE + 1                                               01950080
      WRITE (I02,80003) IVTNUM                                          01960080
      IF (ICZERO) 46770,6781,46770                                      01970080
46770 IF (IADN1A (3) - 8) 26770,16770,26770                             01980080
16770 IVPASS = IVPASS + 1                                               01990080
      WRITE (I02,80001) IVTNUM                                          02000080
      GO TO 6781                                                        02010080
26770 IVFAIL = IVFAIL + 1                                               02020080
      IVCORR = 8                                                        02030080
      IVCOMP = IADN1A (3)                                               02040080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          02050080
 6781 CONTINUE                                                          02060080
      IVTNUM = 678                                                      02070080
C                                                                       02080080
C     ****  TEST 678  ****                                              02090080
C                                                                       02100080
C         TEST 678 TESTS THE RETURN VALUE OF ARRAY-ELEMENT-NAME         02110080
C     IADN2A (1,3).  IADN2A (1,3) WAS INCREMENTED BY 70 IN THE FUNCTION 02120080
C     SUBPROGRAM AND SHOULD CONTAIN A VALUE OF 80.                      02130080
C                                                                       02140080
      IF (ICZERO) 36780,6780,36780                                      02150080
 6780 CONTINUE                                                          02160080
      GO TO 46780                                                       02170080
36780 IVDELE = IVDELE + 1                                               02180080
      WRITE  (I02,80003) IVTNUM                                         02190080
      IF (ICZERO) 46780,6791,46780                                      02200080
46780 IF (IADN2A (1,3) - 80) 26780,16780,26780                          02210080
16780 IVPASS = IVPASS + 1                                               02220080
      WRITE (I02,80001) IVTNUM                                          02230080
      GO TO 6791                                                        02240080
26780 IVFAIL = IVFAIL + 1                                               02250080
      IVCORR = 80                                                       02260080
      IVCOMP = IADN2A (1,3)                                             02270080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          02280080
 6791 CONTINUE                                                          02290080
      IVTNUM = 679                                                      02300080
C                                                                       02310080
C     ****  TEST 679  ****                                              02320080
C                                                                       02330080
C         TEST 679  TESTS THE VALUE OF INTEGER FUNCTION ASSIGNED        02340080
C     TO A REAL VARIABLE.                                               02350080
C                                                                       02360080
      IF (ICZERO) 36790,6790,36790                                      02370080
 6790 CONTINUE                                                          02380080
      RVON0A        = 0.0                                               02390080
      IVON02        = 2                                                 02400080
      IADN1A (2)    = 4                                                 02410080
      IADN2A (1,3)  = 10                                                02420080
      RVON0A = FF081 (IVON02, IADN1A, IADN2A, 999)                      02430080
      GO TO 46790                                                       02440080
36790 IVDELE = IVDELE + 1                                               02450080
      WRITE (I02,80003) IVTNUM                                          02460080
      IF (ICZERO) 46790,6801,46790                                      02470080
46790 IF (RVON0A - 1014.5) 26790,16790,46791                            02480080
46791 IF (RVON0A - 1015.5) 16790,16790,26790                            02490080
16790 IVPASS = IVPASS + 1                                               02500080
      WRITE (I02,80001) IVTNUM                                          02510080
      GO TO 6801                                                        02520080
26790 IVFAIL = IVFAIL + 1                                               02530080
      RVCORR = 1015.0                                                   02540080
      RVCOMP = RVON0A                                                   02550080
      WRITE  (I02,80005) IVTNUM, RVCOMP, RVCORR                         02560080
 6801 CONTINUE                                                          02570080
      IVTNUM = 680                                                      02580080
C                                                                       02590080
C     EXTERNAL FUNCTION REFERENCE - FUNCTION SUBPROGRAM FF082 DEFINED AS02600080
C                                   REAL                                02610080
C                                                                       02620080
C         TESTS 680 THRU 685  TESTS THE FUNCTION AND ARGUMENT VALUES    02630080
C     FROM THE FUNCTION REFERENCE TO SUBPROGRAM FF082. THE FUNCTION     02640080
C     SUBPROGRAM IS DEFINED AS REAL.                                    02650080
C                                                                       02660080
C     ****  TEST 680  ***                                               02670080
C                                                                       02680080
C         TEST  680  TESTS THE VALUE OF THE FUNCTION FF082. VALUE OF    02690080
C     FUNCTION SHOULD BE 339.0.                                         02700080
C                                                                       02710080
      IF  (ICZERO) 36800,6800,36800                                     02720080
 6800 CONTINUE                                                          02730080
      RVON01        =  2.0                                              02740080
      RADN3A (2,5,2) = 100.0                                            02750080
      RADN1A (5)   = 210.5                                              02760080
      RVON0A       = 0.0                                                02770080
      RVON0A = FF082 (RVON01, RADN3A, RADN1A, 26.5)                     02780080
      GO TO 46800                                                       02790080
36800 IVDELE = IVDELE + 1                                               02800080
      WRITE (I02, 80003) IVTNUM                                         02810080
      IF (ICZERO) 46800,6811,46800                                      02820080
46800 IF (RVON0A - 338.5) 26800,16800,46801                             02830080
46801 IF (RVON0A - 339.5) 16800,16800,26800                             02840080
16800 IVPASS = IVPASS + 1                                               02850080
      WRITE (I02,80001) IVTNUM                                          02860080
      GO TO 6811                                                        02870080
26800 IVFAIL = IVFAIL + 1                                               02880080
      RVCORR = 339.0                                                    02890080
      RVCOMP = RVON0A                                                   02900080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          02910080
 6811 CONTINUE                                                          02920080
      IVTNUM = 681                                                      02930080
C                                                                       02940080
C     **** TEST 681  ****                                               02950080
C                                                                       02960080
C         TEST 681 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT RVON01 02970080
C     FOLLOWING THE FUNCTION REFERENCE.  VALUE OF RVON01 SHOULD BE 8.4. 02980080
C                                                                       02990080
      IF (ICZERO) 36810,6810,36810                                      03000080
 6810 CONTINUE                                                          03010080
      GO TO 46810                                                       03020080
36810 IVDELE = IVDELE + 1                                               03030080
      WRITE (I02,80003) IVTNUM                                          03040080
      IF (ICZERO) 46810,6821,46810                                      03050080
46810 IF (RVON01 - 8.395) 26810,16810,46811                             03060080
46811 IF (RVON01 - 8.405) 16810,16810,26810                             03070080
16810 IVPASS = IVPASS + 1                                               03080080
      WRITE (I02,80001) IVTNUM                                          03090080
      GO TO 6821                                                        03100080
26810 IVFAIL = IVFAIL + 1                                               03110080
      RVCORR = 8.4                                                      03120080
      RVCOMP = RVON01                                                   03130080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          03140080
 6821 CONTINUE                                                          03150080
      IVTNUM = 682                                                      03160080
C                                                                       03170080
C     ****  TEST 682  ****                                              03180080
C                                                                       03190080
C         TEST 682 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A    03200080
C     FOLLOWING THE FUNCTION REFERENCE. RADN3A (2,5,2) WAS INITIALIZED  03210080
C     IN MAIN PROGRAM AND INCREMENTED IN SUBPROGRAM. VALUE OF RADN3A    03220080
C     (2,5,2) SHOULD BE 112.2.                                          03230080
C                                                                       03240080
      IF (ICZERO) 36820,6820,36820                                      03250080
 6820 CONTINUE                                                          03260080
      GO TO 46820                                                       03270080
36820 IVDELE = IVDELE + 1                                               03280080
      WRITE (I02,80003) IVTNUM                                          03290080
      IF (ICZERO) 46820,6831,46820                                      03300080
46820 IF (RADN3A (2,5,2) - 111.7) 26820,16820,46821                     03310080
46821 IF (RADN3A (2,5,2) - 112.7) 16820,16820,26820                     03320080
16820 IVPASS = IVPASS + 1                                               03330080
      WRITE (I02,80001) IVTNUM                                          03340080
      GO TO 6831                                                        03350080
26820 IVFAIL = IVFAIL + 1                                               03360080
      RVCORR = 112.2                                                    03370080
      RVCOMP = RADN3A (2,5,2)                                           03380080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          03390080
 6831 CONTINUE                                                          03400080
      IVTNUM = 683                                                      03410080
C                                                                       03420080
C     ****  TEST 683  ****                                              03430080
C                                                                       03440080
C         TEST 683 TESTS  THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A   03450080
C     FOLLOWING THE FUNCTION REFERENCE.  RADN3A (1,2,1) WAS INITIALIZED 03460080
C     IN THE SUBPROGRAM. THE VALUE OF RADN3A (1,2,1) SHOULD BE 612.2.   03470080
C                                                                       03480080
      IF (ICZERO) 36830,6830,36830                                      03490080
 6830 CONTINUE                                                          03500080
      GO TO 46830                                                       03510080
36830 IVDELE = IVDELE + 1                                               03520080
      WRITE (I02,80003) IVTNUM                                          03530080
      IF (ICZERO) 46830,6841,46830                                      03540080
46830 IF (RADN3A (1,2,1) - 611.7) 26830,16830,46831                     03550080
46831 IF (RADN3A (1,2,1) - 612.7) 16830,16830,26830                     03560080
16830 IVPASS = IVPASS + 1                                               03570080
      WRITE (I02,80001) IVTNUM                                          03580080
      GO TO 6841                                                        03590080
26830 IVFAIL = IVFAIL + 1                                               03600080
      RVCORR = 612.2                                                    03610080
      RVCOMP = RADN3A (1,2,1)                                           03620080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          03630080
 6841 CONTINUE                                                          03640080
      IVTNUM = 684                                                      03650080
C                                                                       03660080
C     ****  TEST 684  ****                                              03670080
C                                                                       03680080
C         TEST 684 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT   03690080
C     RADN1A FOLLOWING THE FUNCTION REFERENCE. RADN1A (5) WAS           03700080
C     INITIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 18.8 IN THE    03710080
C     FUNCTION SUBPROGRAM.  THE VALUE OF RADN1A SHOULD BE 229.3.        03720080
C                                                                       03730080
      IF (ICZERO) 36840,6840,36840                                      03740080
 6840 CONTINUE                                                          03750080
      GO TO 46840                                                       03760080
36840 IVDELE = IVDELE + 1                                               03770080
      WRITE (I02,80003) IVTNUM                                          03780080
      IF (ICZERO) 46840,6851,46840                                      03790080
46840 IF (RADN1A (5) - 228.8) 26840,16840,46841                         03800080
46841 IF (RADN1A (5) - 229.8) 16840,16840,26840                         03810080
16840 IVPASS = IVPASS + 1                                               03820080
      WRITE (I02,80001) IVTNUM                                          03830080
      GO TO 6851                                                        03840080
26840 IVFAIL = IVFAIL + 1                                               03850080
      RVCORR = 229.3                                                    03860080
      RVCOMP = RADN1A (5)                                               03870080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          03880080
 6851 CONTINUE                                                          03890080
      IVTNUM = 685                                                      03900080
C                                                                       03910080
C     **** TEST 685 ****                                                03920080
C                                                                       03930080
C         TEST 685  TESTS THE RESULTANT VALUE WHERE THE FUNCTION        03940080
C     SUBPROGRAM IS DEFINED AS REAL AND THE VARIABLE TO WHICH THE       03950080
C     FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM IS DEFINED AS      03960080
C     INTEGER.                                                          03970080
C                                                                       03980080
      IF (ICZERO) 36850,6850,36850                                      03990080
 6850 CONTINUE                                                          04000080
      RVON01   = 4.0                                                    04010080
      RADN3A (2,5,2) = 200.0                                            04020080
      RADN1A (5) = 2.85                                                 04030080
      IVON0A = 0.0                                                      04040080
      IVON0A = FF082 (RVON01, RADN3A, RADN1A, 102.68)                   04050080
      GO TO 46850                                                       04060080
36850 IVDELE = IVDELE + 1                                               04070080
      WRITE (I02,80003) IVTNUM                                          04080080
      IF (ICZERO) 46850,6861,46850                                      04090080
46850 IF (IVON0A - 309)    26850,16850,26850                            04100080
16850 IVPASS = IVPASS + 1                                               04110080
      WRITE (I02,80001) IVTNUM                                          04120080
      GO TO 6861                                                        04130080
26850 IVFAIL = IVFAIL + 1                                               04140080
      IVCORR = 309                                                      04150080
      IVCOMP = IVON0A                                                   04160080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          04170080
 6861 CONTINUE                                                          04180080
      IVTNUM = 686                                                      04190080
C                                                                       04200080
C         TESTS 686 THRU 690 TESTS THE FUNCTION AND ARGUMENT VALUES     04210080
C     FROM THE EXTERNAL FUNCTION REFERENCE TO SUBPROGRAM FF083. THE     04220080
C     FUNCTION SUBPROGRAM IS AN IMPLICIT DEFINITION OF REAL.            04230080
C                                                                       04240080
C     *****  TEST 686  *****                                            04250080
C                                                                       04260080
C         TEST 686 TESTS THE VALUE OF FUNCTION FF082. THE VALUE OF THE  04270080
C     FUNCTION SHOULD BE 921.8.                                         04280080
C                                                                       04290080
      IF (ICZERO) 36860,6860,36860                                      04300080
 6860 CONTINUE                                                          04310080
C                                                                       04320080
C                                                                       04330080
      IVON01 =  826                                                     04340080
      IADN2A (1,1) = 77                                                 04350080
      IADN3A (2,3,4) =  10                                              04360080
      RVON02 = 4.4                                                      04370080
      RVON03 = 0.0                                                      04380080
C                                                                       04390080
      RVON03 = FF083 (IVON01, IADN2A, IADN3A, RVON02 * 2.0)             04400080
      GO TO 46860                                                       04410080
36860 IVDELE = IVDELE + 1                                               04420080
      WRITE (I02,80003) IVTNUM                                          04430080
      IF (ICZERO) 46860,6871,46860                                      04440080
46860 IF (RVON03 - 921.3) 26860,16860,46861                             04450080
46861 IF (RVON03 - 922.3) 16860,16860,26860                             04460080
16860 IVPASS = IVPASS + 1                                               04470080
      WRITE (I02,80001) IVTNUM                                          04480080
      GO TO 6871                                                        04490080
26860 IVFAIL = IVFAIL + 1                                               04500080
      RVCORR = 921.8                                                    04510080
      RVCOMP = RVON03                                                   04520080
      WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR                          04530080
 6871 CONTINUE                                                          04540080
      IVTNUM = 687                                                      04550080
C                                                                       04560080
C     ****  TEST  687  *****                                            04570080
C                                                                       04580080
C         TEST 687 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT IVON01 04590080
C     FOLLOWING THE FUNCTION REFERENCE. THE VALUE OF IVON01 SHOULD BE   04600080
C     836.                                                              04610080
C                                                                       04620080
      IF (ICZERO) 36870,6870,36870                                      04630080
 6870 CONTINUE                                                          04640080
      GO TO 46870                                                       04650080
36870 IVDELE = IVDELE + 1                                               04660080
      WRITE (I02,80003) IVTNUM                                          04670080
      IF (ICZERO) 46870,6881,46870                                      04680080
46870 IF (IVON01 - 836) 26870,16870,26870                               04690080
16870 IVPASS = IVPASS + 1                                               04700080
      WRITE (I02,80001) IVTNUM                                          04710080
      GO TO 6881                                                        04720080
26870 IVFAIL = IVFAIL + 1                                               04730080
      IVCORR = 836                                                      04740080
      IVCOMP = IVON01                                                   04750080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          04760080
 6881 CONTINUE                                                          04770080
      IVTNUM = 688                                                      04780080
C                                                                       04790080
C     ****  TEST 688  *****                                             04800080
C                                                                       04810080
C         TEST 688 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT IADN2A    04820080
C     FOLLOWING THE FUNCTION REFERENCE. THE ACTUAL ARGUMENT WAS         04830080
C     INITIALIZED IN THE MAIN PROGRAM AND IS INCREMENTED IN THE         04840080
C     SUBPROGRAM. THE VALUE OF IADN2A (1,1) SHOULD BE 97.               04850080
C                                                                       04860080
      IF (ICZERO) 36880,6880,36880                                      04870080
 6880 CONTINUE                                                          04880080
      GO TO 46880                                                       04890080
36880 IVDELE = IVDELE + 1                                               04900080
      WRITE  (I02,80003) IVTNUM                                         04910080
      IF (ICZERO) 46880,6880,46880                                      04920080
46880 IF (IADN2A (1,1) - 97) 26880,16880,26880                          04930080
16880 IVPASS = IVPASS + 1                                               04940080
      WRITE (I02,80001) IVTNUM                                          04950080
      GO TO 6891                                                        04960080
26880 IVFAIL = IVFAIL + 1                                               04970080
      IVCORR = 97                                                       04980080
      IVCOMP = IADN2A (1,1)                                             04990080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          05000080
 6891 CONTINUE                                                          05010080
      IVTNUM = 689                                                      05020080
C                                                                       05030080
C     **** TEST 689 ****                                                05040080
C                                                                       05050080
C         TEST 689 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT   05060080
C     IADN3A FOLLOWING THE FUNCTION REFERENCE.  IADN3A (2,3,4)          05070080
C     WAS INTIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 40 IN THE   05080080
C     FUNCTION SUBPROGRAM. THE VALUE OF IADN3A SHOULD BE 50.            05090080
C                                                                       05100080
      IF (ICZERO) 36890,6890,36890                                      05110080
 6890 CONTINUE                                                          05120080
      GO TO 46890                                                       05130080
36890 IVDELE = IVDELE + 1                                               05140080
      WRITE (I02,80003) IVTNUM                                          05150080
      IF (ICZERO) 46890,6901,46890                                      05160080
46890 IF (IADN3A (2,3,4) - 50) 26890,16890,26890                        05170080
16890 IVPASS = IVPASS + 1                                               05180080
      WRITE (I02,80001) IVTNUM                                          05190080
      GO TO 6901                                                        05200080
26890 IVFAIL = IVFAIL + 1                                               05210080
      IVCORR = 50                                                       05220080
      IVCOMP = IADN3A (2,3,4)                                           05230080
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            05240080
 6901 CONTINUE                                                          05250080
      IVTNUM = 690                                                      05260080
C                                                                       05270080
C     **** TEST 690  ****                                               05280080
C                                                                       05290080
C         TEST  690 TESTS THE RESULTANT VALUE WHERE THE FUNCTION        05300080
C     SUBPROGRAM IS IMPLICITY DEFINED AS REAL AND THE VARIABLE          05310080
C     TO WHICH THE FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM       05320080
C     IS DEFINED AS INTEGER. THE VALUE OF IVON03 SHOULD BE 329.         05330080
C                                                                       05340080
      IF (ICZERO) 36900,6900,36900                                      05350080
 6900 CONTINUE                                                          05360080
      IVON01 =   226                                                    05370080
      IADN2A (1,1) = 66                                                 05380080
      IADN3A (2,3,4) = 20                                               05390080
      RVON02 = 8.8                                                      05400080
      IVON03 = 0                                                        05410080
C                                                                       05420080
      IVON03 = FF083 (IVON01,IADN2A,IADN3A,RVON02 * 2.0)                05430080
C                                                                       05440080
      GO TO 46900                                                       05450080
36900 IVDELE = IVDELE + 1                                               05460080
      WRITE (I02,80003) IVTNUM                                          05470080
      IF (ICZERO) 46900,6911,46900                                      05480080
46900 IF (IVON03 - 329) 26900,16900,26900                               05490080
16900 IVPASS = IVPASS + 1                                               05500080
      WRITE (I02,80001) IVTNUM                                          05510080
      GO TO 6911                                                        05520080
26900 IVFAIL = IVFAIL + 1                                               05530080
      IVCORR = 329                                                      05540080
      IVCOMP = IVON03                                                   05550080
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          05560080
 6911 CONTINUE                                                          05570080
C                                                                       05580080
C     WRITE PAGE FOOTINGS AND RUN SUMMARIES                             05590080
99999 CONTINUE                                                          05600080
      WRITE (I02,90002)                                                 05610080
      WRITE (I02,90006)                                                 05620080
      WRITE (I02,90002)                                                 05630080
      WRITE (I02,90002)                                                 05640080
      WRITE (I02,90007)                                                 05650080
      WRITE (I02,90002)                                                 05660080
      WRITE (I02,90008)  IVFAIL                                         05670080
      WRITE (I02,90009) IVPASS                                          05680080
      WRITE (I02,90010) IVDELE                                          05690080
C                                                                       05700080
C                                                                       05710080
C     TERMINATE ROUTINE EXECUTION                                       05720080
      STOP                                                              05730080
C                                                                       05740080
C     FORMAT STATEMENTS FOR PAGE HEADERS                                05750080
90000 FORMAT ("1")                                                      05760080
90002 FORMAT (" ")                                                      05770080
90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" )            05780080
90003 FORMAT (" ",21X,"VERSION 2.1" )                                   05790080
90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" )        05800080
90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 05810080
90006 FORMAT (" ",5X,"----------------------------------------------" ) 05820080
90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" )                             05830080
C                                                                       05840080
C     FORMAT STATEMENTS FOR RUN SUMMARIES                               05850080
90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" )                        05860080
90009 FORMAT (" ",15X,I5," TESTS PASSED" )                              05870080
90010 FORMAT (" ",15X,I5," TESTS DELETED" )                             05880080
C                                                                       05890080
C     FORMAT STATEMENTS FOR TEST RESULTS                                05900080
80001 FORMAT (" ",4X,I5,7X,"PASS")                                      05910080
80002 FORMAT (" ",4X,I5,7X,"FAIL")                                      05920080
80003 FORMAT (" ",4X,I5,7X,"DELETED")                                   05930080
80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6)                         05940080
80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5)                    05950080
C                                                                       05960080
90007 FORMAT (" ",20X,"END OF PROGRAM FM080" )                          05970080
      END                                                               05980080

      INTEGER FUNCTION FF081 (IDON01, IDDN10, IDDN20, IDON02)           00010081
C                                                                       00020081
C     COMMENT SECTION                                                   00030081
C                                                                       00040081
C     FF081                                                             00050081
C                                                                       00060081
C         THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00070081
C     THE FUNCTION DUMMY ARGUMENTS IDON01, IDDN10 AND IDDN20 ARE        00080081
C     INCREMENTED BY 2, 40 AND 70 RESPECTIVELY BEFORE CONTROL IS        00090081
C     RETURNED TO THE CALLING PROGRAM.  VALUE OF THE FUNCTION WILL BE   00100081
C     THE SUM OF THE ACTUAL ARGUMENTS AS PASSED FROM CALLING PROGRAM.   00110081
C                                                                       00120081
C      REFERENCES                                                       00130081
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00140081
C              X3.9-1978                                                00150081
C                                                                       00160081
C        SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT     00170081
C                                                                       00180081
C     TEST SECTION                                                      00190081
C                                                                       00200081
C         FUNCTION SUBPROGRAM                                           00210081
C                                                                       00220081
      DIMENSION  IDDN10 (5),   IDDN20 (4,4)                             00230081
      IVON01 = IDON01                                                   00240081
      IVON02 = IDDN10(2)                                                00250081
      IVON03 = IDDN20(1,3)                                              00260081
      IVON04 = IDON02                                                   00270081
C                                                                       00280081
      FF081  = IVON01 + IVON02 + IVON03 + IVON04                        00290081
      IDON01 = IVON01 + 2                                               00300081
      IDDN10 (2) = IVON02   + 40                                        00310081
      IDDN20 (1,3) = IVON03 + 70                                        00320081
      IDDN10 (4) = IVON02 + 40                                          00330081
      RETURN                                                            00340081
      END                                                               00350081

      REAL FUNCTION FF082 (RDON01, RDDN3A, RDDN1A, RDON02)              00010082
      DIMENSION  RDDN3A (3,6,3), RDDN1A (10)                            00020082
C                                                                       00030082
C     COMMENT SECTION                                                   00040082
C                                                                       00050082
C     FF082                                                             00060082
C                                                                       00070082
C         THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080082
C     THE FUNCTION DUMMY ARGUMENTS RDON01, RDDN3A, AND RDDN1A ARE       00090082
C     INCREMENTED BY 6.4, 12.2 AND 18.8 RESPECTIVELY BEFORE CONTROL IS  00100082
C     RETURNED TO THE MAIN PROGRAM.  VALUE OF THE FUNCTION WILL BE      00110082
C     THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE SUBPROGRAM.      00120082
C                                                                       00130082
C      REFERENCES                                                       00140082
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00150082
C              X3.9-1978                                                00160082
C                                                                       00170082
C        SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT     00180082
C                                                                       00190082
C     TEST SECTION                                                      00200082
C                                                                       00210082
C          FUNCTION SUBPROGRAM                                          00220082
C                                                                       00230082
      RVON01 = RDON01                                                   00240082
      RVON02 = RDDN3A (2,5,2)                                           00250082
      RVON03 = RDDN1A (5)                                               00260082
      RVON04 = RDON02                                                   00270082
C                                                                       00280082
      FF082 = RVON01 + RVON02 + RVON03  + RVON04                        00290082
C                                                                       00300082
      RDON01 =     RVON01 + 6.4                                         00310082
      RDDN3A (2,5,2) = RVON02 + 12.2                                    00320082
      RDDN1A (5)     = RVON03 + 18.8                                    00330082
      RDDN3A (1,2,1) =  600.0 + 12.2                                    00340082
      RETURN                                                            00350082
      END                                                               00360082

      FUNCTION  FF083 (IDON01,IDDN2A,IDDN3A,RDON02)                     00010083
      DIMENSION  IDDN2A (2,2), IDDN3A(3,4,5)                            00020083
C                                                                       00030083
C     COMMENT SECTION                                                   00040083
C                                                                       00050083
C     FF083                                                             00060083
C                                                                       00070083
C         THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080083
C     THE TYPE DECLARATION IS IMPLICIT REAL.                            00090083
C     THE FUNCTION DUMMY ARGUMENTS ARE BOTH INTEGER AND REAL. DUMMY     00100083
C     ARGUMENTS IDON01, IDDN2A AND IDDN3A ARE INCREMENTED BY 10, 20 AND 00110083
C     40 RESPECTIVELY BEFORE CONTROL IS RETURNED TO THE MAIN PROGRAM.   00120083
C     THE VALUE OF THE FUNCTION RETURNED TO THE REFERENCING PROGRAM     00130083
C     WILL BE THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE          00140083
C     SUBPROGRAM FF083.                                                 00150083
C         DUMMY ARGUMENT IDDN2A CORRESPONDS TO AN ARRAY-NAME IN THE     00160083
C     ACTUAL ARGUMENT OF THE MAIN PROGRAM.  DUMMY ARGUMENT IDDN3A       00170083
C     CORRESPONDS TO AN ARRAY-ELEMENT-NAME IN THE ACTUAL ARGUMENT OF THE00180083
C     MAIN PROGRAM.  DUMMY ARGUMENT IDON02  CORRESPONDS TO AN EXPRESSION00190083
C     CONTAINING VARIABLES,ARITHMETIC OPERATORS AND CONSTANTS IN THE    00200083
C     ACTUAL ARGUMENT OF THE MAIN PROGRAM.                              00210083
C                                                                       00220083
C      REFERENCES                                                       00230083
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00240083
C              X3.9-1978                                                00250083
C                                                                       00260083
C        SECTION 4.1.2, TYPE RULES FOR DATA AND PROCEDURE IDENTIFIERS   00270083
C        SECTION 15.5.1, FUNCTION SUBPROGRAM                            00280083
C                                                                       00290083
C     TEST SECTION                                                      00300083
C                                                                       00310083
C          FUNCTION SUBPROGRAM                                          00320083
C                                                                       00330083
      IVON01 = IDON01                                                   00340083
      IVON02 = IDDN2A (1,1)                                             00350083
      IVON03 = IDDN3A (2,3,4)                                           00360083
      RVON04 = RDON02                                                   00370083
C                                                                       00380083
      RVON05 = IVON01 + IVON02 + IVON03                                 00390083
      FF083 = RVON05 + RVON04                                           00400083
C                                                                       00410083
      IDON01 = IVON01 + 10                                              00420083
      IDDN2A (1,1) = IVON02 + 20                                        00430083
      IDDN3A (2,3,4) = IVON03 + 40                                      00440083
C                                                                       00450083
      RETURN                                                            00460083
      END                                                               00470083