COBOLは、メインフレーム・コンピューターの業務アプリケーション・プログラムでは最も多く使われているプログラミング言語です。バッチ処理、オンライン処理を問わず広く利用されています。下記に、基本的なコンパイルを行うためのサンプルJCLを示します。コンパイラーも標準のカタログ・プロシージャーを提供しています(SYS1.PROCLIB等)からそちらも参考にしてください。ユーザーによっては、自社のプログラム開発用に標準化されたJCLを作成していたりします。業務用プログラムの場合は、それらを使用することが規定されているかも知れません。コンパイルオプションや追加のDD文などについては、使用するCOBOLのマニュアルを参照して下さい。
MVS Enterprise COBOLのコンパイラーJCLサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//COBOL EXEC PGM=IGYCRCTL,REGION=0M //STEPLIB DD DISP=SHR,DSN=IGY620.SIGYCOMP //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT8 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT9 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT10 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT11 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT12 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT13 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT14 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT15 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSMDECK DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIN DD DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIB DD DISP=SHR,DSN=EDU1.ARTECEED.INFO //SYSIN DD * : ここにCOBOLのソース・プログラムを書く : ソース・プログラムを別メンバーで作った場合は、 DD名SYSINに、DD DISP=SHR,DSN=MY.PROGRAM(COBTEST1) のように、DSNとメンバー名を指定すればよい。 : //* //LKED EXEC PGM=IEWL,PARM='LIST,LET,MAP,XREF' //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIB DD DISP=SHR,DSNAME=CEE.SCEELKED //SYSLMOD DD DISP=(,PASS),DSN=&&GOSET(GOMOD), // UNIT=SYSDA,SPACE=(CYL,(1,1,1)),DSNTYPE=LIBRARY //SYSLIN DD DISP=(OLD,DELETE),DSN=*.COBOL.SYSLIN // DD * : 必要ならバインダー制御ステートメントを書く : //* //GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,COBOL),(4,LT,LKED)) // |
ステップCOBOLが、COBOLコンパイラーの実行ステップです。STEPLIBにコンパイラーが格納されたロードモジュール・ライブラリーを指定します。z/OSの場合、「IGYvrm.SIGYCOMP」または「IGY.VnRnMn.SIGYCOMP」のDSNになっています。
コンパイルされたオブジェクト・モジュールは、バインダーでロード・モジュールに変換します。また、ロード・モジュールの出力先はPDSEデータセットでなければなりません。従来のように、ローダーで直接実行することもできなくなりました。
Enterprise COBOLのコンパイラーは、バージョン5で大きく変わりました。バージョン5以降のコンパイラーが生成するオブジェクト・モジュールは、長いプログラム名、オブジェクト指向プログラム対応、プリリンカーの廃止、モジュール・サイズ制限の撤廃等の理由から、ロード・モジュール(実行可能ファイル)の新しい形式であるプログラム・オブジェクトにのみ変換できます。
コンパイラー・オプションは、EXECステートメントのPARMパラメーターで指定します。長すぎて1行に書ききれない場合は、以下のように記述して次の行へ継続できます。
1 2 3 4 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- //COBOL EXEC PGM=IGYCRCTL, // PARM=('AAA,BBBBBB,CC(99999),DDDD(XXXXX),EEEE,FFF,GGG,HH', // 'II(XXX,YYYY(ZZ)),JJJJJJJ(KKKK)') |
富士通COBOL85のコンパイラーJCLサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//COBOL EXEC PGM=JMN000,PARM='XREF,APOST' //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) //SYSLIN DD DISP=(,PASS),UNIT=SYSDA,SPACE=(TRK,(5,5)) //SYSLIB DD DISP=SHR,DSN=MY.PROGRAM //SYSIN DD DISP=SHR,DSN=MY.PROGRAM(COBTEST1) //* //LKED EXEC PGM=JQAL,PARM='LIST,LET,MAP,XREF' //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIB DD DISP=SHR,DSN=SYS1.COBLIB //SYSLMOD DD DISP=SHR,DSN=MY.LINKLIB(COBTEST1) //SYSLIN DD DISP=(OLD,DELETE),DSN=*.COBOL.SYSLIN // DD * : 必要ならリンケージ・エディター制御文を書く : //* //GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,COBOL),(4,LT,LKED)) // |
日立COBOL85のコンパイラーJCLサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//COBOL EXEC PGM=JOTZ00,PARM='LIST=(S(A),M,R,E(W))' //SYSPRINT DD SYSOUT=* //SYSLIN DD DISP=(,PASS),UNIT=SYSDA,SPACE=(TRK,(5,5)) //SYSLIB DD DISP=SHR,DSN=MY.PROGRAM //SYSIN DD DISP=SHR,DSN=MY.PROGRAM(COBTEST1) //* //LKED EXEC PGM=JSAXLNK,PARM='LIST,LET,MAP,XREF' //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIB DD DISP=SHR,DSN=SYS1.COBLIB //SYSLMOD DD DISP=SHR,DSN=MY.LINKLIB(COBTEST1) //SYSLIN DD DISP=(OLD,DELETE),DSN=*.COBOL.SYSLIN // DD * : 必要ならリンケージ・エディター制御文を書く : //* //GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,COBOL),(4,LT,LKED)) // |
MSPもVOS3も、z/OSと異なり従来通りのロード・モジュールが生成されます。コンパイラーが生成するオブジェクト・モジュールも、ローダーで直接実行することもできます。ローダーで直接実行する場合は、LKED以下のステップを下記のように書き換えます。
1 2 3 4 5 6 |
: //LOADER EXEC PGM=LOADER,PARM='LIST,LET,MAP,XREF' //SYSLIB DD DISP=SHR,DSN=SYS1.COBLIB //SYSLOUT DD SYSOUT=* //SYSLIN DD DISP=(OLD,DELETE),DSN=*.COBOL.SYSLIN // |