FM002.f Source File


Contents

Source Code


Source Code

      PROGRAM FM002

C     COMMENT SECTION                                                   00010002
C                                                                       00020002
C     FM002                                                             00030002
C                                                                       00040002
C         THIS ROUTINE CHECKS THAT COMMENT LINES WHICH HAVE VALID       00050002
C     FORTRAN STATEMENTS DO NOT AFFECT THE EXECUTION OF THE PROGRAM     00060002
C     IN ANY WAY.                                                       00070002
C                                                                       00080002
C      REFERENCES                                                       00090002
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00100002
C              X3.9-1978                                                00110002
C                                                                       00120002
C                   SECTION 3.2.1, COMMENT LINE                         00130002
C                                                                       00140002
C      **********************************************************       00150002
C                                                                       00160002
C         A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE         00170002
C     BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD  00180002
C     PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00190002
C     FEDERAL COBOL COMPILER TESTING SERVICE.  THE FORTRAN COMPILER     00200002
C     VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00210002
C     DATA, AND AN EXECUTIVE SYSTEM.  EACH AUDIT ROUTINE IS A FORTRAN   00220002
C     PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC  00230002
C     LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00240002
C     OF EXECUTING THESE TESTS.                                         00250002
C                                                                       00260002
C         THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00270002
C     FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978.                 00280002
C                                                                       00290002
C         SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO -             00300002
C                                                                       00310002
C              NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY           00320002
C                   SOFTWARE STANDARDS VALIDATION GROUP                 00330002
C                          BUILDING 225  RM A266                        00340002
C                         GAITHERSBURG, MD  20899                       00350002
C      **********************************************************       00360002
C                                                                       00370002
C                                                                       00380002
C                                                                       00390002
C     INITIALIZATION SECTION                                            00400002
C                                                                       00410002
C     INITIALIZE CONSTANTS                                              00420002
C      **************                                                   00430002
C     I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER.         00440002
      I01 = 5                                                           00450002
C     I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER.             00460002
      I02 = 6                                                           00470002
C     SYSTEM ENVIRONMENT SECTION                                        00480002
C                                                                       00490002
CX010    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00500002
C     THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5      00510002
C     (UNIT NUMBER FOR CARD READER).                                    00520002
CX011    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00530002
C     THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00540002
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE.         00550002
C                                                                       00560002
CX020    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00570002
C     THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6      00580002
C     (UNIT NUMBER FOR PRINTER).                                        00590002
CX021    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00600002
C     THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00610002
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE.         00620002
C                                                                       00630002
      IVPASS=0                                                          00640002
      IVFAIL=0                                                          00650002
      IVDELE=0                                                          00660002
      ICZERO=0                                                          00670002
C                                                                       00680002
C     WRITE PAGE HEADERS                                                00690002
      WRITE (I02,90000)                                                 00700002
      WRITE (I02,90001)                                                 00710002
      WRITE (I02,90002)                                                 00720002
      WRITE (I02, 90002)                                                00730002
      WRITE (I02,90003)                                                 00740002
      WRITE (I02,90002)                                                 00750002
      WRITE (I02,90004)                                                 00760002
      WRITE (I02,90002)                                                 00770002
      WRITE (I02,90011)                                                 00780002
      WRITE (I02,90002)                                                 00790002
      WRITE (I02,90002)                                                 00800002
      WRITE (I02,90005)                                                 00810002
      WRITE (I02,90006)                                                 00820002
      WRITE (I02,90002)                                                 00830002
C     TEST SECTION                                                      00840002
C                                                                       00850002
   41 CONTINUE                                                          00860002
      IVTNUM=4                                                          00870002
C                                                                       00880002
C      ****  TEST 004  ****                                             00890002
C     TEST 004  -  BLANK COMMENT LINE                                   00900002
C                                                                       00910002
      IF (ICZERO) 30040,40,30040                                        00920002
   40 CONTINUE                                                          00930002
      IVON01=4                                                          00940002
C                                                                       00950002
      GO TO 40040                                                       00960002
