GET_CP_CONVERT_TABLE
GET_CP_CONVERT_TABLE 動詞は、文字列を移動元のコード ページから移動先のコード ページに変換するための 256 バイトの変換テーブルを作成して返します。
次の構造体に、GET_CP_CONVERT_TABLE 動詞で使用される Verb 制御ブロック (VCB) を示します。
構文
struct get_cp_convert_table {
unsigned short opcode;
unsigned char opext;
unsigned char reserv2;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char reserv3[8];
unsigned short source_cp;
unsigned short target_cp;
unsigned char FAR * conv_tbl_addr;
unsigned char char_not_fnd;
unsigned char substitute_char;
};
メンバー
opcode
指定されたパラメーター。 操作コードを識別する動詞、SV_GET_CP_CONVERT_TABLE。
opext
予約済みフィールド。
reserv2
予約済みフィールド。
primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるプライマリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。
secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。
reserv3
予約済みフィールド。
source_cp
指定されたパラメーター。 文字の変換元のソース コード ページを指定します。 許可されるコード ページ (10 進値) は次のとおりです。
ASCII 437、850、860、863、865
EBCDIC 037、273、277、278、280、284、285、297、500
65280 から 65535 の範囲のユーザー定義コード ページも許可されます。
ASCII コード ページは、PC コード ページと呼ばれることもあります。EBCDIC コード ページは、ホスト コード ページと呼ばれることもあります。
target_cp
指定されたパラメーター。 文字の変換先のターゲット コード ページを指定します。 許可されるコード ページについては、 source_cp の前の定義を参照してください。
conv_tbl_addr
指定されたパラメーター。 256 バイト変換テーブルを格納するバッファーのアドレスを指定します。 バッファーは書き込み可能なセグメントに含まれていなければならず、テーブルを格納するのに十分な長さである必要があります。
char_not_fnd
指定されたパラメーター。 ソース コード ページの文字がターゲット コード ページに存在しない場合に実行するアクションを指定します。
SV_ROUND_TRIP を使用して、各ソース コード ページ文字の変換テーブルに一意の値を格納します。
SV_SUBSTITUTE を使用して、代替文字 (substitute_char で指定) を変換テーブルに格納します。
substitute_char
指定されたパラメーター。 ソース コード ページの文字がターゲット コード ページに同等のものがない場合に、変換テーブルに格納する文字を指定します。
リターン コード
SV_OK
プライマリ リターン コード。動詞は正常に実行されました。
SV_PARAMETER_CHECK
プライマリ リターン コード。パラメーター エラーのため、動詞は実行されませんでした。
SV_INVALID_CHAR_NOT_FOUND
セカンダリ リターン コード。char_not_fnd パラメーターに無効な値が含まれていました。
SV_INVALID_DATA_SEGMENT
セカンダリ リターン コード。変換テーブルに指定された 256 バイトの領域がセグメント境界を超えて拡張されたか、セグメントが書き込み可能ではありませんでした。
SV_INVALID_SOURCE_CODE_PAGE
セカンダリ リターン コード。source_cp で指定されたコード ページはサポートされていません。
SV_INVALID_TARGET_CODE_PAGE
セカンダリ リターン コード。target_cp で指定されたコード ページはサポートされていません。
SV_COMM_SUBSYSTEM_NOT_LOADED
プライマリ リターン コード。動詞の処理中に、必要なコンポーネントを読み込めなかったか、終了できませんでした。 そのため、通信を行うことができませんでした。 是正措置については、システム管理者に問い合わせてください。
SV_INVALID_VERB
プライマリ リターン コード。opcode パラメーターが、どの動詞の操作コードとも一致しませんでした。 動詞は実行されませんでした。
SV_INVALID_VERB_SEGMENT
プライマリ リターン コード。VCB がデータ セグメントの終わりを越えています。
SV_UNEXPECTED_DOS_ERROR
プライマリ リターン コード。次のいずれかの条件が発生しました。
Microsoft® Windows® システムで、動詞の処理中にエラーが発生しました。 オペレーティング システムのリターン コードが、セカンダリ リターン コード経由で返されました。 問題が解決しない場合は、システム管理者に是正措置について問い合わせてください。
より一般的な Windows PostMessage 関数呼び出しではなく、Windows SendMessage 関数呼び出しを発行している別のアプリケーションによって呼び出されたメッセージ ループから、CSV が発行されました。 動詞処理を行うことはできません。
SendMessage によってアプリケーションが呼び出されたときに CSV が発行されました。 アプリケーションが SendMessage で呼び出されているかどうかを確認するには、InSendMessage Windows API 関数呼び出しを使用します。
解説
タイプ A 文字セットは、次で構成されます。
- 大文字。
- 0 ~ 9 の数字。
- 特殊文字 $、#、@、スペース。
この文字セットは、システム指定のタイプ A 変換テーブルでサポートされます。
ソース文字列の最初の文字は、大文字または特殊文字 $、#、または @である必要があります。 スペースは、末尾の位置でのみ許可されます。 方向が ASCII から EBCDIC の場合、小文字の ASCII 文字は、大文字の EBCDIC 文字に変換されます。
タイプ AE 文字セットは、次で構成されます。
- 大文字。
- 小文字。
- 0 ~ 9 の数字。
- 特殊文字 $、#、@、ピリオド、スペース。
この文字セットは、システム指定のタイプ AE 変換テーブルでサポートされます。
ソース文字列の最初の文字には、スペースを除く文字セット内の任意の文字を指定できます。
変換時に、埋め込まれた空白 (最初の位置の空白を含む) は 0x00 に変換されます。 このような変換は完了しますが、CONVERSION_ERROR はセカンダリ リターン コードとして返されます。これは、CSV ライブラリが指定されたデータに対して元に戻すことができない変換を完了したことを示します。
Windows の場合、COMTBLG の説明は、 \SnaBase\Parameters\Client の下にある Windows レジストリを指している必要があります。 OS/2 オペレーティング システムの場合、テーブルを含むディレクトリとファイルを環境変数 COMTBLG で指定する必要があります。 (ファイルが見つからない場合、システムは SV_TABLE_ERROR パラメーター チェックを返します。)。
char_not_fnd の SV_ROUND_TRIP 値は、同じ 2 つのコード ページ間で逆方向に変換する 2 番目の変換テーブルを作成する場合にのみ役立ちます。 両方の変換テーブルをビルドするときに SV_ROUND_TRIP 値を指定すると、あるコード ページから別のコード ページに変換されてから元に戻される文字は変更されません。
char_not_fnd に SV_SUBSTITUTE 値を使用する場合、変換された文字列を元のコード ページに変換し直しても、必ずしも元の文字列が再作成されるとは限りません。
char_not_fnd が SV_SUBSTITUTE に設定されている場合にのみ、substitute_char を使用してください。
変換テーブルに格納されている値は、文字に関連付けられている ASCII 値です。 テーブルを ASCII から EBCDIC への変換に使用する場合、変換された文字列に表示される文字は、ASCII ではなく、数値 EBCDIC 値に関連付けられた文字になります。
たとえば、ASCII から EBCDIC への変換テーブルを作成するときにアンダースコア () 文字 (ASCII 値 F6) を指定すると、変換された文字列に表示される文字は 6 になり、EBCDIC の値 F6 に関連付けられた文字になります。 ASCII から EBCDIC への変換テーブルの代替文字として \ 文字を使用するには、実際の文字ではなく、値 E1 (EBCDIC の _ 文字に関連付けられた値) を指定する必要があります。
コード ページは、特定の ASCII 値または EBCDIC 値を特定の文字に関連付けるテーブルです。 ソース コード ページの文字がターゲット コード ページに存在しない場合、変換された (ターゲット) 文字列は元の (ソース) 文字列とは異なります。