CLISTは、TSOにおけるコマンド・スクリプトです(MSPとVOS3では、コマンドプロシージャと呼ばれます)。同じコマンドを繰り返し実行する時、決まったパターンで複数のコマンドを連続して実行する時など、繰り返し入力の手間を省いたり、定型的な処理を自動化させるために用いられます。
処理を自動化すると言う意味ではJCLにも似ていますが、目的や機能は、UNIXやWindowsにおけるシェルスクリプトやバッチファイルと同じと考えていいでしょう。JCLにはない、ループの制御や端末入出力など、プログラム的な要素も組み込まれています。処理の対象となるデータセットやメンバー名などを画面から入力させ、JCLを生成してサブミットしたり、コマンド操作の記録を残すためにCLIST化したり、などさまざまな用途で利用されます。
次に示すCLISTは、VSAMデータセットのレコード内容をISPFブラウザーで表示するためのサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* ① /* 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コマンドによって実行します。もしくは、DSLISTユーティリティーのメンバー・リスト・パネルで、CLISTメンバーのコマンド・フィールドにEXを入力することで実行することもできます。
EXEC 'dsname(member)'
なお、’userid.CLIST’の名前のデータセットに作成すれば、EXECコマンド自体も省略して、メンバー名のみの入力でCLISTを実行させることができます。
時間が掛かる大量のデータ処理にはバッチ・ジョブが向いていますが、TSOコマンドやISPFサービスを組み合わせることで、面倒なプログラムを作ることなく、処理を自動化させたり、繰り返したりすることができます。JCLによるバッチ処理だけでなく、CLISTも使いこなせるようになれば、MVSの利用方法の幅は大きく拡がります。