MFS定義ステートメント

本章では、MFSフォーマット・ファイルを作成する際に使用するマクロについて説明します。

1. 概要

MFSフォーマット・ファイルは、メッセージ定義ステートメントとフォーマット定義ステートメントで構成されます。それぞれ階層構造を持っており、メッセージ定義ステートメントはMIDとMODを作成し、フォーマット定義ステートメントはDIFとDOFを作成します。

以下は、マクロの定義に使用されるルールです。各マクロの定義を理解するために参考にしてください。

表記 意味

>>---

構文の始まり

--->

次の行に続く

>---

前の行から続く

---><

構文の終わり

>>-------必須項目----------><

必須項目

>>---+---必須オプション1---+-----><
     '---必須オプション2---'

必ず1つのオプションを選択

>>---+---------------+-----><
     +---任意オプション1---+
     '---任意オプション2---'

オプション項目

     .---デフォルト項目---.
>>---+----------------+----><

デフォルト値

     .---------------.
     V               |
>>---+---繰り返し項目----+-----><

繰り返しできる項目

2. メッセージ定義ステートメント

メッセージ定義ステートメントの構造は以下のとおりです。1つのMSGステートメントの下に複数のLPAGEステートメントを定義することができます。SEGステートメントとMFLDステートメントも階層構造で定義します。

MSG
   LPAGE
        PASSWORD
        SEG
           DO
             MFLD
             ....
           ENDDO
        SEG
        ....
   LPAGE
   ....
MSGEND

2.1. MSGステートメント

メッセージ定義ステートメントの始まりを示します。

  • MSG TYPE=INPUTまたはOUTPUTの場合

    >>-label--MSG--+------------------+----------------------------->
                   |       .-INPUT--. |
                   '-TYPE=-+-OUTPUT-+-'
    
    >--,SOR=(formatname)-------------------------------------------->
    
    >--+--------------------------+--------------------------------><
       '-,NXT=msgcontrolblockname-'
    Keywords 説明

    TYPE

    定義ステートメントのタイプ(INPUTまたはOUTPUT)を指定します。

    SOR

    フォーマット定義ステートメントの名前を指定します。

    NXT

    次に参照するMIDまたはMODの名前を指定します。

    現在の定義ステートメントがINPUTの場合はMOD名を、OUTPUTの場合はMID名を指定します。

  • MSG TYPE=OUTPUTの場合

    >>-+----------------+------------------------------------------><
       |        .-NO--. |
       '-,PAGE=-+-YES-+-'
    Keywords 説明

    PAGE

    OLP(Operator Logical Paging)機能を使用するかどうかを指定します。(サポートされません)

2.2. LPAGEステートメント

論理ページングを使用する場合は、LPAGEステートメントを指定する必要があります。現在、MSG TYPE=INPUTの論理ページングはサポートしていません。

  • MSG TYPE=OUTPUTの場合

    >>-+-------+--+----------------------+-------------------------->
       '-label-'  '-LPAGE--SOR=dpagename-'
    
    >--+--------------------------------------------------+--------->
       '-,COND=(-+-mfldname-----+--,--+->--+--,'value'--)-'
                 +-mfldname(pp)-+     +-<--+
                 '-segoffset----'     +-≥--+
                                      +-≤--+
                                      +-=--+
                                      '-!=-'
    >--+--------------------------+--------------------------------><
       '-,NXT=msgcontrolblockname-'
    Keywords 説明

    SOR

    LPAGEのためのフォーマット定義ステートメントのDPAGE名を指定します。

    COND

    LPAGEから1つのLPAGEを選択するための条件を指定します。

    NXT

    次のメッセージを処理するためのMID名を指定します。

    このオプションが指定されている場合は、MSGステートメントで指定したMID名は無視されます。

2.3. SEGステートメント

アプリケーションでマルチセグメント・メッセージを使用する場合は、複数のSEGステートメントを定義します。

  • MSG TYPE=INPUTの場合

                                  .-YES-.
    >>-+-------+--SEG ---GRAPHIC=-+-NO--+--------------------------><
       '-label-'
    Keywords 説明

    GRAPHIC

    YESで、TRANSACT(システム定義)でEDIT=UCに設定されている場合は、小文字を大文字に変換します。

  • MSG TYPE=OUTPUTの場合

    >>-+-------+--SEG ----------------------------><
       '-label-'

2.4. PASSWORDステートメント

