1
2# CHGLIB を移植するときの注意
3
4オリジナルのソースでは, コード系の依存性をなくすために大文字列と小文字
5列をデータ文で与えて互いの対応関係を調べている. このチェックはかなり時
6間を要するので, ASCII コード系においては第2のプログラムのように, また
7EBCDIC コード系においては第3のプログラムのように書き換えると速くなる.
8移植に際しては, 計算機のコード系を知った上で適切なものを選ぶこと.
9
10なお, このパッケージでは ASCII コード系に対応するものを標準としている.
11
12*-----------------------------------------------------------------------
13*     CHGLIB (ORIGINAL)
14*-----------------------------------------------------------------------
15*     CUPPER
16*-----------------------------------------------------------------------
17      SUBROUTINE CUPPER(CH)
18
19      CHARACTER CH*(*)
20
21      CHARACTER CUP*26,CLW*26
22
23      EXTERNAL  INDXCF
24
25      DATA      CUP/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
26      DATA      CLW/'abcdefghijklmnopqrstuvwxyz'/
27
28
29      LCH=LEN(CH)
30      DO 10 I=1,LCH
31        IDX=INDXCF(CLW,26,1,CH(I:I))
32        IF (IDX.NE.0) THEN
33          CH(I:I)=CUP(IDX:IDX)
34        END IF
35   10 CONTINUE
36
37      END
38*-----------------------------------------------------------------------
39*     CLOWER
40*-----------------------------------------------------------------------
41      SUBROUTINE CLOWER(CH)
42
43      CHARACTER CH*(*)
44
45      CHARACTER CUP*26,CLW*26
46
47      EXTERNAL  INDXCF
48
49      DATA      CUP/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
50      DATA      CLW/'abcdefghijklmnopqrstuvwxyz'/
51
52
53      LCH=LEN(CH)
54      DO 10 I=1,LCH
55        IDX=INDXCF(CUP,26,1,CH(I:I))
56        IF (IDX.NE.0) THEN
57          CH(I:I)=CLW(IDX:IDX)
58        END IF
59   10 CONTINUE
60
61      END
62*-----------------------------------------------------------------------
63*     CHGLIB FOR ASCII CODE
64*-----------------------------------------------------------------------
65*     CUPPER
66*-----------------------------------------------------------------------
67      SUBROUTINE CUPPER(CH)
68
69      CHARACTER CH*(*)
70
71
72      LCH=LEN(CH)
73      DO 10 I=1,LCH
74        IDX=ICHAR(CH(I:I))
75        IF (97.LE.IDX .AND. IDX.LE.122) THEN
76          CH(I:I)=CHAR(IDX-32)
77        END IF
78   10 CONTINUE
79
80      END
81*-----------------------------------------------------------------------
82*     CLOWER
83*-----------------------------------------------------------------------
84      SUBROUTINE CLOWER(CH)
85
86      CHARACTER CH*(*)
87
88
89      LCH=LEN(CH)
90      DO 10 I=1,LCH
91        IDX=ICHAR(CH(I:I))
92        IF (65.LE.IDX .AND. IDX.LE.90) THEN
93          CH(I:I)=CHAR(IDX+32)
94        END IF
95   10 CONTINUE
96
97      END
98*-----------------------------------------------------------------------
99*     CHGLIB FOR EBCDIC CODE (by K. Ishioka)
100*-----------------------------------------------------------------------
101*     CUPPER
102*-----------------------------------------------------------------------
103      SUBROUTINE CUPPER(CH)
104
105      CHARACTER CH*(*)
106      LOGICAL LIF
107
108
109      LCH=LEN(CH)
110      DO 10 I=1,LCH
111        IDX=ICHAR(CH(I:I))
112        LIF=    (129.LE.IDX .AND. IDX.LE.137)
113     &      .OR.(145.LE.IDX .AND. IDX.LE.153)
114     &      .OR.(162.LE.IDX .AND. IDX.LE.169)
115        IF(LIF) CH(I:I)=CHAR(IDX+64)
116   10 CONTINUE
117
118      END
119*-----------------------------------------------------------------------
120*     CLOWER
121*-----------------------------------------------------------------------
122      SUBROUTINE CLOWER(CH)
123
124      CHARACTER CH*(*)
125      LOGICAL LIF
126
127
128      LCH=LEN(CH)
129      DO 10 I=1,LCH
130        IDX=ICHAR(CH(I:I))
131        LIF=    (193.LE.IDX .AND. IDX.LE.201)
132     &      .OR.(209.LE.IDX .AND. IDX.LE.217)
133     &      .OR.(226.LE.IDX .AND. IDX.LE.233)
134        IF(LIF) CH(I:I)=CHAR(IDX-64)
135   10 CONTINUE
136
137      END
138