CLISTやREXXを編集中にメンバーを保管することなく編集画面の内容で実行するISPFエディター・マクロです。作成あるいは修正したCLISTやREXXを実行するためにわざわざメンバー・リスト・パネルに戻ったり、SAVEした後にコマンド・シェル・パネルに切り替えてEXECコマンドを入力する必要がありません。使い方は簡単で、エディター編集画面のコマンド行に「RUN」と入力するだけです。
画面でのテキスト入出力を伴うような処理では、メンバー・リストからのEXコマンドやISPFオプション6のコマンド・シェル・パネルからの実行と異なり、CLISTやREXX内で画面クリアーの処理を入れなくても画面の先頭行からフル・スクリーン表示されます。
①REXX exec「RUN」をCLISTメンバーとして登録する
任意の区分データセットに下記のREXX execをメンバー名RUNで登録します。できれば「userid.CLIST」のDSNでPDSEデータセット(もしくは区分データセット)を作るといいです(後述のTSO EXコマンドが簡単になる)。今後はREXXプログラミングも学習してみようとするなら「userid.CLIST」のDSNで作っておくと便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* REXX */ /* ================================================================= */ /* RUN CLIST/REXX IN ACTIVE EDITOR SESSION. */ /* ---------------------------------------- */ /* 1. Allocate temporary ps dataset. */ /* 2. Write all records in active editor session. */ /* 3. Execute CLIST/REXX exec in above dataset. */ /* 4. Delete temporary ps dataset. */ /* ================================================================= */ x=LISTDSI(ZZTEMP.CLIST) /* Test temporary dataset status */ IF x /= 0 THEN /* Already Exist temp dataset ? */ Address TSO "ALLOC DD(EXECIN) /* if not, Create temp dataset. */ DSN(ZZTEMP.CLIST) NEW CATALOG SPACE(1) TRACKS DSORG(PS) RECFM(F B) LRECL(80) REUSE" Address ISREDIT "MACRO" /* Do Editor Macros */ "REPLACE ZZTEMP.CLIST .ZFIRST .ZLAST" /* Write all records into temporary dataset. */ Address TSO "EXEC ZZTEMP" /* Execute it */ x=MSG(OFF) /* Supress command message */ Address TSO "FREE DD(EXECIN)" /* Un-alloc temporary dataset */ Exit |
マクロの処理自体は単純で、作業用データセット userid.ZZTEMP.CLIST を作成して編集中の内容をそこへ書き出し、TSOのEXECコマンドで実行します。REXX(CLIST)実行後も作業用データセットは保管されるので、必要であれば書き出された内容を確認することができます。また、CLISTやREXX実行中に重大なエラー起きてTSOセッションが終了してしまっても、後でメンバー内容を作業用データセットから復元できます。
1 2 3 4 |
: x=MSG(OFF) /* Supress command message */ Address TSO "DELETE (ZZTEMP.CLIST)" /* Delete temporary dataset */ Exit |
作業用データセットの保管が不要であれば、マクロ処理の終わりで実行しているTSO FREEコマンドをDELETEコマンドに変えれば作業用データセットを削除してマクロ処理を終了します。(実行途中でTSOセッションが終了してしまっても作業用データセットのDELETE前であれば編集中内容を復元できますが、エディターをRECOVERY ONモードにしておけばエディターの機能で復元することもできます)
②編集マクロとしてテストを行う
- 任意のISPFパネル上で下記のコマンドを実行する
- 適当なCLISTかREXXをエディターで開きRUNコマンドを実行する
1 2 |
TSO ALTLIB ACT APPLICATION(CLIST) DSN(CLIST) TSO ALTLIB DISP |
ALTLIB ACTコマンドは何もメッセージが出なければ正しく実行できています。ALTLIB DISPコマンドの表示結果で、ApplicationレベルのCLISTライブラリーが追加されているかを確認できます。
1 2 3 4 5 |
Current search order (by DDNAME) is: Application-level CLIST DDNAME=SYS00047 System-level EXEC DDNAME=SYSEXEC System-level CLIST DDNAME=SYSPROC *** █; |
1 |
RUN |
編集画面の内容がCLISTあるいはREXXとして実行されることを確認します。
③CLISTライブラリーをSYSPROCまたはSYSEXECに連結する(※テストだけで終えるならこれ以降の作業は不要)
①で登録したREXX編集マクロは、エディター編集画面で「RUN」コマンドとして実行します。そのため、CLISTライブラリーをSYSPROCまたはSYSEXECのDD名で割り振られてデータセットに連結するため割り振り直します。ALTLIBコマンドを使ってCLISTライブラリーをアクティブにする方法では、画面分割で新しいISPFセッションが起動する度にエディター起動前にALTLIBコマンドを実行しなければならず面倒です。
ISPFエディターの編集マクロやREXX exec、CLISTは共用するのであれば、元々のSYSPROC(またはSYSEXEC)に連結されるライブラリーに入れてしまうのが簡単です。しかし、個人的に使うものであれば共用ではなく個人のライブラリー・データセットに入れることになるので、自分のTSOユーザー空間だけでSYSPROC(またはSYSEXEC)に連結する方法を考えねばなりません。以下はその一例です。なお、マクロ名は実行という意味で「RUN」としていますが、ISPFコマンドと被らなければ8文字以内の任意の名前に変更できます。TSOコマンドと同じ「EXEC」にすることもできますが、混乱の元になるので「EXEC」は避ける方がいいでしょう。
- TSOログオンパネルの自動実行コマンドを控える
- 現在のSYSPROCライブラリーを控える(DDLISTコマンドを実行)
- CLISTライブラリー連結用CLISTを作成する
- TSOログオンパネルの自動実行コマンドを変更する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
------------------------------- TSO/E LOGON ----------------------------------- Enter LOGON parameters below: RACF LOGON parameters: Userid ===> xxxxxxx Password ===> New Password ===> Procedure ===> ISPFPROC Group Ident ===> Acct Nmbr ===> INFODIV1 Size ===> 20480 Perform ===> Command ===> ISPF PANEL(ISR@PRIM) Enter an 'S' before each option desired below: -Nomail -Nonotice -Reconnect -OIDcard PF1/PF13 ==> Help PF3/PF15 ==> Logoff PA1 ==> Attention PA2 ==> Reshow You may request specific help information by entering a '?' in any entry field |
画面下方のCommandフィールドの内容を控えます。この例では「ISPF PANEL(ISR@PRIM)」です。
1 2 3 4 5 6 7 8 9 10 |
Current Data Set Allocations Row 139 of 158 Command ===> Scroll ===> CSR Volume Disposition Act DDname Data Set Name Actions: B E V M F C I Q VPUSR1 SHR,KEEP > SYSPROC USER.CLIST VPISV1 SHR,KEEP > VENDOR.CLIST VPSYS2 SHR,KEEP > ISP.SISPCLIB VPUSR1 SHR,KEEP > USER.PROCLIB NEW,DEL > SYSTERM ---------- Allocated to the terminal ------- NEW,DEL > SYSTSPRT ---------- Allocated to the terminal ------- |
任意のISPFパネルでDDLISTコマンドを実行します。DD名SYSPROCで連結されているDSNを控えます。ISPFとSDSFだけを使っているのであれば、ほとんどの場合ユーザー用ライブラリーとISP.SISPCLIBだけで十分ですが、どれを外すと何に影響が出るのかがわからない場合は、面倒でも全部控えます。
1 2 3 4 5 6 7 8 9 |
FREE DD(SYSPROC) ALLOC DD(SYSPROC) DA(CLIST + 'USER.CLIST' + <== ここに元々連結されていた 'VENDOR.CLIST' + データセット名を記述する 'ISP.SISPCLIB' + 'USER.PROCLIB') + SHR REUSE WRITE &SYSUID..CLIST WAS CONCATINATED TO SYSPROC LIBRARIES. ISPF PANEL(ISR@PRIM) <== 最後に1で控えたコマンドを記述する |
上記の内容でCLISTを作成します。自分のCLISTライブラリー(userid.CLIST)に適当なメンバー名で作成します(ここではADDCLIBとします)。元々ログオンパネルで何のコマンドも指定されていなければ、最後の行にコマンドを追加する必要はありません。WRITEステートメントだけで終えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
------------------------------- TSO/E LOGON ----------------------------------- Enter LOGON parameters below: RACF LOGON parameters: Userid ===> xxxxxxx Password ===> New Password ===> Procedure ===> ISPFPROC Group Ident ===> Acct Nmbr ===> INFODIV1 Size ===> 20480 Perform ===> Command ===> EX (ADDCLIB) <== ここを変更する()内は作ったCLISTメンバー名 Enter an 'S' before each option desired below: -Nomail -Nonotice -Reconnect -OIDcard PF1/PF13 ==> Help PF3/PF15 ==> Logoff PA1 ==> Attention PA2 ==> Reshow You may request specific help information by entering a '?' in any entry field |
画面下方のCommandフィールドの内容を変更します。ログオン時にuserid.CLISTがSYSPROCライブラリーに連結されて割り振り直され、元々の自動実行コマンドが実行されます。CLISTを間違えて上手く動かなかった場合は、ログオンパネルの自動実行コマンドを元に戻せばログオンできます。
普段何気なくあるいは当たり前のように使っているISPFやSDSFですが、REXXやCLISTによって様々な独自機能を追加することもできます。上記のRUNコマンドも、REXXプログラミングの応用例の1つです。
④作業用データセットをSMS管理にする場合(※オプション作業)
TSOのユーザーIDと同じ名前で始まる(第1修飾子がTSOユーザーIDと同じ)データセットがSMS管理されるシステムの場合は、必要であればREXX execの中で使用する作業用データセットの割り振りもSMS管理データセット用に修正します。
1 2 3 |
Address TSO "ALLOC DD(EXECIN) /* if not, Create temp dataset. */ DSN(ZZTEMP.CLIST) NEW CATALOG SPACE(1) TRACKS DSORG(PS) RECFM(F B) LRECL(80) REUSE STORCLAS(name)" |
REXXソースコードRUNの始めの方にあるALLOCコマンド(12~14行目)のパラメーターを必要に応じて変更します。上記の例ではSTORCLASを追加しています。