PASSWORDステートメントの下に定義されているMFLDステートメントの入力データをパスワードとしてTACFログオン認証を受けます。認証時に使用されるユーザーIDは、入力を受けた端末に接続しているユーザーのIDです。SEGステートメントの先頭に指定して使用できます。

  • >>-+-------+--PASSWORD ---+-blank----+--------------------------><
                              '-comments-'
    Keywords 説明

    comments

    コメントです。

2.5. DOステートメント

繰り返されるMFLDステートメントを定義する際に使用します。DOステートメントを使用する場合は、マクロ・プリプロセッサ(macroprep)を使用して前処理した後、MFSフォーマット・コンパイラー・ツール(osimfsgen)を使用する必要があります。

>>-+-------+--DO--count----------------------------------------><
   '-label-'

2.6. MFLDステートメント

端末からアプリケーションに送信するフィールド(TYPE=INPUT)、アプリケーションから端末に送信するフィールド(TYPE=OUTPUT)を定義します。

  • MSG TYPE=INPUTの場合

    >>-+-------+--MFLD--+------------------------+------------------>
       '-label-'        '-(dfldname-,'literal'-)-'
    
    >--+-------------------+--+--------------+---------------------->
       |       .-1-------. |  |        .-L-. |
       '-,LTH=-+-nn------+-'  '-,JUST=-+-R-+-'
    
    >--+-----------------------------------------------------------><
        '-,FILL=-+-X'40'-+-'
                 +-X'hh'-+
                 +-C'c'--+
                 '-NULL--'
    Keywords 説明

    (dfldname,'literal')

    端末から受信したデータがない場合、'literal’に指定されている値をアプリケーションに送信します。

    LTH

    フィールドの長さを指定します。

    JUST

    左揃え、右揃えを指定します。

    FILL

    端末から受信したデータの長さがMFLDの長さより短い場合、残りの部分を埋める文字を指定します。

    FILL=NULLの場合、残りの部分を埋めずに、受信した部分だけをアプリケーションに送信します。この場合、アプリケーションで可変長データ処理を行う必要があります。

    デフォルト値はX'40’であり、FIILL=X'3F’はFILL=NULLと同じです。

    FILL=X'00’は、FILL=NULLと異なり、残りの部分を「00」で埋めます。

  • MSG TYPE=OUTPUTの場合

    >>-+-------+--MFLD--+----------------------------+-------------->
       '-label-'        +-dfldname-------------------+
                        +-(dfldname, system-literal)-+
                        +-(dfldname, 'literal')------+
    
    >--+--------------+--------------------------------------------->
       |       .-1--. |
       '-,LTH=-+-nn-+-'
    
    >--+---------------------------+-------------------------------><
       |         .-NO--.           |
       '-,ATTR=(-+-----+-+-----+-)-'
                 '-YES-' '-,nn-'
    Keywords 説明

    (dfldname,system-literal)

    システム・リテラルを指定します。システム・リテラルの詳細については、システム・リテラルを参照してください。

    (dfldname,'literal')

    DFLDに入力する文字列を’literal’に指定します。このMFLDのデータは、プログラムから画面に送信するデータに含まれていてはなりません。

    LTH

    フィールドの長さを指定します。

    ATTR

    DFLDに指定したATTR(YESまたはNO)とEATTR(nn)を動的に変更するために使用されます。属性の動的変更については、属性の動的変更の説明を参照してください。

2.6.1. システム・リテラル

以下は、システム・リテラルについての説明です。

システム・リテラル フォーマット 説明

LTSEQ

nnnnn

論理端末の出力メッセージ番号

LTNAME

aaaaaaaa

論理端末の名前

TIME

HH:MM:SS

システムの時刻

DATE1 or YYDDD

YY.DDD

システムの日付

DATE2 or MMDDYY

MM/DD/YY

システムの日付

DATE3 or DDMMYY

DD/MM/YY

システムの日付

DATE4 or YYMMDD

YY/MM/DD

システムの日付

DATE1Y4 or YYYYDDD or DATEJUL

YYYY.DDD

システムの日付

DATE2Y4 or MMDDYYYY or DATEUSA

MM/DD/YYYY

システムの日付

DATE3Y4 or DDMMYYYY or DATEEUR

DD/MM/YYYY

システムの日付

DATE4Y4 or YYYYMMDD or DATEISO

YYYY/MM/DD

システムの日付

LPAGENO

nnnn

現在の論理ページ番号

2.6.2. 属性の動的変更

