Blame lib/Mrm/MrmIswap.c

Packit b099d7
/* $XConsortium: MrmIswap.c /main/7 1996/11/13 13:58:35 drk $ */
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
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *  FACILITY:
Packit b099d7
 *
Packit b099d7
 *      UIL Resource Manager (URM): IDB Facility
Packit b099d7
 *	Byte Swap routines for IDB records
Packit b099d7
 *
Packit b099d7
 *  ABSTRACT:
Packit b099d7
 *
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
#include <stdio.h>
Packit b099d7
#include <Mrm/MrmAppl.h>
Packit b099d7
#include <Mrm/Mrm.h>
Packit b099d7
#include <Mrm/IDB.h>
Packit b099d7
#include "MrmosI.h"
Packit b099d7
#include "MrmMsgI.h"
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	Idb__BM_SwapBytes performs byte swapping on the (currently 6)
Packit b099d7
 * 	record types in an IDB file
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	buffer		Record buffer to swap in place
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
 *	MrmFAILURE	some other failure
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
     
Packit b099d7
Cardinal 
Packit b099d7
Idb__BM_SwapRecordBytes (IDBRecordBufferPtr		buffer)
Packit b099d7
{
Packit b099d7
    
Packit b099d7
  /*
Packit b099d7
   *  Local variables
Packit b099d7
   */
Packit b099d7
  Cardinal		ndx;	    /* loop index */
Packit b099d7
  IDBDummyRecordPtr	idb_record; /* pointer to the generic IDB record */
Packit b099d7
  IDBRecordHeaderPtr	idb_header; /* pointer to hdr w/type and record # */
Packit b099d7
  IDBHeaderRecordPtr	header_rec; /* pointer to record type IDBrtHeader */
Packit b099d7
  IDBHeaderHdrPtr	header_hdr; /* pointer to the header in the header */
Packit b099d7
  IDBIndexLeafRecordPtr	leaf_rec;   /* pointer to record type IDBrtIndexLeaf */
Packit b099d7
  IDBIndexNodeRecordPtr node_rec;   /* pointer to record type IDBrtIndexNode */
Packit b099d7
  IDBridMapRecordPtr	ridmap_rec; /* pointer to record type IDBrtRIDMap */
Packit b099d7
  IDBDataRecordPtr	data_rec;   /* pointer to record type IDBrtData */
Packit b099d7
  char			err_msg[300] ;
Packit b099d7
    
Packit b099d7
  if ( ! Idb__BM_Valid(buffer) )
Packit b099d7
    return Urm__UT_Error("Idb__BM_MarkActivity", _MrmMMsg_0002,
Packit b099d7
			 NULL, NULL, MrmNOT_VALID) ;
Packit b099d7
    
Packit b099d7
  /* load pointers to the record and record header */
Packit b099d7
    
Packit b099d7
  idb_record = (IDBDummyRecordPtr) buffer->IDB_record ;
Packit b099d7
  idb_header = (IDBRecordHeaderPtr)&idb_record->header ;
Packit b099d7
    
Packit b099d7
    
Packit b099d7
  /* swap the remaining record entries in IDBRecordHeader */
Packit b099d7
  swapbytes( idb_header->record_type ) ;
Packit b099d7
  swapbytes( idb_header->record_num ) ;
Packit b099d7
    
Packit b099d7
  /*
Packit b099d7
   * Swap IDB record items based on record type
Packit b099d7
   */
Packit b099d7
    
Packit b099d7
  switch ( idb_header->record_type )
Packit b099d7
    {	
Packit b099d7
    case IDBrtHeader:
Packit b099d7
      header_rec = (IDBHeaderRecordPtr)buffer->IDB_record ;
Packit b099d7
      header_hdr = (IDBHeaderHdrPtr)&header_rec->header_hdr ;
Packit b099d7
	
Packit b099d7
      /* swap the HeaderHdr first */
Packit b099d7
      swapbytes( header_hdr->index_root );
Packit b099d7
      swapbytes( header_hdr->num_indexed );
Packit b099d7
      swapbytes( header_hdr->num_RID );
Packit b099d7
      /* VAR check */
Packit b099d7
#ifdef WORD64	
Packit b099d7
      swap4bytes( header_hdr->next_RID.internal_id.map_rec ); 
Packit b099d7
      swap4bytes( header_hdr->next_RID.internal_id.res_index ); 
Packit b099d7
#else
Packit b099d7
      swap2bytes( header_hdr->next_RID.internal_id.map_rec ); 
Packit b099d7
      swap2bytes( header_hdr->next_RID.internal_id.res_index ); 
Packit b099d7
#endif
Packit b099d7
      swapbytes( header_hdr->last_record );
Packit b099d7
      swapbytes( header_hdr->last_data_record );
Packit b099d7
      for( ndx=0 ; ndx < URMgVecSize ; ndx++)
Packit b099d7
	swapbytes(header_hdr->group_counts[ndx]);
Packit b099d7
      for( ndx=0 ; ndx < IDBrtVecSize ; ndx++)
Packit b099d7
	swapbytes(header_hdr->rt_counts[ndx]);
Packit b099d7
	
Packit b099d7
      /* now swap the rest of the header */
Packit b099d7
      /* VAR check */
Packit b099d7
      for( ndx=0 ; ndx < IDBHeaderRIDMax ; ndx++)
Packit b099d7
	{
Packit b099d7
	  swap2bytes(header_rec->RID_pointers[ndx].internal_id.rec_no);
Packit b099d7
	  swap2bytes(header_rec->RID_pointers[ndx].internal_id.item_offs);
Packit b099d7
	}
Packit b099d7
      swapbytes( header_rec->num_entry );
Packit b099d7
      swapbytes( header_rec->last_entry );
Packit b099d7
      swapbytes( header_rec->free_ptr );
Packit b099d7
      swapbytes( header_rec->free_count );
Packit b099d7
      break;
Packit b099d7
	
Packit b099d7
    case IDBrtIndexLeaf:
Packit b099d7
      leaf_rec = (IDBIndexLeafRecordPtr)buffer->IDB_record ;
Packit b099d7
      swapbytes( leaf_rec->leaf_header.parent );
Packit b099d7
      swapbytes( leaf_rec->leaf_header.index_count );
Packit b099d7
      swapbytes( leaf_rec->leaf_header.heap_start );
Packit b099d7
      swapbytes( leaf_rec->leaf_header.free_bytes );
Packit b099d7
      for( ndx=0 ; ndx < leaf_rec->leaf_header.index_count ; ndx++ ) 
Packit b099d7
	{
Packit b099d7
	  swapbytes( leaf_rec->index[ndx].index_stg );	
Packit b099d7
	  swap2bytes( leaf_rec->index[ndx].data.internal_id.rec_no );	
Packit b099d7
	  swap2bytes( leaf_rec->index[ndx].data.internal_id.item_offs );	
Packit b099d7
	}
Packit b099d7
      break;
Packit b099d7
	
Packit b099d7
    case IDBrtIndexNode:
Packit b099d7
      node_rec = (IDBIndexNodeRecordPtr)buffer->IDB_record ;
Packit b099d7
      swapbytes( node_rec->node_header.parent );
Packit b099d7
      swapbytes( node_rec->node_header.index_count );
Packit b099d7
      swapbytes( node_rec->node_header.heap_start );
Packit b099d7
      swapbytes( node_rec->node_header.free_bytes );
Packit b099d7
      for( ndx=0 ; ndx < node_rec->node_header.index_count ; ndx++ ) 
Packit b099d7
	{
Packit b099d7
	  swapbytes( node_rec->index[ndx].index_stg );	
Packit b099d7
	  swap2bytes( node_rec->index[ndx].data.internal_id.rec_no );	
Packit b099d7
	  swap2bytes( node_rec->index[ndx].data.internal_id.item_offs );	
Packit b099d7
	  swapbytes( node_rec->index[ndx].LT_record );	
Packit b099d7
	  swapbytes( node_rec->index[ndx].GT_record );	
Packit b099d7
	}
Packit b099d7
      break;
Packit b099d7
	
Packit b099d7
    case IDBrtRIDMap:
Packit b099d7
      ridmap_rec = (IDBridMapRecordPtr)buffer->IDB_record ;
Packit b099d7
      ndx = 0;
Packit b099d7
      while ( (ndx < IDBridPtrVecMax) && 
Packit b099d7
	      (ridmap_rec->pointers[ndx].internal_id.rec_no != 0) )
Packit b099d7
	{
Packit b099d7
	  swap2bytes( ridmap_rec->pointers[ndx].internal_id.rec_no );	
Packit b099d7
	  swap2bytes( ridmap_rec->pointers[ndx].internal_id.item_offs );
Packit b099d7
	  ndx++;
Packit b099d7
	}
Packit b099d7
      break;
Packit b099d7
	
Packit b099d7
    case IDBrtData:
Packit b099d7
      data_rec = (IDBDataRecordPtr)buffer->IDB_record ;
Packit b099d7
      swapbytes( data_rec->data_header.num_entry );
Packit b099d7
      swapbytes( data_rec->data_header.last_entry );
Packit b099d7
      swapbytes( data_rec->data_header.free_ptr );
Packit b099d7
      swapbytes( data_rec->data_header.free_count );
Packit b099d7
      break;
Packit b099d7
	
Packit b099d7
    default:
Packit b099d7
      sprintf(err_msg, _MrmMMsg_0020, idb_header->record_num,
Packit b099d7
	      idb_header->record_type);
Packit b099d7
      return Urm__UT_Error ("Idb__BM_SwapRecordBytes",
Packit b099d7
			    err_msg, NULL, NULL, MrmFAILURE) ;
Packit b099d7
    }
Packit b099d7
  return MrmSUCCESS ;
Packit b099d7
} 
Packit b099d7