30040 IVDELE=IVDELE+1                                                   00970002
      WRITE (I02,80003) IVTNUM                                          00980002
      IF (ICZERO) 40040, 51, 40040                                      00990002
40040 IF (IVON01 - 4) 20040, 10040, 20040                               01000002
10040 IVPASS=IVPASS+1                                                   01010002
      WRITE (I02,80001) IVTNUM                                          01020002
      GO TO 51                                                          01030002
20040 IVFAIL=IVFAIL+1                                                   01040002
      IVCOMP=IVON01                                                     01050002
      IVCORR=4                                                          01060002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            01070002
   51 CONTINUE                                                          01080002
      IVTNUM=5                                                          01090002
C                                                                       01100002
C      ****  TEST 005  ****                                             01110002
C     TEST 005  - GO TO IN COMMENT LINE                                 01120002
C                                                                       01130002
      IF (ICZERO) 30050, 50, 30050                                      01140002
   50 CONTINUE                                                          01150002
      IVON01 = 3                                                        01160002
C     GO TO 20050                                                       01170002
      IVON01=5                                                          01180002
      GO TO 40050                                                       01190002
30050 IVDELE=IVDELE+1                                                   01200002
      WRITE (I02,80003) IVTNUM                                          01210002
      IF (ICZERO) 40050, 61, 40050                                      01220002
40050 IF (IVON01 - 5) 20050,10050,20050                                 01230002
10050 IVPASS=IVPASS+1                                                   01240002
      WRITE (I02,80001) IVTNUM                                          01250002
      GO TO 61                                                          01260002
20050 IVFAIL=IVFAIL+1                                                   01270002
      IVCOMP=IVON01                                                     01280002
      IVCORR=5                                                          01290002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            01300002
   61 CONTINUE                                                          01310002
      IVTNUM=6                                                          01320002
C                                                                       01330002
C      ****  TEST 006  ****                                             01340002
C     TEST 006 - INTEGER ASSIGNMENT STATEMENT IN COMMENT LINE           01350002
C                                                                       01360002
      IF (ICZERO) 30060,60,30060                                        01370002
   60 CONTINUE                                                          01380002
      IVON01=6                                                          01390002
C     IVON01=1                                                          01400002
      GO TO 40060                                                       01410002
30060 IVDELE=IVDELE+1                                                   01420002
      WRITE (I02,80003) IVTNUM                                          01430002
      IF (ICZERO) 40060,71,40060                                        01440002
40060 IF (IVON01-6) 20060,10060,20060                                   01450002
10060 IVPASS=IVPASS+1                                                   01460002
      WRITE (I02,80001) IVTNUM                                          01470002
      GO TO 71                                                          01480002
20060 IVFAIL=IVFAIL+1                                                   01490002
      IVCOMP=IVON01                                                     01500002
      IVCORR=6                                                          01510002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            01520002
   71 CONTINUE                                                          01530002
      IVTNUM=7                                                          01540002
C                                                                       01550002
C      ****  TEST  007  ****                                            01560002
C     TEST 007 - INTEGER ASSIGNMENT STATEMENT IN COMMENT LINE           01570002
C                INTEGER EXPRESSION TO RIGHT OF =                       01580002
C                                                                       01590002
      IF (ICZERO) 30070,70,30070                                        01600002
   70 CONTINUE                                                          01610002
      IVON02=6                                                          01620002
      IVON01=7                                                          01630002
C     IVON01= 3*IVON02                                                  01640002
      GO TO 40070                                                       01650002
30070 IVDELE=IVDELE+1                                                   01660002
      WRITE (I02,80003) IVTNUM                                          01670002
      IF (ICZERO) 40070,81,40070                                        01680002
40070 IF (IVON01-7) 20070,10070,20070                                   01690002
10070 IVPASS=IVPASS+1                                                   01700002
      WRITE (I02,80001) IVTNUM                                          01710002
      GO TO 81                                                          01720002
