RPG

520. SFLレコードのRRNを取得する方法(1)

カーソルがセットされているSFLレコードのRRNを
取得する方法を紹介する。
最初は伝統的な方法で多くの古くからのRPG開発者であれば
ご存知かもしれない。
_

0003.00 FPGM201FM  CF   E             WORKSTN                              
0004.00 F                                     SFILE(SFREC01:RRN1)          
0005.00 F                                     INFDS(INFDS)                 
 :
0031.00 D INFDS           DS                   
0032.00 D  NUM_ROWS             152    153B 0  
0033.00 D  NUM_COLS             154    155B 0  
0034.00 D  NUM_RCDS             156    159I 0  
0035.00 D*( カーソル の行と桁の取り込み )          
0036.00 D  LINE                 370    371B 0  
 :
0592.00 C                   EXSR      CURSOR 
0593.00 C                   EXSR      LINCHK 
 :
0614.00 C*****************************************************                                 
0615.00 C     CURSOR        BEGSR                                                              
0616.00 C*****************************************************                                 
0617.00 C     LINE          DIV       256           LIN               3 0          ガメン の行数 
0618.00 C                   MVR                     POS               3 0          ガメン の桁数 
0619.00 C                   ENDSR    
0620.00 C******************************************************                   
0621.00 C     LINCHK        BEGSR                                                 
0622.00 C******************************************************                   
0623.00 C     STRGYO        ADD       GYOSU         ENDGYO            2 0         
0624.00 C                   SUB       1             ENDGYO                        
0625.00 C* カーソル は開始行と終了行とのあいだにあるか                                
0626.00 C     LIN           COMP      STRGYO                             50  50   
0627.00 C   50LIN           COMP      ENDGYO                               5050   
0628.00 C* 94: カーソル が適切な位置になかった                                        
0629.00 C  N50              SETON                                        9967     
0630.00 C   99              GOTO      LINEND                                      
0631.00 C     LIN           SUB       STRGYO        RRN1                          
0632.00 C                   ADD       TOPRRN        RRN1                          
 :

[解説]

これはカーソルの位置を読み取ってSFLの開始行と終了行から
カーソルが位置づけられていた位置を読み取ってから
計算するという重労働を必要とするものである。
次回はこれを近代的なスマートな方法で解決する方法を紹介する。
_