Blame lib/Xm/ExtObject.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 */ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
 */ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: ExtObject.c /main/13 1995/10/25 20:03:50 cde-sun $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1989, 1990  DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY  */
Packit b099d7
/* (c) Copyright 1988 MICROSOFT CORPORATION */
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <string.h>
Packit b099d7
#include "BaseClassI.h"
Packit b099d7
#include "ExtObjectI.h"
Packit b099d7
#include "SyntheticI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static void ClassInitialize(void);
Packit b099d7
static void ClassPartInitPrehook(WidgetClass c);
Packit b099d7
static void ClassPartInitPosthook(WidgetClass c);
Packit b099d7
static void ClassPartInitialize(WidgetClass c);
Packit b099d7
static void InitializePrehook(Widget req, Widget new_w,
Packit b099d7
			      ArgList args, Cardinal *num_args);
Packit b099d7
static void Initialize(Widget req, Widget new_w, 
Packit b099d7
		       ArgList args, Cardinal *num_args);
Packit b099d7
static Boolean SetValuesPrehook(Widget req, Widget curr, Widget new_w,
Packit b099d7
				ArgList args, Cardinal *num_args);
Packit b099d7
static void GetValuesPrehook(Widget new_w, ArgList args, Cardinal *num_args);
Packit b099d7
static Boolean SetValues(Widget old, Widget ref, Widget new_w,
Packit b099d7
			 ArgList args, Cardinal *num_args);
Packit b099d7
static void GetValuesHook(Widget new_w, ArgList args, Cardinal *num_args);
Packit b099d7
static void Destroy(Widget wid);
Packit b099d7
static void UseParent(Widget w, int offset, XrmValue *value);
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7

Packit b099d7
/***************************************************************************
Packit b099d7
 *
Packit b099d7
 * ExtObject Resources
Packit b099d7
 *
Packit b099d7
 ***************************************************************************/
Packit b099d7
Packit b099d7
Packit b099d7
#define Offset(field)	XtOffsetOf(struct _XmExtRec, ext.field)
Packit b099d7
Packit b099d7
static XtResource extResources[] =
Packit b099d7
{
Packit b099d7
  {
Packit b099d7
    XmNlogicalParent, XmCLogicalParent, XmRWidget, 
Packit b099d7
    sizeof (Widget), Offset (logicalParent),
Packit b099d7
    XmRCallProc, (XtPointer)UseParent
Packit b099d7
  },
Packit b099d7
  {
Packit b099d7
    XmNextensionType, XmCExtensionType, XmRExtensionType, 
Packit b099d7
    sizeof (unsigned char), Offset (extensionType),
Packit b099d7
    XmRImmediate, (XtPointer)XmDEFAULT_EXTENSION
Packit b099d7
  }
Packit b099d7
};
Packit b099d7
#undef Offset
Packit b099d7

