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 }