FM014.f Source File


Contents

Source Code


Source Code

      PROGRAM FM014

C                                                                       00010014
C     COMMENT SECTION.                                                  00020014
C                                                                       00030014
C     FM014                                                             00040014
C                                                                       00050014
C             THIS ROUTINE TESTS THE FORTRAN   COMPUTED GO TO STATEMENT.00060014
C     BECAUSE THE FORM OF THE COMPUTED GO TO IS SO STRAIGHTFORWARD, THE 00070014
C     TESTS MAINLY RELATE TO THE RANGE OF POSSIBLE STATEMENT NUMBERS    00080014
C     WHICH ARE USED.                                                   00090014
C                                                                       00100014
C      REFERENCES                                                       00110014
C        AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN,       00120014
C              X3.9-1978                                                00130014
C                                                                       00140014
C        SECTION 11.2, COMPUTED GO TO STATEMENT                         00150014
C                                                                       00160014
C                                                                       00170014
C      **********************************************************       00180014
C                                                                       00190014
C         A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE         00200014
C     BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD  00210014
C     PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00220014
C     FEDERAL COBOL COMPILER TESTING SERVICE.  THE FORTRAN COMPILER     00230014
C     VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00240014
C     DATA, AND AN EXECUTIVE SYSTEM.  EACH AUDIT ROUTINE IS A FORTRAN   00250014
C     PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC  00260014
C     LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00270014
C     OF EXECUTING THESE TESTS.                                         00280014
C                                                                       00290014
C         THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00300014
C     FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978.                 00310014
C                                                                       00320014
C         SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO -             00330014
C                                                                       00340014
C              NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY           00350014
C                   SOFTWARE STANDARDS VALIDATION GROUP                 00360014
C                          BUILDING 225  RM A266                        00370014
C                         GAITHERSBURG, MD  20899                       00380014
C      **********************************************************       00390014
C                                                                       00400014
C                                                                       00410014
C                                                                       00420014
C     INITIALIZATION SECTION                                            00430014
C                                                                       00440014
C     INITIALIZE CONSTANTS                                              00450014
C      **************                                                   00460014
C     I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER.         00470014
      I01 = 5                                                           00480014
C     I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER.             00490014
      I02 = 6                                                           00500014
C     SYSTEM ENVIRONMENT SECTION                                        00510014
C                                                                       00520014
CX010    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00530014
C     THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5      00540014
C     (UNIT NUMBER FOR CARD READER).                                    00550014
CX011    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00560014
C     THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00570014
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE.         00580014
C                                                                       00590014
CX020    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00600014
C     THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6      00610014
C     (UNIT NUMBER FOR PRINTER).                                        00620014
CX021    THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00630014
C     THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL            00640014
C     FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE.         00650014
C                                                                       00660014
      IVPASS=0                                                          00670014
      IVFAIL=0                                                          00680014
      IVDELE=0                                                          00690014
      ICZERO=0                                                          00700014
C                                                                       00710014
C     WRITE PAGE HEADERS                                                00720014
      WRITE (I02,90000)                                                 00730014
      WRITE (I02,90001)                                                 00740014
      WRITE (I02,90002)                                                 00750014
      WRITE (I02, 90002)                                                00760014
      WRITE (I02,90003)                                                 00770014
      WRITE (I02,90002)                                                 00780014
      WRITE (I02,90004)                                                 00790014
      WRITE (I02,90002)                                                 00800014
      WRITE (I02,90011)                                                 00810014
      WRITE (I02,90002)                                                 00820014
      WRITE (I02,90002)                                                 00830014
      WRITE (I02,90005)                                                 00840014
      WRITE (I02,90006)                                                 00850014
      WRITE (I02,90002)                                                 00860014
      IVTNUM = 131                                                      00870014
