CLM (ロード・モジュールの比較)

目的
CLM 機能を使用して以下を行います。
  • ロード・モジュールの比較を実行する。モジュールの「旧」バージョンと「新」バージョンの両方から、ロード・モジュール情報と CSECT 情報を抽出して比較します。比較基準を指定することにより、ロード・モジュール・サイズ、リンク日付、CSECT 名、使用コンパイラーなど、ロード・モジュールの特定のプロパティーに関する差異を参照できます。
  • 「新」ロード・モジュールで挿入、削除、または変更が行われた場所などの情報を示す比較報告書を生成する。報告書の内容および構造には、使用した比較オプションが反映されます。
使用上の注意
以下を使用して、比較を行う方法を指定します。
  • 比較レベル
  • 比較基準

作成される出力のタイプおよび、以下を使用して、出力を表示する方法を指定します。

  • リスト・タイプ
  • リストのオプション

SYNCH=LMOD を指定すると、CLM の代わりにデータ・セット比較 (DSM) を使用してロード・モジュールを比較できます。

戻りコード
CLM 機能からのデフォルトの戻りコードには、変更された以下の意味があります。
0
機能が正常に完了し、比較セットが一致しています。
1
機能が正常に完了しましたが、比較セットは一致していません。
2
比較セットのいずれかが空であったため、比較は行われませんでした。
4
比較セットが両方とも空であったため、比較は行われませんでした。
16
データ・セットまたはメンバーが使用中です。
16
データ・セットまたはメンバーのオープン・エラー。
16
データ・セットまたはメンバーが見つかりませんでした。
16
その他の入出力エラーが発生しました。
16
メンバー名が必要ですが、指定されませんでした。
16
ストレージ不足です。
16
CLM が異常終了しました。
16
処理を停止するその他の重大なエラーが発生しました。
16
重大エラーが発生し、File Manager の終了の原因になりました。
1. Syntax

1 CLM
2?  %Old data set
2?  %New data set
2?  %Comparison options
Old data set

1! INPUT=DDOLD
1 INPUT=ddold
1 DSNOLD=dsnold?VOLSEROLD=volserold
1 ?MEMSTART=startstring?MEMEND=endstring
1 MEMOLD=memold
3? XMEMBERS=(+ ,xmem_filter)
3? MEMLIST=(+ ,comp_mem)
1! SKIPOLD=0
1 SKIPOLD=skipold
1! CMPOLD=ALL
1 CMPOLD=cmpold
New data set

1! DDNEW=DDNEW
1 DDNEW=ddnew
1 DSNNEW=dsnnew?MEMNEW=memnew
2.1? VOLSERNEW=volsernew
1! SKIPNEW=0
1 SKIPNEW=skipnew
1! CMPNEW=ALL
1 CMPNEW=cmpnew
Comparison options

1! CMPLVL=LMOD
1 CMPLVL=CSECT
1! DATEFORM=YYYYDDD
1 DATEFORM=YYMMDD(1)
注:
  • 1 開きブラケットを使用する場合は、閉じブラケットを使用します。

1? CSECTS=(+ ,csect_filter)
1! XCSECTS=NO
1 XCSECTS=YES
1! LIST=SUMMARY
1 LIST=DELTA
1 LIST=MATCHING
1 LIST=LONG
1 LIST=NONE
3? EXCLUDE=(+ ,exclude_type)
1! NUMDIFF=ALL
1 NUMDIFF=numdiff
1! WIDE=NO
1 WIDE=YES
1! HILIGHT=NO
1 HILIGHT=YES
1! CHNGDFLD=NO
1 CHNGDFLD=YES
「旧データ・セット」の指定
「旧」データ・セットは、以下のように指定できます。
DDOLD=ddold
「旧」ロード・ライブラリー用の DD ステートメントまたは TSO ALLOC ステートメントに対する参照を定義します。デフォルトは、DDOLD です。
DSNOLD=dsnold
「旧」ロード・ライブラリー (PDS) の名前を定義します。指定している場合は、提供された DD ステートメントはどれも使用されません。名前に、小括弧で囲んだメンバー名を含めることができます。ここでメンバーを指定する場合は、関連する MEMOLD パラメーターを空にする必要があります。データ・セットについてさらに記述する場合には、以下のものを使用します。
VOLSEROLD=volserold
非カタログ「旧」データ・セットのボリューム通し番号。
MEMOLD=memold
PDS 内の単一メンバーの名前、またはロード・ライブラリー内の 1 つ以上のメンバーを表すメンバー名のパターン。ddname の DD ステートメントにこのパラメーターまたはメンバー名を指定するか、MEMLIST パラメーターにメンバーを指定するか、MEMSTART キーワードまたは MEMEND キーワード を使用してメンバー名の範囲を指定することができます。

