1 LOGICAL FUNCTION LSAME( CA, CB ) 2* 3* -- LAPACK auxiliary routine (version 3.0) -- 4* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., 5* Courant Institute, Argonne National Lab, and Rice University 6* September 30, 1994 7* 8* .. Scalar Arguments .. 9 CHARACTER CA, CB 10* .. 11* 12* Purpose 13* ======= 14* 15* LSAME returns .TRUE. if CA is the same letter as CB regardless of 16* case. 17* 18* Arguments 19* ========= 20* 21* CA (input) CHARACTER*1 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* .. Executable Statements .. 34* 35* Test if the characters are equal 36* 37 LSAME = CA.EQ.CB 38 IF( LSAME ) 39 $ RETURN 40* 41* Now test for equivalence if both characters are alphabetic. 42* 43 ZCODE = ICHAR( 'Z' ) 44* 45* Use 'Z' rather than 'A' so that ASCII can be detected on Prime 46* machines, on which ICHAR returns a value with bit 8 set. 47* ICHAR('A') on Prime machines returns 193 which is the same as 48* ICHAR('A') on an EBCDIC machine. 49* 50 INTA = ICHAR( CA ) 51 INTB = ICHAR( CB ) 52* 53 IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN 54* 55* ASCII is assumed - ZCODE is the ASCII code of either lower or 56* upper case 'Z'. 57* 58 IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 59 IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 60* 61 ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN 62* 63* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or 64* upper case 'Z'. 65* 66 IF( INTA.GE.129 .AND. INTA.LE.137 .OR. 67 $ INTA.GE.145 .AND. INTA.LE.153 .OR. 68 $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 69 IF( INTB.GE.129 .AND. INTB.LE.137 .OR. 70 $ INTB.GE.145 .AND. INTB.LE.153 .OR. 71 $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 72* 73 ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN 74* 75* ASCII is assumed, on Prime machines - ZCODE is the ASCII code 76* plus 128 of either lower or upper case 'Z'. 77* 78 IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 79 IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 80 END IF 81 LSAME = INTA.EQ.INTB 82* 83* RETURN 84* 85* End of LSAME 86* 87 END 88