属性の動的変更は以下の場合に使用します。

  • ATTR=YES

    DFLDのATTRで指定した属性を変更する場合に使用します。そのとき、アプリケーションが送信するデータには、追加で2バイトの属性データが含まれているため、LTHも2バイトのデータが含まれた長さに指定する必要があります。

    たとえば、画面のデータ長が5バイトの場合、LTHを次のように設定します。

    ATTR=YESの場合, LTH=2+5=7
  • ATTR=(,nn)

    DFLDのEATTRで指定した属性を変更する場合に使用します。EATTRの属性データは2バイトで構成されるため、nnに指定した値の2倍の値を長さに含める必要があります。

    たとえば、データ長が5バイトの場合、LTHを次のように指定します。詳細については、MFS機能を参照してください。

    • ATTR=(NO,3)、またはATTR=(,3)の場合

      LTH=  2*3+5=11
    • ATTR=(YES,3)の場合

      LTH=2+2*3+5=13

2.7. ENDDOステートメント

DOステートメントを使用する場合、ENDDOステートメントを使用して繰り返しの終わりを指定する必要があります。

>>-+-------+--ENDDO--+-blanks---+------------------------------><
   '-label-'         '-comments-'

2.8. MSGENDステートメント

メッセージ定義ステートメントの終わりを示します。

>>-+-------+--MSGEND--+-blanks---+-----------------------------><
   '-label-'          '-comments-'

3. フォーマット定義ステートメント

フォーマット定義ステートメントの構造は以下のとおりです。1つのFMTステートメントの下に複数のDEVステートメントを定義することができます。DEVステートメントの下にDIVステートメント、DPAGEステートメント、DFLDステートメントを階層構造で定義します。

FMT
   DEV
      DIV
         DPAGE
              DO
                DFLD
                ....
              ENDDO
         DPAGE
         ....
   DEV
   ....
FMTEND

3.1. FMTステートメント

フォーマット定義ステートメントの始まりを示します。

>>-label--FMT--+-blanks---+------------------------------------><
               '-comments-'

3.2. DEVステートメント

デバイス属性を設定します。

>>-+-------+--DEV--TYPE--+-3270-----------+--------------------->
   '-label-'             +-(3270,2)-------+
                         '-3270-An--------'

>--+------------------------------------------------+----------->
   '-,FEAT=-+-IGNORE------------------------------+-'
            +-1-----------------------------------+
            +-2-----------------------------------+
            +-3-----------------------------------+
            +-4-----------------------------------+
            +-5-----------------------------------+
            +-6-----------------------------------+
            +-7-----------------------------------+
            +-8-----------------------------------+
            +-9-----------------------------------+
            +-10----------------------------------+

>--+-------------------+--+---------------------+--------------->
   '-,SYSMSG=dfldlabel-'  '-,DSCA=---X'value'---'

>--+--------------------------------------------------+--------><
   |                   .-,-------------.              |
   |                   V               |              |
   '-,PFK=(dfldname,-+----'literal'-----------------)-'
                     | .-,----------------------. |
                     | V                        | |
                     '---integer=---'literal'---+-'
Keywords 説明

TYPE

OSIはTN3270端末をサポートします。

FEAT

TERMINAL(システム定義)のFEATをFn(nは1~10の数字)に設定した場合、DEVのFEATの値がnであるDEVを選択します。

該当するDEVが存在しない場合は、IGNOREに設定したDEVをデフォルト値として選択します。

たとえば、TERMINALのFEAT=F2に定義した場合は、FEAT=2のDEVを選択します。FEAT=2のDEVがない場合は、FEAT=IGNOREのDEVが選択されます。

SYSMSG

システム・メッセージを表示するDFLDを指定します。

DSCA

DSCA(Default System Control Area)は、端末に画面を表示する際のいくつかの基本設定を指定します。たとえば、画面に書き込むとき、既存のものを削除してから書き込むか、そのまま書き込むかを決定します。

フォーマットは、2バイト文字の X’hhhh’です。TN 3270端末では、最初のバイトは0に固定されています。

2番目のバイトは以下のように設定できます。

  • 0 : 1に固定します。

  • 1 : 画面をすべてクリアして書き込みます。

  • 2 : 非保護フィールドをクリアして書き込みます。

  • 3 : アラームを設定します。

  • 4 : 結果をプリンターに送信します。(サポートされません)

  • 5 : 画面に出力した後、保護モードを設定するかどうかを指定します。(保護の場合は0、非保護は1です。サポートされません)

  • 6-7 : 0に固定します。

PFK

PFK(Program Function Key)のリテラルまたはコマンドを指定します。

dfldnameは、入力されたPFKに一致する’literal’を保存するフィールドです。MFLDステートメントで該当する値を参照する際に使用します。dfldnameの次のパラメータは 'literal’のみ定義するか、数字と一緒に定義することができます。

3.3. DIVステートメント

