[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] Resources as Interface (source code)



Hello

Here source code ressource load in MyAeS

There is nothing for transform from independant video format CICON to dependant video, because I do it dynamically actually when draw (to do in next devs!)

Olivier
/* MyAeS! (c) 2003 - 2004 Olivier LANDEMARRE */

	/* rsrc_xxx() functions */

#include <stdio.h>
#include <portab.h>

#include <myaesgem.h>
#include <string.h>
#include "myaes.h"
#include "extern.h"


#ifndef RSXHDR

typedef struct
{
  unsigned INT16   rsh_vrsn;           /* should be 3                                 */
  unsigned INT16   rsh_extvrsn;        /* not used, initialised to 'IN' for Interface */
  unsigned long    rsh_object;
  unsigned long    rsh_tedinfo;
  unsigned long    rsh_iconblk;        /* list of ICONBLKS                             */
  unsigned long    rsh_bitblk;
  unsigned long    rsh_frstr;
  unsigned long    rsh_string;
  unsigned long    rsh_imdata;         /* image data                                          */
  unsigned long    rsh_frimg;
  unsigned long    rsh_trindex;
  unsigned long    rsh_nobs;           /* counts of various structs                    */
  unsigned long    rsh_ntree;
  unsigned long    rsh_nted;
  unsigned long    rsh_nib;
  unsigned long    rsh_nbb;
  unsigned long    rsh_nstring;
  unsigned long    rsh_nimages;
  unsigned long    rsh_rssize;         /* total bytes in resource   */
} RSXHDR;	/* structure ressource ?tendu selon Interface */
#endif

typedef struct {
	unsigned long	rlen;
	unsigned long	cicon_offset;
} NRSHDR;


#define NRSC_INTERFACE 3

int __myaes_rsrc_free(short *global, my_aes_CLIENT *client)
{
	if(global==NULL) return 0;
	if(client->rsrc_load_count==0) return 0;
	if(*(long *)(&global[7])!=0L/*(*(void **)(&global[5]))!=NULL*/)
	{
		
		myaes_free (*(void **)(&global[7]));
	/*	FreeMem_ID(__LINE__,__FILE__,(*(long *)(&global[5])));*/
		
	/*	(*(void **)(&global[5]))=NULL;*/
		*(long *)(&global[5])=0L;
		*(long *)(&global[7])=0L;
		
		client->rsrc_load_count-=1;
		
		return 1;
	}
	return 0;
}

int myaes_rsrc_free(AESPB *pb)
{
	return __myaes_rsrc_free((short *) pb->global,get_client(pb));
}



unsigned long get_add(unsigned long start_rsc,unsigned long rsh_relatif,long index)
{	unsigned long add, *pt;
	pt = (unsigned long *)(start_rsc  + rsh_relatif);
	add = pt[index] /*+ start_rsc*/;
	return add;
}