20070 IVFAIL=IVFAIL+1                                                   01730002
      IVCOMP=IVON01                                                     01740002
      IVCORR=7                                                          01750002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            01760002
   81 CONTINUE                                                          01770002
      IVTNUM=8                                                          01780002
C                                                                       01790002
C      ****  TEST 008  ****                                             01800002
C     TEST 008 - IF STATEMENT IN COMMENT LINE                           01810002
C                                                                       01820002
      IF (ICZERO) 30080,80,30080                                        01830002
   80 CONTINUE                                                          01840002
      IVON01=300                                                        01850002
C     IF (IVON01) 20080,20080,20080                                     01860002
      IVON01=8                                                          01870002
      GO TO 40080                                                       01880002
30080 IVDELE=IVDELE+1                                                   01890002
      WRITE (I02,80003) IVTNUM                                          01900002
      IF (ICZERO) 40080,91,40080                                        01910002
40080 IF (IVON01-8) 20080,10080,20080                                   01920002
10080 IVPASS=IVPASS+1                                                   01930002
      WRITE (I02,80001) IVTNUM                                          01940002
      GO TO 91                                                          01950002
20080 IVFAIL=IVFAIL+1                                                   01960002
      IVCOMP=IVON01                                                     01970002
      IVCORR=8                                                          01980002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            01990002
   91 CONTINUE                                                          02000002
      IVTNUM=9                                                          02010002
C                                                                       02020002
C      ****  TEST 009  ****                                             02030002
C     TEST 009 - WRITE STATEMENT IN A COMMENT LINE                      02040002
C                                                                       02050002
      IF (ICZERO) 30090,90,30090                                        02060002
   90 CONTINUE                                                          02070002
      IVON01=200                                                        02080002
C  92 WRITE (I02,80002)  IVTNUM                                         02090002
      IVON01=9                                                          02100002
      GO TO 40090                                                       02110002
30090 IVDELE=IVDELE+1                                                   02120002
      WRITE (I02,80003) IVTNUM                                          02130002
      IF (ICZERO) 40090,101,40090                                       02140002
40090 IF (IVON01-9) 20090,10090,20090                                   02150002
10090 IVPASS=IVPASS+1                                                   02160002
      WRITE (I02,80001) IVTNUM                                          02170002
      GO TO 101                                                         02180002
20090 IVFAIL=IVFAIL+1                                                   02190002
      IVCOMP=IVON01                                                     02200002
      IVCORR=9                                                          02210002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            02220002
  101 IVTNUM=10                                                         02230002
C                                                                       02240002
C      ****  TEST 010  ****                                             02250002
C     TEST 010 - STATEMENT LABEL IN COMMENT LINE                        02260002
C                                                                       02270002
      IF (ICZERO) 30100,100,30100                                       02280002
  100 CONTINUE                                                          02290002
      GO TO 102                                                         02300002
C 102 WRITE (I02,80002)                                                 02310002
C     GO TO 111                                                         02320002
  102 IVON01=10                                                         02330002
      GO TO 40100                                                       02340002
30100 IVDELE=IVDELE+1                                                   02350002
      WRITE (I02,80003) IVTNUM                                          02360002
      IF (ICZERO) 40100,111,40100                                       02370002
40100 IF (IVON01-10) 20100,10100,20100                                  02380002
10100 IVPASS=IVPASS+1                                                   02390002
      WRITE (I02,80001) IVTNUM                                          02400002
      GO TO 111                                                         02410002
20100 IVFAIL=IVFAIL+1                                                   02420002
      IVCOMP=IVON01                                                     02430002
      IVCORR=10                                                         02440002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            02450002
  111 CONTINUE                                                          02460002
      IVTNUM=11                                                         02470002
C                                                                       02480002
C      ****  TEST 011  ****                                             02490002
C     TEST 011 - CONTINUE IN COMMENT LINE                               02500002
C                FOLLOWED BY INTEGER ASSIGNMENT STATEMENT IN COMMENT    02510002
C                                                                       02520002
      IF (ICZERO) 30110,110,30110                                       02530002
  110 IVON01=11                                                         02540002
