2016年4月4日月曜日

メインフレームにおけるデータストリーム概要その2~指令・副指令編

こんにちは、綱島です。




前回、データストリームの基本となるフィールドの考え方についてお話しました。
今回はは、フィールドの画面上の位置についての話をするつもりでしたが、画面を表示するためのデータストリームの指令・副指令について話をしたほうが順序としてわかりやすいので、変更しました。

フィールドの話の中に、フィールドは属性から属性までと言いました。この属性を指定するためには、副指令(オーダーとも言います)を知る必要があります。この副指令は、属性を指定したり、カーソルの位置を変えたり、文字を繰り返し表示したりするために用います。
属性を指定するオーダーは、SF(Start Field)やSFE(Start Field Extended)など複数あり、副指令の種類によってパラメータが決まっていますので、そのパラメータで色や罫線などを指定します。

では、副指令があるのなら、指令は?と思われたと思います。そうです、指令があります。
指令は、「画面を表示する」などの指令がいくつかあります。端末の画面状態をホストへ送るような指令もありますが、ホストから端末エミュレーターへ送られてくるデータのうち、画面を表示するためのデータストリームがかなりの割合を占めています。画面を表示するための指令を知っているだけで、データストリームの基礎としては十分です。簡単では?と思わないで、もう少しお付き合いください。

指令の中で、画面を表示するための指令は、2つしかありません(データストリームの種類によって、若干異なります)。
2つの指令とは、Erase/Write指令とWrite指令です(以降、単にWriteと表記し「指令」は省略します)。
Erase/Writeは、前の画面をクリアした後、副指令に従って文字などを書きます。Writeは、前の画面はそのままで、副指令に従って文字などを書きます。
違いは、最初に前の画面をクリアするか、そのままにして上書きするかの違いだけです。

データストリームは、このErase/Writeのような指令で一つのかたまりとなります。

Erase/Writeの構造について、見てみましょう。
Erase/Writeは、1バイトのWCC( Write Control Character)と複数の副指令で構成されています。なお、WCCはデータストリームの種類によって、2バイトの場合やWCCと呼ばない場合がありますが、指令の直後に指定することは変わりがありません。
Erase/Writeの構造を図示すると、図1のようになります(E/Wとは、Erase/Writeの略した書き方です)。


WCCについて、細かくは話しませんが、キー入力を許可するなどの情報が含まれています。
文字についてですが、文字は副指令の一部と考えて構いません。副指令で使用する値は、文字コードの範囲外が使用されているので、文字と副指令は区別がつきます。また、日本語は必ずシフトコードで囲まれていますので、シフトコードを副指令と考えればよいのです。
ここで、前回にも例に出しました図2の画面を例としてデータストリームはどうなるかを示します。



図3のような情報が、ホストから送られてきますので、画面の左上から複数のスペースを書き、属性を処理し、○○会社メインメニューを属性に従って書き、また複数のスペースを書き・・というように順番に画面を構成することになります。


ただ、表示したい文字列間に「複数のスペース」で場所を移動させました。最初のスペースは20個程度ですが、「○○会社メインメニュー」と「1.人事システム」の間には空行がありますので、100個以上のスペースが必要です。これでは、ただデータ量が増えるだけであまりかしこいとは言えませんし、今のような高速で通信していなかったことろは、それだけで速度が遅くなったり、通信費がかさんだりしてしまいます。
副指令は属性に関するもの以外にも、表示場所を移動させたり、同じ文字を繰り返したりできるものがあります。実際は、複数種類の副指令を使って画面を構成します。この場所を移動させる副指令が、前回少し話をしました画面の位置を指定することになります。
場所移動の副指令が入ると、図4のようになります。


また、場所を指定する副指令があると、画面の左上から順番に送らなくてもよくなるので、途中に後から挿入する場合も、後ろにつけてしまうことができます。


このようにデータストリームで画面を表示するためには、たくさんの副指令を解釈して表示します。指令は少なくても副指令が複数あり、パラメータもあるので、全体でみるとデータストリームの解釈は、そんなに簡単ではないと思っています。
次回は、主だった副指令について、話をしたいと思います。


0 件のコメント:

コメントを投稿