CLIST
CLIST:コマンド・リスト(コマンド・プロシージャー)
CLISTはTSOにおけるコマンド・スクリプトです。同じコマンドを繰り返し実行する時、決まったパターンで複数のコマンドを連続して実行する時など、繰り返し入力の手間を省いたり、定型的な処理を自動化させるために用いられます。
処理を自動化すると言う意味ではJCLにも似ていますが、目的や機能はUNIXやWindowsにおける、シェルスクリプトやバッチファイルと同じと考えていいでしょう。JCLにはできない、ループの制御や端末入出力など、プログラム的な要素も組み込まれています。
処理の対象となるデータセットやメンバー名などを入力させJCLを生成してサブミットしたり、コマンド操作の記録を残すためにCLIST化したり、などさまざまな用途で利用されます。
次に示すCLISTは、VSAMデータセットのレコード内容をISPFブラウザーで表示するためのサンプルです。
/* ① /* SAMPLE CLIST: SHOW VSAM DATASET RECORD /* PROC 0 ② MAIN: + ③ WRITENR ENTER VSAM DSNAME ==> ④ READ &INDSN ⑤ IF &INDSN = () THEN EXIT ⑥ ALLOC DD(SYSUT1) DA('&INDSN') SHR REUSE ⑦ ALLOC DD(SYSUT2) NEW TRACKS SPACE(10 10) REUSE ALLOC DD(SYSIN) DUMMY REUSE ALLOC DD(SYSPRINT) DUMMY REUSE CALL *(ICEGENER) ⑧ LISTDSI SYSUT2 FILE ⑨ ISPEXEC BROWSE DATASET('&SYSDSNAME') VOLUME(&SYSVOLUME) ⑩ FREE DD(SYSUT1) ⑪ FREE DD(SYSUT2) FREE DD(SYSIN) FREE DD(SYSPRINT) GOTO MAIN ⑫
- ①コメント文です。/*と*/で囲んだ部分はコメントと見なされます。行末までコメントとする場合、*/で閉じる必要はありません。
- ②CLISTが受け取るパラメーターを定義します。パラメーターがなければ必ずしも記述する必要はありません。
- ③ラベルです。ラベル名:の形式で、ジャンプ命令などで参照されます。+はステートメントが次の行に続くことを示します。
- ④端末にメッセージを表示します。ENTER以降が表示されるメッセージ・テキストです。WRITEとWRITENRの2種類あり、NR付きはメッセージを出力した後に、改行しません。
- ⑤端末から入力データを読み込みます。読み込んだ文字列は、READ命令の後に指定した変数に格納されます。CLISTでは変数は事前定義しません。ただし処理に先立って、予め特定の値を設定しておきたい場合は、SET命令を利用できます。
- ⑥IF…THEN…ELSEです。説明するまでもないでしょう。サンプルでは変数INDSNがヌル値ならCLISTから抜けると言う意味で使っています。要は入力されたDSNが空エンターなら、終了させるために使っています。
- ⑦呼び出すプログラム(ユーティリティー)が使用するデータセットを割り振っています。JCLのDD文に相当します。JCLと異なりEXECよりDDを先に書くことを知っておいて下さい。
- ⑧プログラムを呼び出します。サンプルではICEGENERユーティリティーを呼び出して実行します。
- ⑨LISTDSIはDD名で割り振られているデータセットに関する情報を取得します。情報はシステム変数に格納されます。例えばDSNは&SYSDSNAME、ボリューム名は&SYSVOLUMEです。
- ⑩ICEGENERによって出力されたデータセット(VSAMのアンロード・ファイル)をISPFブラウザー・サービスで表示します。ブラウザーを終了させると、ISPEXEC命令は終了します。
- ⑪割り振ったデータセットを解放します。
- ⑫次のデータセットの表示のために、DSN入力の処理に戻ります。
作成したCLISTは区分データセットのメンバーとして登録し、TSOのコマンド・プロンプトもしくはISPFのコマンドシェル・パネルからEXECコマンドによって実行します。
EXEC 'dsname(member)'
なお’userid.CLIST’の名前のデータセットに作成すれば、EXECコマンド自体も省略して、メンバー名のみの入力でCLISTを実行させることができます。
時間が掛かる大量のデータ処理にはバッチジョブが向いていますが、TSOコマンドやISPFサービスを組み合わせることで、面倒なプログラムを作ることなく、処理を自動化させたり、繰り返したりすることができます。JCLによるバッチ処理だけでなくCLISTも使いこなせるようになれば、MVSの利用方法の幅は大きく拡がります。