SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

COBOLプログラミング

COBOL言語をLinux環境で動かす その2

OpenCOBOLを他のプログラムと連携させる方法

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード samplesource.zip (760.0 B)

プログラム連携を使ったサンプルプログラムの作成

 実際に簡単なプログラムを作成し、プログラム連携の機能について確認します。

サンプルプログラムの内容

 メイン処理プログラムでメイン処理開始の表示を行います。メイン処理プログラムの中に連携先プログラムで使用するデータを設定し、連携先プログラムにおいて表示および更新を行います。連携先プログラムの処理終了後にメイン処理で、連携先プログラムで更新されたデータとメイン処理終了の表示を行います。

メイン処理プログラムの内容

 メイン処理のプログラムでは、MAIN PROD(COBOL)を表示し連携先プログラムで表示する内容を設定して表示します。連携先プログラムの実行終了後に、連携先プログラムで更新された内容を表示します。なお、プログラムの開始時と終了時にそれぞれMAIN-STARTMAIN-STOPをあわせて表示します。

 ソースの内容は次のとおりです。

メイン処理プログラムソース
000100*COPYRIGHT FUSEKAKO
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID.        cobmaincob.
000400 ENVIRONMENT DIVISION.
000500 DATA DIVISION.
000600 WORKING-STORAGE SECTION.
000700 01  SUB-SND.
000800     03 CNT PIC 99.
000900     03 MSG PIC X(20).
001000 PROCEDURE DIVISION.
001100 DISPLAY "MAIN-START".
001200 DISPLAY "MAIN PROD(COBOL)".
001300 MOVE 10 TO CNT.
001400 MOVE "SUB PROD(COBOL)" TO MSG.
001500 CALL "cobsubcob" USING SUB-SND.
001600 DISPLAY CNT.
001700 DISPLAY "MAIN-STOP".
001800 STOP RUN.

 本例では、連携先プログラムに引き渡すデータを、01レベルで定義した複数のデータ項目を束ねるSUB-SNDにしています。もちろん、それぞれのデータ項目を個別に引き渡すこともできます。CALL文で個別にデータ項目を引き渡す例は、次のとおりです。

データ項目を個別に引き渡すCALL文の例
001500 CALL "cobsubcob" USING CNT MSG.
連携先プログラムの内容

 連携先プログラムでは、メイン処理プログラムで設定した値であるSUB PROD(COBOL)と数値を表示させるようにします。数値のみ、1減算しプログラムを終了します。

 ソースの内容は次のとおりです。

連携先のプログラムソース
000100*COPYRIGHT FUSEKAKO
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID.        cobsubcob.
000400 ENVIRONMENT DIVISION.
000500 DATA DIVISION.
000600 LINKAGE SECTION.
000700 01  SUB-REC.
000800     03 CNT PIC 99.
000900     03 MSG PIC X(20).
001000 PROCEDURE DIVISION USING SUB-REC.
001100 DISPLAY "SUB-START "
001200 DISPLAY MSG WITH NO ADVANCING.
001300 DISPLAY CNT.
001400 SUBTRACT 1 FROM CNT.
001500 DISPLAY "SUB-END".
001600 EXIT PROGRAM.

 順序番号000300で指定するPROGRAM-IDは、メイン処理プログラムのCALL文で指定される連携先プログラム名と合わせる必要があります。

 メイン処理で「データ項目を個別に引き渡すCALL文」とした場合は、処理部のUSING句の内容を変更してください。変更例は次のとおりです。

個別データ項目指定時の例
001000 PROCEDURE DIVISION USING CNT MSG.

 連携先プログラムにおけるプログラム実行の終了は、「STOP RUN文」ではなく「EXIT PROGRAM文」とします。「STOP RUN文」にすると、メイン処理プログラムではなく、メイン処理プログラムを実行したシェルなどに制御が渡るので、注意が必要です。「EXIT PROGRAM文」は省略することができます。省略すると、連携先プログラムの最終行で「EXIT PROGRAM文」が指定された事と同じになります。

