Rational Developer for System z
PL/I for Windows, Version 7.6, プログラミング・ガイド

コンパイラー・ユーザー出口のカスタマイズ

前述したように、独自のコンパイラー・ユーザー出口を作成することも、単に IBMUEXIT.PLI を変更することもできます。いずれの場合も、コンパイラー・ユーザー出口用の実行可能 ファイルの名前は IBMUEXIT.DLLでなければなりません。

このセクションでは、次の方法について説明します。

IBMUEXIT.INF の変更

まったく新しいコンパイラー・ユーザー出口の作成に時間を費やすのではなく、サンプル・プログラム IBMUEXIT.INF を変更して使用することができます。

INF ファイルを編集して、抑止するメッセージ番号と、変更するメッセージ番号の重大度レベルを指示します。サンプル IBMUEXIT.INF ファイルを図 28 に示します。

図 28. IBMUEXIT.INF ファイルの例
  Fac Id   Msg No   Severity   Suppress   Comment
+--------+--------+----------+----------+--------------------------------
  'IBM'     1041       -1          1      Comment spans multiple lines
  'IBM'     1044       -1          1      FIXED BIN 7 mapped to 1 byte
  'IBM'     1172        0          0      Select without OTHERWISE
  'IBM'     1052       -1          1      Nodescriptor with * extent args
  'IBM'     1047       12          0      Reorder inhibits optimization
  'IBM'     8009       -1          1      Semicolon in string constant
  'IBM'     1107       12          0      Undeclared ENTRY
  'IBM'     1169        0          1      Precision of result determined by arg

最初の 2 行はヘッダー行で、IBMUEXIT では無視されます。残りの行には、可変数のブランクで区切られた入力データが含まれています。

ファイルの各列は、コンパイラー・ユーザー出口に次のように関係しています。

独自のコンパイラー出口の作成

独自のユーザー出口を作成するには、モデルとして IBMUEXIT (サンプル・プログラムの 1 つとして製品に付属) を使用できま す。出口を作成するときには、初期化、メッセージのフィルター操作、および終了をそれぞれ必ずカバーしてください。

グローバル制御ブロックの構造

グローバル制御ブロックは、3 つのユーザー出口プロシージャー (初期化、フィルター操作、および終了) が呼び出されるたびに、それぞれに渡されます。次のコードと説明は、グローバル制御ブロック内の各フィールドの内容を示すものです。

  Dcl
    1 Uex_UIB           native based( null() ),
      2 Uex_UIB_Length         fixed bin(31),

      2 Uex_UIB_Exit_token     pointer,        /* for user exit's use */

      2 Uex_UIB_User_char_str  pointer,        /* to exit option str  */
      2 Uex_UIB_User_char_len  fixed bin(31),

      2 Uex_UIB_Filename_str   pointer,        /* to source filename  */
      2 Uex_UIB_Filename_len   fixed bin(31),

      2 Uex_UIB_return_code fixed bin(31),     /* set by exit procs   */
      2 Uex_UIB_reason_code fixed bin(31),     /* set by exit procs   */

      2 Uex_UIB_Exit_Routs,                    /* exit entries set at
                                                  initialization      */
        3 ( Uex_UIB_Termination,
            Uex_UIB_Message_Filter,            /* call for each msg   */
            *, *, *, * )
          limited entry (
               *,                               /* to Uex_UIB          */
               *,                               /* to a request area   */
           );

データ入力フィールド

初期化プロシージャーの作成

初期化プロシージャーは、出口が必要とする初期化、例えば、ファイルのオープンやストレージの割り振りなどを実行する必要があります。初期化プロシージャー特有の制御ブロックは、次のようにコード化されます。

  Dcl 1 Uex_ISA native based( null() ),
      2 Uex_ISA_Length_fixed bin(31);   /* storage(Uex_IS    A) */

初期化プロシージャーのグローバル制御ブロックの構文については、グローバル制御ブロックの構造に説明があります。

初期化プロシージャーの完了時には、戻りコード/理由コードを次のように設定する必要があります。

0/0
コンパイルを続行する
4/n
将来の利用のために予約済み
8/n
将来の利用のために予約済み
12/n
将来の利用のために予約済み
16/n
コンパイルを打ち切る

メッセージ・フィルター操作プロシージャーの作成

メッセージ・フィルター操作プロシージャーを使うと、メッセージを抑止したり、メッセージの重大度を変更したりすることができます。どのメッセージの重大度も高くすることはできますが、 低くすることができるのは、「ERROR」(重大度コード 8) または「WARNING」(重大度コード 4) メッセージの重大度のみです。

プロシージャー特有の制御ブロックには、メッセージについての情報が含まれています。これは、特定のメッセージの取り扱い方法を示す情報をコンパイラーに渡すために使われます。

プロシージャー特有のメッセージ・フィルター制御ブロックの例を次に示します。

Dcl 1 Uex_MFX native based( null() ),
      2 Uex_MFX_Length   fixed bin(31),

      2 Uex_MFX_Facility_Id  char(3),        /* of component writing
                                                message             */
      2 *                    char(1),
      2 Uex_MFX_Message_no   fixed bin(31),
      2 Uex_MFX_Severity     fixed bin(15),
      2 Uex_MFX_New_Severity fixed bin(15),  /* set by exit proc    */
      2 Uex_MFX_Inserts                fixed bin(15),
      2 Uex_MFX_Inserts_Data( 6 refer(Uex_MFX_Inserts) ),
        3 Uex_MFX_Ins_Type             fixed bin(7),
        3 Uex_MFX_Ins_Type_Data union unaligned,
          4 *                          char(8),
          4 Uex_MFX_Ins_Bin            fixed bin(31),
          4 Uex_MFX_Ins_Str,
            5 Uex_MFX_Ins_Str_Len      fixed bin(15),
            5 Uex_MFX_Ins_Str_Addr     pointer,
          4 Uex_MFX_Ins_Series,
            5 Uex_MFX_Ins_Series_Sep   char(1),
            5 Uex_MFX_Ins_Series_Addr  pointer;

データ入力フィールド

メッセージ・フィルター操作プロシージャーの完了時に、戻りコード/理由コードを次のいずれかに設定してください。

0/0
コンパイルを続行し、メッセージを出力する
0/1
コンパイルを続行し、メッセージを出力しない
4/n
将来の利用のために予約済み
8/n
将来の利用のために予約済み
16/n
コンパイルを打ち切る

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)