今、自分が実行している表示装置や印刷装置の IPアドレスを調べることができれば
適用業務の応用範囲を広げることができる。
IPアドレスを調べる API : QDCRDEVD は V3R7M0 - V5R4M0 のすべての OS400に
搭載されているので、どの iSeries においても IPアドレスを取得することができる。
( iSeries サーバーの IPアドレスを調べるのではないので混同しないように)
CMD PROMPT('IP アドレスの検索 ')
PARM KWD(DEV) TYPE(*NAME) DFT(*CURRENT) +
SPCVAL((*CURRENT)) EXPR(*YES) +
PROMPT(' 装置名 ')
PARM KWD(IPADDR) TYPE(*CHAR) LEN(15) RTNVAL(*YES) +
PROMPT(' 戻り値の IP アドレス (15 桁 )')
PGM PARM(&DEVICE &DEVIP)
/*---------------------------------------------------------*/
/* RTVDEVIPCL : IP アドレスの検索 */
/*---------------------------------------------------------*/
DCL VAR(&MSG) TYPE(*CHAR) LEN(80)
DCL VAR(&DEVICE) TYPE(*CHAR) LEN(10)
DCL VAR(&DEVIP) TYPE(*CHAR) LEN(15)
DCL VAR(&DEVCTG) TYPE(*CHAR) LEN(10)
DCL VAR(&DEVINF) TYPE(*CHAR) LEN(2048)
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) +
VALUE(X'00000800')
DCL VAR(&IP_NONE) TYPE(*CHAR) LEN(15) +
VALUE(X'000000000000000000000000000000')
DCL VAR(&IP_BLANK) TYPE(*CHAR) LEN(15) VALUE(' ')
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
CHGVAR VAR(&DEVIP) VALUE(' ')
IF COND(&DEVICE *EQ '*CURRENT ') THEN(DO)
RTVJOBA JOB(&DEVICE)
ENDDO
CALL PGM(QDCRDEVD) PARM(&DEVINF &RCVLEN +
'DEVD0100' &DEVICE X'00000000')
CHGVAR VAR(&DEVCTG) VALUE(%SST(&DEVINF 32 10))
IF COND(&DEVCTG *EQ '*DSP') THEN(DO)
CALL PGM(QDCRDEVD) PARM(&DEVINF &RCVLEN +
'DEVD0600' &DEVICE X'00000000')
CHGVAR VAR(&DEVIP) VALUE(%SST(&DEVINF 878 15))
ENDDO
ELSE CMD(IF COND(&DEVCTG *EQ '*PRT') THEN(DO))
CALL PGM(QDCRDEVD) PARM(&DEVINF &RCVLEN +
'DEVD1100' &DEVICE X'00000000')
CHGVAR VAR(&DEVIP) VALUE(%SST(&DEVINF 1405 15))
ENDDO
IF COND(DEVIP *EQ &IP_NONE) THEN(DO)
CHGVAR VAR(&DEVIP) VALUE('*NONE')
ENDDO
ELSE CMD(IF COND(&DEVIP *EQ &IP_BLANK) THEN(DO))
CHGVAR VAR(&DEVIP) VALUE('*NONE')
ENDDO
RETURN
ERROR: RCVMSG RMV(*NO) MSG(&MSG)
SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG)
ENDPGM