- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

エディターで保管した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)