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)
の部分でありエラーもなく印刷ファイルは作成されている。