SNDPGMMSGに色をつける

初めに

pin's LaboratoryさんのAS/400会議室で、以下のような質問がありました。

SNDPGMMSGで出力されるメッセージの色は変えられますか?

それに対して私が回答したものをまとめました。

回答

メッセージの内容を自分で決めることが出来るものの場合

PGM                                                                    
  DCL &COLOR *CHAR 1 VALUE(X'28')                                      
  SNDPGMMSG MSG(&COLOR || 'TEST')                                      
ENDPGM                                                                 

QCPFMSGなどに含まれるメッセージ(CPF0002など)の場合

PGM                                                                    
  DCL &MSGTEXT *CHAR 200                                               
  DCL &COLOR   *CHAR   1 VALUE(X'28')                                  
                                                                       
  RTVMSG MSGID(CPF0002) MSGF(QCPFMSG) MSG(&MSGTEXT)                    
  SNDPGMMSG MSG(&COLOR || &MSGTEXT)                                    
ENDPGM                                                                 

注意点

いずれも実行してみると赤い文字が表示されます。ただ、DSPJOBLOGやDSPMSGなどでメッセージの詳細を見てみると、メッセージIDやその他情報が取得できていません。(前者はオリジナルメッセージとして出力しているので当然として、後者も最終的にはオリジナルメッセージとして出力しているためです。前者に関しては自分で定義できる部分は自分で書くようにして、後者に関しては、RTVMSGで詳細なデータを取得するようにして出力すればなんとかなりそうです。)

ちなみに

COLORの所を、X'38'にするとピンク色に、X'21'にすると反転イメージになったりします。いろいろな値を試して遊んでみてください。