Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報
トップ  >  ワークステーション(端末) その2

ワークステーション(端末) その2

1 端末の入力データチェック機能

数字を入力する場所に文字を入れたり、何も入力しないでエンターキーを押したりすると、ピーと鳴ってエラーになりますが、これらは端末側の機能です。基本的なチェック機能が端末自体に備わっているため、特にプログラム中にチェック処理を入れなくても、代わりに端末がチェックしてくれるようになっています。

チェック種類機能内容
レングスチェックフィールドの長さに満たない数字でフィールドの入力終了操作をするとエラーとなる。フィールドの全桁に入力する必要がある。
オミッションチェックデータを1字も入力しないでフィールドの入力終了操作をするとエラーとなる。
オーバーフロチェック入力フィールドの長さ以上の字数の入力はエラーとなる。フィールドの長さ以下の字数の入力で終了する必要がある。
データタイプチェック入力フィールドに指定した入力データのタイプとキーボード入力のデータが合っていないとエラーになる。
ジャスティファイ入力フィールドに右づめまたは左詰めを指定するとそのフィールドの入力終了時に入力データは指定した方向にフィールドの端までシフトされ、残った桁はブランク、ゼロまたはイニシャルフィラーの文字で埋められる。

入力データチェック機能が働いた場面をいくつか紹介します。

オーバーフロチェックの例。本来2桁しか入力できないところに3桁入力しようとした。

データタイプチェックの例。数字を入力すべきところを文字を入力した。

2 簡易漢字表示

はるか大昔、まだオフコンで漢字が使えなかった当時、何とか漢字を使おうとしたのが簡易漢字表示です。事務処理によく使われる120文字を16進4桁の表示コードで画面上に表示することができます。印、価、額、記、金、計、桁、月、件、庫、項、氏、仕、指、出、書・・・といった文字です。

これを使って紙に印刷したりはできません。あくまでも画面に表示するため専用の機能です。

今は普通に漢字が扱えるようになったので、この簡易漢字表示というものは使用しません。昔作ったプログラムが使えるようにするために従来互換で残されている機能です。(今も使いたいという物好きの人がいるなら否定はしませんが・・・。)

なんとか少しでも漢字を使いたいという大昔の人の苦労が偲ばれる機能です。

それから、NECの説明書に書いてある120文字の簡易漢字の一覧表が一部間違っています。誤字の指摘がないほど最近は誰も使っていない機能だからなのでしょうか。

3 ワークステーションの制御符号

プリンタと同じようにワークステーションに特殊な動作をさせるための制御符号というものがあります。

ブザーを鳴らしたり、罫線を表示したり、指定の位置でスクロールしたりといった機能を制御符号を端末に書き込むことで実現します。

実はこれも従来互換機能で、今はなるべく使わないようにとされている機能です。

今はブザーを鳴らすならBUZZER句、罫線を引くなら、BOX句、OVER LINE句、UNDER LINE句、VIRTICAL LINE句といった画面制御機能がCOBOL言語に用意されています。制御符号はこれらの機能が用意されていなかった頃に使用されていた機能です。とは言っても、実際は今もよく使っている機能です。

4 画面性能向上策

画面の性能を向上させるには、NECの公式の説明書に書いてあるように、いくつかの種類があります。

  • COBOL言語のNO ACTUAL指定を使う
  • 表示データを一括して表示する
  • ギャザリング機能

COBOL言語のNO ACTUAL機能とは、画面制御機能の方のDISPLAY文で、「DISPLAY A WITH NO ACTUAL EXECUTING」のような記述をします。NO ACTUALを指定したDISPLAY文を実行した時点では、実際の画面上への表示を行いません。NO ACTUALがないDISPLAY文またはACCEPT文を実行したときにまとめて実際の画面上への出力が行われます。

これでなぜ画面の性能が向上するかの理由は次の通りです。オフコン本体と端末の間はSIFであったりLAN回線であったり接続形態によって異なりますが、いずれの場合も何らかの回線で繋がっています。繋がっているということはオフコン本体と端末の間で通信が行われているということです。
1回DISPLAY文が実行されると、オフコン本体から端末に「xxを表示してください」という情報が流れます。次に端末が「画面にxxを表示」します。最後に端末からオフコン本体に「終わりました」と返事が返ってきます。そしてオフコン本体側は返事を確認してから次の命令を実行することになります。

    DISPLAY A
    DISPLAY B
    DISPLAY C
    DISPLAY D

