C400

17. C/400 における CHAIN 命令の実行

C/400 には RPGのCHAIN 命令に相当するひとつの命令はない。

しかし、RPG で CHAIN命令を使わずに同じことを実現する方法を考えて欲しい。

それは 同じキーを SETLL & READE していることに等しいのである。

よって C/400で RPG の CHAIN命令を実現するにもこの方法を採ることになる。

以下は ファイル QTRFIL/SHOHIN に10桁の ‘NV-CF1 ‘ というキーで CHAIN命令を

実行している例である。

0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>                                         
0003.00 #include <string.h>                                         
0004.00 #include <recio.h>                                          
0005.00                                                                   
0006.00 #define TRUE         0                                            
0007.00 #define FALSE       -1                                            
0008.00 #define MAX_LEN 3000                                              
0009.00 #define MAX_KEY_LEN 256                                           
0010.00                                                                   
0011.00 void main(void){                                                  
0012.00     _RFILE *fp;                                                   
0013.00    _RIOFB_T *iofb;                                                
0014.00     char key[MAX_KEY_LEN];                                        
0015.00     unsigned int key_len;                                         
0016.00     char record[128];                                             
0017.00     int i;                                                        
0018.00                                                                   
0019.00     if((fp = _Ropen("QTRFIL/SHOHIN", "rr+ blkrcd=Y")) == NULL){   
0020.00        printf("cannot open\n"); return;                           
0021.00     }                                                                 
0022.00     memset(key, 0, sizeof(key));                                      
0023.00     strcpy(key, "NV-CF1    ");                                        
0024.00     key_len = 10;                                                     
0025.00                                                                       
0026.00     /*[ CHAIN 命令の実行 ]*/                                          
0027.00     _Rlocate(fp, &key, key_len, __KEY_LT);  /*[ SETLL ]*/             
0028.00     iofb = _Rreadk(fp, record,MAX_LEN, __KEY_NEXTUNQ, &key, key_len); 
0029.00     if(iofb->num_bytes == EOF ||                                   
0030.00              strncmp(iofb->key, key, key_len) != 0){               
0031.00        printf(" キー %s のレコードは見つかりません \n", key);         
0032.00     }                                                                 
0033.00     else{                                                             
0034.00        printf(" キー %s による CHAIN 成功 \n", key);                  
0035.00     }                                                                 
0036.00     _Rclose(fp);                                                      
0037.00     getchar();                                                        
0038.00 }