| 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 = 112 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 |