最後に紹介する RPG のエラー・モニターは MONITOR 命令によるエラー・モニターである。
RPG ではなく他言語の場合は、あるルーチンの一部のエラーをモニターするという方法が一般的であるが
RPG には、そのような方法はなかった。
| VisualBASIC | : | On Error Goto |
| VC++ | : | try catch |
| Java | : | try catch |
| C | : | #pragma exception_handler |
| CLP | : | MONMSG |
などが、それであるが、これから行うしばらくの演算中に、もしエラーが起こったら 〜 しなさい、
という命令である。
MONITOR 命令 から ENDMON のあいだに ON-ERROR 〜 という命令を定義することができる。
--------------------------------------------------------------------------------------------
0001.00 H DATEDIT(*YMD/) DFTNAME(TESTPSSR)
0002.00 F********** MONITOR によるエラー・モニター ****************************
0003.00 F**********************************************************************
0004.00 D KINGAKU S 7S 0 INZ(8000)
0005.00 D SURYO S 4S 0 INZ(0)
0006.00 D TANKA S 7S 0
0007.00
0008.00 D CPFMSGLIB S 20A INZ('QCPFMSG *LIBL ')
0009.00 D PGMSTKCNT S 10I 0 INZ(1) 小数
0010.00 D EXCP_LEN S 10I 0 INZ(80) 小数
0011.00 D APIERR DS
0012.00 D GETBYT 1 4B 0 INZ(160)
0013.00 D AVLBYT 5 8B 0 INZ(0)
0014.00 D MSG_ID 9 15
0015.00 D MSG_DTA 17 160
0016.00
0017.00 D*( プログラム状況データ構造 )
0018.00 D INFDSP SDS
0019.00 D 512A
0020.00 D CPFID 7A OVERLAY(INFDSP:40)
0021.00 D PGMID 10A OVERLAY(INFDSP:334)
0022.00 D EXCP_ID 4A OVERLAY(INFDSP:171)
0023.00 D EXCP_DATA 80A OVERLAY(INFDSP:91)
0024.00
0025.00 C* 単価 = 金額 / 数量 を計算 ( 数量は 0 である )
0026.00 C MONITOR
0027.00 C EVAL TANKA = KINGAKU / SURYO
0028.00 C ON-ERROR *PROGRAM
0029.00 C EXSR *PSSR
0030.00 C ENDMON
0031.00 C SETON LR
0032.00 C RETURN
0033.00 C******************************************************
0034.00 C *PSSR BEGSR
0035.00 C******************************************************
0036.00 C CPFID IFNE *BLANKS CPFID<>*BLK
0037.00 C*----------------------------------------------------+
0038.00 C CALL 'QMHSNDPM'
0039.00 C PARM CPFID |
0040.00 C PARM CPFMSGLIB |
0041.00 C PARM EXCP_DATA |
0042.00 C PARM EXCP_LEN |
0043.00 C PARM '*COMP ' MSGTYPE 10 |
0044.00 C PARM '*PGMBDY ' PGMQUE 10 |
0045.00 C PARM PGMSTKCNT |
0046.00 C PARM MSGKEY 4 |
0047.00 C PARM APIERR
0048.00 C*----------------------------------------------------+
0049.00 C END
0050.00 C ENDSR '*CANCL'
----------------------------------------------------------------------------------------------
ファイル仕様書に *PSSR を定義するのとは違って、プログラマーが制御した部分で *PSSR を呼び出すことが
できるので、エラーの処理はしやすくなる。
0028.00 C ON-ERROR *PROGRAM 0029.00 C EXSR *PSSR 0030.00 C ENDMON
の *PROGRAM とはプログラム演算にかかわる、どのようなエラーでも発生したらサブルーチン : *PSSR を
実行せよ、という意味である。
*PROGRAM だけでなく *FILE や特定のメッセージ・コードだけをモニターすることもできる。
MONITOR 命令 によってエラー監視が柔軟にできるようになったのは確かである。