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

NECオフコン関連
オフコン一般
情報
トップ  >  画面表示の文字に色を付ける

画面表示の文字に色を付ける(COBOLシステムサブルーチン版)

画面表示した文字に色を付ける一般的な方法としては、画面節(SCREEN SECTION)でCOLOR句を使うか、画面フォーマット生成ユーティリティ(#SFGEN)で画面フォーマットを作ってCOBOLプログラムとリンクするかのどちらかとなります。

そのほかの方法としては、ワークステーションの制御符号を使う方法、COBOLシステムサブルーチンのカラーアトリビュートの設定を使う方法があります。

ここでは、COBOLシステムサブルーチンの「カラーアトリビュートの設定」を使う方法を紹介します。

他の方法については、別のところで紹介しています。

画面節のCOLOR句を使う例
画面フォーマット生成ユーティリティ
ワークステーションの制御符号を使う例

カラーアトリビュートの設定

説明書から概要を下に抜き出します。
詳細は「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等)を使います。)