DISPLAYが4回あれば、「xxを表示してください」から「終わりました」と返事をするまでを4回繰り返します。

    DISPLAY A WITH NO ACTUAL EXECUTING
    DISPLAY B WITH NO ACTUAL EXECUTING
    DISPLAY C WITH NO ACTUAL EXECUTING
    DISPLAY D

これが4回のDISPLAY文のうち、最後のDISPLAY以外にNO ACTUAL指定があった場合はどうでしょうか。
最初のDISPLAY文にはNO ACTUALがあるので、実際の画面上に表示は行いません。これはどういう意味かというと、端末に情報を送らずに、オフコン本体のメモリ上に表示する表示内容を貯め込むということです。ここではオフコン本体と端末間で通信は発生しません。
次のDISPLAY文もNO ACTUALがあるので、またオフコン本体のメモリに表示内容を貯め込みます。3番目のDISPLAY文もNO ACTUALがあるので、これも表示内容をオフコン本体に貯め込みます。
4番目のDISPLAY文はNO ACTUALがありません。ここでようやく今まで貯め込んでいた表示内容と4番目の表示内容をまとめて端末側に送信します。次に端末が「画面にxxを表示」します。最後に端末からオフコン本体に「終わりました」と返事が返ってきます。そしてオフコン本体側は返事を確認してから次の命令を実行することになります。

NO ACTUAL指定を行わない場合は、4往復分の通信が発生しています。一方、NO ACTUAL指定を行った場合は、1往復分の通信しか発生していません。単純計算で考えて、3往復分の時間分、画面表示の性能が向上する訳です。

「表示データを一括して表示する」という方法も、オフコン本体と端末間の通信を減らして性能を向上させるというものです。

  01  DISP1.
      02   LINE 2.
          03  COLUMN 30  PIC X(5)  VALUE  "HELLO".
  01  DISP2.
      02   LINE 2.
          03  COLUMN 50  PIC X(5)  VALUE  "WORLD".
  01  DISP3.
      02   LINE 5.
          03  COLUMN 30  PIC X(7)  VALUE  "WELCOME!".
 〜〜〜
      DISPLAY  DISP1.
      DISPLAY  DISP2.
      DISPLAY  DISP3.

のようにではなくて、

  01  DISP1.
      02   LINE 2.
          03  COLUMN 30  PIC X(5)  VALUE  "HELLO".
          03  COLUMN 50  PIC X(5)  VALUE  "WORLD".
      02   LINE 5.
          03  COLUMN 30  PIC X(7)  VALUE  "WELCOME!".
 〜〜〜
      DISPLAY  DISP1.

のようになるべく1つの集団項目にまとめて1つのDISPLAY文で画面出力しましょうというものです。
上の例だとDISPLAY文が3回なので、オフコン本体と端末間で3往復分の通信が発生します。下の例だとDISPLAYが1回になっているので、1往復分になります。

5 ギャザリング機能

上で説明した2つの性能向上策は、どちらも「COBOLプログラムを修正して性能向上を図りましょう」、というものです。しかし常にプログラムのソースが存在するとは限りません。業務アプリを購入したときは、普通はプログラムのソースはありません。自分のところで業務アプリを作っていてもソースは無くなって、今はロードモジュールだけあるということもあるかもしれません。

ソースがないときに画面性能を向上させるためのものがギャザリング機能です。

ギャザリング機能を使用すると、A−VXシステムが、画面出力データを適切なサイズにまとめて適切なタイミングを判断して送受信してくれます。いつオフコン本体から端末に送信するかは、システムがプログラムの中身や画面出力データの内容を見て自動的に判断してくれます。ただ、送信のタイミングが変わるので、まれにですがシステムがうまく判断できずに、違和感のある画面表示タイミングになったりすることもあるようです。そのときは、ギャザリング機能はあきらめるしかないようです。

ギャザリング指定は、ロードモジュール単位に行います。ライブラリ保守ユーティリティ(#LBM)のCHANGE機能で、ギャザリング指定を変更したいロードモジュールを選んで属性変更を行います。あるロードモジュールにギャザリング指定されているかどうか確認するには、ライブラリ保守ユーティリティ(#LBM)か簡易操作ユーティリティ(#ABC)の印刷機能で確認できます。