| PROGRAM FM003 |
| |
| C COMMENT SECTION 00010003 |
| C 00020003 |
| C FM003 00030003 |
| C 00040003 |
| C THIS ROUTINE CONTAINS THE BASIC CONTINUE TESTS. THESE TESTS 00050003 |
| C ENSURE THAT EXECUTION OF A CONTINUE STATEMENT CAUSES CONTINUATION 00060003 |
| C OF THE NORMAL PROGRAM EXECUTION SEQUENCE. ONLY THE STATEMENTS IN 00070003 |
| C THE BASIC ASSUMPTIONS ARE INCLUDED IN THESE TESTS. OTHER CONTINUE00080003 |
| C TESTS ARE CONTAINED IN OTHER ROUTINES AS PART OF THE TESTS FOR 00090003 |
| C OTHER LANGUAGE FEATURES SUCH AS THE DO STATEMENTS TESTS. 00100003 |
| C 00110003 |
| C REFERENCES 00120003 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00130003 |
| C X3.9-1978 00140003 |
| C 00150003 |
| C SECTION 3.6, NORMAL EXECUTION SEQUENCE AND TRANSFER OF CONTROL 00160003 |
| C SECTION 11.11, CONTINUE STATEMENT 00170003 |
| C 00180003 |
| C 00190003 |
| C ********************************************************** 00200003 |
| C 00210003 |
| C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00220003 |
| C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00230003 |
| C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00240003 |
| C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00250003 |
| C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00260003 |
| C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00270003 |
| C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00280003 |
| C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00290003 |
| C OF EXECUTING THESE TESTS. 00300003 |
| C 00310003 |
| C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00320003 |
| C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00330003 |
| C 00340003 |
| C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00350003 |
| C 00360003 |
| C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00370003 |
| C SOFTWARE STANDARDS VALIDATION GROUP 00380003 |
| C BUILDING 225 RM A266 00390003 |
| C GAITHERSBURG, MD 20899 00400003 |
| C ********************************************************** 00410003 |
| C 00420003 |
| C 00430003 |
| C 00440003 |
| C INITIALIZATION SECTION 00450003 |
| C 00460003 |
| C INITIALIZE CONSTANTS 00470003 |
| C ************** 00480003 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00490003 |
| I01 = 5 00500003 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00510003 |
| I02 = 6 00520003 |
| C SYSTEM ENVIRONMENT SECTION 00530003 |
| C 00540003 |
| CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00550003 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00560003 |
| C (UNIT NUMBER FOR CARD READER). 00570003 |
| CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00580003 |
| C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00590003 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00600003 |
| C 00610003 |
| CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00620003 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00630003 |
| C (UNIT NUMBER FOR PRINTER). 00640003 |
| CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00650003 |
| C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00660003 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00670003 |
| C 00680003 |
| IVPASS=0 00690003 |
| IVFAIL=0 00700003 |
| IVDELE=0 00710003 |
| ICZERO=0 00720003 |
| C 00730003 |
| C WRITE PAGE HEADERS 00740003 |
| WRITE (I02,90000) 00750003 |
| WRITE (I02,90001) 00760003 |
| WRITE (I02,90002) 00770003 |
| WRITE (I02, 90002) 00780003 |
| WRITE (I02,90003) 00790003 |
| WRITE (I02,90002) 00800003 |
| WRITE (I02,90004) 00810003 |
| WRITE (I02,90002) 00820003 |
| WRITE (I02,90011) 00830003 |
| WRITE (I02,90002) 00840003 |
| WRITE (I02,90002) 00850003 |
| WRITE (I02,90005) 00860003 |
| WRITE (I02,90006) 00870003 |
| WRITE (I02,90002) 00880003 |
| 131 CONTINUE 00890003 |
| IVTNUM = 13 00900003 |
| C 00910003 |
| C **** TEST 013 **** 00920003 |
| C TEST 13 - CONTINUE TEST 00930003 |
| C CONTINUE STATEMENT FOLLOWING INTEGER ASSIGNMENT 00940003 |
| C STATEMENTS. 00950003 |
| C 00960003 |
| IF (ICZERO) 30130, 130, 30130 00970003 |
| 130 CONTINUE 00980003 |
| IVON01=5 00990003 |
| IVON02=6 01000003 |
| CONTINUE 01010003 |
| GO TO 40130 01020003 |
| 30130 IVDELE = IVDELE + 1 01030003 |
| WRITE (I02,80003) IVTNUM 01040003 |
| IF (ICZERO) 40130, 141, 40130 01050003 |
| 40130 IF (IVON01-5) 20131,40131,20131 01060003 |
| 40131 IF (IVON02-6) 20132,10130,20132 01070003 |
| 10130 IVPASS = IVPASS + 1 01080003 |
| WRITE (I02,80001) IVTNUM 01090003 |
| GO TO 141 01100003 |
| 20131 IVCOMP=IVON01 01110003 |
| IVCORR=5 01120003 |
| GO TO 20130 01130003 |
| 20132 IVCOMP=IVON02 01140003 |
| IVCORR=6 01150003 |
| 20130 IVFAIL = IVFAIL + 1 01160003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01170003 |
| 141 CONTINUE 01180003 |
| IVTNUM = 14 01190003 |
| C 01200003 |
| C **** TEST 014 **** 01210003 |
| C TEST 14 - CONTINUE TEST 01220003 |
| C CONTINUE STATEMENT BETWEEN INTEGER ASSIGNMENT 01230003 |
| C STATEMENTS 01240003 |
| C 01250003 |
| IF (ICZERO) 30140, 140, 30140 01260003 |
| 140 CONTINUE 01270003 |
| IVON01=14 01280003 |
| CONTINUE 01290003 |
| IVON02=15 01300003 |
| GO TO 40140 01310003 |
| 30140 IVDELE = IVDELE + 1 01320003 |
| WRITE (I02,80003) IVTNUM 01330003 |
| IF (ICZERO) 40140, 151, 40140 01340003 |
| 40140 IF (IVON01 - 14) 20141,40141,20141 01350003 |
| 40141 IF (IVON02 - 15) 20142, 10140, 20142 01360003 |
| 10140 IVPASS = IVPASS + 1 01370003 |
| WRITE (I02,80001) IVTNUM 01380003 |
| GO TO 151 01390003 |
| 20141 IVCOMP=IVON01 01400003 |
| IVCORR=14 01410003 |
| GO TO 20140 01420003 |
| 20142 IVCOMP=IVON02 01430003 |
| IVCORR=15 01440003 |
| 20140 IVFAIL = IVFAIL + 1 01450003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01460003 |
| 151 CONTINUE 01470003 |
| IVTNUM = 15 01480003 |
| C 01490003 |
| C **** TEST 015 **** 01500003 |
| C TEST 15 - CONTINUE TEST 01510003 |
| C TWO CONSECUTIVE CONTINUE STATEMENTS 01520003 |
| C 01530003 |
| IF (ICZERO) 30150, 150, 30150 01540003 |
| 150 CONTINUE 01550003 |
| CONTINUE 01560003 |
| IVON01=19 01570003 |
| IVON02=20 01580003 |
| GO TO 40150 01590003 |
| 30150 IVDELE = IVDELE + 1 01600003 |
| WRITE (I02,80003) IVTNUM 01610003 |
| IF (ICZERO) 40150, 161, 40150 01620003 |
| 40150 IF (IVON01 - 19) 20151,40151,20151 01630003 |
| 40151 IF (IVON02 -20) 20152,10150,20152 01640003 |
| 10150 IVPASS = IVPASS + 1 01650003 |
| WRITE (I02,80001) IVTNUM 01660003 |
| GO TO 161 01670003 |
| 20151 IVCOMP=IVON01 01680003 |
| IVCORR=19 01690003 |
| GO TO 20150 01700003 |
| 20152 IVCOMP=IVON02 01710003 |
| IVCORR=20 01720003 |
| 20150 IVFAIL = IVFAIL + 1 01730003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01740003 |
| 161 CONTINUE 01750003 |
| IVTNUM = 16 01760003 |
| C 01770003 |
| C **** TEST 016 **** 01780003 |
| C TEST 16 - CONTINUE TEST 01790003 |
| C BRANCH TO CONTINUE STATEMENT FROM IF STATEMENT 01800003 |
| C 01810003 |
| IF (ICZERO) 30160, 160, 30160 01820003 |
| 160 CONTINUE 01830003 |
| IVON01=16 01840003 |
| IF (IVON01 - 16) 162,163,162 01850003 |
| 162 IVCORR=16 01860003 |
| GO TO 20160 01870003 |
| 163 CONTINUE 01880003 |
| IVON01=160 01890003 |
| GO TO 40160 01900003 |
| 30160 IVDELE = IVDELE + 1 01910003 |
| WRITE (I02,80003) IVTNUM 01920003 |
| IF (ICZERO) 40160, 171, 40160 01930003 |
| 40160 IF (IVON01-160) 20161,10160,20161 01940003 |
| 10160 IVPASS = IVPASS + 1 01950003 |
| WRITE (I02,80001) IVTNUM 01960003 |
| GO TO 171 01970003 |
| 20161 IVCORR=160 01980003 |
| 20160 IVFAIL = IVFAIL + 1 01990003 |
| IVCOMP=IVON01 02000003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02010003 |
| 171 CONTINUE 02020003 |
| IVTNUM = 17 02030003 |
| C 02040003 |
| C **** TEST 017 **** 02050003 |
| C TEST 17 - CONTINUE TEST 02060003 |
| C TWO OF THE BRANCHES OF AN IF STATEMENT ARE TO THE SAME 02070003 |
| C CONTINUE STATEMENT. THE THIRD BRANCH ALSO IS MADE TO 02080003 |
| C A CONTINUE STATEMENT. 02090003 |
| C 02100003 |
| IF (ICZERO) 30170, 170, 30170 02110003 |
| 170 CONTINUE 02120003 |
| IVON01=17 02130003 |
| IF (IVON01-19) 173,172,172 02140003 |
| 172 CONTINUE 02150003 |
| IVCORR=17 02160003 |
| GO TO 20170 02170003 |
| 173 CONTINUE 02180003 |
| IVON01=170 02190003 |
| GO TO 40170 02200003 |
| 30170 IVDELE = IVDELE + 1 02210003 |
| WRITE (I02,80003) IVTNUM 02220003 |
| IF (ICZERO) 40170, 181, 40170 02230003 |
| 40170 IF (IVON01 - 170) 20171,10170,20171 02240003 |
| 10170 IVPASS = IVPASS + 1 02250003 |
| WRITE (I02,80001) IVTNUM 02260003 |
| GO TO 181 02270003 |
| 20171 IVCORR=170 02280003 |
| 20170 IVFAIL = IVFAIL + 1 02290003 |
| IVCOMP=IVON01 02300003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02310003 |
| 181 CONTINUE 02320003 |
| IVTNUM = 18 02330003 |
| C 02340003 |
| C **** TEST 018 **** 02350003 |
| C TEST 18 - CONTINUE TEST 02360003 |
| C BRANCH TO CONTINUE STATEMENT FROM GO TO STATEMENT 02370003 |
| C 02380003 |
| IF (ICZERO) 30180, 180, 30180 02390003 |
| 180 CONTINUE 02400003 |
| IF (ICZERO) 184,182,184 02410003 |
| 182 IVON01=18 02420003 |
| GO TO 183 02430003 |
| 184 IVON01=20 02440003 |
| 183 CONTINUE 02450003 |
| IVON02=180 02460003 |
| GO TO 40180 02470003 |
| 30180 IVDELE = IVDELE + 1 02480003 |
| WRITE (I02,80003) IVTNUM 02490003 |
| IF (ICZERO) 40180, 191, 40180 02500003 |
| 40180 IF (IVON01 - 18) 20181,40181,20181 02510003 |
| 40181 IF (IVON02 -180) 20182,10180,20182 02520003 |
| 10180 IVPASS = IVPASS + 1 02530003 |
| WRITE (I02,80001) IVTNUM 02540003 |
| GO TO 191 02550003 |
| 20181 IVCORR=18 02560003 |
| IVCOMP=IVON01 02570003 |
| GO TO 20180 02580003 |
| 20182 IVCOMP=IVON02 02590003 |
| IVCORR=180 02600003 |
| 20180 IVFAIL = IVFAIL + 1 02610003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02620003 |
| 191 CONTINUE 02630003 |
| IVTNUM = 19 02640003 |
| C 02650003 |
| C **** TEST 019 **** 02660003 |
| C TEST 19 - CONTINUE TEST 02670003 |
| C BRANCH TO THREE CONTINUE STATEMENTS FROM IF STATEMENT. 02680003 |
| C CONTINUE STATEMENTS FOLLOW EACH OTHER. 02690003 |
| C 02700003 |
| IF (ICZERO) 30190, 190, 30190 02710003 |
| 190 CONTINUE 02720003 |
| ICONE = 1 02730003 |
| IF (ICONE) 194,192,193 02740003 |
| 193 CONTINUE 02750003 |
| 192 CONTINUE 02760003 |
| 194 CONTINUE 02770003 |
| IVON01=19 02780003 |
| GO TO 40190 02790003 |
| 30190 IVDELE = IVDELE + 1 02800003 |
| WRITE (I02,80003) IVTNUM 02810003 |
| IF (ICZERO) 40190, 201, 40190 02820003 |
| 40190 IF (IVON01 - 19) 20190,10190,20190 02830003 |
| 10190 IVPASS = IVPASS + 1 02840003 |
| WRITE (I02,80001) IVTNUM 02850003 |
| GO TO 201 02860003 |
| 20190 IVFAIL = IVFAIL + 1 02870003 |
| IVCOMP=IVON01 02880003 |
| IVCORR=19 02890003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02900003 |
| 201 CONTINUE 02910003 |
| IVTNUM = 20 02920003 |
| C 02930003 |
| C **** TEST 020 **** 02940003 |
| C TEST 20 - CONTINUE TEST 02950003 |
| C THREE SEPARATE BRANCHES OF AN IF STATEMENT ARE TO 02960003 |
| C CONTINUE STATEMENTS. 02970003 |
| C 02980003 |
| IF (ICZERO) 30200, 200, 30200 02990003 |
| 200 CONTINUE 03000003 |
| ICON02=-2 03010003 |
| IF (ICON02) 204,202,203 03020003 |
| 203 CONTINUE 03030003 |
| IVON01=203 03040003 |
| GO TO 40200 03050003 |
| 204 CONTINUE 03060003 |
| IVON01 = 204 03070003 |
| GO TO 40200 03080003 |
| 202 CONTINUE 03090003 |
| IVON01=202 03100003 |
| GO TO 40200 03110003 |
| 30200 IVDELE = IVDELE + 1 03120003 |
| WRITE (I02,80003) IVTNUM 03130003 |
| IF (ICZERO) 40200, 211, 40200 03140003 |
| 40200 IF (IVON01 - 204) 20200,10200,20200 03150003 |
| 10200 IVPASS = IVPASS + 1 03160003 |
| WRITE (I02,80001) IVTNUM 03170003 |
| GO TO 211 03180003 |
| 20200 IVFAIL = IVFAIL + 1 03190003 |
| IVCOMP=IVON01 03200003 |
| IVCORR=204 03210003 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03220003 |
| 211 CONTINUE 03230003 |
| C 03240003 |
| C WRITE PAGE FOOTINGS AND RUN SUMMARIES 03250003 |
| 99999 CONTINUE 03260003 |
| WRITE (I02,90002) 03270003 |
| WRITE (I02,90006) 03280003 |
| WRITE (I02,90002) 03290003 |
| WRITE (I02,90002) 03300003 |
| WRITE (I02,90007) 03310003 |
| WRITE (I02,90002) 03320003 |
| WRITE (I02,90008) IVFAIL 03330003 |
| WRITE (I02,90009) IVPASS 03340003 |
| WRITE (I02,90010) IVDELE 03350003 |
| C 03360003 |
| C 03370003 |
| C TERMINATE ROUTINE EXECUTION 03380003 |
| STOP 03390003 |
| C 03400003 |
| C FORMAT STATEMENTS FOR PAGE HEADERS 03410003 |
| 90000 FORMAT ("1") 03420003 |
| 90002 FORMAT (" ") 03430003 |
| 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 03440003 |
| 90003 FORMAT (" ",21X,"VERSION 2.1" ) 03450003 |
| 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 03460003 |
| 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 03470003 |
| 90006 FORMAT (" ",5X,"----------------------------------------------" ) 03480003 |
| 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 03490003 |
| C 03500003 |
| C FORMAT STATEMENTS FOR RUN SUMMARIES 03510003 |
| 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 03520003 |
| 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 03530003 |
| 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 03540003 |
| C 03550003 |
| C FORMAT STATEMENTS FOR TEST RESULTS 03560003 |
| 80001 FORMAT (" ",4X,I5,7X,"PASS") 03570003 |
| 80002 FORMAT (" ",4X,I5,7X,"FAIL") 03580003 |
| 80003 FORMAT (" ",4X,I5,7X,"DELETED") 03590003 |
| 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 03600003 |
| 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 03610003 |
| C 03620003 |
| 90007 FORMAT (" ",20X,"END OF PROGRAM FM003" ) 03630003 |
| END 03640003 |