PROGRAM FM200 C C C THIS ROUTINE IS THE FIRST AUDIT PROGRAM TO CONTAIN A PROGRAM C STATEMENT. THE FOLLOWING FEATURES FROM CHAPTER 3., CHARACTERS, C LINES AND EXECUTION SEQUENCE ARE TESTED. C C (1) ASTERISK (*) IN COLUMN 1 TO DESIGNATE A COMMENT LINE. C (2) USE OF NON-FORTRAN CHARACTERS WITHIN A COMMENT LINE. C (3) STATEMENT LABELS ON NONEXECUTABLE STATEMENTS. C (4) DIGIT 0 IN COLUMN 6 OF AN INITIAL LINE. C (5) CONTINUATION LINES - MAXIMUM OF NINE CONTINUATION LINES C (660 CHARACTERS). C (6) BLANK CHARACTERS WITHIN STATEMENTS. C (7) BLANK COMMENT LINE, BLANK CHARACTERS IN COLUMNS 1-72. C C THE BASIC FEATURES OF SUBSET FORTRAN WHICH ARE TESTED BY THIS C PROGRAM ARE USED THROUGHOUT THE REST OF THE SUBSET ROUTINES. C C REFERENCES C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, C X3.9-1978 C C SECTION 3.1.6, BLANK CHARACTER C SECTION 3.2.1, COMMENT LINE C SECTION 3.2.2, INITIAL LINE C SECTION 3.2.3, CONTINUATION LINE C SECTION 3.3, STATEMENTS C SECTION 3.4, STATEMENT LABEL C SECTION 14.1, PROGRAM STATEMENT C C C ****************************************************************** C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING C THE RESULT OF EXECUTING THESE TESTS. C C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES C FOUND IN THE SUBSET LEVEL OF THE STANDARD. C C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO C DEPARTMENT OF THE NAVY C FEDERAL COBOL COMPILER TESTING SERVICE C WASHINGTON, D.C. 20376 C C ****************************************************************** C C IMPLICIT LOGICAL (L) IMPLICIT CHARACTER*14 (C) C 12 INTEGER XVTN01 22 DATA IVON02/5/ C THE PRECEDING STATEMENTS ARE NONEXECUTABLE STATEMENTS WHICH C CONTAIN STATEMENT LABELS. THEY ARE REFERENCED IN TESTS 1 AND 2. C C C C INITIALIZATION SECTION. C C INITIALIZE CONSTANTS C ******************** C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER I01 = 5 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER I02 = 6 C SYSTEM ENVIRONMENT SECTION C CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 C (UNIT NUMBER FOR CARD READER). CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. C CX020 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 C (UNIT NUMBER FOR PRINTER). CX021 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. C IVPASS = 0 IVFAIL = 0 IVDELE = 0 ICZERO = 0 C C WRITE OUT PAGE HEADERS C WRITE (I02,90002) WRITE (I02,90006) WRITE (I02,90008) WRITE (I02,90004) WRITE (I02,90010) WRITE (I02,90004) WRITE (I02,90016) WRITE (I02,90001) WRITE (I02,90004) WRITE (I02,90012) WRITE (I02,90014) WRITE (I02,90004) C C C TEST 1 AND TEST 2 REFERENCE VARIABLES DEFINED IN NONEXECUTABLE C STATEMENTS WHICH CONTAIN STATEMENT LABELS. THE NONEXECUTABLE C STATEMENTS WHICH APPEAR AT THE BEGINNING OF THE PROGRAM ARE C 12 INTEGER XVTN01 C 22 DATA IVON02/5/ C C REFERENCE X3.9-1977, SECTION 3.4, STATEMENT LABELS C C C **** FCVS PROGRAM 200 - TEST 001 **** C C TEST 001 ASSIGNS AN INTEGER VALUE TO XVTN01 WHICH WAS SPECIFIED C AS TYPE INTEGER IN AN INTEGER STATEMENT CONTAINING A STATEMENT C LABEL. C IVTNUM = 1 IF (ICZERO) 30010, 0010, 30010 0010 CONTINUE IVCOMP = 0 XVTN01 = 1 IVCOMP = XVTN01 IVCORR = 1 40010 IF (IVCOMP - 1) 20010, 10010, 20010 30010 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10010, 0021, 20010 10010 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0021 20010 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0021 CONTINUE C C **** FCVS PROGRAM 200 - TEST 002 **** C C TEST 002 CHECKS THE VALUE WHICH WAS ASSIGNED TO IVON02 BY A C DATA STATEMENT WITH A STATEMENT LABEL. C IVTNUM = 2 IF (ICZERO) 30020, 0020, 30020 0020 CONTINUE IVCOMP = 0 IVCOMP = IVON02 IVCORR = 5 40020 IF (IVCOMP - 5) 20020, 10020, 20020 30020 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10020, 0031, 20020 10020 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0031 20020 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0031 CONTINUE C C TEST 3 THROUGH TEST 5 USE AN ASTERISK (*) IN COLUMN 1 TO C DENOTE A COMMENT LINE. C C REFERENCE X3.9-1977, SECTION 3.2.1, COMMENT LINE C C C **** FCVS PROGRAM 200 - TEST 003 **** C C GO TO STATEMENT IN ASTERISK COMMENT LINE. C IVTNUM = 3 IF (ICZERO) 30030, 0030, 30030 0030 CONTINUE IVCOMP = 1 * GO TO 20030 IVCOMP = 0 IVCORR = 0 40030 IF (IVCOMP) 20030, 10030, 20030 30030 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10030, 0041, 20030 10030 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0041 20030 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0041 CONTINUE C C **** FCVS PROGRAM 200 - TEST 004 **** C C SEVERAL * COMMENT LINES INTERMIXED WITH EXECUTABLE STATEMENTS. C IVTNUM = 4 IF (ICZERO) 30040, 0040, 30040 0040 CONTINUE IVCOMP = 0 * THE * COMMENT LINE IS THE SAME AS A C COMMENT LINE. IVCOMP = 1 * THE * COMMENT LINES HAVE NO EFFECT ON THE PROGRAM EXECUTION. * THEIR USE IS STRICTLY FOR DOCUMENTATION PURPOSES. IVCOMP = 2 * IVCOMP = 3 * 40 ANY STATEMENT LABELS ON COMMENT LINES ARE IGNORED. IVCORR = 2 40040 IF (IVCOMP - 2) 20040, 10040, 20040 30040 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10040, 0051, 20040 10040 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0051 20040 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0051 CONTINUE C C **** FCVS PROGRAM 200 - TEST 005 **** C C NONFORTRAN CHARACTERS WITHIN C AND * COMMENT LINES. C IVTNUM = 5 IF (ICZERO) 30050, 0050, 30050 0050 CONTINUE IVCOMP = 1 * <>%? NONFORTRAN CHARACTER C <>%? NONFORTRAN CHARACTER IVCOMP = 0 IVCORR = 0 40050 IF (IVCOMP) 20050, 10050, 20050 30050 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10050, 0061, 20050 10050 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0061 20050 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0061 CONTINUE C C **** FCVS PROGRAM 200 - TEST 006 **** C C LINES CONTAINING ONLY BLANK CHARACTERS IN COLUMNS 1 THROUGH C 72 ARE COMMENT LINES. C C REFERENCE X3.9-1977, SECTION 3.2.1, COMMENT LINE C IVTNUM = 6 IF (ICZERO) 30060, 0060, 30060 0060 CONTINUE IVCOMP = 0 IVCORR = 3 IVCOMP = 9 * ASTERISK COMMENT LINE FOLLOWED BY BLANK COMMENT LINE. * ASTERISK COMMENT LINE. IVCOMP = 3 40060 IF (IVCOMP - 3) 20060, 10060, 20060 30060 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10060, 0071, 20060 10060 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0071 20060 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0071 CONTINUE C C TEST 7 AND TEST 8 CONTAIN THE DIGIT 0 IN COLUMN 6 OF INITIAL C LINES. C C REFERENCE X3.9-1977, SECTION 3.2.2, INITIAL LINE C C C **** FCVS PROGRAM 200 - TEST 007 **** C C TEST 007 USES THE DIGIT 0 IN COLUMN 6 OF TWO SUCCESSIVE C INITIAL LINES. C IVTNUM = 7 IF (ICZERO) 30070, 0070, 30070 0070 CONTINUE IVCOMP = 0 0IVON01 = 5 0IVON02 = 6 IVCOMP = IVON01 + IVON02 IVCORR = 11 40070 IF (IVCOMP - 11) 20070, 10070, 20070 30070 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10070, 0081, 20070 10070 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0081 20070 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0081 CONTINUE C C **** FCVS PROGRAM 200 - TEST 008 **** C C TEST 008 MIXES STATEMENTS WITH DIGIT 0 IN COLUMN 6 OF INITIAL C LINE AND COMMENT LINES WITH * IN COLUMN 1. C IVTNUM = 8 IF (ICZERO) 30080, 0080, 30080 0080 CONTINUE IVCOMP = 0 * FIRST INITIAL LINE FOLLOWS. 0IVON01 = 5 * TWO SUCCESSIVE COMMENT LINES, * FOLLOWED BY TWO INITIAL LINES. 0IVON02=4 0IVCOMP=IVON01+IVON02 * FALL THROUGH TO VERIFICATION CODE IVCORR = 9 40080 IF (IVCOMP - 9) 20080, 10080, 20080 30080 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10080, 0091, 20080 10080 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0091 20080 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0091 CONTINUE C C TEST 9 THROUGH TEST 13 VERIFY THAT CONTINUATION LINES ARE C PERMITTED. C C REFERENCE X3.9-1977, SECTION 3.2.3, CONTINUATION LINE C C C **** FCVS PROGRAM 200 - TEST 009 **** C C STATEMENT WITH TWO CONTINUATION LINES. C IVTNUM = 9 IF (ICZERO) 30090, 0090, 30090 0090 CONTINUE IVON01 = 0 IVON 1 01 2 = 2 IVCOMP = IVON01 IVCORR = 2 40090 IF (IVCOMP - 2) 20090, 10090, 20090 30090 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10090, 0101, 20090 10090 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0101 20090 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0101 CONTINUE C C **** FCVS PROGRAM 200 - TEST 010 **** C C STATEMENT WITH NINE CONTINUATION LINES. C IVTNUM = 10 IF (ICZERO) 30100, 0100, 30100 0100 CONTINUE IVON01 = 0 IVON01 = 1 1 2 +1 3 +1 4 +1 5 +1 6 +1 7 +1 8 +1 9+1 IVCOMP = IVON01 IVCORR = 9 40100 IF (IVCOMP - 9) 20100, 10100, 20100 30100 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10100, 0111, 20100 10100 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0111 20100 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0111 CONTINUE C C **** FCVS PROGRAM 200 - TEST 011 **** C C TEST 011 CONTAINS THE MAXIMUM NUMBER OF CONTINUATION LINES C PERMITTED IN THE SUBSET LANGUAGE AND EACH OF THE 660 CHARACTERS C IN THE STATEMENT ARE NONBLANK. C IVTNUM = 11 IF (ICZERO) 30110, 0110, 30110 0110 CONTINUE IVON01 = 1 IVCOMP = 0 IVCOMP=IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVO 1N01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01 2+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IV 3ON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON0 41+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+I 5VON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON 601+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+ 7IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVO 8N01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01 9+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+IVON01+12 IVCORR = 105 40110 IF (IVCOMP - 105) 20110, 10110, 20110 30110 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10110, 0121, 20110 10110 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0121 20110 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0121 CONTINUE C C **** FCVS PROGRAM 200 - TEST 012 **** C C TEST 012 SPLITS A STATEMENT ACROSS 8 CONTINUATION LINES. C THERE IS A STATEMENT LABEL IN COLUMNS 1-5 AND 0 IN COLUMN 6 C OF THE INITIAL LINE. C IVTNUM = 12 IF (ICZERO) 30120, 0120, 30120 0120 CONTINUE IVON01 = 0 GO TO 0122 01220 I 1 V 2 O 3 N 4 0 5 1 6 = 7 8 8 9 IVCOMP = IVON01 IVCORR = 89 40120 IF (IVCOMP - 89) 20120, 10120, 20120 30120 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10120, 0131, 20120 10120 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0131 20120 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0131 CONTINUE C C **** FCVS PROGRAM 200 - TEST 013 **** C C TEST 013 CONSISTS OF AN INITIAL LINE WHICH CONTAINS ONLY A C STATEMENT LABEL AND A CONTINUATION LINE WHICH CONTAINS THE C EXECUTABLE STATEMENT. C IVTNUM = 13 IF (ICZERO) 30130, 0130, 30130 0130 CONTINUE IVCOMP = 0 0132 1IVCOMP = 4 IVCORR = 4 40130 IF (IVCOMP - 4) 20130, 10130, 20130 30130 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10130, 0141, 20130 10130 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0141 20130 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0141 CONTINUE C C C WRITE OUT TEST SUMMARY C WRITE (I02,90004) WRITE (I02,90014) WRITE (I02,90004) WRITE (I02,90000) WRITE (I02,90004) WRITE (I02,90020) IVFAIL WRITE (I02,90022) IVPASS WRITE (I02,90024) IVDELE STOP 90001 FORMAT (1H ,24X,5HFM200) 90000 FORMAT (1H ,20X,20HEND OF PROGRAM FM200) C C FORMATS FOR TEST DETAIL LINES C 80000 FORMAT (1H ,4X,I5,6X,7HDELETED) 80002 FORMAT (1H ,4X,I5,7X,4HPASS) 80010 FORMAT (1H ,4X,I5,7X,4HFAIL,10X,I6,9X,I6) 80012 FORMAT (1H ,4X,I5,7X,4HFAIL,4X,E12.5,3X,E12.5) 80018 FORMAT (1H ,4X,I5,7X,4HFAIL,2X,A14,1X,A14) C C FORMAT STATEMENTS FOR PAGE HEADERS C 90002 FORMAT (1H1) 90004 FORMAT (1H ) 90006 FORMAT (1H ,10X,34HFORTRAN COMPILER VALIDATION SYSTEM) 90008 FORMAT (1H ,21X,11HVERSION 1.0) 90010 FORMAT (1H ,8X,38HFOR OFFICIAL USE ONLY - COPYRIGHT 1978) 90012 FORMAT (1H ,5X,4HTEST,5X,9HPASS/FAIL,5X,8HCOMPUTED,8X,7HCORRECT) 90014 FORMAT (1H ,5X,46H----------------------------------------------) 90016 FORMAT (1H ,18X,17HSUBSET LEVEL TEST) C C FORMAT STATEMENTS FOR RUN SUMMARY C 90020 FORMAT (1H ,19X,I5,13H TESTS FAILED) 90022 FORMAT (1H ,19X,I5,13H TESTS PASSED) 90024 FORMAT (1H ,19X,I5,14H TESTS DELETED) END