1 LOGICAL FUNCTION LSAME(CA,CB) 2* 3* -- LAPACK auxiliary routine (version 3.1) -- 4* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 5* November 2006 6* 7* .. Scalar Arguments .. 8 CHARACTER CA,CB 9* .. 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