以下は、DIVステートメントの形式です。

>>-+-------+--DIV--+------------------+------------------------><
   '-label-'       |       .-INOUT--. |
                   '-TYPE=-+-OUTPUT-+-'
Keywords 説明

TYPE

現在の定義ステートメントがOUTPUTか、INOUTかを指定します。

3.4. DPAGEステートメント

定義する際にDPAGEステートメントを指定する必要があります。LPAGEのSORで指定した値がDPAGEのラベル名です。

>>-+-------+--DPAGE--------------------------------------------->
   '-label-'

>--+-----------------------------+-----------------------------><
   '-CURSOR=(------lll,ccc-----)-'
Keywords 説明

CURSOR

カーソルの位置を指定します。デフォルト値は(1,2)です。

3.5. DOステートメント

定期的に繰り返されるDFLDステートメントを定義するために使用されます。DOステートメントを使用する場合は、マクロ・プリプリプロセッサーであるmacroprepを使用して前処理してから、MSFフォーマット・コンパイラ・ツールであるosimfsgenを使用します。

>>-+-------+--DO--count----------------------------------------><
   '-label-'

3.6. DFLDステートメント

端末から入力データを受信するか、表示するのに使用されるフィールドを指定します。

>>-+-------+--DFLD--+-----------+--,POS=(lll,ccc)--------------->
   '-label-'        '-'literal'-'

>--+----------+------------------------------------------------->
   '-,LTH=nnn-'

>--+---------------------------------------+-------------------->
   |         .-ALPHA-. .-,NOPROT-.         |
   '-,ATTR=(-+-------+-+---------+-| A |-)-'
             '-NUM---' '-,PROT---'

>--+--------------------------------------------------------+--><
   '-,EATTR=(-+--------+-+----------+-+-----------+-| B |-)-'
              +-HD-----+ +-,CD------+ '-,EGCS-----'
              +-HBLINK-+ +-,BLUE----+
              +-HREV---+ +-,RED-----+
              '-HUL----' +-,PINK----+
                         +-,GREEN---+
                         +-,TURQ----+
                         +-,YELLOW--+
                         '-,NEUTRAL-'

A

               .-,NORM---.  .-,NOMOD-.
|--+-,------+--+---------+--+--------+--+-,--------+------------|
               +-,NODISP-+  '-,MOD---'
               '-,HI-----'

B

|--+-,-------------+--+-----------+-----+-------+---------------|
                      +-,OUTL-----+     '-,MIX--'
                      +-,BOX------+
                      +-,RIGHT----+
                      +-,LEFT-----+
                      +-,UNDER----+
                      '-,OVER-----'
Keywords 説明

POS

フィールドの位置を指定します。

LTH

フィールドの長さを指定します。

ATTR

フィールドの属性を指定します。

  • ALPHA : 文字/数字フィールド

  • NUM : 数字フィールド(3270エミュレーターではサポートされないため、実際にはサポートされていません)

  • NOPROT: 入力フィールド

  • PROT : 保護フィールド

  • NORM : 平均輝度属性

  • NODISP : 隠しフィールド

  • HI : 高輝度属性

  • NOMOD : 画面のデータを変更する場合のみデータを送信

  • MOD : MDT(Modified Data Tag)をonに設定してデータを変更しなくても、該当のフィールドのデータを送信

EATTR

フィールドの拡張属性を指定します。

  • HD : デフォルトの強調表示

  • HBLINK : 明滅

  • HREV : 反転表示

  • HUL : 下線

  • CD : デフォルト色

  • BLUE : 青

  • RED : 赤色

  • PINK : ピンク

  • GREEN : 緑

  • TURQ : 青緑

  • YELLOW : 黄

  • NEUTRAL: 画面に出力する場合は白、プリンターに出力する場合は黒

  • EGCS : 2バイトの文字フィールド

  • OUTL : デフォルト・アウトライン

  • BOX : 左右上下の枠

  • RIGHT : 右線

  • LEFT : 左線

  • UNDER : 下線

  • OVER : 上線

  • MIX : 1バイトの文字と2バイトの文字が混在するフィールド(sosiが含まれている必要があります)

3.7. ENDDOステートメント

DOステートメントを使用する場合、ENDDOステートメントで繰り返しの終わりを指定する必要があります。

>>-+-------+--ENDDO--+-blanks---+------------------------------><
   '-label-'         '-comments-'

3.8. FMTENDステートメント

メッセージ定義ステートメントの終わりを示します。

>>-+-------+--MSGEND--+-blanks---+-----------------------------><
   '-label-'          '-comments-'