Tools

16. 実行中の端末の IP アドレスを調べる RTVDEVIP

今、自分が実行している表示装置や印刷装置の IPアドレスを調べることができれば
適用業務の応用範囲を広げることができる。
IPアドレスを調べる API : QDCRDEVD は V3R7M0 - V5R4M0 のすべての OS400に
搭載されているので、どの iSeries においても IPアドレスを取得することができる。
( iSeries サーバーの IPアドレスを調べるのではないので混同しないように)

【 CMD: RTVDEVIP 】
             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 桁 )')     
【 CLP: RTVDEVIPCL 】
             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