PANEL-WORKER

12. SFL型パネル・グループの行の読み取り

それでは CLP によるSFLレコードの読み取りを紹介しよう。
リストの読み取りは最初はリスト・ハンドルがわからないので FRST として最初のリスト項目を読み取るように指示する。
API QUIGETLE の読み取り後、リスト項目のハンドルが取得できているはずなので、以降は リスト・ハンドルを指定して NEXT で次々と読み取ることができる。
以下のソースではリスト項目を読み取って,メッセージとして出力している例である。

【 CLPソース】
0001.00              PGM                                                      
0002.00 /*---------------------------------------------------------*/         
0003.00 /*   BNK003CL :  パネル表示                                */         
0004.00 /*---------------------------------------------------------*/         
0005.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                 
0006.00              DCL        VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* +          
0007.00                            摘要業務ハンドル  */                       
0008.00              DCL        VAR(&PNLGRPLIB) TYPE(*CHAR) LEN(20) +         
0009.00                           VALUE('BNK003    TESTOBJ   ')               
0010.00              DCL        VAR(&AREA) TYPE(*CHAR) LEN(4) +               
0011.00                           VALUE(X'FFFFFFFF') /* 2 進数  */            
0012.00              DCL        VAR(&DEC08) TYPE(*DEC) LEN(8 0)               
0013.00              DCL        VAR(&EXITPG) TYPE(*CHAR) LEN(4) +             
0014.00                           VALUE(X'00000000') /* 2 進数  */            
0015.00              DCL        VAR(&FNCTON) TYPE(*CHAR) LEN(4) /* 2 進数  */ 
0016.00              DCL        VAR(&PANEL) TYPE(*CHAR) LEN(10) +             
0017.00                           VALUE('DSPTOP    ')                         
0018.00              DCL        VAR(&AGAIN) TYPE(*CHAR) LEN(1) VALUE(Y)       
0019.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(4) +             
0020.00                           VALUE(X'00000000') /* 2 進数  */            
0021.00              DCL        VAR(&USRTSK) TYPE(*CHAR) LEN(1) VALUE(N)     
0022.00              DCL        VAR(&STACK) TYPE(*CHAR) LEN(4) +             
0023.00                           VALUE(X'00000000') /* 2 進数  */           
0024.00              DCL        VAR(&UIMMSG) TYPE(*CHAR) LEN(10) VALUE(*CALLE
0025.00              DCL        VAR(&MSGKEY) TYPE(*CHAR) LEN(4)              
0026.00              DCL        VAR(&CSROPT) TYPE(*CHAR) LEN(1) VALUE(D)     
0027.00              DCL        VAR(&LASLST) TYPE(*CHAR) LEN(4) VALUE(NONE)  
0028.00              DCL        VAR(&ERRLST) TYPE(*CHAR) LEN(4)              
0029.00              DCL        VAR(&WAITTIME) TYPE(*CHAR) LEN(4) +          
0030.00                           VALUE(X'FFFFFFFF') /* 2 進数  */           
0031.00              DCL        VAR(&CF03) TYPE(*CHAR) LEN(4) +              
0032.00                           VALUE(X'00000003') /* 2 進数  */           
0033.00              DCL        VAR(&ENTER) TYPE(*CHAR) LEN(4) +             
0034.00                           VALUE(X'0000001B') /* 2 進数  */           
0035.00              DCL        VAR(&DSPDTA) TYPE(*CHAR) LEN(1024)           
0036.00              DCL        VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数  */
0037.00              DCLF       FILE(TESTFIL/BANKM)                          
0038.00              DCL        VAR(&NO) TYPE(*CHAR) LEN(4)                  
0039.00              DCL        VAR(&N) TYPE(*DEC) LEN(4 0) VALUE(1)         
0040.00              DCL        VAR(&LHANDL) TYPE(*CHAR) LEN(4)              
0041.00              DCL        VAR(&LSTHND) TYPE(*CHAR) LEN(4)              
0042.00          /*  MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */     
0043.00                                                                        
0044.00 /*( QUIOPNDA : パネル・グループのオープン )*/                          
0045.00              CALL       PGM(QUIOPNDA) PARM(&HANDLE &PNLGRPLIB &AREA +  
0046.00                           &EXITPG 'N' &APIERR)                         
0047.00 /*(BANKM: 銀行マスターの読み取り )*/                                   
0048.00  READ:       RCVF       RCDFMT(@BANKM)                                 
0049.00              MONMSG     MSGID(CPF0800) EXEC(GOTO CMDLBL(REDEND))       
0050.00              CHGVAR     VAR(&NO) VALUE(&N)                             
0051.00              CHGVAR     VAR(&DSPDTA) VALUE(&BKBKCD *CAT &BKNMKJ *CAT + 
0052.00                           &BKKBN *CAT &NO)                             
0053.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(26)                   
0054.00              CALL       PGM(QUIADDLE) PARM(&HANDLE &DSPDTA &DTALEN +   
0055.00                           'SFLRCD    ' 'SFL       ' 'NEXT' &LHANDL +   
0056.00                           &APIERR)                                     
0057.00              CHGVAR     VAR(&N) VALUE(&N + 1)                          
0058.00              GOTO       READ                                           
0059.00  REDEND:                                                               
0060.00 /*( QUIDSPP : パネル表示 )*/                                           
0061.00  DSPLY:      CALL       PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL +     
0062.00                           &AGAIN &APIERR &USRTSK &STACK &UIMMSG +      
0063.00                           &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME)  
0064.00              MONMSG     MSGID(CPF6A95)                                
0065.00 /*( CF03 )= 終了 */                                                   
0066.00              IF         COND(&FNCTON *EQ &CF03) THEN(DO)              
0067.00 /*( QUICLOA : パネル・グループのクローズ )*/                          
0068.00              CALL       PGM(QUICLOA) PARM(&HANDLE 'M' &APIERR)        
0069.00              RETURN                                                   
0070.00              ENDDO                                                    
0071.00 /*( 実行キー )*/                                                      
0072.00              IF         COND(&FNCTON *EQ &ENTER) THEN(DO)             
0073.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(26)                  
0074.00              CALL       PGM(QUIGETLE) PARM(&HANDLE &DSPDTA &DTALEN +  
0075.00                           'SFLRCD    ' 'SFL       ' 'FRST' 'Y' +      
0076.00                           '                    ' '    ' 'N' &LSTHND + 
0077.00                           &APIERR)                                    
0078.00              MONMSG     MSGID(CPF6A00) EXEC(GOTO CMDLBL(OUTRED))      
0079.00              SNDPGMMSG  MSG(%SST(&DSPDTA 1 26)) MSGTYPE(*COMP)        
0080.00  NXTRED:     CALL       PGM(QUIGETLE) PARM(&HANDLE &DSPDTA &DTALEN +  
0081.00                           'SFLRCD    ' 'SFL       ' 'NEXT' 'Y' +      
0082.00                           '                    ' '    ' 'N' &LSTHND + 
0083.00                           &APIERR)                                    
0084.00              MONMSG     MSGID(CPF6A00) EXEC(GOTO CMDLBL(OUTRED)) 
0085.00              SNDPGMMSG  MSG(%SST(&DSPDTA 1 26)) MSGTYPE(*COMP)   
0086.00              GOTO       NXTRED                                   
0087.00 OUTRED:                                                          
0088.00              GOTO       DSPLY                                    
0089.00              ENDDO                                               
0090.00                                                                  
0091.00  ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)                       
0092.00              SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)                 
0093.00              ENDPGM