図 11の IBMZCPL カタログ式プロシージャーには、3 つの プロシージャー・ステップがあります。すなわち、カタログ式プロシージャー IBMZC と 同じものである PLI、言語環境プログラムのプリリンカーを呼び出す PLKED、および 最初のプロシージャー・ステップで作成されたオブジェクト・モジュールを リンク・エディットするリンケージ・エディター (シンボル名 IEWL) を呼び出す LKED です。
コンパイル・プロシージャー・ステップ用の入力データには、修飾 dd 名の PLI.SYSIN が 必要です。EXEC ステートメント LKED の COND パラメーターは、 コンパイラーが生成した戻りコードが 8 より大きい場合 (つまり、 コンパイル中に重大エラーまたは回復不能エラーが起こった場合) に、 このプロシージャー・ステップをバイパスするように指定します。
//IBMZCPL PROC LNGPRFX='IBMZ.V3R8M0',LIBPRFX='CEE', // SYSLBLK=3200,PLANG=EDCPMSGE,GOPGM=GO //* //******************************************************************** //* * //* LICENSED MATERIALS - PROPERTY OF IBM * //* * //* 5655-H31 (C) COPYRIGHT IBM CORP. 1999, 2008 * //* ALL RIGHTS RESERVED. * //* * //* US GOVERNMENT USERS RESTRICTED RIGHTS - USE, * //* DUPLICATION OR DISCLOSURE RESTRICTED BY GSA * //* ADP SCHEDULE CONTRACT WITH IBM CORP. * //* * //******************************************************************** //* //* IBM ENTERPRISE PL/I FOR Z/OS //* VERSION 3 RELEASE 8 MODIFICATION 0 //* //* COMPILE, PRELINK, LINK-EDIT A PL/I PROGRAM //* //* PARAMETER DEFAULT VALUE USAGE //* LNGPRFX IBMZ.V3R8M0 PREFIX FOR LANGUAGE DATA SET NAMES //* LIBPRFX CEE PREFIX FOR LIBRARY DATA SET NAMES //* SYSLBLK 3200 BLKSIZE FOR OBJECT DATA SET //* PLANG EDCPMSGE PRELINKER MESSAGES MEMBER NAME //* GOPGM GO MEMBER NAME FOR LOAD MODULE //* //********************************************************************* //* COMPILE STEP //********************************************************************* //PLI EXEC PGM=IBMZPLI,PARM='OBJECT,OPTIONS' //STEPLIB DD DSN=&LNGPRFX;.SIBMZCMP,DISP=SHR // DD DSN=&LIBPRFX;.SCEERUN,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS),UNIT=SYSALLDA, // SPACE=(CYL,(1,1)),DCB=(LRECL=80,BLKSIZE=&SYSLBLK) //SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSALLDA, // SPACE=(1024,(200,50),,CONTIG,ROUND),DCB=BLKSIZE=1024
//********************************************************************* //* PRE-LINK-EDIT STEP //********************************************************************* //PLKED EXEC PGM=EDCPRLK,COND=(8,LT,PLI) //STEPLIB DD DSN=&LIBPRFX;.SCEERUN,DISP=SHR //SYSMSGS DD DSN=&LIBPRFX..SCEEMSGP(&PLANG),DISP=SHR //SYSLIB DD DUMMY //SYSMOD DD DSN=&&PLNK,DISP=(,PASS), // UNIT=SYSALLDA,SPACE=(CYL,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=&SYSLBLK) //SYSIN DD DSN=&&LOADSET,DISP=(OLD,DELETE) //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //********************************************************************* //* LINK-EDIT STEP //********************************************************************* //LKED EXEC PGM=IEWL,PARM='XREF',COND=((8,LT,PLI),(8,LE,PLKED)) //SYSLIB DD DSN=&LIBPRFX..SCEELKED,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSLIN DD DSN=*.PLKED.SYSMOD,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DSN=&&GOSET(&GOPGM),DISP=(MOD,PASS),UNIT=SYSALLDA, // SPACE=(1024,(50,20,1)) //SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSALLDA,SPACE=(1024,(200,20)), // DCB=BLKSIZE=1024 //SYSIN DD DUMMY
リンケージ・エディターは、作成したロード・モジュールを常に、SYSLMOD という名前の DD ステートメントで定義された 標準データ・セット内に入れます。 カタログ式プロシージャーの中のこのステートメントは、 新しい一時ライブラリー &&GOSET を指定します。ロード・モジュールはこの一時ライブラリーに入れられ、GO というメンバー名を与えられます。一時ライブラリーを指定する際は、カタログ式プロシージャーは 同じジョブ内でロード・モジュールが 実行されるものと想定します。このモジュールを 保持したい場合は、SYSLMOD という名前の DD ステートメントをユーザー独自 のステートメントで置き換えなければなりません。
図 11 の SYSLIN DD ステートメントは、SYSIN という 名前の DD ステートメントで定義されたデータ・セットを、リンケージ・エディター への 1 次入力 (SYSLIN) に連結する方法を示しています。 このような方法でリンケージ・エディター制御ステートメントを入力ストリーム に入れることができます。これについては、「z/OS 言語環境プログラム プログラミング・ガイド」に説明があります。