私はこのライブラリの書き方が悪いと考えています。COBOL で使用する低レベルのライブラリを作成する場合は、COBOL で操作しやすいデータ型を選択する必要があります。この場合、ロングワードを表す COMP 項目 (S9(9) COMP) の方が、COBOL での処理が容易になります。
これらの値を一緒に OR 演算して下位レベルのライブラリを呼び出すと仮定すると、それらを一緒に加算してフラグ値を取得できます。これは、各定数に 1 つのビット セットがあるため機能します。
定数を一時的な再定義領域に移動するか、COBOL の型安全性の欠如を利用して、操作のためにそれらをサブプログラムに渡すことができます。以下は VMS COBOL で機能します。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLEOR.
DATA DIVISION.
WORKING-STORAGE SECTION.
*
* OPTVAL field for IPV6_ADDR_PREFERENCES_FLAGS
*
01 IPV6-ADDR-PREFERENCES-FLAGS PIC X(4).
*
* IPV6_ADDR_PREFERENCES_FLAGS mappings
*
77 IPV6-PREFER-SRC-HOME PIC X(4) VALUE X'00000001'.
77 IPV6-PREFER-SRC-COA PIC X(4) VALUE X'00000002'.
77 IPV6-PREFER-SRC-TMP PIC X(4) VALUE X'00000004'.
77 IPV6-PREFER-SRC-PUBLIC PIC X(4) VALUE X'00000008'.
77 IPV6-PREFER-SRC-CGA PIC X(4) VALUE X'00000010'.
77 IPV6-PREFER-SRC-NONCGA PIC X(4) VALUE X'00000020'.
PROCEDURE DIVISION.
1.
CALL "BINARYOR"
USING IPV6-PREFER-SRC-HOME
IPV6-PREFER-SRC-COA
IPV6-ADDR-PREFERENCES-FLAGS.
CALL "BINARYOR"
USING IPV6-PREFER-SRC-PUBLIC
IPV6-ADDR-PREFERENCES-FLAGS
IPV6-ADDR-PREFERENCES-FLAGS.
IF IPV6-ADDR-PREFERENCES-FLAGS NOT = X'0000000B'
DISPLAY "Failure"
END-IF.
END PROGRAM SAMPLEOR.
IDENTIFICATION DIVISION.
PROGRAM-ID. BINARYOR.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 ARG1 PIC S9(9) COMP.
01 ARG2 PIC S9(9) COMP.
01 RESULT PIC S9(9) COMP.
PROCEDURE DIVISION USING ARG1 ARG2 RESULT.
1.
ADD ARG1 TO ARG2 GIVING RESULT.
END PROGRAM BINARYOR.
これが機能しない場合は、COBOL プラットフォームのバイナリ項目の表現を調べて、正しい型を判断する必要があります。
私は、COBOLで(数十年前に)低レベルのことをたくさん(おそらく多すぎる)行ってきました。通常、あなたはそれを解決することができます。しかし、ある時点でそれは難しくなりすぎて、苦労する価値がなくなります。その時点で、ビットをいじるのにより適した言語 (C など) を呼び出すのが得策です。