CL

107. OS Ver7.1 から PAUSE が効かない STRPCCMD のバグを避けるには ?

PC オーガナイザー: STRPCCMD の PAUSEキー・ワード ( *YES / *NO ) は
意味があって PAUSE(*YES) の場合は DOS 窓はコマンドの実行に停止して
エンド・ユーザーが何かキーを押すまで停止することになる。
これによってコマンドの実行が完結したことをプログラムが知ることができるのである。

  1. STRPCCMD PCCMD('コマンド A')
  2. STRPCCMD PCCMD('コマンド B')

のように連続して コマンドA → コマンドB と行う場合
コマンドA が終了してからコマンドB の実行に移らなければならないのであるが
PAUSE(*NO) でコマンドA を実行するとコマンドA の実行が投入された途端に
制御は直ちにコマンドB の実行に移ってしまう。

これは元々 Windows のアーキテクチャーにジョブ ( = Windowsではプロセス ) が
IBM i のようにひとつひとつ終了してから次のジョブに移るのではなく
別の新しいプロセスとして投入して次のプロセスに移るというのが
基本的な考え方に基づいているからである。

簡単に言えば、私たちは CALL 命令によってプログラムを呼出して
実行させるのだが Windows では SBMJOB によってプログラムを
実行させる、と言えば感覚的に理解して頂けると思う。

.... ということで PAUSE(*YES) を使うにはそれなりの事情や意味があったのだが
i5/OS Ver7.1 からは PAUSE(*YES) が効かなくなる、というバグに見舞われている。
IBM もせっかく正しく動作しているものに手を入れてバグにしなくても
よいのだがこのバグにどのように対処すればよいのだろうか?

それは DOS の START コマンドを使って /WAIT オプションを指定することである。

START /WAIT c:\MYBOOK.XLS

のようにして /WAIT を使えば START コマンドは確実に停止する。
START コマンドが使えるように工夫して欲しい。

なお AutoWeb では

?STRPCCMD PCCMD(....) PAUSE(*YES)

のようにすれば 5250ストリームの中に「停止.... *YES」の文字列が現れるので
検知することによって確実に停止するように設計されている。
( PCCMD の中に停止情報は含まれているがそれはバグのため使用することができない。)