System API プログラミングの基礎 (5) - 配列を使用したユーザースペース内の取り出し位置指定 -

インフォメーション・センターにはいろんなプログラミング言語でのいろんな処理の作成例が載っています。

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/books_web/c0925086201.htm

上記リンクからの引用ですが、↓にあるように System API を利用する際にポインタを利用したプログラミング例も載っています。

Figure 96 illustrates the use of pointers, based structures and system APIs. This program does the following:
  1. Receives the Library and File name you wish to process
  2. Creates a User space using the QUSCRTUS API
  3. Calls an API (QUSLMBR) to list the members in the requested file
  4. Gets a pointer to the User space using the QUSPTRUS API
  5. Displays a message with the number of members and the name of the first and last member in the file

↑を、「System API プログラミングの基礎 (3) - ユーザースペース使用用の汎用プロシージャの作成 -」で作成したCrtUsrspcP プロシージャを使用して書き換えてみました。
フリー・フォーマットやサブプロシージャなどを使用したより現代的な ILE RPG スタイルを採用しています。

     H*DFTACTGRP(*no)                                                                               
      *                                                                                             
     D RtvMbrLst       PR                                                                           
     D  pFile                        10a   CONST                                                    
     D  pLib                         10a   CONST                                                    
      *                                                                                             
     D RtvMbrLst       PI                                                                           
     D  FileParm                     10a   CONST                                                    
     D  LibParm                      10a   CONST                                                    
      *                                                                                             
     D RtvPFMbr        PR                  EXTPGM('QUSLMBR')                                        
     D  pName                        20a   Const                                                    
     D  pMbr_List                    10a   Const                                                    
     D  pFile_Lib                    20a   Const                                                    
     D  pWHICHMBR                    10a   Const                                                    
     D  pOverride                     1a   Const                                                    
      *                                                                                             
     D  SpaceName      DS                                                                           
     D                               10a   INZ('LISTSPACE')                                         
     D                               10a   INZ('QTEMP')                                             
     D  Mbr_List       S             10a   INZ('MBRL0100')                                          
     D  File_Lib       DS                  Qualified                                                
     D   File                        10a                                                            
     D   Lib                         10a                                                            
     D  WHICHMBR       S             10a   INZ('*ALL      ')                                        
     D  Override       S              1a   INZ('1')                                                 
      *                                                                                             
     D CrtUsrspcP      PR              *                                                            
     D  pName                        20a                                                            
      *                                                                                             
     D  ptr            S               *                                                            
      *                                                                                             
     D  Space          DS                  Based(ptr)                                               
     D   sp1                      32767                                                             
      *                                                                                             
     D   arr                          1    overlay(sp1) Dim(32767)                                  
      *                                                                                             
     D   offset                      10i 0 overlay(sp1:125)                                         
      *                                                                                             
     D   size                        10i 0 overlay(sp1:133)                                         
      *                                                                                             
     D  mbrptr         S               *                                                            
     D  mbrarr         S             10    based(mbrptr) dim(32767)                                 
      *                                                                                             
     D  charSize       S              3                                                             
      *                                                                                             
     D  First_Last     S             50    inz('    Members, +                                      
     D                                     First =           , +                                    
     D                                     Last =           ')                                      
      *                                                                                             
      /Free                                                                                         
              File_Lib.File = FileParm ;                                                            
              File_Lib.Lib = LibParm ;                                                              
                                                                                                    
              ptr = CrtUsrspcP (SpaceName) ;                                                        
                                                                                                    
              RtvPFMbr ( SpaceName                                                                  
                        :MBR_LIST                                                                   
                        :File_Lib                                                                   
                        :WHICHMBR                                                                   
                        :OverRide) ;                                                                
                                                                                                    
              mbrptr = %addr(arr(offset)) ;                                                         
              evalR charSize = %char(size) ;                                                        
              %subst(First_Last:1:3) = charSize ;                                                   
              %subst(First_Last:22:10) = mbrarr(2) ;                                                
              %subst(First_Last:41:10) = mbrarr(size) ;                                             
                                                                                                    
              dsply (First_Last) ;                                                                  
                                                                                                    
              *inLR = *on ;                                                                         
              return ;                                                                              
                                                                                                    
      /End-Free

[Top Pageに戻る]

Ads by TOK2