「メインフレーム・コンピューター」で遊ぼうこんな時代に今さらメインフレーム・コンピューターに取り組むハメになったみんなが助けあうサイトです。RSSWordPress.orgコスパのいい社内システムの作り方メインフレームを扱っていると、軽い開発やメンテナンスにリソースを割けない、しかし、BPCも考えねば。解決策のひとつがクラウドにおくFileMakerです。Comment印刷用ページの表示STACKマクロによるTSOコマンド出力のトラップz/OS(MVS、OS/390)のTSOでは、CLIST内で発行したTSOコマンドの出力メッセージは、システム変数「SYSOUTTRAP」と「SYSOUTLINE」によって簡単にトラップすることができます。これらの変数を使えば、コマンドからの出力メッセージはシステム変数SYSOUTLINEnnに保管され、後でその内容を参照したり取り出したりすることができます。「SYSOUTTRAP」と「SYSOUTLINE」の機能は、z/OSでしか利用できません。このサイトでも紹介しているライセンス・フリーで使用できるMVS3.8あるいはMSPやVOS3では利用できません。これらのOSではシステム変数ではなく、アセンブラー・プログラムによってTSOコマンド出力の宛先を変えることで代替することができます。TSOコマンドの出力メッセージの宛先を変更するには、STACKマクロを使います。そのサンプルとして@CMDプログラムを紹介します。@CMDプログラムは、STACKマクロによってメッセージの宛先をデータセットに変更して、指定されたTSOコマンド・プログラムを呼び出し、変更したメッセージの宛先を元に戻して終了します。CLIST内で直接TSOコマンドを発行する代わりに@CMDを発行することで、指定したTSOコマンドの出力メッセージをデータセットに書き出すことができます。後はCLISTの中でそのデータセットにアクセスすれば、コマンドから出力されたメッセージを取得することができます。END////これはMVS3.8用ですが、冒頭のアセンブルとリンクエディットのJCL部分を変更すればMSPとVOS3でも使えると思います。必要はありませんが、OS/390やz/OSでも動かすことができます。ロードモジュールは、TSOコマンド・プログラムとなるので、TSOのコマンド・ライブラリーもしくはTSOログオン・プロシージャーのSTEPLIBデータセットに格納します。TSOコマンドを発行するプログラムはTMPの代わりをすればよいのです。MSPの場合は、マニュアルTSS/Eコマンド開発手引書の1.2ターミナルモニタプログラムを参考にできます。TSSコマンドの作成と組み込み、あたりが参考にできます。UNIT=SYSDA,SPACE=(TRK,(1,1)),DCB=(DSORG=PS)//TSOコマンドからの出力メッセージを格納するデータセットを割り振ります。DCB情報は実際の書き出し時にシステムによって設定されるのでPSデータセットであることだけを指定します。parameter@CMDに続き、実際に発行したいTSOコマンドとそのパラメーターを指定します。呼び出したTSOコマンドからの出力メッセージはDD名MSGPRINTで定義されたデータセットに書き出されます。コマンドを使用する前にALLOCコマンド等で割り振っておく必要があります。以下は、CLIST内で使用する例です。最初にMSGPRINTを割り振ります。最初のLISTDSコマンドはそのまま発行しているのでメッセージはトラップされず画面にそのまま出力されます。次の@CMDによってLISTALCコマンドが呼び出され、その出力はMSGPRINTデータセットに出力されます。画面には出力されません。