コードページユーザー出口

これまで、Adabas ではデフォルトの内部 EBCDIC/ASCII 変換テーブルが使用されていました。しかし、複雑なクライアント/サーバーシステムの特定変換テーブルに対して完全な柔軟性を提供するために、特殊なコードページユーザー出口もサポートされるようになりました。

Adabas ニュークリアスは、ユーザー出口がリモートノードから発行されたコマンドを処理するときにユーザー出口をコールします。ユーザー出口は、ノード名を含む構造へのポインタとともにコールされます(次の図を参照)。次に、ユーザー出口はユーザー作成のアルゴリズムを使用してどの変換テーブルを使用するかを決定し、ポインタをテーブルに返します。Adabas はこのテーブルを使用して変換を行います。

graphics/apxa01.png

環境変数 ADATRT は、ユーザーが適当なオプションで作成した共有ライブラリ(UNIX)またはダイナミックリンクライブラリ(Windows)の名前を保持します。拡張子 .txt を持つ単純なテキストファイルも使用できます(詳細については「コードページのサポート」を参照)。ユーザー関数のデフォルト名は `trt' ですが、次の例のように任意の名前を選択することもできます。

setenv ADATRT "$ADADATADIR/db100/adatrt.sl"   (UNIX C shell)
set ADATRT= %ADADATADIR%\db100\adatrt.dll     (Windows)

または

setenv ADATRT "adatrt.so my_trt"   (UNIX C shell)
set ADATRT=adatrt.dll my_trt            (Windows)

環境変数 ADATRT は、ニュークリアスやユーティリティの開始前に設定されている必要があります。定義されていないと、EBCDIC/ASCII 変換が必要な場合にはデフォルトの内部変換テーブルが使用されます。ADATRT が定義されていてもライブラリを正常にロードできない場合、ニュークリアスは起動フェーズ中に異常終了し、対応するエラーメッセージが発行されます。


関数インターフェイス

Format: unsigned char *trt (struct trt_entry *)

trt 構造

trt_node

基本入力は、現在 Adabas コールを発行しているノードの名前です。ノード名に基づいて、関数は適切なコードページテーブルを選択します。コードページテーブルが選択されたら、関数はテーブルへのポインタを返します。何も選択されない場合は、NULL ポインタが指定され、何も変換されないか、デフォルトの変換が行われます。

trt_ctype

この関数は、2 つの値のうちの 1 つとともにコールされます。TRT_INIT コールはニュークリアス/ユーティリティの起動時に実行され、このコールが成功した場合は NULL が返されます。TRT_CODE_PAGE コールには、関数が変換テーブルを選択できるようにノード名セットが含まれています。ADACMP または ADADCU ユーティリティから関数がコールされた場合、TRT_CODE_PAGE コールが 1 回実行され、ノード名が `adacmp' または `adadcu' になります。

trt_dbid

これによって、現在のデータベース番号が指定されます。複数のデータベース間で変換テーブル関数が共有される場合があるため、この処理が必要となります。

変換テーブルのレイアウト

変換テーブルは、512 バイト長である必要があります。前半はクライアントマシンアーキテクチャからサーバーアーキテクチャへの変換に使用され、後半の 256 バイトは逆変換に使用されます。

各テーブルは、実際に使用できる変換テーブルである必要があります。つまり、入力文字の値はテーブルに対するインデックスであり、対応するセルに格納されている文字が取得されます。

graphics/apxa02.png

ユーザーは、異種環境で要求される変換テーブルを制限無く使用できます。

コール規則

コードページの使用には、次の規則が適用されます。

  • 現在の Adabas コールがリモートノードから発行され、読み込みコマンドまたは更新コマンドである場合、ユーザー作成関数は常にコールされます。

  • ユーザー作成関数が(コードページに)ポインタを返した場合、これが変換に使用されます。変換されるのは、英数字(フォーマット A)データだけです。

  • ユーザー作成関数が空値を返し、リモートおよびローカルのアーキテクチャが同一の場合、変換は行われません。

  • ユーザー作成関数が NULL を返し、リモートアーキテクチャとローカルアーキテクチャが異なる場合、デフォルトの Adabas 変換テーブルを使用して変換が行われます。

コードページユーザー出口の作成

Adabas キットには、コードページユーザー出口用の対応する C ヘッダーファイルとサンプルソースファイルが含まれています。

UNIX プラットフォーム

構造体 trt_entry は、ファイル adauex.h に定義されます。これは $ADAPROGDIR/inc にあります。

コードページユーザー出口のためのサンプルソースファイル(ファイル名 adatrt.c)および対応する makefile は $ADAPROGDIR/examples/server にあります。

このユーザー出口例を構築するには、次のように入力します。

cd  $ADAPROGDIR/examples/server

make trt

