      PROGRAM FM001

C     COMMENT SECTION                                                   00010001
C                                                                       00020001
C     FM001                                                             00030001
C                                                                       00040001
C         THIS ROUTINE CONTAINS THE BOILERPLATE SOURCE CODING WHICH     00050001
C     IS USED TO PRINT THE REPORT HEADINGS AND RUN SUMMARIES FOR EACH   00060001
C     OF THE ELEMENTARY ROUTINES.                                       00070001
C                                                                       00080001
C         THREE TESTS ARE INCLUDED WHICH CONTAIN THE PROCEDURES FOR     00090001
C         TESTING THE LANGUAGE FEATURES AND DELETING TESTS.             00100001
C                                                                       00110001
C         TEST 1 CHECKS THE PASS PROCEDURE                              00120001
C         TEST 2 CHECKS THE FAIL PROCEDURE                              00130001
C         TEST 3 CHECKS THE DELETE PROCEDURE                            00140001
C                                                                       00150001
C         IF THIS ROUTINE DOES NOT EXECUTE CORRECTLY, THEN NO OTHER     00160001
C     ROUTINES WILL BE RUN.  THERE IS NO USE IN TRYING TO VALIDATE A    00170001
C     FORTRAN COMPILER WHICH CANNOT HANDLE SUCH BASIC STATEMENTS.       00180001
C                                                                       00190001
C      **********************************************************       00200001
C                                                                       00210001
C         A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE         00220001
C     BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD  00230001
C     PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00240001
C     FEDERAL COBOL COMPILER TESTING SERVICE.  THE FORTRAN COMPILER     00250001
C     VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00260001
C     DATA, AND AN EXECUTIVE SYSTEM.  EACH AUDIT ROUTINE IS A FORTRAN   00270001
C     PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC  00280001
C     LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00290001
C     OF EXECUTING THESE TESTS.                                         00300001
C                                                                       00310001
C         THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00320001
C     FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978.                 00330001
C                                                                       00340001
C         SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO -             00350001
C                                                                       00360001
C              NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY           00370001
C                   SOFTWARE STANDARDS VALIDATION GROUP                 00380001
C                          BUILDING 225  RM A266                        00390001
C                         GAITHERSBURG, MD  20899                       00400001
C      **********************************************************       00410001
C                                                                       00420001
C                                                                       00430001
C                                                                       00440001
C     INITIALIZATION SECTION                                            00450001
C                                                                       00460001
C     INITIALIZE CONSTANTS                                              00470001
C      **************                                                   00480001
C     I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER.         00490001
      I01 = 5                                                           00500001
C     I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER.             00510001
      I02 = 6                                                           00520001
C     SYSTEM ENVIRONMENT SECTION                                        00530001
C                                                                       00540001
CX010    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00550001
C     THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5      00560001
C     (UNIT NUMBER FOR CARD READER).                                    00570001
CX011    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00580001
C     THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00590001
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE.         00600001
C                                                                       00610001
CX020    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00620001
C     THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6      00630001
C     (UNIT NUMBER FOR PRINTER).                                        00640001
CX021    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00650001
C     THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00660001
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE.         00670001
C                                                                       00680001
      IVPASS=0                                                          00690001
      IVFAIL=0                                                          00700001
      IVDELE=0                                                          00710001
      ICZERO=0                                                          00720001
C                                                                       00730001
C     WRITE PAGE HEADERS                                                00740001
      WRITE (I02,90000)                                                 00750001
      WRITE (I02,90001)                                                 00760001
      WRITE (I02,90002)                                                 00770001
      WRITE (I02, 90002)                                                00780001
      WRITE (I02,90003)                                                 00790001
      WRITE (I02,90002)                                                 00800001
      WRITE (I02,90004)                                                 00810001
      WRITE (I02,90002)                                                 00820001
      WRITE (I02,90011)                                                 00830001
      WRITE (I02,90002)                                                 00840001
      WRITE (I02,90002)                                                 00850001
      WRITE (I02,90005)                                                 00860001
      WRITE (I02,90006)                                                 00870001
      WRITE (I02,90002)                                                 00880001
C     TEST SECTION                                                      00890001
C                                                                       00900001
   11 CONTINUE                                                          00910001
C                                                                       00920001
C      ****  TEST 001  ****                                             00930001
C     TEST 001  -  BASIC PROCEDURE FOR CODING TESTS                     00940001
C           ALSO CHECKS CONTINUE STATEMENT WHICH SHOULD NOT HAVE        00950001
C           ANY AFFECT ON EXECUTION SEQUENCE                            00960001
C                                                                       00970001
      IF (ICZERO) 30010, 10, 30010                                      00980001
   10 CONTINUE                                                          00990001
      IVTNUM=1                                                          01000001
      GO TO 40010                                                       01010001
30010 IVDELE=IVDELE+1                                                   01020001
      WRITE (I02,80003) IVTNUM                                          01030001
      IF (ICZERO) 40010, 21, 40010                                      01040001
40010 IF (IVTNUM - 1) 20010, 10010, 20010                               01050001
10010 IVPASS=IVPASS+1                                                   01060001
      WRITE (I02,80001) IVTNUM                                          01070001
      GO TO 21                                                          01080001
20010 IVFAIL=IVFAIL+1                                                   01090001
      IVCOMP=IVTNUM                                                     01100001
      IVCORR=1                                                          01110001
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          01120001
   21 CONTINUE                                                          01130001
C                                                                       01140001
C      ****  TEST 002  ****                                             01150001
C     TEST - 002    FORCE FAIL CODE TO BE EXECUTED                      01160001
C                                                                       01170001
      IF (ICZERO) 30020,20,30020                                        01180001
   20 CONTINUE                                                          01190001
      IVTNUM=2                                                          01200001
      GO TO 40020                                                       01210001
