Blame lib/Mrm/Mrmwread.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 HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: Mrmwread.c /main/11 1996/11/13 14:07:06 drk $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *  FACILITY:
Packit b099d7
 *
Packit b099d7
 *      UIL Resource Manager (URM):
Packit b099d7
 *
Packit b099d7
 *  ABSTRACT:
Packit b099d7
 *
Packit b099d7
 *	This module contains the widget read routines. All these routines
Packit b099d7
 *	read a widget from a hierarchy or IDB file into a resource context.
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *
Packit b099d7
 *  INCLUDE FILES
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
#include <Mrm/MrmAppl.h>
Packit b099d7
#include <Mrm/Mrm.h>
Packit b099d7
#include "MrmMsgI.h"
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *
Packit b099d7
 *  TABLE OF CONTENTS
Packit b099d7
 *
Packit b099d7
 *	UrmHGetWidget		Read indexed widget from hierarchy
Packit b099d7
 *
Packit b099d7
 *	UrmGetIndexedWidget	Read indexed widget from IDB file
Packit b099d7
 *
Packit b099d7
 *	UrmGetRIDWidget		Read RID widget from IDB file
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	UrmHGetWidget searches the database hierarchy for a public
Packit b099d7
 *	(EXPORTed) widget given its index. It returns the RGM widget record
Packit b099d7
 *	in a resource context.
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	hierarchy_id	id of an open URM database hierarchy
Packit b099d7
 *	index		index of the desired widget
Packit b099d7
 *	context_id	widget context in which to return record read in
Packit b099d7
 *	file_id_return	to return IDB file in which widget was found
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	MrmSUCCESS	operation succeeded
Packit b099d7
 *	MrmNOT_FOUND	widget not found
Packit b099d7
 *	MrmBAD_HIERARCHY	invalid URM file hierarchy
Packit b099d7
 *	MrmBAD_WIDGET_REC	invalid widget record in context
Packit b099d7
 *	Others		see UrmGetIndexedWidget
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
Cardinal 
Packit b099d7
UrmHGetWidget (MrmHierarchy		hierarchy_id,
Packit b099d7
	       String			index,
Packit b099d7
	       URMResourceContextPtr	context_id,
Packit b099d7
	       IDBFile			*file_id_return)
