01: LOGICAL FUNCTION LSAME(CA,CB) 02: * 03: * -- LAPACK auxiliary routine (version 3.1) -- 04: * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 05: * November 2006 06: * 07: * .. Scalar Arguments .. 08: CHARACTER CA,CB 09: * .. 10: * 11: * Purpose 12: * ======= 13: * 14: * LSAME returns .TRUE. if CA is the same letter as CB regardless of 15: * case. 16: * 17: * Arguments 18: * ========= 19: * 20: * CA (input) CHARACTER*1 21: * 22: * CB (input) CHARACTER*1 23: * CA and CB specify the single characters to be compared. 24: * 25: * ===================================================================== 26: * 27: * .. Intrinsic Functions .. 28: INTRINSIC ICHAR 29: * .. 30: * .. Local Scalars .. 31: INTEGER INTA,INTB,ZCODE 32: * .. 33: * 34: * Test if the characters are equal 35: * 36: LSAME = CA .EQ. CB 37: IF (LSAME) RETURN 38: * 39: * Now test for equivalence if both characters are alphabetic. 40: * 41: ZCODE = ICHAR('Z') 42: * 43: * Use 'Z' rather than 'A' so that ASCII can be detected on Prime 44: * machines, on which ICHAR returns a value with bit 8 set. 45: * ICHAR('A') on Prime machines returns 193 which is the same as 46: * ICHAR('A') on an EBCDIC machine. 47: * 48: INTA = ICHAR(CA) 49: INTB = ICHAR(CB) 50: * 51: IF (ZCODE.EQ.90 .OR. ZCODE.EQ.122) THEN 52: * 53: * ASCII is assumed - ZCODE is the ASCII code of either lower or 54: * upper case 'Z'. 55: * 56: IF (INTA.GE.97 .AND. INTA.LE.122) INTA = INTA - 32 57: IF (INTB.GE.97 .AND. INTB.LE.122) INTB = INTB - 32 58: * 59: ELSE IF (ZCODE.EQ.233 .OR. ZCODE.EQ.169) THEN 60: * 61: * EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or 62: * upper case 'Z'. 63: * 64: IF (INTA.GE.129 .AND. INTA.LE.137 .OR. 65: + INTA.GE.145 .AND. INTA.LE.153 .OR. 66: + INTA.GE.162 .AND. INTA.LE.169) INTA = INTA + 64 67: IF (INTB.GE.129 .AND. INTB.LE.137 .OR. 68: + INTB.GE.145 .AND. INTB.LE.153 .OR. 69: + INTB.GE.162 .AND. INTB.LE.169) INTB = INTB + 64 70: * 71: ELSE IF (ZCODE.EQ.218 .OR. ZCODE.EQ.250) THEN 72: * 73: * ASCII is assumed, on Prime machines - ZCODE is the ASCII code 74: * plus 128 of either lower or upper case 'Z'. 75: * 76: IF (INTA.GE.225 .AND. INTA.LE.250) INTA = INTA - 32 77: IF (INTB.GE.225 .AND. INTB.LE.250) INTB = INTB - 32 78: END IF 79: LSAME = INTA .EQ. INTB 80: * 81: * RETURN 82: * 83: * End of LSAME 84: * 85: END 86: