|
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: Mrmwcrwr.c /main/14 1996/11/13 14:06:42 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 |
*++
|
|
Packit |
b099d7 |
* FACILITY:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UIL Resource Manager (URM):
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ABSTRACT:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This module contains all the CWR routines (Create Widget Record)
|
|
Packit |
b099d7 |
* which create the contents of a widget record in 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 <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 |
* UrmCWRInit Initialize CWR
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetClass Set class name/code/variety
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRInitArglist Initialize arglist
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCompressedArgTag Set compressed tag in arglist
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetUncompressedArgTag Set uncompressed tag in arglist
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetArgValue Set arg value (immediate)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetArgResourceRef Set arg value (resource reference)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetArgChar8Vec Set arg value to vector of strings
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetArgCStringVec Set arg value to compound string vector
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetArgCallback Set arg to be callback list
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCallbackItem Set callback item to immediate value
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCallbackItemRes Set callback item to resource
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetExtraArgs Set extra args count
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRInitChildren Initialize children list
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetChild Set child in list
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetComment Set widget comment
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCreationCallback Set widget creation callback
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWR__AppendString Append a string to the record
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWR__GuaranteeSpace Guarantee enough space in the record
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWR__AppendResource Append a resource descriptor
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRInit initializes a context for creating a new widget record.
|
|
Packit |
b099d7 |
* It initializes a widget record in the context (reusing the already
|
|
Packit |
b099d7 |
* allocate buffer if possible). It stores the widget name, and correctly
|
|
Packit |
b099d7 |
* initializes the size field of the RGMWidgetRecord struct. This is used
|
|
Packit |
b099d7 |
* and maintained by all UrmCWR... routines to locate the next
|
|
Packit |
b099d7 |
* available location in the record. The access and locking attributes
|
|
Packit |
b099d7 |
* of the record are also set.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context to initialize for the widget (must
|
|
Packit |
b099d7 |
* be already allocated with UrmGetResourceContext
|
|
Packit |
b099d7 |
* name name of widget
|
|
Packit |
b099d7 |
* access URMaPublic or URMaPrivate
|
|
Packit |
b099d7 |
* lock TRUE if widget is to be write-protected
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRInit (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
MrmCode access,
|
|
Packit |
b099d7 |
MrmCode lock)
|
|
Packit |
b099d7 |
{
|
|
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 |
MrmOffset offset ; /* offset for name */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( ! UrmRCValid(context_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRInit", _MrmMMsg_0043,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_CONTEXT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set validation code, and set record size to size of header
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( UrmRCSize(context_id) <= _FULLWORD(RGMWidgetRecordHdrSize) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = UrmResizeResourceContext (context_id,
|
|
Packit |
b099d7 |
_FULLWORD(RGMWidgetRecordHdrSize)) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
widgetrec->validation = URMWidgetRecordValid ;
|
|
Packit |
b099d7 |
widgetrec->size = _FULLWORD (RGMWidgetRecordHdrSize) ;
|
|
Packit |
b099d7 |
widgetrec->access = access ;
|
|
Packit |
b099d7 |
widgetrec->lock = lock ;
|
|
Packit |
b099d7 |
UrmRCSetSize (context_id, widgetrec->size) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Move in the name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, name, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
widgetrec->name_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Null out all other fields and offsets
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
widgetrec->type = 0 ;
|
|
Packit |
b099d7 |
widgetrec->class_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->arglist_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->children_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->comment_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->creation_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->variety = 0 ;
|
|
Packit |
b099d7 |
widgetrec->annex = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully initialized
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmSetClass appends the class specification to the widget record.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* type Class type, from URMwc...
|
|
Packit |
b099d7 |
* class string identifying class if not a toolkit/SDT widget.
|
|
Packit |
b099d7 |
* This string is stored only if type == URMwcUnknown
|
|
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 context not valid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmBAD_CLASS_TYPE unknown class type
|
|
Packit |
b099d7 |
* MrmNO_CLASS_NAME empty class name for user (URMwcUnknown) class
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetClass (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
String class,
|
|
Packit |
b099d7 |
unsigned long variety)
|
|
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 |
MrmOffset offset ; /* class name offset */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetClass") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the class code. If unknown, must have a non-null class name.
|
|
Packit |
b099d7 |
* Else needs only the code.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( type == UilMrmUnknownCode )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( strlen(class) <= 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetClass", _MrmMMsg_0090,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNO_CLASS_NAME) ;
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, class, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
widgetrec->type = URMwcUnknown ;
|
|
Packit |
b099d7 |
widgetrec->class_offs = offset ;
|
|
Packit |
b099d7 |
widgetrec->variety = variety;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( type < UilMrmMinValidCode )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetClass", _MrmMMsg_0091,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_CLASS_TYPE) ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
widgetrec->type = type ;
|
|
Packit |
b099d7 |
widgetrec->class_offs = 0 ;
|
|
Packit |
b099d7 |
widgetrec->variety = variety;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRInitArglist appends an empty RGMArgListDesc struct to the
|
|
Packit |
b099d7 |
* record. The arglist contains narg RGMArgument descriptors in a vector
|
|
Packit |
b099d7 |
* following the arglist header. These are then filled in by
|
|
Packit |
b099d7 |
* UrmCWRSet*ArgTag, and UrmCWRSet*ArgValue and its analogs.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* nargs number of arguments in arglist
|
|
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 context not valid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmTOO_MANY number of arguments exceeds internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRInitArglist (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal nargs)
|
|
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 |
MrmSize descsiz ; /* descriptor size */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* arglist descriptor offset */
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* pointer to arglist in record */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRInitArglist") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Error check that the number of arguments is reasonable
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( nargs > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRInitArgList", _MrmMMsg_0092,
|
|
Packit |
b099d7 |
NULL, context_id, MrmTOO_MANY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* compute the size required for the descriptor and the argument list,
|
|
Packit |
b099d7 |
* and acquire the memory in the record. Note their is one argument
|
|
Packit |
b099d7 |
* preallocated in the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMArgListDesc) + (nargs-1)*sizeof(RGMArgument) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, descsiz, &offset,
|
|
Packit |
b099d7 |
(char **)&argdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
widgetrec->arglist_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* initialize the descriptor and all the arguments
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
argdesc->count = nargs ;
|
|
Packit |
b099d7 |
argdesc->extra = 0 ;
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
argdesc->args[ndx].tag_code = 0 ;
|
|
Packit |
b099d7 |
argdesc->args[ndx].stg_or_relcode.tag_offs = 0 ;
|
|
Packit |
b099d7 |
argdesc->args[ndx].arg_val.datum.ival = 0L ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmCWRSetCompressedArgTag sets the tag of the specified argument
|
|
Packit |
b099d7 |
* in the arglist. UrmCWRSetCompressedTag is provided for callers who
|
|
Packit |
b099d7 |
* already know the compressed code for the tag.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* tag code specifying tag for argument from a compression
|
|
Packit |
b099d7 |
* code set
|
|
Packit |
b099d7 |
* related_tag code for a related argument from the same compression
|
|
Packit |
b099d7 |
* code set
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmBAD_COMPRESS invalid compressed string code
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetCompressedArgTag (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal arg_ndx,
|
|
Packit |
b099d7 |
MrmCode tag,
|
|
Packit |
b099d7 |
MrmCode related_tag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetCompressedArgTag") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetCompressedArgTag", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the compressed code and set the argument.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( tag < UilMrmMinValidCode )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCompressedArgTag", _MrmMMsg_0093,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_COMPRESS) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argptr->tag_code = tag ;
|
|
Packit |
b099d7 |
argptr->stg_or_relcode.related_code = related_tag;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmCWRSetUncompressedArgTag sets the tag of the specified argument
|
|
Packit |
b099d7 |
* in thearglist.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* tag string nameing the argument
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetUncompressedArgTag (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
Cardinal arg_ndx ,
|
|
Packit |
b099d7 |
String tag )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* tag string offset */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetUncompressedArgTag") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetUncompressedArgTag", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Append the tag string to the record and set the argument
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, tag, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetUncompressedArgTag", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argptr->tag_code = UilMrmUnknownCode ;
|
|
Packit |
b099d7 |
argptr->stg_or_relcode.tag_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmCWRSetArgValue is used to supply the value for an argument for
|
|
Packit |
b099d7 |
* all representation types listed below. For others, see below. The usage
|
|
Packit |
b099d7 |
* of the arg_val parameter depends on the value of the type parameter, as
|
|
Packit |
b099d7 |
* follows; arg_val is CAST in order to access the caller's value for the
|
|
Packit |
b099d7 |
* argument:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeInteger (value): arg_val is CAST to an integer
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeBoolean (value): arg_val is CAST to a boolean value
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeSingleFloat (value): arg_val is CAST to a float
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeChar8 (reference): arg_val is CAST to a pointer to a
|
|
Packit |
b099d7 |
* MrmRtypeAddrName (reference): string
|
|
Packit |
b099d7 |
* MrmRtypeTransTable (reference):
|
|
Packit |
b099d7 |
* MrmRtypeClassRecName (reference):
|
|
Packit |
b099d7 |
* MrmRtypeKeysym(reference):
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeCString (reference): arg_val is CAST to a pointer to a
|
|
Packit |
b099d7 |
* compound string
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeFloat (reference): arg_val is CAST to a pointer to a
|
|
Packit |
b099d7 |
* double constant
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeNull No value, enter null.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeColorTable Allocate and copy the color table
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRtypeIconImage Allocate and copy the icon. Currently,
|
|
Packit |
b099d7 |
* the color table must be allocated
|
|
Packit |
b099d7 |
* with the icon imate.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* type the representation type for the value, from RGMrType...
|
|
Packit |
b099d7 |
* arg_val a longword which will be CAST and used as required to
|
|
Packit |
b099d7 |
* access the value to be stored (copied) into the widget
|
|
Packit |
b099d7 |
* record.
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmBAD_ARG_TYPE unknown or unhandled representation type
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetArgValue (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal arg_ndx,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
unsigned long arg_val)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
MrmOffset offset, dumoff; /* non-immediate value offset */
|
|
Packit |
b099d7 |
double *dblptr ; /* pointer to double constant */
|
|
Packit |
b099d7 |
char *dumaddr; /* dummy address for GuaranteeSpace */
|
|
Packit |
b099d7 |
Cardinal diff; /* alignment diff for dblptr */
|
|
Packit |
b099d7 |
RGMColorTablePtr src_ct ; /* arg_val as color table pointer */
|
|
Packit |
b099d7 |
RGMColorTablePtr dst_ct ; /* color table allocated in record */
|
|
Packit |
b099d7 |
RGMIconImagePtr src_icon ; /* arg_val as icon pointer */
|
|
Packit |
b099d7 |
RGMIconImagePtr dst_icon ; /* icon allocated in record */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
* Set the argument type now.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetArgValue") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argptr->arg_val.rep_type = type ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the argument value depending on the type
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmRtypeInteger:
|
|
Packit |
b099d7 |
case MrmRtypeHorizontalInteger:
|
|
Packit |
b099d7 |
case MrmRtypeVerticalInteger:
|
|
Packit |
b099d7 |
case MrmRtypeBoolean:
|
|
Packit |
b099d7 |
argptr->arg_val.datum.ival = (long) arg_val ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeSingleFloat:
|
|
Packit |
b099d7 |
_MrmOSHostFloatToIEEE((float *) &arg_val);
|
|
Packit |
b099d7 |
argptr->arg_val.datum.ival = (long)arg_val ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeChar8:
|
|
Packit |
b099d7 |
case MrmRtypeAddrName:
|
|
Packit |
b099d7 |
case MrmRtypeTransTable:
|
|
Packit |
b099d7 |
case MrmRtypeClassRecName:
|
|
Packit |
b099d7 |
case MrmRtypeKeysym:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString
|
|
Packit |
b099d7 |
(context_id, (char *)arg_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeCString:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendCString
|
|
Packit |
b099d7 |
(context_id, (XmString)arg_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeWideCharacter:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendWcharString
|
|
Packit |
b099d7 |
(context_id, (wchar_t *)arg_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeFloat:
|
|
Packit |
b099d7 |
case MrmRtypeHorizontalFloat:
|
|
Packit |
b099d7 |
case MrmRtypeVerticalFloat:
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, sizeof(double), &offset, (char **) &dblptr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef USE_ORIGINAL_MOTIF_CODE
|
|
Packit |
b099d7 |
/* This is necessary for machines (such as hp9000) that require
|
|
Packit |
b099d7 |
doubles to be aligned on 8 byte boundaries. */
|
|
Packit |
b099d7 |
diff = ((long)dblptr % 8);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (diff != 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, diff, &dumoff, &dumaddr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
dblptr = (double *)((char *)dblptr + diff);
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*dblptr = *((double *) arg_val) ;
|
|
Packit |
b099d7 |
_MrmOSHostDoubleToIEEE(dblptr);
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeNull:
|
|
Packit |
b099d7 |
argptr->arg_val.datum.ival = 0L ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeColorTable:
|
|
Packit |
b099d7 |
src_ct = (RGMColorTablePtr) arg_val ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, UrmColorTableSize(src_ct), &offset, (char **)&dst_ct) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeIconImage:
|
|
Packit |
b099d7 |
src_icon = (RGMIconImagePtr) arg_val ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, UrmIconImageSize(src_icon), &offset, (char **)&dst_icon) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
return result ;
|
|
Packit |
b099d7 |
UrmCopyAllocatedIconImage (dst_icon, src_icon) ;
|
|
Packit |
b099d7 |
/* ??relocate pointers to offsets?? */
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgValue", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetArgValue", _MrmMMsg_0094,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_ARG_TYPE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCCWRSetArgResourceRef creates a resource reference as the value
|
|
Packit |
b099d7 |
* of a MrmRtypeResource argument. Only one of the index or resource_id
|
|
Packit |
b099d7 |
* parameters is used, depending on the value of the key_type parameter.
|
|
Packit |
b099d7 |
* The resource group and type are as given, but are currently meaningful
|
|
Packit |
b099d7 |
* only if the group is either URMgLiteral or URMgWidget. The type may
|
|
Packit |
b099d7 |
* by unspecified (URMtNul).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* access the access to the resource - URMaPublic or URMaPrivate
|
|
Packit |
b099d7 |
* group the resource group, usually URMgLiteral or URMgWidget
|
|
Packit |
b099d7 |
* type the literal type, from RGMrType... or URMwc...
|
|
Packit |
b099d7 |
* URMtNul is also legal
|
|
Packit |
b099d7 |
* key_type the key type - URMrIndex or URMrRID
|
|
Packit |
b099d7 |
* index index for URMaIndex literal
|
|
Packit |
b099d7 |
* resource_id resource id for URMaRID 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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetArgResourceRef(URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal arg_ndx,
|
|
Packit |
b099d7 |
MrmCode access,
|
|
Packit |
b099d7 |
MrmGroup group,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
MrmCode key_type,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
MrmResource_id resource_id)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* RGMResourceDesc offset */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
* Set the argument type.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetArgResourceRef") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgResourceRef", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argptr->arg_val.rep_type = MrmRtypeResource ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire a resource descriptor, and bind the value to it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendResource
|
|
Packit |
b099d7 |
(context_id, access, group, type, key_type, index, resource_id, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgResourceRef", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 sets the value of an argument in the arglist to
|
|
Packit |
b099d7 |
* be a vector of ASCIZ strings.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* stg_vec a vector of ASCIZ string pointers
|
|
Packit |
b099d7 |
* num_stg the number of pointers in stg_vec
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmVEC_TOO_BIG vector size exceeds internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetArgChar8Vec (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal arg_ndx,
|
|
Packit |
b099d7 |
String *stg_vec,
|
|
Packit |
b099d7 |
MrmCount num_stg)
|
|
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 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
RGMTextVectorPtr vecptr ; /* text vector in record */
|
|
Packit |
b099d7 |
MrmOffset vecoffs ; /* text vector offset */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* current string offset */
|
|
Packit |
b099d7 |
MrmSize vecsiz ; /* # bytes for text vector */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetArgChar8Vec") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgChar8Vec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate vector - make sure it doesn't contain too many elements
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( num_stg > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("DwUrmCWRSetArgChar8Vec", _MrmMMsg_0095,
|
|
Packit |
b099d7 |
NULL, context_id, MrmVEC_TOO_BIG) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Allocate the text vector. Then loop and append each string in
|
|
Packit |
b099d7 |
* the input vector to the record, setting its offset in the
|
|
Packit |
b099d7 |
* record vector. This list requires count+1 entries so it may be
|
|
Packit |
b099d7 |
* overwritten as an in-memory list at runtime with a terminating NULL.
|
|
Packit |
b099d7 |
* One item is already allocated, so num_stg additional entries are needed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vecsiz = sizeof(RGMTextVector) + (num_stg)*sizeof(RGMTextEntry) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, vecsiz, &vecoffs,
|
|
Packit |
b099d7 |
(char **)&vecptr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgChar8Vec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.rep_type = MrmRtypeChar8Vector ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = vecoffs ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vecptr->validation = URMTextVectorValid ;
|
|
Packit |
b099d7 |
vecptr->count = num_stg ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, stg_vec[ndx], &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgChar8Vec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
vecptr = (RGMTextVectorPtr) ((char *)widgetrec + vecoffs) ;
|
|
Packit |
b099d7 |
vecptr->item[ndx].text_item.rep_type = MrmRtypeChar8 ;
|
|
Packit |
b099d7 |
vecptr->item[ndx].text_item.offset = offset ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* set terminating null
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vecptr->item[num_stg].pointer = NULL ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 sets the value of an argument in the arglist to
|
|
Packit |
b099d7 |
* be a vector of compound strings
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* cstg_vec a vector of compound string pointers
|
|
Packit |
b099d7 |
* num_cstg the number of pointers in cstg_vec
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmVEC_TOO_BIG vector size exceeds internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetArgCStringVec (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal arg_ndx,
|
|
Packit |
b099d7 |
XmString *cstg_vec,
|
|
Packit |
b099d7 |
MrmCount num_cstg)
|
|
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 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
RGMTextVectorPtr vecptr ; /* text vector in record */
|
|
Packit |
b099d7 |
MrmOffset vecoffs ; /* text vector offset */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* current compound string offset */
|
|
Packit |
b099d7 |
MrmSize vecsiz ; /* # bytes for text vector */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetArgCStringVec") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgCStringVec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate vector - make sure it doesn't contain too many elements
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( num_cstg > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("DwUrmCWRSetArgCStringVec", _MrmMMsg_0095,
|
|
Packit |
b099d7 |
NULL, context_id, MrmVEC_TOO_BIG) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Allocate the text vector. Then loop and append each string in
|
|
Packit |
b099d7 |
* the input vector to the record, setting its offset in the
|
|
Packit |
b099d7 |
* record vector. This list requires count+1 entries so it may be
|
|
Packit |
b099d7 |
* overwritten as an in-memory list at runtime with a terminating NULL.
|
|
Packit |
b099d7 |
* One item is already allocated, so num_cstg additional entries are needed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vecsiz = sizeof(RGMTextVector) + (num_cstg)*sizeof(RGMTextEntry) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, vecsiz, &vecoffs,
|
|
Packit |
b099d7 |
(char **)&vecptr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgCStringVec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.rep_type = MrmRtypeCStringVector ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = vecoffs ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vecptr->validation = URMTextVectorValid ;
|
|
Packit |
b099d7 |
vecptr->count = num_cstg ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = UrmCWR__AppendCString (context_id, cstg_vec[ndx], &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgCStringVec", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
vecptr = (RGMTextVectorPtr) ((char *)widgetrec + vecoffs) ;
|
|
Packit |
b099d7 |
vecptr->item[ndx].text_item.rep_type = MrmRtypeCString ;
|
|
Packit |
b099d7 |
vecptr->item[ndx].text_item.offset = offset ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* set terminating null
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
vecptr->item[num_cstg].pointer = NULL ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmCWRSetArgCallback creates a callback descriptor for a
|
|
Packit |
b099d7 |
* MrmRtypeCallback argument. The callback descriptor is created with a
|
|
Packit |
b099d7 |
* vector of callback item descriptors whose length is nitems. The
|
|
Packit |
b099d7 |
* callback items may then be filled in with UrmCWRSetCallbackItem
|
|
Packit |
b099d7 |
* and UrmCWRSetCallbackItemRes. The offset of the new callback
|
|
Packit |
b099d7 |
* descriptor is returned for use in the set callback item routines.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context resource context containing widget record
|
|
Packit |
b099d7 |
* arg_ndx the 0-based index of the argument in the arglist
|
|
Packit |
b099d7 |
* nitems number of items to appear in the callback list
|
|
Packit |
b099d7 |
* cb_offs_return to return offset of RGMCallbackDesc struct created in
|
|
Packit |
b099d7 |
* widget record
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS arg_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmTOO_MANY number of items exceeds internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetArgCallback (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
Cardinal arg_ndx ,
|
|
Packit |
b099d7 |
Cardinal nitems ,
|
|
Packit |
b099d7 |
MrmOffset *cb_offs_return )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
MrmSize descsiz ; /* descriptor size */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* RGMCallbackDesc offset */
|
|
Packit |
b099d7 |
RGMCallbackDescPtr cbdesc ; /* resource descriptor */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
* Set the argument type.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetArgCallback") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgCallback", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argptr->arg_val.rep_type = MrmRtypeCallback ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Confirm that the number of items is reasonable, then size and
|
|
Packit |
b099d7 |
* allocate a callback descriptor. Initialize it. Note an extra
|
|
Packit |
b099d7 |
* item is added for a terminating NULL for runtime use as an
|
|
Packit |
b099d7 |
* in-memory list.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( nitems > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetArgCallback", _MrmMMsg_0109,
|
|
Packit |
b099d7 |
NULL, context_id, MrmTOO_MANY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMCallbackDesc) + (nitems)*sizeof(RGMCallbackItem) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, descsiz, &offset,
|
|
Packit |
b099d7 |
(char **)&cbdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetArgCallback", arg_ndx, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
argptr->arg_val.datum.offset = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cbdesc->validation = URMCallbackDescriptorValid ;
|
|
Packit |
b099d7 |
cbdesc->count = nitems ;
|
|
Packit |
b099d7 |
cbdesc->unres_ref_count = 0 ;
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.routine = 0 ;
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.rep_type = 0 ;
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.datum.ival = 0L ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set terminating NULL
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cbdesc->item[nitems].runtime.callback.callback = NULL ;
|
|
Packit |
b099d7 |
cbdesc->item[nitems].runtime.callback.closure = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
*cb_offs_return = offset ;
|
|
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 |
* UrmCWRSetCallbackItem sets the routine name for the callback item
|
|
Packit |
b099d7 |
* to the given routine, and sets the tag value to the immedidate value
|
|
Packit |
b099d7 |
* specified by the type and itm_val parameters. The usage of the type
|
|
Packit |
b099d7 |
* and itm_val parameters is identical to UrmCWRSetArgValue.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* cb_offs offset to the callback descriptor in the widget
|
|
Packit |
b099d7 |
* record (NOT a memory pointer, in case a new buffer
|
|
Packit |
b099d7 |
* is allocated).
|
|
Packit |
b099d7 |
* item_ndx the 0-based index of the item in the callback list
|
|
Packit |
b099d7 |
* routine routine name associated with this item
|
|
Packit |
b099d7 |
* type the representation type for the tag value, from
|
|
Packit |
b099d7 |
* RGMrType...
|
|
Packit |
b099d7 |
* itm_val a longword which will be CAST and used as required to
|
|
Packit |
b099d7 |
* access the value to be stored (copied) into the widget
|
|
Packit |
b099d7 |
* record for this tag value.
|
|
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 |
* URMBadcontext resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmBAD_CALLBACK invalid callback descriptor
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS item_ndx out of bounds
|
|
Packit |
b099d7 |
* MrmBAD_ARG_TYPE unknown or unhandled representation type
|
|
Packit |
b099d7 |
* MrmNULL_ROUTINE routine name is empty
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetCallbackItem (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
MrmOffset cb_offs,
|
|
Packit |
b099d7 |
Cardinal item_ndx,
|
|
Packit |
b099d7 |
String routine,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
unsigned long itm_val)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMCallbackDescPtr cbdesc ; /* callback descriptor */
|
|
Packit |
b099d7 |
RGMCallbackItemPtr itmptr ; /* callback item in list */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* appended data offset */
|
|
Packit |
b099d7 |
double *dblptr ; /* pointer to double constant */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate context and bind pointers to callback descriptor and item
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetCallbackItem") ;
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the routine (must be non-empty)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( strlen(routine) <= 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCallbackItem", _MrmMMsg_0096,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNULL_ROUTINE) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Append the routine string and set the item
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, routine, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.routine = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the tag to the literal value as in SetArgValue
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
itmptr->cb_item.rep_type = type ;
|
|
Packit |
b099d7 |
switch ( type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmRtypeInteger:
|
|
Packit |
b099d7 |
case MrmRtypeHorizontalInteger:
|
|
Packit |
b099d7 |
case MrmRtypeVerticalInteger:
|
|
Packit |
b099d7 |
case MrmRtypeBoolean:
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.ival = (int) itm_val ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeSingleFloat:
|
|
Packit |
b099d7 |
_MrmOSHostFloatToIEEE((float *)&itm_val);
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.ival = (int) itm_val ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeChar8:
|
|
Packit |
b099d7 |
case MrmRtypeAddrName:
|
|
Packit |
b099d7 |
case MrmRtypeTransTable:
|
|
Packit |
b099d7 |
case MrmRtypeKeysym:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString
|
|
Packit |
b099d7 |
(context_id, (char *)itm_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeChar8Vector:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCallbackItem", _MrmMMsg_0097,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_ARG_TYPE) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeCString:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendCString
|
|
Packit |
b099d7 |
(context_id, (XmString)itm_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeWideCharacter:
|
|
Packit |
b099d7 |
result = UrmCWR__AppendWcharString
|
|
Packit |
b099d7 |
(context_id, (wchar_t *)itm_val, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeCStringVector:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCallbackItem", _MrmMMsg_0098,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_ARG_TYPE) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeFloat:
|
|
Packit |
b099d7 |
case MrmRtypeHorizontalFloat:
|
|
Packit |
b099d7 |
case MrmRtypeVerticalFloat:
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, sizeof(double), &offset, (char **)&dblptr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
*dblptr = *((double *) itm_val) ;
|
|
Packit |
b099d7 |
_MrmOSHostDoubleToIEEE(dblptr);
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItem",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.offset = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case MrmRtypeNull:
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.ival = 0L ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCallbackItem", _MrmMMsg_0094,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_ARG_TYPE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCallbackItemRes sets the callback item routine name for
|
|
Packit |
b099d7 |
* the callback item to the given routine, and sets the tag value to
|
|
Packit |
b099d7 |
* be a resource reference. The interpretation of the resource
|
|
Packit |
b099d7 |
* specification parameters is identical to UrmCWRSetArgResourceRef.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* cb_offs offset to the callback descriptor in the widget record
|
|
Packit |
b099d7 |
* (NOTa memory pointer, in case a new buffer is
|
|
Packit |
b099d7 |
* allocated).
|
|
Packit |
b099d7 |
* item_ndx the 0-based index of the item in the callback list
|
|
Packit |
b099d7 |
* routine name of the routine for the callback item
|
|
Packit |
b099d7 |
* access the access to the resource - URMaPublic or URMaPrivate
|
|
Packit |
b099d7 |
* group the resource group. Only URMgLiteral makes sense,
|
|
Packit |
b099d7 |
* but the parameter is available for completeness
|
|
Packit |
b099d7 |
* type the literal type, from RGMrType... (or URMtNul)
|
|
Packit |
b099d7 |
* key_type the key type - URMrIndex or URMrRID
|
|
Packit |
b099d7 |
* index index for URMaIndex literal
|
|
Packit |
b099d7 |
* resource_id resource id for URMaRID 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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmBAD_CALLBACK invalid callback descriptor
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS item_ndx out of bounds
|
|
Packit |
b099d7 |
* DMNullIndex empty index string
|
|
Packit |
b099d7 |
* MrmNULL_ROUTINE routine name is empty
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetCallbackItemRes (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
MrmOffset cb_offs,
|
|
Packit |
b099d7 |
Cardinal item_ndx,
|
|
Packit |
b099d7 |
String routine,
|
|
Packit |
b099d7 |
MrmGroup group,
|
|
Packit |
b099d7 |
MrmCode access,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
MrmCode key_type,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
MrmResource_id resource_id)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
RGMCallbackDescPtr cbdesc ; /* callback descriptor */
|
|
Packit |
b099d7 |
RGMCallbackItemPtr itmptr ; /* callback item in list */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* appended data offset */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate context and bind pointers to callback descriptor and item
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetCallbackItemRes") ;
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItemRes",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the routine (must be non-empty)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( strlen(routine) <= 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCallbackItemRes", _MrmMMsg_0096,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNULL_ROUTINE) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Append the routine string and set the item
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, routine, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItemRes",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.routine = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire and set a resource descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__AppendResource
|
|
Packit |
b099d7 |
(context_id, access, group, type, key_type, index, resource_id, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (context_id, "UrmCWRSetCallbackItemRes",
|
|
Packit |
b099d7 |
cb_offs, item_ndx, &cbdesc, &itmptr) ;
|
|
Packit |
b099d7 |
itmptr->cb_item.rep_type = MrmRtypeResource ;
|
|
Packit |
b099d7 |
itmptr->cb_item.datum.offset = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 sets the extra args count in the arglist descriptor
|
|
Packit |
b099d7 |
* to the given value
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* nextra # of extra args which should be allocated by URM
|
|
Packit |
b099d7 |
* at runtime to deal with args URM creates which
|
|
Packit |
b099d7 |
* are related to those in the arglist (already
|
|
Packit |
b099d7 |
* set to 0).
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetExtraArgs (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
Cardinal nextra )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RGMArgListDescPtr argdesc ; /* arglist desc in record */
|
|
Packit |
b099d7 |
RGMArgumentPtr argptr ; /* argument being set */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor. Bind usual pointers, although
|
|
Packit |
b099d7 |
* argptr not used. Set the extra args field.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetExtraArgs") ;
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs
|
|
Packit |
b099d7 |
(context_id, "UrmCWRSetExtraArgs", 0, &argdesc, &argptr) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argdesc->extra = nextra ;
|
|
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 |
* UrmCWRInitChildren appends an empty RGMChildrenDesc struct to the
|
|
Packit |
b099d7 |
* record, preparing it for setting children. The descriptor is
|
|
Packit |
b099d7 |
* allocated a vector of child descriptors whose length is given by the
|
|
Packit |
b099d7 |
* nchildren parameter. Each child is then set with UrmCWRSetChild.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The children descriptor's access field is set from the record's
|
|
Packit |
b099d7 |
* access field.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* nchildren number of children in list
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmTOO_MANY number of children exceeded internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRInitChildren (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
Cardinal nchildren )
|
|
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 |
MrmSize descsiz ; /* descriptor size */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* children descriptor offset */
|
|
Packit |
b099d7 |
RGMChildrenDescPtr listdesc ; /* pointer to desc in record */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRInitChildren") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Error check that the number of children is reasonable
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( nchildren > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRInitChildren", _MrmMMsg_0099,
|
|
Packit |
b099d7 |
NULL, context_id, MrmTOO_MANY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* compute the size required for the descriptor and the child list,
|
|
Packit |
b099d7 |
* and acquire the memory in the record. Note there is one child
|
|
Packit |
b099d7 |
* preallocated in the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMChildrenDesc) + (nchildren-1)*sizeof(RGMChildDesc) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, descsiz, &offset,
|
|
Packit |
b099d7 |
(char **)&listdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
widgetrec->children_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* initialize the descriptor and all the arguments
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
listdesc->count = nchildren ;
|
|
Packit |
b099d7 |
listdesc->annex1 = 0 ;
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
listdesc->child[ndx].manage = 0 ;
|
|
Packit |
b099d7 |
listdesc->child[ndx].access = 0 ;
|
|
Packit |
b099d7 |
listdesc->child[ndx].type = 0 ;
|
|
Packit |
b099d7 |
listdesc->child[ndx].annex1 = 0 ;
|
|
Packit |
b099d7 |
listdesc->child[ndx].key.id = 0 ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
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 |
* UrmCWRSetChild sets a child descriptor in the children list for
|
|
Packit |
b099d7 |
* the widget record. Only one of the index or resource_id parameters
|
|
Packit |
b099d7 |
* is used, depending on the value of the key_type parameter.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* child_ndx index of child descriptor in children list descriptor
|
|
Packit |
b099d7 |
* manage true/false indicating child is managed with parent at
|
|
Packit |
b099d7 |
* initialization time
|
|
Packit |
b099d7 |
* access the access to the child - URMaPublic or URMaPrivate
|
|
Packit |
b099d7 |
* key_type the key type - URMrIndex or URMrRID
|
|
Packit |
b099d7 |
* index index for URMrIndex child
|
|
Packit |
b099d7 |
* resource_id resource id for URMaRID child
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmNULL_DESC children descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS child_ndx was out of bounds
|
|
Packit |
b099d7 |
* MrmNULL_INDEX empty index string for URMrIndex
|
|
Packit |
b099d7 |
* MrmBAD_KEY_TYPE key_type was an unknown type
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetChild (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
Cardinal child_ndx,
|
|
Packit |
b099d7 |
Boolean manage,
|
|
Packit |
b099d7 |
MrmCode access,
|
|
Packit |
b099d7 |
MrmCode key_type,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
MrmResource_id resource_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 |
MrmOffset offset ; /* child index offset */
|
|
Packit |
b099d7 |
RGMChildrenDescPtr listdesc ; /* pointer to desc in record */
|
|
Packit |
b099d7 |
RGMChildDescPtr childptr ; /* child in list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetChild") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
if ( widgetrec->children_offs == 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetChild", _MrmMMsg_0100,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNULL_DESC) ;
|
|
Packit |
b099d7 |
listdesc = (RGMChildrenDescPtr) ((char*)widgetrec + widgetrec->children_offs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( child_ndx >= listdesc->count )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetChild", _MrmMMsg_0101,
|
|
Packit |
b099d7 |
NULL, context_id, MrmOUT_OF_BOUNDS) ;
|
|
Packit |
b099d7 |
childptr = &listdesc->child[child_ndx] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* set child descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
childptr->manage = manage ;
|
|
Packit |
b099d7 |
childptr->access = access ;
|
|
Packit |
b099d7 |
childptr->type = key_type ;
|
|
Packit |
b099d7 |
switch ( childptr->type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMrIndex:
|
|
Packit |
b099d7 |
if ( strlen(index) <= 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetChild", _MrmMMsg_0102,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNULL_INDEX) ;
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, index, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
listdesc =
|
|
Packit |
b099d7 |
(RGMChildrenDescPtr) ((char *)widgetrec + widgetrec->children_offs) ;
|
|
Packit |
b099d7 |
childptr = &listdesc->child[child_ndx] ;
|
|
Packit |
b099d7 |
childptr->key.index_offs = offset ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case URMrRID:
|
|
Packit |
b099d7 |
childptr->key.id = resource_id ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetChild", _MrmMMsg_0103,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_KEY_TYPE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmSetComment appends a comment to the widget record.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* comment comment string for this widget
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal UrmCWRSetComment (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
String comment )
|
|
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 |
MrmOffset offset ; /* comment offset */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetComment") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Append the comment if it is non-empty
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( strlen(comment) <= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
widgetrec->comment_offs = 0 ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmCWR__AppendString (context_id, comment, &offset) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
widgetrec->comment_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmCWRSetCreationCallback initialize a callback descriptor for the
|
|
Packit |
b099d7 |
* URM creation callback for this widget. It is similar to
|
|
Packit |
b099d7 |
* UrmCWRSetArgCallback in returning the offset of a RGMCallbackDesc
|
|
Packit |
b099d7 |
* struct which may then be completed with calls to
|
|
Packit |
b099d7 |
* UrmCWRSetCallbackItem or UrmCWRSetCallbackItemRes.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* nitems number of items to appear in the callback list
|
|
Packit |
b099d7 |
* cb_offs_return to return offset of RGMCallbackDesc struct created in
|
|
Packit |
b099d7 |
* widget record
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
* MrmTOO_MANY number of items exceeds internal limit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWRSetCreationCallback (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
Cardinal nitems ,
|
|
Packit |
b099d7 |
MrmOffset *cb_offs_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 |
MrmSize descsiz ; /* descriptor size */
|
|
Packit |
b099d7 |
MrmOffset offset ; /* RGMCallbackDesc offset */
|
|
Packit |
b099d7 |
RGMCallbackDescPtr cbdesc ; /* resource descriptor */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate record, arglist descriptor, and argument number.
|
|
Packit |
b099d7 |
* Set the argument type.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (context_id, "UrmCWRSetCreationCallback") ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Confirm that the number of items is reasonable, then size and
|
|
Packit |
b099d7 |
* allocate a callback descriptor. Initialize it. As in SetArgCallbac,
|
|
Packit |
b099d7 |
* an extra item is added for runtime use.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( nitems > RGMListSizeMax )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWRSetCreationCallback", _MrmMMsg_0109,
|
|
Packit |
b099d7 |
NULL, context_id, MrmTOO_MANY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMCallbackDesc) + (nitems)*sizeof(RGMCallbackItem) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, descsiz, &offset,
|
|
Packit |
b099d7 |
(char **)&cbdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (context_id) ;
|
|
Packit |
b099d7 |
widgetrec->creation_offs = offset ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cbdesc->validation = URMCallbackDescriptorValid ;
|
|
Packit |
b099d7 |
cbdesc->count = nitems ;
|
|
Packit |
b099d7 |
cbdesc->unres_ref_count = 0 ;
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.routine = 0 ;
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.rep_type = 0 ;
|
|
Packit |
b099d7 |
cbdesc->item[ndx].cb_item.datum.ival = 0L ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set terminating NULL
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cbdesc->item[nitems].runtime.callback.callback = NULL ;
|
|
Packit |
b099d7 |
cbdesc->item[nitems].runtime.callback.closure = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully added
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
*cb_offs_return = offset ;
|
|
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 appends a string into the widget record at the
|
|
Packit |
b099d7 |
* next available location in the record. It resizes the context
|
|
Packit |
b099d7 |
* if necessary.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id context containing the widget record
|
|
Packit |
b099d7 |
* stg the string to append. Nothing is done if empty
|
|
Packit |
b099d7 |
* offset To return offset in record. 0 is returned if
|
|
Packit |
b099d7 |
* the string is empty.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* See UrmResizeResourceContext
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__AppendString (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
String stg ,
|
|
Packit |
b099d7 |
MrmOffset *offset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
int len ; /* string length */
|
|
Packit |
b099d7 |
String stgadr ; /* destination address in record */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Offset zero for NULL pointer
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( stg == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*offset = 0;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Guarantee space and copy in string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
len = strlen (stg) + 1 ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, len, offset, &stgadr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
memcpy (stgadr, stg, len) ;
|
|
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 appends a compound string into the widget record at the
|
|
Packit |
b099d7 |
* next available location in the record. It resizes the context
|
|
Packit |
b099d7 |
* if necessary.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id context containing the widget record
|
|
Packit |
b099d7 |
* cstg the compound string to append. Nothing is done if empty
|
|
Packit |
b099d7 |
* offset To return offset in record. 0 is returned if
|
|
Packit |
b099d7 |
* the string is empty.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* See UrmResizeResourceContext
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__AppendCString (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
XmString cstg ,
|
|
Packit |
b099d7 |
MrmOffset *offset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
int len ; /* length of string */
|
|
Packit |
b099d7 |
char *cstgadr ; /* destination address in record */
|
|
Packit |
b099d7 |
unsigned char *asn1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Offset zero for empty string or NULL pointer
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( cstg == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*offset = 0;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
len = XmCvtXmStringToByteStream(cstg, &asn1) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( len <= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*offset = 0;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Guarantee space and copy in string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, len, offset, &cstgadr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
memcpy (cstgadr, (char *)asn1, len) ;
|
|
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 appends a wide character string into the widget record at
|
|
Packit |
b099d7 |
* the next available location in the record. It resizes the context
|
|
Packit |
b099d7 |
* if necessary.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id context containing the widget record
|
|
Packit |
b099d7 |
* wcs the wide character string to append.
|
|
Packit |
b099d7 |
* Nothing is done if empty.
|
|
Packit |
b099d7 |
* offset To return offset in record. 0 is returned if
|
|
Packit |
b099d7 |
* the string is empty.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* See UrmResizeResourceContext
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__AppendWcharString (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
wchar_t *wcs ,
|
|
Packit |
b099d7 |
MrmOffset *offset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
MrmSize len ; /* string length */
|
|
Packit |
b099d7 |
wchar_t *wcsadr ; /* destination address in record */
|
|
Packit |
b099d7 |
int cnt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Offset zero for NULL pointer
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wcs == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*offset = 0;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Guarantee space and copy in string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for (cnt = 0; ; cnt++) if (wcs[cnt] == 0) break;
|
|
Packit |
b099d7 |
len = (cnt+1) * sizeof(wchar_t);
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace (context_id, len, offset, (char **)&wcsadr) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
memcpy (wcsadr, wcs, len) ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine guarantees that there is enough space in the
|
|
Packit |
b099d7 |
* widget record in the context for an append operation. It
|
|
Packit |
b099d7 |
* returns the address in the record of the available space. It
|
|
Packit |
b099d7 |
* also resets the widget record size to include the delta space.
|
|
Packit |
b099d7 |
* It guarantees that all space so granted is on a fullword boundary.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id context containing the widget record
|
|
Packit |
b099d7 |
* delta the number of additional bytes needed for the append
|
|
Packit |
b099d7 |
* offset to return the offset in the record
|
|
Packit |
b099d7 |
* addr to return the address in the record
|
|
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 |
UrmCWR__GuaranteeSpace (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
MrmSize delta,
|
|
Packit |
b099d7 |
MrmOffset *offset,
|
|
Packit |
b099d7 |
char **addr)
|
|
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 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
if ( ! UrmWRValid(widgetrec) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWR__GuaranteeSpace", _MrmMMsg_0026,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_RECORD) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
delta = _FULLWORD (delta) ;
|
|
Packit |
b099d7 |
result = UrmResizeResourceContext (context_id, widgetrec->size+delta) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
*offset = widgetrec->size ;
|
|
Packit |
b099d7 |
*addr = (char *) widgetrec+widgetrec->size ;
|
|
Packit |
b099d7 |
widgetrec->size += delta ;
|
|
Packit |
b099d7 |
UrmRCSetSize (context_id, widgetrec->size) ;
|
|
Packit |
b099d7 |
|
|
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 |
* UrmCCWR__AppendResource creates a resource reference and appends
|
|
Packit |
b099d7 |
* it to the record. Only one of the index or resource_id
|
|
Packit |
b099d7 |
* parameters is used, depending on the value of the key_type parameter.
|
|
Packit |
b099d7 |
* The only currently meaningful groups are URMgLiteral and URMgWidget.
|
|
Packit |
b099d7 |
* The resource type is taken from the type parameter (which may be
|
|
Packit |
b099d7 |
* URMtNul).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing widget record
|
|
Packit |
b099d7 |
* access the access to the resource - URMaPublic or URMaPrivate
|
|
Packit |
b099d7 |
* group resource group, usually URMgLiteral or URMgWidget
|
|
Packit |
b099d7 |
* type conversion type for argument values, from RGMrType...
|
|
Packit |
b099d7 |
* key_type the key type - URMrIndex or URMrRID
|
|
Packit |
b099d7 |
* index index for URMrIndex literal
|
|
Packit |
b099d7 |
* resource_id resource id for URMaRID literal
|
|
Packit |
b099d7 |
* offset to return offset of descriptor
|
|
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 resource context invalid
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC widget record not valid
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__AppendResource (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
MrmCode access,
|
|
Packit |
b099d7 |
MrmCode group,
|
|
Packit |
b099d7 |
MrmCode type,
|
|
Packit |
b099d7 |
MrmCode key_type,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
MrmResource_id resource_id,
|
|
Packit |
b099d7 |
MrmOffset *offset)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
MrmSize descsiz ; /* descriptor size */
|
|
Packit |
b099d7 |
RGMResourceDescPtr resdesc ; /* resource descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire and set a resource descriptor. If an RID reference, no extra is
|
|
Packit |
b099d7 |
* needed. If an index, extra space for the string is required. Since
|
|
Packit |
b099d7 |
* one character is allocated already, no extra is needed for the NUL.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( key_type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMrIndex:
|
|
Packit |
b099d7 |
if ( strlen(index) <= 0 )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWR__AppendResource", _MrmMMsg_0102,
|
|
Packit |
b099d7 |
NULL, context_id, MrmNULL_INDEX) ;
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMResourceDesc) + strlen(index) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, descsiz, offset, (char **)&resdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
resdesc->size = descsiz ;
|
|
Packit |
b099d7 |
resdesc->access = access ;
|
|
Packit |
b099d7 |
resdesc->type = URMrIndex ;
|
|
Packit |
b099d7 |
resdesc->res_group = group ;
|
|
Packit |
b099d7 |
resdesc->cvt_type = type ;
|
|
Packit |
b099d7 |
resdesc->annex1 = 0 ;
|
|
Packit |
b099d7 |
strcpy (resdesc->key.index, index) ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case URMrRID:
|
|
Packit |
b099d7 |
descsiz = sizeof(RGMResourceDesc) ;
|
|
Packit |
b099d7 |
result = UrmCWR__GuaranteeSpace
|
|
Packit |
b099d7 |
(context_id, descsiz, offset, (char **)&resdesc) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
resdesc->size = descsiz ;
|
|
Packit |
b099d7 |
resdesc->access = access ;
|
|
Packit |
b099d7 |
resdesc->type = URMrRID ;
|
|
Packit |
b099d7 |
resdesc->res_group = group ;
|
|
Packit |
b099d7 |
resdesc->cvt_type = type ;
|
|
Packit |
b099d7 |
resdesc->annex1 = 0 ;
|
|
Packit |
b099d7 |
resdesc->key.id = resource_id ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmCWR__AppendResource", _MrmMMsg_0103,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_KEY_TYPE) ;
|
|
Packit |
b099d7 |
}
|
|
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 checks that the context is valid and contains
|
|
Packit |
b099d7 |
* a valid widget record. It signals and returns an error
|
|
Packit |
b099d7 |
* otherwise.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing record
|
|
Packit |
b099d7 |
* routine Name of calling routine for error signal.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS Validation succeeded
|
|
Packit |
b099d7 |
* MrmBAD_CONTEXT Invalid resource context
|
|
Packit |
b099d7 |
* MrmBAD_WIDGET_REC Invalid widget record in context
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__ValidateContext (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
String routine )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RGMWidgetRecordPtr widgetrec ; /* widget record in context */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ! UrmRCValid(context_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0043,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_CONTEXT) ;
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
if ( ! UrmWRValid(widgetrec) )
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0026,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_WIDGET_REC) ;
|
|
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 bind an arglist descriptor pointer and an argument pointer
|
|
Packit |
b099d7 |
* to the arglist descriptor and designated argument item in a
|
|
Packit |
b099d7 |
* widget record. It also performs the following validations:
|
|
Packit |
b099d7 |
* non-null arglist descriptor
|
|
Packit |
b099d7 |
* argument index in bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id resource context containing record
|
|
Packit |
b099d7 |
* routine name of calling routine for error signal
|
|
Packit |
b099d7 |
* argndx 0-based argument index in list
|
|
Packit |
b099d7 |
* descptr to return pointer to arglist descriptor
|
|
Packit |
b099d7 |
* argptr to return pointer to designated argument item
|
|
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 |
* MrmNULL_DESC arglist descriptor is null
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS argument index out of bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__BindArgPtrs (URMResourceContextPtr context_id ,
|
|
Packit |
b099d7 |
String routine ,
|
|
Packit |
b099d7 |
Cardinal argndx ,
|
|
Packit |
b099d7 |
RGMArgListDescPtr *descptr ,
|
|
Packit |
b099d7 |
RGMArgumentPtr *argptr )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RGMWidgetRecordPtr widgetrec ; /* widget record in context */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Pick up a widget record, and set descriptor pointer.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
if ( UrmWRValid(widgetrec) )
|
|
Packit |
b099d7 |
*descptr = (RGMArgListDescPtr) ((char *)widgetrec+widgetrec->arglist_offs) ;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0026,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_RECORD) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate argument index and set pointer
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( argndx >= (*descptr)->count )
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0104,
|
|
Packit |
b099d7 |
NULL, context_id, MrmOUT_OF_BOUNDS) ;
|
|
Packit |
b099d7 |
*argptr = &(*descptr)->args[argndx] ;
|
|
Packit |
b099d7 |
|
|
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 binds pointers to a callback descriptor in a widget
|
|
Packit |
b099d7 |
* record, and a designated item in the callback list. It also
|
|
Packit |
b099d7 |
* performs the following validations:
|
|
Packit |
b099d7 |
* valid callback descriptor
|
|
Packit |
b099d7 |
* item index in bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* context_id context containing widget record
|
|
Packit |
b099d7 |
* routine name of calling routine for error signal
|
|
Packit |
b099d7 |
* descoffs offset of descriptor in record
|
|
Packit |
b099d7 |
* itemndx 0-based index of item in callback list
|
|
Packit |
b099d7 |
* descptr to return callback descriptor pointer
|
|
Packit |
b099d7 |
* itmptr to return callback item pointer
|
|
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_CALLBACK invalid callback descriptor
|
|
Packit |
b099d7 |
* MrmOUT_OF_BOUNDS item index out of bounds
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCWR__BindCallbackPtrs (URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
String routine,
|
|
Packit |
b099d7 |
MrmOffset descoffs,
|
|
Packit |
b099d7 |
Cardinal itemndx,
|
|
Packit |
b099d7 |
RGMCallbackDescPtr *descptr,
|
|
Packit |
b099d7 |
RGMCallbackItemPtr *itmptr)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RGMWidgetRecordPtr widgetrec ; /* widget record in context */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Pick up a widget record, and set descriptor pointer.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer(context_id) ;
|
|
Packit |
b099d7 |
if ( UrmWRValid(widgetrec) )
|
|
Packit |
b099d7 |
*descptr = (RGMCallbackDescPtr) ((char *)widgetrec+descoffs) ;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0105,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_RECORD) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( (*descptr)->validation != URMCallbackDescriptorValid )
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0106,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_CALLBACK) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* validate item index and compute item pointer
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( itemndx >= (*descptr)->count )
|
|
Packit |
b099d7 |
return Urm__UT_Error (routine, _MrmMMsg_0107,
|
|
Packit |
b099d7 |
NULL, context_id, MrmOUT_OF_BOUNDS) ;
|
|
Packit |
b099d7 |
*itmptr = &(*descptr)->item[itemndx] ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|