Я бы посчитал эту библиотеку плохо написанной. Если вы собираетесь написать низкоуровневую библиотеку для использования в COBOL, вам следует выбрать типы данных, которыми COBOL легче манипулировать. В этом случае для элемента COBOL было бы проще справиться с элементом COMP, представляющим длинное слово (S9 (9) COMP).
Предполагая, что вы объединяете эти значения вместе для вызова библиотеки более низкого уровня, вы можете просто сложить их вместе, чтобы получить значения флага. Это работает, потому что для каждой константы установлен один бит.
Вы можете переместить константы во временную область переопределения или воспользоваться отсутствием безопасности типов в 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), который лучше подходит для смешивания битов.