Brian Silverman | 72890c2 | 2015-09-19 14:37:37 -0400 | [diff] [blame] | 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 |