サンプルプログラムのコンパイル

 今回、サンプルコードを用意したので、必要があればご利用ください。サンプルコードを適当なディレクトリ、ファイルに格納し、前述したコンパイルコマンドでメイン処理プログラムと連携先プログラムをコンパイルします。

 以下は、メイン処理プログラム名を「cobmaincob.cob」、連携先プログラム名を「cobsubcob.cob」とした例です。

直接実行型ファイルを作成するコンパイル例
/usr/local/bin/cobc -x -o cobmaincobexe cobmaincob.cob cobsubcob.cob
分割コンパイルによる実行型ファイルを作成するコンパイル例
/usr/local/bin/cobc -c -x -o cobmaincob.o cobmaincob.cob
/usr/local/bin/cobc -c -o cobsubcob.o cobsubcob.cob
/usr/local/bin/cobc -x -o cobmaincobbin cobmaincob.o cobsubcob.o

 問題が無ければ、直接実行型ファイルを作成するコンパイル例では「cobmaincobexe」が、分割コンパイルによる実行型ファイルを作成するコンパイル例では、それぞれ「cobmaincob.o」「cobsubcob.o」「cobmaincobbin」が作成されるはずです。

実行ファイル作成の確認例
[e-fuse@]$ ls -l
-rwxrwxr-x 1 cobol cobol 11825  7月 27 14:50 cobmaincobbin
-rw-rw-r-- 1 cobol cobol  4744  7月 27 08:48 cobmaincob.o
-rw-rw-r-- 1 cobol cobol  5640  7月 27 13:50 cobsubcob.o
[e-fuse@]$

 環境構築の方法によっては、オブジェクトサイズが異なる場合があります。

Makefileの使用

 通常は上記コマンドをコマンドラインで毎回打鍵することなく、makeコマンドによりコンパイルを行うことが多いと思います。今回のコンパイルをMakefileに記述する場合は、次のようになります。

Makefile記述例
cobmaincobbin: cobmaincob.o cobsubcob.o
	/usr/local/bin/cobc -x -o cobmaincobbin cobmaincob.o cobsubcob.o
cobmaincob.o: cobmaincob.cob
	/usr/local/bin/cobc -c -x -o cobmaincob.o cobmaincob.cob
cobsubcob.o: cobsubcob.cob
	/usr/local/bin/cobc -c -o cobsubcob.o cobsubcob.cob
clean:
	rm cobmaincobbin cobmaincob.o cobsubcob.o

 上記のMakefileを格納したディレクトリで、引数なしのmakeコマンドを実行することにより、コンパイルが必要なモジュールのみコンパイルされることになります。

サンプルプログラムの実行

 前項で作成した実行型ファイルを実行します。実行例は次のとおりです。

 もし、”error while loading shared...”と、エラーが出た場合は、適宜環境を整えて再度実行してください(COBOL言語をLinux環境で動かす)。

実行例
[e-fuse@]$ ./cobmaincobbin
MAIN-START
MAIN PROD(COBOL)
SUB-START
SUB PROD(COBOL)     10
SUB-END
09
MAIN-STOP
[e-fuse@]$

 意図した内容で表示される事が、確認できました。

まとめ

 今回は、OpenCOBOL同士によるプログラム連携について、機能の確認を行いました。複数のOpenCOBOLプログラムの連携方法への理解が進んだかと思います。

 次回は、OpenCOBOLとCによるプログラム連携について、稿を進めたいと思います。

参考

  1. OpenCOBOL Manual:OpenCOBOL
  2. COBOLプログラミング 基本編 :CodeZine(基本的なCOBOL言語の解説)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
COBOLプログラミング連載記事一覧

もっと読む

この記事の著者

布施 榮一(ふせえいいち)

布施加工有限会社 代表取締役布施加工って何しているとこなの??実はIT屋さんだったりします(笑)Linux基盤各種サービスの設計構築およびコンサルティングをやっています。ブログもちょこちょこっと書いてます。Alinous-Core 正規販売代理店

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2656 2008/09/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング