PROGRAM FM090 C COMMENT SECTION. 00010010 C WV: VARIANT of FM010, removed spaces to make it sane 00020010 C FM090 00030010 C 00040010 C THIS ROUTINE TESTS REFERENCE FORMAT OF FORTRAN STATEMENTS 00050010 C AND STATEMENT NUMBERS. THE USE OF THE BLANK CHARACTER IS TESTED 00060010 C BOTH WITHIN THE STATEMENT NUMBER FIELD AND WITHIN THE FORTRAN 00070010 C STATEMENTS THEMSELVES. LEADING ZERO IS TESTED FOR STATEMENTS AND 00080010 C INTEGER CONSTANTS. VARIABLE NAMES WHICH LOOK VERY MUCH LIKE 00090010 C FORTRAN RESERVED WORDS ARE TESTED IN ARITHMETIC ASSIGNMENT 00100010 C STATEMENTS. NAMING CONVENTIONS USED THROUGHOUT THE FCVS ARE 00110010 C TESTED ALSO IN ARITHMETIC ASSIGNMENT STATEMENTS. 00120010 C 00130010 C REFERENCES 00140010 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00150010 C X3.9-1978 00160010 C 00170010 C SECTION 2.5, VARIABLES 00180010 C SECTION 3.1.6, BLANK CHARACTER 00190010 C SECTION 3.2.2, INITIAL LINES 00200010 C SECTION 3.4, STATEMENT LABELS 00210010 C 00220010 C 00230010 C ********************************************************** 00240010 C 00250010 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00260010 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00270010 C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00280010 C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00290010 C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00300010 C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00310010 C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00320010 C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00330010 C OF EXECUTING THESE TESTS. 00340010 C 00350010 C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00360010 C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00370010 C 00380010 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00390010 C 00400010 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00410010 C SOFTWARE STANDARDS VALIDATION GROUP 00420010 C BUILDING 225 RM A266 00430010 C GAITHERSBURG, MD 20899 00440010 C ********************************************************** 00450010 C 00460010 C 00470010 C 00480010 C INITIALIZATION SECTION 00490010 C 00500010 C INITIALIZE CONSTANTS 00510010 C ************** 00520010 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00530010 I01 = 5 00540010 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00550010 I02 = 6 00560010 C SYSTEM ENVIRONMENT SECTION 00570010 C 00580010 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00590010 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00600010 C (UNIT NUMBER FOR CARD READER). 00610010 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00620010 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00630010 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00640010 C 00650010 CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00660010 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00670010 C (UNIT NUMBER FOR PRINTER). 00680010 CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00690010 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00700010 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00710010 C 00720010 IVPASS=0 00730010 IVFAIL=0 00740010 IVDELE=0 00750010 ICZERO=0 00760010 C 00770010 C WRITE PAGE HEADERS 00780010 WRITE (I02,90000) 00790010 WRITE (I02,90001) 00800010 WRITE (I02,90002) 00810010 WRITE (I02, 90002) 00820010 WRITE (I02,90003) 00830010 WRITE (I02,90002) 00840010 WRITE (I02,90004) 00850010 WRITE (I02,90002) 00860010 WRITE (I02,90011) 00870010 WRITE (I02,90002) 00880010 WRITE (I02,90002) 00890010 WRITE (I02,90005) 00900010 WRITE (I02,90006) 00910010 WRITE (I02,90002) 00920010 1001 CONTINUE 00930010 IVTNUM = 100 00940010 C 00950010 C **** TEST 100 **** 00960010 C 00970010 C TEST 100 - TO CHECK THE VARIOUS COMBINATIONS OF FORMING VARIABLE00980010 C NAMES. THESE ARE ACTUALLY SYMBOLIC NAMES (ANSI X3.9-1978 00990010 C SECTION 2.2). THIS IS BASICALLY A SYNTAX CHECK USING A 01000010 C COMBINATION OF FROM ONE TO SIX ALPHANUMERIC CHARACTERS WITH 01010010 C THE FIRST CHARACTER ALWAYS ALPHABETIC. REFERENCE FORMAT IS 01020010 C ALSO CHECKED BY HAVING EACH ASSIGNMENT STATEMENT AN INITIAL 01030010 C LINE (SECTION 3.2.2). THIS MEANS ZERO MAY APPEAR IN COLUMN 01040010 C SIX WITHOUT EFFECT, THAT LINES MAY BEGIN ANYWHERE FROM 01050010 C COLUMN SEVEN TO COLUMN 72, AND BLANKS MAY BE USED FREELY 01060010 C WITHOUT MEANING (3.1.6 BLANK CHARACTERS). 01070010 C 01080010 IF (ICZERO) 31000, 1000, 31000 01090010 1000 CONTINUE 01100010 A=1. 01110010 B =2. 01120010 C =3. 01130010 D =4. 01140010 E =5. 01150010 F =6. 01160010 0G = 7. 01170010 H=8. 01180010 I=901190010 J = 10 01200010 K = 11 01210010 L = 1201220010 0M=13 01230010 N=14 01240010 O=15. 01250010 P=16. 01260010 Q=17. 01270010 R=18. 01280010 S=19. 01290010 T=20. 01300010 U=21. 01310010 V=22. 01320010 W=23. 01330010 X=24. 01340010 Y=25. 01350010 Z=26. 01360010 AAAAAA=27. 01370010 BBBBB=28. 01380010 CCCC=29. 01390010 DDD=30 01400010 EE=31. 01410010 F0=32. 01420010 G12=33. 01430010 H345 = 34. 01440010 I6789 = 35 01450010 J01234 = 36 01460010 K56789=37 01470010 L2L2L2 =38 01480010 M3M3M3 = 39 01490010 N40 = 40 01500010 0 OMY = 41. 01510010 IPMH = 42 01520010 GOTO1 = 43. 01530010 IF3 = 44 01540010 DO3 = 53. 01550010 CALLFL =62. 01560010 TYPEI = 63. 01570010 TRUE =71. 01580010 FALSE = 72. 01590010 GO TO 41000 01600010 31000 IVDELE = IVDELE + 1 01610010 WRITE (I02,80003) IVTNUM 01620010 IF (ICZERO) 41000, 1011, 41000 01630010 41000 IF (IPMH - 42) 21000,11000,21000 01640010 11000 IVPASS = IVPASS + 1 01650010 WRITE (I02,80001) IVTNUM 01660010 GO TO 1011 01670010 21000 IVFAIL = IVFAIL + 1 01680010 IVCOMP = IPMH 01690010 IVCORR = 42 01700010 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01710010 1011 CONTINUE 01720010 IVTNUM = 101 01730010 C 01740010 C **** TEST 101 **** 01750010 C TEST 101 - CHECKS THE FCVS NAMING CONVENTIONS FOR INTEGER AND 01760010 C REAL VARIABLES IN ASSIGNMENT STATEMENTS: VARIABLE = CONSTANT01770010 C BASICALLY A SYNTAX CHECK ON SIX CHARACTER VARIABLE NAMES. 01780010 C 01790010 IF (ICZERO) 31010, 1010, 31010 01800010 1010 CONTINUE 01810010 IACE11 = 1 01820010 IACE21 = 2 01830010 IACE31 = 3 01840010 IACN11 = 4 01850010 IADN11 = 5 01860010 IATE31 = 6 01870010 RACE11 = 7. 01880010 RACE21 = 8. 01890010 RACN31 = 9. 01900010 RADE31 = 10. 01910010 IVTE69 = 11 01920010 IVON78 = 12 01930010 RVTNAZ = 13. 01940010 RVOEZ9 = 14. 01950010 ICTE96 = 15 01960010 ICON84 = 16 01970010 RCON48 = 17. 01980010 RCTE54 = 18. 01990010 IDONY4 = 19 02000010 IDOEB6 = 20 02010010 RDON46 = 21. 02020010 IFONS3 = 22 02030010 RFON77 = 23. 02040010 GO TO 41010 02050010 31010 IVDELE = IVDELE + 1 02060010 WRITE (I02,80003) IVTNUM 02070010 IF (ICZERO) 41010, 1021, 41010 02080010 41010 IF (IVTE69 - 11) 21010,11010,21010 02090010 11010 IVPASS = IVPASS + 1 02100010 WRITE (I02,80001) IVTNUM 02110010 GO TO 1021 02120010 21010 IVFAIL = IVFAIL + 1 02130010 IVCOMP = IVTE69 02140010 IVCORR = 11 02150010 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02160010 1021 CONTINUE 02170010 IVTNUM = 102 02180010 C 02190010 C **** TEST 102 **** 02200010 C TEST 102 - REFERENCE FORMAT CHECK ON STATEMENT LABELS (SECTION 02210010 C 3.4). THESE ARE NON-ZERO INTEGERS, FROM 1 TO 5 DIGITS, 02220010 C MAY BEGIN ANYWHERE FROM COLS. 1 TO 5, AND LEADING ZEROS ARE 02230010 C NOT SIGNIFICANT. BLANKS WILL BE IMBEDDED IN SOME OF THE 02240010 C STATEMENT LABELS AND THESE SHOULD HAVE NO EFFECT. THE 02250010 C CONTINUE STATEMENT (SECTION 11.11) IS USED FOR THIS TEST. 02260010 C A BASIC FCVS ASSUMPTION IS THAT THE LOGIC WILL FALL THRU A 02270010 C SERIES OF CONTINUE STATEMENTS (NORMAL EXECUTION SEQUENCE). 02280010 C 02290010 IF (ICZERO) 31020, 1020, 31020 02300010 1020 CONTINUE 02310010 1 CONTINUE 02320010 2 CONTINUE 02330010 3 CONTINUE 02340010 4 CONTINUE 02350010 5 CONTINUE 02360010 06 CONTINUE 02370010 007 CONTINUE 02380010 0008 CONTINUE 02390010 00009 CONTINUE 02400010 010 CONTINUE 02410010 11 CONTINUE 02420010 012 CONTINUE 02430010 013 CONTINUE 02440010 0014 CONTINUE 02450010 015 CONTINUE 02460010 0016 CONTINUE 02470010 100 CONTINUE 02480010 101 CONTINUE 02490010 102 IVON01 = 1 02500010 103 CONTINUE 02510010 104 CONTINUE 02520010 0105 CONTINUE 02530010 0106 CONTINUE 02540010 0107 CONTINUE 02550010 00108 CONTINUE 02560010 111 CONTINUE 02570010 1111 CONTINUE 02580010 99 CONTINUE 02590010 999 CONTINUE 02600010 9999 CONTINUE 02610010 GO TO 41020 02620010 31020 IVDELE = IVDELE + 1 02630010 WRITE (I02,80003) IVTNUM 02640010 IF (ICZERO) 41020, 1031, 41020 02650010 41020 IF (IVON01 - 1) 21020,11020,21020 02660010 11020 IVPASS = IVPASS + 1 02670010 WRITE (I02,80001) IVTNUM 02680010 GO TO 1031 02690010 21020 IVFAIL = IVFAIL + 1 02700010 IVCOMP = IVON01 02710010 IVCORR = 1 02720010 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02730010 1031 CONTINUE 02740010 C 02750010 C WRITE PAGE FOOTINGS AND RUN SUMMARIES 02760010 99999 CONTINUE 02770010 WRITE (I02,90002) 02780010 WRITE (I02,90006) 02790010 WRITE (I02,90002) 02800010 WRITE (I02,90002) 02810010 WRITE (I02,90007) 02820010 WRITE (I02,90002) 02830010 WRITE (I02,90008) IVFAIL 02840010 WRITE (I02,90009) IVPASS 02850010 WRITE (I02,90010) IVDELE 02860010 C 02870010 C 02880010 C TERMINATE ROUTINE EXECUTION 02890010 STOP 02900010 C 02910010 C FORMAT STATEMENTS FOR PAGE HEADERS 02920010 90000 FORMAT ("1") 02930010 90002 FORMAT (" ") 02940010 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 02950010 90003 FORMAT (" ",21X,"VERSION 2.1" ) 02960010 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 02970010 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 02980010 90006 FORMAT (" ",5X,"----------------------------------------------" ) 02990010 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 03000010 C 03010010 C FORMAT STATEMENTS FOR RUN SUMMARIES 03020010 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 03030010 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 03040010 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 03050010 C 03060010 C FORMAT STATEMENTS FOR TEST RESULTS 03070010 80001 FORMAT (" ",4X,I5,7X,"PASS") 03080010 80002 FORMAT (" ",4X,I5,7X,"FAIL") 03090010 80003 FORMAT (" ",4X,I5,7X,"DELETED") 03100010 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 03110010 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 03120010 C 03130010 90007 FORMAT (" ",20X,"END OF PROGRAM FM090" ) 03140010 END 03150010