Packit b099d7
unsigned 
Packit b099d7
Urm__SwapValidation (unsigned 		validation)
Packit b099d7
{
Packit b099d7
  swapbytes(validation);
Packit b099d7
  return validation;
Packit b099d7
}
Packit b099d7

Packit b099d7
Cardinal 
Packit b099d7
Urm__SwapRGMResourceDesc (RGMResourceDescPtr	res_desc)
Packit b099d7
{
Packit b099d7
  IDBridDesc  *idb_rid_ptr;
Packit b099d7
Packit b099d7
  swapbytes( res_desc->size );
Packit b099d7
  swapbytes( res_desc->annex1 );
Packit b099d7
  if ( res_desc->type == URMrRID ) 
Packit b099d7
    {
Packit b099d7
      idb_rid_ptr = (IDBridDesc *)&(res_desc->key.id);
Packit b099d7
#ifdef WORD64
Packit b099d7
      swap4bytes( idb_rid_ptr->internal_id.map_rec );
Packit b099d7
      swap4bytes( idb_rid_ptr->internal_id.res_index );
Packit b099d7
#else
Packit b099d7
      swap2bytes( idb_rid_ptr->internal_id.map_rec );
Packit b099d7
      swap2bytes( idb_rid_ptr->internal_id.res_index );
Packit b099d7
#endif
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
  return MrmSUCCESS;
Packit b099d7
}
Packit b099d7

Packit b099d7
Cardinal 
Packit b099d7
Urm__SwapRGMCallbackDesc (RGMCallbackDescPtr	callb_desc,
Packit b099d7
			  RGMWidgetRecordPtr	widget_rec)
Packit b099d7
{
Packit b099d7
  Cardinal		ndx;	    /* inner loop index */
Packit b099d7
  RGMResourceDescPtr	res_desc;   /* resource description literal */
Packit b099d7
  char			err_msg[300];
Packit b099d7
    
Packit b099d7
  swapbytes( callb_desc->validation );
Packit b099d7
  swapbytes( callb_desc->count );
Packit b099d7
  swapbytes( callb_desc->annex );
Packit b099d7
  swapbytes( callb_desc->unres_ref_count );
Packit b099d7
  for (ndx=0 ; ndx < callb_desc->count ; ndx++)
Packit b099d7
    {
Packit b099d7
#ifdef WORD64
Packit b099d7
      swap4bytes( callb_desc->item[ndx].cb_item.routine );
Packit b099d7
      swap4bytes( callb_desc->item[ndx].cb_item.rep_type );
Packit b099d7
#else
Packit b099d7
      swap2bytes( callb_desc->item[ndx].cb_item.routine );
Packit b099d7
      swap2bytes( callb_desc->item[ndx].cb_item.rep_type );
Packit b099d7
#endif
Packit b099d7
      switch (callb_desc->item[ndx].cb_item.rep_type)
Packit b099d7
	{
Packit b099d7
	case MrmRtypeInteger:
Packit b099d7
	case MrmRtypeBoolean:
Packit b099d7
	  swapbytes( callb_desc->item[ndx].cb_item.datum.ival );
Packit b099d7
	  break;	
Packit b099d7
	case MrmRtypeSingleFloat:
Packit b099d7
	  swapbytes( callb_desc->item[ndx].cb_item.datum.ival );
Packit b099d7
	  _MrmOSIEEEFloatToHost((float *)
Packit b099d7
				&(callb_desc->item[ndx].cb_item.datum.ival));
Packit b099d7
	case MrmRtypeNull:
Packit b099d7
	  break;
Packit b099d7
	case MrmRtypeResource:
Packit b099d7
	  swapbytes( callb_desc->item[ndx].cb_item.datum.offset );
Packit b099d7
	  res_desc = (RGMResourceDesc *)
Packit b099d7
	    ((char *)widget_rec + callb_desc->item[ndx].cb_item.datum.offset);
Packit b099d7
	  Urm__SwapRGMResourceDesc( res_desc );
Packit b099d7
	  /* flag this resource as needing further byte swapping */
Packit b099d7
	  res_desc->cvt_type |= MrmResourceUnswapped;
Packit b099d7
	  break;
Packit b099d7
	default:
Packit b099d7
	  swapbytes( callb_desc->item[ndx].cb_item.datum.offset );
Packit b099d7
	  sprintf(err_msg, _MrmMMsg_0021,
Packit b099d7
		  callb_desc->item[ndx].cb_item.rep_type, ndx);
Packit b099d7
	  return Urm__UT_Error ("Urm__SwapRGMCallbackDesc",
Packit b099d7
				err_msg, NULL, NULL, MrmFAILURE) ;
Packit b099d7
	  break;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  return MrmSUCCESS;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	buffer		Record buffer to swap in place
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
 *	MrmFAILURE	some other failure
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
     
Packit b099d7
Cardinal 
Packit b099d7
Urm__SwapRGMWidgetRecord(RGMWidgetRecordPtr	widget_rec)
Packit b099d7
{
Packit b099d7
    
Packit b099d7
  /*
Packit b099d7
   *  Local variables
Packit b099d7
   */
Packit b099d7
  RGMArgListDescPtr	arg_list;   	/* pointer to widget arglist */
Packit b099d7
  RGMChildrenDescPtr	child_list; 	/* pointer to the widgets children */
Packit b099d7
  RGMResourceDescPtr	res_desc;   	/* resource description literal */
Packit b099d7
  RGMCallbackDescPtr	callb_desc; 	/* pointer to a callback decriptor */
Packit b099d7
  Cardinal		ndx;	   	/* loop index */
Packit b099d7
  IDBridDesc	  	*idb_rid_ptr;
Packit b099d7
  void			*offset;     	/* generic offset pointer */
Packit b099d7
  char			err_msg[300];
Packit b099d7
    
Packit b099d7
  /* Swap the main part of the widget record */
Packit b099d7
    
Packit b099d7
  swapbytes( widget_rec->size );
Packit b099d7
  swapbytes( widget_rec->access );
Packit b099d7
  swapbytes( widget_rec->lock );
Packit b099d7
  swapbytes( widget_rec->type );
Packit b099d7
  swapbytes( widget_rec->name_offs );
Packit b099d7
  swapbytes( widget_rec->class_offs );
Packit b099d7
  swapbytes( widget_rec->arglist_offs );
Packit b099d7
  swapbytes( widget_rec->children_offs );
Packit b099d7
  swapbytes( widget_rec->comment_offs );
Packit b099d7
  swapbytes( widget_rec->creation_offs );
Packit b099d7
  swapbytes( widget_rec->variety );
Packit b099d7
  swapbytes( widget_rec->annex );
Packit b099d7
    
Packit b099d7
  /* handle the argument list */
Packit b099d7
    
Packit b099d7
  if (widget_rec->arglist_offs > 0)
Packit b099d7
    {	
Packit b099d7
      arg_list = (RGMArgListDesc *)
Packit b099d7
	((char *)widget_rec + widget_rec->arglist_offs);
Packit b099d7
      swapbytes( arg_list->count );
Packit b099d7
      swapbytes( arg_list->extra );
Packit b099d7
      for ( ndx=0 ; ndx<arg_list->count ; ndx++ )
Packit b099d7
	{
Packit b099d7
	  swapbytes( arg_list->args[ndx].tag_code );
Packit b099d7
	  swapbytes( arg_list->args[ndx].stg_or_relcode.tag_offs );
Packit b099d7
	  swapbytes( arg_list->args[ndx].arg_val.rep_type );
Packit b099d7
	    
Packit b099d7
	  switch( arg_list->args[ndx].arg_val.rep_type )
Packit b099d7
	    {
Packit b099d7
	    case MrmRtypeInteger:
Packit b099d7
	    case MrmRtypeBoolean:
Packit b099d7
	      swapbytes( arg_list->args[ndx].arg_val.datum.ival );
Packit b099d7
	      break;
Packit b099d7
	    case MrmRtypeSingleFloat:
Packit b099d7
	      swapbytes( arg_list->args[ndx].arg_val.datum.ival );
Packit b099d7
	      _MrmOSIEEEFloatToHost((float *)
Packit b099d7
				    &(arg_list->args[ndx].arg_val.datum.ival));
Packit b099d7
	    default:
Packit b099d7
	      swapbytes( arg_list->args[ndx].arg_val.datum.offset );
Packit b099d7
	      break;
Packit b099d7
	    }
Packit b099d7
	    
Packit b099d7
	  offset = ((char *)widget_rec+
Packit b099d7
		    arg_list->args[ndx].arg_val.datum.offset);
Packit b099d7
	    
Packit b099d7
	  switch( arg_list->args[ndx].arg_val.rep_type )
Packit b099d7
	    {	
Packit b099d7
	      /* these are immediate, do nothing special */
Packit b099d7
	    case MrmRtypeInteger:
Packit b099d7
	    case MrmRtypeBoolean:
Packit b099d7
	    case MrmRtypeSingleFloat:
Packit b099d7
	      break;
Packit b099d7
	      /* these are offsets into the file, handle them specially */
Packit b099d7
	    case MrmRtypeCallback:
Packit b099d7
	      callb_desc = (RGMCallbackDesc * )offset;
Packit b099d7
	      Urm__SwapRGMCallbackDesc( callb_desc, widget_rec );
Packit b099d7
	      break;
Packit b099d7
	    case MrmRtypeResource:
Packit b099d7
	      res_desc = (RGMResourceDesc *)offset;
Packit b099d7
	      Urm__SwapRGMResourceDesc( res_desc );
Packit b099d7
	      /* flag this resource as needing further byte swapping */
Packit b099d7
	      res_desc->cvt_type |= MrmResourceUnswapped;
Packit b099d7
	      break;
Packit b099d7
	    case MrmRtypeHorizontalInteger:
Packit b099d7
	    case MrmRtypeVerticalInteger:
Packit b099d7
	    case MrmRtypeHorizontalFloat:
Packit b099d7
	    case MrmRtypeVerticalFloat:
Packit b099d7
	    case MrmRtypeChar8:
Packit b099d7
	    case MrmRtypeChar8Vector:
Packit b099d7
	    case MrmRtypeCString:
Packit b099d7
	    case MrmRtypeCStringVector:
Packit b099d7
	    case MrmRtypeFloat:
Packit b099d7
	    case MrmRtypePixmapImage:
Packit b099d7
	    case MrmRtypePixmapDDIF:
Packit b099d7
	    case MrmRtypeNull:
Packit b099d7
	    case MrmRtypeAddrName:
Packit b099d7
	    case MrmRtypeIconImage:
Packit b099d7
	    case MrmRtypeFont:
Packit b099d7
	    case MrmRtypeFontList:
Packit b099d7
	    case MrmRtypeColor:
Packit b099d7
	    case MrmRtypeColorTable:
Packit b099d7
	    case MrmRtypeAny:
Packit b099d7
	    case MrmRtypeTransTable:
Packit b099d7
	    case MrmRtypeClassRecName:
Packit b099d7
	    case MrmRtypeIntegerVector:
Packit b099d7
	    case MrmRtypeXBitmapFile:
Packit b099d7
	    case MrmRtypeCountedVector:
Packit b099d7
	    case MrmRtypeKeysym:
Packit b099d7
	    case MrmRtypeWideCharacter:
Packit b099d7
	    case MrmRtypeFontSet:
Packit b099d7
	      sprintf(err_msg,_MrmMMsg_0022,
Packit b099d7
		      arg_list->args[ndx].arg_val.rep_type);
Packit b099d7
	      return Urm__UT_Error ("Urm__SwapRGMWidgetRecord",
Packit b099d7
				    err_msg, NULL, NULL, MrmFAILURE) ;
Packit b099d7
	      break;
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
  /* handle the child list */
Packit b099d7
    
Packit b099d7
  if (widget_rec->children_offs > 0)
Packit b099d7
    {
Packit b099d7
      child_list = (RGMChildrenDesc *)
Packit b099d7
	((char *)widget_rec + widget_rec->children_offs);
Packit b099d7
      swapbytes( child_list->count );
Packit b099d7
      swapbytes( child_list->unused1 );
Packit b099d7
      swapbytes( child_list->annex1 );
Packit b099d7
      for ( ndx=0 ; ndx<child_list->count ; ndx++ )
Packit b099d7
	{	
Packit b099d7
	  swapbytes( child_list->child[ndx].annex1 );
Packit b099d7
	  if (child_list->child[ndx].type ==  URMrRID ) 
Packit b099d7
	    {
Packit b099d7
	      idb_rid_ptr = (IDBridDesc *)&(child_list->child[ndx].key.id);
Packit b099d7
#ifdef WORD64
Packit b099d7
	      swap4bytes( idb_rid_ptr->internal_id.map_rec );
Packit b099d7
	      swap4bytes( idb_rid_ptr->internal_id.res_index );
Packit b099d7
#else
Packit b099d7
	      swap2bytes( idb_rid_ptr->internal_id.map_rec );
Packit b099d7
	      swap2bytes( idb_rid_ptr->internal_id.res_index );
Packit b099d7
#endif
Packit b099d7
	    }
Packit b099d7
	  else
Packit b099d7
	    swapbytes( child_list->child[ndx].key.index_offs );
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
  /* handle the creation callback, if any */
Packit b099d7
    
Packit b099d7
  if (widget_rec->creation_offs > 0)
Packit b099d7
    {
Packit b099d7
      callb_desc = (RGMCallbackDesc * )
Packit b099d7
	((char *)widget_rec + widget_rec->creation_offs);
Packit b099d7
      Urm__SwapRGMCallbackDesc( callb_desc, widget_rec );
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
  return MrmSUCCESS ;
Packit b099d7
}