From d3a53b82aa57f5090d95b69e6f567b06eb544df9 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Sun, 10 Feb 2013 20:06:08 +0100 Subject: initial commit of 1.13 sources --- src/vf_access_wrappers.c | 541 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 src/vf_access_wrappers.c (limited to 'src/vf_access_wrappers.c') diff --git a/src/vf_access_wrappers.c b/src/vf_access_wrappers.c new file mode 100644 index 0000000..2eea457 --- /dev/null +++ b/src/vf_access_wrappers.c @@ -0,0 +1,541 @@ +/**************************************************************************** + + (C) Nick Marley, 2001 - + + This software is distributed under the GNU Lesser General Public Licence. + Please read and understand the comments at the top of vf_iface.h before use! + +FILE + $Workfile: vf_access.c $ + $Revision: 1.16 $ + $Author: tilda $ + +ORIGINAL AUTHOR + Nick Marley + +DESCRIPTION + Wrappers on the core access functions & other utility functions. + +REFERENCES + (none) + +MODIFICATION HISTORY + * $Log: vf_access_wrappers.c,v $ + * Revision 1.16 2002/11/16 13:19:10 tilda + * IID639288 - Implement method for adding subobjects. + * + * Revision 1.15 2002/11/03 18:43:16 tilda + * IID619851 - Update and check headers and function prototypes. + * + * Revision 1.14 2002/11/02 18:29:26 tilda + * IID485157 - UI does character conversion based on CHARSET property. + * + * Revision 1.13 2002/10/26 16:09:24 tilda + * IID629125 - Ensure string functions used are portable. + * + * Revision 1.12 2002/10/08 21:45:07 tilda + * IID620473 - reduce c-runtime dependencies. + * + * Revision 1.11 2002/10/08 21:11:36 tilda + * Remove common.h. + * + * Revision 1.10 2001/11/18 22:07:02 tilda + * Ensure empty BASE64 properties get the encoding set correctly. + * + * Revision 1.9 2001/11/18 21:48:18 tilda + * Remove redundant code. + * + * Revision 1.8 2001/11/17 17:40:29 tilda + * Image / sound dialog box now works. + * + * Revision 1.7 2001/11/16 22:34:50 tilda + * New vf_get_property() allows append as well as find, + * + * Revision 1.6 2001/11/15 08:56:06 tilda + * Fix bug in qualifier location code. + * + * Revision 1.5 2001/11/14 22:36:56 tilda + * Add parameter to vf_find_prop_qual_index() + * + * Revision 1.4 2001/11/14 16:05:06 tilda + * Extend capabilities of vf_find_prop_qual_index(). + * + * Revision 1.3 2001/11/06 22:51:05 tilda + * Supporting access functions for image selection / deletion. + * + * Revision 1.2 2001/10/24 18:56:29 tilda + * Tidy headers after import. Fix include path in release build. + * + * Revision 1.1 2001/10/24 18:34:35 tilda + * Initial Version. + * + *****************************************************************************/ + +#ifndef NORCSID +static const char vf_access_wrappers_c_vss_id[] = "$Header: /cvsroot/vformat/src/vformat/src/vf_access_wrappers.c,v 1.16 2002/11/16 13:19:10 tilda Exp $"; +#endif + +/*============================================================================* + ANSI C & System-wide Header Files + *============================================================================*/ + +#include + +/*===========================================================================* + Interface Header Files + *===========================================================================*/ + +#include "vformat/vf_iface.h" + +/*===========================================================================* + Local Header File + *===========================================================================*/ + +#include "vf_config.h" +#include "vf_malloc.h" +#include "vf_internals.h" +#include "vf_strings.h" +#include "vf_string_arrays.h" + +/*===========================================================================* + Public Data + *===========================================================================*/ +/* None */ + +/*===========================================================================* + Private Defines + *===========================================================================*/ +/* None */ + +/*===========================================================================* + Private Data Types + *===========================================================================*/ +/* None */ + +/*===========================================================================* + Private Function Prototypes + *===========================================================================*/ +/* None */ + +/*===========================================================================* + Private Data + *===========================================================================*/ +/* None */ + +/*===========================================================================* + Public Function Implementations + *===========================================================================*/ + +bool_t vf_prop_belongs_to_object( + VF_PROP_T *p_prop, + VF_OBJECT_T *p_object + ); + + +/*---------------------------------------------------------------------------* + * NAME + * vf_get_prop_value_string() + * + * DESCRIPTION + * Obtain string pointer value from VF_PROP_T. If the array contains + * an entry for the indicated string return it. Return NULL if out of + * range request, ie. n_string=3 for N=0;1;2 + * + * RETURNS + * Pointer to string value if value present, NULL if index too large. + *---------------------------------------------------------------------------*/ + +char *vf_get_prop_value_string( + VF_PROP_T *p_prop, + uint32_t n_string + ) +{ + VPROP_T *p_vprop = (VPROP_T *)p_prop; + char *p_ret = NULL; + + if (p_vprop->value.v.s.pp_strings) + { + if (n_string < p_vprop->value.v.s.n_strings) + { + p_ret = p_vprop->value.v.s.pp_strings[n_string]; + } + } + + return p_ret; +} + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_set_prop_value_string() + * + * DESCRIPTION + * Set the value of a property. + * + * RETURNS + * TRUE <=> set successfully. + *---------------------------------------------------------------------------*/ + +bool_t vf_set_prop_value_string( + VF_PROP_T *p_prop, + uint32_t n_string, + const char *p_string + ) +{ + return vf_set_prop_value(p_prop, (char *)p_string, n_string, VF_ENC_7BIT, TRUE); +} + + + + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_get_prop_value_base64() + * + * DESCRIPTION + * Obtain data pointer for BASE64 data. + * + * RETURNS + * Pointer to data. + *---------------------------------------------------------------------------*/ + +const uint8_t *vf_get_prop_value_base64( + VF_PROP_T *p_prop, /* Property we're setting a value in */ + uint32_t *p_length /* Length of the binary data */ + ) +{ + const uint8_t *p_return = NULL; + + if (p_prop) + { + VPROP_T *p_vprop = (VPROP_T *)p_prop; + + p_return = p_vprop->value.v.b.p_buffer; + + if (p_length) + { + *p_length = p_vprop->value.v.b.n_bufsize; + } + } + + return p_return; +} + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_set_prop_value_base64() + * + * DESCRIPTION + * Set the value of a property. + * + * RETURNS + * TRUE <=> set successfully. + *---------------------------------------------------------------------------*/ + +bool_t vf_set_prop_value_base64( + VF_PROP_T *p_prop, /* Property we're setting a value in */ + const uint8_t *p_data, /* Pointer to the binary data */ + uint32_t length, /* Length of the binary data */ + bool_t copy /* Copy or keep pointer */ + ) +{ + return vf_set_prop_value(p_prop, (char *)p_data, length, VF_ENC_BASE64, copy); +} + + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_get_prop_value_object() + * + * DESCRIPTION + * Obtain object pointer value from VF_PROP_T. + * + * RETURNS + * Pointer to vobject value (or NULL if not found). + *---------------------------------------------------------------------------*/ + +VF_OBJECT_T *vf_get_prop_value_object( + VF_PROP_T *p_prop + ) +{ + VPROP_T *p_vprop = (VPROP_T *)p_prop; + + if (VF_ENC_VOBJECT == p_vprop->value.encoding) + { + return (VF_OBJECT_T *)(p_vprop->value.v.o.p_object); + } + + return NULL; +} + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_set_prop_value_object() + * + * DESCRIPTION + * Set the value of the indicated property to be a VOBJECT. + * + * RETURNS + * TRUE <=> set successfully. + *---------------------------------------------------------------------------*/ + +bool_t vf_set_prop_value_object( + VF_PROP_T *p_prop, + VF_OBJECT_T *p_object + ) +{ + VPROP_T *p_vprop = (VPROP_T *)p_prop; + bool_t ret = FALSE; + + /* + * Avoid various sillies. + */ + if (p_prop && p_object && !vf_prop_belongs_to_object(p_prop, p_object)) + { + delete_prop_contents(p_prop, FALSE); + + p_vprop->value.v.o.p_object = (VOBJECT_T *)p_object; + p_vprop->value.encoding = VF_ENC_VOBJECT; + } + + return TRUE; +} + + + + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_get_prop_name_string() + * + * DESCRIPTION + * Get n'th name string. + * + * RETURNS + * Pointer to string value if value present, NULL if index too large. + *---------------------------------------------------------------------------*/ + +char *vf_get_prop_name_string( + VF_PROP_T *p_prop, + uint32_t n_string + ) +{ + VPROP_T *p_vprop = (VPROP_T *)p_prop; + char *p_ret = NULL; + + if (p_vprop->name.pp_strings) + { + if (n_string < p_vprop->name.n_strings) + { + p_ret = p_vprop->name.pp_strings[n_string]; + } + } + + return p_ret; +} + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_set_prop_name_string() + * + * DESCRIPTION + * Set n'th name string. + * + * RETURNS + * TRUE iff allocation OK, FALSE else. + *---------------------------------------------------------------------------*/ + +bool_t vf_set_prop_name_string( + VF_PROP_T *p_prop, /* Property we're setting a value in */ + uint32_t n_string, /* Index to string */ + const char *p_string /* Pointer to string */ + ) +{ + VPROP_T *p_vprop; + bool_t ret = FALSE; + + p_vprop = (VPROP_T *)p_prop; + + if (p_vprop) + { + if ((-1) == n_string) + { + ret = add_string_to_array(&p_vprop->name, p_string); + } + else + { + ret = set_string_array_entry(&p_vprop->name, p_string, n_string); + } + } + + return TRUE; +} + + + + + + +/*---------------------------------------------------------------------------* + * NAME + * vf_find_prop_qual_index() + * + * DESCRIPTION + * Locate property qualifier given either an array of possible values + * or a single token that is either present or absent. For example + * if we have a property: + * + * NAME;THIRD;TIME;LUCKY:VALUE1;VALUE2;VALUE3 + * + * Then there are two possible searches. + * + * Firstly we can look for the property qualifier which can take values + * from the array { "FIRST", "SECOND", THIRD" } in which case the array + * is passed as pp_possible_values and the function returns with the + * values *p_found_value_index=2, p_qualifier_index=1 + * + * Secondly we can look for the token with value "TIME" in which case + * p_token is set to "TIME" and the function returns *p_qualifier_index=2. + * + * RETURNS + * TRUE iff found, FALSE else. + *---------------------------------------------------------------------------*/ + +bool_t vf_find_prop_qual_index( + VF_PROP_T *p_prop, /* The property we're querying */ + uint32_t *p_qualifier_index, /* Ptr to output name index */ + uint32_t *p_found_value_index, /* Ptr to output index in array */ + const char **pp_possible_values, /* Array of possible values */ + const char *p_token, /* Token searched for */ + vf_search_flags_t match /* String comparison flags */ + ) +{ + uint32_t n; + bool_t ret; + + VPROP_T *p_vprop = (VPROP_T *)p_prop; + + for (n = 0, ret = FALSE;!ret && (n < p_vprop->name.n_strings);n++) + { + const char *p_string = p_vprop->name.pp_strings[n]; + + if (p_string) + { + if (pp_possible_values) + { + uint32_t i; + + for (i = 0;!ret && pp_possible_values[i];i++) + { + if (0 == p_stricmp(pp_possible_values[i], p_string)) + { + if (p_found_value_index) + *p_found_value_index = i; + if (p_qualifier_index) + *p_qualifier_index = n; + + ret = TRUE; + } + } + } + else + if (p_token) + { + if (0 == p_stricmp(p_token, p_string)) + { + if (p_qualifier_index) + *p_qualifier_index = n; + + ret = TRUE; + } + } + else + { + /*???*/ + } + } + } + + return ret; +} + + + + + + +/*----------------------------------------------------------------------------* + * NAME + * vf_find_charset() + * + * DESCRIPTION + * Locate the charset + * + * RETURNS + * vf_charset_t. + *---------------------------------------------------------------------------*/ + +const char *vf_find_charset( + VF_PROP_T *p_prop + ) +{ + VPROP_T *p_vprop = (VPROP_T *)p_prop; + char *ret; + + if (!string_array_contains_string(&p_vprop->name, &ret, -1, VFP_CHARSET, FALSE)) + { + ret = NULL; + } + else + { + ret += 1 + p_strlen(VFP_CHARSET); + } + + return ret; +} + + + + + +/*===========================================================================* + Private Function Implementations + *===========================================================================*/ + +bool_t vf_prop_belongs_to_object( + VF_PROP_T *p_prop, + VF_OBJECT_T *p_object + ) +{ + return FALSE; +} + +/*===========================================================================* + End Of File + *===========================================================================*/ -- cgit v1.1-32-gdbae