unsigned long  __myaes_rsrc_gaddr(int type,unsigned long index,long *addrout,short *global,my_aes_CLIENT *client)
{ /* unsigned long rsrc_adr=(unsigned long)GetMemID(*(long *)(&global[5])); 
*/
	unsigned long rsrc_adr=*(unsigned long *)(&global[7]);
	unsigned long addresse=0L;
	RSXHDR myheader,*rsrc_header; RSHDR *old_header;
	/*unsigned long corrige_purec;*/ int flag=1; /* si flag==0 alors c'est qu'un programme fait le malin avec le global[7] c'est pas bien (interface fait cela) */
				
	myaes_printf(" rsrc_gaddr : type %d\n",type);
	if((rsrc_adr==(unsigned long )NULL)||(rsrc_adr!=*(unsigned long *)(&global[7]))) 
	{
		if(/*(*(long *)(&global[5])==0L)||*/((*(long *)(&global[7]))==0L)&&(type!=0))
		{
			*addrout=(long)NULL;
			myaes_printf(" rsrc_gaddr : ressource non charg?!!!\n");
			return 0L;
		}
		if(type!=0)
		{
			client->flag_bad_aes_use|=4096L;
			rsrc_adr=*(unsigned long *)(&global[7]); /* des fois qu'un gars veuille le faire en directe normalement ne sert ? rien */
		}
		else
		if(*(long *)(&global[5])==0L)
		{
			*addrout=(long)NULL;
			myaes_printf(" rsrc_gaddr : ressource non charg? type=0 global[5]=0!!!\n");
			return 0L;
		}
	}
	if(1/*type!=0*/) /* on n'a pas besoin de cela dans ce cas */
	{
		old_header=(RSHDR *)rsrc_adr;
		if(old_header->rsh_vrsn!=NRSC_INTERFACE)
		{
			myheader.rsh_object = old_header->rsh_object;
			myheader.rsh_tedinfo = old_header->rsh_tedinfo;
			myheader.rsh_iconblk = old_header->rsh_iconblk;
			myheader.rsh_bitblk = old_header->rsh_bitblk;
			myheader.rsh_frstr = old_header->rsh_frstr;
			myheader.rsh_string = old_header->rsh_string;
			myheader.rsh_imdata = old_header->rsh_imdata;
			myheader.rsh_frimg = old_header->rsh_frimg;
			myheader.rsh_trindex = old_header->rsh_trindex;
			myheader.rsh_nobs = old_header->rsh_nobs;
			myheader.rsh_ntree = old_header->rsh_ntree; /* tree */
			myheader.rsh_nted = old_header->rsh_nted;
			myheader.rsh_nib = old_header->rsh_nib; /* bitblock */
			myheader.rsh_nbb = old_header->rsh_nbb;
			myheader.rsh_nstring = old_header->rsh_nstring; /* freestring */
			myheader.rsh_nimages = old_header->rsh_nimages; /* imdata */
			myheader.rsh_rssize = old_header->rsh_rssize;
					
			rsrc_header=&myheader;
		}
		else rsrc_header = (RSXHDR *)rsrc_adr;
	}
/*		myaes_printf("gaddr %d\n",type);
*/	
/*	corrige_purec=(unsigned long)rsrc_adr;
	if(corrige_purec> *(unsigned long *)&global[5]) flag=0;
	else
	{
		corrige_purec+=rsrc_header->rsh_rssize;
		if(corrige_purec< *(unsigned long *)global[5]) flag=0;
	}
	if(flag==0) get_client(pb)->flag_bad_aes_use|=64L;
*/
	switch(type)
	{
		case -1: /* interne pour fixer les tableaux */
		{	int i=0; unsigned long *tab;
			tab=(unsigned long *)((unsigned long)rsrc_header->rsh_trindex+rsrc_adr);
			
			while(i<rsrc_header->rsh_ntree)
			{	
				tab[i]=tab[i]+rsrc_adr;
				i++;
			}
			i=0;
			tab=(unsigned long *)((unsigned long)rsrc_header->rsh_frstr+rsrc_adr);
			while(i<rsrc_header->rsh_nstring)
			{	
				tab[i]=tab[i]+rsrc_adr;
				i++;
			}
			i=0;
			tab=(unsigned long *)((unsigned long)rsrc_header->rsh_frimg/*imdata*/+rsrc_adr);
			while(i<rsrc_header->rsh_nimages)
			{	
				tab[i]=tab[i]+rsrc_adr;
				i++;
			}
		}
		break;
		case -2: /* interne pour connaitre la position du tableau tree dans le ressource */
			addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_trindex;
		break;
		case -3: /* interne pour connaitre le pointeur sur un ciconblk */
		if((old_header->rsh_vrsn==NRSC_INTERFACE)||(old_header->rsh_vrsn&4))
		{ NRSHDR *nrsh;	/*long *table;*/
			nrsh = (NRSHDR*)((unsigned long)rsrc_adr+rsrc_header->rsh_rssize) ;
			addresse = (unsigned long)rsrc_adr + nrsh->cicon_offset ;
		}
		else addresse = 0L;
		break;
		case R_TREE:
#if 0
		/*	if(flag)*/
			{	/* m?thode d'acces normal */
				if(index<rsrc_header->rsh_ntree) 
					addresse = get_add((unsigned long)rsrc_adr, rsrc_header->rsh_trindex, index);
				
			}
		/*	else*/
#else
			{	/* m?thode d'acces corrigeant des progs pas propres ?crivant dans le global[7] */
				if(index<rsrc_header->rsh_ntree) 
				addresse = get_add( *(unsigned long *)&global[5], 0, index);
				
			}
#endif			
		break;
		case R_OBJECT:
			if(flag)
			{ /* m?thode d'acces normal */
				if(index<rsrc_header->rsh_nobs) 
					addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_object+ index*(unsigned long)sizeof(OBJECT);
			}
			else 
			{ /* m?thode d'acces corrigeant des progs pas propres ?crivant dans le global[7] */
				addresse = get_add(*(unsigned long *)&global[5], 0, 0); /* on prend le 1er arbre qui correspond au 1er objet */
				addresse = (unsigned long)addresse+ index*(unsigned long)sizeof(OBJECT);
			}
		break;
		case R_TEDINFO:
			if(index<rsrc_header->rsh_nted)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_tedinfo+ index*(unsigned long)sizeof(TEDINFO);
			}
		break;
		case R_ICONBLK:	
			if(index<rsrc_header->rsh_nib)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_iconblk+ index*(unsigned long)sizeof(ICONBLK);
			}
		break;
		case R_BITBLK:
			if(index<rsrc_header->rsh_nbb)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_bitblk+ index*(unsigned long)sizeof(BITBLK);
			}
		break;
		case R_STRING:
			if(index<rsrc_header->rsh_nstring) 
			{
			
				addresse = get_add((unsigned long)rsrc_adr, rsrc_header->rsh_frstr, index);
			}
			
		break;
		case R_IMAGEDATA:
			if(index<rsrc_header->rsh_nimages)
			{
			
				addresse = get_add((unsigned long)rsrc_adr, rsrc_header->rsh_frimg/*imdata*/, index);
			}
			
		break;
		case R_OBSPEC:
			if(index<rsrc_header->rsh_nobs)
			{
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_object+ index*(unsigned long)sizeof(OBJECT);
				addresse = (unsigned long)((OBJECT *)addresse)->ob_spec.index;
				
			}
		break;
		case R_TEPTEXT:
			if(index<rsrc_header->rsh_nted)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_tedinfo+ index*(unsigned long)sizeof(TEDINFO);
				addresse = (unsigned long)((TEDINFO *)addresse)->te_ptext;
			}
		break;
		case R_TEPTMPLT:
			if(index<rsrc_header->rsh_nted)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_tedinfo+ index*(unsigned long)sizeof(TEDINFO);
				addresse = (unsigned long)((TEDINFO *)addresse)->te_ptmplt;
			}
		break;
		case R_TEPVALID:
			if(index<rsrc_header->rsh_nted)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_tedinfo+ index*(unsigned long)sizeof(TEDINFO);
				addresse = (unsigned long)((TEDINFO *)addresse)->te_pvalid;
			}
		break;
		case R_IBPMASK:	
			if(index<rsrc_header->rsh_nib)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_iconblk+ index*(unsigned long)sizeof(ICONBLK);
				addresse = (unsigned long)((ICONBLK *)addresse)->ib_pmask;
			}
		break;
		case R_IBPDATA:	
			if(index<rsrc_header->rsh_nib)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_iconblk+ index*(unsigned long)sizeof(ICONBLK);
				addresse = (unsigned long)((ICONBLK *)addresse)->ib_pdata;
			}
		break;
		case R_IBPTEXT:	
			if(index<rsrc_header->rsh_nib)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_iconblk+ index*(unsigned long)sizeof(ICONBLK);
				addresse = (unsigned long)((ICONBLK *)addresse)->ib_ptext;
			}
		break;
		case R_BIPDATA:
			if(index<rsrc_header->rsh_nbb)
			{
			
				addresse = (unsigned long)rsrc_adr+ rsrc_header->rsh_bitblk+ index*(unsigned long)sizeof(BITBLK);
				addresse = (unsigned long)((BITBLK *)addresse)->bi_pdata;
			}
		break;
		case R_FRSTR:
			if(index<rsrc_header->rsh_nstring)
			{
				addresse = (unsigned long)rsrc_adr + (unsigned long)rsrc_header->rsh_frstr+ index*sizeof(char *); 
				
			}
		break;
		case R_FRIMG:
		
				addresse = (unsigned long)rsrc_adr+ (unsigned long) rsrc_header->rsh_frimg/*imdata*/+ index*sizeof(void *);
		
		break;
		default:
			/*	printf("gaddr %d inconnu\n",type);
				Pterm(0); */
				myaes_printf("gaddr %d inconnu\n",type);
		break;
	}
	if(addresse == (unsigned long)NULL) myaes_printf2("gaddr NULL type= %d index = %ld\n",type, index);
	return addresse;
}