C                                                                       00880014
C     TEST 131  -  TEST OF THE SIMPLIST FORM OF THE COMPUTED GO TO      00890014
C           STATEMENT WITH THREE POSSIBLE BRANCHES.                     00900014
C                                                                       00910014
C                                                                       00920014
      IF (ICZERO) 31310, 1310, 31310                                    00930014
 1310 CONTINUE                                                          00940014
      ICON01=0                                                          00950014
      I=3                                                               00960014
      GO TO ( 1312, 1313, 1314 ), I                                     00970014
 1312 ICON01 = 1312                                                     00980014
      GO TO 1315                                                        00990014
 1313 ICON01 = 1313                                                     01000014
      GO TO 1315                                                        01010014
 1314 ICON01 = 1314                                                     01020014
 1315 CONTINUE                                                          01030014
      GO TO 41310                                                       01040014
31310 IVDELE = IVDELE + 1                                               01050014
      WRITE (I02,80003) IVTNUM                                          01060014
      IF (ICZERO) 41310, 1321, 41310                                    01070014
41310 IF ( ICON01 - 1314 )  21310, 11310, 21310                         01080014
11310 IVPASS = IVPASS + 1                                               01090014
      WRITE (I02,80001) IVTNUM                                          01100014
      GO TO 1321                                                        01110014
21310 IVFAIL = IVFAIL + 1                                               01120014
      IVCOMP=ICON01                                                     01130014
      IVCORR = 1314                                                     01140014
      WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR                          01150014
 1321 CONTINUE                                                          01160014
      IVTNUM = 132                                                      01170014
C                                                                       01180014
C     TEST 132  -  THIS TESTS THE COMPUTED GO TO IN CONJUNCTION WITH THE01190014
C           THE UNCONDITIONAL GO TO STATEMENT.  THIS TEST IS NOT        01200014
C           INTENDED TO BE AN EXAMPLE OF GOOD STRUCTURED PROGRAMMING.   01210014
C                                                                       01220014
C                                                                       01230014
      IF (ICZERO) 31320, 1320, 31320                                    01240014
 1320 CONTINUE                                                          01250014
      IVON01=0                                                          01260014
      J=1                                                               01270014
      GO TO 1326                                                        01280014
 1322 J = 2                                                             01290014
      IVON01=IVON01+2                                                   01300014
      GO TO 1326                                                        01310014
 1323 J = 3                                                             01320014
      IVON01=IVON01 * 10 + 3                                            01330014
      GO TO 1326                                                        01340014
 1324 J = 4                                                             01350014
      IVON01=IVON01 * 100 + 4                                           01360014
      GO TO 1326                                                        01370014
 1325 IVON01 = IVON01 + 1                                               01380014
      GO TO 1327                                                        01390014
 1326 GO TO ( 1322, 1323, 1324, 1325, 1326 ), J                         01400014
 1327 CONTINUE                                                          01410014
      GO TO 41320                                                       01420014
31320 IVDELE = IVDELE + 1                                               01430014
      WRITE (I02,80003) IVTNUM                                          01440014
      IF (ICZERO) 41320, 1331, 41320                                    01450014
41320 IF ( IVON01 - 2305 )  21320, 11320, 21320                         01460014
11320 IVPASS = IVPASS + 1                                               01470014
      WRITE (I02,80001) IVTNUM                                          01480014
      GO TO 1331                                                        01490014
21320 IVFAIL = IVFAIL + 1                                               01500014
      IVCOMP=IVON01                                                     01510014
      IVCORR=2305                                                       01520014
      WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR                          01530014
 1331 CONTINUE                                                          01540014
      IVTNUM = 133                                                      01550014
C                                                                       01560014
C     TEST 133  -  THIS IS A TEST OF THE COMPUTED GO TO STATEMENT WITH  01570014
C           A SINGLE STATEMENT LABEL AS THE LIST OF POSSIBLE BRANCHES.  01580014
C                                                                       01590014
C                                                                       01600014
      IF (ICZERO) 31330, 1330, 31330                                    01610014
 1330 CONTINUE                                                          01620014
      IVON01=0                                                          01630014
      K=1                                                               01640014
      GO TO ( 1332 ), K                                                 01650014
 1332 IVON01 = 1                                                        01660014
      GO TO 41330                                                       01670014
31330 IVDELE = IVDELE + 1                                               01680014
      WRITE (I02,80003) IVTNUM                                          01690014
      IF (ICZERO) 41330, 1341, 41330                                    01700014