Packit b099d7
#define XmNUM_ELEMENTS	4
Packit b099d7
#define XmNUM_BYTES	255
Packit b099d7
Packit b099d7
typedef struct _XmExtCache {
Packit b099d7
  char    data[XmNUM_BYTES];
Packit b099d7
  Boolean inuse;
Packit b099d7
} XmExtCache;
Packit b099d7
Packit b099d7
typedef union {
Packit b099d7
  XmExtCache	cache;
Packit b099d7
  double	force_alignment;
Packit b099d7
} Aligned_XmExtCache;
Packit b099d7
Packit b099d7
static Aligned_XmExtCache extarray[XmNUM_ELEMENTS];
Packit b099d7
Packit b099d7
Packit b099d7
static XmBaseClassExtRec myBaseClassExtRec = {
Packit b099d7
  NULL,				/* Next extension         */
Packit b099d7
  NULLQUARK,			/* record type XmQmotif   */
Packit b099d7
  XmBaseClassExtVersion,	/* version                */
Packit b099d7
  sizeof(XmBaseClassExtRec),	/* size                   */
Packit b099d7
  InitializePrehook,		/* initialize prehook     */
Packit b099d7
  SetValuesPrehook,		/* set_values prehook     */
Packit b099d7
  NULL,				/* initialize posthook    */
Packit b099d7
  NULL,				/* set_values posthook    */
Packit b099d7
  NULL,				/* secondary class        */
Packit b099d7
  NULL,				/* creation proc          */
Packit b099d7
  NULL,				/* getSecRes data         */
Packit b099d7
  { 0 },			/* fast subclass          */
Packit b099d7
  GetValuesPrehook,		/* get_values prehook     */
Packit b099d7
  NULL,				/* get_values posthook    */
Packit b099d7
  ClassPartInitPrehook,		/* class_part_prehook     */
Packit b099d7
  ClassPartInitPosthook,	/* class_part_posthook    */
Packit b099d7
  NULL,				/* compiled_ext_resources */   
Packit b099d7
  NULL,				/* ext_resources       	  */   
Packit b099d7
  0,				/* resource_count     	  */   
Packit b099d7
  FALSE				/* use_sub_resources	  */
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmextclassrec)
Packit b099d7
XmExtClassRec xmExtClassRec = {
Packit b099d7
  {	
Packit b099d7
    (WidgetClass) &objectClassRec,/* superclass 	 */   
Packit b099d7
    "dynamic",			  /* class_name 	 */   
Packit b099d7
    sizeof(XmExtRec),	 	  /* size 		 */   
Packit b099d7
    ClassInitialize, 		  /* Class Initializer 	 */   
Packit b099d7
    ClassPartInitialize,	  /* class_part_init 	 */ 
Packit b099d7
    FALSE,			  /* Class init'ed ? 	 */   
Packit b099d7
    Initialize,			  /* initialize          */   
Packit b099d7
    NULL,			  /* initialize_notify   */ 
Packit b099d7
    NULL,			  /* realize             */   
Packit b099d7
    NULL,			  /* actions             */   
Packit b099d7
    0,				  /* num_actions         */   
Packit b099d7
    extResources,		  /* resources           */   
Packit b099d7
    XtNumber(extResources),	  /* resource_count      */   
Packit b099d7
    NULLQUARK, 			  /* xrm_class           */   
Packit b099d7
    FALSE,			  /* compress_motion     */   
Packit b099d7
    FALSE,			  /* compress_exposure   */   
Packit b099d7
    FALSE,			  /* compress_enterleave */   
Packit b099d7
    FALSE,			  /* visible_interest    */   
Packit b099d7
    Destroy,			  /* destroy             */   
Packit b099d7
    NULL,			  /* resize              */   
Packit b099d7
    NULL,			  /* expose              */   
Packit b099d7
    SetValues,	 		  /* set_values          */   
Packit b099d7
    NULL,			  /* set_values_hook     */ 
Packit b099d7
    NULL,			  /* set_values_almost   */ 
Packit b099d7
    GetValuesHook,		  /* get_values_hook     */ 
Packit b099d7
    NULL,			  /* accept_focus        */   
Packit b099d7
    XtVersion, 			  /* intrinsics version  */   
Packit b099d7
    NULL,			  /* callback offsets    */   
Packit b099d7
    NULL,			  /* tm_table            */   
Packit b099d7
    NULL,			  /* query_geometry      */ 
Packit b099d7
    NULL,			  /* display_accelerator */ 
Packit b099d7
    (XtPointer)&myBaseClassExtRec /* extension           */ 
Packit b099d7
  },	
Packit b099d7
  {
Packit b099d7
    NULL,			  /* synthetic resources */
Packit b099d7
    0				  /* num syn resources	 */
Packit b099d7
  }
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmextobjectclass) 
Packit b099d7
WidgetClass xmExtObjectClass = (WidgetClass) (&xmExtClassRec);
Packit b099d7

Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
UseParent(Widget w,
Packit b099d7
	  int offset,		/* unused */
Packit b099d7
	  XrmValue *value)
