PROGRAM FM105 C COMMENT SECTION. 00010105 C 00020105 C FM105 00030105 C 00040105 C FM105 TESTS REPEATED ( ) FORMAT FIELDS AND IS TAPE AND PRINTER00050105 C ORIENTED. THE ROUTINE CAN ALSO BE USED FOR DISK. BOTH THE READ 00060105 C AND WRITE STATEMENTS ARE TESTED. VARIABLES IN THE INPUT AND 00070105 C OUTPUT LISTS ARE INTEGER VARIABLE AND INTEGER ARRAY ELEMENT OR 00080105 C ARRAY NAME REFERENCES. ALL READ AND WRITE STATEMENTS ARE DONE 00090105 C WITH FORMAT STATEMENTS. THE ROUTINE HAS AN OPTIONAL SECTION OF 00100105 C CODE TO DUMP THE FILE AFTER IT HAS BEEN WRITTEN. DO LOOPS AND 00110105 C DO-IMPLIED LISTS ARE USED IN CONJUNCTION WITH A ONE DIMENSIONAL 00120105 C INTEGER ARRAY FOR THE DUMP SECTION. 00130105 C 00140105 C ROUTINE FM105 IS EXACTLY LIKE ROUTINE FM104 EXCEPT THAT 00150105 C FORMAT NUMBERS 77751 AND 77752 HAVE BEEN CHANGED TO USE THREE (3) 00160105 C REPEATED FIELDS, I.E. ... 3(/ ... ) THIS SHOULD STILL 00170105 C MAKE THE ROUTINE WRITE AND THEN READ FOUR (4) 80 CHARACTER 00180105 C RECORDS FOR EACH SINGLE WRITE OR READ STATEMENT. OTHER FORMAT 00190105 C CONVERSIONS USED ARE THE X AND I FORMAT FIELDS. BECAUSE OF THE 00200105 C NUMBER OF CHARACTERS TO BE WRITTEN OR READ IN EACH SET OF FOUR 00210105 C RECORDS, THE ENTIRE REPEATED FIELD IS USED. 00220105 C 00230105 C THIS ROUTINE WRITES A SINGLE SEQUENTIAL FILE WHICH IS 00240105 C REWOUND AND READ SEQUENTIALLY FORWARD. EVERY RECORD IS READ AND 00250105 C CHECKED DURING THE READ TEST SECTION FOR VALUES OF DATA ITEMS 00260105 C AND THE END OF FILE ON THE LAST RECORD IS ALSO CHECKED. 00270105 C 00280105 C THE LINE CONTINUATION IN COLUMN 6 IS USED IN READ, WRITE, 00290105 C AND FORMAT STATEMENTS. FOR BOTH SYNTAX AND SEMANTIC TESTS, ALL 00300105 C STATEMENTS SHOULD BE CHECKED VISUALLY FOR THE PROPER FUNCTIONING 00310105 C OF THE CONTINUATION LINE. 00320105 C 00330105 C REFERENCES 00340105 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00350105 C X3.9-1978 00360105 C 00370105 C SECTION 8, SPECIFICATION STATEMENTS 00380105 C SECTION 9, DATA STATEMENT 00390105 C SECTION 11.10, DO STATEMENT 00400105 C SECTION 12, INPUT/OUTPUT STATEMENTS 00410105 C SECTION 12.8.2, INPUT/OUTPUT LIST 00420105 C SECTION 12.9.5.2, FORMATTED DATA TRANSFER 00430105 C SECTION 13, FORMAT STATEMENT 00440105 C SECTION 13.2.1, EDIT DESCRIPTORS 00450105 C SECTION 13.5.9.1, INTEGER EDITING 00460105 C 00470105 C 00480105 DIMENSION IPREM(7), IADN11(57) 00490105 DIMENSION IDUMP(136) 00500105 CHARACTER*1 NINE,IZERO,IDUMP 00510105 DATA NINE/'9'/, IZERO/'0'/ 00520105 C 00530105 77701 FORMAT ( 80A1 ) 00540105 77702 FORMAT (10X,"PREMATURE EOF ONLY " ,I3," RECORDS LUN " ,I2, " OUT O00550105 1F ",I3," RECORDS") 00560105 77703 FORMAT (10X,"FILE ON LUN " ,I2," OK... ",I3," RECORDS") 00570105 77704 FORMAT (10X,"FILE ON LUN " ,I2," TOO LONG MORE THAN " ,I3, " RECOR00580105 1DS") 00590105 77705 FORMAT ( 1X,80A1) 00600105 77706 FORMAT (10X,"FILE I08 CREATED WITH 28 SEQUENTIAL RECORDS" ) 00610105 77751 FORMAT ( I3,2(I2),3(I3),I4,57(I1),I3,3(/I3,2(I2),3(I3),I4,57(I1),I00620105 13) ) 00630105 77752 FORMAT ( 7(1X),I3,6(1X),I4,I1,56(1X),I3,3(/7(1X),I3,67(1X),I3) ) 00640105 C 00650105 C 00660105 C ********************************************************** 00670105 C 00680105 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00690105 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00700105 C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00710105 C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00720105 C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00730105 C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00740105 C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00750105 C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00760105 C OF EXECUTING THESE TESTS. 00770105 C 00780105 C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00790105 C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00800105 C 00810105 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00820105 C 00830105 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00840105 C SOFTWARE STANDARDS VALIDATION GROUP 00850105 C BUILDING 225 RM A266 00860105 C GAITHERSBURG, MD 20899 00870105 C ********************************************************** 00880105 C 00890105 C 00900105 C 00910105 C INITIALIZATION SECTION 00920105 C 00930105 C INITIALIZE CONSTANTS 00940105 C ************** 00950105 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00960105 I01 = 5 00970105 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00980105 I02 = 6 00990105 C SYSTEM ENVIRONMENT SECTION 01000105 C 01010105 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 01020105 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 01030105 C (UNIT NUMBER FOR CARD READER). 01040105 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 01050105 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 01060105 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 01070105 C 01080105 CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 01090105 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 01100105 C (UNIT NUMBER FOR PRINTER). 01110105 CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 01120105 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 01130105 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 01140105 C 01150105 IVPASS=0 01160105 IVFAIL=0 01170105 IVDELE=0 01180105 ICZERO=0 01190105 C 01200105 C WRITE PAGE HEADERS 01210105 WRITE (I02,90000) 01220105 WRITE (I02,90001) 01230105 WRITE (I02,90002) 01240105 WRITE (I02, 90002) 01250105 WRITE (I02,90003) 01260105 WRITE (I02,90002) 01270105 WRITE (I02,90004) 01280105 WRITE (I02,90002) 01290105 WRITE (I02,90011) 01300105 WRITE (I02,90002) 01310105 WRITE (I02,90002) 01320105 WRITE (I02,90005) 01330105 WRITE (I02,90006) 01340105 WRITE (I02,90002) 01350105 C 01360105 C DEFAULT ASSIGNMENT FOR FILE 06 IS I08 = 7 01370105 I08 = 7 01380105 CX080 THIS CARD IS REPLACED BY THE CONTENTS OF CARD X-080 01390105 CX081 THIS CARD IS REPLACED BY THE CONTENTS OF CARD X-081 01400105 C 01410105 C WRITE SECTION.... 01420105 C 01430105 C THIS SECTION OF CODE BUILDS A UNIT RECORD FILE ON LUN I08 THAT IS 01440105 C 80 CHARACTERS PER RECORD, 28 RECORDS LONG, AND CONSISTS OF ONLY 01450105 C INTEGERS ( I FORMAT ). THIS IS THE ONLY FILE TESTED IN THE 01460105 C ROUTINE FM105 AND FOR PURPOSES OF IDENTIFICATION IS FILE 06. 01470105 C SINCE THIS ROUTINE IS A TEST OF / IN A FORMAT STATEMENT, FOUR (4) 01480105 C RECORDS ARE ACTUALLY WRITTEN WITH ONE WRITE STATEMENT. ALL FOUR 01490105 C OF THESE RECORDS WILL HAVE THE SAME RECORD NUMBER IN THE 20 01500105 C CHARACTER PREAMBLE. THE INTEGER STORED IN CHARACTER POSITIONS 01510105 C 78 - 80 WILL EQUAL THE RECORD NUMBER PLUS 0, 1, 2, AND 3 FOR 01520105 C THE FOUR RECORD SET RESPECTIVELY.. THE INTEGER ARRAY ELEMENTS 01530105 C IN CHARACTER POSITIONS 21-77 WILL CONTAIN THE INTEGER DIGIT 9. 01540105 IPROG = 105 01550105 IFILE = 06 01560105 ILUN = I08 01570105 ITOTR = 28 01580105 IRLGN = 80 01590105 IEOF = 0000 01600105 C SET THE RECORD PREAMBLE VALUES EXCEPT FOR RECORD NUMBER AND EOF.. 01610105 IPREM(1) = IPROG 01620105 IPREM(2) = IFILE 01630105 IPREM(3) = ILUN 01640105 IPREM(5) = ITOTR 01650105 IPREM(6) = IRLGN 01660105 C SET THE INTEGER ARRAY ELEMENTS TO THE INTEGER DIGIT 9 01670105 DO 10 I = 1, 57 01680105 IADN11(I) = 9 01690105 10 CONTINUE 01700105 DO 952 IRNUM = 1, 7 01710105 IF ( IRNUM .EQ. 7 ) IEOF = 9999 01720105 IPREM(4) = IRNUM 01730105 IPREM(7) = IEOF 01740105 IVON02 = IRNUM 01750105 IVON03 = IRNUM + 1 01760105 IVON04 = IRNUM + 2 01770105 IVON05 = IRNUM + 3 01780105 WRITE ( I08, 77751 ) IPROG,IFILE,ILUN,IRNUM,ITOTR,IRLGN,IEOF,IADN101790105 11,IVON02,IPREM,IADN11,IVON03,IPREM,IADN11,IVON04,IPREM,IADN11,IVON01800105 205 01810105 952 CONTINUE 01820105 WRITE (I02,77706) 01830105 C 01840105 C REWIND SECTION 01850105 C 01860105 REWIND I08 01870105 C 01880105 C READ SECTION.... 01890105 C 01900105 IVTNUM = 95 01910105 C 01920105 C **** TEST 95 THRU TEST 101 **** 01930105 C TEST 95 THRU 101 - THESE TESTS CHECK EVERY ONE OF THE 28 RECORDS 01940105 C CREATED AS FILE I08 FOR THE RECORD NUMBER, CONSTANT DATA ITEMS, 01950105 C AND THE END OF FILE INDICATOR. 01960105 C 01970105 DO 962 IRNUM = 1, 7 01980105 IVON01 = 0 01990105 C THE INTEGER VARIABLE IS INITIALIZED TO ZERO FOR EACH TEST 95 - 10102000105 READ ( I08, 77752 ) IRN01,IEND,IVON06,IVON07,IRN02,IVON08,IRN03,02010105 1IVON09,IRN04,IVON10 02020105 C READ THE FILE I08 - NOTE, FOUR RECORDS ARE READ IN EACH SINGLE 02030105 C READ STATEMENT AND THE FORMAT IS DIFFERENT THAN THE ONE USED TO 02040105 C CREATE THE FILE. 02050105 C 02060105 C CHECK THE DATA ITEM VALUES .... 02070105 IF ( IRN01 .EQ. IRNUM ) IVON01 = IVON01 + 1 02080105 C IRN01 SHOULD EQUAL THE RECORD NUMBER FOR THE SET OF FOUR RECORDS 02090105 C RECORD NUMBERS GO FROM 1 TO 7 .... 02100105 IF ( IVON06 .EQ. 9 ) IVON01 = IVON01 + 1 02110105 C IVON06 IS THE INTEGER ARRAY ELEMENT WHICH SHOULD BE ALWAYS EQUAL 02120105 C TO THE INTEGER CONSTANT 9 .... 02130105 IF ( IVON07 .EQ. IRNUM ) IVON01 = IVON01 + 1 02140105 C IVON07 SHOULD ALWAYS EQUAL THE RECORD NUMBER OF THE FIRST RECORD 02150105 C IN THE SET OF FOUR RECORDS .... 02160105 IF ( IRN02 .EQ. IRNUM ) IVON01 = IVON01 + 1 02170105 C THIS VALUE REMAINS CONSTANT FOR ALL FOUR RECORDS IN THE SET OF 4..02180105 IF ( IVON08 .EQ. IRNUM + 1 ) IVON01 = IVON01 + 1 02190105 C IVON08 IS THE 80TH CHARACTER IN THE SECOND RECORD OF THE SET OF 4.02200105 IF ( IRN03 .EQ. IRNUM ) IVON01 = IVON01 + 1 02210105 C AGAIN THIS VALUE IS CONSTANT FOR THE SET OF FOUR RECORDS.... 02220105 IF ( IVON09 .EQ. IRNUM + 2 ) IVON01 = IVON01 + 1 02230105 C IVON09 IS THE 80TH CHARACTER IN THE THIRD RECORD OF THE SET OF 4. 02240105 IF ( IRN04 .EQ. IRNUM ) IVON01 = IVON01 + 1 02250105 C STILL EQUALS THE RECORD NUMBER FOR THE SET OF FOUR RECORDS. 02260105 IF ( IVON10 .EQ. IRNUM + 3 ) IVON01 = IVON01 + 1 02270105 C IVON10 IS THE 80TH CHARACTER IN THE FOURTH RECORD OF THE SET OF 4.02280105 IF ( IVON01 - 9 ) 20960, 10960, 20960 02290105 C WHEN IVON01 = 9 THEN ALL NINE OF THE DATA ITEMS CHECKED ARE OK...02300105 10960 IVPASS = IVPASS + 1 02310105 WRITE (I02,80001) IVTNUM 02320105 GO TO 971 02330105 20960 IVFAIL = IVFAIL + 1 02340105 IVCOMP = IVON01 02350105 IVCORR = 9 02360105 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02370105 971 CONTINUE 02380105 IVTNUM = IVTNUM + 1 02390105 C INCREMENT THE TEST NUMBER.... 02400105 962 CONTINUE 02410105 IF ( ICZERO ) 30960, 1021, 30960 02420105 30960 IVDELE = IVDELE + 1 02430105 WRITE (I02,80003) IVTNUM 02440105 1021 CONTINUE 02450105 IVTNUM = 102 02460105 C 02470105 C **** TEST 102 **** 02480105 C TEST 102 - THIS TEST CHECKS THE END OF FILE INDICATOR ON THE LAST02490105 C SET OF 4 RECORDS ( 25,26,27,AND 28 ). 02500105 C THE VARIABLE IEND IS ACTUALLY IN THE RECORD NUMBERED 25. 02510105 C 02520105 IF (ICZERO) 31020, 1020, 31020 02530105 1020 CONTINUE 02540105 IVCOMP = IEND 02550105 GO TO 41020 02560105 31020 IVDELE = IVDELE + 1 02570105 WRITE (I02,80003) IVTNUM 02580105 IF (ICZERO) 41020, 1031, 41020 02590105 41020 IF ( IVCOMP - 9999 ) 21020, 11020, 21020 02600105 11020 IVPASS = IVPASS + 1 02610105 WRITE (I02,80001) IVTNUM 02620105 GO TO 1031 02630105 21020 IVFAIL = IVFAIL + 1 02640105 IVCORR = 9999 02650105 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02660105 1031 CONTINUE 02670105 C THIS CODE IS OPTIONALLY COMPILED AND IS USED TO DUMP THE FILE 06 02680105 C TO THE LINE PRINTER. 02690105 CDB** 02700105 C ILUN = I08 02710105 C ITOTR = 28 02720105 C IRLGN = 80 02730105 C7777 REWIND ILUN 02740105 C DO 7778 IRNUM = 1, ITOTR 02750105 C READ (ILUN,77701) (IDUMP(ICHAR), ICHAR = 1, IRLGN) 02760105 C WRITE ( I02,77705) (IDUMP(ICHAR), ICHAR = 1, IRLGN) 02770105 C IF ( IDUMP(20) .EQ. NINE .AND. IDUMP(80) .EQ. IZERO ) GO TO 7779 02780105 C7778 CONTINUE 02790105 C GO TO 7782 02800105 C7779 IF ( IRNUM - ITOTR ) 7780, 7781, 7782 02810105 C7780 WRITE (I02,77702) IRNUM,ILUN,ITOTR 02820105 C GO TO 7784 02830105 C7781 WRITE (I02,77703) ILUN,ITOTR 02840105 C GO TO 7784 02850105 C7782 WRITE (I02,77704) ILUN, ITOTR 02860105 C DO 7783 I = 1, 5 02870105 C READ (ILUN,77701) (IDUMP(ICHAR), ICHAR = 1, IRLGN) 02880105 C WRITE ( I02,77705) (IDUMP(ICHAR), ICHAR = 1, IRLGN) 02890105 C IF ( IDUMP(20) .EQ. NINE ) GO TO 7784 02900105 C7783 CONTINUE 02910105 C7784 GO TO 99999 02920105 CDE** 02930105 C WRITE PAGE FOOTINGS AND RUN SUMMARIES 02940105 99999 CONTINUE 02950105 WRITE (I02,90002) 02960105 WRITE (I02,90006) 02970105 WRITE (I02,90002) 02980105 WRITE (I02,90002) 02990105 WRITE (I02,90007) 03000105 WRITE (I02,90002) 03010105 WRITE (I02,90008) IVFAIL 03020105 WRITE (I02,90009) IVPASS 03030105 WRITE (I02,90010) IVDELE 03040105 C 03050105 C 03060105 C TERMINATE ROUTINE EXECUTION 03070105 STOP 03080105 C 03090105 C FORMAT STATEMENTS FOR PAGE HEADERS 03100105 90000 FORMAT ("1") 03110105 90002 FORMAT (" ") 03120105 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 03130105 90003 FORMAT (" ",21X,"VERSION 2.1" ) 03140105 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 03150105 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 03160105 90006 FORMAT (" ",5X,"----------------------------------------------" ) 03170105 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 03180105 C 03190105 C FORMAT STATEMENTS FOR RUN SUMMARIES 03200105 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 03210105 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 03220105 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 03230105 C 03240105 C FORMAT STATEMENTS FOR TEST RESULTS 03250105 80001 FORMAT (" ",4X,I5,7X,"PASS") 03260105 80002 FORMAT (" ",4X,I5,7X,"FAIL") 03270105 80003 FORMAT (" ",4X,I5,7X,"DELETED") 03280105 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 03290105 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 03300105 C 03310105 90007 FORMAT (" ",20X,"END OF PROGRAM FM105" ) 03320105 END 03330105