| PROGRAM FM028 |
| |
| C COMMENT SECTION 00010028 |
| C 00020028 |
| C FM028 00030028 |
| C 00040028 |
| C THIS ROUTINE CONTAINS THE EXTERNAL FUNCTION REFERENCE TESTS. 00050028 |
| C THE FUNCTION SUBPROGRAM FF029 IS CALLED BY THIS PROGRAM. THE 00060028 |
| C FUNCTION SUBPROGRAM FF029 INCREMENTS THE CALLING ARGUMENT BY 1 00070028 |
| C AND RETURNS TO THE CALLING PROGRAM. 00080028 |
| C 00090028 |
| C EXECUTION OF AN EXTERNAL FUNCTION REFERENCE RESULTS IN AN 00100028 |
| C ASSOCIATION OF ACTUAL ARGUMENTS WITH ALL APPEARANCES OF DUMMY 00110028 |
| C ARGUMENTS IN THE DEFINING SUBPROGRAM. FOLLOWING THESE 00120028 |
| C ASSOCIATIONS, EXECUTION OF THE FIRST EXECUTABLE STATEMENT OF THE 00130028 |
| C DEFINING SUBPROGRAM IS UNDERTAKEN. 00140028 |
| C 00150028 |
| C REFERENCES 00160028 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00170028 |
| C X3.9-1978 00180028 |
| C 00190028 |
| C SECTION 15.5.2, REFERENCING AN EXTERNAL FUNCTION 00200028 |
| C 00210028 |
| INTEGER FF029 00220028 |
| C 00230028 |
| C 00240028 |
| C ********************************************************** 00250028 |
| C 00260028 |
| C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00270028 |
| C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00280028 |
| C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00290028 |
| C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00300028 |
| C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00310028 |
| C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00320028 |
| C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00330028 |
| C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00340028 |
| C OF EXECUTING THESE TESTS. 00350028 |
| C 00360028 |
| C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00370028 |
| C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00380028 |
| C 00390028 |
| C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00400028 |
| C 00410028 |
| C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00420028 |
| C SOFTWARE STANDARDS VALIDATION GROUP 00430028 |
| C BUILDING 225 RM A266 00440028 |
| C GAITHERSBURG, MD 20899 00450028 |
| C ********************************************************** 00460028 |
| C 00470028 |
| C 00480028 |
| C 00490028 |
| C INITIALIZATION SECTION 00500028 |
| C 00510028 |
| C INITIALIZE CONSTANTS 00520028 |
| C ************** 00530028 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00540028 |
| I01 = 5 00550028 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00560028 |
| I02 = 6 00570028 |
| C SYSTEM ENVIRONMENT SECTION 00580028 |
| C 00590028 |
| CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00600028 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00610028 |
| C (UNIT NUMBER FOR CARD READER). 00620028 |
| CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00630028 |
| C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00640028 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00650028 |
| C 00660028 |
| CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00670028 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00680028 |
| C (UNIT NUMBER FOR PRINTER). 00690028 |
| CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00700028 |
| C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00710028 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00720028 |
| C 00730028 |
| IVPASS=0 00740028 |
| IVFAIL=0 00750028 |
| IVDELE=0 00760028 |
| ICZERO=0 00770028 |
| C 00780028 |
| C WRITE PAGE HEADERS 00790028 |
| WRITE (I02,90000) 00800028 |
| WRITE (I02,90001) 00810028 |
| WRITE (I02,90002) 00820028 |
| WRITE (I02, 90002) 00830028 |
| WRITE (I02,90003) 00840028 |
| WRITE (I02,90002) 00850028 |
| WRITE (I02,90004) 00860028 |
| WRITE (I02,90002) 00870028 |
| WRITE (I02,90011) 00880028 |
| WRITE (I02,90002) 00890028 |
| WRITE (I02,90002) 00900028 |
| WRITE (I02,90005) 00910028 |
| WRITE (I02,90006) 00920028 |
| WRITE (I02,90002) 00930028 |
| C 00940028 |
| C TEST SECTION 00950028 |
| C 00960028 |
| C EXTERNAL FUNCTION REFERENCE 00970028 |
| C 00980028 |
| C EXTERNAL FUNCTION REFERENCE - ARGUMENT NAME SAME AS SUBPROGRAM 00990028 |
| C ARGUMENT NAME. 01000028 |
| 6701 CONTINUE 01010028 |
| IVTNUM = 670 01020028 |
| C 01030028 |
| C **** TEST 670 **** 01040028 |
| C 01050028 |
| IF (ICZERO) 36700,6700,36700 01060028 |
| 6700 CONTINUE 01070028 |
| IVON01 = 0 01080028 |
| IVCOMP = FF029(IVON01) 01090028 |
| GO TO 46700 01100028 |
| 36700 IVDELE = IVDELE + 1 01110028 |
| WRITE (I02,80003) IVTNUM 01120028 |
| IF (ICZERO) 46700,6711,46700 01130028 |
| 46700 IF (IVCOMP - 1) 26700,16700,26700 01140028 |
| 16700 IVPASS = IVPASS + 1 01150028 |
| WRITE (I02,80001) IVTNUM 01160028 |
| GO TO 6711 01170028 |
| 26700 IVFAIL = IVFAIL + 1 01180028 |
| IVCORR = 1 01190028 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01200028 |
| 6711 CONTINUE 01210028 |
| IVTNUM = 671 01220028 |
| C 01230028 |
| C **** TEST 671 **** 01240028 |
| C 01250028 |
| C EXTERNAL FUNCTION REFERENCE - ARGUMENT NAME SAME AS INTERNAL 01260028 |
| C VARIABLE IN FUNCTION SUBPROGRAM. 01270028 |
| C 01280028 |
| IF (ICZERO) 36710,6710,36710 01290028 |
| 6710 CONTINUE 01300028 |
| IVON02 = 2 01310028 |
| IVON01 = 5 01320028 |
| IVCOMP = FF029(IVON02) 01330028 |
| GO TO 46710 01340028 |
| 36710 IVDELE = IVDELE + 1 01350028 |
| WRITE (I02,80003) IVTNUM 01360028 |
| IF (ICZERO) 46710,6721,46710 01370028 |
| 46710 IF (IVCOMP - 3) 26710,16710,26710 01380028 |
| 16710 IVPASS = IVPASS + 1 01390028 |
| WRITE (I02,80001) IVTNUM 01400028 |
| GO TO 6721 01410028 |
| 26710 IVFAIL = IVFAIL + 1 01420028 |
| IVCORR = 3 01430028 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01440028 |
| 6721 CONTINUE 01450028 |
| IVTNUM = 672 01460028 |
| C 01470028 |
| C **** TEST 672 **** 01480028 |
| C 01490028 |
| C EXTERNAL FUNCTION REFERENCE - ARGUMENT NAME DIFFERENT FROM 01500028 |
| C FUNCTION SUBPROGRAM ARGUMENT AND INTERNAL VARIABLE. 01510028 |
| C 01520028 |
| IF (ICZERO) 36720,6720,36720 01530028 |
| 6720 CONTINUE 01540028 |
| IVON01 = 7 01550028 |
| IVON03 = -12 01560028 |
| IVCOMP = FF029(IVON03) 01570028 |
| GO TO 46720 01580028 |
| 36720 IVDELE = IVDELE + 1 01590028 |
| WRITE (I02,80003) IVTNUM 01600028 |
| IF (ICZERO) 46720,6731,46720 01610028 |
| 46720 IF (IVCOMP + 11) 26720,16720,26720 01620028 |
| 16720 IVPASS = IVPASS + 1 01630028 |
| WRITE (I02,80001) IVTNUM 01640028 |
| GO TO 6731 01650028 |
| 26720 IVFAIL = IVFAIL + 1 01660028 |
| IVCORR = -11 01670028 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01680028 |
| 6731 CONTINUE 01690028 |
| IVTNUM = 673 01700028 |
| C 01710028 |
| C **** TEST 673 **** 01720028 |
| C 01730028 |
| C REPEATED EXTERNAL FUNCTION REFERENCE IN A DO LOOP. 01740028 |
| C 01750028 |
| IF (ICZERO) 36730,6730,36730 01760028 |
| 6730 CONTINUE 01770028 |
| IVON01 = -7 01780028 |
| IVCOMP = 0 01790028 |
| DO 6732 IVON04 = 1,5 01800028 |
| IVCOMP = FF029(IVCOMP) 01810028 |
| 6732 CONTINUE 01820028 |
| GO TO 46730 01830028 |
| 36730 IVDELE = IVDELE + 1 01840028 |
| WRITE (I02,80003) IVTNUM 01850028 |
| IF (ICZERO) 46730,6741,46730 01860028 |
| 46730 IF (IVCOMP - 5) 26730,16730,26730 01870028 |
| 16730 IVPASS = IVPASS + 1 01880028 |
| WRITE (I02,80001) IVTNUM 01890028 |
| GO TO 6741 01900028 |
| 26730 IVFAIL = IVFAIL + 1 01910028 |
| IVCORR = 5 01920028 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01930028 |
| 6741 CONTINUE 01940028 |
| C 01950028 |
| C WRITE PAGE FOOTINGS AND RUN SUMMARIES 01960028 |
| 99999 CONTINUE 01970028 |
| WRITE (I02,90002) 01980028 |
| WRITE (I02,90006) 01990028 |
| WRITE (I02,90002) 02000028 |
| WRITE (I02,90002) 02010028 |
| WRITE (I02,90007) 02020028 |
| WRITE (I02,90002) 02030028 |
| WRITE (I02,90008) IVFAIL 02040028 |
| WRITE (I02,90009) IVPASS 02050028 |
| WRITE (I02,90010) IVDELE 02060028 |
| C 02070028 |
| C 02080028 |
| C TERMINATE ROUTINE EXECUTION 02090028 |
| STOP 02100028 |
| C 02110028 |
| C FORMAT STATEMENTS FOR PAGE HEADERS 02120028 |
| 90000 FORMAT ("1") 02130028 |
| 90002 FORMAT (" ") 02140028 |
| 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 02150028 |
| 90003 FORMAT (" ",21X,"VERSION 2.1" ) 02160028 |
| 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 02170028 |
| 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 02180028 |
| 90006 FORMAT (" ",5X,"----------------------------------------------" ) 02190028 |
| 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 02200028 |
| C 02210028 |
| C FORMAT STATEMENTS FOR RUN SUMMARIES 02220028 |
| 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 02230028 |
| 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 02240028 |
| 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 02250028 |
| C 02260028 |
| C FORMAT STATEMENTS FOR TEST RESULTS 02270028 |
| 80001 FORMAT (" ",4X,I5,7X,"PASS") 02280028 |
| 80002 FORMAT (" ",4X,I5,7X,"FAIL") 02290028 |
| 80003 FORMAT (" ",4X,I5,7X,"DELETED") 02300028 |
| 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 02310028 |
| 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 02320028 |
| C 02330028 |
| 90007 FORMAT (" ",20X,"END OF PROGRAM FM028" ) 02340028 |
| END 02350028 |
| |
| INTEGER FUNCTION FF029(IVON01) 00010029 |
| C 00020029 |
| C COMMENT SECTION 00030029 |
| C FF029 00040029 |
| C 00050029 |
| C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM028. 00060029 |
| C THE FUNCTION ARGUMENT IS INCREMENTED BY 1 AND CONTROL RETURNED 00070029 |
| C TO THE CALLING PROGRAM. 00080029 |
| C 00090029 |
| C REFERENCES 00100029 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00110029 |
| C X3.9-1978 00120029 |
| C 00130029 |
| C SECTION 15.5.1, DEFINING FUNCTION SUBPROGRAMS AND FUNCTION 00140029 |
| C STATEMENTS 00150029 |
| C SECTION 15.8, RETURN STATEMENT 00160029 |
| C 00170029 |
| C TEST SECTION 00180029 |
| C 00190029 |
| C FUNCTION SUBPROGRAM 00200029 |
| C 00210029 |
| C INCREMENT ARGUMENT BY 1 AND RETURN TO CALLING PROGRAM. 00220029 |
| C 00230029 |
| IVON02 = IVON01 00240029 |
| FF029 = IVON02 + 1 00250029 |
| IVON02 = 500 00260029 |
| RETURN 00270029 |
| END 00280029 |