|
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 |
}
|