MFS機能
本章では、MFSの主要機能について説明します。
1. フィールド属性の動的変更
画面に表示されるフィールドの一般属性と拡張属性を動的に変更する機能です。ユーザー・アプリケーションで変更する属性値を該当するフィールドの前に追加して送信すると、MFSでこれを解釈し、マップに定義されたDFLDの属性を変更して端末に送信します。
1.1. 一般属性の変更
一般属性の変更は、カーソルの位置、フィールド保護の有無、数字/文字フィールドの指定、輝度の調整、隠しの有無、MDT on設定の有無などが指定できます。この機能を使用するには、MFLDステートメントの"ATTR=YES"に設定し、属性データのためにLTHを実データの長さより2バイト長く定義する必要があります。
属性データのビット構成は以下のとおりです。

バイト | ビット | 説明 |
---|---|---|
0 |
0-1 |
現在のフィールドにカーソルを位置させます。
|
2-7 |
0に固定します |
|
1 |
0 |
1に固定します |
1 |
属性の変更方法を設定します。
|
|
2 |
フィールド保護の有無を設定します。
|
|
3 |
数字/文字フィールドを指定します。
|
|
4-5 |
輝度を設定します。
|
|
6 |
ライトペン関連のフィールドを指定します。(サポートされません) |
|
7 |
MDTを設定します。
|
1.2. 拡張属性の変更
拡張属性は、強調表示、色、アウトラインを変更できます。この機能を使用するには、MFLDステートメントのATTR=(,nn)を設定します。各変更属性ごとに2バイトの領域が必要であるため、実際のデータの長さにnn*2を追加した値でLTHを定義する必要があります。属性データはATTRタイプ(1バイト)+ATTR値(1バイト)で構成されます。
以下は、データについての説明です。
-
強調表示と色
タイプ 値 説明 C1(強調表示)
X'00'
デフォルト
X’F1'
HBLINK
X’F2'
HREV
X’F4'
HUL
C2(色)
X'00'
デフォルト
X’F1'
BLUE
X’F2'
RED
X’F3'
PINK
X’F4'
GREEN
X’F5'
TURQ
X’F6'
YELLOW
X’F7'
NEUTRAL
-
アウトライン
タイプ ビット 説明 03(アウトラインの代替) 04(アウトラインの追加)
0-3
0に固定
4
Left line
5
Over line
6
Right line
7
Under line
X'00'
デフォルト
1.3. 使用例
以下は、CODEフィールドの一般属性と拡張属性の2つを動的に変更するMFSマップとCOBOLプログラムの例です。CODEフィールドは非保護フィールドに定義されていましたが、COBOLプログラムでX’C0E8’に設定したため、カーソルが位置する保護フィールドの文字カラーは青緑に、輪郭線は上下に表示されます。
<TEST001.TXT>
********************************************************************* TEST001 FMT DEV TYPE=(3270,2), X FEAT=IGNORE, X DSCA=X'00A0' ... CODE DFLD POS=(7,4), X LTH=10, X ATTR=(NOPROT,ALPHA,NORM,MOD) ... FMTEND ********************************************************************* TEST001I MSG TYPE=INPUT, X SOR=(TEST001,IGNORE), X NXT=TEST001O SEG MFLD 'TESTMPP1', X LTH=8 ... MSGEND ********************************************************************* TEST001O MSG TYPE=OUTPUT, X SOR=(TEST001,IGNORE), X NXT=TEST001I SEG ... MFLD CODE, X LTH=16,ATTR=(YES,2) ... MSGEND **********************************************************************
<TESTMPP1.cob>
ID DIVISION. PROGRAM-ID. TESTMPP1. AUTHOR. TMAXSOFT. DATA DIVISION. WORKING-STORAGE SECTION. ... 01 OUTPUT-MESSAGE-IO-AREA. 05 OM-LL PIC S9(3) COMP. 05 OM-Z1-Z2 PIC S9(3) COMP VALUE ZERO. 05 OM-MSG-DATA. ... 10 OM-OUT1. 15 OM-OUTFLD-DYNA-ATTR. 25 OM-OUTFLD-ATTR PIC X(2). 25 OM-OUTFLD-EATTR1 PIC X(2). 25 OM-OUTFLD-EATTR2 PIC X(2). 15 OM-OUTFLD-DATA PIC X(10). ... PROCEDURE DIVISION. ... * CURSOR ON, ATTR OVERRIDE, PROT, HIGH MOVE X'C0E0' TO OM-OUTFLD-ATTR. * COLOR: TURQ MOVE X'C2F5' TO OM-OUTFLD-EATTR1. * OUTLINE: OVER,RIGHT,UNDER MOVE X'0305' TO OM-DAMFLD-EATTR2. ...
1.4. 注意事項
OpenFrameはASCII環境をベースにしていますが、属性データは文字ではなく、各ビットが意味を持っているため、EBCDIC環境で定義されたHex値をそのまま使用します。ユーザー・アプリケーションで属性データがリテラルで記述されている場合は、これをEBCDIC Hex値に変更する必要があります。
たとえば、特定のフィールドにカーソルを位置させ、NODISP属性を追加する動的属性変更データをEBCDIC文字で記述した場合は、以下のように全く異なる値として解釈されます。
-
変更前
... * CURSOR ON, NODISP MOVE '{d' TO OM-OUTFLD-ATTR. ...
'{d’文字のEBCDIC、ASCII値の比較 -
変更後
... * CURSOR ON, NODISP MOVE X'C084' TO OM-OUTFLD-ATTR. ...
2. ページング
1つのメッセージはマルチ・セグメントで構成されます。このデータは1つのフォーマットで構成されていることもあれば、複数のフォーマットで構成されていることもあります。MFSでは両方に対応しており、シングル・フォーマットのメッセージをブラウジングすることを物理ページング、マルチ・フォーマットのメッセージをブランジングすることを論理ページングと呼びます。1つのメッセージに両方を使用する場合もあります。
各データの構造とマルチ・フォーマットのMFS定義ステートメントの作成方法について説明します。
2.1. シングル・フォーマット
通常MODは1つのSEGステートメントを使用しますが、複数のSEGステートメントを定義することもできます。
MODは2つのSEGステートメントで構成されており、アプリケーションから送信したデータが5つのセグメントを持っている場合は、以下の図のように1つのメッセージを3回に分けて出力します。最初の画面(1、2番目のセグメント出力)で次のデータ(3、4番目のセグメント)を確認するには、PA1ボタンを押します。詳細については、PA1とPA2を参照してください。

