LOGICAL FUNCTION LSAME(CA,CB) ! ! -- LAPACK auxiliary routine (version 3.1) -- ! Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. ! November 2006 ! ! .. Scalar Arguments .. CHARACTER CA,CB ! .. ! ! Purpose ! ======= ! ! LSAME returns .TRUE. if CA is the same letter as CB regardless of ! case. ! ! Arguments ! ========= ! ! CA (input) CHARACTER*1 ! ! CB (input) CHARACTER*1 ! CA and CB specify the single characters to be compared. ! ! ===================================================================== ! ! .. Intrinsic Functions .. INTRINSIC ICHAR ! .. ! .. Local Scalars .. INTEGER INTA,INTB,ZCODE ! .. ! ! Test if the characters are equal ! LSAME = CA .EQ. CB IF (LSAME) RETURN ! ! Now test for equivalence if both characters are alphabetic. ! ZCODE = ICHAR('Z') ! ! Use 'Z' rather than 'A' so that ASCII can be detected on Prime ! machines, on which ICHAR returns a value with bit 8 set. ! ICHAR('A') on Prime machines returns 193 which is the same as ! ICHAR('A') on an EBCDIC machine. ! INTA = ICHAR(CA) INTB = ICHAR(CB) ! IF (ZCODE.EQ.90 .OR. ZCODE.EQ.122) THEN ! ! ASCII is assumed - ZCODE is the ASCII code of either lower or ! upper case 'Z'. ! IF (INTA.GE.97 .AND. INTA.LE.122) INTA = INTA - 32 IF (INTB.GE.97 .AND. INTB.LE.122) INTB = INTB - 32 ! ELSE IF (ZCODE.EQ.233 .OR. ZCODE.EQ.169) THEN ! ! EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or ! upper case 'Z'. ! IF (INTA.GE.129 .AND. INTA.LE.137 .OR. & INTA.GE.145 .AND. INTA.LE.153 .OR. & INTA.GE.162 .AND. INTA.LE.169) INTA = INTA + 64 IF (INTB.GE.129 .AND. INTB.LE.137 .OR. & INTB.GE.145 .AND. INTB.LE.153 .OR. & INTB.GE.162 .AND. INTB.LE.169) INTB = INTB + 64 ! ELSE IF (ZCODE.EQ.218 .OR. ZCODE.EQ.250) THEN ! ! ASCII is assumed, on Prime machines - ZCODE is the ASCII code ! plus 128 of either lower or upper case 'Z'. ! IF (INTA.GE.225 .AND. INTA.LE.250) INTA = INTA - 32 IF (INTB.GE.225 .AND. INTB.LE.250) INTB = INTB - 32 END IF LSAME = INTA .EQ. INTB ! ! RETURN ! ! End of LSAME ! END FUNCTION LSAME