blob: 836482e6a5f8c598c055edbfa7b8740c25bf5e12 [file] [log] [blame]
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