エディターで保管したPDSメンバーのディレクトリー・フォーマットの違い
ソースプログラムやJCLなどは、そのほとんどがISPFエディターなどで編集・登録されます。エディターはメンバーをデータセットに保管する際に、独自のフォーマットのユーザーデータを付加します。その中にはレコードの数や保管日、更新者などを示す情報が含まれます。
+0 +8 +11 +12 74 +------------+-----+----+---------------------------+ I メンバー名 I TTR I XX I ユーザーデータ I +------------+-----+----+---------------------------+ ↑ ここにメンバーの保管日や更新者情報が入る │ └─ ユーザーデータ部の長さ情報などが設定される
ISPFエディターで保管したPDSメンバーのディレクトリー・フォーマット
IBMのISPFエディターが書き込むユーザーデータ部は30バイトあり、その内容はマニュアル「z/OS ISPFメッセージおよびコード」の診断情報:PDSディレクトリー内のISPF統計項目に記載されています。
PDS2 DSECT , PDS2PTR PDS2NAME DS CL8 - MEMBER NAME OR ALIAS NAME PDS2TTRP DS CL3 - TTR OF FIRST BLOCK OF NAMED MEMBER PDS2INDC DS B - INDICATOR BYTE PDS2ALIS EQU X'80' NAME IN THE FIELD PDS2NAME IS AN ALIAS PDS2LUSR EQU X'1F' LENGTH OF USER DATA FIELD IN HALF WORDS PDS2USRD DS 0C - START OF VARIABLE LENGTH USER DATA FIELD * ISPFDIR ORG PDS2USRD TSO/ISPF PDS DIRECTORY USER DATA FIELDS PDSIVERS DC XL1'00' VERSION NUMBER(x01-x99) PDSIMODL DC XL1'00' MODIFICATION NUMBER(x01-x99) PDSIFLGS DC XL1'00' FLAGS PDSISCLM EQU X'80' SCLM INDICATOR PDSISCND DC XL1'00' SECOND AT LAST SAVE TIME PDSICDAT DC XL4'00' CREATION DATE(0CYYDDDF) PDSIMDAT DC XL4'00' LAST MODIFIED DATE(0CYYDDDF) PDSIHHMM DC XL2'00' HH:MM AT LAST SAVE TIME PDSILINE DC AL2(0) CURRENT NUM OF LINES PDSIISIZ DC AL2(0) INITIAL NUM OF LINES PDSIMNUM DC AL2(0) MODIFIED NUM OF LINES PDSIUSER DC CL7' ' TSO USERID DC XL3'00' --- RESERVED --- ISPFDIRL EQU *-ISPFDIR (USER DATA LENGTH) ISPFINDC EQU (ISPFDIRL/2) (LENGTH INDICATOR)
ユーザーデータの前にはPDSメンバー共通のディレクトリー・フィールドがあります。そのフォーマットはIHAPDSマクロでマッピングできます。このマクロに含まれるユーザーデータはロード・モジュールのものですが、ユーザーデータより前の部分なら共用できます。サンプルにはそのIHAPDSマクロの一部を付けています。なおBLDLマクロで得たメンバー・ディレクトリー・エントリーの場合、PDS2TTRPとPDS2INDCの間に連結番号とライブラリーフラグのそれぞれ1バイトずつが入りますが、データセット上のメンバー・ディレクトリーには含まれません。このサンプルはデータセット上のメンバー・ディレクトリーで示しています。
富士通のPFDエディターで保管したPDSメンバーのディレクトリー・フォーマット
PFDはISPFとほとんど同じです。長さが28バイトと短くなるので、インジケーターバイトに示される長さを比較すればISPFで書かれたかPFDで書かれたかを判別することはできます。昔のようにIBMと富士通の両方のマシンから共用ボリュームでアクセスするようなことはないでしょうが、MVSでIEBCOPYしたアンロードPDSをMSPに持って行く、あるいはその逆、というのはありえるので、MVSとMSP両方に対応するソフトで、PDSディレクトリーを編集して表示するような機能を持つなら、いずれのフォーマットにも対応するといいと思います。
PFDDIR ORG PDS2USRD TSS/PFD PDS DIRECTORY USER DATA FIELDS PDSFVERS DC XL1'00' VERSION NUMBER(x01-x99) PDSFMODL DC XL1'00' MODIFICATION NUMBER(x01-x99) DC XL2'00' --- RESERVED --- PDSFCDAT DC XL4'00' CREATION DATE(0CYYDDDF) PDSFMDAT DC XL4'00' LAST MODIFIED DATE(0CYYDDDF) PDSFHHMM DC XL2'00' HH:MM AT LAST SAVE TIME PDSFLINE DC AL2(0) CURRENT NUM OF LINES PDSFISIZ DC AL2(0) INITIAL NUM OF LINES PDSFMNUM DC AL2(0) MODIFIED NUM OF LINES PDSFUSER DC CL7' ' TSO USERID DC XL1'00' --- RESERVED --- PFDDIRL EQU *-PFDDIR (USER DATA LENGTH) PFDINDC EQU (PFDDIRL/2) (LENGTH INDICATOR)
日立のASPENエディターで保管したPDSメンバーのディレクトリー・フォーマット
ASPENの場合はISPFとは互換がありません。長さはISPFと同じ30バイトで、似たような項目で構成されてますがフィールド位置は変わります。
意外にもフィールド・レイアウトはマニュアルに載ってました。(VOS3プログラミング支援エディタASPEN E2使用の手引)ただし各フィールドの具体的な値の形式は公開されてませんでした(でも必要な部分はだいたい想像できるかと)。
ASPENDIR ORG PDS2USRD TSS/ASPEN PDS DIRECTORY USER DATA FIELDS PDSHNUPD DC XL1'00' NUM OF UPDATES PDSHMDAT DC XL3'00' LAST MODIFIED DATE(YYMMDD) DC XL1'00' DIRECTORY TYPE ?? DC XL1'00' LANGUAGE TYPE ?? PDSHVERS DC XL1'00' VERSION NUMBER PDSHCDAT DC XL3'00' CREATION DATE(YYMMDD) PDSHTIME DC XL4'00000000' LAST SAVE TIME(HHMMSSTT) ?? PDSHLINE DC AL2(0) CURRENT NUM OF LINES PDSHISIZ DC AL2(0) INITIAL NUM OF LINES PDSHMNUM DC AL2(0) MODIFIED NUM OF LINES DC XL3'000000' --- RESERVED --- PDSHUSER DC CL7' ' TSO USERID ASPNDIRL EQU *-ASPENDIR (USER DATA LENGTH) ASPNINDC EQU (ASPNDIRL/2) (LENGTH INDICATOR)