Home | History | Annotate | Download | only in blas
      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