if(can_inline == 0){  for (dl = def->def.st.decls; dl != NULL; dl = dl->next) print_stat(1,&dl->decl); return; };
f_print (fout, "\t return TRUE;\n\t}\n\n");
emit_struct(definition *def){	decl_list *dl;	int i,j,size,flag;	decl_list *cur = NULL,*psav;	bas_type *ptr;	char *sizestr;	const char *plus;	char ptemp[256];	int can_inline;	if(inlineflag  == 0)	{		for (dl = def->def.st.decls; dl != NULL; dl = dl->next)			print_stat(1,&dl->decl);	}	else	{		for (dl = def->def.st.decls; dl != NULL; dl = dl->next)			if(dl->decl.rel == REL_VECTOR){				f_print(fout,"\t int i;\n");				break;			}		size=0;can_inline=0;		for (dl = def->def.st.decls; dl != NULL; dl = dl->next)			if((dl->decl.prefix == NULL) && ((ptr=find_type(dl->decl.type))!= NULL) && 		 ((dl->decl.rel == REL_ALIAS)||(dl->decl.rel == REL_VECTOR))){				if(dl->decl.rel == REL_ALIAS)					size+=ptr->length;				else {					can_inline=1;					break; /* can be inlined */				};			}			else {				if(size >= inlineflag){					can_inline=1;					break; /* can be inlined */				}				size=0;			}		if(size > inlineflag)			can_inline=1;		if(can_inline == 0){ /* can not inline, drop back to old mode */			for (dl = def->def.st.decls; dl != NULL; dl = dl->next)				print_stat(1,&dl->decl);			return;		};		flag=PUT;		for(j=0; j<2; j++){			if(flag == PUT)				f_print(fout,"\n\t if (xdrs->x_op == XDR_ENCODE) {\n");			else				f_print(fout,"\n \t return TRUE;\n\t} else if (xdrs->x_op == XDR_DECODE) {\n");			i=0;			size=0;			sizestr=NULL;			for (dl = def->def.st.decls; dl != NULL; dl = dl->next) { /* xxx */				/* now walk down the list and check for basic types */				if((dl->decl.prefix == NULL) && ((ptr=find_type(dl->decl.type))!= NULL) && 		 ((dl->decl.rel == REL_ALIAS)||(dl->decl.rel == REL_VECTOR))){					if(i ==0 )						cur=dl;					i++;					if(dl->decl.rel == REL_ALIAS)						size+=ptr->length;					else {						/* this is required to handle arrays */						if(sizestr == NULL)							plus = " ";						else							plus = "+";						if(ptr->length != 1)							s_print(ptemp," %s %s * %d",plus,dl->decl.array_max,ptr->length);						else							s_print(ptemp," %s %s ",plus,dl->decl.array_max);						/*now concatenate to sizestr !!!! */						if (sizestr == NULL)							sizestr=strdup(ptemp);						else{							sizestr=realloc(sizestr,strlen(sizestr)+strlen(ptemp)+1);							if(sizestr == NULL){								f_print(stderr, "Fatal error : no memory \n");								crash();							};							sizestr=strcat(sizestr,ptemp); /*build up length of array */						}					}				}				else{					if(i > 0 )						if(sizestr == NULL && size < inlineflag){							/* don't expand into inline code if size < inlineflag */							while(cur != dl){								print_stat(1,&cur->decl);								cur=cur->next;							}						}						else{							/* were already looking at a xdr_inlineable structure */							if(sizestr == NULL)								f_print(fout,"\t buf = XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);",									size);							else								if(size == 0)									f_print(fout,										"\t buf = XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);",										sizestr);								else									f_print(fout,										"\t buf = XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);",										size,sizestr);							f_print(fout,"\n\t   if (buf == NULL) {\n");							psav=cur;							while(cur != dl){								print_stat(2,&cur->decl);								cur=cur->next;							}							f_print(fout,"\n\t  }\n\t  else {\n");							cur=psav;							while(cur != dl){								emit_inline(&cur->decl,flag);								cur=cur->next;							}							f_print(fout,"\t  }\n");						}					size=0;i=0;sizestr=NULL;					print_stat(1,&dl->decl);				}			}			if(i > 0 )				if(sizestr == NULL && size < inlineflag){					/* don't expand into inline code if size < inlineflag */					while(cur != dl){						print_stat(1,&cur->decl);						cur=cur->next;					}				}				else{					/* were already looking at a xdr_inlineable structure */					if(sizestr == NULL)						f_print(fout,"\t\tbuf = XDR_INLINE(xdrs,%d * BYTES_PER_XDR_UNIT);",							size);					else						if(size == 0)							f_print(fout,								"\t\tbuf = XDR_INLINE(xdrs,%s * BYTES_PER_XDR_UNIT);",								sizestr);						else							f_print(fout,								"\t\tbuf = XDR_INLINE(xdrs,(%d + %s)* BYTES_PER_XDR_UNIT);",								size,sizestr);					f_print(fout,"\n\t\tif (buf == NULL) {\n");					psav=cur;					while(cur != NULL){						print_stat(2,&cur->decl);						cur=cur->next;					}					f_print(fout,"\n\t  }\n\t  else {\n");					cur=psav;					while(cur != dl){						emit_inline(&cur->decl,flag);						cur=cur->next;					}					f_print(fout,"\t  }\n");				}			flag=GET;		}		f_print(fout,"\t return TRUE;\n\t}\n\n");		/* now take care of XDR_FREE case */		for (dl = def->def.st.decls; dl != NULL; dl = dl->next)			print_stat(1,&dl->decl);	}}