CL

145. ソースはなくても印刷ファイル(PRTF)は作成できる

CRTPRTFコマンドで印刷ファイル(PRTF)をDDSソースから
作成することは誰でも知っているはずだが
実は元になるDDSソースがなくてもPRTFは作成することができる。

CRTPRTF FILE(QTEMP/TESTPRT) SRCFILE(*NONE) IGCDTA(*YES) OVRFLW(64) LVLCHK(*NO) AUT(*ALL)

という感じで SRCFILE(*NONE) でもエラーが発生することなく
PRTFを作成することができる。
それではソースの指定のない CRTPRTF コマンドは何のために
使用するのだろうか?

弊社ではあるスプールと同じ属性のスプール・ファイルを作成するのに
利用している。
属性は同じなのだがスプールの内容は独自に出力したいという場合である。
同じ属性のスプールを作成するのが目的である。
参考までに製品の一部としてCLPソースを公開する。

[LP: CRTPRTFCL ]

ソースはこちらから

0001.00              PGM        PARM(&PRTF &PRTLIB &SPLATTR)                     
0002.00 /*-------------------------------------------------------------------*/  
0003.00 /*   CRTPRTFCL  :   一時印刷ファイルの作成                           */  
0004.00 /*                                                                   */  
0005.00 /*   PGM:CRTSPL から呼び出されて QTEMP に一時的な印刷ファイルを      */  
0006.00 /*   指定された属性 SPLATTR に基づいて作成します。                   */  
0007.00 /*   このプログラムは RPG:CRTSPL から呼び出されて                    */  
0008.00 /*   QTEMP に一時的なスプール・ファイルを作成します。                */  
0009.00 /*                                                                   */  
0010.00 /*   2021/01/25  作成                                                */  
0011.00 /*-------------------------------------------------------------------*/  
0012.00              DCL        VAR(&PRTF) TYPE(*CHAR) LEN(10)                   
0013.00              DCL        VAR(&TEXT) TYPE(*CHAR) LEN(50)                   
0014.00              DCL        VAR(&PRTLIB) TYPE(*CHAR) LEN(10)                 
0015.00              DCL        VAR(&SPLATTR) TYPE(*CHAR) LEN(5000)              
0016.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                   
0017.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                   
0018.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                   
0019.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)                
0020.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                
0021.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                    
0022.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)                 
0023.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +              
0024.00                           VALUE('*ESCAPE   ')                    
0025.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +      
0026.00                           VALUE(X'000074') /* 2 進数  */         
0027.00              DCL        VAR(&ERR) TYPE(*CHAR) LEN(1)             
0028.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +         
0029.00                           VALUE(X'00000000')                     
0030.00 /*( スプール属性のパラメータ (SPLA0200))*/                       
0031.00              DCL        VAR(&JOBINFO) TYPE(*CHAR) LEN(26)        
0032.00              DCL        VAR(&SPLF) TYPE(*CHAR) LEN(10)           
0033.00              DCL        VAR(&SPLNB) TYPE(*CHAR) LEN(4)           
0034.00              DCL        VAR(&FORM) TYPE(*CHAR) LEN(10)           
0035.00              DCL        VAR(&USRDTA) TYPE(*CHAR) LEN(10)         
0036.00              DCL        VAR(&LPIB) TYPE(*CHAR) LEN(4)            
0037.00              DCL        VAR(&LPI) TYPE(*DEC) LEN(4 0)            
0038.00              DCL        VAR(&CPIB) TYPE(*CHAR) LEN(4)            
0039.00              DCL        VAR(&CPI) TYPE(*DEC) LEN(4 0)            
0040.00              DCL        VAR(&PRTF) TYPE(*CHAR) LEN(10)           
0041.00              DCL        VAR(&PRTLIB) TYPE(*CHAR) LEN(10)         
0042.00              DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)            
0043.00              DCL        VAR(&PGMLIB) TYPE(*CHAR) LEN(10)         
0044.00              DCL        VAR(&OUTQ) TYPE(*CHAR) LEN(10)           
0045.00              DCL        VAR(&OUTQLIB) TYPE(*CHAR) LEN(10)        
0046.00              DCL        VAR(&LENBIN) TYPE(*CHAR) LEN(4)          
0047.00              DCL        VAR(&LEN) TYPE(*DEC) LEN(9 0)            
0048.00              DCL        VAR(&WIDBIN) TYPE(*CHAR) LEN(4)                 
0049.00              DCL        VAR(&WID) TYPE(*DEC) LEN(9 0)                   
0050.00              DCL        VAR(&OVRBIN) TYPE(*CHAR) LEN(4)                 
0051.00              DCL        VAR(&OVR) TYPE(*DEC) LEN(9 0)                   
0052.00           /* MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */      
0053.00                                                                         
0054.00 /*( 環境の取得 )*/                                                      
0055.00              RTVJOBA    TYPE(&TYPE)                                     
0056.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */     
0057.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')                
0058.00              ENDDO      /*  バッチ  */                                  
0059.00              ELSE       CMD(DO) /*  対話式  */                          
0060.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')                
0061.00              ENDDO      /*  対話式  */                                  
0062.00                                                                         
0063.00 /*( パラメータの取得 )*/                                                
0064.00              RTVOBJD    OBJ(&PRTLIB/&PRTF) OBJTYPE(*FILE) TEXT(&TEXT)   
0065.00              CHGVAR     VAR(&JOBINFO) VALUE(%SST(&SPLATTR 49 26))       
0066.00              CHGVAR     VAR(&SPLF) VALUE(%SST(&SPLATTR 75 10))          
0067.00              CHGVAR     VAR(&SPLNB) VALUE(%SST(&SPLATTR 85 4))          
0068.00              CHGVAR     VAR(&FORM) VALUE(%SST(&SPLATTR 89 10))          
0069.00              CHGVAR     VAR(&USRDTA) VALUE(%SST(&SPLATTR 99 10))        
0070.00              CHGVAR     VAR(&LPIB) VALUE(%SST(&SPLATTR 181 4))          
0071.00              CHGVAR     VAR(&LPI) VALUE(%BIN(&LPIB))                    
0072.00              CHGVAR     VAR(&LPI) VALUE(&LPI / 10)                  
0073.00              CHGVAR     VAR(&CPIB) VALUE(%SST(&SPLATTR 185 4))      
0074.00              CHGVAR     VAR(&CPI) VALUE(%BIN(&CPIB))                
0075.00              CHGVAR     VAR(&CPI) VALUE(&CPI / 10)                  
0076.00              CHGVAR     VAR(&PRTF) VALUE(%SST(&SPLATTR 224 10))     
0077.00              CHGVAR     VAR(&PRTLIB) VALUE(%SST(&SPLATTR 234 10))   
0078.00              CHGVAR     VAR(&PGM) VALUE(%SST(&SPLATTR 254 10))      
0079.00              CHGVAR     VAR(&PGMLIB) VALUE(%SST(&SPLATTR 264 10))   
0080.00              CHGVAR     VAR(&OUTQ) VALUE(%SST(&SPLATTR 191 10))     
0081.00              CHGVAR     VAR(&OUTQLIB) VALUE(%SST(&SPLATTR 201 10))  
0082.00              CHGVAR     VAR(&LENBIN) VALUE(%SST(&SPLATTR 433 4))    
0083.00              CHGVAR     VAR(&LEN) VALUE(%BIN(&LENBIN))              
0084.00              CHGVAR     VAR(&WIDBIN) VALUE(%SST(&SPLATTR 437 4))    
0085.00              CHGVAR     VAR(&WID) VALUE(%BIN(&WIDBIN))              
0086.00              CHGVAR     VAR(&OVRBIN) VALUE(%SST(&SPLATTR 445 4))    
0087.00              CHGVAR     VAR(&OVR) VALUE(%BIN(&OVRBIN))              
0088.00                                                                     
0089.00 /*( 存在の検査 )*/                                                  
0090.00              CHKOBJ     OBJ(QTEMP/&PRTF) OBJTYPE(*FILE)             
0091.00              MONMSG     MSGID(CPF9800) EXEC(GOTO CMDLBL(CRTFILE))   
0092.00              DLTF       QTEMP/&PRTF                                 
0093.00 CRTFILE:                                                            
0094.00              CRTPRTF    FILE(QTEMP/&PRTF) SRCFILE(*NONE) +          
0095.00                           IGCDTA(*YES) TEXT(&TEXT) PAGESIZE(&LEN +  
0096.00                           &WID) LPI(&LPI) CPI(&CPI) OVRFLW(&OVR) +    
0097.00                           RPLUNPRT(*NO) OUTQ(&OUTQLIB/&OUTQ) +        
0098.00                           USRDTA(&USRDTA) LVLCHK(*NO) AUT(*ALL)       
0099.00              RETURN                                                   
0100.00                                                                       
0101.00  APIERR:                                                              
0102.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))          
0103.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))      
0104.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                
0105.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')             
0106.00              GOTO       SNDMSG                                        
0107.00                                                                       
0108.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +           
0109.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 
0110.00                           SNDMSGFLIB(&MSGFLIB)                        
0111.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                 
0112.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +   
0113.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)           
0114.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)                   
0115.00              ENDDO                                                    
0116.00              ELSE       CMD(DO)                                       
0117.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +          
0118.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +           
0119.00                           MSGTYPE(&MSGTYPE)                           
0120.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)
0121.00              ENDDO                                 
0122.00              DMPCLPGM                              
0123.00              ENDPGM  


                               

[解説]

赤字で表示している部分が

CRTPF SRCFILE(*NONE)

の部分でありエラーもなく印刷ファイルは作成されている。