RPG

46.RPG でのユーザースペースの読取り方法

API を初めて使用する場合に最初に突き当たるのがユーザースペースのアクセス方法である。
旧来の多くのAPIは、その情報をユーザースペースに出力する。
ユーザーはAPI を使用した後、ユーザースペースにAPI によって書かれた情報を読取らなければならない。
ユーザースペースは C/400であればポインターによって一度の操作で読取れるのだが、
RPGでは項目の数だけLOOPの必要がある。
幸いユーザースペースの構造は どの場合でも同じなので、次の1つのパターンでどのような
ユーザースペースでも読取ることができる。

0001.00      IUSRSPC      DS 
0002.00      I                                        1  10 USNAME  
0003.00      I                                       11  20 USLIB   
0004.00      IRCVVAR      DS   
0005.00      I                                    B   1   40OFFSET 
0006.00      I                                    B   9  120NOENTR  
0007.00      I                                    B  13  160LSTSIZ  
0008.00      I* LIST-DATA SECTION 
0009.00      IRCVAR1      DS  
0010.00      I*                                       1  10 FLDNAM 
0011.00      I*                                     193 212 FLDCH3 
0012.00      ISPCBIN      DS 
0013.00      I                                    B   1   40LENDTA  
0014.00      I                                    B   5   80STRPOS  
0015.00     +C*   FIELD の LIST API : QUSLFLD によって作成された   
0016.00      C*   USER 空間 :  INPUT.QTEMP を検索する。   
0017.00      C                     MOVEL'INPUT   'USNAME  
0018.00      C                     MOVEL'QTEMP   'USLIB 
0019.00      C*    1. LIST-DATA SECTION の OFFSET 値を検索  
0020.00      C                     Z-ADD125       STRPOS 
0021.00      C                     Z-ADD16        LENDTA 
0022.00      C*----------------------------------------------------+ 
0023.00      C                     CALL 'QUSRTVUS'                 | 
0024.00      C                     PARM           USRSPC           |   
0025.00      C                     PARM           STRPOS           | 
0026.00      C                     PARM           LENDTA           |  
0027.00      C                     PARM           RCVVAR           | 
0028.00      C*----------------------------------------------------+    
0029.00      C*    DS:RCVVAR によって OFFSET,LSTSIZ を受取った  
0030.00      C                     Z-ADDOFFSET    STRPOS  
0031.00      C                     ADD  1         STRPOS 
0032.00      C                     Z-ADDLSTSIZ    LENDTA  
0033.00      C*    LIST SIZE の分だけ LOOP して検索      
0034.00      C           1         DO   NOENTR    N       40       N=1-NOENTR
0035.00      C*----------------------------------------------------+ 
0036.00      C                     CALL 'QUSRTVUS'                 | 
0037.00      C                     PARM           USRSPC           | 
0038.00      C                     PARM           STRPOS           | 
0039.00      C                     PARM           LENDTA           | 
0040.00      C                     PARM           RCVAR1           | 
0041.00      C*----------------------------------------------------+  
0042.00      C*          < 処 理 の 始 め  >    
0043.00      C*          読取ったデータは RCVAR1 に入っている。   
0044.00      C*          ここで必要な配列などに MOVE する。    
0045.00      C*          < 処 理 の 終 り  >  
0046.00      C*      - - - - - - - - - - - - - - - - - - -   
0047.00      C                     ADD  LENDTA    STRPOS  
0048.00      C                     END                             N=1-NOENTR