Skip to Content.
Sympa Menu

sm-commit - [SM-Commit] GIT changes to master grimoire by Florian Franzmann (4af1cc625bdb1164c3b9c69b94a2f7f9183a17e9)

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: Florian Franzmann <scm AT sourcemage.org>
  • To: sm-commit AT lists.ibiblio.org
  • Subject: [SM-Commit] GIT changes to master grimoire by Florian Franzmann (4af1cc625bdb1164c3b9c69b94a2f7f9183a17e9)
  • Date: Sat, 22 Dec 2012 15:30:06 -0600

GIT changes to master grimoire by Florian Franzmann
<siflfran AT hawo.stw.uni-erlangen.de>:

ChangeLog |
4
libs/libvformat/0004-Provide-info-documentation.patch |
939 +++
libs/libvformat/0005-Add-manpages.patch |
2606 ++++++++++
libs/libvformat/0006-Remove-leading-space-when-unfolding.patch |
36
libs/libvformat/0007-Cast-NULL-in-void-in-functions-using-va_arg.patch |
51
libs/libvformat/0008-Fix-typo-in-manpage-and-source.patch |
69
libs/libvformat/DETAILS |
15
libs/libvformat/HISTORY |
9
libs/libvformat/PRE_BUILD |
11
mail/lbdb/DEPENDS |
6
mail/lbdb/DETAILS |
34
mail/lbdb/HISTORY |
3
12 files changed, 3783 insertions(+)

New commits:
commit 4af1cc625bdb1164c3b9c69b94a2f7f9183a17e9
Author: Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>
Commit: Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>

mail/lbdb: new spell, the little brother's database

commit 47123ff4cfb43ec4ee7232daa9705227d8efe7c2
Author: Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>
Commit: Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>

libs/libvformat: new spell, an interface to vcard files

diff --git a/ChangeLog b/ChangeLog
index ad17567..5b968c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-12-22 Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>
+ * libs/libvformat: new spell, provides an interface to vcard files
+ * mail/lbdb: new spell, the little brother's database
+
2012-12-22 Justin Boffemmyer <flux AT sourcemage.org>
* lua-forge/luajit: new spell, Just-In-Time implementation of Lua