Packit b099d7
{
Packit b099d7
  /*
Packit b099d7
   *  Local variables
Packit b099d7
   */
Packit b099d7
  Cardinal		result ;	/* function results */
Packit b099d7
  RGMWidgetRecordPtr	widgetrec ;	/* widget record in context */
Packit b099d7
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Get the widget
Packit b099d7
   */
Packit b099d7
  result = UrmHGetIndexedResource
Packit b099d7
    (hierarchy_id, index, URMgWidget, URMtNul, context_id, file_id_return) ;
Packit b099d7
  if ( result != MrmSUCCESS ) return result ;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Validate the widget record in the context
Packit b099d7
   */
Packit b099d7
  widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
Packit b099d7
  if ( UrmWRValid(widgetrec) ) 
Packit b099d7
    return MrmSUCCESS ;
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      if ( (*file_id_return)->byte_swapped ) swapbytes(widgetrec->validation);
Packit b099d7
      if ( UrmWRValid(widgetrec) )
Packit b099d7
	{
Packit b099d7
	  Urm__SwapRGMWidgetRecord(widgetrec);
Packit b099d7
	  return MrmSUCCESS ;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
  return Urm__UT_Error("UrmHGetIndexedWidget", _MrmMMsg_0026,
Packit b099d7
		       NULL, context_id, MrmBAD_WIDGET_REC) ;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	UrmGetIndexedWidget searches a single database file for a widget
Packit b099d7
 *	given its index (i.e. it gets a public widget from a single file).
Packit b099d7
 *	It returns the RGM widget record.
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	file_id		id of an open URM database file (IDB file)
Packit b099d7
 *	index		index of the desired widget
Packit b099d7
 *	context_id	widget context in which to return record read in
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	MrmSUCCESS	operation succeeded
Packit b099d7
 *	MrmBAD_CONTEXT	invalid resource context
Packit b099d7
 *	Other		See UrmIdbGetIndexedResource
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
Cardinal 
Packit b099d7
UrmGetIndexedWidget (IDBFile			file_id,
Packit b099d7
		     String			index,
Packit b099d7
		     URMResourceContextPtr	context_id)
Packit b099d7
{
Packit b099d7
  /*
Packit b099d7
   *  Local variables
Packit b099d7
   */
Packit b099d7
  Cardinal		result ;	/* function results */
Packit b099d7
  RGMWidgetRecordPtr	widgetrec ;	/* widget record in context */
Packit b099d7
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Validate context, then attempt the read.
Packit b099d7
   */
Packit b099d7
  if ( ! UrmRCValid(context_id) )
Packit b099d7
    return Urm__UT_Error ("UrmGetIndexedWidget", _MrmMMsg_0043,
Packit b099d7
			  file_id, NULL, MrmBAD_CONTEXT) ;
Packit b099d7
Packit b099d7
  result =
Packit b099d7
    UrmIdbGetIndexedResource (file_id, index, URMgWidget, URMtNul, context_id) ;
Packit b099d7
  if ( result != MrmSUCCESS ) return result ;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Validate the widget record in the context
Packit b099d7
   */
Packit b099d7
  widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
Packit b099d7
  if ( UrmWRValid(widgetrec) ) 
Packit b099d7
    return MrmSUCCESS ;
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      if ( file_id->byte_swapped ) swapbytes(widgetrec->validation);
Packit b099d7
      if ( UrmWRValid(widgetrec) )
Packit b099d7
	{
Packit b099d7
	  Urm__SwapRGMWidgetRecord(widgetrec);
Packit b099d7
	  return MrmSUCCESS ;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
  return Urm__UT_Error("UrmGetIndexedWidget", _MrmMMsg_0026,
Packit b099d7
		       NULL, context_id, MrmBAD_WIDGET_REC) ;
Packit b099d7
}
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	UrmGetRIDWidget retrieves a widget from a single database file
Packit b099d7
 *	given its resource id as an accessor. It returns the widget record.
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	file_id		id of an open URM database file (IDB file)
Packit b099d7
 *	resource_id	resource id for widget
Packit b099d7
 *	context_id	widget context in which to return record read in
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	MrmSUCCESS	operation succeeded
Packit b099d7
 *	MrmNOT_FOUND	widget not found
Packit b099d7
 *	MrmFAILURE	operation failed, further reason not given.
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
Cardinal 
Packit b099d7
UrmGetRIDWidget (IDBFile		file_id,
Packit b099d7
		 MrmResource_id		resource_id,
Packit b099d7
		 URMResourceContextPtr	context_id)
Packit b099d7
{
Packit b099d7
  /*
Packit b099d7
   *  Local variables
Packit b099d7
   */
Packit b099d7
  Cardinal		result ;	/* function results */
Packit b099d7
  RGMWidgetRecordPtr	widgetrec ;	/* widget record in context */
Packit b099d7
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Validate context, then attempt the read.
Packit b099d7
   */
Packit b099d7
  if ( ! UrmRCValid(context_id) )
Packit b099d7
    return Urm__UT_Error ("UrmGetRIDWidget", _MrmMMsg_0043,
Packit b099d7
			  file_id, NULL, MrmBAD_CONTEXT) ;
Packit b099d7
Packit b099d7
  result = UrmIdbGetRIDResource (file_id, resource_id,
Packit b099d7
				 URMgWidget, URMgNul, context_id) ;
Packit b099d7
  if ( result != MrmSUCCESS ) return result ;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Validate the widget record in the context
Packit b099d7
   */
Packit b099d7
  widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
Packit b099d7
  if ( UrmWRValid(widgetrec) ) 
Packit b099d7
    return MrmSUCCESS ;
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      if ( file_id->byte_swapped ) swapbytes(widgetrec->validation);
Packit b099d7
      if ( UrmWRValid(widgetrec) )
Packit b099d7
	{
Packit b099d7
	  Urm__SwapRGMWidgetRecord(widgetrec);
Packit b099d7
	  return MrmSUCCESS ;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  return Urm__UT_Error("UrmGetRIDWidget", _MrmMMsg_0026,
Packit b099d7
		       NULL, context_id, MrmBAD_WIDGET_REC) ;
Packit b099d7
Packit b099d7
}
Packit b099d7