
# CHGLIB を移植するときの注意

オリジナルのソースでは, コード系の依存性をなくすために大文字列と小文字
列をデータ文で与えて互いの対応関係を調べている. このチェックはかなり時
間を要するので, ASCII コード系においては第2のプログラムのように, また 
EBCDIC コード系においては第3のプログラムのように書き換えると速くなる. 
移植に際しては, 計算機のコード系を知った上で適切なものを選ぶこと.

なお, このパッケージでは ASCII コード系に対応するものを標準としている. 

*-----------------------------------------------------------------------
*     CHGLIB (ORIGINAL)
*-----------------------------------------------------------------------
*     CUPPER
*-----------------------------------------------------------------------
      SUBROUTINE CUPPER(CH)
 
      CHARACTER CH*(*)
 
      CHARACTER CUP*26,CLW*26

      EXTERNAL  INDXCF
 
      DATA      CUP/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
      DATA      CLW/'abcdefghijklmnopqrstuvwxyz'/
 
 
      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=INDXCF(CLW,26,1,CH(I:I))
        IF (IDX.NE.0) THEN
          CH(I:I)=CUP(IDX:IDX)
        END IF
   10 CONTINUE
 
      END
*-----------------------------------------------------------------------
*     CLOWER
*-----------------------------------------------------------------------
      SUBROUTINE CLOWER(CH)
 
      CHARACTER CH*(*)
 
      CHARACTER CUP*26,CLW*26

      EXTERNAL  INDXCF
 
      DATA      CUP/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
      DATA      CLW/'abcdefghijklmnopqrstuvwxyz'/
 
 
      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=INDXCF(CUP,26,1,CH(I:I))
        IF (IDX.NE.0) THEN
          CH(I:I)=CLW(IDX:IDX)
        END IF
   10 CONTINUE
 
      END
*-----------------------------------------------------------------------
*     CHGLIB FOR ASCII CODE
*-----------------------------------------------------------------------
*     CUPPER
*-----------------------------------------------------------------------
      SUBROUTINE CUPPER(CH)

      CHARACTER CH*(*)


      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=ICHAR(CH(I:I))
        IF (97.LE.IDX .AND. IDX.LE.122) THEN
          CH(I:I)=CHAR(IDX-32)
        END IF
   10 CONTINUE

      END
*-----------------------------------------------------------------------
*     CLOWER
*-----------------------------------------------------------------------
      SUBROUTINE CLOWER(CH)

      CHARACTER CH*(*)


      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=ICHAR(CH(I:I))
        IF (65.LE.IDX .AND. IDX.LE.90) THEN
          CH(I:I)=CHAR(IDX+32)
        END IF
   10 CONTINUE

      END
*-----------------------------------------------------------------------
*     CHGLIB FOR EBCDIC CODE (by K. Ishioka)
*-----------------------------------------------------------------------
*     CUPPER
*-----------------------------------------------------------------------
      SUBROUTINE CUPPER(CH)
 
      CHARACTER CH*(*)
      LOGICAL LIF
 
 
      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=ICHAR(CH(I:I))
        LIF=    (129.LE.IDX .AND. IDX.LE.137)
     &      .OR.(145.LE.IDX .AND. IDX.LE.153)
     &      .OR.(162.LE.IDX .AND. IDX.LE.169)
        IF(LIF) CH(I:I)=CHAR(IDX+64)
   10 CONTINUE
 
      END
*-----------------------------------------------------------------------
*     CLOWER
*-----------------------------------------------------------------------
      SUBROUTINE CLOWER(CH)
 
      CHARACTER CH*(*)
      LOGICAL LIF
 
 
      LCH=LEN(CH)
      DO 10 I=1,LCH
        IDX=ICHAR(CH(I:I))
        LIF=    (193.LE.IDX .AND. IDX.LE.201)
     &      .OR.(209.LE.IDX .AND. IDX.LE.217)
     &      .OR.(226.LE.IDX .AND. IDX.LE.233)
        IF(LIF) CH(I:I)=CHAR(IDX-64)
   10 CONTINUE
 
      END