メンバー名パターンは、メンバー名に有効な任意の文字と 2 つの特殊パターン文字 (アスタリスク (*) およびパーセント記号 (%)) から構成することができます。

* は、任意の数の文字を表します。必要な数のアスタリスクを、メンバー名パターンの任意の場所に使用することができます。例えば、メンバー名パターンとして *d* を入力すれば、名前に「d」が含まれる、PDS 内のすべてのメンバーが処理されます。

% は、単一の文字を意味するプレースホルダー文字です。パーセント記号は、メンバー名パターンの任意の場所に必要な数だけ指定できます。例えば、%%%% というメンバー名パターンを入力すると、PDS の中で、名前が 4 文字の長さの全メンバーが処理されます。

MEMSTART=startstring
比較に含めるメンバー名の範囲の始まりを指定するのに使用されます。MEMSTART が指定されたが MEMEND は省略された場合、PDS(E) 内の startstring 値以降の全メンバーが組み込まれます。startstring では、MEMOLD キーワードの memold パラメーターに関して、ワイルドカードを含め、同じ値を持つことができます。
MEMEND=endstring
比較に含めるメンバー名の範囲の終わりを指定するのに使用されます。MEMEND が指定されたが MEMSTART は省略された場合、PDS(E) 内の endstring 値までの全メンバーが組み込まれます。endstring では、MEMOLD キーワードの memold パラメーターに関して、ワイルドカードを含め、同じ値を持つことができます。
XMEMBERS
MEMSTART、MEMEND、および MEMBER オプションを使用して、処理するライブラリー・メンバーから除外し、それ以外が選択される方法を提供します。
xmem_filter
処理から除外する 1 つ以上のメンバーを識別するメンバー名フィルター。フィルターには、複数のメンバーを表すメンバー名パターンを指定できます。

小文字を含むメンバー名フィルターを指定するには、c'string' 形式で文字ストリングを使用します。フィルター値は、x'hex-digits' 形式で 16 進ストリングとして指定することもできます。

MEMLIST
総称名パターンもメンバー名の範囲も指定されていないロード・ライブラリーからメンバーを選択する手段を提供します。MEMLIST キーワードを指定すると、MEMLIST 引数に含まれているメンバーのみが出力データ・セットの対応するメンバーと比較されます。MEMLIST 引数に含まれていない、MEMBER=memold により選択されたメンバーは、比較されません。
comp_mem
比較されるメンバーの名前。総称名マスクは使用できません。
SKIPOLD=skipold
「旧」データ・セットの始めから数えたスキップされる論理レコードの数。デフォルトは 0です。ロード・モジュールを記述する論理レコードの数は、CSECT 数 + 1 です (1 つはロード・モジュール自体を記述するレコードです)。
CMPOLD=cmpold
「旧」データ・セットの比較されるレコードの数。最大数は、99 999 999 です。ALL を指定するか、このパラメーターを省略すると、残りのすべてのレコードが比較されます。ロード・モジュールを記述する論理レコードの数は、CSECT 数 + 1 です (1 つはロード・モジュール自体を記述するレコードです)。
「新規データ・セット」の指定
「新規」データ・セットは、以下のように指定できます。
DDNEW=ddnew
「新」ロード・モジュール・ライブラリー用の DD ステートメントまたは TSO ALLOC ステートメントに対する参照を定義します。デフォルトは、DDNEW です。
DSNNEW=dsnnew
「新」ロード・モジュール・ライブラリー (PDS) の名前を定義します。指定している場合は、提供された DD ステートメントはどれも使用されません。名前には、小括弧で囲んだメンバー名を含めることができます。ここでメンバーを指定する場合は、関連する MEMNEW パラメーターを空にする必要があります。データ・セットについてさらに記述する場合には、以下のものを使用します。
VOLSERNEW=volsernew
非カタログ「新」データ・セットのボリューム通し番号。
MEMNEW=memnew
ロード・ライブラリー内の単一メンバーの名前、またはライブラリー内の 1 つ以上のメンバーを表すメンバー名のパターン。ddname の DD ステートメントにこのパラメーターまたはメンバー名を指定できます。

