IBM i の IP アドレスは IBM i に装填されている LAN カード毎に与えられる。
そこで複数毎の LAN カードが装填されている IBM i は IP アドレスは
一意的に決まるものではない。
従って IBM i のIP アドレスを取得するコマンドは存在しない。
実は IBM i の IP アドレスは「QUSRSYS/QATOCIFC」という物理ファイルに登録されている。
そこでこのファイルを CLP で RCVF で読めば
IP アドレスが取得できるという具合になるのだが
このファイルは特殊な要件をいくつか備えているため通常の DCLF では
ファイルとして正しく定義することができず、コンパイル・エラーになってしまう。
ここでは CLP による IP アドレスを取得できる正しい CLP のサンプルを示す。
0001.00 PGM
0002.00 DCL VAR(&DUMY) TYPE(*CHAR) LEN(1)
0003.00 DCLF FILE(QUSRSYS/QATOCIFC) ALWGRAPHIC(*YES) +
0004.00 DCLBINFLD(*INT)
0005.00
0006.00 READ: RCVF RCDFMT(QIFC)
0007.00 MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(REDEND))
0008.00 IF COND((&LIND *NE ' ') *AND +
0009.00 (%SST(&LIND 1 1) *NE '*')) THEN(DO)
0010.00 SNDPGMMSG MSG('IPADR=' *CAT &INTERNET) MSGTYPE(*DIAG)
0011.00 ENDDO
0012.00 GOTO READ
0013.00 REDEND:
0014.00 ENDPGM
DCLF では
0003.00 DCLF FILE(QUSRSYS/QATOCIFC) ALWGRAPHIC(*YES) + 0004.00 DCLBINFLD(*INT)
として定義しないとグラフィック・フィールドが含まれているので
ALWGRAPHIC(*YES) がないと DCLF が有効とはならなくて
そのためコンパイル・エラーが発生する。
また DCLBINFLD(*INT) がないと実行時には受入れフィールドの長さ不足となり
実行することができない。
さらに条件として
0008.00 IF COND((&LIND *NE ' ') *AND + 0009.00 (%SST(&LIND 1 1) *NE '*')) THEN(DO)
があるのは 回線記述がありそれは *LOOPBACK でないことを条件としている。