PROGRAM FM254 00010254 C 00020254 C 00030254 C 00040254 C THIS ROUTINE IS A TEST OF THE ELSE IF-BLOCK. TESTS WITHIN THIS00050254 C ROUTINE ARE FOR THE SYNTAX OF THE BASIC ELSE IF STATEMENT AND 00060254 C ELSE IF-BLOCK STRUCTURE. 00070254 C 00080254 C REFERENCES 00090254 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00100254 C X3.9-1977 00110254 C SECTION 11.7, ELSE IF STATEMENT 00120254 C SECTION 11.7.1, ELSE IF-BLOCK 00130254 C SECTION 11.7.2, EXECUTION OF THE ELSE IF STATEMENT 00140254 C 00150254 C 00160254 C 00170254 C 00180254 C ******************************************************************00190254 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00200254 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN 00210254 C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE 00220254 C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT 00230254 C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT00240254 C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS 00250254 C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING00260254 C THE RESULT OF EXECUTING THESE TESTS. 00270254 C 00280254 C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES 00290254 C FOUND IN THE SUBSET LEVEL OF THE STANDARD. 00300254 C 00310254 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO 00320254 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00330254 C SOFTWARE STANDARDS VALIDATION GROUP 00340254 C BUILDING 225 RM A266 00350254 C GAITHERSBURG, MD 20899 00360254 C ******************************************************************00370254 C 00380254 C 00390254 IMPLICIT LOGICAL (L) 00400254 IMPLICIT CHARACTER*14 (C) 00410254 C 00420254 DIMENSION LADN11(2) 00430254 LOGICAL LVTN01, LVTN02, LATN11(2), LADN11 00440254 DATA LADN11/.TRUE., .FALSE./ 00450254 C 00460254 C 00470254 C **** LOGICAL STATEMENT FUNCTION REFERENCED IN TEST 4 **** 00480254 C 00490254 LFIS01 ( L ) = L .AND. L 00500254 C 00510254 C 00520254 C 00530254 C 00540254 C 00550254 C INITIALIZATION SECTION. 00560254 C 00570254 C INITIALIZE CONSTANTS 00580254 C ******************** 00590254 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER 00600254 I01 = 5 00610254 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER 00620254 I02 = 6 00630254 C SYSTEM ENVIRONMENT SECTION 00640254 C 00650254 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD.00660254 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00670254 C (UNIT NUMBER FOR CARD READER). 00680254 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD00690254 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00700254 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00710254 C 00720254 CX020 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD.00730254 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00740254 C (UNIT NUMBER FOR PRINTER). 00750254 CX021 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD.00760254 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00770254 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00780254 C 00790254 IVPASS = 0 00800254 IVFAIL = 0 00810254 IVDELE = 0 00820254 ICZERO = 0 00830254 C 00840254 C WRITE OUT PAGE HEADERS 00850254 C 00860254 WRITE (I02,90002) 00870254 WRITE (I02,90006) 00880254 WRITE (I02,90008) 00890254 WRITE (I02,90004) 00900254 WRITE (I02,90010) 00910254 WRITE (I02,90004) 00920254 WRITE (I02,90016) 00930254 WRITE (I02,90001) 00940254 WRITE (I02,90004) 00950254 WRITE (I02,90012) 00960254 WRITE (I02,90014) 00970254 WRITE (I02,90004) 00980254 C 00990254 C 01000254 C 01010254 C THE SYNTAX OF THE ELSE IF STATEMENTS IN THE TESTS TO FOLLOW IS 01020254 C 01030254 C IF ( E1 ) THEN 01040254 C IF-BLOCK 01050254 C ELSE IF ( E2 ) THEN 01060254 C ELSE IF-BLOCK 01070254 C END IF 01080254 C 01090254 C THE NEXT FOUR TESTS WILL USE THE FOLLOWING COMBINATIONS OF TRUE 01100254 C AND FALSE FOR E1 AND E2 AS SHOWN BELOW - 01110254 C TEST NUMBER 1 2 3 4 01120254 C E1 F F T T 01130254 C E2 T F T F 01140254 C 01150254 C 01160254 C 01170254 C 01180254 C **** FCVS PROGRAM 254 - TEST 001 **** 01190254 C 01200254 C TEST 001 USES A VERY SIMPLE ELSE IF STATEMENT. THE EXPRESSION 01210254 C WITHIN THE PARENTHESES IS THE LOGICAL CONSTANT .TRUE. AND THE 01220254 C EXECUTABLE STATEMENT WITHIN THE ELSE IF-BLOCK OF LEVEL ONE IS AN 01230254 C INTEGER ARITHMETIC ASSIGNMENT STATEMENT. IN THIS TEST THE LOGICAL01240254 C EXPRESSION E1 IS .FALSE. SO THE IF-BLOCK SHOULD NOT BE EXECUTED. 01250254 C THE LOGICAL EXPRESSION E2 IS .TRUE. SO THE ELSE IF-BLOCK SHOULD 01260254 C BE EXECUTED. 01270254 C 01280254 C 01290254 IVTNUM = 1 01300254 IF (ICZERO) 30010, 0010, 30010 01310254 0010 CONTINUE 01320254 IVCOMP = 1 01330254 IF ( .FALSE. ) THEN 01340254 IVCOMP = IVCOMP * 2 01350254 ELSE IF ( .TRUE. ) THEN 01360254 IVCOMP = IVCOMP * 3 01370254 END IF 01380254 C 01390254 C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 01400254 C 01410254 IVCORR = 3 01420254 40010 IF ( IVCOMP - 3 ) 20010, 10010, 20010 01430254 30010 IVDELE = IVDELE + 1 01440254 WRITE (I02,80000) IVTNUM 01450254 IF (ICZERO) 10010, 0021, 20010 01460254 10010 IVPASS = IVPASS + 1 01470254 WRITE (I02,80002) IVTNUM 01480254 GO TO 0021 01490254 20010 IVFAIL = IVFAIL + 1 01500254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01510254 0021 CONTINUE 01520254 C 01530254 C **** FCVS PROGRAM 254 - TEST 002 **** 01540254 C 01550254 C TEST 002 HAS E1 .FALSE. AND E2 .FALSE.. NEITHER THE IF-BLOCK 01560254 C NOR THE ELSE IF-BLOCK SHOULD BE EXECUTED. 01570254 C 01580254 C 01590254 IVTNUM = 2 01600254 IF (ICZERO) 30020, 0020, 30020 01610254 0020 CONTINUE 01620254 IVCOMP = 1 01630254 LVON01 = .FALSE. 01640254 LVON02 = .FALSE. 01650254 IF ( LVON01 ) THEN 01660254 IVCOMP = IVCOMP * 2 01670254 ELSE IF ( LVON02 ) THEN 01680254 IVCOMP = IVCOMP * 3 01690254 END IF 01700254 IVCORR = 1 01710254 40020 IF ( IVCOMP - 1 ) 20020, 10020, 20020 01720254 30020 IVDELE = IVDELE + 1 01730254 WRITE (I02,80000) IVTNUM 01740254 IF (ICZERO) 10020, 0031, 20020 01750254 10020 IVPASS = IVPASS + 1 01760254 WRITE (I02,80002) IVTNUM 01770254 GO TO 0031 01780254 20020 IVFAIL = IVFAIL + 1 01790254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01800254 0031 CONTINUE 01810254 C 01820254 C **** FCVS PROGRAM 254 - TEST 003 **** 01830254 C 01840254 C TEST 003 HAS E1 AS .TRUE. AND E2 AS .TRUE.. ONLY THE IF-BLOCK 01850254 C SHOULD BE EXECUTED. THE ELSE IF-BLOCK SHOULD NOT BE EXECUTED. 01860254 C 01870254 C 01880254 IVTNUM = 3 01890254 IF (ICZERO) 30030, 0030, 30030 01900254 0030 CONTINUE 01910254 IVCOMP = 1 01920254 LVON01 = .TRUE. 01930254 LVON02 = .TRUE. 01940254 LVTN01 = LVON01 01950254 LVTN02 = LVON02 01960254 IF ( LVTN01 ) THEN 01970254 IVCOMP = IVCOMP * 2 01980254 ELSE IF ( LVTN02 ) THEN 01990254 IVCOMP = IVCOMP * 3 02000254 END IF 02010254 C 02020254 C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02030254 C 02040254 IVCORR = 2 02050254 40030 IF ( IVCOMP - 2 ) 20030, 10030, 20030 02060254 30030 IVDELE = IVDELE + 1 02070254 WRITE (I02,80000) IVTNUM 02080254 IF (ICZERO) 10030, 0041, 20030 02090254 10030 IVPASS = IVPASS + 1 02100254 WRITE (I02,80002) IVTNUM 02110254 GO TO 0041 02120254 20030 IVFAIL = IVFAIL + 1 02130254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02140254 0041 CONTINUE 02150254 C 02160254 C **** FCVS PROGRAM 254 - TEST 004 **** 02170254 C 02180254 C TEST 004 HAS E1 AS .TRUE. AND E2 AS .FALSE.. ONLY THE IF-BLOCK02190254 C SHOULD BE EXECUTED. THE ELSE IF-BLOCK SHOULD NOT BE EXECUTED. 02200254 C 02210254 C 02220254 IVTNUM = 4 02230254 IF (ICZERO) 30040, 0040, 30040 02240254 0040 CONTINUE 02250254 IVCOMP = 1 02260254 LVON01 = .TRUE. 02270254 LVTN01 = LFIS01 ( LVON01 ) 02280254 LVON02 = .FALSE. 02290254 IF ( LVTN01 ) THEN 02300254 IVCOMP = IVCOMP * 2 02310254 ELSE IF ( LFIS01 ( LVON02 ) ) THEN 02320254 IVCOMP = IVCOMP * 3 02330254 END IF 02340254 C 02350254 C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02360254 C 02370254 IVCORR = 2 02380254 40040 IF ( IVCOMP - 2 ) 20040, 10040, 20040 02390254 30040 IVDELE = IVDELE + 1 02400254 WRITE (I02,80000) IVTNUM 02410254 IF (ICZERO) 10040, 0051, 20040 02420254 10040 IVPASS = IVPASS + 1 02430254 WRITE (I02,80002) IVTNUM 02440254 GO TO 0051 02450254 20040 IVFAIL = IVFAIL + 1 02460254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02470254 0051 CONTINUE 02480254 C 02490254 C 02500254 C THE SYNTAX OF THE ELSE IF STATEMENTS IN THE TESTS TO FOLLOW IS 02510254 C 02520254 C IF ( E1 ) THEN 02530254 C IF-BLOCK 1 02540254 C ELSE IF ( E2 ) THEN 02550254 C ELSE IF-BLOCK 1 02560254 C ELSE IF ( E3 ) THEN 02570254 C ELSE IF-BLOCK 2 02580254 C END IF 02590254 C 02600254 C 02610254 C 02620254 C **** FCVS PROGRAM 254 - TEST 005 **** 02630254 C 02640254 C TEST 005 HAS E1 AS TRUE. E2 AND E3 ARE FALSE. ONLY IF-BLOCK 102650254 C SHOULD BE EXECUTED. ELSE IF-BLOCKS 1 AND 2 SHOULD NOT EXECUTE. 02660254 C 02670254 C 02680254 IVTNUM = 5 02690254 IF (ICZERO) 30050, 0050, 30050 02700254 0050 CONTINUE 02710254 IVCOMP = 1 02720254 C LADN11(1) IS SET TO .TRUE. IN A DATA STATEMENT. 02730254 LVON02 = .FALSE. 02740254 LVON03 = .FALSE. 02750254 IF ( LADN11(1) ) THEN 02760254 IVCOMP = IVCOMP * 2 02770254 ELSE IF ( LVON02 ) THEN 02780254 IVCOMP = IVCOMP * 3 02790254 ELSE IF ( LVON03 ) THEN 02800254 IVCOMP = IVCOMP * 5 02810254 END IF 02820254 C 02830254 C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02840254 C 02850254 IVCORR = 2 02860254 40050 IF ( IVCOMP - 2 ) 20050, 10050, 20050 02870254 30050 IVDELE = IVDELE + 1 02880254 WRITE (I02,80000) IVTNUM 02890254 IF (ICZERO) 10050, 0061, 20050 02900254 10050 IVPASS = IVPASS + 1 02910254 WRITE (I02,80002) IVTNUM 02920254 GO TO 0061 02930254 20050 IVFAIL = IVFAIL + 1 02940254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02950254 0061 CONTINUE 02960254 C 02970254 C **** FCVS PROGRAM 254 - TEST 006 **** 02980254 C 02990254 C TEST 006 HAS E1 AS FALSE, E2 AS TRUE, AND E3 AS FALSE. ONLY 03000254 C ELSE IF-BLOCK 1 SHOULD EXECUTE. IF-BLOCK 1 AND ELSE IF-BLOCK 2 03010254 C SHOULD NOT EXECUTE. 03020254 C 03030254 C 03040254 IVTNUM = 6 03050254 IF (ICZERO) 30060, 0060, 30060 03060254 0060 CONTINUE 03070254 IVCOMP = 1 03080254 LVON01 = .FALSE. 03090254 LATN11(2) = .TRUE. 03100254 LVON03 = .FALSE. 03110254 IF ( LVON01 ) THEN 03120254 IVCOMP = IVCOMP * 2 03130254 ELSE IF ( LATN11(2) ) THEN 03140254 IVCOMP = IVCOMP * 3 03150254 ELSE IF ( LVON03 ) THEN 03160254 IVCOMP = IVCOMP * 5 03170254 END IF 03180254 C 03190254 C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****03200254 C 03210254 IVCORR = 3 03220254 40060 IF ( IVCOMP - 3 ) 20060, 10060, 20060 03230254 30060 IVDELE = IVDELE + 1 03240254 WRITE (I02,80000) IVTNUM 03250254 IF (ICZERO) 10060, 0071, 20060 03260254 10060 IVPASS = IVPASS + 1 03270254 WRITE (I02,80002) IVTNUM 03280254 GO TO 0071 03290254 20060 IVFAIL = IVFAIL + 1 03300254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03310254 0071 CONTINUE 03320254 C 03330254 C **** FCVS PROGRAM 254 - TEST 007 **** 03340254 C 03350254 C TEST 007 HAS E1 AS FALSE, E2 AS FALSE, AND E3 AS TRUE. ONLY 03360254 C ELSE IF-BLOCK 2 SHOULD BE EXECUTED. IF-BLOCK 1 AND ELSE IF-BLOCK 03370254 C 1 SHOULD NOT EXECUTE. 03380254 C 03390254 C 03400254 IVTNUM = 7 03410254 IF (ICZERO) 30070, 0070, 30070 03420254 0070 CONTINUE 03430254 IVCOMP = 1 03440254 LVON01 = .FALSE. 03450254 LVON02 = .FALSE. 03460254 LVON03 = .TRUE. 03470254 IF ( LVON01 ) THEN 03480254 IVCOMP = IVCOMP * 2 03490254 ELSE IF ( LVON02 ) THEN 03500254 IVCOMP = IVCOMP * 3 03510254 ELSE IF ( LVON03 ) THEN 03520254 IVCOMP = IVCOMP * 5 03530254 END IF 03540254 C 03550254 C **** IVCOMP IS DETERMINED BY IVCOMP = 5 = 1 * 5 ****03560254 C 03570254 IVCORR = 5 03580254 40070 IF ( IVCOMP - 5 ) 20070, 10070, 20070 03590254 30070 IVDELE = IVDELE + 1 03600254 WRITE (I02,80000) IVTNUM 03610254 IF (ICZERO) 10070, 0081, 20070 03620254 10070 IVPASS = IVPASS + 1 03630254 WRITE (I02,80002) IVTNUM 03640254 GO TO 0081 03650254 20070 IVFAIL = IVFAIL + 1 03660254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03670254 0081 CONTINUE 03680254 C 03690254 C **** FCVS PROGRAM 254 - TEST 008 **** 03700254 C 03710254 C TEST 008 HAS E1 AS FALSE. BOTH E2 AND E3 ARE TRUE. ONLY ELSE 03720254 C IF-BLOCK 1 SHOULD EXECUTE. IF-BLOCK 1 AND ELSE IF-BLOCK 2 SHOULD 03730254 C NOT EXECUTE. THIS IS A TEST OF THE LOGIC FLOW WHEN ONE OF THE 03740254 C EXPRESSIONS IN A STRING OF ELSE IF BLOCK STRUCTURES IS TRUE. ONLY03750254 C THAT PARTICULAR ELSE IF-BLOCK SHOULD BE EXECUTED. THE REST OF THE03760254 C STRING SHOULD BE SKIPPED. 03770254 C 03780254 C 03790254 IVTNUM = 8 03800254 IF (ICZERO) 30080, 0080, 30080 03810254 0080 CONTINUE 03820254 IVCOMP = 1 03830254 LVON01 = .FALSE. 03840254 LVON02 = .TRUE. 03850254 LVON03 = .TRUE. 03860254 IF ( LVON01 ) THEN 03870254 IVCOMP = IVCOMP * 2 03880254 ELSE IF ( LVON02 ) THEN 03890254 IVCOMP = IVCOMP * 3 03900254 ELSE IF ( LVON03 ) THEN 03910254 IVCOMP = IVCOMP * 5 03920254 END IF 03930254 C 03940254 C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****03950254 C 03960254 IVCORR = 3 03970254 40080 IF ( IVCOMP - 3 ) 20080, 10080, 20080 03980254 30080 IVDELE = IVDELE + 1 03990254 WRITE (I02,80000) IVTNUM 04000254 IF (ICZERO) 10080, 0091, 20080 04010254 10080 IVPASS = IVPASS + 1 04020254 WRITE (I02,80002) IVTNUM 04030254 GO TO 0091 04040254 20080 IVFAIL = IVFAIL + 1 04050254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04060254 0091 CONTINUE 04070254 C 04080254 C 04090254 C THE FOLLOWING TWO TESTS ARE TO CHECK THE EXECUTION OF AN ELSE 04100254 C IF STATEMENT WITH AN EMPTY ELSE IF-BLOCK. THE SYNTAX FOR THE TWO 04110254 C TESTS IS AS FOLLOWS - 04120254 C 04130254 C IF ( E1 ) THEN 04140254 C IF-BLOCK 1 04150254 C ELSE IF ( E2 ) THEN 04160254 C ELSE IF ( E3 ) THEN 04170254 C ELSE IF-BLOCK 1 04180254 C END IF 04190254 C 04200254 C 04210254 C 04220254 C **** FCVS PROGRAM 254 - TEST 009 **** 04230254 C 04240254 C TEST 009 HAS E1 FALSE, E2 TRUE, AND E3 AS TRUE. THE STRUCTURE 04250254 C ELSE IF ( E2 ) THEN 04260254 C IS FOLLOWED BY AN EMPTY ELSE IF-BLOCK ALLOWED IN SECTION 11.7.1. 04270254 C IN SECTION 11.7.2, IF THE VALUE OF THE EXPRESSION IS TRUE AND THE04280254 C ELSE IF-BLOCK IS EMPTY, CONTROL IS TRANSFERRED TO THE NEXT END IF 04290254 C STATEMENT THAT HAS THE SAME IF-LEVEL AS THE ELSE IF STATEMENT. 04300254 C NEITHER IF-BLOCK 1 NOR ELSE IF-BLOCK 1 SHOULD BE EXECUTED. 04310254 C 04320254 C 04330254 IVTNUM = 9 04340254 IF (ICZERO) 30090, 0090, 30090 04350254 0090 CONTINUE 04360254 IVCOMP = 1 04370254 LVON01 = .FALSE. 04380254 LVON02 = .TRUE. 04390254 LVON03 = .TRUE. 04400254 IF ( LVON01 ) THEN 04410254 IVCOMP = IVCOMP * 2 04420254 ELSE IF ( LVON02 ) THEN 04430254 ELSE IF ( LVON03 ) THEN 04440254 IVCOMP = IVCOMP * 3 04450254 END IF 04460254 IVCORR = 1 04470254 40090 IF ( IVCOMP - 1 ) 20090, 10090, 20090 04480254 30090 IVDELE = IVDELE + 1 04490254 WRITE (I02,80000) IVTNUM 04500254 IF (ICZERO) 10090, 0101, 20090 04510254 10090 IVPASS = IVPASS + 1 04520254 WRITE (I02,80002) IVTNUM 04530254 GO TO 0101 04540254 20090 IVFAIL = IVFAIL + 1 04550254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04560254 0101 CONTINUE 04570254 C 04580254 C **** FCVS PROGRAM 254 - TEST 010 **** 04590254 C 04600254 C TEST 010 ALSO HAS AN EMPTY ELSE IF-BLOCK. E1 AND E2 ARE FALSE.04610254 C E3 IS TRUE. ONLY ELSE IF-BLOCK 1 SHOULD BE EXECUTED. IF-BLOCK 1 04620254 C SHOULD NOT BE EXECUTED. IN SECTION 11.7.2, IF THE VALUE OF THE 04630254 C EXPRESSION IS FALSE, CONTROL IS TRANSFERRED TO THE NEXT ELSE IF, 04640254 C ELSE, OR END IF STATEMENT THAT HAS THE SAME IF-LEVEL AS THE ELSE 04650254 C IF STATEMENT. 04660254 C 04670254 C 04680254 IVTNUM = 10 04690254 IF (ICZERO) 30100, 0100, 30100 04700254 0100 CONTINUE 04710254 IVCOMP = 1 04720254 LVON01 = .FALSE. 04730254 LVON02 = .FALSE. 04740254 LVON03 = .TRUE. 04750254 IF ( LVON01 ) THEN 04760254 IVCOMP = IVCOMP * 2 04770254 ELSE IF ( LVON02 ) THEN 04780254 ELSE IF ( LVON03 ) THEN 04790254 IVCOMP = IVCOMP * 3 04800254 END IF 04810254 C 04820254 C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****04830254 C 04840254 IVCORR = 3 04850254 40100 IF ( IVCOMP - 3 ) 20100, 10100, 20100 04860254 30100 IVDELE = IVDELE + 1 04870254 WRITE (I02,80000) IVTNUM 04880254 IF (ICZERO) 10100, 0111, 20100 04890254 10100 IVPASS = IVPASS + 1 04900254 WRITE (I02,80002) IVTNUM 04910254 GO TO 0111 04920254 20100 IVFAIL = IVFAIL + 1 04930254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04940254 0111 CONTINUE 04950254 C 04960254 C 04970254 C THE NEXT TWO TESTS USE THE ELSE IF STRUCTURE INSIDE A BLOCKED 04980254 C IF STRUCTURE OF LEVEL 2 AS FOLLOWS - 04990254 C 05000254 C IF ( E1 ) THEN 05010254 C IF-BLOCK 1 05020254 C IF ( E2 ) THEN 05030254 C IF-BLOCK 2 05040254 C ELSE IF ( E3 ) THEN 05050254 C ELSE IF-BLOCK 1 05060254 C ELSE IF ( E4 ) THEN 05070254 C ELSE IF-BLOCK 2 05080254 C END IF 05090254 C ELSE IF ( E5 ) THEN 05100254 C ELSE IF-BLOCK 3 05110254 C ELSE IF ( E6 ) THEN 05120254 C ELSE IF-BLOCK 4 05130254 C END IF 05140254 C 05150254 C 05160254 C 05170254 C **** FCVS PROGRAM 254 - TEST 011 **** 05180254 C 05190254 C TEST 011 HAS E1 TRUE, E2 AND E3 AS FALSE, E4, E5, AND ALSO 05200254 C E6 AS TRUE. IF-BLOCK 1, AND ELSE IF-BLOCK 2 SHOULD BE EXECUTED. 05210254 C IF-BLOCK 2, ELSE IF-BLOCK 1, 3, AND 4 SHOULD NOT BE EXECUTED. 05220254 C 05230254 C 05240254 IVTNUM = 11 05250254 IF (ICZERO) 30110, 0110, 30110 05260254 0110 CONTINUE 05270254 IVCOMP = 1 05280254 LVON01 = .TRUE. 05290254 LVON02 = .FALSE. 05300254 LVON03 = .FALSE. 05310254 LVON04 = .TRUE. 05320254 LVON05 = .TRUE. 05330254 LVON06 = .TRUE. 05340254 IF ( LVON01 ) THEN 05350254 IVCOMP = IVCOMP * 2 05360254 IF ( LVON02 ) THEN 05370254 IVCOMP = IVCOMP * 3 05380254 ELSE IF ( LVON03 ) THEN 05390254 IVCOMP = IVCOMP * 5 05400254 ELSE IF ( LVON04 ) THEN 05410254 IVCOMP = IVCOMP * 7 05420254 END IF 05430254 ELSE IF ( LVON05 ) THEN 05440254 IVCOMP = IVCOMP * 11 05450254 ELSE IF ( LVON06 ) THEN 05460254 IVCOMP = IVCOMP * 13 05470254 END IF 05480254 C 05490254 C **** IVCOMP IS DETERMINED BY IVCOMP = 14 = 1 * 2 * 7 ****05500254 C 05510254 IVCORR = 14 05520254 40110 IF ( IVCOMP - 14 ) 20110, 10110, 20110 05530254 30110 IVDELE = IVDELE + 1 05540254 WRITE (I02,80000) IVTNUM 05550254 IF (ICZERO) 10110, 0121, 20110 05560254 10110 IVPASS = IVPASS + 1 05570254 WRITE (I02,80002) IVTNUM 05580254 GO TO 0121 05590254 20110 IVFAIL = IVFAIL + 1 05600254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 05610254 0121 CONTINUE 05620254 C 05630254 C **** FCVS PROGRAM 254 - TEST 012 **** 05640254 C 05650254 C TEST 012 HAS E1 AS FALSE, E2, E3, AND E4 ARE TRUE, E5 AS FALSE,05660254 C AND E6 IS TRUE. ONLY ELSE IF-BLOCK 4 SHOULD BE EXECUTED. NO 05670254 C OTHER IF-BLOCK OR ELSE IF-BLOCK SHOULD BE EXECUTED. 05680254 C 05690254 C 05700254 IVTNUM = 12 05710254 IF (ICZERO) 30120, 0120, 30120 05720254 0120 CONTINUE 05730254 IVCOMP = 1 05740254 LVON01 = .FALSE. 05750254 LVON02 = .TRUE. 05760254 LVON03 = .TRUE. 05770254 LVON04 = .TRUE. 05780254 LVON05 = .FALSE. 05790254 LVON06 = .TRUE. 05800254 IF ( LVON01 ) THEN 05810254 IVCOMP = IVCOMP * 2 05820254 IF ( LVON02 ) THEN 05830254 IVCOMP = IVCOMP * 3 05840254 ELSE IF ( LVON03 ) THEN 05850254 IVCOMP = IVCOMP * 5 05860254 ELSE IF ( LVON04 ) THEN 05870254 IVCOMP = IVCOMP * 7 05880254 END IF 05890254 ELSE IF ( LVON05 ) THEN 05900254 IVCOMP = IVCOMP * 11 05910254 ELSE IF ( LVON06 ) THEN 05920254 IVCOMP = IVCOMP * 13 05930254 END IF 05940254 C 05950254 C **** IVCOMP IS DETERMINED BY IVCOMP = 13 = 1 * 13 ****05960254 C 05970254 IVCORR = 13 05980254 40120 IF ( IVCOMP - 13 ) 20120, 10120, 20120 05990254 30120 IVDELE = IVDELE + 1 06000254 WRITE (I02,80000) IVTNUM 06010254 IF (ICZERO) 10120, 0131, 20120 06020254 10120 IVPASS = IVPASS + 1 06030254 WRITE (I02,80002) IVTNUM 06040254 GO TO 0131 06050254 20120 IVFAIL = IVFAIL + 1 06060254 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06070254 0131 CONTINUE 06080254 C 06090254 C 06100254 C WRITE OUT TEST SUMMARY 06110254 C 06120254 WRITE (I02,90004) 06130254 WRITE (I02,90014) 06140254 WRITE (I02,90004) 06150254 WRITE (I02,90000) 06160254 WRITE (I02,90004) 06170254 WRITE (I02,90020) IVFAIL 06180254 WRITE (I02,90022) IVPASS 06190254 WRITE (I02,90024) IVDELE 06200254 STOP 06210254 90001 FORMAT (" ",24X,"FM254") 06220254 90000 FORMAT (" ",20X,"END OF PROGRAM FM254" ) 06230254 C 06240254 C FORMATS FOR TEST DETAIL LINES 06250254 C 06260254 80000 FORMAT (" ",4X,I5,6X,"DELETED") 06270254 80002 FORMAT (" ",4X,I5,7X,"PASS") 06280254 80010 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 06290254 80012 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 06300254 80018 FORMAT (" ",4X,I5,7X,"FAIL",2X,A14,1X,A14) 06310254 C 06320254 C FORMAT STATEMENTS FOR PAGE HEADERS 06330254 C 06340254 90002 FORMAT ("1") 06350254 90004 FORMAT (" ") 06360254 90006 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 06370254 90008 FORMAT (" ",21X,"VERSION 2.1" ) 06380254 90010 FORMAT (" ",8X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 06390254 90012 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL",5X,"COMPUTED",8X,"CORRECT") 06400254 90014 FORMAT (" ",5X,"----------------------------------------------" ) 06410254 90016 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 06420254 C 06430254 C FORMAT STATEMENTS FOR RUN SUMMARY 06440254 C 06450254 90020 FORMAT (" ",19X,I5," TESTS FAILED" ) 06460254 90022 FORMAT (" ",19X,I5," TESTS PASSED" ) 06470254 90024 FORMAT (" ",19X,I5," TESTS DELETED" ) 06480254 END 06490254