【COBOL学習|豆知識】画面操作の要!CRT STATUS句でキー入力を自在に操る

導入:なぜCRT STATUSが必要なのか

COBOLで画面対話型プログラムを開発する際、ユーザーがどのキーを押して入力を終了したのかを判別することは非常に重要です。例えば、「Enterキーで確定」なのか、「F3キーでキャンセル」なのかをプログラム側で正確に把握しなければ、誤操作を防げません。そこで活躍するのがCRT STATUS句です。これを使うことで、キー入力後のステータス情報を取得し、柔軟な画面制御を実現できるようになります。

基礎知識:CRT STATUSの仕組み

CRT STATUS句は、プログラムのSPECIAL-NAMES(特殊名)段落で定義します。この句に指定したデータ項目には、ACCEPT文などで入力が行われた際の「終了状態」が格納されます。
一般的に、このデータ項目は2バイトまたは3バイトの領域として定義します。
・1バイト目:ステータス種別(正常終了、ファンクションキー押下など)
・2バイト目以降:押下されたキーの具体的なコード(ファンクションキー番号など)
これを確認することで、ユーザーの操作意図をプログラムで判定するわけです。

実装と解決策

実装の手順は以下の3ステップです。
1. WORKING-STORAGE SECTIONにステータス受け取り用の変数を定義する。
2. CONFIGURATION SECTIONのSPECIAL-NAMESにて、CRT STATUS句を宣言する。
3. ACCEPT文実行後、定義した変数の内容を評価して条件分岐を行う。

サンプルプログラム

以下は、EnterキーとF3キーを判別する基本的なサンプルです。

IDENTIFICATION DIVISION.
PROGRAM-ID. CRT-STATUS-SAMPLE.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.

  • CRT STATUS句でステータス格納領域を指定

CRT STATUS IS WS-CRT-STAT.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • ステータス領域の定義

01 WS-CRT-STAT.
05 WS-STAT-TYPE PIC X.
05 WS-KEY-CODE PIC X.

01 WS-INPUT-DATA PIC X(10).

PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY “データを入力してEnter、またはF3で終了してください。”
ACCEPT WS-INPUT-DATA AT 0201.

  • ステータスの判定
  • WS-STAT-TYPEが0なら正常終了(Enterなど)

IF WS-STAT-TYPE = “0”
DISPLAY “入力完了しました。”

  • WS-STAT-TYPEが1ならファンクションキー(今回はF3を想定)

ELSE IF WS-STAT-TYPE = “1”
DISPLAY “終了キーが押されました。”
END-IF.

STOP RUN.

応用・注意点

現場での開発において注意すべき点は、コンパイラや実行環境によるキーコードの違いです。CRT STATUSに格納される値は、使用するCOBOLコンパイラ(Micro Focus社製や富士通COBOLなど)によって微妙に異なる場合があります。
必ず使用する環境のマニュアルを参照し、F1キーやF3キーがどのようなコードで返ってくるかを確認してください。また、画面操作を伴うプログラムでは、ACCEPT文の前に画面をクリアするなどの作法と組み合わせることで、より洗練されたユーザーインターフェースを作成することが可能です。現場では「どのキーで処理を中断させるか」という設計指針をチーム内で統一しておくことが、保守性向上の鍵となります。

コメント

タイトルとURLをコピーしました