Gnu COBOLとC言語との連携は比較的容易に実現できます。Gnu COBOL自体がCOBOLのソースコードをC言語に変換してからCコンパイラでコンパイルするというアーキテクチャで実現されていることも理由と思われます。
Cプログラムは普通にライブラリを作成する要領で作成できます。COBOLからはCALL文でサブルーチンを呼ぶのと同じです。文字列の扱いはCOBOL文字列をそのままCライブラリに渡しても処理ができないため,末尾に’\0’を付加して渡す必要があります。
#!/bin/bash
gcc -fPIC --shared -o add.so -xc - << EOF
int add(int x, int y)
{
return x + y;
}
EOF
cat << EOS > cob01.cob
000100**************************************************************************
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. PROGRAM01.
000400 AUTHOR. KUBO, Y.
000500**************************************************************************
000600 ENVIRONMENT DIVISION.
000700**************************************************************************
000800 DATA DIVISION.
000900*-------------------------------------------------------------------------
001000 WORKING-STORAGE SECTION.
001100*-------------------------------------------------------------------------
001200 01 WORK.
001300 03 WORK-ARG1 PIC 9(06) VALUE ZERO.
001400 03 WORK-ARG2 PIC 9(06) VALUE ZERO.
001500 01 RET PIC 9(04) COMP-X.
001600**************************************************************************
001700 PROCEDURE DIVISION.
001800**************************************************************************
001900 MAIN-RTN.
002000 DISPLAY 'START'.
002100 MOVE 100 TO WORK-ARG1.
002220 MOVE 200 TO WORK-ARG2.
002300 CALL 'add' USING BY VALUE WORK-ARG1
002400 BY VALUE WORK-ARG2
002500 RETURNING RET.
002600 DISPLAY RET.
002700 DISPLAY 'END'.
002800 STOP RUN.
002900**************************************************************************
EOS
cobc -x -o cob01 cob01.cob
./cob01