diff --git a/libs/libvformat/0004-Provide-info-documentation.patch
b/libs/libvformat/0004-Provide-info-documentation.patch
new file mode 100644
index 0000000..d843ffb
--- /dev/null
+++ b/libs/libvformat/0004-Provide-info-documentation.patch
@@ -0,0 +1,939 @@
+From c05fb67cf74a6231949b7917cbe766cdb7bcdca6 Mon Sep 17 00:00:00 2001
+From: Mathias Palm <mathias.palm AT gmx.net>
+Date: Sat, 8 May 2010 23:00:09 +0200
+Subject: Provide info documentation
+
+Create texi files so that info files can be generated with texinfo.
+
+Origin: vendor
+Forwarded: http://vformat.cvs.sourceforge.net/viewvc/vformat/doc/
+Last-Update: 2010-05-09
+Applied-Upstream: http://vformat.cvs.sourceforge.net/viewvc/vformat/doc/
+---
+ doc/Makefile.am | 6 +-
+ doc/libvformat-1.texi | 733
+++++++++++++++++++++++++++++++++++++++++++++++++
+ doc/libvformat-2.texi | 79 ++++++
+ doc/libvformat-i.texi | 5 +
+ doc/libvformat.texi | 51 ++++
+ 5 files changed, 872 insertions(+), 2 deletions(-)
+ create mode 100644 doc/libvformat-1.texi
+ create mode 100644 doc/libvformat-2.texi
+ create mode 100644 doc/libvformat-i.texi
+ create mode 100644 doc/libvformat.texi
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 57591c5..e078504 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,8 +1,8 @@
+ # No automatisation found. Write me if any idea.
++info_TEXINFOS = libvformat.texi
++libvformat_TEXINFOS = libvformat-1.texi libvformat-2.texi libvformat-i.texi
+
+ install-data-hook:
+- c2man -P "gcc -E -C -I.." ../vformat/vf_iface.h
+-
+ $(mkinstalldirs) $(mandir)/man3
+
+ for i in *.3; do \
+@@ -14,3 +14,5 @@ install-data-hook:
+ echo " $(INSTALL_DATA) $$file $(mandir)/man3/$$inst"; \
+ $(INSTALL_DATA) $$file $(mandir)/man3/$$inst; \
+ done
++
++ cp /usr/share/texmf-dist/tex/texinfo/texinfo.tex .
+diff --git a/doc/libvformat-1.texi b/doc/libvformat-1.texi
+new file mode 100644
+index 0000000..ec59664
+--- /dev/null
++++ b/doc/libvformat-1.texi
+@@ -0,0 +1,733 @@
++@node Functions of libvformat
++@chapter Functions of libvformat
++@deftypefun {VFORMATDECLSPEC bool_t} vf_parse_init (
++@multitable{VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string from}
++@item VF_PARSER_T @tab @var{**pp_parser},@tab Ptr to allocated parser.
++@item VF_OBJECT_T @tab @var{pp_object} @tab The object we're parsing into.
++@end multitable
++)
++
++
++
++Allocate and initialise a parser. To parse a VCARD (or any vObject)
++a user allocates a parser, pushes data through it using vf_parse_text()
++and finally calls vf_parse_end():
++
++@verbatim
++
++ VF_PARSER_T *p_parser;
++
++ if (vf_parse_init(&p_parser, pp_object))
++ {
++ do
++ {
++ char buffer[...];
++ int numchars;
++
++ numchars = get_chars_from_somewhere(buffer, ...);
++
++ ret = vf_parse_text(p_parser, buffer, numchars);
++ }
++ while (ret && (0 < charsread))
++ ;
++
++ if (!vf_parse_end(p_parser))
++ {
++ ret = FALSE;
++ }
++ }
++
++@end verbatim
++
++A parser allocated by vf_parse_init(), must be deallocated by calling
++vf_parse_end() whether or not parsing succeeds. Also, parsing may not
++be complete (ie. values may be held buffered and not evaluated fully
++or assigned to a VF_OBJECT_T) untill the final call to vf_parse_end()
++=> after a vf_parse_init() you _must_ vf_parse_end().
++
++Returns TRUE iff parser allocated successfully.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_parse_text (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PARSER_T @tab @var{*p_parser}, @tab The parser
++@item char @tab @var{*p_chars},@tab New characters to parse into object
++@item int @tab @var{numchars}@tab Number of new characters
++@end multitable
++)
++
++
++Parse indicated text into the object associated with the VPARSE_T. See
++notes for vf_parse_init().
++
++Returns TRUE <=> allocation & syntax OK, FALSE else.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_parse_end (
++ @multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to
locate string from}
++ @item VF_PARSER_T @tab @var{*p_parse} @tab The parser
++ @end multitable
++ )
++
++
++
++Ensure parse completion, release memory associated with the parser.
++
++Returns TRUE <=> parse complete with no error.
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_read_file (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{**pp_object},@tab Pointer to output object
++@item const char @tab @var{*p_name},@tab Name of file to read
++@end multitable
++)
++
++
++Reads indicated VOBJECT_T file.
++
++Returns TRUE <=> read OK, FALSE else.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_write_file (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item const char @tab @var{*p_name},@tab Output filename
++@item VF_OBJECT_T @tab @var{*p_object},@tab The object to write
++@item bool_t @tab @var{write_all}@tab Should write p_next as well?
++@end multitable
++)
++
++
++Write indicated vobject to file. For lists of objects (eg. read from
++a phonebook) the write_all parameter allows the caller to control if
++the library writes the entire list or just the head item.
++
++Returns TRUE <=> written OK, FALSE else.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_get_next_object (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{**pp_object}@tab Ptr to pointer to current
object
++@end multitable
++)
++
++
++
++Find "next" vobject. Typically called after a call to vf_read_file()
++which may well read a list of objects from a file for example:
++
++@verbatim
++ if (vf_read_file(&p_object, p_filename))
++ {
++ do
++ {
++ ...
++ }
++ while (vf_get_next_object(&p_object))
++ ;
++ }
++@end verbatim
++
++The value of *pp_object is updated by the call if it returns TRUE.
++
++Returns TRUE iff found (ie. there is a "next" object).
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC VF_OBJECT_T *} vf_create_object (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item const char @tab @var{*p_type},@tab Type of object to create
++@item VF_OBJECT_T @tab @var{*p_parent}@tab Parent object if any
++@end multitable
++)
++
++
++Creates an empty vformat object.
++
++Returns Ptr to object if created else NULL.
++@end deftypefun
++
++@deftypefun {const VFORMATDECLSPEC char *} vf_get_object_type (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{*p_object}@tab Object to locate type of
++@end multitable
++)
++
++
++
++Return the type string identifying the indicated vformat object, the
++string after the 'BEGIN' mark so 'VCARD' or 'VNOTE' etc.
++
++Return Ptr to string.
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_get_property (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{**pp_prop}, @tab Output pointer
++@item VF_OBJECT_T @tab @var{*p_object}, @tab Object to add to
++@item vf_get_t @tab @var{ops}, @tab Search flags
++@item const char @tab @var{*p_group}, @tab Group name if any
++@item const char @tab @var{*p_name}, @tab Name of tag

++@item const char @tab @var{*p_qualifier}, @tab First qualifier if any
++@item ... @tab @tab Subequent qualifiers
++@end multitable
++)
++
++
++Basic searching function locating elements of the VOBJECT by qualified
++name. The function is a varargs function (like sprintf) and the list
++of arguments must be NULL terminated (hence the appearance of the
++p_qualifier argument in the arglist). Valid calls might be:
++
++@example
++ vf_get_property(&p_out, p_object, VFGP_FIND, NULL, "N", NULL);
++ - find and return "N" properties. If there are none, return FALSE.
++
++ vf_get_property(&p_out, p_object, VFGP_FIND, NULL, "TEL", "WORK", NULL);
++ - find and return "TEL" entries qualified by the "work" attribute
++ (ie. work phone numbers). If there are none, return FALSE.
++
++ vf_get_property(&p_out, p_object, VFGP_GET, NULL, "TEL", "WORK", NULL);
++ - find and return work phone number. The entry is automatically
++ added if not pre-existing.
++
++ vf_get_property(&p_out, p_object, VFGP_GET, NULL, "TEL", "WORK", NULL);
++ - find and return work phone numbers in the group identifier by the "ME"
++ identifier. The entry is automatically added if not pre-existing.
++
++ vf_get_property(&p_out, p_object, VFGP_FIND, "ME", "*", NULL);
++ - effectively enumerates all entries in the "ME" group.
++@end example
++
++A pointer to the first property matching the search criteria is returned
++via the pp_prop argument. The search actually locates all such matches
++and pointer to subsequent entries (if there are >1) may be found by
++calling the vf_get_next_property() function.
++
++The tags may occur in any order _except_ that the p_name must be first.
++
++Note that the VF_PROP_T returned by pp_prop is an opaque type and the
++functions vf_get_prop_xxxx() etc. must be used to locate real "values".
++
++Cached search results (the list enumerated by subsequent calls to the
++vf_get_next_property() function) are maintained through the use of a
++a single internal pointer therefore this method is not thread safe.
++
++Returns TRUE iff found/added successfully. Ptr to prop returned via
pp_prop.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_get_property_ex (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{**pp_prop}, @tab Output pointer

++@item VF_OBJECT_T @tab @var{*p_object}, @tab Object to search
++@item vf_get_t @tab @var{ops}, @tab Search flags

++@item const char @tab @var{*p_group}, @tab Group name if any
++@item const char @tab @var{*p_name}, @tab Name of tag
++@item const char @tab @var{*p_qualifier}, @tab First qualifier if any
++@item va_list args @tab Argument list
++@end multitable
++)
++
++
++The grunt behind vf_get_property(). Manages the search as described
++vf_get_property() but takes the list of arguments as a va_list.
++This function should be used when writing higher layer functions
++which take varargs (eg. DDX functions).
++
++Returns TRUE iff found/added successfully. ptr to prop returned via
pp_prop.
++
++@end deftypefun
++
++@deftypefun bool_t vf_get_next_property (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{**pp_prop}, @tab Output pointer
++@end multitable
++)
++
++
++
++Find the next property given the current search critera. User
++calls vf_get_property() to locate first in a bunch of properties
++and can iterate over the rest by calling vf_get_next_property().
++
++Returns TRUE iff found, FALSE else. *pp_prop points to the nex property.
++
++@end deftypefun
++
++@deftypefun bool_t vf_get_prop_value (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item void @tab @var{**pp_value}, @tab Pointer value
++@item uint32_t @tab @var{*p_size}, @tab Integer value
++@item vf_encoding_t @tab @var{*p_encoding} @tab Type of return values
++@end multitable
++)
++
++Get hold of raw fields associated with the property. These are of
++rious types:
++
++@example
++VF_ENC_VOBJECT
++ - *pp_value = pointer to contained VF_OBJECT_T which can be
++ passed back to any of the object manipulation functions.
++
++VF_ENC_7BIT, VF_ENC_QUOTEDPRINTABLE
++ - *pp_value = ptr to array of char*, *p_size = number of elts.
++
++VF_ENC_8BIT, VF_BASE64
++ - *pp_value = ptr to bytes, *p_size = number of bytes
++@end example
++
++Returns TRUE <=> encoding is valid, FALSE else.
++
++
++@end deftypefun
++
++
++@deftypefun bool_t vf_set_prop_value (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item void @tab @var{*p_value}, @tab Pointer to the
data
++@item uint32_t @tab @var{n_param}, @tab Data size or
index
++@item vf_encoding_t @tab @var{encoding}, @tab Encoding in use
++@item bool_t @tab @var{copy} @tab Copy the data?
++@end multitable
++)
++
++Set values associated with a property.
++
++Passing a value of encoding not the same as the current property
++encoding will cause the property contents to be freed prior to
++setting the indicated value.
++
++Returns TRUE <=> re-allocation success & encoding correct, FALSE else.
++
++@end deftypefun
++
++@deftypefun {char *} vf_get_prop_value_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property to locate
string from
++@item uint32_t @tab @var{n_string} @tab Index to string required
++@end multitable
++)
++
++Obtain string pointer value from VF_PROP_T. For example a property
++may be defined as:
++
++THING;THIS=STUFF;WITH-QUALIFIERS:fred-fred-fred;gogogo;baabaabaa
++
++A call to vf_get_prop_value_string() specifying n_string=1 will
++return a pointer to the gogogo value.
++
++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.
++
++@end deftypefun
++
++@deftypefun bool_t vf_get_prop_value (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The
property
++@item void @tab @var{**pp_value}, @tab Pointer
value
++@item vf_encoding_t @tab @var{*p_encoding}, @tab Type
++of return values
++@item uint32_t @tab @var{*p_size}, @tab Integer
value
++@end multitable
++)
++
++Get hold of raw fields associated with the property. These are of
++various types:
++
++ VF_ENC_VOBJECT
++ - *pp_value = pointer to contained VF_OBJECT_T which can be
++ passed back to any of the object manipulation functions.
++
++ VF_ENC_7BIT, VF_ENC_QUOTEDPRINTABLE
++ - *pp_value = ptr to array of char*, *p_size = number of elts.
++
++ VF_ENC_8BIT, VF_BASE64
++ - *pp_value = ptr to bytes, *p_size = number of bytes
++
++Returns TRUE <=> encoding is valid, FALSE else.
++
++
++@end deftypefun
++
++
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_value (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item void @tab @var{*p_value}, @tab Pointer to the data
++@item uint32_t @tab @var{n_param}, @tab Data size or index
++@item vf_encoding_t @tab @var{encoding}, @tab Encoding in use
++@item bool_t @tab @var{copy} @tab Copy the data?
++@end multitable
++)
++
++Set values associated with a property.
++
++Passing a value of encoding not the same as the current property
++encoding will cause the property contents to be freed prior to
++setting the indicated value.
++Returns TRUE <=> re-allocation success & encoding correct, FALSE else.
++
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC char *} vf_get_prop_value_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property to locate
string from
++@item uint32_t @tab @var{n_string} @tab Index to string
required
++@end multitable
++)
++
++Obtain string pointer value from VF_PROP_T. For example a property
++may be defined as:
++
++THING;THIS=STUFF;WITH-QUALIFIERS:fred-fred-fred;gogogo;baabaabaa
++
++A call to vf_get_prop_value_string() specifying n_string=1 will
++return a pointer to the gogogo value.
++
++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.
++
++
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC char *} vf_get_prop_name_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property to locate
string from
++@item uint32_t @tab @var{n_string} @tab Index to string
required
++@end multitable
++)
++
++
++Get n'th name string. For example a property may be defined as:
++THING;THIS=STUFF;WITH-QUALIFIERS:fred-fred-fred;gogogo;baabaabaa
++A call to vf_get_prop_name_string() specifying n_string=2 will
++return a pointer to the WITH-QUALIFIERS value.
++Return NULL if out of range request, ie. n_string=4 for X;A;B;C:foo
++
++Returns Pointer to string value if value present, NULL if index too large.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_name_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property we're
setting a value in
++@item uint32_t @tab @var{n_string}, @tab Index to string
++@item const char @tab @var{*p_string} @tab Pointer to string
++@end multitable
++)
++
++
++
++Set n'th name string.
++
++Returns TRUE iff allocation OK, FALSE else.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC void} vf_get_prop_name (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item char @tab @var{*p_buffer}, @tab The buffer
++@item uint32_t @tab @var{bufsize} @tab Size of the buffer
++@end multitable
++)
++
++
++
++
++Build the property name string in the indicated buffer.
++
++Returns (none)
++
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC VF_OBJECT_T *} vf_get_prop_value_object (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop} @tab Property to locate
object from
++@end multitable
++)
++
++
++Obtain object pointer value from VF_PROP_T.
++
++Returns Pointer to vobject value (or NULL if not found).
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_value_object (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop},
++@item VF_OBJECT_T @tab @var{*p_object}
++@end multitable
++)
++
++
++Set the value of the indicated property to be a VOBJECT.
++
++Returns TRUE <=> set successfully.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_value_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property we're
setting a value in
++@item uint32_t @tab @var{n_string}, @tab Index to string
++@item const char @tab @var{*p_string } @tab Pointer to string
++@end multitable
++)
++
++Set the value of a property.
++
++Returns TRUE <=> set successfully.
++
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_value_base64 (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property we're
setting a value in
++@item const uint8_t @tab @var{*p_data}, @tab Pointer to the binary
data
++@item uint32_t @tab @var{length}, @tab Length of the binary
data
++@item bool_t @tab @var{copy} @tab Copy or keep pointer
++@end multitable
++)
++
++
++
++Set the value of a property.
++
++Returns TRUE <=> set successfully.
++
++
++@end deftypefun
++
++@deftypefun {const VFORMATDECLSPEC uint8_t *} vf_get_prop_value_base64 (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab Property we're
setting a value in
++@item uint32_t @tab @var{*p_length} @tab Length of the binary
data
++@end multitable
++)
++
++
++
++Get a BASE64 property. Returns ptr, passes length via parameter.
++
++Returns Ptr to data.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_property_from_file (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item vf_encoding_t @tab @var{encoding}, @tab Encoding to use
++@item const char @tab @var{*p_filename} @tab Source filename
++@end multitable
++)
++
++
++
++Loads the indicated file into memory and sets the indicated property.
++
++Returns TRUE iff succeded, FALSE else.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC void} vf_delete_object (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{*p_object}, @tab The object to delete
++@item bool_t @tab @var{all } @tab Delete all subsequent
objects?
++@end multitable
++)
++
++
++Cleans up the memory used by the indicated vformat object.
++
++Returns (none)
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC void} vf_delete_prop (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{*p_object}, @tab The object we're
deleting from
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property we're
removing
++@item bool_t dc @tab Should property contents be
deleted?
++@end multitable
++)
++
++
++Deletes indicated property from the indicated object. Deletes prop
++contents if dc is set.
++
++Returns (none)
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_find_prop_qual_index (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
we're querying
++@item uint32_t @tab @var{*p_qualifier_index}, @tab Ptr to output
name index
++@item uint32_t @tab @var{*p_found_value_index}, @tab Ptr to output
index in array
++@item const char @tab @var{**pp_possible_values}, @tab Array of possible
values
++@item const char @tab @var{*p_token}, @tab Token searched
for
++@item vf_search_flags_t @tab @var{match} @tab String comparison
flags
++@end multitable
++)
++
++
++
++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.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_is_modified (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_OBJECT_T @tab @var{*p_object} @tab The object
++@end multitable
++)
++
++
++
++
++Fetch status of modified flag.
++
++Returns TRUE iff modified since list read/write.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC const char *} vf_find_charset (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop} @tab The property we're
querying
++@end multitable
++)
++
++
++
++Locate the CHARSET property which indicates the character encoding
++in use - which indicates how the octet stream encoded in the VCARD
++is to be decoded into characters.
++
++Returns Pointer to character encoding name eg. "UTF-8".
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_date_string_to_time (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item uint32_t @tab @var{*p_time}, @tab Output time value
++@item const char @tab @var{*p_string} @tab Input string
++@end multitable
++)
++
++
++
++Convert calendar string to absolute time. The basic formats are
++19960401, 19960401T073000Z
++
++Returns TRUE <=> conversion OK, FALSE else.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_period_string_to_time (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_ISO8601_PERIOD_T @tab @var{*p_period}, @tab Output time value
++@item const char @tab @var{*p_string} @tab Input string
++@end multitable
++)
++
++
++Convert period definition string to time value. The format is
++P[aaaY][bbbM][cccW][dddD]T[eeeH][fffM][gggS] where 'aaa' is a
++number of years, bbb months etc.
++
++Returns TRUE <=> conversion OK, FALSE else.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC uint32_t} vf_period_time_to_string (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item char @tab @var{*p_string}, @tab Output string
++@item const VF_ISO8601_PERIOD_T @tab @var{*p_period} @tab Input period
value
++@end multitable
++)
++
++
++Convert a VF_ISO8601_PERIOD_T to a string.
++
++Returns Number of characters written.
++
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_set_prop_value_time (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item uint32_t @tab @var{n_string}, @tab Which string we're
encoding to
++@item const time_t @tab @var{t_value} @tab Time value
++@end multitable
++)
++
++
++Set a time_t value into a VF property.
++
++Returns TRUE iff property added & set OK.
++
++@end deftypefun
++
++@deftypefun {VFORMATDECLSPEC bool_t} vf_get_prop_value_time (
++@multitable {VF_PROP_Taaaa}{*n_stringaaaaa}{Property to locate string
from}
++@item VF_PROP_T @tab @var{*p_prop}, @tab The property
++@item uint32_t @tab @var{n_string}, @tab Which string we're
decoding
++@item time_t @tab @var{*p_t_value} @tab Pointer to output time
value
++@end multitable
++)
++
++
++Fetch a time_t value from a VF property.
++
++Returns TRUE iff foudn & converted OK.
++
++@end deftypefun
+diff --git a/doc/libvformat-2.texi b/doc/libvformat-2.texi
+new file mode 100644
+index 0000000..0511a56
+--- /dev/null
++++ b/doc/libvformat-2.texi
+@@ -0,0 +1,79 @@
++@node Public structures
++@chapter Public structures
++
++@defvr {Public Type} VF_PARSER_T
++
++Type representing "parser" - an object used to parse VOBJECTS.
++
++@end defvr
++
++@defvr {Public Type} VF_OBJECT_T
++
++Type representing an "object" - objects are collections of properties.
++
++@end defvr
++
++@defvr {Public Type} VF_PROP_T
++
++Type representing a "property" - properties associate a name & a value.
++
++@end defvr
++
++@deftp {Structure} VF_ISO8601_PERIOD_T @*
++ @{@*
++ uint32_t years@*
++ uint32_t months@*
++ uint32_t weeks@*
++ uint32_t days@*
++ uint32_t hours@*
++ uint32_t minutes@*
++ uint32_t seconds@*
++ @}
++
++
++VF_ISO8601_PERIOD_T is used to encapsulate an ISO time 'period'.
++
++@end deftp
++
++
++@deftypevr {Public Type} uint8_t vf_encoding_t
++
++vf_encoding_t enumerates the supported encodings (formats) of a
++vformat object property. Each "value" has a field of this type.
++
++Predefined values
++
++@multitable {VF_ENC_QUOTEDPRINTABLE}{((vf_encoding_t)aaaa}{123456}
++@item VF_ENC_UNKNOWN @tab ((vf_encoding_t)(0))
++@item VF_ENC_7BIT @tab ((vf_encoding_t)(1))
++@item VF_ENC_8BIT @tab ((vf_encoding_t)(2))
++@item VF_ENC_BASE64 @tab ((vf_encoding_t)(3))
++@item VF_ENC_QUOTEDPRINTABLE @tab ((vf_encoding_t)(4))
++@item VF_ENC_VOBJECT @tab ((vf_encoding_t)(5))
++@end multitable
++
++@end deftypevr
++
++
++@deftypevr {Public Type} uint16_t vf_get_t
++
++vf_get_t controls the operation of vf_get_property() (qv). Controls
++how far the search algorithm is prepared to go in order to return a
++property ready for modification.
++
++Predefined values
++
++@multitable {VF_ENC_QUOTEDPRINTABLE}{((vf_encoding_t)aaaa}{Find &
append if not present123456}
++@item VFGP_FIND @tab ((vf_get_t)(0x0001)) @tab Search for property

++@item VFGP_APPEND @tab ((vf_get_t)(0x0002)) @tab Append property, no
search
++@item VFGP_GET @tab ((vf_get_t)(0x0003)) @tab Find & append if not
present
++@end multitable
++
++@end deftypevr
++
++@deftypevr {Public Type} uint32_t vf_search_flags_t
++
++vf_search_flags_t is used to describe how string matching is performed
++when searching for properties, qualifiers, values etc.
++
++@end deftypevr
+diff --git a/doc/libvformat-i.texi b/doc/libvformat-i.texi
+new file mode 100644
+index 0000000..66d6996
+--- /dev/null
++++ b/doc/libvformat-i.texi
+@@ -0,0 +1,5 @@
++@node Function index
++@unnumbered Function Index
++
++@printindex fn
++
+diff --git a/doc/libvformat.texi b/doc/libvformat.texi
+new file mode 100644
+index 0000000..c5ff663
+--- /dev/null
++++ b/doc/libvformat.texi
+@@ -0,0 +1,51 @@
++\input texinfo @c -*-texinfo-*-
++@c %**start of header
++@setfilename libvformat.info
++@settitle libvformat
++@setchapternewpage odd
++@c %**end of header
++
++@ifinfo
++This file documents libvformat
++
++Copyright 2001 Nick Marley <Tilda@@indigo8.freeserve.co.uk>
++
++licensed under the LGPL license.
++@end ifinfo
++
++@c This title page illustrates only one of the
++@c two methods of forming a title page.
++
++@dircategory Libraries
++@direntry
++* libvformat: (libvformat). Library to manipulate vcards
++@end direntry
++
++@titlepage
++@title libvformat
++@subtitle library to access versit cards
++@author Nick <Tilda@@indigo8.freeserve.co.uk>
++@end titlepage
++
++
++@ifnottex
++@node Top, , (dir), (dir)
++@top TITLE
++
++This document describes libvformat
++
++This document applies to version 1.13
++of the program named libvformat
++@end ifnottex
++
++@menu
++* Functions of libvformat:: description of interface.
++* Public structures:: public structures of libvformat
++* Function index:: index.
++@end menu
++
++@include libvformat-1.texi
++@include libvformat-2.texi
++@include libvformat-i.texi
++
++@bye
+--
+1.7.6.3
+
diff --git a/libs/libvformat/0005-Add-manpages.patch
b/libs/libvformat/0005-Add-manpages.patch
new file mode 100644
index 0000000..f58c858
--- /dev/null
+++ b/libs/libvformat/0005-Add-manpages.patch
@@ -0,0 +1,2606 @@
+From 905759e8a6cf637a0dbcc869f04c79110968b41c Mon Sep 17 00:00:00 2001
+From: Mathias Palm <mathias.palm AT gmx.net>
+Date: Sat, 8 May 2010 23:00:09 +0200
+Subject: Add manpages
+
+Provides manpages instead of generating them from c2man as c2man is
deprecated.
+
+Origin: vendor
+Bug-Debian: http://bugs.debian.org/313265
+Forwarded: not-needed
+Last-Update: 2010-10-10
+---
+ doc/Makefile.am | 6 +-
+ doc/vf_create_object.3 | 63 +++++++++++++++++++
+ doc/vf_date_string_to_time.3 | 64 +++++++++++++++++++
+ doc/vf_delete_object.3 | 63 +++++++++++++++++++
+ doc/vf_delete_prop.3 | 69 +++++++++++++++++++++
+ doc/vf_find_charset.3 | 54 ++++++++++++++++
+ doc/vf_find_prop_qual_index.3 | 97 +++++++++++++++++++++++++++++
+ doc/vf_get_next_object.3 | 65 ++++++++++++++++++++
+ doc/vf_get_next_property.3 | 54 ++++++++++++++++
+ doc/vf_get_object_type.3 | 53 ++++++++++++++++
+ doc/vf_get_prop_name.3 | 68 +++++++++++++++++++++
+ doc/vf_get_prop_name_string.3 | 70 +++++++++++++++++++++
+ doc/vf_get_prop_value.3 | 87 ++++++++++++++++++++++++++
+ doc/vf_get_prop_value_base64.3 | 63 +++++++++++++++++++
+ doc/vf_get_prop_value_object.3 | 52 ++++++++++++++++
+ doc/vf_get_prop_value_string.3 | 71 +++++++++++++++++++++
+ doc/vf_get_prop_value_time.3 | 68 +++++++++++++++++++++
+ doc/vf_get_property.3 | 128
+++++++++++++++++++++++++++++++++++++++
+ doc/vf_get_property_ex.3 | 91 +++++++++++++++++++++++++++
+ doc/vf_is_modified.3 | 52 ++++++++++++++++
+ doc/vf_parse_end.3 | 54 ++++++++++++++++
+ doc/vf_parse_init.3 | 93 ++++++++++++++++++++++++++++
+ doc/vf_parse_text.3 | 70 +++++++++++++++++++++
+ doc/vf_period_string_to_time.3 | 65 ++++++++++++++++++++
+ doc/vf_period_time_to_string.3 | 63 +++++++++++++++++++
+ doc/vf_read_file.3 | 63 +++++++++++++++++++
+ doc/vf_set_prop_name_string.3 | 68 +++++++++++++++++++++
+ doc/vf_set_prop_value.3 | 82 +++++++++++++++++++++++++
+ doc/vf_set_prop_value_base64.3 | 73 ++++++++++++++++++++++
+ doc/vf_set_prop_value_object.3 | 63 +++++++++++++++++++
+ doc/vf_set_prop_value_string.3 | 68 +++++++++++++++++++++
+ doc/vf_set_prop_value_time.3 | 68 +++++++++++++++++++++
+ doc/vf_set_property_from_file.3 | 68 +++++++++++++++++++++
+ doc/vf_write_file.3 | 70 +++++++++++++++++++++
+ 34 files changed, 2303 insertions(+), 3 deletions(-)
+ create mode 100644 doc/vf_create_object.3
+ create mode 100644 doc/vf_date_string_to_time.3
+ create mode 100644 doc/vf_delete_object.3
+ create mode 100644 doc/vf_delete_prop.3
+ create mode 100644 doc/vf_find_charset.3
+ create mode 100644 doc/vf_find_prop_qual_index.3
+ create mode 100644 doc/vf_get_next_object.3
+ create mode 100644 doc/vf_get_next_property.3
+ create mode 100644 doc/vf_get_object_type.3
+ create mode 100644 doc/vf_get_prop_name.3
+ create mode 100644 doc/vf_get_prop_name_string.3
+ create mode 100644 doc/vf_get_prop_value.3
+ create mode 100644 doc/vf_get_prop_value_base64.3
+ create mode 100644 doc/vf_get_prop_value_object.3
+ create mode 100644 doc/vf_get_prop_value_string.3
+ create mode 100644 doc/vf_get_prop_value_time.3
+ create mode 100644 doc/vf_get_property.3
+ create mode 100644 doc/vf_get_property_ex.3
+ create mode 100644 doc/vf_is_modified.3
+ create mode 100644 doc/vf_parse_end.3
+ create mode 100644 doc/vf_parse_init.3
+ create mode 100644 doc/vf_parse_text.3
+ create mode 100644 doc/vf_period_string_to_time.3
+ create mode 100644 doc/vf_period_time_to_string.3
+ create mode 100644 doc/vf_read_file.3
+ create mode 100644 doc/vf_set_prop_name_string.3
+ create mode 100644 doc/vf_set_prop_value.3
+ create mode 100644 doc/vf_set_prop_value_base64.3
+ create mode 100644 doc/vf_set_prop_value_object.3
+ create mode 100644 doc/vf_set_prop_value_string.3
+ create mode 100644 doc/vf_set_prop_value_time.3
+ create mode 100644 doc/vf_set_property_from_file.3
+ create mode 100644 doc/vf_write_file.3
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index e078504..ac63498 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -3,7 +3,7 @@ info_TEXINFOS = libvformat.texi
+ libvformat_TEXINFOS = libvformat-1.texi libvformat-2.texi libvformat-i.texi
+
+ install-data-hook:
+- $(mkinstalldirs) $(mandir)/man3
++ $(mkinstalldirs) $(DESTDIR)$(mandir)/man3
+
+ for i in *.3; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+@@ -11,8 +11,8 @@ install-data-hook:
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+- echo " $(INSTALL_DATA) $$file $(mandir)/man3/$$inst"; \
+- $(INSTALL_DATA) $$file $(mandir)/man3/$$inst; \
++ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(mandir)/man3/$$inst"; \
++ $(INSTALL_DATA) $$file $(DESTDIR)$(mandir)/man3/$$inst; \
+ done
+
+ cp /usr/share/texmf-dist/tex/texinfo/texinfo.tex .
+diff --git a/doc/vf_create_object.3 b/doc/vf_create_object.3
+new file mode 100644
+index 0000000..b9ce4a4
+--- /dev/null
++++ b/doc/vf_create_object.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_create_object" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_create_object \- vf_create_object()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern VF_OBJECT_T *vf_create_object
++.br
++(
++.br
++ const char *p_type,
++.br
++ VF_OBJECT_T *p_parent
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "const char *p_type"
++Type of object to create.
++.TP
++.B "VF_OBJECT_T *p_parent"
++Parent object if any.
++.SH "DESCRIPTION"
++Creates an empty vformat object.
++.SH "RETURNS"
++Ptr to object if created else NULL.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_date_string_to_time.3 b/doc/vf_date_string_to_time.3
+new file mode 100644
+index 0000000..0bfadb4
+--- /dev/null
++++ b/doc/vf_date_string_to_time.3
+@@ -0,0 +1,64 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_date_string_to_time" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_date_string_to_time \- vf_date_string_to_time()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_date_string_to_time
++.br
++(
++.br
++ uint32_t *p_time,
++.br
++ const char *p_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "uint32_t *p_time"
++Output time value.
++.TP
++.B "const char *p_string"
++Input string.
++.SH "DESCRIPTION"
++Convert calendar string to absolute time. The basic formats are
++19960401, 19960401T073000Z.
++.SH "RETURNS"
++TRUE <=> conversion OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_delete_object.3 b/doc/vf_delete_object.3
+new file mode 100644
+index 0000000..0597129
+--- /dev/null
++++ b/doc/vf_delete_object.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_delete_object" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_delete_object \- vf_delete_object()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern void vf_delete_object
++.br
++(
++.br
++ VF_OBJECT_T *p_object,
++.br
++ bool_t all
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T *p_object"
++The object to delete.
++.TP
++.B "bool_t all"
++Delete all subsequent objects?.
++.SH "DESCRIPTION"
++Cleans up the memory used by the indicated vformat object.
++.SH "RETURNS"
++(None)
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_delete_prop.3 b/doc/vf_delete_prop.3
+new file mode 100644
+index 0000000..ac25e96
+--- /dev/null
++++ b/doc/vf_delete_prop.3
+@@ -0,0 +1,69 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_delete_prop" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_delete_prop \- vf_delete_prop()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern void vf_delete_prop
++.br
++(
++.br
++ VF_OBJECT_T *p_object,
++.br
++ VF_PROP_T *p_prop,
++.br
++ bool_t dc
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T *p_object"
++The object we're deleting from.
++.TP
++.B "VF_PROP_T *p_prop"
++The property we're removing.
++.TP
++.B "bool_t dc"
++Should property contents be deleted?.
++.SH "DESCRIPTION"
++Deletes indicated property from the indicated object. Deletes prop
++contents if dc is set.
++.SH "RETURNS"
++(None)
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_find_charset.3 b/doc/vf_find_charset.3
+new file mode 100644
+index 0000000..7c541da
+--- /dev/null
++++ b/doc/vf_find_charset.3
+@@ -0,0 +1,54 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_find_charset" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_find_charset \- vf_find_charset()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern const char *vf_find_charset(VF_PROP_T *p_prop);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property we're querying.
++.SH "DESCRIPTION"
++Locate the CHARSET property which indicates the character encoding
++in use - which indicates how the octet stream encoded in the VCARD
++is to be decoded into characters.
++.SH "RETURNS"
++Pointer to character encoding name eg. "UTF-8".
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_find_prop_qual_index.3 b/doc/vf_find_prop_qual_index.3
+new file mode 100644
+index 0000000..9e3f6c6
+--- /dev/null
++++ b/doc/vf_find_prop_qual_index.3
+@@ -0,0 +1,97 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_find_prop_qual_index" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_find_prop_qual_index \- vf_find_prop_qual_index()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_find_prop_qual_index
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t *p_qualifier_index,
++.br
++ uint32_t *p_found_value_index,
++.br
++ const char **pp_possible_values,
++.br
++ const char *p_token,
++.br
++ vf_search_flags_t match
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property we're querying.
++.TP
++.B "uint32_t *p_qualifier_index"
++Ptr to output name index.
++.TP
++.B "uint32_t *p_found_value_index"
++Ptr to output index in array.
++.TP
++.B "const char **pp_possible_values"
++Array of possible values.
++.TP
++.B "const char *p_token"
++Token searched for.
++.TP
++.B "vf_search_flags_t match"
++String comparison flags.
++.SH "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.
++.SH "RETURNS"
++TRUE iff found, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_next_object.3 b/doc/vf_get_next_object.3
+new file mode 100644
+index 0000000..9c8efbe
+--- /dev/null
++++ b/doc/vf_get_next_object.3
+@@ -0,0 +1,65 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_next_object" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_next_object \- vf_get_next_object()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_next_object(VF_OBJECT_T **pp_object);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T **pp_object"
++Ptr to pointer to current object.
++.SH "DESCRIPTION"
++Find "next" vobject. Typically called after a call to vf_read_file()
++which may well read a list of objects from a file for example:
++
++if (vf_read_file(&p_object, p_filename))
++{
++do
++{
++\ ...
++}
++while (vf_get_next_object(&p_object))
++;
++}
++
++The value of *pp_object is updated by the call if it returns TRUE.
++.SH "RETURNS"
++TRUE iff found (ie. There is a "next" object).
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_next_property.3 b/doc/vf_get_next_property.3
+new file mode 100644
+index 0000000..e6c491f
+--- /dev/null
++++ b/doc/vf_get_next_property.3
+@@ -0,0 +1,54 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_next_property" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_next_property \- vf_get_next_property()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_next_property(VF_PROP_T **pp_prop);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T **pp_prop"
++Output pointer.
++.SH "DESCRIPTION"
++Find the next property given the current search critera. User
++calls vf_get_property() to locate first in a bunch of properties
++and can iterate over the rest by calling vf_get_next_property().
++.SH "RETURNS"
++TRUE iff found, FALSE else. *Pp_prop points to the nex property.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_object_type.3 b/doc/vf_get_object_type.3
+new file mode 100644
+index 0000000..91cde4c
+--- /dev/null
++++ b/doc/vf_get_object_type.3
+@@ -0,0 +1,53 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_object_type" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_object_type \- vf_get_object_type()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern const char *vf_get_object_type(VF_OBJECT_T *p_object);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T *p_object"
++Object to locate type of.
++.SH "DESCRIPTION"
++Return the type string identifying the indicated vformat object,
++the string after the 'BEGIN' mark so 'VCARD' or 'VNOTE' etc.
++.SH "RETURNS"
++Ptr to string.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_name.3 b/doc/vf_get_prop_name.3
+new file mode 100644
+index 0000000..538c137
+--- /dev/null
++++ b/doc/vf_get_prop_name.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_name" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_name \- vf_get_prop_name()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern void vf_get_prop_name
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ char *p_buffer,
++.br
++ uint32_t bufsize
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "char *p_buffer"
++The buffer.
++.TP
++.B "uint32_t bufsize"
++Size of the buffer.
++.SH "DESCRIPTION"
++Build the property name string in the indicated buffer.
++.SH "RETURNS"
++(None)
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_name_string.3 b/doc/vf_get_prop_name_string.3
+new file mode 100644
+index 0000000..7d1cfee
+--- /dev/null
++++ b/doc/vf_get_prop_name_string.3
+@@ -0,0 +1,70 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_name_string" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_name_string \- vf_get_prop_name_string()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern char *vf_get_prop_name_string
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property to locate string from.
++.TP
++.B "uint32_t n_string"
++Index to string requred.
++.SH "DESCRIPTION"
++Get n'th name string. For example a property may be defined as:
++
++THING;THIS=STUFF;WITH-QUALIFIERS:fred-fred-fred;gogogo;baabaabaa
++
++A call to vf_get_prop_name_string() specifying n_string=2 will
++return a pointer to the WITH-QUALIFIERS value.
++
++Return NULL if out of range request, ie. N_string=4 for X;A;B;C:foo.
++.SH "RETURNS"
++Pointer to string value if value present, NULL if index too large.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_value.3 b/doc/vf_get_prop_value.3
+new file mode 100644
+index 0000000..4b821c8
+--- /dev/null
++++ b/doc/vf_get_prop_value.3
+@@ -0,0 +1,87 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_value" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_value \- vf_get_prop_value()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_prop_value
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ void **pp_value,
++.br
++ uint32_t *p_size,
++.br
++ vf_encoding_t *p_encoding
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "void **pp_value"
++Pointer value.
++.TP
++.B "uint32_t *p_size"
++Integer value.
++.TP
++.B "vf_encoding_t *p_encoding"
++Type of return values.
++.SH "DESCRIPTION"
++Get hold of raw fields associated with the property. These are of
++various types:
++
++VF_ENC_VOBJECT
++.br
++- *Pp_value = pointer to contained VF_OBJECT_T which can be
++passed back to any of the object manipulation functions.
++
++VF_ENC_7BIT, VF_ENC_QUOTEDPRINTABLE
++.br
++- *Pp_value = ptr to array of char*, *p_size = number of elts.
++
++VF_ENC_8BIT, VF_BASE64
++.br
++- *Pp_value = ptr to bytes, *p_size = number of bytes.
++.SH "RETURNS"
++TRUE <=> encoding is valid, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_value_base64.3 b/doc/vf_get_prop_value_base64.3
+new file mode 100644
+index 0000000..e9cdec5
+--- /dev/null
++++ b/doc/vf_get_prop_value_base64.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_value_base64" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_value_base64 \- vf_get_prop_value_base64()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern const uint8_t *vf_get_prop_value_base64
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t *p_length
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property we're setting a value in.
++.TP
++.B "uint32_t *p_length"
++Length of the binary data.
++.SH "DESCRIPTION"
++Get a BASE64 property. Returns ptr, passes length via parameter.
++.SH "RETURNS"
++Ptr to data.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_value_object.3 b/doc/vf_get_prop_value_object.3
+new file mode 100644
+index 0000000..0fa3cc6
+--- /dev/null
++++ b/doc/vf_get_prop_value_object.3
+@@ -0,0 +1,52 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_value_object" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_value_object \- vf_get_prop_value_object()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern VF_OBJECT_T *vf_get_prop_value_object(VF_PROP_T *p_prop);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property to locate object from.
++.SH "DESCRIPTION"
++Obtain object pointer value from VF_PROP_T.
++.SH "RETURNS"
++Pointer to vobject value (or NULL if not found).
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_value_string.3 b/doc/vf_get_prop_value_string.3
+new file mode 100644
+index 0000000..4fc9a81
+--- /dev/null
++++ b/doc/vf_get_prop_value_string.3
+@@ -0,0 +1,71 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_value_string" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_value_string \- vf_get_prop_value_string()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern char *vf_get_prop_value_string
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property to locate string from.
++.TP
++.B "uint32_t n_string"
++Index to string requred.
++.SH "DESCRIPTION"
++Obtain string pointer value from VF_PROP_T. For example a property
++may be defined as:
++
++THING;THIS=STUFF;WITH-QUALIFIERS:fred-fred-fred;gogogo;baabaabaa
++
++A call to vf_get_prop_value_string() specifying n_string=1 will
++return a pointer to the gogogo value.
++
++Return NULL if out of range request, ie. N_string=3 for N:0;1;2.
++.SH "RETURNS"
++Pointer to string value if value present, NULL if index too large.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_prop_value_time.3 b/doc/vf_get_prop_value_time.3
+new file mode 100644
+index 0000000..cf446c9
+--- /dev/null
++++ b/doc/vf_get_prop_value_time.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_prop_value_time" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_prop_value_time \- vf_get_prop_value_time()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_prop_value_time
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string,
++.br
++ long int *p_t_value
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "uint32_t n_string"
++Which string we're decoding.
++.TP
++.B "long int *p_t_value"
++Pointer to output time value.
++.SH "DESCRIPTION"
++Fetch a time_t value from a VF property.
++.SH "RETURNS"
++TRUE iff foudn & converted OK.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3)
+diff --git a/doc/vf_get_property.3 b/doc/vf_get_property.3
+new file mode 100644
+index 0000000..828e414
+--- /dev/null
++++ b/doc/vf_get_property.3
+@@ -0,0 +1,128 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_property" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_property \- vf_get_property()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_property
++.br
++(
++.br
++ VF_PROP_T **pp_prop,
++.br
++ VF_OBJECT_T *p_object,
++.br
++ vf_get_t ops,
++.br
++ const char *p_group,
++.br
++ const char *p_name,
++.br
++ const char *p_qualifier,
++.br
++ ...
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T **pp_prop"
++Output pointer.
++.TP
++.B "VF_OBJECT_T *p_object"
++Object to add to.
++.TP
++.B "vf_get_t ops"
++Search flags.
++.TP
++.B "const char *p_group"
++Group name if any.
++.TP
++.B "const char *p_name"
++Name of tag.
++.TP
++.B "const char *p_qualifier"
++First qualifier if any.
++.TP
++.B "..."
++Subequent qualifiers.
++.SH "DESCRIPTION"
++Basic searching function locating elements of the VOBJECT by qualified
++name. The function is a varargs function (like sprintf) and the list
++of arguments must be NULL terminated (hence the appearance of the
++p_qualifier argument in the arglist). Valid calls might be:
++
++vf_get_property(&p_out, p_object, VFGP_FIND, NULL, "N", NULL);
++.br
++- Find and return "N" properties. If there are none, return FALSE.
++
++Vf_get_property(&p_out, p_object, VFGP_FIND, NULL, "TEL", "WORK", NULL);
++.br
++- Find and return "TEL" entries qualified by the "work" attribute
++(ie. Work phone numbers). If there are none, return FALSE.
++
++Vf_get_property(&p_out, p_object, VFGP_GET, NULL, "TEL", "WORK", NULL);
++.br
++- Find and return work phone number. The entry is automatically
++added if not pre-existing.
++
++Vf_get_property(&p_out, p_object, VFGP_GET, NULL, "TEL", "WORK", NULL);
++.br
++- Find and return work phone numbers in the group identifier by the "ME"
++identifier. The entry is automatically added if not pre-existing.
++
++Vf_get_property(&p_out, p_object, VFGP_FIND, "ME", "*", NULL);
++.br
++- Effectively enumerates all entries in the "ME" group.
++
++A pointer to the first property matching the search criteria is returned
++via the pp_prop argument. The search actually locates all such matches
++and pointer to subsequent entries (if there are >1) may be found by
++calling the vf_get_next_property() function.
++
++The tags may occur in any order _except_ that the p_name must be first.
++
++Note that the VF_PROP_T returned by pp_prop is an opaque type and the
++functions vf_get_prop_xxxx() etc. Must be used to locate real "values".
++
++Cached search results (the list enumerated by subsequent calls to the
++vf_get_next_property() function) are maintained through the use of a
++a single internal pointer therefore this method is not thread safe.
++.SH "RETURNS"
++TRUE iff found/added successfully. Ptr to prop returned via pp_prop.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_get_property_ex.3 b/doc/vf_get_property_ex.3
+new file mode 100644
+index 0000000..9937b3f
+--- /dev/null
++++ b/doc/vf_get_property_ex.3
+@@ -0,0 +1,91 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_get_property_ex" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_get_property_ex \- vf_get_property_ex()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_get_property_ex
++.br
++(
++.br
++ VF_PROP_T **pp_prop,
++.br
++ VF_OBJECT_T *p_object,
++.br
++ vf_get_t ops,
++.br
++ const char *p_group,
++.br
++ const char *p_name,
++.br
++ const char *p_qualifier,
++.br
++ char args
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T **pp_prop"
++Output pointer.
++.TP
++.B "VF_OBJECT_T *p_object"
++Object to search.
++.TP
++.B "vf_get_t ops"
++Search flags.
++.TP
++.B "const char *p_group"
++Group name if any.
++.TP
++.B "const char *p_name"
++Name of tag.
++.TP
++.B "const char *p_qualifier"
++First qualifier if any.
++.TP
++.B "char args"
++Argument list.
++.SH "DESCRIPTION"
++The grunt behind vf_get_property(). Manages the search as described
++vf_get_property() but takes the list of arguments as a va_list.
++This function should be used when writing higher layer functions
++which take varargs (eg. DDX functions).
++.SH "RETURNS"
++TRUE iff found/added successfully. Ptr to prop returned via pp_prop.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_is_modified.3 b/doc/vf_is_modified.3
+new file mode 100644
+index 0000000..9dab0df
+--- /dev/null
++++ b/doc/vf_is_modified.3
+@@ -0,0 +1,52 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_is_modified" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_is_modified \- vf_is_modified()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_is_modified(VF_OBJECT_T *p_object);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T *p_object"
++The object.
++.SH "DESCRIPTION"
++Fetch status of modified flag.
++.SH "RETURNS"
++TRUE iff modified since list read/write.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_parse_end.3 b/doc/vf_parse_end.3
+new file mode 100644
+index 0000000..80daf5c
+--- /dev/null
++++ b/doc/vf_parse_end.3
+@@ -0,0 +1,54 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_parse_end" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_parse_end \- vf_parse_end()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_parse_end(VF_PARSER_T *p_parse);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PARSER_T *p_parse"
++The parser.
++.SH "DESCRIPTION"
++Ensure parse completion, release memory associated with the parser.
++
++See notes for vf_parse_init().
++.SH "RETURNS"
++TRUE <=> parse complete with no error.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_parse_init.3 b/doc/vf_parse_init.3
+new file mode 100644
+index 0000000..3ffcc51
+--- /dev/null
++++ b/doc/vf_parse_init.3
+@@ -0,0 +1,93 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_parse_init" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_parse_init \- vf_parse_init()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_parse_init
++.br
++(
++.br
++ VF_PARSER_T **pp_parser,
++.br
++ VF_OBJECT_T **pp_object
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PARSER_T **pp_parser"
++Ptr to allocated parser.
++.TP
++.B "VF_OBJECT_T **pp_object"
++The object we're parsing into.
++.SH "DESCRIPTION"
++Allocate and initialise a parser. To parse a VCARD (or any vObject)
++a user allocates a parser, pushes data through it using vf_parse_text()
++and finally calls vf_parse_end():
++
++VF_PARSER_T *p_parser;
++
++if (vf_parse_init(&p_parser, pp_object))
++{
++do
++{
++char buffer[...];
++Int numchars;
++
++numchars = get_chars_from_somewhere(buffer, ...);
++
++Ret = vf_parse_text(p_parser, buffer, numchars);
++}
++while (ret && (0 < charsread))
++;
++
++if (!vf_parse_end(p_parser))
++{
++ret = FALSE;
++}
++}
++
++A parser allocated by vf_parse_init(), must be deallocated by calling
++vf_parse_end() whether or not parsing succeeds. Also, parsing may not
++be complete (ie. Values may be held buffered and not evaluated fully
++or assigned to a VF_OBJECT_T) untill the final call to vf_parse_end()
++=> after a vf_parse_init() you _must_ vf_parse_end().
++.SH "RETURNS"
++TRUE iff parser allocated successfully.
++.SH "SEE ALSO"
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_parse_text.3 b/doc/vf_parse_text.3
+new file mode 100644
+index 0000000..0c21fc7
+--- /dev/null
++++ b/doc/vf_parse_text.3
+@@ -0,0 +1,70 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_parse_text" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_parse_text \- vf_parse_text()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_parse_text
++.br
++(
++.br
++ VF_PARSER_T *p_parse,
++.br
++ char *p_chars,
++.br
++ int numchars
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PARSER_T *p_parse"
++The parser.
++.TP
++.B "char *p_chars"
++New characters to parse into object.
++.TP
++.B "int numchars"
++Number of new characters.
++.SH "DESCRIPTION"
++Parse indicated text into the object associated with the VPARSE_T.
++
++See notes for vf_parse_init().
++.SH "RETURNS"
++TRUE <=> allocation & syntax OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_period_string_to_time.3 b/doc/vf_period_string_to_time.3
+new file mode 100644
+index 0000000..56682f2
+--- /dev/null
++++ b/doc/vf_period_string_to_time.3
+@@ -0,0 +1,65 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_period_string_to_time" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_period_string_to_time \- vf_period_string_to_time()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_period_string_to_time
++.br
++(
++.br
++ VF_ISO8601_PERIOD_T *p_period,
++.br
++ const char *p_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_ISO8601_PERIOD_T *p_period"
++Output time value.
++.TP
++.B "const char *p_string"
++Input string.
++.SH "DESCRIPTION"
++Convert period definition string to time value. The format is
++P[aaaY][bbbM][cccW][dddD]T[eeeH][fffM][gggS] where 'aaa' is a
++number of years, bbb months etc.
++.SH "RETURNS"
++TRUE <=> conversion OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_period_time_to_string.3 b/doc/vf_period_time_to_string.3
+new file mode 100644
+index 0000000..ffdfe5c
+--- /dev/null
++++ b/doc/vf_period_time_to_string.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_period_time_to_string" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_period_time_to_string \- vf_period_time_to_string()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern uint32_t vf_period_time_to_string
++.br
++(
++.br
++ char *p_string,
++.br
++ const VF_ISO8601_PERIOD_T *p_period
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "char *p_string"
++Output string.
++.TP
++.B "const VF_ISO8601_PERIOD_T *p_period"
++Input period value.
++.SH "DESCRIPTION"
++Convert a VF_ISO8601_PERIOD_T to a string.
++.SH "RETURNS"
++Number of characters written.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_read_file.3 b/doc/vf_read_file.3
+new file mode 100644
+index 0000000..406736d
+--- /dev/null
++++ b/doc/vf_read_file.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_read_file" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_read_file \- vf_read_file()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_read_file
++.br
++(
++.br
++ VF_OBJECT_T **pp_object,
++.br
++ const char *p_name
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_OBJECT_T **pp_object"
++Pointer to output object.
++.TP
++.B "const char *p_name"
++Name of file to read.
++.SH "DESCRIPTION"
++Reads indicated VOBJECT_T file.
++.SH "RETURNS"
++TRUE <=> read OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_name_string.3 b/doc/vf_set_prop_name_string.3
+new file mode 100644
+index 0000000..82e55ac
+--- /dev/null
++++ b/doc/vf_set_prop_name_string.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_name_string" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_name_string \- vf_set_prop_name_string()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_name_string
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string,
++.br
++ const char *p_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property we're setting a value in.
++.TP
++.B "uint32_t n_string"
++Index to string.
++.TP
++.B "const char *p_string"
++Pointer to string.
++.SH "DESCRIPTION"
++Set n'th name string.
++.SH "RETURNS"
++TRUE iff allocation OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_value.3 b/doc/vf_set_prop_value.3
+new file mode 100644
+index 0000000..d41e4c9
+--- /dev/null
++++ b/doc/vf_set_prop_value.3
+@@ -0,0 +1,82 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_value" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_value \- vf_set_prop_value()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_value
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ void *p_value,
++.br
++ uint32_t n_param,
++.br
++ vf_encoding_t encoding,
++.br
++ bool_t copy
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "void *p_value"
++Pointer to the data.
++.TP
++.B "uint32_t n_param"
++Data size or index.
++.TP
++.B "vf_encoding_t encoding"
++Encoding in use.
++.TP
++.B "bool_t copy"
++Copy the data?.
++.SH "DESCRIPTION"
++Set values associated with a property.
++
++Passing a value of encoding not the same as the current property
++encoding will cause the property contents to be freed prior to
++setting the indicated value.
++.SH "RETURNS"
++TRUE <=> re-allocation success & encoding correct, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_value_base64.3 b/doc/vf_set_prop_value_base64.3
+new file mode 100644
+index 0000000..70821f1
+--- /dev/null
++++ b/doc/vf_set_prop_value_base64.3
+@@ -0,0 +1,73 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_value_base64" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_value_base64 \- vf_set_prop_value_base64()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_value_base64
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ const uint8_t *p_data,
++.br
++ uint32_t length,
++.br
++ bool_t copy
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property we're setting a value in.
++.TP
++.B "const uint8_t *p_data"
++Pointer to the binary data.
++.TP
++.B "uint32_t length"
++Length of the binary data.
++.TP
++.B "bool_t copy"
++Copy or keep pointer.
++.SH "DESCRIPTION"
++Set the value of a property.
++.SH "RETURNS"
++TRUE <=> set successfully.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_value_object.3 b/doc/vf_set_prop_value_object.3
+new file mode 100644
+index 0000000..85d96c2
+--- /dev/null
++++ b/doc/vf_set_prop_value_object.3
+@@ -0,0 +1,63 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_value_object" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_value_object \- vf_set_prop_value_object()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_value_object
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ VF_OBJECT_T *p_object
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Not Documented.
++.TP
++.B "VF_OBJECT_T *p_object"
++Not Documented.
++.SH "DESCRIPTION"
++Set the value of the indicated property to be a VOBJECT.
++.SH "RETURNS"
++TRUE <=> set successfully.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_value_string.3 b/doc/vf_set_prop_value_string.3
+new file mode 100644
+index 0000000..47cb2d7
+--- /dev/null
++++ b/doc/vf_set_prop_value_string.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_value_string" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_value_string \- vf_set_prop_value_string()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_value_string
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string,
++.br
++ const char *p_string
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++Property we're setting a value in.
++.TP
++.B "uint32_t n_string"
++Index to string.
++.TP
++.B "const char *p_string"
++Pointer to string.
++.SH "DESCRIPTION"
++Set the value of a property.
++.SH "RETURNS"
++TRUE <=> set successfully.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_prop_value_time.3 b/doc/vf_set_prop_value_time.3
+new file mode 100644
+index 0000000..68af0f9
+--- /dev/null
++++ b/doc/vf_set_prop_value_time.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_prop_value_time" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_prop_value_time \- vf_set_prop_value_time()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_prop_value_time
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ uint32_t n_string,
++.br
++ const long int t_value
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "uint32_t n_string"
++Which string we're encoding to.
++.TP
++.B "const long int t_value"
++Time value.
++.SH "DESCRIPTION"
++Set a time_t value into a VF property.
++.SH "RETURNS"
++TRUE iff property added & set OK.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_set_property_from_file.3
b/doc/vf_set_property_from_file.3
+new file mode 100644
+index 0000000..fc0d43f
+--- /dev/null
++++ b/doc/vf_set_property_from_file.3
+@@ -0,0 +1,68 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_set_property_from_file" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_set_property_from_file \- vf_set_property_from_file()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_set_property_from_file
++.br
++(
++.br
++ VF_PROP_T *p_prop,
++.br
++ vf_encoding_t encoding,
++.br
++ const char *p_filename
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "VF_PROP_T *p_prop"
++The property.
++.TP
++.B "vf_encoding_t encoding"
++Encoding to use.
++.TP
++.B "const char *p_filename"
++Source filename.
++.SH "DESCRIPTION"
++Loads the indicated file into memory and sets the indicated property.
++.SH "RETURNS"
++TRUE iff succeded, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_write_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+diff --git a/doc/vf_write_file.3 b/doc/vf_write_file.3
+new file mode 100644
+index 0000000..ebc0b74
+--- /dev/null
++++ b/doc/vf_write_file.3
+@@ -0,0 +1,70 @@
++.\" WARNING! THIS FILE WAS GENERATED AUTOMATICALLY BY c2man!
++.\" DO NOT EDIT! CHANGES MADE TO THIS FILE WILL BE LOST!
++.TH "vf_write_file" 3 "30 April 2003" "c2man vf_iface.h"
++.SH "NAME"
++vf_write_file \- vf_write_file()
++.SH "SYNOPSIS"
++.ft B
++#include <../vformat/vf_iface.h>
++.sp
++extern bool_t vf_write_file
++.br
++(
++.br
++ const char *p_name,
++.br
++ VF_OBJECT_T *p_object,
++.br
++ bool_t write_all
++.br
++);
++.ft R
++.SH "PARAMETERS"
++.TP
++.B "const char *p_name"
++Outpt filename.
++.TP
++.B "VF_OBJECT_T *p_object"
++The object to write.
++.TP
++.B "bool_t write_all"
++Should write p_next as well?.
++.SH "DESCRIPTION"
++Write indicated vobject to file. For lists of objects (eg. Read from
++a phonebook) the write_all parameter allows the caller to control if
++the library writes the entire list or just the head item.
++.SH "RETURNS"
++TRUE <=> written OK, FALSE else.
++.SH "SEE ALSO"
++vf_parse_init(3),
++vf_parse_text(3),
++vf_parse_end(3),
++vf_read_file(3),
++vf_get_next_object(3),
++vf_create_object(3),
++vf_get_object_type(3),
++vf_get_property(3),
++vf_get_property_ex(3),
++vf_get_next_property(3),
++vf_get_prop_value(3),
++vf_set_prop_value(3),
++vf_get_prop_value_string(3),
++vf_get_prop_name_string(3),
++vf_set_prop_name_string(3),
++vf_get_prop_name(3),
++vf_get_prop_value_object(3),
++vf_set_prop_value_object(3),
++vf_set_prop_value_string(3),
++vf_set_prop_value_base64(3),
++vf_get_prop_value_base64(3),
++vf_set_property_from_file(3),
++vf_delete_object(3),
++vf_delete_prop(3),
++vf_find_prop_qual_index(3),
++vf_is_modified(3),
++vf_find_charset(3),
++vf_date_string_to_time(3),
++vf_period_string_to_time(3),
++vf_period_time_to_string(3),
++vf_set_prop_value_time(3),
++vf_get_prop_value_time(3)
+--
+1.7.6.3
+
diff --git a/libs/libvformat/0006-Remove-leading-space-when-unfolding.patch
b/libs/libvformat/0006-Remove-leading-space-when-unfolding.patch
new file mode 100644
index 0000000..613a2eb
--- /dev/null
+++ b/libs/libvformat/0006-Remove-leading-space-when-unfolding.patch
@@ -0,0 +1,36 @@
+From 792e010c299c4483d0fac836dba8119e6112c165 Mon Sep 17 00:00:00 2001
+From: Daniele Forsi <dforsi AT gmail.com>
+Date: Sun, 9 May 2010 19:34:56 +0200
+Subject: Remove leading space when unfolding
+
+According to RFC 2425 paragraph 5.8.1, the leading whitespace on folded lines
+must be removed when unfolding happens.
+
+Origin: vendor,
http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=testcase.c;att=1;bug=539442
+Bug-Debian: http://bugs.debian.org/539442
+Forwarded:
https://sourceforge.net/tracker/?func=detail&aid=3084903&group_id=37192&atid=419516
+Last-Update: 2010-12-23
+Applied-Upstream:
http://vformat.cvs.sourceforge.net/viewvc/vformat/src/vformat/src/vf_parser.c?revision=1.26&view=markup
+---
+ src/vf_parser.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/vf_parser.c b/src/vf_parser.c
+index 2c7221c..1197154 100644
+--- a/src/vf_parser.c
++++ b/src/vf_parser.c
+@@ -333,9 +333,9 @@ bool_t vf_parse_text(
+ /* Ignore */
+ }
+ else
+- if (SPACE == c)
++ if ((SPACE == c) || (TAB == c))
+ {
+- ok = append_to_curr_string(&(p_parse->prop.value.v.s),
NULL, &c, 1);
++ /* Ignore leading white space characters when unfolding
*/
+
+ p_parse->state = _VF_STATE_RFC822VALUE;
+ }
+--
+1.7.6.3
+
diff --git
a/libs/libvformat/0007-Cast-NULL-in-void-in-functions-using-va_arg.patch
b/libs/libvformat/0007-Cast-NULL-in-void-in-functions-using-va_arg.patch
new file mode 100644
index 0000000..a0b4182
--- /dev/null
+++ b/libs/libvformat/0007-Cast-NULL-in-void-in-functions-using-va_arg.patch
@@ -0,0 +1,51 @@
+From a20a232e48b80958b977e3be96f6a859ba61260c Mon Sep 17 00:00:00 2001
+From: Thomas Preud'homme <thomas.preudhomme AT celest.fr>
+Date: Wed, 12 May 2010 18:39:30 +0200
+Subject: Cast NULL in void * in functions using va_arg
+
+NULL isn't necessary a zero value. For instance, on AMD64 architecture,
+a null pointer is 0x7fff00000000. Usually things works automagically as
+the compiler always cast NULL and 0 in void * if stored in a pointer
+variable. But with functions with variable number of arguments the
+compiler can't know the type of the arguments and thus don't make the
+cast. In consequences, NULL and 0 must be cast explicitely in void * if
+the parameter is a pointer.
+
+Origin: vendor
+Forwarded:
https://sourceforge.net/tracker/?func=detail&aid=3084905&group_id=37192&atid=419516
+Last-Update: 2010-12-23
+Applied-Upstream:
http://vformat.cvs.sourceforge.net/viewvc/vformat/build/vformat/vformat.c?revision=1.22&view=markup
+---
+ test/vformat.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/test/vformat.c b/test/vformat.c
+index b4a753d..40c299e 100644
+--- a/test/vformat.c
++++ b/test/vformat.c
+@@ -489,19 +489,19 @@ static void check_extract_fields(
+ }
+
+ printf(" Looking for {%s, %s}...\n", p_array[0], p_array[1]);
+- if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[1], NULL))
++ if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[1], (void *) NULL))
+ {
+ print_search_results(p_tmp);
+ }
+
+ printf(" Looking for {%s, %s}...\n", p_array[0], p_array[2]);
+- if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[2], NULL))
++ if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[2], (void *) NULL))
+ {
+ print_search_results(p_tmp);
+ }
+
+ printf(" Looking for {%s, %s, %s}...\n", p_array[0], p_array[1],
p_array[2]);
+- if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[1], p_array[2], NULL))
++ if (vf_get_property(&p_tmp, p_object, VFGP_FIND, NULL, p_array[0],
p_array[1], p_array[2], (void *) NULL))
+ {
+ print_search_results(p_tmp);
+ }
+--
+1.7.6.3
+
diff --git a/libs/libvformat/0008-Fix-typo-in-manpage-and-source.patch
b/libs/libvformat/0008-Fix-typo-in-manpage-and-source.patch
new file mode 100644
index 0000000..9d8c979
--- /dev/null
+++ b/libs/libvformat/0008-Fix-typo-in-manpage-and-source.patch
@@ -0,0 +1,69 @@
+From 4f9b820244bfb52e58a11871986e7159e636d57e Mon Sep 17 00:00:00 2001
+From: Thomas Preud'homme <thomas.preudhomme AT celest.fr>
+Date: Wed, 11 Aug 2010 10:45:08 +0200
+Subject: Fix typo in manpage and source
+
+Two function declarations suffer from a mispell: requred instead of required.
+As a consequences, these typo are also found in the manpages generated by
c2man.
+
+Origin: vendor
+Forworded:
https://sourceforge.net/tracker/?func=detail&aid=3084926&group_id=37192&atid=419516
+Last-Update: 2010-12-23
+Applied-Upstream:
http://vformat.cvs.sourceforge.net/viewvc/vformat/src/vformat/vf_iface.h?revision=1.41&view=markup
+---
+ doc/vf_get_prop_name_string.3 | 2 +-
+ doc/vf_get_prop_value_string.3 | 2 +-
+ vformat/vf_iface.h | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/doc/vf_get_prop_name_string.3 b/doc/vf_get_prop_name_string.3
+index 7d1cfee..aa3bf3b 100644
+--- a/doc/vf_get_prop_name_string.3
++++ b/doc/vf_get_prop_name_string.3
+@@ -23,7 +23,7 @@ extern char *vf_get_prop_name_string
+ Property to locate string from.
+ .TP
+ .B "uint32_t n_string"
+-Index to string requred.
++Index to string required.
+ .SH "DESCRIPTION"
+ Get n'th name string. For example a property may be defined as:
+
+diff --git a/doc/vf_get_prop_value_string.3 b/doc/vf_get_prop_value_string.3
+index 4fc9a81..afc6f66 100644
+--- a/doc/vf_get_prop_value_string.3
++++ b/doc/vf_get_prop_value_string.3
+@@ -23,7 +23,7 @@ extern char *vf_get_prop_value_string
+ Property to locate string from.
+ .TP
+ .B "uint32_t n_string"
+-Index to string requred.
++Index to string required.
+ .SH "DESCRIPTION"
+ Obtain string pointer value from VF_PROP_T. For example a property
+ may be defined as:
+diff --git a/vformat/vf_iface.h b/vformat/vf_iface.h
+index ab5e8d9..12c5f22 100644
+--- a/vformat/vf_iface.h
++++ b/vformat/vf_iface.h
+@@ -906,7 +906,7 @@ extern VFORMATDECLSPEC bool_t vf_set_prop_value(
+
+ extern VFORMATDECLSPEC char *vf_get_prop_value_string(
+ VF_PROP_T *p_prop, /* Property to locate string from */
+- uint32_t n_string /* Index to string requred */
++ uint32_t n_string /* Index to string required */
+ );
+
+
+@@ -931,7 +931,7 @@ extern VFORMATDECLSPEC char *vf_get_prop_value_string(
+
+ extern VFORMATDECLSPEC char *vf_get_prop_name_string(
+ VF_PROP_T *p_prop, /* Property to locate string from */
+- uint32_t n_string /* Index to string requred */
++ uint32_t n_string /* Index to string required */
+ );
+
+
+--
+1.7.6.3
+
diff --git a/libs/libvformat/DETAILS b/libs/libvformat/DETAILS
new file mode 100755
index 0000000..83fe870
--- /dev/null
+++ b/libs/libvformat/DETAILS
@@ -0,0 +1,15 @@
+ SPELL=libvformat
+ VERSION=1.13
+ XVERSION=a6r3
+ SOURCE="${SPELL}-${VERSION}-${XVERSION}.tar.gz"
+ SOURCE_URL[0]=${SOURCEFORGE_URL}/vformat/vformat/Alpha-6-Linux/${SOURCE}
+
SOURCE_HASH=sha512:f809c993db004be0c490a79b123c4357dc4e7106bf7875a91ef3a23a6aaeac1135b53248feb5ab739994e79749eb8aca2ac4a544da9df274b7aa87c1f665076b
+SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-${VERSION}"
+ WEB_SITE="http://vformat.sourceforge.net/";
+ LICENSE[0]=GPL
+ ENTERED=20121220
+ SHORT="small, portable library for accessing vformat objects eg
VCARD"
+cat << EOF
+This library provides an interface to vcard files according to the
definitions
+laid down in the rfc2426.
+EOF
diff --git a/libs/libvformat/HISTORY b/libs/libvformat/HISTORY
new file mode 100644
index 0000000..686061b
--- /dev/null
+++ b/libs/libvformat/HISTORY
@@ -0,0 +1,9 @@
+2012-12-20 Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>
+ * 0004-Provide-info-documentation.patch,
+ 0005-Add-manpages.patch,
+ 0006-Remove-leading-space-when-unfolding.patch,
+ 0007-Cast-NULL-in-void-in-functions-using-va_arg.patch,
+ 0008-Fix-typo-in-manpage-and-source.patch,
+ DETAILS,
+ PRE_BUILD: spell created
+
diff --git a/libs/libvformat/PRE_BUILD b/libs/libvformat/PRE_BUILD
new file mode 100755
index 0000000..852b201
--- /dev/null
+++ b/libs/libvformat/PRE_BUILD
@@ -0,0 +1,11 @@
+default_pre_build &&
+cd ${SOURCE_DIRECTORY} &&
+
+
+patch -p1 < ${SPELL_DIRECTORY}/0004-Provide-info-documentation.patch &&
+patch -p1 < ${SPELL_DIRECTORY}/0005-Add-manpages.patch &&
+patch -p1 <
${SPELL_DIRECTORY}/0006-Remove-leading-space-when-unfolding.patch &&
+patch -p1 <
${SPELL_DIRECTORY}/0007-Cast-NULL-in-void-in-functions-using-va_arg.patch &&
+patch -p1 < ${SPELL_DIRECTORY}/0008-Fix-typo-in-manpage-and-source.patch &&
+
+autoreconf -fi
diff --git a/mail/lbdb/DEPENDS b/mail/lbdb/DEPENDS
new file mode 100755
index 0000000..03b8f2c
--- /dev/null
+++ b/mail/lbdb/DEPENDS
@@ -0,0 +1,6 @@
+depends libvformat &&
+depends perl &&
+suggest_depends mutt "" "" "use lbdb in mutt's query function" &&
+suggest_depends procmail "" "" "pipe incoming mails to lbdb for analysis" &&
+suggest_depends finger "" "" "for lbdb's finger backend" &&
+suggest_depends abook "" "" "for lbdb's abook backend"
diff --git a/mail/lbdb/DETAILS b/mail/lbdb/DETAILS
new file mode 100755
index 0000000..9690df8
--- /dev/null
+++ b/mail/lbdb/DETAILS
@@ -0,0 +1,34 @@
+ SPELL=lbdb
+ VERSION=0.38
+ SOURCE="${SPELL}_${VERSION}.tar.gz"
+ SOURCE_URL[0]=http://www.spinnaker.de/debian/${SOURCE}
+
SOURCE_HASH=sha512:7c8dca22fb82f127e773086517ed21deecc78d4b595ef0e08467d05424f0f11a6d5ce3bcea7827ab7e2e78d1cf96c71b1ce65f9fff5263a4d959374ea1865cac
+SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-${VERSION}"
+ WEB_SITE="http://www.spinnaker.de/lbdb/";
+ LICENSE[0]=GPL
+ ENTERED=20121220
+ SHORT="Little Brother's DataBase for the mutt mail reader"
+cat << EOF
+This package consists of a set of small tools, which collect mail addresses
+from several sources and offer these addresses to the mutt external query
+feature. At the moment the following modules are supported:
+ - m_finger (uses the finger(1) command)
+ - m_inmail (scans incoming mail for addresses)
+ - m_passwd (searches /etc/passwd)
+ - m_yppasswd (searches the YP password database)
+ - m_nispasswd (searches the NIS password database)
+ - m_getent (searches the configured password database)
+ - m_pgp2, m_pgp5, m_gpg (searches your PGP or GnuPG keyrings)
+ - m_fido (searches the Fidonet nodelist)
+ - m_abook (uses the address book application abook(1))
+ - m_addr_email (uses addr-email from the addressbook Tk program)
+ - m_muttalias (searches your Mutt mail aliases)
+ - m_pine (searches your Pine addressbook files)
+ - m_wanderlust (search the WanderLust alias database)
+ - m_palm (uses your Palm database; needs libpalm-perl package)
+ - m_gnomecard (uses GnomeCard database files)
+ - m_bbdb (search your BBDB (big brother database))
+ - m_ldap (query some LDAP server)
+ - m_evolution (search in the Evolution addressbook)
+ - m_vcf (search in vcard files using libvformat)
+EOF
diff --git a/mail/lbdb/HISTORY b/mail/lbdb/HISTORY
new file mode 100644
index 0000000..692d9d5
--- /dev/null
+++ b/mail/lbdb/HISTORY
@@ -0,0 +1,3 @@
+2012-12-20 Florian Franzmann <siflfran AT hawo.stw.uni-erlangen.de>
+ * DEPENDS, DETAILS: spell created
+



  • [SM-Commit] GIT changes to master grimoire by Florian Franzmann (4af1cc625bdb1164c3b9c69b94a2f7f9183a17e9), Florian Franzmann, 12/22/2012

Archive powered by MHonArc 2.6.24.

Top of Page