T560/20データ・ストリーム
T560/20データ・ストリーム
T560/20データ・ストリームは日立のメインフレーム(VOS3等)で使用される、ホスト・コンピュータ側のオンライン処理プログラムと端末装置(ディスプレイ、プリンター)間でやり取りされる、データフォーマットの規約。HNAやTCPよりも上位のプロトコルで、アプリケーション・プログラムで直接ハンドリングされる通信データのことです。現在ではアプリケーション・プログラムが直接VTAMやXNFを介して通信することはほとんどなく、DCCMなどのミドルウェアなどのサービスを介して端末とのトランザクション通信がなされるのが一般的で、一般プログラマーがデータ・ストリームを理解し習得する必要はほとんどありません。これは日立に限らず、富士通やIBMでも同じです。
端末パネルの表示が上手く行かないような場合に、通信データのトレースを見てどんな内容がやり取りされているかを調べるような時にはデータ・ストリームの知識が必要になりますが、一般のユーザー自身でそれを行うこともほとんどないです。
データ・ストリームは端末画面のどこに(何行目の何桁目といった場所:アドレス)、何を(文字列の種類(漢字:英数字など)や内容)、どのように(色、輝度、罫線などの属性)表示する、といったものを明確にするために使われます。
アウトバウンドとインバウンド
データ・ストリームはデータが流れる方向によって、アウトバウンドとインバウンドの2つに分かれます。アウトバウンドはホストから端末方向のデータで、画面内容を示すデータで構成されています。
インバウンドは端末からホスト方向のデータで、アウトバウンドで示された画面に対して端末オペレーターが、どのようなデータを入力したかをホスト側プログラムに通知するものです。
TSSなどの対話型処理では、最初のアウトバウンド、インバウンド、それに対する答えとしてのアウトバウンド、インバウンド、・・・のように交互にやり取りがなされます。その他、画面の表示以外にもファイル転送などを行うためのデータ・フォーマットも規定されています。この場合は画面には転送データは表示されず、画面の裏でファイルデータがやり取りされるような動きになります。
定様式画面と不定様式画面
定様式とは画面内にフィールドと呼ばれる区切りを作り、その中に文字列を表示するように構成したものです。フィールドにはさまざまな属性を付けることができ、文字に色をつけたり、輝度を変えたり、罫線で囲んだりすることができます。入力できないように保護されたフィールドは出力専用でコンスタント・フィールドとなります。不定様式とはフィールドを設けず、画面上の任意の位置に文字列などを書き込むだけのものです。TSSのASPENパネルやDCCMなどのオンライン処理で使われる業務プログラムの画面は基本的に定様式です。
アテンション
表示された画面に入力されたデータをホストへ送信することをアテンションを上げると言います。アテンションを上げるためには、データを入力した後で、実行キー(ENTERキー)やPFキー(PF01からPF12もしくはPF13からPF24)を押下します。現在ではWindowsパソコン上で端末エミュレーターを動かすのが一般的で、この場合はPCのキーボードに割り当てたキーを使います。例えば実行キーは右ctrlキーなどが使われたりします。PF01はF1キー、PF12はF12キー、PF13以降はShiftキーとFnnキーを組み合わせるのが普通です。インバウンドのデータはアテンション操作によってホスト側に送信されます。
通常のアテンションの他に、割り込み用のアテンションもあります。T560/20では「割込」というキーがあります(IBMや富士通ではATTNキー)。割込みアテンションは、すでに送ったインバウンドの処理が行われている最中に、それを取り消したりする場合に利用されます。時間が掛かるTSSコマンドの処理などでは取消も可能ですが、秒単位で処理されるオンライン・トランザクション処理などでは、割込み操作はほとんどの場合間に合いません。割り込み処理をサポートするかどうかは、使用するミドルウェアやアプリケーションの仕様に依ります。
どのキーによってアテンション操作がなされたかはインバウンド・データの先頭に1バイトのコードで設定されます。これがINC(インタラプト・コード)です(IBMや富士通ではAIDバイト)。実行(ENTER)キーならx7D、PF1からPF9キーならxF1からxF9、PF10からPF12キーならx7Aからx7Cです。
コマンドとオーダー
- xF1:WRITE
- xF5:ERASE WRITE
- x6F:ERASE ALL UNPROTECTED
- xF6:READ MODIFIED
- x6E:READ ALL
コマンド
コマンドはアウトバウンド・データの先頭に付けられ、以降に続くデータを端末側でどうするのかを示します。
端末画面にデータを上書きします。画面の一部にポップアップするメッセージなどを書き込む際にも使われます。
WRITEコマンドの後にはCB0というコントロール・バイト(1バイト)が続きます。CB0にはキーボード・ロックの解除やアラーム鳴動などの指示が設定されます。
現在の画面データをクリアーした後、データを書き込みます。全く異なるパネルに移る際などに使われます。
ERASE WRITEコマンドの後にはCB2というコントロール・バイト(2バイト)が続きます。CB2にはCB0同様の制御フラグが設定されます。
すべての無保護フィールドをクリアーします。
端末オペレーターがキー入力などによって変更した画面上のフィールド・データをまとめて読み込みます。
現在、画面に表示されているデータ(フィールド位置、文字列や表示属性)を読み込みます。ホスト側で現在の画面データを一旦バックアップしておき、後で元に戻すような場合に使われます。
- x11:SBA(Set Buffer Address)
オーダー
オーダーはアウトバウンド・データの中で、表示する文字列や設定するフィールドを画面上のどこに置くかをを示したり、フィールドの属性を示したりするために使われます。コマンド(指令)に対して副指令とも呼ばれます。
- 主なオーダー
文字列やフィールドの位置を示します。バッファーアドレスは1行目の1桁目を0として24行目の80桁目の1919までです。1行目の80桁目が79、2行目の1桁目が80になります。T560/20ではIBMの3270と異なり、画面サイズは24行80桁しかないので(T560/20の古いマニュアルには12行80桁、32行80桁の画面も選択できる旨の説明があるが、実際の現場では見たことがないので、ここでは1種類のサイズしかないと解説した)バッファーアドレスと画面の行・桁は同じように対応します。3270の場合は、アドレス80が2行目の1桁目を指すか、1行目の81桁目を指すかは画面サイズによって変わります。
バッファアドレスはオーダーコードに続く2バイトで設定されますが、単純にx0000からx077Fを設定するわけではありません。次のように上位ビットと下位ビットを逆転して設定します。
アドレスバイト(16ビット) +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ I 0 I 0 I 0 I 0 I x I x I x I x I x I x I x I y I y I y I y I y I +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ↓ 転送バイト(16ビット) ※ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ I 1 I 1 I 1 I y I y I y I y I y I 1 I x I x I x I x I x I x I x I +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+アドレス値の12ビット(最大1919なので12ビットで表現できる)を上位7ビットと下位5ビットに分け、下位5ビットを転送バイト(SBAオーダーの直後バイト)にセットし、その上位3ビットを1にします。アドレス値の上位7ビットは転送バイトの2バイト目にセットし、その上位1ビットを1にし、隣のビット(ビット6)を反転します。エミュレーターによっては元のアドレス値のままでも正しく動いてくれるものもありますが、このような変換をして設定するのが本来の仕様です。なおIBMの3270と富士通の6650/6680では変換の方法が異なります。
フィールドを定義します。フィールドの開始位置は先行するフィールドに続きますが、直前にSBAオーダーを置いて任意の位置を指定できます。フィールドの長さは次のフィールドまでです。フィールドとフィールドの間に間隔を空けたい場合は、表示も入力もしないダミーのフィールドを設けることで行います。
FHオーダーにはフィールドの具体的な属性を示すDFCバイトが続きます。DFCは2または3バイトで構成され、FH+DFCⅠ+DFCⅡ+DFCⅢ+フィールド・データのように作られます。DFCの各ビットを設定することで、入力保護、非表示、高輝度、反転、明滅、下線、色(緑、白、青、赤、紫、空、黄)、拡大文字、数字のみ、入力必須、モジュラスチェックなどの属性を指定することができます。罫線を設定する場合は、さらにFH+DFCの組み合わせを追加して定義します。
FHオーダーのDFCは画面上の1文字を占めます。FHとDFCの3ないし4バイトの組み合わせは画面バッファ内では圧縮された情報となり1文字分を占有します(実際は見えないが文字表示や入力にも使えないデッドスペース。T560/20DS2と呼ばれる拡張されたデータ・ストリームでは画面上の1文字を占めない非占有のDFCも使えるがここでは解説しない)。例えば1行目の1桁目であれば、そこにフィールドの属性バイトが設定されるため、文字は1行目2桁目からの表示となります。デザイン上1行目1桁目から文字を置きたい場合は、24行目80桁目にFHオーダーが置かれるようにします。
カーソルの表示位置を示します。
特定の文字を繰り返し表示します。AAAAAとか********のように同じ文字を連続させる場合に使用します。オーダーに続いてどこまで文字を繰り返すかを示すバッファーアドレスを指定します。バッファーアドレスの指定方法ははSBAオーダーと同じです。
ORオーダーはデータを圧縮する目的で使用できますが、オーダーコードとバッファーアドレスで3バイト使うので、少なくとも5文字以上連続しないと効果がありません。
データ・ストリームの例
アウトバウンド
TSSのREADYプロンプト
F1C3 11F0C7 1DC2C8 D9C5C1C4E840 11FFC9 1DC0C0 11FEFB 1DC2C8 11E0CA 13 コC Sバア FDD c'READY' I マB Bッド HFF C ン0 Aフレ CC ド ァス ⅠⅡ
ASPENメニュー画面
F58381 11FCF9 13 11E0C0 3CEFC20000 11E0C0 1DD2C8 0A41 7CC1E2D7C5D540 コCC Sバア I Oバア FDD S c'@ASPEN' マBB Bッド C Rッド HFF I ン22 Aフレ フレ CC ド ァス ァス ⅠⅡ 続き 3CF2C05C 40 0A42 B5A1C7BDC1AAC2F2A5E1A5CBA5E5A1BC 0A41 40 c'機能選択メニュー' 3CE8C25C 11E8C2 1DD2C8 0A41 6060606060 11EEC2 1DD2C8 0A41 5C 11F0C2 3CFFC400 00 11E0C5 3CEFC700 00 11F0C7 3CFFC900 00 11F4C7 1DD2C8 0A41 0A42 A3B1 11F7C7 1DC0C8 0A41 7C C5C4C9E3 3CE3C840 .......以下省略
0A41は漢字の終了(シフトイン)、0A42は漢字の開始(シフトアウト)。
インバウンド
TSSのREADYプロンプトに「ASP」と入力して実行(ENTER)キー押下。
7D E3CA 11E0CA C1E2D7 I カア フア c'ASP' N ード ィド C ソレ ーレ ルス ルス ド
カーソルアドレスはASPと入力した際のカーソルの位置を示す。
T560/20データ・ストリームは、マニュアル「T-560/20ターミナルシステム」(500-2-095)に概要が解説されていましたが、実際にプログラムを作成して端末にデータを表示させたり、端末からのデータを読み込んだりするためには情報不足です。その他にも輸出用の英文マニュアルがあったような気もしますが定かではありません。ベンダー向けに開示された技術仕様書にはconfidentialのスタンプがあったので、国内向けには詳細が一般公開されていなかった気もします。そんなわけでプログラムを作成したり、トレースを解析するレベルの詳細であれば、メーカーに照会する必要があります。IBMはマニュアルですべて公開していますが、富士通や日立は端末のデータ・ストリームに関して、ユーザーに対してはその必要性がない限り公開されない可能性が高いです(ソフトウェア・ベンダーの場合は技術情報の開示契約に基づきます)。FHオーダーのDFCビットなどもマニュアルには詳細(何ビット目が何を示す)はマニュアルに記載されていなかったので掲載しませんでした(昔の自分のノートには書いてありますが、さすがに勝手に出すことはできません)。
検索回数が多かったので記事として掲載してみたのですが、今となってはベンダーでエミュレーターでも作る人でない限り実務で詳細が求められることはないでしょう。製品のトラブル等であれば、メーカー(あるいはベンダー)で調べるからトレースなどはそのまま渡してくれれば結構です、となるでしょうし。ミドルウェアを使わずに独自のオンラインプログラムを作ることも今はないでしょう。そうであっても個人的にはブラックボックスにしないで、公開した方がいいと思いますが、このあたりの考え方は日本のメーカーとIBMとでは本当に違いますね。