ここでは、図 給与ジャーナルの検索画面を例に、MeFtのディスプレイ機能の基本機能について説明します。
給与ジャーナルのプログラム例を示します。
例
#include<psdef.h> #include"salary.h" display() { PSFILE psfile; /* 表示ファイル識別子 */ SALARY sala; /* レコードデータ */ PSUSHORT Error; /* 通知コード格納領域 */ psfile = ps_open("dsp1.env", PS_OPEN_DSP, &Error, 0); ps_set_formatsize(psfile, "SALARY", s_SALARY); :レコードデータ領域のクリア ps_write(psfile, PS_WRITE_NORMAL, "SCREEN", &sala, 0); ps_read(psfile, PS_READ_NORMAL, "NUMBER", &sala, 0); :従業員番号からデータベースの検索 :レコードデータ領域へのデータ格納 ps_write(psfile, PS_WRITE_NORMAL, "SCREEN", &sala, 0); ps_close(psfile, &Error);
IDENTIFICATION DIVISION. ~ 中略 ~ INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ディスプレイファイル ASSIGN TO GS-DSPFILE ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL SYMBOLIC DESTINATION IS "DSP" FORMAT IS DSP-FORMAT GROUP IS DSP-GROUP PROCESSING MODE IS DSP-MODE SELECTED FUNCTION IS DSP-ATTN UNIT CONTROL IS DSP-CONTROL. ~ 中略 ~ DATA DIVISION. FILE SECTION. FD ディスプレイファイル. COPY SAMP OF XMDLIB. ~ 中略 ~ PROCEDURE DIVISION. OPEN I-O ディスプレイファイル. INITIALIZE SAMP. MOVE "SALARY" TO DSP-FORMAT. MOVE " " TO DSP-MODE. MOVE "SCREEN" TO DSP-GROUP. WRITE SAMP. MOVE "NUMBER" TO DSP-GROUP. READ ディスプレイファイル. :従業員番号からデータベースの検索 :レコードデータ領域へのデータ格納 MOVE "SCREEN" TO DSP-GROUP. WRITE SAMP. CLOSE ディスプレイファイル.
利用者プログラムが画面との入出力を行うときは、MeFtの以下の機能を使用します。
画面入出力の開始宣言であり、ウィンドウ情報ファイルを指定します。画面との入出力を行うには、他の機能に先立ち、必ずオープンを行う必要があります。プログラム例では次の文が画面のオープンになります。
例
psfile=ps_open("dsp1.env", PS_OPEN_DSP, &Error, 0);
psfile | : | 表示ファイル識別子 | |
"dsp1.env" | : | ウィンドウ情報ファイル名 | |
PS_OPEN_DSP | : | 画面のオープン | |
Error | : | オープン異常終了時の通知コード格納領域 |
オープンが正常に処理されると、ウィンドウが表示されます。
オープンの正常処理時の復帰値(ここではpsfile)は表示ファイル識別子と呼ばれ、以降の画面との入出力でウィンドウの識別のために指定します。
OPEN I-O ディスプレイファイル.
"ディスプレイファイル"の情報は、ファイル管理段落(FILE-CONTROL)で指定します。
[必須] | ||||
SELECT句 | : | ファイル名("ディスプレイファイル")を指定します。 | ||
ASSIGN句 | : | "GS-ファイル識別子"の形式で指定します。ここで指定したファイル識別子が、ウィンドウ情報ファイルのパス名を設定する環境変数名になります。 | ||
FORMAT句 | : | 画面定義体を設定するためのデータ項目を指定します。 | ||
GROUP句 | : | 項目群名または項目名を設定するためのデータ項目を指定します。 | ||
[任意] | ||||
SYMBOLIC DESTINATION句 | : | "DSP"を指定します。 | ||
FILE STATUS句 | : | 異常終了時の通知コード格納領域を指定します。異常が発生した場合、ここで指定した領域にエラー情報が返却されます。 | ||
PROCESSING MODE句 | : | 処理種別を設定するためのデータ項目を指定します。 | ||
SELECTED FUNCTION句 | : | アテンション種別を参照するためのデータ項目を指定します。 | ||
UNIT CONTROL句 | : | ユニット制御情報を設定するためのデータ項目を指定します。 |
OUTPUTまたはI-O指定のOPEN文を実行します。
オープンが正常に処理されると、ウィンドウが表示されます。
画面定義体中の固定データおよび利用者プログラムが用意したデータを画面に表示する機能です。プログラム例では次の文が画面への出力になります。
例
ps_write(psfile, PS_WRITE_NORMAL, "SCREEN", &sala, 0);
psfile | : | 表示ファイル識別子 | |
PS_WRITE_NORMAL | : | 出力の種類の1つ | |
"SCREEN" | : | 従業員番号、氏名、所属および給与額で構成する項目群名 | |
sala | : | 項目群名"SCREEN"を構成するレコードデータ領域 |
図3.1 給与ジャーナルの検索画面のプログラム例では2つの出力があります。最初の出力では直前でレコードデータ領域をクリアしているため、「従業員番号」、「氏名」、「所属」および「給与額」などの固定の文字列、および罫線だけが表示されます。2つめの出力では、データベースから必要なデータをレコードデータ領域に設定しているので、「氏名」、「所属」および「給与額」に対応したデータが表示されます。
出力の直前の文、
ps_set_formatsize(psfile, "SALARY", s_SALARY); |
は、表示ファイル識別子psfileに対して、画面定義体"SALARY"を使用することを宣言しています。
WRITE SAMP.
画面を表示するには、表示レコードを指定したWRITE文を使います。WRITE文を実行する前には、MOVE文で以下の情報を設定しておく必要があります。
MOVE "SALARY" TO DSP-FORMAT. | : | FORMAT句に指定したデータ名に画面定義体"SALARY"を指定します。 | |
MOVE " " TO DSP-MODE. | : | 入出力処理の種類を"通常出力"として指定します。 | |
MOVE "SCREEN" TO DSP-GROUP. | : | GROUP句に指定したデータ名に、従業員番号、氏名、所属および給与額で構成する項目群"SCREEN"を指定します。 |
図3.1 給与ジャーナルの検索画面のプログラム例では2つの出力があります。最初の出力では直前でレコードデータ領域をクリアしているため、「従業員番号」、「氏名」、「所属」および「給与額」などの固定の文字列、および罫線だけが表示されます。2つめの出力では、データベースから必要なデータをレコードデータ領域に設定しているので、「氏名」、「所属」および「給与額」に対応したデータが表示されます。
画面からデータを入力する機能です。これにより、画面上の入力対象項目にカーソルが表示され、キーの入力待ち状態になります。入力したデータは、利用者プログラムに通知されます。
以下の場合、データの入力は無効となり、完了キーだけが有効になります。
すべての入出力項目が処理対象外の場合。
選択属性を定義していない出力項目および固定リテラル項目に入力を行った場合。
また、選択属性を定義した出力項目および固定リテラル項目に入力を行った場合、選択項目の扱いとなり、データ入力はできません。
入力開始直後のカーソル表示は、項目群内の最初の入力対象項目です。また、入力対象項目の最初に表示されるカーソルの位置は入力の基準位置になります。左詰め項目であれば項目の先頭位置、右詰め項目であれば項目の最終位置にカーソルは表示されます。
プログラム例では次の文が画面からの入力になります。
例
ps_read(psfile, PS_READ_NORMAL, "NUMBER", &sala, 0);
psfile | : | 表示ファイル識別子 | |
PS_READ_NORMAL | : | 入力の種類の1つ | |
"NUMBER" | : | 入力対象の従業員番号の項目名 | |
sala | : | 項目名"NUMBER"を含むレコードデータ領域 |
入力が完了すると、ここでは"901234"のデータが利用者プログラム内のレコードデータ領域に通知されます。図3.1 給与ジャーナルの検索画面のプログラム例では、入力の前で画面定義体の宣言を行っていません。これは、表示ファイル識別子psfileに対してはすでに出力で、"SALARY"が宣言されており、同じ定義体を使用するためです。
READ ディスプレイファイル.
画面から入力するには、表示ファイルを指定したREAD文を使います。READ文を実行する前には、MOVE文で以下の情報を設定しておく必要があります。
MOVE "SALARY" TO DSP-FORMAT. | : | FORMAT句に指定したデータ名に画面定義体"SALARY"を指定します。 | |
MOVE " " TO DSP-MODE. | : | 入出力処理の種類を"通常入力"として指定します。 | |
MOVE " NUMBER " TO DSP-GROUP. | : | GROUP句に指定したデータ名に、入力対象の従業員番号の項目名"NUMBER"を指定します。 |
入力が完了すると、ここでは"901234"のデータが利用者プログラム内のレコードデータ領域に通知されます。図3.1 給与ジャーナルの検索画面のプログラム例では、入力の前で画面定義体の宣言を行っていません。これは、DSP-FORMATに対してはすでに出力で、"SALARY"が宣言されており、同じ定義体を使用するためです。
画面入出力の終了宣言であり、オープン以外のMeFtの機能は使用できなくなります。クローズが正常に処理されると、オープンで開いたウィンドウが消滅します。プログラム例では次の文が画面のクローズになります。
例
ps_close(psfile,&Error);
psfile | : | 表示ファイル識別子 | |
Error | : | クローズ異常終了時の通知コード格納領域 |
CLOSE ディスプレイファイル.