14. 日本語で印刷 (PGM108 JPN)
これは「15.中国語で印刷」と同じサンプル・プログラムです。
印刷ファイル (PRTF) : PGM108P
は DDS の MSGCONキー・ワードを使って
日本語と中国語の見出し印刷を切替えています。
日本語PRTF DDSソース
0001.00 A*************************************************************** 0002.00 A* PGM108P : 部課マスター一覧表 0003.00 A* ソース : QTRSRC/QPRTSRC(PGM108P) 0004.00 A* 使用目的 : 照会 (*INQUIRY) 0005.00 A* 作成日 : 2017/08/18 18:52:47 0006.00 A* 作成者 : QTR 0007.00 A* コンパイル CRTEXPRTF QTROBJ/PGM108P SRCFILE(QTRSRC/QPRTSRC) 0008.00 A* LVLCHK(*NO) AUT(*ALL) 0009.00 A* 0010.00 A*************************************************************** 0011.00 A*( 見出行 ) 0012.00 * --------------------------- 0013.00 A R PRTHEAD 0014.00 * --------------------------- 0015.00 A SKIPB(03) 0016.00 A 1'PGM108P' 0017.00 A* 66' 部課マスター一覧表 ' 0018.00 A* TKCODE_ 20G 66 0019.00 A 66MSGCON(20 MSG0017 QTROBJ/USRMSG) 0020.00 A* CCSID(1200 *NOCONVERT) 0021.00 A 120'PAGE゙' 0022.00 A +1PAGNBR 0023.00 A EDTCDE(Z) 0024.00 A SPACEA(1) 0025.00 A SYSNAM 8A 132 0026.00 A 120DATE EDTCDE(Y) 0027.00 A 132TIME 0028.00 A SPACEA(1) 0029.00 A LINE1 132A 132 0030.00 A SPACEA(1) 0031.00 A* 1' 部課コード ' 0032.00 A* BUKACD_ 12A O 1MSGID(MSG0002 QTROBJ/USRMSG) 0033.00 A 1MSGCON(12 MSG0002 QTROBJ/USRMSG) 0034.00 A TEXT(' 部課コード ') 0035.00 A* 13' 部課名 ' 0036.00 A* BUKANM_ 10A O 13MSGID(MSG0014 QTROBJ/USRMSG) 0037.00 A 13MSGCON(10 MSG0014 QTROBJ/USRMSG) 0038.00 A* 24' 当月労働時間計 ' 0039.00 A* WRKDAY_ 14A O 24MSGID(MSG0015 QTROBJ/USRMSG) 0040.00 A 24MSGCON(14 MSG0015 QTROBJ/USRMSG) 0041.00 A* 41' 時間当賃金 ' 0042.00 A* WRKMON_ 12A O 41MSGID(MSG0016 QTROBJ/USRMSG) 0043.00 A 41MSGCON(12 MSG0016 QTROBJ/USRMSG) 0044.00 A SPACEA(1) 0045.00 A LINE2 132A 132 0046.00 A SPACEA(2) 0047.00 A*( 明細行 ) 0048.00 * --------------------------- 0049.00 A R DETAIL 0050.00 * --------------------------- 0051.00 A BKCODE 2A 5TEXT(' 部課 コード') 0052.00 A BKNAME 10 13TEXT(' 部課名 ') 0053.00 A CHRID 0054.00 A BKHOUR 3S 0 34TEXT(' 当月労働時間計 ') 0055.00 A EDTCDE(J) 0056.00 A BKRATE 5S 0 42TEXT(' 時間当賃金 ') 0057.00 A EDTCDE(J) 0058.00 A SPACEA(2) 0059.00 A*( 最終行 ) 0060.00 A R ENDPRT 0061.00 A 69'* * * * *' 0062.00 A +1' 報 告 書 の 終 り ' 0063.00 A +1' * * * * *' 0064.00 A SPACEA(1)
【解説】
「部課コード」という固定情報テキストは
A 1MSGCON(12 MSG0002 QTROBJ/USRMSG) A TEXT(' 部課コード ')
のようにして MSGCON キー・ワードによってメッセージとして定義されています。
MSGCON のメッセージの内容 (部課コード) は CRTPRTF のコンパイルと同時に
PRTF のオブジェクト内部にインクルードされますので
実行時にオーバーライドした他のメッセージに一時変更することはできません。
従って他言語の印刷ファイルを作成するには PRTF は別のオブジェクトとして
作成しなければなりません。
中国語PRTF DDSソース
0001.00 A*************************************************************** 0002.00 A* PGM108P : 部課マスター一覧表 0003.00 A* ソース : QTRSRC/QPRTSRC(PGM108P) 0004.00 A* 使用目的 : 照会 (*INQUIRY) 0005.00 A* 作成日 : 2017/08/18 18:52:47 0006.00 A* 作成者 : QTR 0007.00 A* 0008.00 A*************************************************************** 0009.00 A CCSID(13488) 0010.00 A*( 見出行 ) 0011.00 * --------------------------- 0012.00 A R PRTHEAD 0013.00 * --------------------------- 0014.00 A SKIPB(03) 0015.00 A 1'PGM108P' 0016.00 A* 66' 部課マスター一覧表 ' 0017.00 A 66MSGCON(20 MSG0017 CHINALIB/USRMSG 0018.00 A 120'PAGE.' 0019.00 A +1PAGNBR 0020.00 A EDTCDE(Z) 0021.00 A SPACEA(1) 0022.00 A SYSNAM 8A 132 0023.00 A 120DATE EDTCDE(Y) 0024.00 A 132TIME 0025.00 A SPACEA(1) 0026.00 A LINE1 132A 132 0027.00 A SPACEA(1) 0028.00 A* 1' 部課コード ' 0029.00 A 1MSGCON(12 MSG0002 CHINALIB/USRMSG) 0030.00 A TEXT(' 部課コード ') 0031.00 A* 14' 部課名 ' 0032.00 A 14MSGCON(10 MSG0014 CHINALIB/USRMSG) 0033.00 A* 24' 当月労働時間計 ' 0034.00 A 24MSGCON(14 MSG0015 CHINALIB/USRMSG) 0035.00 A* 41' 時間当賃金 ' 0036.00 A 41MSGCON(12 MSG0016 CHINALIB/USRMSG) 0037.00 A SPACEA(1) 0038.00 A LINE2 132A 132 0039.00 A SPACEA(2) 0040.00 A*( 明細行 ) 0041.00 * --------------------------- 0042.00 A R DETAIL 0043.00 * --------------------------- 0044.00 A BKCODE 2A 5TEXT(' 部課 テーn゙') 0045.00 A BKNAME 10 13TEXT(' 部課名 ') 0046.00 A CHRID 0047.00 A BKHOUR 3S 0 34TEXT(' 当月労働時間計 ') 0048.00 A EDTCDE(J) 0049.00 A BKRATE 5S 0 42TEXT(' 時間当賃金 ') 0050.00 A EDTCDE(J) 0051.00 A SPACEA(2) 0052.00 A*( 最終行 ) 0053.00 A R ENDPRT 0054.00 A 69'* * * * *' 0055.00 A +1' 報 告 書 の 終 り ' 0056.00 A +1' * * * * *' 0057.00 A SPACEA(1)
【解説】
中国語のメッセージ・ファイル : CHINALIB/USRMSG
を使って
A 1MSGCON(12 MSG0002 CHINALIB/USRMSG) A TEXT(' 部課コード ')
のように記述されています。
その一方で大事なのは日本語データ・ベースの表現です。
A BKNAME 10 13TEXT(' 部課名 ') A CHRID
のように漢字フィールド: BKNAME
は CHRID キー・ワードが定義されています。
しかも BKNAME
のタイプは必ずブランクにしてください。
CRTEXPRTFコマンドで上記の中国語印刷ファイル (PRTF) を作成するときは
CRTEXPRTF FILE(CHIMALIB/PGM108P) SRCFILE(CHINALIB/QPRTSRC) CHRID(320 290) LVLCHK(*NO) AUT(*ALL)
のようにして文字識別コード (CHRID) に日本語 (320 290
) を指定します。
この指定によって CHRID と指定されている BKNAME
は日本語コードであることが
印刷ストリーム (*SCS) に埋め込まれます。
BKNAME
は日本語であると扱われます。
これによってスプール全体が中国語であっても
一部だけは日本語として扱える言語の混在が可能となります。
15. 中国語で印刷 (PGM108 CHS)
【解説】
部課マスター一覧表は中国語の見出しで日本語データ・ベースを印刷しているサンプルです。
国コードを CHS
と指定すると中国簡体字環境 935
で
印刷プログラム: PGM108
を実行して印刷します。
下記に実行 CLP ソースを示します。
実行サンプルCLP: PGM108CL
0001.00 PGM PARM(&FROMCD &TOCD &CNTRY &OUTPUT) 0002.00 /*---------------------------------------------------------*/ 0003.00 /* PGM108 : 部課マスター一覧表 ( 中国語 ) */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&FROMCD) TYPE(*CHAR) LEN(2) 0006.00 DCL VAR(&TOCD) TYPE(*CHAR) LEN(2) 0007.00 DCL VAR(&CNTRY) TYPE(*CHAR) LEN(3) 0008.00 DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(6) 0009.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0010.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0011.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0012.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0013.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0014.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0015.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) 0016.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + 0017.00 VALUE('*ESCAPE ') 0018.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0019.00 VALUE(X'000074') /* 2 進数 */ 0020.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + 0021.00 VALUE(X'00000000') 0022.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0023.00 0024.00 /*( 環境の取得 )*/ 0025.00 RTVJOBA TYPE(&TYPE) 0026.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0027.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') 0028.00 ENDDO /* バッチ */ 0029.00 ELSE CMD(DO) /* 対話式 */ 0030.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') 0031.00 ENDDO /* 対話式 */ 0032.00 0033.00 /*( 環境の設定 )*/ 0034.00 IF COND(&CNTRY *EQ 'JPN') THEN(DO) /* 日本 */ 0035.00 CHGJOB LANGID(JPN) CNTRYID(JP) CCSID(65535) 0036.00 ENDDO /* 日本 */ 0037.00 IF COND(&CNTRY *EQ 'CHS') THEN(DO) /* 中国 */ 0038.00 ADDLIBLE CHINALIB 0039.00 MONMSG CPF2100 0040.00 CHGJOB LANGID(CHS) CNTRYID(CN) CCSID(65535) 0041.00 ENDDO /* 中国 */ 0042.00 0043.00 /*( 出力オプション )*/ 0044.00 IF COND((&OUTPUT *EQ '* ') *OR (&OUTPUT *EQ + 0045.00 '*BOTH ')) THEN(DO) 0046.00 OVRPRTF FILE(PGM108P) HOLD(*YES) 0047.00 ENDDO 0048.00 0049.00 /*( 実行 )*/ 0050.00 IF COND(&CNTRY *EQ 'JPN') THEN(DO) /* 日本 */ 0051.00 OVRPRTF FILE(PGM108P) TOFILE(QTROBJ/PGM108P) + 0052.00 SECURE(*YES) OVRSCOPE(*JOB) 0053.00 ENDDO /* 日本 */ 0054.00 IF COND(&CNTRY *EQ 'CHS') THEN(DO) /* 中国 */ 0055.00 OVRPRTF FILE(PGM108P) TOFILE(CHINALIB/PGM108P) + 0056.00 SECURE(*YES) OVRSCOPE(*JOB) 0057.00 ENDDO /* 中国 */ 0058.00 OVRDBF FILE(BUKAM) TOFILE(QTRFIL/BUKAM) + 0059.00 SECURE(*YES) OVRSCOPE(*JOB) 0060.00 CALL PGM(QTROBJ/PGM108) PARM(&FROMCD &TOCD) 0061.00 MONMSG MSGID(RPG9801) EXEC(GOTO CMDLBL(ERROR)) 0062.00 DLTOVR FILE(PGM108P BUKAM) LVL(*JOB) 0063.00 MONMSG CPF9800 0064.00 CHGJOB LANGID(JPN) CNTRYID(JP) 0065.00 SNDPGMMSG MSG(' 印刷を完了しました。 ') MSGTYPE(*DIAG) 0066.00 IF COND(&CNTRY *EQ 'CHS') THEN(DO) /* 中国 */ 0067.00 RMVLIBLE CHINALIB 0068.00 ENDDO /* 中国 */ 0069.00 0070.00 /*( 出力オプション )*/ 0071.00 IF COND((&OUTPUT *EQ '* ') *OR (&OUTPUT *EQ + 0072.00 '*BOTH ')) THEN(DO) 0073.00 DSPSPLF FILE(PGM108P) JOB(*) SPLNBR(*LAST) 0074.00 ENDDO 0075.00 IF COND(&OUTPUT *EQ '* ') THEN(DO) 0076.00 DLTSPLF FILE(PGM108P) SPLNBR(*LAST) 0077.00 ENDDO 0078.00 IF COND(&OUTPUT *EQ '*BOTH ') THEN(DO) 0079.00 RLSSPLF FILE(PGM108P) JOB(*) SPLNBR(*LAST) 0080.00 ENDDO 0081.00 RETURN 0082.00 0083.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0084.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0085.00 MSGFLIB(&MSGFLIB) 0086.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0087.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0088.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) 0089.00 ENDDO 0090.00 ELSE CMD(DO) 0091.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0092.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + 0093.00 MSGTYPE(&MSGTYPE) 0094.00 ENDDO 0095.00 ENDPGM
【解説】
日本語として実行が指定された場合は
0035.00 CHGJOB LANGID(JPN) CNTRYID(JP) CCSID(65535)
によって日本語環境が確保され
0051.00 OVRPRTF FILE(PGM108P) TOFILE(QTROBJ/PGM108P) + 0052.00 SECURE(*YES) OVRSCOPE(*JOB)
としてオーバーライドして日本語の印刷ファイル QTROBJ/PGM108P
を使用するように
指定しますが、中国語が指定された場合は
0040.00 CHGJOB LANGID(CHS) CNTRYID(CN) CCSID(65535)
によって中国語環境が設定されます。
このジョブの CCSID は i5/OS によって 935
となり
印刷スプールにはジョブの CCSID 935
が埋め込まれます。
Spoolライターはこれによってスプールが中国語であると判定します。
0055.00 OVRPRTF FILE(PGM108P) TOFILE(CHINALIB/PGM108P) + 0056.00 SECURE(*YES) OVRSCOPE(*JOB)
として中国語の印刷ファイル: CHINALIB/PGM108P
を使うように指示します。
実行サンプルRPG: PGM108
0001.00 H DFTNAME(PGM108) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 F********** 部課マスター一覧表 *************************************** 0003.00 FBUKAM IF E K DISK 0004.00 FPGM108P O E PRINTER EXTDESC('QTROBJ/PGM108P') 0005.00 F EXTFILE(*EXTDESC) 0006.00 F********************************************************************** 0007.00 * QTRSRC/QRPGLESRC(PGM108) 0008.00 * 使用目的 : 一覧表印刷 (*REPORT) 0009.00 * 作成日 : 2017/08/18 18:55:30 0010.00 * 作成者 : QTR 0011.00 0012.00 D LINE S 1 DIM(132) 0013.00 D AR S 1 DIM(80) 0014.00 D SAVDTA S 1 DIM(1024) SAVE-[゙ート 0015.00 D STRGYO S 2S 0 INZ(6) 0016.00 D GYOSU S 3S 0 0017.00 D ENDRRN S 3S 0 0018.00 D SFLPAG S 2S 0 INZ(15) 0019.00 D SFLSIZ S 3S 0 INZ(16) 0020.00 D LINE1 S 132A 0021.00 D LINE2 S 132A 0022.00 D TITLE_ C CONST(' 部品マスター一覧表 ') 0023.00 0024.00 D SAVEDS E DS EXTNAME(JUCHU) 0025.00 D DSPDTA 1 1024 0026.00 D DIM(1024) 入力 [゙ート 0027.00 0028.00 D*( WORK 日付 YYMMDD [゙ート 構造 ) 0029.00 D DATEDS DS 0030.00 D SRY 1 2 0 0031.00 D SRYMD 1 8 0 0032.00 D YYMMDD 3 8 0 0033.00 D YYMM 3 6 0 0034.00 D MMDD 5 8 0 0035.00 D YY 3 4 0 0036.00 D MM 5 6 0 0037.00 D DD 7 8 0 0038.00 0039.00 C*w 注意 ワ 0040.00 C* このプログラムはパラメータつきで呼び出すことができます。 0041.00 C* パラメータなしで呼び出された場合は単独で動作します。 0042.00 C*----------------------------------------------------+ 0043.00 C *ENTRY PLIST | 0044.00 C PARM FROMCD 2 0045.00 C PARM TOCD 2 0046.00 C*----------------------------------------------------+ 0047.00 C MOVE FROMCD BKCODE 0048.00 C*----------------------------------------------------+ 0049.00 C SETKEY KLIST 0050.00 C KFLD BKCODE 0051.00 C*----------------------------------------------------+ 0052.00 C SETKEY SETLL BUKAM 0053.00 C DO *HIVAL 0054.00 C SETOFF 50 0055.00 C READ BUKAM 50 0056.00 C 50 LEAVE 0057.00 C BKCODE CABGT TOCD REDEND 0058.00 C*-------------------------------------------------------------------------+ 0059.00 C SETON 42 | 0060.00 C EXSR OUTPUT | 0061.00 C*-------------------------------------------------------------------------+ 0062.00 C ENDDO 0063.00 C REDEND TAG 0064.00 C SETON LR 0065.00 C LR EXSR LRRTN 0066.00 C RETURN 0067.00 C****************************************************** 0068.00 C *INZSR BEGSR 0069.00 C****************************************************** 0070.00 C* 初期サイクルのみの実行 0071.00 C MOVEA *ALL'-' LINE 0072.00 C MOVEA LINE LINE1 0073.00 C MOVEA LINE LINE2 0074.00 C ENDSR 0075.00 C****************************************************** 0076.00 C LRRTN BEGSR 0077.00 C****************************************************** 0078.00 C*-------------------------------------------------------------------------+ 0079.00 C SETON 43 | 0080.00 C EXSR OUTPUT | 0081.00 C*-------------------------------------------------------------------------+ 0082.00 C ENDSR 0083.00 C****************************************************** 0084.00 C OUTPUT BEGSR 0085.00 C****************************************************** 0086.00 C N40 SETON 4041 0087.00 C*----------------------------------------------------+ 0088.00 C 41 WRITE PRTHEAD 0089.00 C 42 WRITE DETAIL OF 0090.00 C 43 WRITE ENDPRT 0091.00 C*----------------------------------------------------+ 0092.00 C OF SETOFF 40OF 0093.00 C SETOFF 414243 0094.00 C ENDSR
【解説】
部課マスター: BUKAM
を読んで印刷ファイル: PGM108P
に出力するだけの
単純な印刷プログラムであり日本語を印刷出力する場合も
中国語を印刷出力する場合もプログラムのアルゴリズムには何の影響もない。
つまりこれで既存の印刷プログラムであったとしても
国際言語化によって既存のプログラムに及ぼす影響はないと言える。