41330 IF ( IVON01 - 1 )  21330, 11330, 21330                            01710014
11330 IVPASS = IVPASS + 1                                               01720014
      WRITE (I02,80001) IVTNUM                                          01730014
      GO TO 1341                                                        01740014
21330 IVFAIL = IVFAIL + 1                                               01750014
      IVCOMP=IVON01                                                     01760014
      IVCORR=1                                                          01770014
      WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR                          01780014
 1341 CONTINUE                                                          01790014
      IVTNUM = 134                                                      01800014
C                                                                       01810014
C     TEST 134  -  THIS IS A TEST OF FIVE (5) DIGIT STATEMENT NUMBERS   01820014
C           WHICH EXCEED THE INTEGER 32767 USED IN THE COMPUTED GO TO   01830014
C           STATEMENT WITH THREE POSSIBLE BRANCHES.                     01840014
C                                                                       01850014
C                                                                       01860014
      IF (ICZERO) 31340, 1340, 31340                                    01870014
 1340 CONTINUE                                                          01880014
      IVON01=0                                                          01890014
      L=2                                                               01900014
      GO TO ( 99991, 99992, 99993 ), L                                  01910014
99991 IVON01=1                                                          01920014
      GO TO 1342                                                        01930014
99992 IVON01=2                                                          01940014
      GO TO 1342                                                        01950014
99993 IVON01=3                                                          01960014
 1342 CONTINUE                                                          01970014
      GO TO 41340                                                       01980014
31340 IVDELE = IVDELE + 1                                               01990014
      WRITE (I02,80003) IVTNUM                                          02000014
      IF (ICZERO) 41340, 1351, 41340                                    02010014
41340 IF ( IVON01 - 2 )  21340, 11340, 21340                            02020014
11340 IVPASS = IVPASS + 1                                               02030014
      WRITE (I02,80001) IVTNUM                                          02040014
      GO TO 1351                                                        02050014
21340 IVFAIL = IVFAIL + 1                                               02060014
      IVCOMP=IVON01                                                     02070014
      IVCORR=2                                                          02080014
      WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR                          02090014
 1351 CONTINUE                                                          02100014
C                                                                       02110014
C     WRITE PAGE FOOTINGS AND RUN SUMMARIES                             02120014
99999 CONTINUE                                                          02130014
      WRITE (I02,90002)                                                 02140014
      WRITE (I02,90006)                                                 02150014
      WRITE (I02,90002)                                                 02160014
      WRITE (I02,90002)                                                 02170014
      WRITE (I02,90007)                                                 02180014
      WRITE (I02,90002)                                                 02190014
      WRITE (I02,90008)  IVFAIL                                         02200014
      WRITE (I02,90009) IVPASS                                          02210014
      WRITE (I02,90010) IVDELE                                          02220014
C                                                                       02230014
C                                                                       02240014
C     TERMINATE ROUTINE EXECUTION                                       02250014
      STOP                                                              02260014
C                                                                       02270014
C     FORMAT STATEMENTS FOR PAGE HEADERS                                02280014
90000 FORMAT ("1")                                                      02290014
90002 FORMAT (" ")                                                      02300014
90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" )            02310014
90003 FORMAT (" ",21X,"VERSION 2.1" )                                   02320014
90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" )        02330014
90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 02340014
90006 FORMAT (" ",5X,"----------------------------------------------" ) 02350014
90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" )                             02360014
C                                                                       02370014
C     FORMAT STATEMENTS FOR RUN SUMMARIES                               02380014
90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" )                        02390014
90009 FORMAT (" ",15X,I5," TESTS PASSED" )                              02400014
90010 FORMAT (" ",15X,I5," TESTS DELETED" )                             02410014
C                                                                       02420014
C     FORMAT STATEMENTS FOR TEST RESULTS                                02430014
80001 FORMAT (" ",4X,I5,7X,"PASS")                                      02440014
80002 FORMAT (" ",4X,I5,7X,"FAIL")                                      02450014
80003 FORMAT (" ",4X,I5,7X,"DELETED")                                   02460014
80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6)                         02470014
80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5)                    02480014
C                                                                       02490014
90007 FORMAT (" ",20X,"END OF PROGRAM FM014" )                          02500014
      END                                                               02510014