#include <stddef.h>
#include <aes.h>

#define FALSE 0
#define TRUE  1

int rsrc_sobject(RSHDR *rsc, int re_gtype, int re_gindex, void *gaddr )
{
	switch (re_gtype)
	{
		case R_TREE     :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_ntree))
			{
				((OBJECT**)(rsc->rsh_trindex + (long)rsc))[re_gindex] = gaddr;
				return(TRUE);
			}
			break;
		case R_OBSPEC   :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nobs))
			{
				(void*)((OBJECT*)(rsc->rsh_object + (long)rsc + sizeof(OBJECT)*re_gindex))->ob_spec.index = gaddr;
				return(TRUE);
			}
			break;
		case R_TEPTEXT  :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
			{
				((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_ptext = gaddr;
				return(TRUE);
			}
			break;
		case R_TEPTMPLT :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
			{
				((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_ptmplt = gaddr;
				return(TRUE);
			}
			break;
		case R_TEPVALID :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
			{
				((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_pvalid = gaddr;
				return(TRUE);
			}
			break;
		case R_IBPMASK  :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
			{
				((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_pmask = gaddr; /* 34 = (sizeof(ICONBLK)-2) */
				return(TRUE);
			}
			break;
		case R_IBPDATA  :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
			{
				((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_pdata = gaddr; /* 34 = (sizeof(ICONBLK)-2) */
				return(TRUE);
			}
			break;
		case R_IPBTEXT  :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
			{
				((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_ptext = gaddr; /* 34 = (sizeof(ICONBLK)-2) */
				return(TRUE);
			}
			break;
		case R_BIPDATA  :
			if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nbb))
			{
				((BITBLK*)(rsc->rsh_bitblk + (long)rsc + sizeof(BITBLK)*re_gindex))->bi_pdata = gaddr;
				return(TRUE);
			}
	}
	return(FALSE);
}
