最後に紹介する 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
命令 によってエラー監視が柔軟にできるようになったのは確かである。