C     CONTINUE                                                          02550002
C     IVON01=7000                                                       02560002
      GO TO 40110                                                       02570002
30110 IVDELE=IVDELE+1                                                   02580002
      WRITE (I02,80003) IVTNUM                                          02590002
      IF (ICZERO) 40110,121,40110                                       02600002
40110 IF (IVON01 -11) 20110,10110,20110                                 02610002
10110 IVPASS=IVPASS+1                                                   02620002
      WRITE (I02,80001) IVTNUM                                          02630002
      GO TO 121                                                         02640002
20110 IVFAIL=IVFAIL+1                                                   02650002
      IVCOMP=IVON01                                                     02660002
      IVCORR=11                                                         02670002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            02680002
  121 CONTINUE                                                          02690002
      IVTNUM=12                                                         02700002
C                                                                       02710002
C      ****  TEST 012  ****                                             02720002
C     TEST 012 - INTEGER ASSIGNMENT STATEMENT IN COMMENT LINE           02730002
C                                                                       02740002
      IF (ICZERO) 30120,120,30120                                       02750002
  120 CONTINUE                                                          02760002
      IVON01=12                                                         02770002
C     IVON01=IVON01+1                                                   02780002
      GO TO 40120                                                       02790002
30120 IVDELE=IVDELE+1                                                   02800002
      WRITE (I02,80003) IVTNUM                                          02810002
      IF (ICZERO) 40120,99999,40120                                     02820002
40120 IF (IVON01 - 12) 20120,10120,20120                                02830002
10120 IVPASS=IVPASS+1                                                   02840002
      WRITE (I02,80001) IVTNUM                                          02850002
      GO TO 99999                                                       02860002
20120 IVFAIL=IVFAIL+1                                                   02870002
      IVCOMP=IVON01                                                     02880002
      IVCORR=12                                                         02890002
      WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR                            02900002
C                                                                       02910002
C     WRITE PAGE FOOTINGS AND RUN SUMMARIES                             02920002
99999 CONTINUE                                                          02930002
      WRITE (I02,90002)                                                 02940002
      WRITE (I02,90006)                                                 02950002
      WRITE (I02,90002)                                                 02960002
      WRITE (I02,90002)                                                 02970002
      WRITE (I02,90007)                                                 02980002
      WRITE (I02,90002)                                                 02990002
      WRITE (I02,90008)  IVFAIL                                         03000002
      WRITE (I02,90009) IVPASS                                          03010002
      WRITE (I02,90010) IVDELE                                          03020002
C                                                                       03030002
C                                                                       03040002
C     TERMINATE ROUTINE EXECUTION                                       03050002
      STOP                                                              03060002
C                                                                       03070002
C     FORMAT STATEMENTS FOR PAGE HEADERS                                03080002
90000 FORMAT ("1")                                                      03090002
90002 FORMAT (" ")                                                      03100002
90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" )            03110002
90003 FORMAT (" ",21X,"VERSION 2.1" )                                   03120002
90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" )        03130002
90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 03140002
90006 FORMAT (" ",5X,"----------------------------------------------" ) 03150002
90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" )                             03160002
C                                                                       03170002
C     FORMAT STATEMENTS FOR RUN SUMMARIES                               03180002
90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" )                        03190002
90009 FORMAT (" ",15X,I5," TESTS PASSED" )                              03200002
90010 FORMAT (" ",15X,I5," TESTS DELETED" )                             03210002
C                                                                       03220002
C     FORMAT STATEMENTS FOR TEST RESULTS                                03230002
80001 FORMAT (" ",4X,I5,7X,"PASS")                                      03240002
80002 FORMAT (" ",4X,I5,7X,"FAIL")                                      03250002
80003 FORMAT (" ",4X,I5,7X,"DELETED")                                   03260002
80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6)                         03270002
80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5)                    03280002
C                                                                       03290002
90007 FORMAT (" ",20X,"END OF PROGRAM FM002" )                          03300002
C     COMMENT LINE BEFORE END STATEMENT                                 03310002
      END                                                               03320002