int myaes_rsrc_gaddr(AESPB *pb)
{	unsigned long add;
	
	add = __myaes_rsrc_gaddr(pb->intin[0],pb->intin[1], pb->addrout,pb->global,get_client(pb));
	pb->addrout[0] = add;
	if(add==(unsigned long)NULL) return 0;
	return 1;
}



int __myaes_rsrc_load(char *rsc_name,short *global,long *addrout,my_aes_CLIENT *client)
{	long handle,i/*,nb*/; /*char path[500];*/
	unsigned long len_fic_rsc;
	int flag=0; 
	long		*lp;
	
	myaes_printf("rsrc_load %s\n",rsc_name);
	handle = Fopen(rsc_name,0); /* ouverture en lecture seul */
	if(handle<0L)
	{char buffer[256];
		__myaes_strcpy(buffer,nom_fichier_seul(rsc_name));
		__myaes_shel_find(buffer, client);
		handle = Fopen(buffer,0);
	}
	if(handle>=0L)
	{	
		len_fic_rsc=Fseek(0,handle,2);
		Fseek(0,handle,0);
		if (len_fic_rsc>sizeof(RSHDR))
		{	char *adr_rsc;
			adr_rsc = myaes_alloc(len_fic_rsc,3+(2<<4));  
	/*		adr_rsc =  MyMalloc( len_fic_rsc , __LINE__, __FILE__, -1);*/ /* comme ID on aura la valeur de retour */
			
			if (adr_rsc)
			{ /* RSXHDR myheader,*rsrc_header; RSHDR *old_header;*/
				OBJECT *patch_objc; TEDINFO *ted; ICONBLK *icone; BITBLK *bit;
				void *tree0;
				Fread(handle,len_fic_rsc,adr_rsc);
				(*(void **)(&global[7])) = (*(void **)(&global[5])) = (void *)(adr_rsc ); /* met dans le ressource global */
				client->rsrc_load_count+=1;
				__myaes_rsrc_gaddr(-1,0, addrout,global,client); /* relocation des tableaux principaux */
				
				/* parceque certains vieux softs regardent dans le global 5-6 si ils ont le tableau des arbres il faut leurs mettre au lieu d'un tout autre pointeur */
				tree0 = (void *)__myaes_rsrc_gaddr(-2,0, addrout,global,client);
			/*
			ChangeMemID((long)adr_rsc, (long)tree0);*/ /* pour retrouver le vrai d?but du ressource ici on enregistre un ID qui correspond ? un pointeur appartenant au bloc */
				(*(void **)(&global[5])) = tree0;
				(*(void **)(&client->global_save[0]))=(*(void **)(&global[7])) = adr_rsc; /* pour compatibilit? ne devrait pas entrer en ligne de compte */
			/*	(*(void **)(&client->global_save[0]))=(*(void **)(&global[7])) = adr_rsc; / * pour compatibilit? seulement on ne s'en sert pas * /
			*/	(*(short *)(&client->global_save[2]))=(*(short *)(&global[9])) = (short)len_fic_rsc; /* ca c'est pour les vieux softs ca ne marche pas pour les ressources ?tendus ! on s'en fout on ne devrait pas int?grer cela */
				
				/* relocation des cicon */





/* relocation des icones couleur adapt?e de windom lui meme
adapt? de EG_LIB (de Christophe Boyanique).
*/
lp=(long *)__myaes_rsrc_gaddr(-3,0,addrout,global,client);
if(lp)
{	CICONBLK	*table;
	CICON		*cicon,*cold;
	long ncib=0L,iclen,num_cicon;
	char		*p;
	int j;
	
	while (!lp[ncib]) ncib+=1;
	if (lp[ncib]!=-1L)
		ncib=0;
	else {
		table=(CICONBLK *)&lp[ncib+1];
		for( i=0; i<ncib; i++) 
		{				
			lp[i]=(long)table;
			p=(char *)&table[1];
			/*	myaes_printf2("monoblk reloge %lx \n",(long)&table->monoblk);
			*/	
			table->monoblk.ib_pdata = (INT16 *)p;
			iclen=table->monoblk.ib_wicon/8*table->monoblk.ib_hicon;
			p+=iclen;
			table->monoblk.ib_pmask = (INT16 *)p;
			p+=iclen;
			table->monoblk.ib_ptext=(char *)p;
			cicon=(CICON *)&p[12];
			p+=12L;
			cold=cicon;
			if( (num_cicon=(long)table->mainlist) > 0L ) 
			{					
				table->mainlist=cicon;
				/*		myaes_printf2("cicon reloge %lx \n",(long)cicon);			*/
				if(num_cicon<0) 
				{
					num_cicon=100;
					client->flag_bad_aes_use|=8192L;
				}
				for( j=0; j<num_cicon; j++) 
				{						
					p=(char *)&cicon[1];
					cicon->col_data=(INT16 *)p;
					
					p+=iclen*cicon->num_planes;
					cicon->col_mask=(INT16 *)p;
					p+=iclen;
					if( cicon->sel_data!=NULL) {							
						cicon->sel_data=(INT16 *)p;
						p+=iclen*cicon->num_planes;
						cicon->sel_mask=(INT16 *)p;
						p+=iclen;
					}
					if((cicon->next_res==(CICON *)1L)&&(j<num_cicon-1))  
					{
						cicon->next_res=(CICON *)p; 
					}
					else 
					{
						if((cicon->next_res==0)&&(j!=num_cicon-1)) client->flag_bad_aes_use|=8192L;
						j=num_cicon;
					}
				/*	if((cicon->next_res==0)||(cicon->next_res>8)) 
					{
						if(j!=num_cicon-1) client->flag_bad_aes_use|=8192L;
						j=num_cicon; / * si on enleve cette ligne Jinee 1.02 plante * /
					}*/
					cold=cicon;
					cicon=(CICON *)p;
				}
				cold->next_res=NULL;
			}
			table=(CICONBLK *)p;
		}
	}

}







				/* fin de relocation des cicon */
				
				
					/* relocation dans les objets */
				i=0;
				patch_objc = (OBJECT *)__myaes_rsrc_gaddr(R_OBJECT,i,addrout,global,client);
				while(patch_objc!=NULL)
				{
					switch(patch_objc->ob_type & 0xff)
					{
						/* type tedinfo */
					case G_BOXTEXT:
					case G_FTEXT:
					case G_FBOXTEXT:
					case G_TEXT:
						if(patch_objc->ob_spec.index) 
						{
							patch_objc->ob_spec.index = (unsigned long)patch_objc->ob_spec.index + (unsigned long)adr_rsc;
						
							/* relogement du tedinfo c'est plus logique de le reloger ici que plus loins par contre on ne peut avoir pointage sur tedinfo identique je ne pense pas que cela soit possible */
						
					/*		patch_objc->ob_spec.tedinfo->te_txtlen=0;
							if(patch_objc->ob_spec.tedinfo->te_ptext)
							{
								patch_objc->ob_spec.tedinfo->te_ptext = (unsigned long)patch_objc->ob_spec.tedinfo->te_ptext + (unsigned long)adr_rsc;
								patch_objc->ob_spec.tedinfo->te_txtlen=__myaes_strlen((char *)patch_objc->ob_spec.tedinfo->te_ptext)+1;
							}
							patch_objc->ob_spec.tedinfo->te_tmplen = 0;
							if(patch_objc->ob_spec.tedinfo->te_ptmplt) 
							{
								patch_objc->ob_spec.tedinfo->te_ptmplt = (unsigned long)patch_objc->ob_spec.tedinfo->te_ptmplt + (unsigned long)adr_rsc;
								patch_objc->ob_spec.tedinfo->te_tmplen = __myaes_strlen((char *)patch_objc->ob_spec.tedinfo->te_ptmplt)+1;
							}
							if(patch_objc->ob_spec.tedinfo->te_pvalid) patch_objc->ob_spec.tedinfo->te_pvalid = (unsigned long)patch_objc->ob_spec.tedinfo->te_pvalid + (unsigned long)adr_rsc; */
						}
					break;
					case G_BUTTON:
					case G_STRING:
					case G_TITLE:
					case G_ICON:
					case G_IMAGE:
					case G_USERDEF:
						if(patch_objc->ob_spec.index) patch_objc->ob_spec.index = (unsigned long)patch_objc->ob_spec.index + (unsigned long)adr_rsc;
					break;
					case G_CICON:		/* relogement des icones couleur */
						/* if(patch_objc->ob_spec.index)  */
							patch_objc->ob_spec.index =lp[patch_objc->ob_spec.index];
							
					break;
					default:
					break;
					}
					__myaes_rsrc_obfix_direct(patch_objc); /* passer des coordonn?es caract?res aux coordonn?es pixel */
					i++;
					
					patch_objc = (OBJECT *)__myaes_rsrc_gaddr(R_OBJECT,i,addrout,global,client);
				}
					/* relocation des structures TEDINFO */
				
				i=0;
				ted = (TEDINFO *)__myaes_rsrc_gaddr(R_TEDINFO,i,addrout,global,client);
				while(ted!=NULL)
				{
					ted->te_txtlen=0;
					if(ted->te_ptext)
					{
						ted->te_ptext = (char *)((unsigned long)ted->te_ptext + (unsigned long)adr_rsc);
						ted->te_txtlen=__myaes_strlen((char *)ted->te_ptext)+1;
					}
					ted->te_tmplen = 0;
					if(ted->te_ptmplt) 
					{
						ted->te_ptmplt = (char *)((unsigned long)ted->te_ptmplt + (unsigned long)adr_rsc);
						ted->te_tmplen = __myaes_strlen((char *)ted->te_ptmplt)+1;
					}
					if(ted->te_pvalid) ted->te_pvalid = (char *)((unsigned long)ted->te_pvalid + (unsigned long)adr_rsc);
					i++;
					ted = (TEDINFO *)__myaes_rsrc_gaddr(R_TEDINFO,i,addrout,global,client);
				}
	
					/* relocation des icones */
				i=0;
				icone = (ICONBLK *) __myaes_rsrc_gaddr(R_ICONBLK,i,addrout,global,client);
				while(icone!=NULL)
				{
					if(icone->ib_pmask) icone->ib_pmask = (INT16 *)((unsigned long) icone->ib_pmask + (unsigned long)adr_rsc);
					if(icone->ib_pdata) icone->ib_pdata = (INT16 *)((unsigned long) icone->ib_pdata + (unsigned long)adr_rsc);
					if(icone->ib_ptext) icone->ib_ptext = (char *)((unsigned long) icone->ib_ptext + (unsigned long)adr_rsc);
					i++;
					icone = (ICONBLK *) __myaes_rsrc_gaddr(R_ICONBLK,i,addrout,global,client);
				}
	
					/* relocation des bitblk */
				i=0;
				bit = (BITBLK *) __myaes_rsrc_gaddr(R_BITBLK,i,addrout,global,client);
				while(bit!=NULL)
				{
					if(bit->bi_pdata) bit->bi_pdata = (INT16 *)((unsigned long) bit->bi_pdata + (unsigned long)adr_rsc);
					i++;
					bit = (BITBLK *) __myaes_rsrc_gaddr(R_BITBLK,i,addrout,global,client);
				}



				flag=1; /* chargement r?ussi */
			}
		}
		Fclose(handle);
	}
	else 	myaes_printf2("rsrc_load %s ressource introuvable\n",rsc_name);
/*	myaes_printf2("rsrc_load %s out\n",rsc_name);
*/	
   
   return flag;
}

