今回は、画面の罫線を説明しましょう。これは、DBCS環境特有の機能のため、SBCSの端末では、罫線はひけません。
2つの方法
画面に罫線を出す方法には、(1)5250の画面罫線機能を使う、(2)DDSキーワードGRDxxを使う、の2つの方法があります。ここでは、ややこしい(1)の5250の画面罫線機能を説明します。また、TOOL BOXには、この両者をサポートするユーティリティが含まれていますので、ご利用下さい。Grdxxへの変換もあり、便利ですよ。尚、この5250の罫線機能は、古くからあり、System38でも使っていました。
WWWマニュアル
1. 5250機能によるもの
2. DDSキーワードによるもの
仕組みの簡単な説明
基本的に、罫線データと、それを合成したい通常の画面とに分けて考えます。右の図で、2つの画面が一つの結果としての画面になっているように見えます。 これを正確に表現するならば、「罫線画面(罫線データ)は、端末ごとの表示用のバッファに格納されて、消去されるまで残り、通常画面では、そのバッファに格納された罫線データを単に、マージして表示しているだけ」となります。
ここでの注意は、表示までの手順です。
1.罫線データ(右の図では、イメージしやすいように罫線画面とした)を、バッファに格納(WRITE)
2.罫線合成を指示する制御コードをつけた通常画面(文字データ)をWRITEする。
3.用が無くなったら、罫線データを消去する。 |
|
もう一つ、前提として、頭に入れておいてほしいことがあります。それは、5250は、データストリームを、読みやすいように画面に表示している、という基本です。それは、この罫線データも同じことです。画面の左上から右下まで、一本のデータストリームなのだ、というイメージを持っていてください。
先ほども言いましたが、画面に罫線が出るまでは、以下のステップを踏みます。
- 罫線データを、画面バッファに書き出し(罫線データの書き込み制御)
- 罫線合成画面を書き出し
- 罫線データの消去データを書き出し
すべて、画面バッファを扱うものですが、普通のWRITE
命令(つまりデータストリームを書き出す)で行います。このデータストリームの先頭の4バイトが、表示の仕方をコントロールしています。
罫線書き込み制御
罫線書き込み制御は罫線画面様式をPC5250に保管するときに使用します。その制御データの形式は次のとおりです。
形式
罫線書き込み制御コード
1行目、1桁目を指定して罫線書き込み制御コードがホスト・システムから送られると、そのあとのデータを罫線画面様式の書き込みに関連した一連のデータとみなします。
1桁目 |
2桁目 |
3桁目 |
4桁目 |
X'27' |
X'2F' |
X'nn' |
X'20'
or X'27' |
非表示 |
非表示 |
F/B |
通常
/ND |
註:
は、固定情報を意味します。
X'nn' ... 罫線情報バッファー指定データ
- X'C6'(英字“F”) : 罫線定義データは罫線情報バッファー1に蓄えられます。
- X'C2'(英字“B”) : 罫線定義データは罫線情報バッファー2に蓄えられます。
注: PC5250が罫線書き込み制御コードを受けた時点で、指定された罫線情報バッファーの内容は消去され、それに続く罫線定義データの記憶に備えます。
この、FとBは、FrontとBackだと思います。この部分は重要で、最初私も勘違いしていましたが、
あくまで、罫線データは「装置」に結びつくもので、ジョブに結びつくものではない
と言うことを、頭に入れて置いてください。罫線の表示中に、システムリクエストで、セカンドジョブへ移行したとき、両方のジョブ画面で、罫線を出そうとすると、おかしくなります。最後に書き出した、罫線データが有効なのです。罫線データはジョブではなく、表示装置に書き込まれるのです。お分かりですか?
ある罫線のついた画面Aを使用中に、そのまま、システムリクエストによるセカンドジョブでも、別の罫線つきの画面Bを呼び出したとします。画面Bは自分用の罫線をバッファに書き出して、表示しますので、うまく出てきます。問題は、その後、画面Aに戻ったときです。画面Aが罫線データをリフレッシュしないかぎり、画面Aの文字データ+画面Bの罫線になってしまうのです。また、画面Bを終わらせるときに、罫線データ消去するはずですので、画面のバッファに罫線データが、なくなることもありえます。
これを、2つのバッファ(FとB)で切り替えて、行おうと言うのは、かなり設計の段階から、そのプログラムの用途を限ることになります。たとえば、画面AはバッファFのみ、画面BはバッファBのみ、これでバッティングしなくはなります。でも、画面CがFを使い、画面DがBを使い、と成ってくると、組合せ(システムリクエスト後に呼ばれるプログラム)次第で、同じバッファを使ってしまう確立は高くなります。こんな制限つけたくないですよね。あまり、自分が罫線にこだわらなくなったのは、このあたりの事情です。どうしても、必要なとき外は、罫線は使いません。まあ、とりあえず、罫線の「リフレッシュキー」をつけて、「罫線表示がおかしい時は、押してください」と、するか、ユーザーがセカンドジョブへ飛ばさないようにしましょう。 |
罫線指定データ
罫線書き込み制御コードに続き1行目の4桁目を表示開始位置として指定されたデータは、罫線指定データと見なされます。罫線指定データは、縦24行、横80桁にわたる全表示画面の各文字表示位置ごとに縦、横の罫線の有無を指定します。
罫線の色(使えるのか不明です)
罫線指定データの最後から2番目の「色」の部分は、CAのマニュアルによれば、「予約済み」とありますが、PC用の5250(CAではない)のマニュアルによれば、罫線の色指定に使われているようです。どっち?CAはダメなのか?
コード※ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
色 |
黒 |
青 |
緑 |
水色 |
赤 |
紫 |
黄 |
白 |
灰色 |
薄青 |
薄緑 |
薄水 |
薄赤 |
薄紫 |
薄黄 |
明白 |
※コードは16進数はなく、キャラクターです。(紛らわしいけど...)
罫線定義データに関しては 9.51.
罫線を画面につけたい(2) に詳しく書きました。
罫線合成表示
今度は、文字データを出す番です。ここで、罫線データと、文字が組み合わさって、ユーザーが見る画面を出すわけです。当然、罫線指示データが、バッファのFとBどちらに入っているか、指定しなくてはいけません。したがって、ここでもやはり、制御コードが出てきます。
形式
1桁目 |
2桁目 |
3桁目 |
4桁目 |
X'28' |
X'2F' |
X'nn' |
X'20'
|
明滅 |
非表示 |
F/B |
通常 |
X'nn' ... 罫線情報バッファー指定データ
- X'C6'(英字“F”) :
罫線情報バッファー1の内容といっしょに表示されます。
- X'C2'(英字“B”) :
罫線情報バッファー2の内容といっしょに表示されます。
注: 文字データの属性文字は、1行目の4桁目のX'20'に上書きするこ
ができます。
罫線表示を伴うユーザー画面様式の1行目の1桁目から4桁目は、文字データとして使用できません。また1行目の3桁目は英文字"F"または"B"を含んでいなければなりません。そうでない場合は、罫線画面様式は表示されず、文字データのみからなる
ユーザー画面様式が表示されます。
罫線情報バッファー消去
1行目、1桁目を開始位置として指定した以下のデータは、罫線情報バッファー消去制御コードとみなされます。パラメーターで指定された罫線情報バッファーの内容を消去します。
形式
1桁目 |
2桁目 |
3桁目 |
4桁目 |
X'29' |
X'2F' |
X'nn' |
X'20'
|
非表示・
反転 |
非表示 |
F/B |
通常 |
X'nn' ... 罫線情報バッファー指定データ
- X'C6'(英字“F”) : 罫線情報バッファー1の内容を消去します。
- X'C2'(英字“B”) : 罫線情報バッファー2の内容を消去します。
ちょっと、内容が長くなりましたので、第一部はここまで。第2部では、実際に罫線データをコードにする部分を取り上げて、また、サンプルを表示する部分のプログラムの説明をします。
続く...
2000-8-5 |