You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.3 KiB

  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