メンバー名パターンは、メンバー名に有効な任意の文字と 2 つの特殊パターン文字 (アスタリスク (*) およびパーセント記号 (%)) から構成することができます。

* は、任意の数の文字を表します。必要な数のアスタリスクを、メンバー名パターンの任意の場所に使用することができます。例えば、*d* というメンバー名パターンを入力すると、ライブラリー内で、名前に「d」が含まれているすべてのメンバーが処理されます。

% は、単一の文字を意味するプレースホルダー文字です。パーセント記号は、メンバー名パターンの任意の場所に必要な数だけ指定できます。例えば、%%%% というメンバー名パターンを入力すると、ライブラリー内で、名前が 4 文字の長さの全メンバーが処理されます。

MEMNEW (または DSNNEW 内のメンバー) の指定は、MEMOLD (または DSNOLD で使用されているメンバー) に使用されているパラメーターに依存します。MEMOLD (DSNOLD 内のメンバー) で 1 つのメンバーを指定している場合は、MEMNEW (DSNNEW 内のメンバー) でも、1 つのメンバーを指す必要があります。MEMOLD (DSNOLD 内のメンバー) がメンバー名パターンを含んでいる場合は、MEMNEW (DSNNEW 内のメンバー) の指定で同じパターンを使用するか、「*」を使用する必要があります。

SKIPNEW=skipnew
「新」データ・セットの始めから数えたスキップされる論理レコードの数。デフォルトは 0です。ロード・モジュールを記述する論理レコードの数は、CSECT 数 + 1 です (1 つはロード・モジュール自体を記述するレコードです)。
CMPNEW=cmpnew
「新」データ・セットの比較されるレコードの数。最大数は、99 999 999 です。ALL を指定するか、このパラメーターを省略すると、残りのすべてのレコードが比較されます。ロード・モジュールを記述する論理レコードの数は、CSECT 数 + 1 です (1 つはロード・モジュール自体を記述するレコードです)。
比較オプション
CMPLVL
ロード・モジュール比較のレベルを決めます。
LMOD
ロード・モジュール・レベルの情報のみが抽出および比較されます。CSECT 情報 (および CSECT レベルでの差異) は無視されます。この結果、比較の詳細度は低くなります。
CSECT
ロード・モジュールと CSECT の両方のレベルが抽出および比較されます。この結果、詳細な比較が実行されます。
LMODC
ロード・モジュール・レベルで比較に含める情報を決定します。この基準は、ロード・モジュールのプロパティーと同じです。指定した基準のみが比較および表示されます。以下の各オプションを括弧で囲み、任意の順序で指定できます。
SIZE
ロード・モジュール・サイズが比較されます。
住所
ロード・モジュールのエントリー・ポイント・アドレスが比較されます。
LINKER | BINDER
ロード・モジュールの作成に使用されたリンケージ・エディターまたはバインダーのバージョンが比較されます。LINKER と BINDER を同時には使用できません。
DATE | TIME
ロード・モジュールのリンク (バインド) 日時が比較されます。DATE と TIME は相互に排他的です。
モード
ロード・モジュールの AMODE および RMODE が比較されます。
AC | AUTH
ロード・モジュール許可コードが比較されます。AC と AUTH は相互に排他的です。
ATTR
ロード・モジュールのリンク (バインド) 属性が比較されます。
CSECTC
CSECT レベルで比較に含める情報を決定します。この基準は、CSECT のプロパティーと同じです。指定した基準のみが比較および表示されます。以下の各オプションを括弧で囲み、任意の順序で指定できます。
注: CMPLVL=LMOD を指定すると、これらのパラメーターは無視されます。
SIZE
CSECT のサイズが比較されます。
住所
CSECT のアドレスが比較されます。
COMPILER
CSECT のコンパイルに使用された言語コンパイラーのバージョンが比較されます。
DATE
CSECT のコンパイル日付が比較されます。
モード
CSECT の AMODE および RMODE が比較されます。
IDRZAP | ZAP
AMSPZAP IDR データが比較されます。IDR ZAP データは、CSECT 情報の延長ですが、個別のレコードとしてフォーマット設定されています。ISRZAP と ZAP は相互に排他的です。
テキスト (TEXT)
CSECT の内容が比較されます。CSECT の内容は、CSECT 情報の延長ですが、個別の 32 バイトのレコードとしてフォーマット設定されており、「メモリー・ダンプ」フォーマット (16 進および文字) で表示されます。
注: TEXT を指定すると、リスト・オプションはダンプ・フォーマットの比較に対応するために WIDE=YES に設定されます。
COPT
各 CSECT のコンパイラー・オプションが判別できる場合、これらが比較されます。
ATTR
各 CSECT のプログラム言語属性が使用可能な場合は、それらの属性が比較されます。
CSECTS
比較から CSECT を除外または含める方法を提供します。XCSECTS オプションは、CSECT を除外または含めるためにフィルターを使用するかどうかを識別します。
csect_filter
比較に含める、または除外する 1 つ以上の CSECT を識別する CSECT 名フィルター。ワイルドカード文字 * と % を使用して、複数の CSECT を表す CSECT 名パターンを定義することができます。
XCSECTS=NO
CSECTS オプションを使用して、比較に含める CSECT を識別します。
XCSECTS=YES
CSECT オプションを使用して、比較から 除外する CSECT を識別します。
LIST=SUMMARY
要約リスト。
LIST=DELTA
デルタ・リスト。
LIST=MATCHING
突き合わせリスト。
LIST=LONG
長いリスト。
LIST=NONE
リストなし。
リストのオプション
LIST=LONG パラメーターが指定されている場合は、以下のオプションが有効です。
EXCLUDE=exclude_type
指定した比較結果タイプは報告されません。exclude_type には次の値を指定できます。
INSERTED
挿入レコードを報告書から除外します。
DELETED
削除レコードを報告書から除外します。
CHANGED
変更レコードを報告書から除外します。
MATCHED
一致レコードを報告書から除外します。

