以下のライフ・サイクル・イベントが発生すると、JSMDIRECTプログラムはCLプログラムJSMDRTEXTを呼び出します。
ENTRY | プログラムが開始します。 |
EXIT | プログラムが正常に終了します。 |
ERRnnnn | nnnnは、3000で始まる4桁の数字です。 エラーが発生すると、プログラムが終了し、EXITイベントは呼び出されません。 |
JSMDRTEXTプログラムはJSMDRTDTAデータ・エリアを読み込み、JSMLSAEXT/LANSAプログラムが呼び出される前に現在のCGIジョブに追加する必要があるライブラリを取得します。ブランクのライブラリ・エントリーは無視されます。
デフォルトでは、JSMDRTDTAデータ・エリア、はブランクです。最初の LANSA インストール時に、LANSA プログラムと共用ライブラリが最初の 2 つの位置に追加されます。
データ・エリアのサイズは2000バイトで、レイアウトは以下のようになります。
1-10 | ライブラリ (LANSAプログラム・ライブラリ) |
11-10 | ライブラリ (LANSA共有・ライブラリ) |
21-10 | ライブラリ |
xx-10 | ライブラリ... |
1991-10 | ライブラリ |
この終了プログラムのソース・コードは、JSMライブラリのQCLSRCに保管されます。
/* JSMDIRECT 終了プログラム */
PGM PARM(&EVENT &SERVICE &SERVERHOST &HOST &PORT +
&REMOTEUSER &REMOTEADDR &CONTINUE &MESSAGE)
DCL VAR(&EVENT) TYPE(*CHAR) LEN(10)
DCL VAR(&SERVICE) TYPE(*CHAR) LEN(30)
DCL VAR(&SERVERHOST) TYPE(*CHAR) LEN(80)
DCL VAR(&HOST) TYPE(*CHAR) LEN(80)
DCL VAR(&PORT) TYPE(*CHAR) LEN(5)
DCL VAR(&REMOTEUSER) TYPE(*CHAR) LEN(30)
DCL VAR(&REMOTEADDR) TYPE(*CHAR) LEN(45)
DCL VAR(&CONTINUE) TYPE(*CHAR) LEN(1)
DCL VAR(&MESSAGE) TYPE(*CHAR) LEN(256)
DCL VAR(&JOBNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBUSER) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNUMBER) TYPE(*CHAR) LEN(6)
DCL VAR(&JOBCMD) TYPE(*CHAR) LEN(50)
DCL VAR(&JOBMSG) TYPE(*CHAR) LEN(100)
DCL VAR(&JOBCHGSTS) TYPE(*CHAR) LEN(7) VALUE(OK)
DCL VAR(&TMPLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&TMPLIBPOS) TYPE(*DEC) LEN(5)
DCL VAR(&TMPLIBLIST) TYPE(*CHAR) LEN(2000)
DCL VAR(&CTIME) TYPE(*CHAR) LEN(6)
DCL VAR(&REQUESTID) TYPE(*CHAR) LEN(24)
MONMSG MSGID(CPF0000) /* ライブラリを取得 */
RTVDTAARA DTAARA(JSMDRTDTA (1 2000)) RTNVAR(&TMPLIBLIST)
IF COND(&EVENT *EQ 'ENTRY') THEN(DO)
/ CONTINUE のデフォルト値は 'Y' /
/* CHGVAR VAR(&CONTINUE) VALUE('N') */
/* CHGVAR VAR(&MESSAGE) VALUE('I do not know you') */
/* GOTO END */
/ *現在のサービスのジョブを準備 */
/* CALLSUBR SUBR(LOGSTR) */
CALLSUBR SUBR(ADDLIB)
GOTO END
ENDDO
IF COND(&EVENT *EQ 'EXIT') THEN(DO)
/ *次のサービスのジョブを復元 */
CALLSUBR SUBR(RMVLIB)
/* CALLSUBR SUBR(LOGEND) */
GOTO END
ENDDO
IF COND( %SUBSTRING (&EVENT 1 3) *EQ 'ERR') THEN(DO)
/ *エラー・のログ */
CALLSUBR SUBR(LOGERR)
CALLSUBR SUBR(RMVLIB)
/* CALLSUBR SUBR(LOGEND) */
GOTO END
ENDDO
|