ユーザー出口用の共有ライブラリは $ADAPROGDIR/examples/server に作成されます。

Windows プラットフォーム

構造体 trt_entry は、ファイル adauex.h に定義されます。これは、インストールディレクトリのサブディレクトリ "Adabas\inc" にあります。

コードページユーザー出口のためのサンプルソースファイル(ファイル名 adatrt.c)および対応する makefile はインストールディレクトリのサブディレクトリ "Adabas\examples\server" にあります。

このユーザー出口例を構築するには、次のように入力します。

cd  <インストールディレクトリ>\Adabas\examples\server

nmake trt

インストールディレクトリのサブディレクトリ "Adabas\examples\server" に作成されたユーザー出口の DLL。

デフォルトの変換テーブル

Adabas で使用されるデフォルトの変換テーブルは次のとおりです。

ASCII ISO-8 ビット(8859-1)から EBCDIC への変換

注意:
テーブルに含まれていない未定義文字は 0xFF に変換されます。

10 進値 ASCII 16 進値 ASCII 文字 EBCDIC 16 進値
0 0x00   0x00
1 0x01   0x01
2 0x02   0x02
3 0x03   0x03
4 0x04   0x37
5 0x05   0x2D
6 0x06   0x2E
7 0x07   0x2F
8 0x08   0x16
9 0x09   0x05
10 0x0A   0x25
11 0x0B   0x0B
12 0x0C   0x0C
13 0x0D   0x0D
14 0x0E   0x0E
15 0x0F   0x0F
16 0x10   0x10
17 0x11   0x11
18 0x12   0x12
19 0x13   0x13
20 0x14   0x3C
21 0x15   0x3D
22 0x16   0x32
23 0x17   0x26
24 0x18   0x18
25 0x19   0x19
26 0x1A   0x3F
27 0x1B   0x27
28 0x1C   0x1C
29 0x1D   0x1D
30 0x1E   0x1E
31 0x1F   0x1F
32 0x20 SP 0x40
33 0x21 ! 0x4F
34 0x22 " 0x7F
35 0x23 # 0x7B
36 0x24 $ 0x5B
37 0x25 % 0x6C
38 0x26 & 0x50
39 0x27 ' 0x7D
40 0x28 ( 0x4D
41 0x29 ) 0x5D
42 0x2A * 0x5C
43 0x2B + 0x4E
44 0x2C , 0x6B
45 0x2D - 0x60
46 0x2E . 0x4B
47 0x2F / 0x61
48 0x30 0 0xF0
49 0x31 1 0xF1
50 0x32 2 0xF2
51 0x33 3 0xF3
52 0x34 4 0xF4
53 0x35 5 0xF5
54 0x36 6 0xF6
55 0x37 7 0xF7
56 0x38 8 0xF8
57 0x39 9 0xF9
58 0x3A : 0x7A
59 0x3B ; 0x5E
60 0x3C < 0x4C
61 0x3D = 0x7E
62 0x3E > 0x6E
63 0x3F ? 0x6F
64 0x40 @ 0x7C
65 0x41 A 0xC1
66 0x42 B 0xC2
67 0x43 C 0xC3
68 0x44 D 0xC4
69 0x45 E 0xC5
70 0x46 F 0xC6
71 0x47 G 0xC7
72 0x48 H 0xC8
73 0x49 I 0xC9
74 0x4A J 0xD1
75 0x4B K 0xD2
76 0x4C L 0xD3
77 0x4D M 0xD4
78 0x4E X 0xD5
79 0x4F O 0xD6
80 0x50 P 0xD7
81 0x51 Q 0xD8
82 0x52 R 0xD9
83 0x53 S 0xE2
84 0x54 T 0xE3
85 0x55 U 0xE4
86 0x56 V 0xE5
87 0x57 W 0xE6
88 0x58 X 0xE7
89 0x59 0xE8
90 0x5A Z 0xE9
91 0x5B [ 0x4A
92 0x5C \ 0xE0
93 0x5D ] 0x5A
94 0x5E ^ 0x5F
95 0x5F _ 0x6D
96 0x60 ` 0x79
97 0x61 a 0x81
98 0x62 b 0x82
99 0x63 c 0x83
100 0x64 d 0x84
101 0x65 e 0x85
102 0x66 f 0x86
103 0x67 g 0x87
104 0x68 h 0x88
105 0x69 i 0x89
106 0x6A j 0x91
107 0x6B k 0x92
108 0x6C l 0x93
109 0x6D m 0x94
110 0x6E n 0x95
111 0x6F o 0x96
112 0x70 p 0x97
113 0x71 q 0x98
114 0x72 r 0x99
115 0x73 s 0xA2
116 0x74 t 0xA3
117 0x75 u 0xA4
118 0x76 v 0xA5
119 0x77 w 0xA6
120 0x78 x 0xA7
121 0x79 y 0xA8
122 0x7A z 0x9A
123 0x7B { 0xC0
124 0x7C | 0x6A
125 0x7D } 0xD0
126 0x7E ~ 0xA1
127 0x7F   0x07
196 0xC4 Ä 0x4A
214 0xD6 Ö 0xE0
220 0xDC Ü 0x5A
223 0xDF ß 0xA1
228 0xE4 ä 0xC0
246 0xF6 ö 0x6A
252 0xFc ü 0xD0

EBCDIC から ASCII ISO-8 ビット(8859-1)への変換

注意:
テーブルに含まれていない未定義文字は 0x7F に変換されます。

10 進値 EBCDIC 16 進値 EBCDIC 文字 ASCII 16 進値
0 0x00   0x00
1 0x01   0x01
2 0x02   0x02
3 0x03   0x03
5 0x05   0x09
7 0x07   0x7F
11 0x0B   0x0B
12 0x0C   0x0C
13 0x0D   0x0D
14 0x0E   0x0E
15 0x0F   0x0F
16 0x10   0x10
17 0x11   0x11
18 0x12   0x12
19 0x13   0x13
22 0x16   0x08
24 0x18   0x18
25 0x19   0x19
28 0x1C   0x1C
29 0x1D   0x1D
30 0x1E   0x1E
31 0x1F   0x1F
37 0x25   0x0A
38 0x26   0x17
39 0x27   0x1B
45 0x2D   0x05
46 0x2E   0x06
47 0x2F   0x07
50 0x32   0x16
55 0x37   0x04
60 0x3C   0x14
61 0x3D   0x15
63 0x3F   0x1A
64 0x40 SP 0x20
74 0x4A Ä 0xC4
75 0x4B . 0x2E
76 0x4C < 0x3C
77 0x4D ( 0x28
78 0x4E + 0x2B
79 0x4F ! 0x21
80 0x50 & 0x26
90 0x5A Ü 0xDC
91 0x5B $ 0x24
92 0x5C * 0x2A
93 0x5D ) 0x29
94 0x5E ; 0x3B
95 0x5F ^ 0x5E
96 0x60   0x2D
97 0x61 / 0x2F
106 0x6A ö 0xF6
107 0x6B , 0x2C
108 0x6C % 0x25
109 0x6D _ 0x5F
110 0x6E > 0x3E
111 0x6F ? 0x3F
121 0x79 ` 0x60
122 0x7A : 0x3A
123 0x7B # 0x23
124 0x7C @ 0x40
125 0x7D ' 0x27
126 0x7E = 0x3D
127 0x7F " 0x22
129 0x81 a 0x61
130 0x82 b 0x62
131 0x83 c 0x63
132 0x84 d 0x64
133 0x85 e 0x65
134 0x86 f 0x66
135 0x87 g 0x67
136 0x88 h 0x68
137 0x89 i 0x69
145 0x91 j 0x6A
146 0x92 k 0x6B
147 0x93 l 0x6C
148 0x94 m 0x6D
149 0x95 n 0x6E
150 0x96 o 0x6F
151 0x97 p 0x70
152 0x98 q 0x71
153 0x99 r 0x72
161 0xA1 ß 0xDF
162 0xA2 s 0x73
163 0xA3 t 0x74
164 0xA4 u 0x75
165 0xA5 v 0x76
166 0xA6 w 0x77
167 0xA7 x 0x78
168 0xA8 y 0x79
169 0xA9 z 0x7A
192 0xC0 ä 0xE4
193 0xC1 A 0x41
194 0xC2 B 0x42
195 0xC3 C 0x43
196 0xC4 D 0x44
197 0xC5 E 0x45
198 0xC6 F 0x46
199 0xC7 G 0x47
200 0xC8 H 0x48
201 0xC9 I 0x49
208 0xD0 ü 0xFC
209 0xD1 J 0x4A
210 0xD2 K 0x4B
211 0xD3 L 0x4C
212 0xD4 M 0x4D
213 0xD5 X 0x4E
214 0xD6 O 0x4F
215 0xD7 P 0x50
216 0xD8 Q 0x51
217 0xD9 R 0x52
224 0xE0 Ö 0xFC
226 0xE2 S 0x53
227 0xE3 T 0x54
228 0xE4 U 0x55
229 0xE5 V 0x56
230 0xE6 W 0x57
231 0xE7 X 0x58
232 0xE8 0x59
233 0xE9 Z 0x5A
240 0xF0 0 0x30
241 0xF1 1 0x31
242 0xF2 2 0x32
243 0xF3 3 0x33
244 0xF4 4 0x34
245 0xF5 5 0x35
246 0xF6 6 0x36
247 0xF7 7 0x37
248 0xF8 8 0x38
249 0xF9 9 0x39
250 0xFA   0xFA
255 0xFF   0xFF