|
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: Mrmlread.c /main/16 1996/11/13 14:02:28 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Hewlett-Packard Company *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 International Business Machines Corp. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Sun Microsystems, Inc. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Novell, Inc. *
|
|
Packit |
b099d7 |
* (c) Copyright 1989, 1990, 1996 Digital Equipment Corporation. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 FUJITSU LIMITED. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Hitachi. *
|
|
Packit |
b099d7 |
*/
|
|
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 literal read routines. All these routines
|
|
Packit |
b099d7 |
* read a literal 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 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <Mrm/MrmAppl.h>
|
|
Packit |
b099d7 |
#include <Mrm/Mrm.h>
|
|
Packit |
b099d7 |
#include "MrmosI.h"
|
|
Packit |
b099d7 |
#include "MrmMsgI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* TABLE OF CONTENTS
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmGetIndexedLiteral Read indexed literal from IDB file
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmGetRIDLiteral Read RID literal from IDB file
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmHGetIndexedLiteral Read indexed literal from hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine is a service routine for the various XmFetch...Literal
|
|
Packit |
b099d7 |
* routine. It fetches a literal into a context. It also fetches any
|
|
Packit |
b099d7 |
* other literals which are referenced.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id id of an open hierarchy containing the literal
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* context_id context in which to return literal. Literal will
|
|
Packit |
b099d7 |
* be fixed up.
|
|
Packit |
b099d7 |
* ctxlist list of other contexts created (if needed)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__FetchLiteral (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
URMPointerListPtr *ctxlist)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
IDBFile file_id = NULL; /* file containing literal */
|
|
Packit |
b099d7 |
long val; /* literal value */
|
|
Packit |
b099d7 |
MrmType type; /* literal type */
|
|
Packit |
b099d7 |
char err_msg[300]; /* for error messages */
|
|
Packit |
b099d7 |
Boolean swap_needed = FALSE ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* read the literal into the context
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = Urm__HGetIndexedLiteral (hierarchy_id, index, context_id, &file_id);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0042, index);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__FetchLiteral", err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
swap_needed = UrmRCByteSwap(context_id) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the literal type and value, and do any fixups which are required.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
val = (long) UrmRCBuffer (context_id);
|
|
Packit |
b099d7 |
type = UrmRCType (context_id);
|
|
Packit |
b099d7 |
switch ( type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmRtypeIconImage:
|
|
Packit |
b099d7 |
UrmPlistInit (10, ctxlist);
|
|
Packit |
b099d7 |
result = Urm__CW_LoadIconImage ((RGMIconImagePtr)val, (XtPointer)val,
|
|
Packit |
b099d7 |
hierarchy_id, file_id, *ctxlist);
|
|
Packit |
b099d7 |
/* LoadIconImage checks validations and handle swapping */
|
|
Packit |
b099d7 |
swap_needed = FALSE ;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmRtypeFontList:
|
|
Packit |
b099d7 |
/* Check for old style font list, allocate new value if necessary. */
|
|
Packit |
b099d7 |
if (strcmp(file_id->db_version, URM1_1version) <= 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int count = ((OldRGMFontListPtr)val)->count;
|
|
Packit |
b099d7 |
RGMFontListPtr fontlist = (RGMFontListPtr)
|
|
Packit |
b099d7 |
XtMalloc(sizeof(RGMFontList) + (sizeof(RGMFontItem) * (count - 1)));
|
|
Packit |
b099d7 |
Urm__CW_FixupValue ((long)fontlist, type, (XtPointer)val, file_id,
|
|
Packit |
b099d7 |
&swap_needed);
|
|
Packit |
b099d7 |
XtFree((char *)val);
|
|
Packit |
b099d7 |
UrmRCBuffer(context_id) = (char *)fontlist;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
Urm__CW_FixupValue (val, type, (XtPointer)val, file_id, &swap_needed);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmRtypeInteger:
|
|
Packit |
b099d7 |
case MrmRtypeBoolean:
|
|
Packit |
b099d7 |
if ( swap_needed )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
swapbytes( (*(int *)UrmRCBuffer (context_id)) );
|
|
Packit |
b099d7 |
swap_needed = FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmRtypeSingleFloat:
|
|
Packit |
b099d7 |
if ( swap_needed )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
swapbytes( (*(int *)UrmRCBuffer (context_id)) );
|
|
Packit |
b099d7 |
swap_needed = FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_MrmOSIEEEFloatToHost( (float *)UrmRCBuffer (context_id));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmRtypeFloat:
|
|
Packit |
b099d7 |
if ( swap_needed )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
swapdouble( (*(double *)UrmRCBuffer (context_id)) );
|
|
Packit |
b099d7 |
swap_needed = FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_MrmOSIEEEDoubleToHost( (double *)UrmRCBuffer (context_id));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
Urm__CW_FixupValue (val, type, (XtPointer)val, file_id, &swap_needed);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmRCSetByteSwap(context_id, swap_needed);
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine reads and returns the value of a literal (named value)
|
|
Packit |
b099d7 |
* stored as a public resource in a single UID file. It returns a
|
|
Packit |
b099d7 |
* pointer to value of the literal, fixed up and converted for
|
|
Packit |
b099d7 |
* use as a toolkit argument. The return is always a pointer -- an
|
|
Packit |
b099d7 |
* integer is returned as a pointer to an integer, and a string is
|
|
Packit |
b099d7 |
* returned as a pointer to a string. The caller is responsible for
|
|
Packit |
b099d7 |
* freeing the literal's storage, which was acquired with XtMalloc.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine should not be used for fetching icon or color literals,
|
|
Packit |
b099d7 |
* as more information is required for converting them. If fetched,
|
|
Packit |
b099d7 |
* an error is returned.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id id of an open hierarchy containing the literal
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* value_return to return pointer to literal value
|
|
Packit |
b099d7 |
* type_return will be set to the literal data type, from RGMrType...
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS - literal found and returned
|
|
Packit |
b099d7 |
* MrmWRONG_TYPE - unsupported literal type encountered
|
|
Packit |
b099d7 |
* MrmNOT_FOUND - literal not found
|
|
Packit |
b099d7 |
* MrmFAILURE - file system error
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchLiteral (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
XtPointer *value_return,
|
|
Packit |
b099d7 |
MrmCode *type_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id; /* for the literal */
|
|
Packit |
b099d7 |
URMPointerListPtr ctxlist = NULL; /* save added contexts */
|
|
Packit |
b099d7 |
Cardinal ndx; /* loop index */
|
|
Packit |
b099d7 |
int vec_size = 0;
|
|
Packit |
b099d7 |
int vec_count = 0;
|
|
Packit |
b099d7 |
_MrmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Read the literal, discard the context, and return.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL, 0, &context_id);
|
|
Packit |
b099d7 |
result = Urm__FetchLiteral (hierarchy_id, index, context_id, &ctxlist);
|
|
Packit |
b099d7 |
if ( result == MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value_return = (XtPointer) UrmRCBuffer (context_id);
|
|
Packit |
b099d7 |
(*type_return) = (MrmCode) UrmRCType (context_id);
|
|
Packit |
b099d7 |
vec_size = UrmRCSize (context_id);
|
|
Packit |
b099d7 |
switch ( *type_return )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmRtypeIconImage:
|
|
Packit |
b099d7 |
case MrmRtypeColor:
|
|
Packit |
b099d7 |
case MrmRtypeColorTable:
|
|
Packit |
b099d7 |
case MrmRtypeXBitmapFile:
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr) UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return MrmWRONG_TYPE;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeChar8Vector:
|
|
Packit |
b099d7 |
case MrmRtypeCStringVector:
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** Do necessary conversions (Fixups were done by Urm__FetchLiteral)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vec_size -= (sizeof ( RGMTextVector ) - sizeof ( RGMTextEntry ));
|
|
Packit |
b099d7 |
vec_count = ((RGMTextVectorPtr)*value_return)->count;
|
|
Packit |
b099d7 |
result = Urm__CW_ConvertValue (NULL, (long*)value_return,
|
|
Packit |
b099d7 |
(MrmType)*type_return, 0, display,
|
|
Packit |
b099d7 |
hierarchy_id, NULL) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return MrmFAILURE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
Urm__CW_SafeCopyValue ((long *)value_return, (MrmType)*type_return,
|
|
Packit |
b099d7 |
NULL, vec_count, vec_size);
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeIntegerVector:
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** Do necessary conversions (Fixups were done by Urm__FetchLiteral)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vec_count = ((RGMIntegerVectorPtr)*value_return)->count;
|
|
Packit |
b099d7 |
vec_size = vec_count * sizeof ( int * );
|
|
Packit |
b099d7 |
result = Urm__CW_ConvertValue (NULL, (long*)value_return,
|
|
Packit |
b099d7 |
(MrmType)*type_return, 0, display,
|
|
Packit |
b099d7 |
hierarchy_id, NULL) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return MrmFAILURE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
Urm__CW_SafeCopyValue ((long *)value_return, (MrmType)*type_return,
|
|
Packit |
b099d7 |
NULL, vec_count, vec_size);
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default :
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** Do necessary conversions (Fixups were done by Urm__FetchLiteral)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = Urm__CW_ConvertValue (NULL, (long*)value_return,
|
|
Packit |
b099d7 |
(MrmType)*type_return, 0, display,
|
|
Packit |
b099d7 |
hierarchy_id, NULL) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ( *type_return )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Free the context id AND the buffer in these cases
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
case MrmRtypeTransTable:
|
|
Packit |
b099d7 |
case MrmRtypeClassRecName:
|
|
Packit |
b099d7 |
case MrmRtypeKeysym:
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Only free the context id in all other cases
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
(*(context_id->free_func)) (context_id) ;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return MrmFAILURE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(context_id->free_func)) (context_id) ;
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine fetches an icon literal from a hierarchy. It converts
|
|
Packit |
b099d7 |
* the icon to an X pixmap.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id id of an open hierarchy containing the literal
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* screen screen to use for pixmap
|
|
Packit |
b099d7 |
* display display to use for pixmap
|
|
Packit |
b099d7 |
* fgpix foreground color for pixmap
|
|
Packit |
b099d7 |
* bgpix background color for pixmap
|
|
Packit |
b099d7 |
* pixmap_return to return resulting X pixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchIconLiteral (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixel fgpix,
|
|
Packit |
b099d7 |
Pixel bgpix,
|
|
Packit |
b099d7 |
Pixmap *pixmap_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id; /* for the literal */
|
|
Packit |
b099d7 |
URMPointerListPtr ctxlist = NULL; /* save added contexts */
|
|
Packit |
b099d7 |
Cardinal ndx; /* loop index */
|
|
Packit |
b099d7 |
MrmType type;
|
|
Packit |
b099d7 |
_MrmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Read the literal, and deal with errors
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL, 0, &context_id);
|
|
Packit |
b099d7 |
result = Urm__FetchLiteral (hierarchy_id, index, context_id, &ctxlist);
|
|
Packit |
b099d7 |
if ( result == MrmSUCCESS ) {
|
|
Packit |
b099d7 |
type = UrmRCType(context_id);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr)UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Convert to X pixmap, and free resources
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch (type) {
|
|
Packit |
b099d7 |
case MrmRtypeIconImage:
|
|
Packit |
b099d7 |
result = UrmCreatePixmap
|
|
Packit |
b099d7 |
((RGMIconImagePtr)UrmRCBuffer(context_id), screen, display,
|
|
Packit |
b099d7 |
fgpix, bgpix, pixmap_return, (Widget)NULL);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmRtypeXBitmapFile:
|
|
Packit |
b099d7 |
result = Urm__CW_ReadBitmapFile (UrmRCBuffer(context_id), screen,
|
|
Packit |
b099d7 |
fgpix, bgpix, pixmap_return, (Widget)NULL);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
result = MrmWRONG_TYPE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr)UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine fetches an icon literal from a hierarchy. It converts
|
|
Packit |
b099d7 |
* the icon to an X pixmap OF DEPTH 1.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id id of an open hierarchy containing the literal
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* screen screen to use for pixmap
|
|
Packit |
b099d7 |
* display display to use for pixmap
|
|
Packit |
b099d7 |
* pixmap_return to return resulting X pixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchBitmapLiteral (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixmap *pixmap_return,
|
|
Packit |
b099d7 |
Dimension *width,
|
|
Packit |
b099d7 |
Dimension *height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id; /* for the literal */
|
|
Packit |
b099d7 |
URMPointerListPtr ctxlist = NULL; /* save added contexts */
|
|
Packit |
b099d7 |
Cardinal ndx; /* loop index */
|
|
Packit |
b099d7 |
MrmType type;
|
|
Packit |
b099d7 |
RGMIconImagePtr icon;
|
|
Packit |
b099d7 |
_MrmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Read the literal, and deal with errors
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL, 0, &context_id);
|
|
Packit |
b099d7 |
result = Urm__FetchLiteral (hierarchy_id, index, context_id, &ctxlist);
|
|
Packit |
b099d7 |
if ( result == MrmSUCCESS ) {
|
|
Packit |
b099d7 |
type = UrmRCType(context_id);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr)UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Convert to X pixmap, and free resources
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch (type) {
|
|
Packit |
b099d7 |
case MrmRtypeIconImage:
|
|
Packit |
b099d7 |
icon = (RGMIconImagePtr)UrmRCBuffer(context_id);
|
|
Packit |
b099d7 |
result = UrmCreateBitmap
|
|
Packit |
b099d7 |
(icon, screen, display,
|
|
Packit |
b099d7 |
pixmap_return);
|
|
Packit |
b099d7 |
*width = icon->width;
|
|
Packit |
b099d7 |
*height = icon->height;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
>>> Andy research here if we can do this for a depth of 1
|
|
Packit |
b099d7 |
case MrmRtypeXBitmapFile:
|
|
Packit |
b099d7 |
result = Urm__CW_ReadBitmapFile (UrmRCBuffer(context_id), screen,
|
|
Packit |
b099d7 |
fgpix, bgpix, pixmap_return);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
result = MrmWRONG_TYPE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr)UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine fetches a named color literal from a UID file, and
|
|
Packit |
b099d7 |
* converts it to a pixel value.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id id of an open hierarchy containing the literal
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* display display to use for pixmap
|
|
Packit |
b099d7 |
* cmap color map ID. If NULL, the default color map is used
|
|
Packit |
b099d7 |
* pixel_return to return the pixel value for the color
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchColorLiteral (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Colormap cmap,
|
|
Packit |
b099d7 |
Pixel *pixel_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id; /* for the literal */
|
|
Packit |
b099d7 |
URMPointerListPtr ctxlist = NULL; /* save added contexts */
|
|
Packit |
b099d7 |
Cardinal ndx; /* loop index */
|
|
Packit |
b099d7 |
RGMColorDescPtr colorptr;
|
|
Packit |
b099d7 |
char err_msg[300] ;
|
|
Packit |
b099d7 |
_MrmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Read the literal, and deal with errors.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL, 0, &context_id);
|
|
Packit |
b099d7 |
result = Urm__FetchLiteral (hierarchy_id, index, context_id, &ctxlist);
|
|
Packit |
b099d7 |
if ( result == MrmSUCCESS )
|
|
Packit |
b099d7 |
if (UrmRCType(context_id) != MrmRtypeColor)
|
|
Packit |
b099d7 |
result = MrmWRONG_TYPE;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( ctxlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
UrmFreeResourceContext
|
|
Packit |
b099d7 |
((URMResourceContextPtr)UrmPlistPtrN(ctxlist,ndx)) ;
|
|
Packit |
b099d7 |
UrmPlistFree (ctxlist) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Convert to X named color, and free resources
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
colorptr = (RGMColorDescPtr) UrmRCBuffer(context_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (colorptr->desc_type)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMColorDescTypeName:
|
|
Packit |
b099d7 |
result = Urm__UT_GetNamedColorPixel
|
|
Packit |
b099d7 |
(display, cmap, colorptr, pixel_return,
|
|
Packit |
b099d7 |
XBlackPixelOfScreen(XDefaultScreenOfDisplay(display)));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorDescTypeRGB:
|
|
Packit |
b099d7 |
result = Urm__UT_GetColorPixel
|
|
Packit |
b099d7 |
(display, cmap, colorptr, pixel_return,
|
|
Packit |
b099d7 |
XBlackPixelOfScreen(XDefaultScreenOfDisplay(display)));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit Service |
1f15c3 |
sprintf(err_msg, _MrmMMsg_0040);
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchColorLiteral",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, MrmFAILURE) ;
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
UrmFreeResourceContext (context_id);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* partial success only returned when a color allocation fails, but
|
|
Packit |
b099d7 |
we've tried to make a reasonable substitution */
|
|
Packit |
b099d7 |
if (result == MrmPARTIAL_SUCCESS) result = MrmSUCCESS;
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmGetIndexedLiteral searches a single database file for a literal
|
|
Packit |
b099d7 |
* given its index (i.e. it gets a public literal from a single file).
|
|
Packit |
b099d7 |
* It returns the literal as the contents of the context buffer. The
|
|
Packit |
b099d7 |
* group which is fetched is always URMgLiteral. The literal type
|
|
Packit |
b099d7 |
* filter is taken from the context; if unmodified in the context
|
|
Packit |
b099d7 |
* as obtained from UrmGetResourceContext, there is no filtering
|
|
Packit |
b099d7 |
* (type=RGMtNul).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The buffer contents will be as follows for some common literal
|
|
Packit |
b099d7 |
* types obtained from a .UID file. Note that in some cases that
|
|
Packit |
b099d7 |
* the caller must fix up offsets to be memory pointers.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmRCType(context_id) == MrmRtypeChar8:
|
|
Packit |
b099d7 |
* UrmRCBuffer(context_id) contains a nul-terminated
|
|
Packit |
b099d7 |
* ASCII string
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmRCType(context_id) == MrmRtypeCString:
|
|
Packit |
b099d7 |
* UrmRCBuffer(context_id) contains a compound string
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmRCType(context_id) == MrmRtypeChar8Vector:
|
|
Packit |
b099d7 |
* UrmRCType(context_id) == MrmRtypeCStringVector:
|
|
Packit |
b099d7 |
* UrmRCBuffer(context_id) contains an RGM text vector
|
|
Packit |
b099d7 |
* or stringtable (RGMTextVector). The items in the
|
|
Packit |
b099d7 |
* text vector contain offsets into the buffer which
|
|
Packit |
b099d7 |
* locate either nul-terminated ASCII strings or compound
|
|
Packit |
b099d7 |
* compound strings. These may be relocated to memory
|
|
Packit |
b099d7 |
* pointers by adding the buffer address to the offset, i.e.
|
|
Packit |
b099d7 |
* item[n].text_item.pointer = item[n].text_item.offset+bufadr
|
|
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 literal
|
|
Packit |
b099d7 |
* context_id resource context into which to read the literal
|
|
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 |
UrmGetIndexedLiteral (IDBFile file_id ,
|
|
Packit |
b099d7 |
String index ,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
MrmType lit_type ; /* the type of the literal */
|
|
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 ("UrmGetIndexedLiteral", _MrmMMsg_0043,
|
|
Packit |
b099d7 |
file_id, context_id, MrmBAD_CONTEXT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
lit_type = UrmRCType (context_id) ;
|
|
Packit |
b099d7 |
return UrmIdbGetIndexedResource
|
|
Packit |
b099d7 |
(file_id, index, URMgLiteral, lit_type, context_id) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmGetRIDLiteral retrieves a literal from a single database file
|
|
Packit |
b099d7 |
* given its resource id as an accessor. It returns the literal 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 literal
|
|
Packit |
b099d7 |
* context_id literal 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 literal 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 |
UrmGetRIDLiteral (IDBFile file_id ,
|
|
Packit |
b099d7 |
MrmResource_id resource_id ,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
MrmType lit_type ; /* the type of the literal */
|
|
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 ("UrmGetRIDLiteral", _MrmMMsg_0043,
|
|
Packit |
b099d7 |
file_id, context_id, MrmBAD_CONTEXT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
lit_type = UrmRCType (context_id) ;
|
|
Packit |
b099d7 |
return UrmIdbGetRIDResource
|
|
Packit |
b099d7 |
(file_id, resource_id, URMgLiteral, lit_type, context_id) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Urm__HGetIndexedLiteral is exactly like UrmGetLiteral except
|
|
Packit |
b099d7 |
* that it searches a hierarchy for the literal rather than reading
|
|
Packit |
b099d7 |
* from a single file.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id hierarchy to be searched
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* context_id resource context into which to read the literal
|
|
Packit |
b099d7 |
* file_id_return to return IDB file in which literal 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 |
* 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 |
Urm__HGetIndexedLiteral (MrmHierarchy hierarchy_id ,
|
|
Packit |
b099d7 |
String index ,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
IDBFile *file_id_return )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
MrmType lit_type ; /* the type of the literal */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate hierarchy and context, then attempt the read.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__HGetIndexedLiteral", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__HGetIndexedLiteral", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
if ( ! UrmRCValid(context_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__HGetIndexedLiteral", _MrmMMsg_0043,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_CONTEXT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
lit_type = UrmRCType (context_id) ;
|
|
Packit |
b099d7 |
return UrmHGetIndexedResource
|
|
Packit |
b099d7 |
(hierarchy_id, index, URMgLiteral, lit_type, context_id, file_id_return) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmHGetIndexedLiteral is exactly like UrmGetLiteral except
|
|
Packit |
b099d7 |
* that it searches a hierarchy for the literal rather than reading
|
|
Packit |
b099d7 |
* from a single file.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id hierarchy to be searched
|
|
Packit |
b099d7 |
* index index of the desired literal
|
|
Packit |
b099d7 |
* context_id resource context into which to read the literal
|
|
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 |
UrmHGetIndexedLiteral (MrmHierarchy hierarchy_id ,
|
|
Packit |
b099d7 |
String index ,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
IDBFile dummy ; /* unused file return */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return Urm__HGetIndexedLiteral (hierarchy_id, index, context_id, &dummy) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|