実身を開く方法はとりあえず分かりました。つまりUNIXにおけるopenに相当するものです。次はreadしましょう。しかし、TADはレコードが並んでいるものでしたから、レコードごとに読むことになります。レコードを読み込む関数はrea_recです。関連する関数としてsee_recとfnd_recがあります。
#include <sample.h>
VOID main(W argc, TC ** argv)
{
LINK SrcLink;
WERR WErr, SrcFD, Type;
W SearchMode = F_FWD, Number, Size;
UH Subtype;
WErr = get_lnk(L"test", &SrcLink, F_NORM);
SrcFD = opn_fil(&SrcLink, F_READ, NULL);
while( 0 <= (Type = fnd_rec(SrcFD, SearchMode, 0xffff, 0, &Number)) ) {
if ( SearchMode == F_FWD ) SearchMode = F_NFWD;
WErr = rea_rec(SrcFD, 0, NULL, 0, &Size, &Subtype);
printf("number: %d, type: %d, size: %d, subtype: %d\n",
Number, Type, Size, Subtype);
}
cls_fil( SrcFD );
}
プログラムを置いておきます。
このプログラムは、コンソールコマンドfsと似たことをします。実身を読むのプログラムに追加した部分について解説します。
#define F_FWD 0x0000 /* 前向きサーチ */
#define F_NFWD 0x0001 /* 前向きサーチ(次から) */
三番目の引数は、どの型のレコードを探すかのマスクです。レコードタイプ1或いは8のレコードを探したい場合は
1 << 1 | 1 << 8
と指定します。四番目の引数はどのサブタイプを持つレコードを探すかのマスクです。0を指定するとサブタイプを考慮せず全部探しにいきます。五番目の引数には、探したレコードが実身の中で前から数えて何番目なのか、その番号が入ります。fnd_recの返り値はレコードの型ですが、エラーが起こったりそれ以上レコードがない場合には負の値が返ってくるのでそのときにはループを抜けます。ここで出てきた関数はfnd_recとrea_recです。