CL

142. テンプレート・サンプルCLP AA4_SAMPLE

ここで紹介するサンブルCLPはコマンドで使用される
「プロンプト一時変更プログラム」である。
「プロンプト一時変更プログラム」というのは
コマンドの実行直前に呼び出されてコマンドのパラメータの
初期値をプログラムで与える。
例えばどこかに保存されているデータを読み取って
初期値として表示したり今日の日付や時刻を
初期値として表示することができる。
帳票などの出力を指定する画面はDSPFで作成するよりも
コマンドを使うようにしたほうが
インターフェースや操作も社内で統一することができる。

[CLP: AA4_SAMPLE]

ソースはこちらから

0001.00              PGM        PARM(&CMDNAME  &STRING)                               
0002.00 /*------------------------------------------------------------------------*/  
0003.00 /*   AA4_SAMPLE :  プロンプト一時変更プログラム                           */  
0004.00 /*               -- このプログラムはコマンドの初期値を設定します。        */  
0005.00 /*                  &STRING に長さとパラメータの初期値を戻します。        */  
0006.00 /*                                                                        */  
0007.00 /*   2019/12/01  作成                                                     */  
0008.00 /*------------------------------------------------------------------------*/  
0009.00              DCL        VAR(&CMDNAME) TYPE(*CHAR) LEN(20)                     
0010.00              DCL        VAR(&STRING)  TYPE(*CHAR) LEN(5700)                   
0011.00              DCL        VAR(&STRINGLEN) TYPE(*DEC) LEN(8 0) VALUE(1024)       
0012.00              DCL        VAR(&BIN2) TYPE(*CHAR) LEN(2) VALUE(X'0400') +        
0013.00                           /*  長さ 1024 バイト  */                            
0014.00              DCL        VAR(&BIN4) TYPE(*CHAR) LEN(4)                         
0015.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                        
0016.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                        
0017.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                        
0018.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)                     
0019.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                     
0020.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                         
0021.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)                      
0022.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +                   
0023.00                           VALUE('*ESCAPE   ')                                 
0024.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +               
0025.00                           VALUE(X'000074') /* 2 進数  */                  
0026.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +                  
0027.00                           VALUE(X'00000000')                              
0028.00              /*--------------------------------------------------*/       
0029.00              /*   以下は装置の初期値パラメータ                   */       
0030.00              /*--------------------------------------------------*/       
0031.00              DCL        VAR(&DEV_) TYPE(*CHAR) LEN(10)                    
0032.00              /*--------------------------------------------------*/       
0033.00              /*   以下は返信パラメータ                           */       
0034.00              /*--------------------------------------------------*/       
0035.00              DCL        VAR(&DEV)    TYPE(*CHAR) LEN(40) +                
0036.00                           VALUE(' ??DEV(')                                
0037.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))           
0038.00                                                                           
0039.00 /*( 環境の取得 )*/                                                        
0040.00              RTVJOBA    TYPE(&TYPE)                                       
0041.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */       
0042.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')                  
0043.00              ENDDO      /*  バッチ  */                                    
0044.00              ELSE       CMD(DO) /*  対話式  */                            
0045.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')                  
0046.00              ENDDO      /*  対話式  */                                    
0047.00                                                                           
0048.00 /*      ************************************************    */       
0049.00 /*                  返信パラメータの作成                    */       
0050.00 /*      ************************************************    */       
0051.00              CHGVAR     VAR(&DEV) VALUE(&DEV *TCAT &WTR *TCAT ')')   
0052.00 /*      ************************************************    */       
0053.00 /*                  返信ストリングの作成                    */       
0054.00 /*      ************************************************    */       
0055.00              CHGVAR     VAR(&STRING) VALUE(&BIN2) /*  長さ  */       
0056.00              CHGVAR     VAR(&STRING) VALUE(&STRING *TCAT &DEV)       
0057.00              RETURN                                                  
0058.00                                                                      
0059.00 ERROR:       /*( エラーがあったときは CPF0011 を *ESCAPE で戻す )*/  
0060.00              RCVMSG     RMV(*NO) MSG(&MSG)                           
0061.00              SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)                     
0062.00              SNDPGMMSG  MSGID(CPF0011) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
0063.00              ENDPGM   


                                               

[解説]

返信するパラメータ &DEV を作成して &STRING に付加して戻している。
さらに他のパラメータがあれば &STRING に追加するようにする。