PROGRAM FM204 00010204 C 00020204 C 00030204 C THIS ROUTINE CONTINUES THE TESTING OF CHARACTER VARIABLES AND 00040204 C CHARACTER ARRAYS OF LENGTH ONE. THE CHARACTER FEATURES TESTED IN 00050204 C FM202 AND FM203 ARE USED IN THE TESTS IN THIS ROUTINE. THE 00060204 C FOLLOWING CHARACTER FEATURES ARE TESTED 00070204 C 00080204 C (1) INITIAL DEFINITION OF CHARACTER ENTITIES OF LENGTH ONE BY 00090204 C SPECIFYING THEM IN A DATA STATEMENT. 00100204 C 00110204 C (2) THE SUBSET FORTRAN LANGUAGE SPECIFIES THE FOLLOWING 00120204 C COLLATING SEQUENCE RULES. 00130204 C 00140204 C A LESS THAN B ... LESS THAN Z, 00150204 C 0 LESS THAN 1 ... LESS THAN 9, 00160204 C ALL OF THE DIGITS PRECEDE A OR ALL OF THE DIGITS FOLLOW 00170204 C Z, 00180204 C BLANK IS LESS THAN THE LETTER A AND BLANK IS LESS THAN 00190204 C THE DIGIT ZERO. 00200204 C 00210204 C (3) THE VALUE OF THE INTRINSIC FUNCTION ICHAR IS AN INTEGER 00220204 C IN THE RANGE (0, N-1), WHERE N IS THE NUMBER OF CHARACTERS IN 00230204 C THE COLLATING SEQUENCE FOR THE PROCESSOR. FOR ANY CHARACTERS 00240204 C C1 AND C2 CAPABLE OF REPRESENTATION IN THE PROCESSOR, C1 .LE. C2 00250204 C IS TRUE IF AND ONLY IF ICHAR(C1) .LE. ICHAR(C2) IS TRUE; AND 00260204 C C1 .EQ. C2 IF AND ONLY IF ICHAR(C1) .EQ. ICHAR(C2). 00270204 C 00280204 C REFERENCES 00290204 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00300204 C X3.9-1978 00310204 C 00320204 C SECTION 3.1.5, COLLATING SEQUENCE AND GRAPHICS 00330204 C SECTION 4.8, CHARACTER TYPE 00340204 C SECTION 6.2, CHARACTER EXPRESSIONS 00350204 C SECTION 6.3.4, CHARACTER RELATIONAL EXPRESSIONS 00360204 C SECTION 6.3.5, INTERPRETATION OF CHARACTER RELATIONAL 00370204 C EXPRESSIONS 00380204 C SECTION 8.4.2, CHARACTER TYPE-STATEMENT 00390204 C SECTION 9.4, CHARACTER CONSTANT IN A DATA STATEMENT 00400204 C SECTION 10.4, CHARACTER ASSIGNMENT STATEMENT 00410204 C SECTION 15.3, INTRINSIC FUNCTIONS 00420204 C SECTION 15.10, TABLE 5 INTRINSIC FUNCTIONS 00430204 C 00440204 C 00450204 C ******************************************************************00460204 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00470204 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN 00480204 C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE 00490204 C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT 00500204 C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT00510204 C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS 00520204 C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING00530204 C THE RESULT OF EXECUTING THESE TESTS. 00540204 C 00550204 C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES 00560204 C FOUND IN THE SUBSET LEVEL OF THE STANDARD. 00570204 C 00580204 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO 00590204 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00600204 C SOFTWARE STANDARDS VALIDATION GROUP 00610204 C BUILDING 225 RM A266 00620204 C GAITHERSBURG, MD 20899 00630204 C ******************************************************************00640204 C 00650204 C 00660204 IMPLICIT LOGICAL (L) 00670204 IMPLICIT CHARACTER*14 (C) 00680204 C 00690204 CHARACTER*1 CATN11(47), CATN12(26), CATN13(10) 00700204 CHARACTER CVTN10*1, CATN14(6)*1, CVTN01 00710204 DIMENSION IAON11(47) 00720204 DATA CATN11/'A','B','C','D','E','F','G','H','I','J','K','L','M', 00730204 1 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1', 00740204 2 '2','3','4','5','6','7','8','9',' ','=','+','-','*','/','(', 00750204 3 ')',',','.',''''/ 00760204 DATA CATN12/'A','B','C','D','E','F','G','H','I','J','K','L','M', 00770204 1 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/ 00780204 DATA CATN14(1),CATN14(2),CATN14(3),CATN14(4),CATN14(5),CATN14(6) 00790204 1 /6*'V'/,IAON11/47*7/, CATN13/'0','1','2','3','4','5','6', 00800204 2 '7','8','9'/,CVTN10/' '/ 00810204 C 00820204 C 00830204 C 00840204 C INITIALIZATION SECTION. 00850204 C 00860204 C INITIALIZE CONSTANTS 00870204 C ******************** 00880204 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER 00890204 I01 = 5 00900204 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER 00910204 I02 = 6 00920204 C SYSTEM ENVIRONMENT SECTION 00930204 C 00940204 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD.00950204 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00960204 C (UNIT NUMBER FOR CARD READER). 00970204 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD00980204 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00990204 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 01000204 C 01010204 CX020 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD.01020204 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 01030204 C (UNIT NUMBER FOR PRINTER). 01040204 CX021 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD.01050204 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 01060204 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 01070204 C 01080204 IVPASS = 0 01090204 IVFAIL = 0 01100204 IVDELE = 0 01110204 ICZERO = 0 01120204 C 01130204 C WRITE OUT PAGE HEADERS 01140204 C 01150204 WRITE (I02,90002) 01160204 WRITE (I02,90006) 01170204 WRITE (I02,90008) 01180204 WRITE (I02,90004) 01190204 WRITE (I02,90010) 01200204 WRITE (I02,90004) 01210204 WRITE (I02,90016) 01220204 WRITE (I02,90001) 01230204 WRITE (I02,90004) 01240204 WRITE (I02,90012) 01250204 WRITE (I02,90014) 01260204 WRITE (I02,90004) 01270204 C 01280204 C 01290204 C TEST 61 THROUGH TEST 73 VERIFY THE CONTENTS OF CHARACTER ARRAY 01300204 C ELEMENTS AND CHARACTER VARIABLES WHICH WERE INITIALLY DEFINED IN 01310204 C A DATA STATEMENT. 01320204 C 01330204 C TEST 61 THROUGH TEST 65 VERIFY THE CONTENTS OF SELECTED 01340204 C ELEMENTS OF THE ARRAY CATN11 WHICH WAS INITIALLY SET EQUAL TO THE 01350204 C 47 CHARACTERS OF THE FORTRAN SUBSET LANGUAGE CHARACTER SET. 01360204 C 01370204 C 01380204 C **** FCVS PROGRAM 204 - TEST 061 **** 01390204 C 01400204 C 01410204 IVTNUM = 61 01420204 IF (ICZERO) 30610, 0610, 30610 01430204 0610 CONTINUE 01440204 IVCOMP = 0 01450204 IVCORR = 1 01460204 IF (CATN11(1) .EQ. 'A') IVCOMP = 1 01470204 40610 IF (IVCOMP - 1) 20610, 10610, 20610 01480204 30610 IVDELE = IVDELE + 1 01490204 WRITE (I02,80000) IVTNUM 01500204 IF (ICZERO) 10610, 0621, 20610 01510204 10610 IVPASS = IVPASS + 1 01520204 WRITE (I02,80002) IVTNUM 01530204 GO TO 0621 01540204 20610 IVFAIL = IVFAIL + 1 01550204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01560204 0621 CONTINUE 01570204 C 01580204 C **** FCVS PROGRAM 204 - TEST 062 **** 01590204 C 01600204 C 01610204 IVTNUM = 62 01620204 IF (ICZERO) 30620, 0620, 30620 01630204 0620 CONTINUE 01640204 IVCOMP = 0 01650204 IVCORR = 1 01660204 IF (CATN11(47) .EQ. '''') IVCOMP = 1 01670204 40620 IF (IVCOMP - 1) 20620, 10620, 20620 01680204 30620 IVDELE = IVDELE + 1 01690204 WRITE (I02,80000) IVTNUM 01700204 IF (ICZERO) 10620, 0631, 20620 01710204 10620 IVPASS = IVPASS + 1 01720204 WRITE (I02,80002) IVTNUM 01730204 GO TO 0631 01740204 20620 IVFAIL = IVFAIL + 1 01750204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01760204 0631 CONTINUE 01770204 C 01780204 C **** FCVS PROGRAM 204 - TEST 063 **** 01790204 C 01800204 C 01810204 IVTNUM = 63 01820204 IF (ICZERO) 30630, 0630, 30630 01830204 0630 CONTINUE 01840204 IVCOMP = 0 01850204 IVCORR = 1 01860204 IF (CATN11(46) .EQ. '.') IVCOMP = 1 01870204 40630 IF (IVCOMP - 1) 20630, 10630, 20630 01880204 30630 IVDELE = IVDELE + 1 01890204 WRITE (I02,80000) IVTNUM 01900204 IF (ICZERO) 10630, 0641, 20630 01910204 10630 IVPASS = IVPASS + 1 01920204 WRITE (I02,80002) IVTNUM 01930204 GO TO 0641 01940204 20630 IVFAIL = IVFAIL + 1 01950204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01960204 0641 CONTINUE 01970204 C 01980204 C **** FCVS PROGRAM 204 - TEST 064 **** 01990204 C 02000204 C 02010204 IVTNUM = 64 02020204 IF (ICZERO) 30640, 0640, 30640 02030204 0640 CONTINUE 02040204 IVCOMP = 0 02050204 IVCORR = 1 02060204 IF (CATN11(27) .EQ. '0') IVCOMP = 1 02070204 40640 IF (IVCOMP - 1) 20640, 10640, 20640 02080204 30640 IVDELE = IVDELE + 1 02090204 WRITE (I02,80000) IVTNUM 02100204 IF (ICZERO) 10640, 0651, 20640 02110204 10640 IVPASS = IVPASS + 1 02120204 WRITE (I02,80002) IVTNUM 02130204 GO TO 0651 02140204 20640 IVFAIL = IVFAIL + 1 02150204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02160204 0651 CONTINUE 02170204 C 02180204 C **** FCVS PROGRAM 204 - TEST 065 **** 02190204 C 02200204 C 02210204 IVTNUM = 65 02220204 IF (ICZERO) 30650, 0650, 30650 02230204 0650 CONTINUE 02240204 IVCOMP = 0 02250204 IVCORR = 1 02260204 IF (CATN11(36) .EQ. '9') IVCOMP = 1 02270204 40650 IF (IVCOMP - 1) 20650, 10650, 20650 02280204 30650 IVDELE = IVDELE + 1 02290204 WRITE (I02,80000) IVTNUM 02300204 IF (ICZERO) 10650, 0661, 20650 02310204 10650 IVPASS = IVPASS + 1 02320204 WRITE (I02,80002) IVTNUM 02330204 GO TO 0661 02340204 20650 IVFAIL = IVFAIL + 1 02350204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02360204 0661 CONTINUE 02370204 C 02380204 C TEST 66 THROUGH TEST 68 VERIFY THE CONTENTS OF SELECTED 02390204 C ELEMENTS OF THE ARRAY CATN12 WHICH WAS INITIALLY SET EQUAL TO THE 02400204 C 26 LETTERS OF THE ALPHABET. 02410204 C 02420204 C 02430204 C **** FCVS PROGRAM 204 - TEST 066 **** 02440204 C 02450204 C 02460204 IVTNUM = 66 02470204 IF (ICZERO) 30660, 0660, 30660 02480204 0660 CONTINUE 02490204 IVCOMP = 0 02500204 IVCORR = 1 02510204 IF (CATN12(1) .EQ. 'A') IVCOMP = 1 02520204 40660 IF (IVCOMP - 1) 20660, 10660, 20660 02530204 30660 IVDELE = IVDELE + 1 02540204 WRITE (I02,80000) IVTNUM 02550204 IF (ICZERO) 10660, 0671, 20660 02560204 10660 IVPASS = IVPASS + 1 02570204 WRITE (I02,80002) IVTNUM 02580204 GO TO 0671 02590204 20660 IVFAIL = IVFAIL + 1 02600204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02610204 0671 CONTINUE 02620204 C 02630204 C **** FCVS PROGRAM 204 - TEST 067 **** 02640204 C 02650204 C 02660204 IVTNUM = 67 02670204 IF (ICZERO) 30670, 0670, 30670 02680204 0670 CONTINUE 02690204 IVCOMP = 0 02700204 IVCORR = 1 02710204 IF (CATN12(26) .EQ. 'Z') IVCOMP = 1 02720204 40670 IF (IVCOMP - 1) 20670, 10670, 20670 02730204 30670 IVDELE = IVDELE + 1 02740204 WRITE (I02,80000) IVTNUM 02750204 IF (ICZERO) 10670, 0681, 20670 02760204 10670 IVPASS = IVPASS + 1 02770204 WRITE (I02,80002) IVTNUM 02780204 GO TO 0681 02790204 20670 IVFAIL = IVFAIL + 1 02800204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02810204 0681 CONTINUE 02820204 C 02830204 C **** FCVS PROGRAM 204 - TEST 068 **** 02840204 C 02850204 C 02860204 IVTNUM = 68 02870204 IF (ICZERO) 30680, 0680, 30680 02880204 0680 CONTINUE 02890204 IVCOMP = 0 02900204 IVCORR = 1 02910204 IF (CATN12(20) .EQ. 'T') IVCOMP = 1 02920204 40680 IF (IVCOMP - 1) 20680, 10680, 20680 02930204 30680 IVDELE = IVDELE + 1 02940204 WRITE (I02,80000) IVTNUM 02950204 IF (ICZERO) 10680, 0691, 20680 02960204 10680 IVPASS = IVPASS + 1 02970204 WRITE (I02,80002) IVTNUM 02980204 GO TO 0691 02990204 20680 IVFAIL = IVFAIL + 1 03000204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03010204 0691 CONTINUE 03020204 C 03030204 C TEST 69 AND TEST 70 VERIFY THE CONTENTS OF SELECTED ELEMENTS 03040204 C OF THE ARRAY CATN13 WHICH WAS INITIALLY SET EQUAL TO THE TEN 03050204 C NUMERIC DIGITS. 03060204 C 03070204 C 03080204 C **** FCVS PROGRAM 204 - TEST 069 **** 03090204 C 03100204 C 03110204 IVTNUM = 69 03120204 IF (ICZERO) 30690, 0690, 30690 03130204 0690 CONTINUE 03140204 IVCOMP = 0 03150204 IVCORR = 1 03160204 IF (CATN13(1) .EQ. '0') IVCOMP = 1 03170204 40690 IF (IVCOMP - 1) 20690, 10690, 20690 03180204 30690 IVDELE = IVDELE + 1 03190204 WRITE (I02,80000) IVTNUM 03200204 IF (ICZERO) 10690, 0701, 20690 03210204 10690 IVPASS = IVPASS + 1 03220204 WRITE (I02,80002) IVTNUM 03230204 GO TO 0701 03240204 20690 IVFAIL = IVFAIL + 1 03250204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03260204 0701 CONTINUE 03270204 C 03280204 C **** FCVS PROGRAM 204 - TEST 070 **** 03290204 C 03300204 C 03310204 IVTNUM = 70 03320204 IF (ICZERO) 30700, 0700, 30700 03330204 0700 CONTINUE 03340204 IVCOMP = 0 03350204 IVCORR = 1 03360204 IF (CATN13(10) .EQ. '9') IVCOMP = 1 03370204 40700 IF (IVCOMP - 1) 20700, 10700, 20700 03380204 30700 IVDELE = IVDELE + 1 03390204 WRITE (I02,80000) IVTNUM 03400204 IF (ICZERO) 10700, 0711, 20700 03410204 10700 IVPASS = IVPASS + 1 03420204 WRITE (I02,80002) IVTNUM 03430204 GO TO 0711 03440204 20700 IVFAIL = IVFAIL + 1 03450204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03460204 0711 CONTINUE 03470204 C 03480204 C **** FCVS PROGRAM 204 - TEST 071 **** 03490204 C 03500204 C TEST 71 VERIFIES THE CONTENTS OF THE VARIABLE CVTN10 WHICH 03510204 C WAS INITIALLY SET EQUAL TO BLANK. 03520204 C 03530204 IVTNUM = 71 03540204 IF (ICZERO) 30710, 0710, 30710 03550204 0710 CONTINUE 03560204 IVCOMP = 0 03570204 IVCORR = 1 03580204 IF (CVTN10 .EQ. ' ') IVCOMP = 1 03590204 40710 IF (IVCOMP - 1) 20710, 10710, 20710 03600204 30710 IVDELE = IVDELE + 1 03610204 WRITE (I02,80000) IVTNUM 03620204 IF (ICZERO) 10710, 0721, 20710 03630204 10710 IVPASS = IVPASS + 1 03640204 WRITE (I02,80002) IVTNUM 03650204 GO TO 0721 03660204 20710 IVFAIL = IVFAIL + 1 03670204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03680204 0721 CONTINUE 03690204 C 03700204 C **** FCVS PROGRAM 204 - TEST 072 **** 03710204 C 03720204 C TEST 72 VERIFIES THE CONTENTS OF THE ARRAY CATN14 WHICH WAS 03730204 C INITIALLY SET EQUAL TO ALL V'S. 03740204 C 03750204 IVTNUM = 72 03760204 IF (ICZERO) 30720, 0720, 30720 03770204 0720 CONTINUE 03780204 IVCOMP = 0 03790204 IVCORR = 6 03800204 DO 722, I= 1,6 03810204 IF (CATN14(I) .EQ. 'V') IVCOMP = IVCOMP + 1 03820204 722 CONTINUE 03830204 40720 IF (IVCOMP - 6) 20720, 10720, 20720 03840204 30720 IVDELE = IVDELE + 1 03850204 WRITE (I02,80000) IVTNUM 03860204 IF (ICZERO) 10720, 0731, 20720 03870204 10720 IVPASS = IVPASS + 1 03880204 WRITE (I02,80002) IVTNUM 03890204 GO TO 0731 03900204 20720 IVFAIL = IVFAIL + 1 03910204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03920204 0731 CONTINUE 03930204 C 03940204 C **** FCVS PROGRAM 204 - TEST 073 **** 03950204 C 03960204 C TEST 73 VERIFIES THE CONTENTS OF THE ARRAY IAON11 WHICH WAS 03970204 C INITIALLY SET EQUAL TO ALL 7'S. 03980204 C 03990204 IVTNUM = 73 04000204 IF (ICZERO) 30730, 0730, 30730 04010204 0730 CONTINUE 04020204 IVCOMP = 0 04030204 IVCORR = 47 04040204 DO 732, I= 1,47 04050204 IF (IAON11(I) - 7) 732, 733, 732 04060204 733 IVCOMP = IVCOMP + 1 04070204 732 CONTINUE 04080204 40730 IF (IVCOMP - 47) 20730, 10730, 20730 04090204 30730 IVDELE = IVDELE + 1 04100204 WRITE (I02,80000) IVTNUM 04110204 IF (ICZERO) 10730, 0741, 20730 04120204 10730 IVPASS = IVPASS + 1 04130204 WRITE (I02,80002) IVTNUM 04140204 GO TO 0741 04150204 20730 IVFAIL = IVFAIL + 1 04160204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04170204 0741 CONTINUE 04180204 C 04190204 C TEST 74 THROUGH TEST 79 VERIFY THE COLLATING SEQUENCE 04200204 C SPECIFICATIONS FOR THE FORTRAN SUBSET LANGUAGE. 04210204 C 04220204 C TEST 74 AND TEST 75 VERIFY THE COLLATING SEQUENCE FOR LETTERS. 04230204 C 04240204 C 04250204 C **** FCVS PROGRAM 204 - TEST 074 **** 04260204 C 04270204 C 04280204 IVTNUM = 74 04290204 IF (ICZERO) 30740, 0740, 30740 04300204 0740 CONTINUE 04310204 IVCOMP = 1 04320204 IVCORR = 210 04330204 IF ('A' .LT. 'B') IVCOMP = IVCOMP * 2 04340204 IF ('B' .LT. 'M') IVCOMP = IVCOMP * 3 04350204 IF ('M' .LT. 'V') IVCOMP = IVCOMP * 5 04360204 IF ('V' .LT. 'Z') IVCOMP = IVCOMP * 7 04370204 40740 IF (IVCOMP - 210) 20740, 10740, 20740 04380204 30740 IVDELE = IVDELE + 1 04390204 WRITE (I02,80000) IVTNUM 04400204 IF (ICZERO) 10740, 0751, 20740 04410204 10740 IVPASS = IVPASS + 1 04420204 WRITE (I02,80002) IVTNUM 04430204 GO TO 0751 04440204 20740 IVFAIL = IVFAIL + 1 04450204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04460204 0751 CONTINUE 04470204 C 04480204 C **** FCVS PROGRAM 204 - TEST 075 **** 04490204 C 04500204 C 04510204 IVTNUM = 75 04520204 IF (ICZERO) 30750, 0750, 30750 04530204 0750 CONTINUE 04540204 IVCOMP = 0 04550204 IVCORR = 25 04560204 DO 752, I=1,25 04570204 J= I + 1 04580204 IF (CATN12(J) .GT. CATN12(I)) IVCOMP = IVCOMP + 1 04590204 752 CONTINUE 04600204 40750 IF (IVCOMP - 25) 20750, 10750, 20750 04610204 30750 IVDELE = IVDELE + 1 04620204 WRITE (I02,80000) IVTNUM 04630204 IF (ICZERO) 10750, 0761, 20750 04640204 10750 IVPASS = IVPASS + 1 04650204 WRITE (I02,80002) IVTNUM 04660204 GO TO 0761 04670204 20750 IVFAIL = IVFAIL + 1 04680204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04690204 0761 CONTINUE 04700204 C 04710204 C TEST 76 AND TEST 77 VERIFY THE COLLATING SEQUENCE FOR DIGITS. 04720204 C 04730204 C 04740204 C **** FCVS PROGRAM 204 - TEST 076 **** 04750204 C 04760204 C 04770204 IVTNUM = 76 04780204 IF (ICZERO) 30760, 0760, 30760 04790204 0760 CONTINUE 04800204 IVCOMP = 1 04810204 IVCORR = 30 04820204 IF ('0' .LT. '1') IVCOMP = IVCOMP * 2 04830204 IF ('1' .LT. '5') IVCOMP = IVCOMP * 3 04840204 IF ('5' .LT. '9') IVCOMP = IVCOMP * 5 04850204 40760 IF (IVCOMP - 30) 20760, 10760, 20760 04860204 30760 IVDELE = IVDELE + 1 04870204 WRITE (I02,80000) IVTNUM 04880204 IF (ICZERO) 10760, 0771, 20760 04890204 10760 IVPASS = IVPASS + 1 04900204 WRITE (I02,80002) IVTNUM 04910204 GO TO 0771 04920204 20760 IVFAIL = IVFAIL + 1 04930204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04940204 0771 CONTINUE 04950204 C 04960204 C **** FCVS PROGRAM 204 - TEST 077 **** 04970204 C 04980204 C 04990204 IVTNUM = 77 05000204 IF (ICZERO) 30770, 0770, 30770 05010204 0770 CONTINUE 05020204 IVCOMP = 0 05030204 IVCORR = 9 05040204 DO 772, I=1,9 05050204 J = I + 1 05060204 IF (CATN13(I) .LT. CATN13(J)) IVCOMP = IVCOMP + 1 05070204 772 CONTINUE 05080204 40770 IF (IVCOMP - 9) 20770, 10770, 20770 05090204 30770 IVDELE = IVDELE + 1 05100204 WRITE (I02,80000) IVTNUM 05110204 IF (ICZERO) 10770, 0781, 20770 05120204 10770 IVPASS = IVPASS + 1 05130204 WRITE (I02,80002) IVTNUM 05140204 GO TO 0781 05150204 20770 IVFAIL = IVFAIL + 1 05160204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 05170204 0781 CONTINUE 05180204 C 05190204 C **** FCVS PROGRAM 204 - TEST 078 **** 05200204 C 05210204 C TEST 78 VERIFIES THAT BLANK IS LESS THAN THE LETTER A AND BLANK05220204 C IS LESS THAN THE DIGIT ZERO. 05230204 C 05240204 IVTNUM = 78 05250204 IF (ICZERO) 30780, 0780, 30780 05260204 0780 CONTINUE 05270204 IVCOMP = 1 05280204 IVCORR = 6 05290204 IF (' ' .LT. 'A') IVCOMP = IVCOMP * 2 05300204 IF (' ' .LT. '0') IVCOMP = IVCOMP * 3 05310204 40780 IF (IVCOMP - 6) 20780, 10780, 20780 05320204 30780 IVDELE = IVDELE + 1 05330204 WRITE (I02,80000) IVTNUM 05340204 IF (ICZERO) 10780, 0791, 20780 05350204 10780 IVPASS = IVPASS + 1 05360204 WRITE (I02,80002) IVTNUM 05370204 GO TO 0791 05380204 20780 IVFAIL = IVFAIL + 1 05390204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 05400204 0791 CONTINUE 05410204 C 05420204 C **** FCVS PROGRAM 204 - TEST 079 **** 05430204 C 05440204 C TEST 79 VERIFIES THAT THE DIGITS AND LETTERS ARE NOT INTERMIXED05450204 C IN THE COLLATING SEQUENCE. EITHER ALL OF THE DIGITS MUST PRECEDE 05460204 C A OR ALL OF THE DIGITS MUST FOLLOW Z. 05470204 C 05480204 IVTNUM = 79 05490204 IF (ICZERO) 30790, 0790, 30790 05500204 0790 CONTINUE 05510204 IVCOMP = 0 05520204 IVCORR = 10 05530204 IF ('0' .NE. 'A') GO TO 792 05540204 IVCOMP = 111 05550204 GO TO 40790 05560204 792 IF ('0' .GT. 'A') GO TO 793 05570204 C 05580204 C ZERO IS LESS THAN LETTER A, SO ALL DIGITS MUST BE LESS THAN A05590204 C 05600204 DO 794, I= 1,10 05610204 IF (CATN13(I) .LT. 'A') IVCOMP = IVCOMP + 1 05620204 794 CONTINUE 05630204 GO TO 40790 05640204 C 05650204 C ZERO IS GREATER THAN LETTER A, SO ALL DIGITS MUST BE GREATER 05660204 C THAN LETTER Z. 05670204 C 05680204 793 DO 795 I=1,10 05690204 IF (CATN13(I) .GT. 'Z') IVCOMP = IVCOMP + 1 05700204 795 CONTINUE 05710204 40790 IF (IVCOMP - 10) 20790,10790, 20790 05720204 30790 IVDELE = IVDELE + 1 05730204 WRITE (I02,80000) IVTNUM 05740204 IF (ICZERO) 10790, 0801, 20790 05750204 10790 IVPASS = IVPASS + 1 05760204 WRITE (I02,80002) IVTNUM 05770204 GO TO 0801 05780204 20790 IVFAIL = IVFAIL + 1 05790204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 05800204 0801 CONTINUE 05810204 C 05820204 C TEST 80 THROUGH TEST 85 PERFORM THE SAME COMPARISONS AS TEST 7405830204 C THROUGH TEST 79 EXCEPT THAT THE ICHAR INTRINSIC FUNCTION IS USED 05840204 C IN PLACE OF THE INDIVIDUAL CHARACTERS. 05850204 C 05860204 C TEST 80 AND TEST 81 VERIFY THE COLLATING SEQUENCE FOR LETTERS 05870204 C USING THE ICHAR INTRINSIC FUNCTION. 05880204 C 05890204 C 05900204 C **** FCVS PROGRAM 204 - TEST 080 **** 05910204 C 05920204 C 05930204 IVTNUM = 80 05940204 IF (ICZERO) 30800, 0800, 30800 05950204 0800 CONTINUE 05960204 IVCOMP = 1 05970204 IVCORR = 210 05980204 IVON01 = ICHAR('A') 05990204 IVON02 = ICHAR('B') 06000204 IVON03 = ICHAR('M') 06010204 IVON04 = ICHAR('V') 06020204 IVON05 = ICHAR('Z') 06030204 IF (IVON01 .LT. IVON02) IVCOMP = IVCOMP * 2 06040204 IF (IVON02 .LT. IVON03) IVCOMP = IVCOMP * 3 06050204 IF (IVON03 .LT. IVON04) IVCOMP = IVCOMP * 5 06060204 IF (IVON04 .LT. IVON05) IVCOMP = IVCOMP * 7 06070204 40800 IF (IVCOMP - 210) 20800, 10800, 20800 06080204 30800 IVDELE = IVDELE + 1 06090204 WRITE (I02,80000) IVTNUM 06100204 IF (ICZERO) 10800, 0811, 20800 06110204 10800 IVPASS = IVPASS + 1 06120204 WRITE (I02,80002) IVTNUM 06130204 GO TO 0811 06140204 20800 IVFAIL = IVFAIL + 1 06150204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06160204 0811 CONTINUE 06170204 C 06180204 C **** FCVS PROGRAM 204 - TEST 081 **** 06190204 C 06200204 C 06210204 IVTNUM = 81 06220204 IF (ICZERO) 30810, 0810, 30810 06230204 0810 CONTINUE 06240204 IVON01 = 0 06250204 IVON02 = 0 06260204 IVCOMP = 0 06270204 IVCORR = 25 06280204 DO 812, I=1,25 06290204 J= I + 1 06300204 IVON01 = ICHAR(CATN12(J)) 06310204 IVON02 = ICHAR(CATN12(I)) 06320204 IF (IVON01 .GT. IVON02) IVCOMP = IVCOMP + 1 06330204 812 CONTINUE 06340204 40810 IF (IVCOMP - 25) 20810, 10810, 20810 06350204 30810 IVDELE = IVDELE + 1 06360204 WRITE (I02,80000) IVTNUM 06370204 IF (ICZERO) 10810, 0821, 20810 06380204 10810 IVPASS = IVPASS + 1 06390204 WRITE (I02,80002) IVTNUM 06400204 GO TO 0821 06410204 20810 IVFAIL = IVFAIL + 1 06420204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06430204 0821 CONTINUE 06440204 C 06450204 C TEST 82 AND TEST 83 VERIFY THE COLLATING SEQUENCE FOR DIGITS 06460204 C USING THE ICHAR INTRINSIC FUNCTION. 06470204 C 06480204 C 06490204 C **** FCVS PROGRAM 204 - TEST 082 **** 06500204 C 06510204 C 06520204 IVTNUM = 82 06530204 IF (ICZERO) 30820, 0820, 30820 06540204 0820 CONTINUE 06550204 IVCOMP = 1 06560204 IVCORR = 30 06570204 IF (ICHAR('0') .LT. ICHAR('1')) IVCOMP = IVCOMP *2 06580204 IF (ICHAR('1') .LT. ICHAR('5')) IVCOMP = IVCOMP * 3 06590204 IF (ICHAR('5') .LT. ICHAR('9')) IVCOMP = IVCOMP * 5 06600204 40820 IF (IVCOMP - 30) 20820, 10820, 20820 06610204 30820 IVDELE = IVDELE + 1 06620204 WRITE (I02,80000) IVTNUM 06630204 IF (ICZERO) 10820, 0831, 20820 06640204 10820 IVPASS = IVPASS + 1 06650204 WRITE (I02,80002) IVTNUM 06660204 GO TO 0831 06670204 20820 IVFAIL = IVFAIL + 1 06680204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06690204 0831 CONTINUE 06700204 C 06710204 C **** FCVS PROGRAM 204 - TEST 083 **** 06720204 C 06730204 C 06740204 IVTNUM = 83 06750204 IF (ICZERO) 30830, 0830, 30830 06760204 0830 CONTINUE 06770204 IVON01 = 0 06780204 IVON02 = 0 06790204 IVCOMP = 0 06800204 IVCORR = 9 06810204 DO 832, I=1,9 06820204 J = I + 1 06830204 IVON01 = ICHAR(CATN13(J)) 06840204 IVON02 = ICHAR(CATN13(I)) 06850204 IF (IVON02 .LT. IVON01) IVCOMP = IVCOMP + 1 06860204 832 CONTINUE 06870204 40830 IF (IVCOMP -9) 20830, 10830, 20830 06880204 30830 IVDELE = IVDELE + 1 06890204 WRITE (I02,80000) IVTNUM 06900204 IF (ICZERO) 10830, 0841, 20830 06910204 10830 IVPASS = IVPASS + 1 06920204 WRITE (I02,80002) IVTNUM 06930204 GO TO 0841 06940204 20830 IVFAIL = IVFAIL + 1 06950204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06960204 0841 CONTINUE 06970204 C 06980204 C **** FCVS PROGRAM 204 - TEST 084 **** 06990204 C 07000204 C TEST 84 VERIFIES THAT BLANK IS LESS THAN THE LETTER A AND BLANK07010204 C IS LESS THAN THE DIGIT ZERO. THE INTRINSIC FUNCTION ICHAR IS 07020204 C USED IN THIS TEST. 07030204 C 07040204 IVTNUM = 84 07050204 IF (ICZERO) 30840, 0840, 30840 07060204 0840 CONTINUE 07070204 IVCOMP = 1 07080204 IVCORR = 6 07090204 IF (ICHAR(' ') .LT. ICHAR('A')) IVCOMP = IVCOMP * 2 07100204 IF (ICHAR(' ') .LT. ICHAR('0')) IVCOMP = IVCOMP * 3 07110204 40840 IF (IVCOMP - 6) 20840, 10840, 20840 07120204 30840 IVDELE = IVDELE + 1 07130204 WRITE (I02,80000) IVTNUM 07140204 IF (ICZERO) 10840, 0851, 20840 07150204 10840 IVPASS = IVPASS + 1 07160204 WRITE (I02,80002) IVTNUM 07170204 GO TO 0851 07180204 20840 IVFAIL = IVFAIL + 1 07190204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 07200204 0851 CONTINUE 07210204 C 07220204 C **** FCVS PROGRAM 204 - TEST 085 **** 07230204 C 07240204 C TEST 85 VERIFIES THAT THE DIGITS AND LETTERS ARE NOT INTERMIXED07250204 C IN THE COLLATING SEQUENCE. THE ICHAR INTRINSIC FUNCTION IS USED 07260204 C TO VERIFY THAT EITHER ALL OF THE DIGITS PRECEDE A OR ALL OF THE 07270204 C DIGITS FOLLOW Z. 07280204 C 07290204 IVTNUM = 85 07300204 IF (ICZERO) 30850, 0850, 30850 07310204 0850 CONTINUE 07320204 IVCOMP = 0 07330204 IVCORR = 10 07340204 IF (ICHAR('0') .NE. ICHAR('A')) GO TO 852 07350204 IVCOMP = 111 07360204 GO TO 40850 07370204 852 IF (ICHAR('0') .GT. ICHAR('A')) GO TO 853 07380204 C 07390204 C ZERO IS LESS THAN LETTER A ACCORDING TO ICHAR INTRINSIC 07400204 C FUNCTION VALUE. THUS, THE ICHAR VALUE FOR ALL DIGITS MUST BE 07410204 C LESS THAN ICHAR VALUE FOR LETTER A. 07420204 C 07430204 DO 854, I=1,10 07440204 IF (ICHAR(CATN13(I)) .LT. ICHAR('A')) IVCOMP = IVCOMP + 1 07450204 854 CONTINUE 07460204 GO TO 40850 07470204 C 07480204 C ZERO IS GREATER THAN LETTER A ACCORDING TO ICHAR INTRINSIC 07490204 C FUNCTION VALUE. THUS, THE ICHAR VALUE FOR ALL DIGITS MUST BE 07500204 C GREATER THAN ICHAR VALUE FOR LETTER Z. 07510204 C 07520204 853 DO 855, I=1,10 07530204 IF (ICHAR(CATN13(I)).GT. ICHAR('Z')) IVCOMP = IVCOMP + 1 07540204 855 CONTINUE 07550204 40850 IF (IVCOMP - 10) 20850, 10850, 20850 07560204 30850 IVDELE = IVDELE + 1 07570204 WRITE (I02,80000) IVTNUM 07580204 IF (ICZERO) 10850, 0861, 20850 07590204 10850 IVPASS = IVPASS + 1 07600204 WRITE (I02,80002) IVTNUM 07610204 GO TO 0861 07620204 20850 IVFAIL = IVFAIL + 1 07630204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 07640204 0861 CONTINUE 07650204 C 07660204 C **** FCVS PROGRAM 204 - TEST 086 **** 07670204 C 07680204 C THE ARRAY IAON11 IS SET EQUAL TO THE ICHAR INTRINSIC FUNCTION07690204 C VALUE OF THE CORRESPONDING ELEMENT IN THE CATN11 ARRAY. THE 07700204 C IAON11 ARRAY IS THEN SORTED IN ASCENDING ORDER, AND ENTRIES IN 07710204 C THE CATN11 ARRAY ARE ARRANGED ACCORDING TO THE ASCENDING SORT 07720204 C ORDER IN IAON11. THE RESULTING ORDER OF THE CATN11 ARRAY GIVES 07730204 C THE PROCESSOR'S COLLATING SEQUENCE FOR THE FORTRAN SUBSET LANGUAGE07740204 C CHARACTER SET. THE CATN11 ARRAY IS PRINTED AND MUST BE VISUALLY 07750204 C CHECKED TO DETERMINE IF THE COLLATING SEQUENCE RULES ARE FOLLOWED 07760204 C BY THE COMPILER. 07770204 C 07780204 IVTNUM = 86 07790204 IF (ICZERO) 30860, 0860, 30860 07800204 0860 CONTINUE 07810204 IVCOMP = 0 07820204 C 07830204 C INITIALIZE IAON11 TO ZERO. 07840204 DO 862 I=1,47 07850204 IAON11(I) = 0 07860204 862 CONTINUE 07870204 C 07880204 C PLACE ICHAR INTRINSIC VALUE IN IAON11. 07890204 C 07900204 DO 863, I= 1,47 07910204 IAON11(I) = ICHAR(CATN11(I)) 07920204 863 CONTINUE 07930204 C 07940204 C SORT FORTRAN CHARACTERS ACCORDING TO THEIR POSITION IN THE 07950204 C COLLATING SEQUENCE. 07960204 C 07970204 DO 864, I=1,46 07980204 J=I 07990204 N = I + 1 08000204 DO 865 K = N,47 08010204 IF (IAON11(J) .LT. IAON11(K)) GO TO 865 08020204 J=K 08030204 865 CONTINUE 08040204 IVON01 = IAON11(J) 08050204 IAON11(J)= IAON11(I) 08060204 IAON11(I)= IVON01 08070204 CVTN01 = CATN11(J) 08080204 CATN11(J) = CATN11(I) 08090204 CATN11(I) = CVTN01 08100204 864 CONTINUE 08110204 WRITE (I02, 866) CATN11 08120204 WRITE (I02, 867) IAON11 08130204 866 FORMAT (3X,'FORTRAN CHARACTER SET IN ASCENDING ORDER',3X,/ 08140204 1 3X, 'VISUAL VERIFICATION REQUIRED' //,3X, 12(A1,3X)/ 08150204 2 3X, 12(A1,3X)/ 3X, 12(A1,3X)/ 3X, 11(A1,3X)) 08160204 867 FORMAT ( 3X/3X, 'ICHAR INTRINSIC FUNCTION VALUES FOR FORTRAN ', 08170204 1 'CHARACTER SET'// 3X, 12I4/ 3X, 12I4/ 3X, 12I4/ 08180204 2 3X,11I4//) 08190204 IVCOMP = 1 08200204 IVCORR = 1 08210204 40860 IF (IVCOMP - 1) 20860, 10860, 20860 08220204 30860 IVDELE = IVDELE + 1 08230204 WRITE (I02,80000) IVTNUM 08240204 IF (ICZERO) 10860, 0871, 20860 08250204 10860 IVPASS = IVPASS + 1 08260204 WRITE (I02,80002) IVTNUM 08270204 GO TO 0871 08280204 20860 IVFAIL = IVFAIL + 1 08290204 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 08300204 0871 CONTINUE 08310204 C 08320204 C 08330204 C WRITE OUT TEST SUMMARY 08340204 C 08350204 WRITE (I02,90004) 08360204 WRITE (I02,90014) 08370204 WRITE (I02,90004) 08380204 WRITE (I02,90000) 08390204 WRITE (I02,90004) 08400204 WRITE (I02,90020) IVFAIL 08410204 WRITE (I02,90022) IVPASS 08420204 WRITE (I02,90024) IVDELE 08430204 STOP 08440204 90001 FORMAT (" ",24X,"FM204") 08450204 90000 FORMAT (" ",20X,"END OF PROGRAM FM204" ) 08460204 C 08470204 C FORMATS FOR TEST DETAIL LINES 08480204 C 08490204 80000 FORMAT (" ",4X,I5,6X,"DELETED") 08500204 80002 FORMAT (" ",4X,I5,7X,"PASS") 08510204 80010 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 08520204 80012 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 08530204 80018 FORMAT (" ",4X,I5,7X,"FAIL",2X,A14,1X,A14) 08540204 C 08550204 C FORMAT STATEMENTS FOR PAGE HEADERS 08560204 C 08570204 90002 FORMAT ("1") 08580204 90004 FORMAT (" ") 08590204 90006 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 08600204 90008 FORMAT (" ",21X,"VERSION 2.1" ) 08610204 90010 FORMAT (" ",8X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 08620204 90012 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL",5X,"COMPUTED",8X,"CORRECT") 08630204 90014 FORMAT (" ",5X,"----------------------------------------------" ) 08640204 90016 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 08650204 C 08660204 C FORMAT STATEMENTS FOR RUN SUMMARY 08670204 C 08680204 90020 FORMAT (" ",19X,I5," TESTS FAILED" ) 08690204 90022 FORMAT (" ",19X,I5," TESTS PASSED" ) 08700204 90024 FORMAT (" ",19X,I5," TESTS DELETED" ) 08710204 END 08720204