2.2. マルチ・フォーマット
アプリケーションに応じて、1つのメッセージに複数のフォーマットのデータを送信する必要がある場合があります。
1つのMFS定義ステートメントに各画面を定義します。MODにはデータを区分する条件とLPAGEステートメントを、DOFには出力する画面をDPAGEステートメントごとに定義すると、データとLPAGEステートメントのCONDに従ってMFSで適切な画面を出力します。MFSが該当するデータがどのLPAGEのデータであるかをチェックする場合、適切な条件がなければ最後のLPAGEを選択します。条件チェックに使用するMFLDは、最初のSEGに位置する必要があります。

<TEST002.TXT>
********************************************************************* TEST002 FMT DEV TYPE=(3270,2), X FEAT=IGNORE, X DSCA=X'00A0' ... PAGEA DPAGE CURSOR=((3,2)) DFLD 'PRODUCT CODE:', X POS=(2,2), X ATTR=(PROT,ALPHA,HI,NOMOD) CODE DFLD POS=(3,2), X LTH=6, X ATTR=(NOPROT,NUM,NORM,MOD) ... PAGEB DPAGE CURSOR=((1,2)) DFLD 'ORDER LIST:', X POS=(2,2), X ATTR=(PROT,ALPHA,HI,NOMOD) ODATE1 DFLD POS=(3,2), X LTH=4, X ATTR=(PROT,ALPHA,HI,NOMOD) OLOCA1 DFLD POS=(3,7), X LTH=4, X ATTR=(PROT,ALPHA,HI,NOMOD) ONUMB1 DFLD POS=(3,12), X LTH=3, X ATTR=(PROT,ALPHA,HI,NOMOD) ... PAGEC DPAGE CURSOR=((1,2)) DFLD 'STOCK LIST:', X POS=(2,2), X ATTR=(PROT,ALPHA,HI,NOMOD) SLOCA1 DFLD POS=(3,2), X LTH=4, X ATTR=(PROT,ALPHA,HI,NOMOD) SNUMB1 DFLD POS=(3,7), X LTH=3, X ATTR=(PROT,ALPHA,HI,NOMOD) ... FMTEND ********************************************************************* TEST002I MSG TYPE=INPUT, X SOR=(TEST002,IGNORE), X NXT=TEST002O SEG MFLD 'TESTMPP2',LTH=8 ... MSGEND ********************************************************************* TEST002O MSG TYPE=OUTPUT, X SOR=(TEST002,IGNORE), X NXT=TEST002I PRODLP LPAGE SOR=PAGEA,COND=(LPAGEID,=,'A') SEG LPAGEID MFLD LTH=1 MFLD CODE,LTH=6 ... ORDRLP LPAGE SOR=PAGEB,COND=(LPAGEID,=,'B') SEG LPAGEID MFLD LTH=1 MFLD ODATE1,LTH=4 MFLD OLOCA1,LTH=4 MFLD ONUMB1,LTH=3,JUST=R ... STOCLP LPAGE SOR=PAGEC,COND=(LPAGEID,=,'C') SEG LPAGEID MFLD LTH=1 MFLD SLOCA1,LTH=4 MFLD SNUMB1,LTH=3,JUST=R ... MSGEND **********************************************************************
2.3. PA1とPA2
一度に出力できないメッセージは、複数のページに分けて出力します。この場合、次のページに移動するにはPA1ボタンを使用します。出力されたページがメッセージの最後のページであり、キューに次のメッセージが存在する場合は、PA1を押すと次のメッセージの最初のページが出力されます。キューに次のメッセージが存在しない場合、端末には現在のページがそのまま残ります。(変化なし)
PA2ボタンは、現在表示しているメッセージをキューから削除し、次のメッセージの最初のページを表示します。キューに次のメッセージが存在しない状態でPA2を押すと、現在のメッセージはデキューされ、端末には現在のページがそのまま残ります。(変化なし)

2.4. Z2フィールドの使用
MODに定義したセグメントの数に合わせてメッセージを構成する場合は、出力メッセージのZ2フィールドは無視してもかまいません。ただし、アプリケーションで定義されたセグメントをすべて埋めずにページを終了する場合は、次のセグメントのZ2フィールドにX'40’を設定し、新しい論理ページの開始をMFSに通知する必要があります。

2.5. OLP(Operator Logical Paging)機能
マルチ・フォーマットのマップを定義する際、MSGステートメントに’PAGE=YES’を設定すると、メッセージ内の特定の論理ページに移動する機能を使用できます。この機能を使用するには、入力値の先頭に次の値を配置します。
OLP | 説明 |
---|---|
=n, =nn, =nnn |
nに該当するページに移動します。 |
=+n, =+nn, =+nnn |
現在のページを基準にして「n」の分だけの後ろのページに移動します。 |
=-n, =-nn, =-nnn |
現在のページを基準にして「n」の分だけの前のページに移動します。 |
1つのnは、1つの数字に対応します。 |