#include <stdio.h>
#include <string.h>
#include "res.h"

int SeekTResource(TRES *tres,unchar *resname)
/* 指定リソースの本体先頭にシークポインターをセットする */
/* リターン値	 ０：正常終了 */
/*	       	-１：指定リソースが発見できない */
/*		-２：リソース構造がおかしい */
/*		-３：リソースが読めない */
{
unchar line[TRESMAX],token[TRESMAX],token2[TRESMAX];
int cn;
	/* 現在アクセス中のリソースの時は即移動 */
	if (strcmp(resname,tres->cres)==0) {
		fseek(tres->fp,tres->cseek,SEEK_SET);
		return(0);
	}
	/* 新リソースアクセスの時 */
	fseek(tres->fp,tres->top,SEEK_SET);
	while (read1line0(tres->fp,line,token,TRESMAX)==0) {
	    if (token[0]=='*') { /* リソースシンボル */
		/* まずリソース本体まで飛ばす */
		if (read1line0(tres->fp,line,token2,TRESMAX)) return(-3); /* リソースが読めない */
		if (strcmp(token2,"{")) return(-2);/* リソース構造異常 */
		/* リソース名チェック */
		if (strcmp(&token[1],resname)==0) { /* リソース発見 */
		    strcpy(tres->cres,resname);
		    tres->cseek=ftell(tres->fp);
		    return(0);
		} else { /* 次のリソースまで飛ばす */
		    cn=1; /* '{'の数 */
		    do {
		    	if (read1line0(tres->fp,line,token2,TRESMAX)) return(-3); /* リソースが読めない */
		    	if (strcmp(token2,"{")==0) cn++;
		    	if (strcmp(token2,"}")==0) cn--;
		    } while (cn>0);
		}
	    }
	}
	/* 指定リソース発見できなかった */
	return(-1);
}
