画面表示の文字に色を付ける(COBOLシステムサブルーチン版)
-
画面表示した文字に色を付ける一般的な方法としては、画面節(SCREEN SECTION)でCOLOR句を使うか、画面フォーマット生成ユーティリティ(#SFGEN)で画面フォーマットを作ってCOBOLプログラムとリンクするかのどちらかとなります。
そのほかの方法としては、ワークステーションの制御符号を使う方法、COBOLシステムサブルーチンのカラーアトリビュートの設定を使う方法があります。
ここでは、COBOLシステムサブルーチンの「カラーアトリビュートの設定」を使う方法を紹介します。
他の方法については、別のところで紹介しています。
- ◆カラーアトリビュートの設定
説明書から概要を下に抜き出します。
詳細は「COBOL85システムサブルーチン説明書」を参照してください。
機能
カラーワークステーション画面上のカラーアトリビュート文字を動的に変更します。指定した画面上の位置に、指定したカラーアトリビュート文字を設定します。
一般形式
CALL "CBLCOLOR" USING データ名1 データ名2 データ名3
データ名1:画面位置
01 データ名1. 02 行位置指定 PIC 9(2). 02 桁位置指定 PIC 9(2).
データ名2:アトリビュート
設定する色を7桁の英数字項目で定義します。
データ名3:項目桁数
データ名1で指定したフィールドの長さ(画面上の桁数)を4桁の符号なし整数項目で指定します。
データ名1で指定した位置の1文字だけ色を変えるときは0、連続して色を変えるときは変える文字列の長さ−1の値を入れます。
ここで気を付けることは、(上に抜き出していませんが)COBOL85システムサブルーチン説明書に書いてある通り、1文字だけ色を変えるときと2文字以上連続して色を変えるときで、桁位置指定に入れる値が変わることです。
1文字だけ色を変えるときは、その色を変える文字の桁位置をそのまま「桁位置指定」に入れればよいのですが、2文字以上色を変えるときは「桁位置指定」には2文字目の桁位置を入れることになります。(下のサンプルプログラムの「KETA」に入れている値に注意!)
また項目桁数も「文字列の長さー1」なので、1文字だけ色を変えるときは0を入れることになります。
- サンプルプログラム8
-
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. SAM008. 000030 ENVIRONMENT DIVISION. 000040 DATA DIVISION. 000050 WORKING-STORAGE SECTION. 000060* CBLCOLOR PARAMETER 000070 01 COLPARA1. 000080 02 COLGYOU PIC 9(02). 000090 02 COLKETA PIC 9(02). 000100 01 COLTBL. 000110 05 CTBL PIC X(49) 000120 VALUE "BLUE CYAN GREEN MAGENTARED WHITE YELLOW ". 000130 05 COLNAME-M REDEFINES CTBL. 000140 10 COLNAME OCCURS 7 PIC X(07). 000150 01 COLPARA3 PIC 9(04). 000160* SUBSCRIPT 000170 01 I PIC 9(02). 000180 PROCEDURE DIVISION. 000190 MPRG. 000200*--- 文字表示 --- 000210 PERFORM 24 TIMES 000220 DISPLAY "CBLCOLOR" 000230 END-PERFORM. 000240 STOP "[再開]で色が付きます" 000250*--- 文字に色を付ける(2文字以上) --- 000260 INITIALIZE I COLPARA1 COLPARA3 000270 MOVE 7 TO COLPARA3 000280 MOVE 1 TO COLGYOU I 000290 MOVE 2 TO COLKETA 000300 PERFORM 24 TIMES 000310 CALL "CBLCOLOR" USING COLPARA1 COLNAME( I ) COLPARA3 000320 COMPUTE COLGYOU = COLGYOU + 1 000330 IF I NOT = 7 000340 COMPUTE I = I + 1 000350 ELSE 000360 MOVE 1 TO I 000370 END-IF 000380 END-PERFORM. 000390 STOP "[再開]でまた色が変わります" 000400*--- 文字に色を付ける(1文字) --- 000410 INITIALIZE I COLPARA1 COLPARA3 000420 MOVE 0 TO COLPARA3 000430 MOVE 1 TO COLGYOU 000440 PERFORM 24 TIMES 000450 MOVE 8 TO COLKETA 000460 MOVE 1 TO I 000470 PERFORM 8 TIMES 000480 CALL "CBLCOLOR" USING COLPARA1 COLNAME( I ) COLPARA3 000490 COMPUTE COLKETA = COLKETA - 1 000500 IF I NOT = 7 000510 COMPUTE I = I + 1 000520 ELSE 000530 MOVE 1 TO I 000540 END-IF 000550 END-PERFORM 000560 COMPUTE COLGYOU = COLGYOU + 1 000570 END-PERFORM 000580 STOP "[再開]でプログラム終了". 000590 STOP RUN.
画面に「CBLCOLOR」という文字を24行分表示して、2回文字の色を変更しています。1回目は2文字以上の文字列の色を変更する例、2回目は1文字だけ色を変更する例です。
このサンプルプログラムではデータ名2のアトリビュートはテーブル構造にしています。
- サンプルプログラム実行
-
下はサンプルプログラムを実行してみたところ。
まず画面上に「CBLCOLOR」という文字を24行分表示して、プログラムの24行目のSTOP文で一時停止します。
下の画面はその状態です。
「再開」コマンドで次に進みます。
プログラムの26行目から38行目辺りで文字に色を付けています。
「カラーアトリビュートの設定」自体は31行目。「COLCOLR」は1桁目から8文字分ですが、「データ項目1」の「桁位置指定」には2、「データ項目3(項目桁数)」には7を設定しているところに注目。
39行目のSTOP文で一時停止しています。「再開」コマンドで次に進みます。
プログラムの41行目から57行目で1文字毎に色を変えます。
実際に実行してみると一瞬ではなく、上から順番に色が変わっているのが見えますが、FCギャザリング機能を有効にすると画面に表示するタイミングが変わるので、どうなるか試してみると面白いかもしれません。(FCギャザリング機能を使うには、ライブラリ保守(#LBM等)を使います。)