今、自分が実行している表示装置や印刷装置の 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