C COMMENT SECTION. C C FM105 C C FM105 TESTS REPEATED ( ) FORMAT FIELDS AND IS TAPE AND PRINTER C ORIENTED. THE ROUTINE CAN ALSO BE USED FOR DISK. BOTH THE READ C AND WRITE STATEMENTS ARE TESTED. VARIABLES IN THE INPUT AND C OUTPUT LISTS ARE INTEGER VARIABLE AND INTEGER ARRAY ELEMENT OR C ARRAY NAME REFERENCES. ALL READ AND WRITE STATEMENTS ARE DONE C WITH FORMAT STATEMENTS. THE ROUTINE HAS AN OPTIONAL SECTION OF C CODE TO DUMP THE FILE AFTER IT HAS BEEN WRITTEN. DO LOOPS AND C DO-IMPLIED LISTS ARE USED IN CONJUNCTION WITH A ONE DIMENSIONAL C INTEGER ARRAY FOR THE DUMP SECTION. C C ROUTINE FM105 IS EXACTLY LIKE ROUTINE FM104 EXCEPT THAT C FORMAT NUMBERS 77751 AND 77752 HAVE BEEN CHANGED TO USE THREE (3) C REPEATED FIELDS, I.E. ... 3(/ ... ) THIS SHOULD STILL C MAKE THE ROUTINE WRITE AND THEN READ FOUR (4) 80 CHARACTER C RECORDS FOR EACH SINGLE WRITE OR READ STATEMENT. OTHER FORMAT C CONVERSIONS USED ARE THE X AND I FORMAT FIELDS. BECAUSE OF THE C NUMBER OF CHARACTERS TO BE WRITTEN OR READ IN EACH SET OF FOUR C RECORDS, THE ENTIRE REPEATED FIELD IS USED. C C THIS ROUTINE WRITES A SINGLE SEQUENTIAL FILE WHICH IS C REWOUND AND READ SEQUENTIALLY FORWARD. EVERY RECORD IS READ AND C CHECKED DURING THE READ TEST SECTION FOR VALUES OF DATA ITEMS C AND THE END OF FILE ON THE LAST RECORD IS ALSO CHECKED. C C THE LINE CONTINUATION IN COLUMN 6 IS USED IN READ, WRITE, C AND FORMAT STATEMENTS. FOR BOTH SYNTAX AND SEMANTIC TESTS, ALL C STATEMENTS SHOULD BE CHECKED VISUALLY FOR THE PROPER FUNCTIONING C OF THE CONTINUATION LINE. C C REFERENCES C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, C X3.9-1978 C C SECTION 8, SPECIFICATION STATEMENTS C SECTION 9, DATA STATEMENT C SECTION 11.10, DO STATEMENT C SECTION 12, INPUT/OUTPUT STATEMENTS C SECTION 12.8.2, INPUT/OUTPUT LIST C SECTION 12.9.5.2, FORMATTED DATA TRANSFER C SECTION 13, FORMAT STATEMENT C SECTION 13.2.1, EDIT DESCRIPTORS C SECTION 13.5.9.1, INTEGER EDITING C C DIMENSION IPREM(7), IADN11(57) DIMENSION IDUMP(136) CHARACTER*1 NINE,IZERO,IDUMP DATA NINE/'9'/, IZERO/'0'/ C 77701 FORMAT ( 80A1 ) 77702 FORMAT (10X,19HPREMATURE EOF ONLY ,I3,13H RECORDS LUN ,I2,8H OUT O 1F ,I3,8H RECORDS) 77703 FORMAT (10X,12HFILE ON LUN ,I2,7H OK... ,I3,8H RECORDS) 77704 FORMAT (10X,12HFILE ON LUN ,I2,20H TOO LONG MORE THAN ,I3,8H RECOR 1DS) 77705 FORMAT ( 1X,80A1) 77706 FORMAT (10X,43HFILE I08 CREATED WITH 28 SEQUENTIAL RECORDS) 77751 FORMAT ( I3,2(I2),3(I3),I4,57(I1),I3,3(/I3,2(I2),3(I3),I4,57(I1),I 13) ) 77752 FORMAT ( 7(1X),I3,6(1X),I4,I1,56(1X),I3,3(/7(1X),I3,67(1X),I3) ) C C C ********************************************************** C C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT C OF EXECUTING THESE TESTS. C C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. C C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - C C DEPARTMENT OF THE NAVY C FEDERAL COBOL COMPILER TESTING SERVICE C WASHINGTON, D.C. 20376 C C ********************************************************** C C C C INITIALIZATION SECTION C C INITIALIZE CONSTANTS C ************** C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. I01 = 5 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. I02 = 6 C SYSTEM ENVIRONMENT SECTION C CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 C (UNIT NUMBER FOR CARD READER). CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. C CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 C (UNIT NUMBER FOR PRINTER). CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. C IVPASS=0 IVFAIL=0 IVDELE=0 ICZERO=0 C C WRITE PAGE HEADERS WRITE (I02,90000) WRITE (I02,90001) WRITE (I02,90002) WRITE (I02, 90002) WRITE (I02,90003) WRITE (I02,90002) WRITE (I02,90004) WRITE (I02,90002) WRITE (I02,90011) WRITE (I02,90002) WRITE (I02,90002) WRITE (I02,90005) WRITE (I02,90006) WRITE (I02,90002) C C DEFAULT ASSIGNMENT FOR FILE 06 IS I08 = 7 I08 = 7 CX080 THIS CARD IS REPLACED BY THE CONTENTS OF CARD X-080 CX081 THIS CARD IS REPLACED BY THE CONTENTS OF CARD X-081 C C WRITE SECTION.... C C THIS SECTION OF CODE BUILDS A UNIT RECORD FILE ON LUN I08 THAT IS C 80 CHARACTERS PER RECORD, 28 RECORDS LONG, AND CONSISTS OF ONLY C INTEGERS ( I FORMAT ). THIS IS THE ONLY FILE TESTED IN THE C ROUTINE FM105 AND FOR PURPOSES OF IDENTIFICATION IS FILE 06. C SINCE THIS ROUTINE IS A TEST OF / IN A FORMAT STATEMENT, FOUR (4) C RECORDS ARE ACTUALLY WRITTEN WITH ONE WRITE STATEMENT. ALL FOUR C OF THESE RECORDS WILL HAVE THE SAME RECORD NUMBER IN THE 20 C CHARACTER PREAMBLE. THE INTEGER STORED IN CHARACTER POSITIONS C 78 - 80 WILL EQUAL THE RECORD NUMBER PLUS 0, 1, 2, AND 3 FOR C THE FOUR RECORD SET RESPECTIVELY.. THE INTEGER ARRAY ELEMENTS C IN CHARACTER POSITIONS 21-77 WILL CONTAIN THE INTEGER DIGIT 9. IPROG = 105 IFILE = 06 ILUN = I08 ITOTR = 28 IRLGN = 80 IEOF = 0000 C SET THE RECORD PREAMBLE VALUES EXCEPT FOR RECORD NUMBER AND EOF.. IPREM(1) = IPROG IPREM(2) = IFILE IPREM(3) = ILUN IPREM(5) = ITOTR IPREM(6) = IRLGN C SET THE INTEGER ARRAY ELEMENTS TO THE INTEGER DIGIT 9 DO 10 I = 1, 57 IADN11(I) = 9 10 CONTINUE DO 952 IRNUM = 1, 7 IF ( IRNUM .EQ. 7 ) IEOF = 9999 IPREM(4) = IRNUM IPREM(7) = IEOF IVON02 = IRNUM IVON03 = IRNUM + 1 IVON04 = IRNUM + 2 IVON05 = IRNUM + 3 WRITE ( I08, 77751 ) IPROG,IFILE,ILUN,IRNUM,ITOTR,IRLGN,IEOF,IADN1 11,IVON02,IPREM,IADN11,IVON03,IPREM,IADN11,IVON04,IPREM,IADN11,IVON 205 952 CONTINUE WRITE (I02,77706) C C REWIND SECTION C REWIND I08 C C READ SECTION.... C IVTNUM = 95 C C **** TEST 95 THRU TEST 101 **** C TEST 95 THRU 101 - THESE TESTS CHECK EVERY ONE OF THE 28 RECORDS C CREATED AS FILE I08 FOR THE RECORD NUMBER, CONSTANT DATA ITEMS, C AND THE END OF FILE INDICATOR. C DO 962 IRNUM = 1, 7 IVON01 = 0 C THE INTEGER VARIABLE IS INITIALIZED TO ZERO FOR EACH TEST 95 - 101 READ ( I08, 77752 ) IRN01,IEND,IVON06,IVON07,IRN02,IVON08,IRN03, 1IVON09,IRN04,IVON10 C READ THE FILE I08 - NOTE, FOUR RECORDS ARE READ IN EACH SINGLE C READ STATEMENT AND THE FORMAT IS DIFFERENT THAN THE ONE USED TO C CREATE THE FILE. C C CHECK THE DATA ITEM VALUES .... IF ( IRN01 .EQ. IRNUM ) IVON01 = IVON01 + 1 C IRN01 SHOULD EQUAL THE RECORD NUMBER FOR THE SET OF FOUR RECORDS C RECORD NUMBERS GO FROM 1 TO 7 .... IF ( IVON06 .EQ. 9 ) IVON01 = IVON01 + 1 C IVON06 IS THE INTEGER ARRAY ELEMENT WHICH SHOULD BE ALWAYS EQUAL C TO THE INTEGER CONSTANT 9 .... IF ( IVON07 .EQ. IRNUM ) IVON01 = IVON01 + 1 C IVON07 SHOULD ALWAYS EQUAL THE RECORD NUMBER OF THE FIRST RECORD C IN THE SET OF FOUR RECORDS .... IF ( IRN02 .EQ. IRNUM ) IVON01 = IVON01 + 1 C THIS VALUE REMAINS CONSTANT FOR ALL FOUR RECORDS IN THE SET OF 4.. IF ( IVON08 .EQ. IRNUM + 1 ) IVON01 = IVON01 + 1 C IVON08 IS THE 80TH CHARACTER IN THE SECOND RECORD OF THE SET OF 4. IF ( IRN03 .EQ. IRNUM ) IVON01 = IVON01 + 1 C AGAIN THIS VALUE IS CONSTANT FOR THE SET OF FOUR RECORDS.... IF ( IVON09 .EQ. IRNUM + 2 ) IVON01 = IVON01 + 1 C IVON09 IS THE 80TH CHARACTER IN THE THIRD RECORD OF THE SET OF 4. IF ( IRN04 .EQ. IRNUM ) IVON01 = IVON01 + 1 C STILL EQUALS THE RECORD NUMBER FOR THE SET OF FOUR RECORDS. IF ( IVON10 .EQ. IRNUM + 3 ) IVON01 = IVON01 + 1 C IVON10 IS THE 80TH CHARACTER IN THE FOURTH RECORD OF THE SET OF 4. IF ( IVON01 - 9 ) 20960, 10960, 20960 C WHEN IVON01 = 9 THEN ALL NINE OF THE DATA ITEMS CHECKED ARE OK... 10960 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 971 20960 IVFAIL = IVFAIL + 1 IVCOMP = IVON01 IVCORR = 9 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 971 CONTINUE IVTNUM = IVTNUM + 1 C INCREMENT THE TEST NUMBER.... 962 CONTINUE IF ( ICZERO ) 30960, 1021, 30960 30960 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM 1021 CONTINUE IVTNUM = 102 C C **** TEST 102 **** C TEST 102 - THIS TEST CHECKS THE END OF FILE INDICATOR ON THE LAST C SET OF 4 RECORDS ( 25,26,27,AND 28 ). C THE VARIABLE IEND IS ACTUALLY IN THE RECORD NUMBERED 25. C IF (ICZERO) 31020, 1020, 31020 1020 CONTINUE IVCOMP = IEND GO TO 41020 31020 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 41020, 1031, 41020 41020 IF ( IVCOMP - 9999 ) 21020, 11020, 21020 11020 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 1031 21020 IVFAIL = IVFAIL + 1 IVCORR = 9999 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 1031 CONTINUE C THIS CODE IS OPTIONALLY COMPILED AND IS USED TO DUMP THE FILE 06 C TO THE LINE PRINTER. CDB** C ILUN = I08 C ITOTR = 28 C IRLGN = 80 C7777 REWIND ILUN C DO 7778 IRNUM = 1, ITOTR C READ (ILUN,77701) (IDUMP(ICHAR), ICHAR = 1, IRLGN) C WRITE ( I02,77705) (IDUMP(ICHAR), ICHAR = 1, IRLGN) C IF ( IDUMP(20) .EQ. NINE .AND. IDUMP(80) .EQ. IZERO ) GO TO 7779 C7778 CONTINUE C GO TO 7782 C7779 IF ( IRNUM - ITOTR ) 7780, 7781, 7782 C7780 WRITE (I02,77702) IRNUM,ILUN,ITOTR C GO TO 7784 C7781 WRITE (I02,77703) ILUN,ITOTR C GO TO 7784 C7782 WRITE (I02,77704) ILUN, ITOTR C DO 7783 I = 1, 5 C READ (ILUN,77701) (IDUMP(ICHAR), ICHAR = 1, IRLGN) C WRITE ( I02,77705) (IDUMP(ICHAR), ICHAR = 1, IRLGN) C IF ( IDUMP(20) .EQ. NINE ) GO TO 7784 C7783 CONTINUE C7784 GO TO 99999 CDE** C WRITE PAGE FOOTINGS AND RUN SUMMARIES 99999 CONTINUE WRITE (I02,90002) WRITE (I02,90006) WRITE (I02,90002) WRITE (I02,90002) WRITE (I02,90007) WRITE (I02,90002) WRITE (I02,90008) IVFAIL WRITE (I02,90009) IVPASS WRITE (I02,90010) IVDELE C C C TERMINATE ROUTINE EXECUTION STOP C C FORMAT STATEMENTS FOR PAGE HEADERS 90000 FORMAT (1H1) 90002 FORMAT (1H ) 90001 FORMAT (1H ,10X,34HFORTRAN COMPILER VALIDATION SYSTEM) 90003 FORMAT (1H ,21X,11HVERSION 1.0) 90004 FORMAT (1H ,10X,38HFOR OFFICIAL USE ONLY - COPYRIGHT 1978) 90005 FORMAT (1H ,5X,4HTEST,5X,9HPASS/FAIL, 5X,8HCOMPUTED,8X,7HCORRECT) 90006 FORMAT (1H ,5X,46H----------------------------------------------) 90011 FORMAT (1H ,18X,17HSUBSET LEVEL TEST) C C FORMAT STATEMENTS FOR RUN SUMMARIES 90008 FORMAT (1H ,15X,I5,19H ERRORS ENCOUNTERED) 90009 FORMAT (1H ,15X,I5,13H TESTS PASSED) 90010 FORMAT (1H ,15X,I5,14H TESTS DELETED) C C FORMAT STATEMENTS FOR TEST RESULTS 80001 FORMAT (1H ,4X,I5,7X,4HPASS) 80002 FORMAT (1H ,4X,I5,7X,4HFAIL) 80003 FORMAT (1H ,4X,I5,7X,7HDELETED) 80004 FORMAT (1H ,4X,I5,7X,4HFAIL,10X,I6,9X,I6) 80005 FORMAT (1H ,4X,I5,7X,4HFAIL,4X,E12.5,3X,E12.5) C 90007 FORMAT (1H ,20X,20HEND OF PROGRAM FM105) END