C/400 であっても外部記述で記述することができる。
RPG で DDS記述がインクルードされて参照することができるのと
同じように C/400 でもユーザーが自分で記述することなく
インクルード記述を利用することができる。
ただし ゾーン10進数の記述はインクルードの定義では
char として定義されているので自分で数値に atoi などで
変換してやる必要がある。
正確なインクルード記述を調べたいのであれば
コンパイル・リストで *PRINT を指定して出力するようにしておき
コンパイル・オプションで *SHOWINC を指定すればよい。
【SAMPLE: TESTEXREC】
0001.00 #include
0002.00 #include
0003.00 #include
0004.00 #include
0005.00
0006.00 #define TRUE 0
0007.00 #define FALSE -1
0008.00 #define MAX_LEN 45
0009.00 /*****************************************/
0010.00 /* 外部記述ファイルの定義 */
0011.00 /*****************************************/
0012.00 #pragma mapinc("shohin", "QTRFIL/SHOHIN(SHOHINR)", "input key", "d",,""
0013.00 #include "shohin"
0014.00 SHOHINR_i_t shohin_rec; /* SHOHIN レコード・バッファー */
0015.00
0016.00 void main(void){
0017.00 _RFILE *fp;
0018.00 _RIOFB_T *iofb;
0019.00 int shtank;
0020.00 char buff[256];
0021.00
0022.00 printf("** TESTEXREC: 外部記述のレコード単位の読取り **\n");
0023.00 getchar();
0024.00 fp = _Ropen("QTRFIL/SHOHIN", "rr");
0025.00 if(fp == NULL){
0026.00 printf("Open failed for open file\n");getchar();
0027.00 }
0028.00 while(1){/*while*/
0029.00 iofb = _Rreadn(fp, &shohin_rec, MAX_LEN, __DFT);
0030.00 if(iofb->num_bytes == EOF) break;
0031.00 sprintf(buff, "%07.07s", shohin_rec.SHTANK);
0032.00 shtank = atoi(buff);
0033.00 printf("%10.10s %24.24s %7d %04.04s\n",
0034.00 shohin_rec.SHCODE, shohin_rec.SHNAME, shtank, shohin_rec.SHSCOD);
0035.00 }/*while*/
0036.00 _Rclose(fp);
0037.00 getchar();
0038.00 }

【解説】
#pragma mapinc("shohin", "QTRFIL/SHOHIN(SHOHINR)", "input key", "d",,""
によってファイル QTRFIL/SHOHIN のレコード名 SHOHINR をキー順に読取ることを
定義しておいて
013.00 #include "shohin"
でインクルードを宣言して
014.00 SHOHINR_i_t shohin_rec; /* SHOHIN レコード・バッファー */
によってインクルードを定義する。
入出力用に定義したいのであれば
SHOHINR_both_t
と定義し、出力用であれば
SHOHINR_o_t
として定義する。
この名前の書き方は一意でありこの形式に従うものとする。
この入出力バッファー SHOHIN_i_t は、コンパイラーによって
次のように定義されている。
typedef struct {
char SHCODE[10];
char SHNAME[24];
char SHTANK[7];
char SHSCOD[4];
} SHOHINR_i_t;
typedef struct {
char SHCODE[10];
} SHOHINR_key_t;
つまり 単価: SHTANK 7S 0 は数字ではなく 7桁の文字列(CHAR)として
定義されている。
従って
0019.00 int shtank; 0020.00 char buff[256] : 0031.00 sprintf(buff, "%07.07s", shohin_rec.SHTANK); 0032.00 shtank = atoi(buff);
の演算による数字としての取出しが必要となる。