int myaes_rsrc_load(AESPB *pb)
{
	return __myaes_rsrc_load((char*) pb->addrin[0],pb->global,pb->addrout,get_client(pb));
}

int __myaes_rsrc_obfix_direct(OBJECT *ob)
{
	unsigned char *dumchar = (unsigned char *)&ob->ob_x;
	
	if((WORD)dumchar[0]>=128) ob->ob_x = (WORD)dumchar[0] - 256 + ((WORD)dumchar[1]) * 8;
	else ob->ob_x = (WORD)dumchar[0] + ((WORD)dumchar[1]) * 8;
	if((WORD)dumchar[2]>=128) ob->ob_y = (WORD)dumchar[2] - 256 + ((WORD)dumchar[3]) * 16;
	else ob->ob_y = (WORD)dumchar[2] + ((WORD)dumchar[3]) * 16;
	if((WORD)dumchar[4]>=128) ob->ob_width = (WORD)dumchar[4] -256 + ((WORD)dumchar[5]) * 8;
	else ob->ob_width = (WORD)dumchar[4] + ((WORD)dumchar[5]) * 8;
	if((WORD)dumchar[6]>=128) ob->ob_height = (WORD)dumchar[6]  -256 + ((WORD)dumchar[7]) * 16;
	else ob->ob_height = (WORD)dumchar[6] + ((WORD)dumchar[7]) * 16;
	

	return 1;
}

int __myaes_rsrc_obfix(OBJECT *tree, int obj)
{	
	if(tree==(OBJECT *)NULL) 
	{
		myaes_printf("Erreur rsrc_obfix tree =NULL\n");
		return 0;
	}
	return __myaes_rsrc_obfix_direct(&tree[obj]);
}

int myaes_rsrc_obfix(AESPB *pb)
{	
	return __myaes_rsrc_obfix((OBJECT *)pb->addrin[0], pb->intin[0]);
}

int myaes_rsrc_rcfix(AESPB *pb)
{
	
	return 0;
}

int myaes_rsrc_saddr(AESPB *pb)
{
	return 0;
}