Packit b099d7
{
Packit b099d7
  value->addr = (XPointer) &(w->core.parent);
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassInitialize
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ClassInitialize(void)
Packit b099d7
{
Packit b099d7
  myBaseClassExtRec.record_type = XmQmotif;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassPartInitPrehook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ClassPartInitPrehook(WidgetClass c)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass wc = (XmExtObjectClass) c;
Packit b099d7
  
Packit b099d7
  if ((WidgetClass)wc != xmExtObjectClass)
Packit b099d7
    {
Packit b099d7
      XmExtObjectClass sc = (XmExtObjectClass) c->core_class.superclass;
Packit b099d7
      XmBaseClassExt *scePtr = _XmGetBaseClassExtPtr(sc, XmQmotif);
Packit b099d7
Packit b099d7
      /*
Packit b099d7
       * If our superclass uses subresources, then we need to
Packit b099d7
       * temporarily fill it's core resource fields so that objectClass
Packit b099d7
       * classPartInit will be able to find them for merging.  We
Packit b099d7
       * assume that we only need to set things up for the
Packit b099d7
       * superclass and not any deeper ancestors.
Packit b099d7
       */
Packit b099d7
      if ((*scePtr)->use_sub_resources)
Packit b099d7
	{
Packit b099d7
	  sc->object_class.resources = (*scePtr)->compiled_ext_resources;
Packit b099d7
	  sc->object_class.num_resources = (*scePtr)->num_ext_resources;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassPartInitPosthook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ClassPartInitPosthook(WidgetClass c)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass wc = (XmExtObjectClass) c;
Packit b099d7
  XmBaseClassExt  *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
  
Packit b099d7
  if ((*wcePtr) && (*wcePtr)->use_sub_resources)
Packit b099d7
    {
Packit b099d7
      /*
Packit b099d7
       * Put our compiled resources back and zero out oject class so
Packit b099d7
       * it's invisible to object class create processing.
Packit b099d7
       */
Packit b099d7
      (*wcePtr)->compiled_ext_resources = wc->object_class.resources;
Packit b099d7
      (*wcePtr)->num_ext_resources = wc->object_class.num_resources;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassPartInitialize
Packit b099d7
 *    Set up the inheritance mechanism for the routines exported by
Packit b099d7
 *    vendorShells class part.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ClassPartInitialize(WidgetClass c)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass wc = (XmExtObjectClass) c;
Packit b099d7
  
Packit b099d7
  if (wc == (XmExtObjectClass)xmExtObjectClass)
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  _XmBuildExtResources(c);
Packit b099d7
}
Packit b099d7

Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
InitializePrehook(Widget req,	/* unused */
Packit b099d7
		  Widget new_w,
Packit b099d7
		  ArgList args,
Packit b099d7
		  Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
Packit b099d7
  XmBaseClassExt  *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
Packit b099d7
  
Packit b099d7
  if ((*wcePtr)->use_sub_resources)
Packit b099d7
    {
Packit b099d7
      /*
Packit b099d7
       * Get a uncompiled resource list to use with XtGetSubresources.
Packit b099d7
       * We can't do this in ClassPartInitPosthook because Xt doesn't
Packit b099d7
       * set class_inited at the right place and thereby mishandles
Packit b099d7
       * the XtGetResourceList call.
Packit b099d7
       */
Packit b099d7
      _XmProcessLock();
Packit b099d7
      if ((*wcePtr)->ext_resources == NULL)
Packit b099d7
	{
Packit b099d7
	  ec->object_class.resources = (*wcePtr)->compiled_ext_resources;
Packit b099d7
	  ec->object_class.num_resources = (*wcePtr)->num_ext_resources;
Packit b099d7
	  
Packit b099d7
	  XtGetResourceList((WidgetClass) ec,
Packit b099d7
			    &((*wcePtr)->ext_resources),
Packit b099d7
			    &((*wcePtr)->num_ext_resources));
Packit b099d7
	}
Packit b099d7
Packit b099d7
      XtGetSubresources(XtParent(new_w),
Packit b099d7
			(XtPointer)new_w,
Packit b099d7
			NULL, NULL,
Packit b099d7
			(*wcePtr)->ext_resources,
Packit b099d7
			(*wcePtr)->num_ext_resources,
Packit b099d7
			args, *num_args);
Packit b099d7
      _XmProcessUnlock();
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
static void 
Packit b099d7
Initialize(Widget req,
Packit b099d7
	   Widget new_w,
Packit b099d7
	   ArgList args,
Packit b099d7
	   Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObject      ne = (XmExtObject) new_w;
Packit b099d7
  XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
Packit b099d7
  Widget           resParent = ne->ext.logicalParent;
Packit b099d7
  XmWidgetExtData  extData;
Packit b099d7
  XmBaseClassExt  *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
Packit b099d7
  
Packit b099d7
  if (!(*wcePtr)->use_sub_resources)
Packit b099d7
    {
Packit b099d7
      if (resParent)
Packit b099d7
	{
Packit b099d7
	  extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
Packit b099d7
	  _XmPushWidgetExtData(resParent, extData, ne->ext.extensionType);
Packit b099d7
	  
Packit b099d7
	  extData->widget = new_w;
Packit b099d7
	  _XmProcessLock();
Packit b099d7
	  extData->reqWidget = (Widget)
Packit b099d7
	    _XmExtObjAlloc(XtClass(new_w)->core_class.widget_size);
Packit b099d7
	  memcpy((char *)extData->reqWidget, (char *)req,
Packit b099d7
		 XtClass(new_w)->core_class.widget_size);
Packit b099d7
	  _XmProcessUnlock();
Packit b099d7
	  
Packit b099d7
	  /*  Convert the fields from unit values to pixel values  */
Packit b099d7
	  _XmExtImportArgs(new_w, args, num_args);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValuesPrehook(Widget req,	/* unused */
Packit b099d7
		 Widget curr,	/* unused */
Packit b099d7
		 Widget new_w,
Packit b099d7
		 ArgList args,
Packit b099d7
		 Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
Packit b099d7
  XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
Packit b099d7
  
Packit b099d7
  if ((*wcePtr)->use_sub_resources)
Packit b099d7
    {
Packit b099d7
      _XmProcessLock();
Packit b099d7
      XtSetSubvalues((XtPointer)new_w,
Packit b099d7
		     (*wcePtr)->ext_resources,
Packit b099d7
		     (*wcePtr)->num_ext_resources,
Packit b099d7
		     args, *num_args);
Packit b099d7
      _XmProcessUnlock();
Packit b099d7
    }
Packit b099d7
Packit b099d7
  return False;
Packit b099d7
}
Packit b099d7

Packit b099d7
static void 
Packit b099d7
GetValuesPrehook(Widget new_w,
Packit b099d7
		 ArgList args,
Packit b099d7
		 Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
Packit b099d7
  XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
Packit b099d7
  
Packit b099d7
  if ((*wcePtr)->use_sub_resources)
Packit b099d7
    {
Packit b099d7
      _XmProcessLock();
Packit b099d7
      XtGetSubvalues((XtPointer)new_w,
Packit b099d7
		     (*wcePtr)->ext_resources,
Packit b099d7
		     (*wcePtr)->num_ext_resources,
Packit b099d7
		     args, *num_args);
Packit b099d7
      _XmProcessUnlock();
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValues
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValues(Widget old,
Packit b099d7
	  Widget ref,
Packit b099d7
	  Widget new_w,
Packit b099d7
	  ArgList args,
Packit b099d7
	  Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObject	  ne = (XmExtObject) new_w;
Packit b099d7
  Widget	  resParent = ne->ext.logicalParent;
Packit b099d7
  XmWidgetExtData ext = _XmGetWidgetExtData(resParent, ne->ext.extensionType);
Packit b099d7
  Cardinal	  extSize;
Packit b099d7
Packit b099d7
    if(ext == NULL)
Packit b099d7
    {
Packit b099d7
#ifdef DEBUG
Packit b099d7
        XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif    
Packit b099d7
        return FALSE;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if (resParent)
Packit b099d7
    {
Packit b099d7
      _XmProcessLock();
Packit b099d7
      extSize = XtClass(new_w)->core_class.widget_size;
Packit b099d7
      
Packit b099d7
      ext->widget = new_w;
Packit b099d7
      
Packit b099d7
      ext->oldWidget = (Widget) _XmExtObjAlloc(extSize);
Packit b099d7
      memcpy((char *)ext->oldWidget, (char *)old, extSize); 
Packit b099d7
      
Packit b099d7
      ext->reqWidget = (Widget) _XmExtObjAlloc(extSize);
Packit b099d7
      memcpy((char *)ext->reqWidget, (char *)ref, extSize); 
Packit b099d7
      _XmProcessUnlock();
Packit b099d7
Packit b099d7
      /* Convert the necessary fields from unit values to pixel values. */
Packit b099d7
      _XmExtImportArgs(new_w, args, num_args);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  return FALSE;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetValuesHook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
GetValuesHook(Widget new_w,
Packit b099d7
	      ArgList args,
Packit b099d7
	      Cardinal *num_args)
Packit b099d7
{
Packit b099d7
  XmExtObject     ne = (XmExtObject) new_w;
Packit b099d7
  Widget          resParent = ne->ext.logicalParent;
Packit b099d7
  XmWidgetExtData ext;
Packit b099d7
  
Packit b099d7
  if (resParent)
Packit b099d7
    {
Packit b099d7
      ext = _XmGetWidgetExtData(resParent, ne->ext.extensionType);
Packit b099d7
    if(ext == NULL)
Packit b099d7
    {
Packit b099d7
#ifdef DEBUG
Packit b099d7
        XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif    
Packit b099d7
        return;
Packit b099d7
    }
Packit b099d7
      
Packit b099d7
      ext->widget = new_w;
Packit b099d7
      
Packit b099d7
      _XmExtGetValuesHook(new_w, args, num_args);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Destroy
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
Destroy(Widget wid)
Packit b099d7
{
Packit b099d7
  XmExtObject extObj = (XmExtObject) wid;
Packit b099d7
  Widget      resParent = extObj->ext.logicalParent;
Packit b099d7
  
Packit b099d7
  if (resParent)
Packit b099d7
    {
Packit b099d7
      XmWidgetExtData extData;
Packit b099d7
      
Packit b099d7
      _XmPopWidgetExtData(resParent, &extData, extObj->ext.extensionType);
Packit b099d7
      
Packit b099d7
      XtFree((char *) extData);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
char * 
Packit b099d7
_XmExtObjAlloc(int size)
Packit b099d7
{
Packit b099d7
  register int i;
Packit b099d7
  
Packit b099d7
  if (size <= XmNUM_BYTES)
Packit b099d7
    {
Packit b099d7
      for (i = 0; i < XmNUM_ELEMENTS; i++)
Packit b099d7
	if (! extarray[i].cache.inuse)
Packit b099d7
	  {
Packit b099d7
	    extarray[i].cache.inuse = TRUE;
Packit b099d7
	    return extarray[i].cache.data;
Packit b099d7
	  }
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  return XtMalloc(size);
Packit b099d7
}
Packit b099d7

Packit b099d7
void 
Packit b099d7
_XmExtObjFree(XtPointer element)
Packit b099d7
{
Packit b099d7
  register int i;
Packit b099d7
  
Packit b099d7
  for (i = 0; i < XmNUM_ELEMENTS; i++)
Packit b099d7
    if (extarray[i].cache.data == (char*)element)
Packit b099d7
      {
Packit b099d7
	extarray[i].cache.inuse = FALSE;
Packit b099d7
	return;
Packit b099d7
      }
Packit b099d7
  
Packit b099d7
  XtFree((char *) element);
Packit b099d7
}
Packit b099d7

Packit b099d7
/**********************************************************************
Packit b099d7
 *
Packit b099d7
 *  _XmBuildExtResources
Packit b099d7
 *	Build up the ext's synthetic 
Packit b099d7
 *	resource processing list by combining the super classes with 
Packit b099d7
 *	this class.
Packit b099d7
 *
Packit b099d7
 **********************************************************************/
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmBuildExtResources(WidgetClass c)
Packit b099d7
{
Packit b099d7
  XmExtObjectClass wc = (XmExtObjectClass) c;
Packit b099d7
  XmExtObjectClass sc;
Packit b099d7
Packit b099d7
  _XmProcessLock();
Packit b099d7
  _XmInitializeSyntheticResources(wc->ext_class.syn_resources,
Packit b099d7
				  wc->ext_class.num_syn_resources);
Packit b099d7
  
Packit b099d7
  if (wc != (XmExtObjectClass) xmExtObjectClass)
Packit b099d7
    {
Packit b099d7
      sc = (XmExtObjectClass) wc->object_class.superclass;
Packit b099d7
      
Packit b099d7
      _XmBuildResources (&(wc->ext_class.syn_resources),
Packit b099d7
			 &(wc->ext_class.num_syn_resources),
Packit b099d7
			 sc->ext_class.syn_resources,
Packit b099d7
			 sc->ext_class.num_syn_resources);
Packit b099d7
    }
Packit b099d7
  _XmProcessUnlock();
Packit b099d7
}