導入:なぜ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文の前に画面をクリアするなどの作法と組み合わせることで、より洗練されたユーザーインターフェースを作成することが可能です。現場では「どのキーで処理を中断させるか」という設計指針をチーム内で統一しておくことが、保守性向上の鍵となります。

コメント