LIST キーワードが指定されていない (すなわちデフォルトの SUMMARY となる) 場合、あるいは NONE 以外のものに設定されている場合には、以下のオプションが有効となります。

NUMDIFF=numdiff
「Compare Utility (比較ユーティリティー)」がデータ・セットの処理を停止する前の差異の数。
WIDE=NO
狭いリスト。
WIDE=YES
ワイド・リスト。
HILIGHT=NO
変更されたフィールドの強調表示なし。
HILIGHT=YES
変更されたフィールドを強調表示。
CHNGDFLD=NO
定様式比較報告書にすべてのフィールドを表示します。
CHNGDFLD=YES
定様式比較報告書に変更フィールドのみを表示します。このオプションは、「Wide listing (ワイド・リスト)」(WIDE=YES) オプションが選択されている場合は無効になります。
DATEFORM=YYYYDDD
報告する日付 (リンク日付およびコンパイル日付) を YYYY.DDD 形式で表示します。
DATEFORM=YYMMDD
報告する日付 (リンク日付およびコンパイル日付) を YY/MM/DD 形式で表示します。

バッチの例: モジュールの 2 バージョンの比較。

//CLM JOB (ACCT),'NAME'
//* COMPARE LOAD MODULES
//*
//FMBAT PROC
//FMBAT EXEC PGM=FILEMGR
//STEPLIB   DD DSN=FMN.SFMNMOD1,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//  PEND
//*
//STPSSEX EXEC FMBAT
//SYSIN DD *
$$FILEM VER
$$FILEM CLM CMPLVL=CSECT,
$$FILEM LIST=DELTA,
$$FILEM WIDE=YES,
$$FILEM HILIGHT=YES,
$$FILEM DSNOLD=FMN.PROD1.LOAD(FMNLOAD),
$$FILEM DSNNEW=FMN.PROD2.LOAD(FMNLOAD),
$$FILEM LMODC=(SIZE,DATE,ATTR),
$$FILEM CSECTC=(SIZE,ADDR,DATE,ZAP)
$$FILEM EOJ
注:
  1. ロード・モジュールは、ロード・モジュール・レベルと CSECT レベルで比較されます。
  2. ロード・モジュール・レベルでは、ロード・モジュールのサイズ、ロード・モジュールがリンク (バインド) された日時、およびリンク属性が比較されます。
  3. CSECT レベルでは、CSECT のアドレス、サイズ、コンパイル日付、および IDR ZAP データが比較されます。