Je considérerais cette bibliothèque mal écrit. Si vous voulez écrire une bibliothèque de bas niveau à utiliser par COBOL, vous devez choisir des types de données plus faciles à manipuler pour COBOL. Dans ce cas, un élément COMP représentant un mot long (S9 (9) COMP) serait plus facile à gérer pour COBOL.
En supposant que vous un OU ces valeurs ensemble pour faire un appel à une bibliothèque de niveau inférieur, vous pouvez simplement les ajouter ensemble pour obtenir les valeurs de drapeau. Cela fonctionne parce que chaque constante a un seul ensemble de bits.
Vous pouvez déplacer les constantes dans une zone temporaire de Redéfinit, ou profiter du manque de COBOL de sécurité de type et de les transmettre à un sous-programme pour l'opération. Ce qui suit travaillerait sur 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.
Si cela ne fonctionne pas, alors vous aurez besoin d'étudier votre représentation de la plate-forme COBOL d'éléments binaires pour élaborer les bons types.
Je l'ai fait beaucoup de (trop sans doute) les choses de niveau inférieur en COBOL (il y a des décennies). Habituellement, vous pouvez le résoudre. Mais à un moment donné, cela devient trop difficile et ne vaut pas la peine. À ce stade, il est utile de faire appel à un langage (comme C) qui est mieux adapté à la manipulation de bits.