30020 IVDELE=IVDELE+1                                                   01220001
      WRITE (I02,80003) IVTNUM                                          01230001
      IF (ICZERO) 40020,31,40020                                        01240001
40020 IF (IVTNUM-1) 20020, 10020, 20020                                 01250001
10020 IVPASS=IVPASS+1                                                   01260001
      WRITE (I02,80001) IVTNUM                                          01270001
      GO TO 31                                                          01280001
20020 IVFAIL=IVFAIL+1                                                   01290001
      IVCOMP=IVTNUM                                                     01300001
      IVCORR=2                                                          01310001
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          01320001
   31 CONTINUE                                                          01330001
C                                                                       01340001
C      ****  TEST 003  ****                                             01350001
C     TEST 003 - DELETE PROCEDURE TESTED                                01360001
C                                                                       01370001
      IF (ICZERO) 30030,30,30030                                        01380001
   30 CONTINUE                                                          01390001
C     IVTNUM=5000                                                       01400001
C     GO TO 40030                                                       01410001
30030 IVDELE=IVDELE+1                                                   01420001
      IVTNUM=3                                                          01430001
      WRITE (I02,80003) IVTNUM                                          01440001
      IF (ICZERO) 40030,99999,40030                                     01450001
40030 IF (IVTNUM - 5000) 20030,10030,20030                              01460001
10030 IVPASS=IVPASS +1                                                  01470001
      WRITE (I02,80001) IVTNUM                                          01480001
      GO TO 99999                                                       01490001
20030 IVFAIL=IVFAIL+1                                                   01500001
      IVCOMP=IVTNUM                                                     01510001
      IVCORR=5000                                                       01520001
      WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR                          01530001
C                                                                       01540001
C     WRITE PAGE FOOTINGS AND RUN SUMMARIES                             01550001
99999 CONTINUE                                                          01560001
      WRITE (I02,90002)                                                 01570001
      WRITE (I02,90006)                                                 01580001
      WRITE (I02,90002)                                                 01590001
      WRITE (I02,90002)                                                 01600001
      WRITE (I02,90007)                                                 01610001
      WRITE (I02,90002)                                                 01620001
      WRITE (I02,90008)  IVFAIL                                         01630001
      WRITE (I02,90009) IVPASS                                          01640001
      WRITE (I02,90010) IVDELE                                          01650001
C                                                                       01660001
C                                                                       01670001
C     SPECIAL OUTPUT STATEMENTS FOR THIS ROUTINE                        01680001
      WRITE (I02,90000)                                                 01690001
      WRITE (I02,90002)                                                 01700001
      WRITE (I02,80031)                                                 01710001
      WRITE (I02,90002)                                                 01720001
      WRITE (I02,80010)                                                 01730001
      WRITE (I02,80020)                                                 01740001
      WRITE (I02,80030)                                                 01750001
      WRITE (I02,80032)                                                 01760001
C                                                                       01770001
C     TERMINATE ROUTINE EXECUTION                                       01780001
      STOP                                                              01790001
C                                                                       01800001
C     FORMAT STATEMENTS FOR PAGE HEADERS                                01810001
90000 FORMAT (1H1)                                                      01820001
90002 FORMAT (1H )                                                      01830001
90001 FORMAT (1H ,10X,34HFORTRAN COMPILER VALIDATION SYSTEM)            01840001
90003 FORMAT (1H ,21X,11HVERSION 2.1)                                   01850001
90004 FORMAT (1H ,10X,38HFOR OFFICIAL USE ONLY - COPYRIGHT 1978)        01860001
90005 FORMAT (1H ,5X,4HTEST,5X,9HPASS/FAIL, 5X,8HCOMPUTED,8X,7HCORRECT) 01870001
90006 FORMAT (1H ,5X,46H----------------------------------------------) 01880001
90011 FORMAT (1H ,18X,17HSUBSET LEVEL TEST)                             01890001
C                                                                       01900001
C     FORMAT STATEMENTS FOR RUN SUMMARIES                               01910001
90008 FORMAT (1H ,15X,I5,19H ERRORS ENCOUNTERED)                        01920001
90009 FORMAT (1H ,15X,I5,13H TESTS PASSED)                              01930001
90010 FORMAT (1H ,15X,I5,14H TESTS DELETED)                             01940001
C                                                                       01950001
C     FORMAT STATEMENTS FOR TEST RESULTS                                01960001
80001 FORMAT (1H ,4X,I5,7X,4HPASS)                                      01970001
80002 FORMAT (1H ,4X,I5,7X,4HFAIL)                                      01980001
80003 FORMAT (1H ,4X,I5,7X,7HDELETED)                                   01990001
80004 FORMAT (1H ,4X,I5,7X,4HFAIL,10X,I6,9X,I6)                         02000001
80005 FORMAT (1H ,4X,I5,7X,4HFAIL,4X,E12.5,3X,E12.5)                    02010001
C                                                                       02020001
C     FORMATS FOR CURRENT ROUTINE                                       02030001
80031 FORMAT (1H ,10X,39HTHE PROGRAM FM001 EXECUTED CORRECTLY IF)       02040001
80010 FORMAT (1H ,15X,13HTEST 1 PASSED)                                 02050001
80020 FORMAT (1H ,15X,42HTEST 2 FAILED WITH COMPUTED AND CORRECT =2)    02060001
80030 FORMAT (1H ,15X,18HTEST 3 WAS DELETED)                            02070001
80032 FORMAT (1H ,15X,34HTHE RUN SUMMARY TOTALS ALL EQUAL 1)            02080001
90007 FORMAT (1H ,20X,20HEND OF PROGRAM FM001)                          02090001
      END                                                               02100001
