aboutsummaryrefslogtreecommitdiff
path: root/vendor/voclient/libvoclient
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /vendor/voclient/libvoclient
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'vendor/voclient/libvoclient')
-rw-r--r--vendor/voclient/libvoclient/Doxyfile1514
-rw-r--r--vendor/voclient/libvoclient/Makefile216
-rw-r--r--vendor/voclient/libvoclient/Makefile.am42
-rw-r--r--vendor/voclient/libvoclient/Makefile.in530
-rw-r--r--vendor/voclient/libvoclient/Makefile.man185
-rw-r--r--vendor/voclient/libvoclient/Makefile.orig183
-rw-r--r--vendor/voclient/libvoclient/README7
-rw-r--r--vendor/voclient/libvoclient/VOClient.h353
-rw-r--r--vendor/voclient/libvoclient/VOClient.i212
-rw-r--r--vendor/voclient/libvoclient/_api136
-rw-r--r--vendor/voclient/libvoclient/_d90
-rw-r--r--vendor/voclient/libvoclient/_msg65
-rw-r--r--vendor/voclient/libvoclient/doc/html/VOClient_8h_source.html380
-rw-r--r--vendor/voclient/libvoclient/doc/html/annotated.html31
-rw-r--r--vendor/voclient/libvoclient/doc/html/classes.html32
-rw-r--r--vendor/voclient/libvoclient/doc/html/doxygen.css441
-rw-r--r--vendor/voclient/libvoclient/doc/html/doxygen.pngbin0 -> 1281 bytes
-rw-r--r--vendor/voclient/libvoclient/doc/html/files.html42
-rw-r--r--vendor/voclient/libvoclient/doc/html/globals.html191
-rw-r--r--vendor/voclient/libvoclient/doc/html/globals_defs.html42
-rw-r--r--vendor/voclient/libvoclient/doc/html/globals_func.html186
-rw-r--r--vendor/voclient/libvoclient/doc/html/index.html25
-rw-r--r--vendor/voclient/libvoclient/doc/html/structObject-members.html36
-rw-r--r--vendor/voclient/libvoclient/doc/html/structObject.html58
-rw-r--r--vendor/voclient/libvoclient/doc/html/tab_b.gifbin0 -> 35 bytes
-rw-r--r--vendor/voclient/libvoclient/doc/html/tab_l.gifbin0 -> 706 bytes
-rw-r--r--vendor/voclient/libvoclient/doc/html/tab_r.gifbin0 -> 2585 bytes
-rw-r--r--vendor/voclient/libvoclient/doc/html/tabs.css105
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocMsg_8c.html960
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocRegistry_8c.html745
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocRegistry__f77_8c.html147
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocRegistry__spp_8c.html730
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocSesame_8c.html305
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocSesame__f77_8c.html106
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocSesame__spp_8c.html305
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocSkybot_8c.html69
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocUtil__f77_8c.html91
-rw-r--r--vendor/voclient/libvoclient/doc/html/vocUtil__spp_8c.html122
-rw-r--r--vendor/voclient/libvoclient/doc/latex/Makefile19
-rw-r--r--vendor/voclient/libvoclient/doc/latex/annotated.tex4
-rw-r--r--vendor/voclient/libvoclient/doc/latex/doxygen.sty97
-rw-r--r--vendor/voclient/libvoclient/doc/latex/files.tex14
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.aux66
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.idx16
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.log478
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.out19
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.pdfbin0 -> 27890 bytes
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.tex72
-rw-r--r--vendor/voclient/libvoclient/doc/latex/refman.toc19
-rw-r--r--vendor/voclient/libvoclient/doc/latex/structObject.tex50
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocMsg_8c.tex531
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocRegistry_8c.tex413
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocRegistry__f77_8c.tex204
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocRegistry__spp_8c.tex463
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocSesame_8c.tex229
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocSesame__f77_8c.tex88
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocSesame__spp_8c.tex233
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocSkybot_8c.tex72
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocUtil__f77_8c.tex65
-rw-r--r--vendor/voclient/libvoclient/doc/latex/vocUtil__spp_8c.tex99
-rw-r--r--vendor/voclient/libvoclient/doxygen.cfg1514
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/cone1.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/cone2.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/cone3.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/registry1.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/registry2.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/registry3.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/resolver.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/siap1.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/siap2.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/siap3.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/siap4.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/simple.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.deps/skybot.Po1
-rw-r--r--vendor/voclient/libvoclient/examples/.gdb_history5
-rw-r--r--vendor/voclient/libvoclient/examples/Makefile213
-rw-r--r--vendor/voclient/libvoclient/examples/Makefile.am62
-rw-r--r--vendor/voclient/libvoclient/examples/Makefile.in571
-rw-r--r--vendor/voclient/libvoclient/examples/Makefile.man192
-rw-r--r--vendor/voclient/libvoclient/examples/Makefile.orig191
-rw-r--r--vendor/voclient/libvoclient/examples/README2
-rw-r--r--vendor/voclient/libvoclient/examples/cone1.c156
-rw-r--r--vendor/voclient/libvoclient/examples/cone2.c111
-rw-r--r--vendor/voclient/libvoclient/examples/cone3.c97
-rw-r--r--vendor/voclient/libvoclient/examples/datascope.cl124
-rw-r--r--vendor/voclient/libvoclient/examples/f77cone.f108
-rw-r--r--vendor/voclient/libvoclient/examples/f77registry.f45
-rw-r--r--vendor/voclient/libvoclient/examples/f77sesame.f23
-rw-r--r--vendor/voclient/libvoclient/examples/f77siap.f118
-rw-r--r--vendor/voclient/libvoclient/examples/f77skybot.f38
-rw-r--r--vendor/voclient/libvoclient/examples/messier.cl22
-rw-r--r--vendor/voclient/libvoclient/examples/registry1.c140
-rw-r--r--vendor/voclient/libvoclient/examples/registry2.c151
-rw-r--r--vendor/voclient/libvoclient/examples/registry3.c132
-rw-r--r--vendor/voclient/libvoclient/examples/resolver.c37
-rw-r--r--vendor/voclient/libvoclient/examples/resolver.java32
-rw-r--r--vendor/voclient/libvoclient/examples/siap1.c159
-rw-r--r--vendor/voclient/libvoclient/examples/siap2.c95
-rw-r--r--vendor/voclient/libvoclient/examples/siap3.c94
-rw-r--r--vendor/voclient/libvoclient/examples/siap4.c146
-rw-r--r--vendor/voclient/libvoclient/examples/siap5.c133
-rw-r--r--vendor/voclient/libvoclient/examples/simple.c81
-rw-r--r--vendor/voclient/libvoclient/examples/simple.java23
-rwxr-xr-xvendor/voclient/libvoclient/examples/simple.pl6
-rwxr-xr-xvendor/voclient/libvoclient/examples/simple.py6
-rwxr-xr-xvendor/voclient/libvoclient/examples/simple.tcl5
-rw-r--r--vendor/voclient/libvoclient/examples/skybot.c59
-rw-r--r--vendor/voclient/libvoclient/examples/skyportal1_java85
-rw-r--r--vendor/voclient/libvoclient/examples/spptest.x471
-rw-r--r--vendor/voclient/libvoclient/examples/ssap1.c156
-rw-r--r--vendor/voclient/libvoclient/examples/ssap2.c95
-rw-r--r--vendor/voclient/libvoclient/examples/ssap3.c94
-rw-r--r--vendor/voclient/libvoclient/examples/ssap4.c141
-rw-r--r--vendor/voclient/libvoclient/examples/ssap5.c135
-rw-r--r--vendor/voclient/libvoclient/mkpkg19
-rw-r--r--vendor/voclient/libvoclient/vocDAL.c1321
-rw-r--r--vendor/voclient/libvoclient/vocDAL_f77.c827
-rw-r--r--vendor/voclient/libvoclient/vocDAL_spp.c891
-rw-r--r--vendor/voclient/libvoclient/vocLib.c920
-rw-r--r--vendor/voclient/libvoclient/vocLib_f77.c138
-rw-r--r--vendor/voclient/libvoclient/vocLib_spp.c131
-rw-r--r--vendor/voclient/libvoclient/vocMsg.c1088
-rw-r--r--vendor/voclient/libvoclient/vocRegistry.c765
-rw-r--r--vendor/voclient/libvoclient/vocRegistry_f77.c482
-rw-r--r--vendor/voclient/libvoclient/vocRegistry_spp.c468
-rw-r--r--vendor/voclient/libvoclient/vocSesame.c492
-rw-r--r--vendor/voclient/libvoclient/vocSesame_f77.c202
-rw-r--r--vendor/voclient/libvoclient/vocSesame_spp.c213
-rw-r--r--vendor/voclient/libvoclient/vocSkybot.c261
-rw-r--r--vendor/voclient/libvoclient/vocSkybot_f77.c196
-rw-r--r--vendor/voclient/libvoclient/vocSkybot_spp.c208
-rw-r--r--vendor/voclient/libvoclient/vocUtil_f77.c110
-rw-r--r--vendor/voclient/libvoclient/vocUtil_spp.c193
-rw-r--r--vendor/voclient/libvoclient/voclient.py121
134 files changed, 27060 insertions, 0 deletions
diff --git a/vendor/voclient/libvoclient/Doxyfile b/vendor/voclient/libvoclient/Doxyfile
new file mode 100644
index 00000000..21f25f05
--- /dev/null
+++ b/vendor/voclient/libvoclient/Doxyfile
@@ -0,0 +1,1514 @@
+# Doxyfile 1.5.9
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "VOClient API"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ./doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature. Other possible values
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW = NONE
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/vendor/voclient/libvoclient/Makefile b/vendor/voclient/libvoclient/Makefile
new file mode 100644
index 00000000..0ac87dde
--- /dev/null
+++ b/vendor/voclient/libvoclient/Makefile
@@ -0,0 +1,216 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#// Makefile for the VOClient C API procedures
+#//
+#// M. Fitzpatrick, NOAO, June 2006 initial version
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = VOClient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE)
+ifeq ($(PLATFORM),Darwin)
+ ifeq ($(PLMACH),x86_64)
+ CARCH = -m64 -mmacosx-version-min=10.5
+ else
+ CARCH = -arch i386 -m32 -mmacosx-version-min=10.4
+ endif
+ ifdef IRAFARCH
+ ifeq ($(IRAFARCH),macintel)
+ CARCH = -m64 -mmacosx-version-min=10.5
+ else
+ CARCH = -arch i386 -m32 -mmacosx-version-min=10.5
+ endif
+ endif
+else
+ CARCH =
+endif
+
+#CFLAGS = -O2 -DDEBUG -D$(PLATFORM)
+CFLAGS = -g -Wall -D$(PLATFORM) $(CARCH)
+
+
+
+# list of source and include files
+
+SRCS = vocDAL.c vocDAL_f77.c vocDAL_spp.c \
+ vocLib.c vocLib_f77.c vocLib_spp.c \
+ vocRegistry.c vocRegistry_f77.c vocRegistry_spp.c \
+ vocSesame.c vocSesame_f77.c vocSesame_spp.c \
+ vocSkybot.c vocSkybot_f77.c vocSkybot_spp.c \
+ vocUtil_f77.c vocUtil_spp.c vocMsg.c
+OBJS = vocDAL.o vocDAL_f77.o vocDAL_spp.o \
+ vocLib.o vocLib_f77.o vocLib_spp.o \
+ vocRegistry.o vocRegistry_f77.o vocRegistry_spp.o \
+ vocSesame.o vocSesame_f77.o vocSesame_spp.o \
+ vocSkybot.o vocSkybot_f77.o vocSkybot_spp.o \
+ vocUtil_f77.o vocUtil_spp.o vocMsg.o
+INCS = VOClient.h
+
+WRAP_SRCS = vocDAL.c vocLib.c vocMsg.c vocSesame.c vocSkybot.c vocRegistry.c
+WRAP_OBJS = vocDAL.o vocLib.o vocMsg.o vocSesame.o vocSkybot.o vocRegistry.o
+
+
+
+
+# targets
+
+all: Static Shared $(STATICLIB)
+
+all_static: Static $(STATICLIB)
+
+all_shared: Shared $(SHAREDLIB)
+
+World:
+ make clean
+ make all
+ make wrapper_code
+ make wrapper_libs
+ make install
+
+clean:
+ /bin/rm -rf Shared Static *.o
+ /bin/rm -rf lib$(NAME).* *$(NAME).so
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf dataset.* examples/dataset.*
+ /bin/rm -rf SWIG* vocWrap*.c php_*.h
+
+help: HELP
+
+install: all
+ cp VOClient.h ../include
+ cp lib$(NAME).* ../lib
+ ranlib ../lib/lib$(NAME).a
+
+install-vo-cli: all
+ cp VOClient.h ../include
+ cp lib$(NAME).* ../../lib
+ ranlib ../../lib/lib$(NAME).a
+
+
+
+###############################################################################
+# SWIG Wrapper code generation
+###############################################################################
+
+wrapper_code: tcl_wrap py_wrap perl_wrap java_wrap php_wrap ruby_wrap mono_wrap
+
+tcl_wrap: VOClient.i
+ (swig -tcl -o vocWrapTcl.c VOClient.i )
+ make tcl_lib
+
+py_wrap: VOClient.i
+ (swig -python -o vocWrapPython.c VOClient.i )
+ make python_lib
+
+perl_wrap: VOClient.i
+ (swig -perl -o vocWrapPerl.c VOClient.i )
+ make perl_lib
+
+java_wrap: VOClient.i
+ (swig -java -o vocWrapJava.c VOClient.i )
+ make java_lib
+
+php_wrap: VOClient.i
+ (swig -php -o vocWrapPhp.c VOClient.i )
+ make php_lib
+
+ruby_wrap: VOClient.i
+ (swig -ruby -o vocWrapRuby.c VOClient.i )
+ make ruby_lib
+
+mono_wrap: VOClient.i
+ (swig -csharp -o vocWrapCSharp.c VOClient.i )
+ make mono_lib
+
+
+
+###############################################################################
+# SWIG Wrapper share library builds -- highly platform dependent!!
+###############################################################################
+
+wrapper_libs: wrapper_code tcl_lib python_lib perl_lib java_lib
+
+tcl_lib: VOClient.i
+ $(CC) -fPIC -c $(SRCS) vocWrapTcl.c
+ $(CC) -shared $(OBJS) vocWrapTcl.o -o $(NAME).so
+ $(RM) VOClient_wrap.*
+
+
+PY_INCS = -I. -I/usr/include/python2.2 -I/usr/include/python2.3 \
+ -I/usr/include/python2.4 -I/usr/include/python2.5
+
+python_lib: VOClient.i
+ $(CC) -w -c $(PY_INCS) $(SRCS) vocWrapPython.c
+ $(CC) -fPIC -shared $(OBJS) vocWrapPython.o -o _$(NAME).so \
+ -I/usr/include/python2.6/ -lpython2.6
+ $(RM) VOClient_wrap.*
+
+perl_lib: VOClient.i
+ $(CC) -c $(SRCS) vocWrapPerl.c `perl -MExtUtils::Embed -e ccopts`
+ ld -G $(OBJS) -o $(NAME).so
+ $(RM) VOClient_wrap.*
+
+
+JWRAP_FLAGS = -I/usr/java/j2sdk/include/ -I/usr/java/j2sdk/include/linux
+
+java_lib: VOClient.i
+ $(CC) -fpic -c $(WRAP_SRCS) vocWrapJava.c $(JWRAP_FLAGS)
+ $(CC) -shared $(WRAP_OBJS) vocWrapJava.o -o lib$(NAME).so
+ $(RM) VOClient_wrap.*
+
+
+PHP_INCS = -I. -I/usr/include/php -I/usr/local/include/php -I/usr/local/php \
+ -I/usr/include/php/Zend -I/usr/local/include/php/Zend
+
+php_lib: VOClient.i
+ $(CC) -fpic -c $(PHP_INCS) $(WRAP_SRCS) vocWrapPhp.c
+ $(CC) -shared $(WRAP_OBJS) vocWrapPhp.o -o $(NAME).so
+ $(RM) $(NAME)_wrap.*
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ $(CC) $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ $(CC) $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/Makefile.am b/vendor/voclient/libvoclient/Makefile.am
new file mode 100644
index 00000000..a73aa215
--- /dev/null
+++ b/vendor/voclient/libvoclient/Makefile.am
@@ -0,0 +1,42 @@
+## VOClient client-side API bindings.
+## Process this file with automake to produce Makefile.in
+
+
+# VOClient libraries.
+lib_LTLIBRARIES = libvoclient.la
+
+libvoclient_la_SOURCES = \
+ vocDAL.c vocDAL_f77.c vocDAL_spp.c \
+ vocLib.c vocLib_f77.c vocLib_spp.c \
+ vocRegistry.c vocRegistry_f77.c vocRegistry_spp.c \
+ vocSesame.c vocSesame_f77.c vocSesame_spp.c \
+ vocSkybot.c vocSkybot_f77.c vocSkybot_spp.c \
+ vocUtil_f77.c vocUtil_spp.c vocMsg.c
+
+libvoclient_la_LIBADD = @LTLIBOBJS@
+
+
+## VOClient includes.
+include_HEADERS = VOClient.h
+
+
+## Language-independent SWIG interface to VOClient.
+#SWIG_SOURCES = VOClient.i
+
+# Python binding.
+#BUILT_SOURCES = vocWrapPython.c
+#pkgpython_PYTHON = voclient.py
+CLEANFILES = voclient* SWIG* php_*.h
+
+#pkgpyexec_LTLIBRARIES = _voclient.la
+#_voclient_la_SOURCES = vocWrapPython.c $(SWIG_SOURCES)
+#_voclient_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS)
+#_voclient_la_LDFLAGS = -module
+#_voclient_la_LIBADD = libvoclient.la
+
+#vocWrapPython.c : $(SWIG_SOURCES)
+# $(SWIG) $(SWIG_PYTHON_OPT) -o $@ $<
+
+java_wrap: VOClient.i
+ $(SWIG) -java -o vocWrapJava.c VOClient.i
+
diff --git a/vendor/voclient/libvoclient/Makefile.in b/vendor/voclient/libvoclient/Makefile.in
new file mode 100644
index 00000000..14411748
--- /dev/null
+++ b/vendor/voclient/libvoclient/Makefile.in
@@ -0,0 +1,530 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = clientapi
+DIST_COMMON = README $(include_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/config/ac_pkg_swig.m4 \
+ $(top_srcdir)/config/ac_python_devel.m4 \
+ $(top_srcdir)/config/ac_python_module.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libvoclient_la_DEPENDENCIES = @LTLIBOBJS@
+am_libvoclient_la_OBJECTS = vocDAL.lo vocDAL_f77.lo vocDAL_spp.lo \
+ vocLib.lo vocLib_f77.lo vocLib_spp.lo vocRegistry.lo \
+ vocRegistry_f77.lo vocRegistry_spp.lo vocSesame.lo \
+ vocSesame_f77.lo vocSesame_spp.lo vocSkybot.lo \
+ vocSkybot_f77.lo vocSkybot_spp.lo vocUtil_f77.lo \
+ vocUtil_spp.lo vocMsg.lo
+libvoclient_la_OBJECTS = $(am_libvoclient_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libvoclient_la_SOURCES)
+DIST_SOURCES = $(libvoclient_la_SOURCES)
+includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# VOClient libraries.
+lib_LTLIBRARIES = libvoclient.la
+libvoclient_la_SOURCES = \
+ vocDAL.c vocDAL_f77.c vocDAL_spp.c \
+ vocLib.c vocLib_f77.c vocLib_spp.c \
+ vocRegistry.c vocRegistry_f77.c vocRegistry_spp.c \
+ vocSesame.c vocSesame_f77.c vocSesame_spp.c \
+ vocSkybot.c vocSkybot_f77.c vocSkybot_spp.c \
+ vocUtil_f77.c vocUtil_spp.c vocMsg.c
+
+libvoclient_la_LIBADD = @LTLIBOBJS@
+include_HEADERS = VOClient.h
+
+#SWIG_SOURCES = VOClient.i
+
+# Python binding.
+#BUILT_SOURCES = vocWrapPython.c
+#pkgpython_PYTHON = voclient.py
+CLEANFILES = voclient* SWIG* php_*.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign clientapi/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign clientapi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libvoclient.la: $(libvoclient_la_OBJECTS) $(libvoclient_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libvoclient_la_LDFLAGS) $(libvoclient_la_OBJECTS) $(libvoclient_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocDAL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocDAL_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocDAL_spp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocLib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocLib_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocLib_spp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocMsg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocRegistry.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocRegistry_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocRegistry_spp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSesame.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSesame_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSesame_spp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSkybot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSkybot_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocSkybot_spp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocUtil_f77.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vocUtil_spp.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
+ @list='$(include_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
+ $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_HEADERS)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
+ rm -f "$(DESTDIR)$(includedir)/$$f"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-exec-am: install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS uninstall-info-am \
+ uninstall-libLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-includeHEADERS install-info \
+ install-info-am install-libLTLIBRARIES install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-includeHEADERS uninstall-info-am \
+ uninstall-libLTLIBRARIES
+
+
+#pkgpyexec_LTLIBRARIES = _voclient.la
+#_voclient_la_SOURCES = vocWrapPython.c $(SWIG_SOURCES)
+#_voclient_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS)
+#_voclient_la_LDFLAGS = -module
+#_voclient_la_LIBADD = libvoclient.la
+
+#vocWrapPython.c : $(SWIG_SOURCES)
+# $(SWIG) $(SWIG_PYTHON_OPT) -o $@ $<
+
+java_wrap: VOClient.i
+ $(SWIG) -java -o vocWrapJava.c VOClient.i
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/vendor/voclient/libvoclient/Makefile.man b/vendor/voclient/libvoclient/Makefile.man
new file mode 100644
index 00000000..360b6980
--- /dev/null
+++ b/vendor/voclient/libvoclient/Makefile.man
@@ -0,0 +1,185 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#// Makefile for the VOClient C API procedures
+#// (Classic non-autoconf/automake version)
+#//
+#// M. Fitzpatrick, NOAO, June 2006 initial version
+#// D.Tody, NRAO Aug 2006 added autoconf support
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = voclient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so.$(VERSION)
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE)
+#CFLAGS = -O2 -DDEBUG -D$(PLATFORM)
+CFLAGS = -g -Wall -D$(PLATFORM)
+
+
+# list of source and include files
+
+SRCS = vocDAL.c vocDAL_f77.c vocDAL_spp.c \
+ vocLib.c vocLib_f77.c vocLib_spp.c \
+ vocRegistry.c vocRegistry_f77.c vocRegistry_spp.c \
+ vocSesame.c vocSesame_f77.c vocSesame_spp.c \
+ vocSkybot.c vocSkybot_f77.c vocSkybot_spp.c \
+ vocUtil_f77.c vocUtil_spp.c vocMsg.c
+OBJS = vocDAL.o vocDAL_f77.o vocDAL_spp.o \
+ vocLib.o vocLib_f77.o vocLib_spp.o \
+ vocRegistry.o vocRegistry_f77.o vocRegistry_spp.o \
+ vocSesame.o vocSesame_f77.o vocSesame_spp.o \
+ vocSkybot.o vocSkybot_f77.o vocSkybot_spp.o \
+ vocUtil_f77.o vocUtil_spp.o vocMsg.o
+INCS = VOClient.h
+
+WRAP_SRCS = vocDAL.c vocLib.c vocMsg.c vocSesame.c vocSkybot.c vocRegistry.c
+WRAP_OBJS = vocDAL.o vocLib.o vocMsg.o vocSesame.o vocSkybot.o vocRegistry.o
+
+
+
+
+# targets
+
+all: Static $(STATICLIB)
+
+all_static: Static $(STATICLIB)
+
+all_shared: Shared $(SHAREDLIB)
+
+World:
+ make clean
+ make all
+ make wrapper_code
+ make wrapper_libs
+ make install
+
+clean:
+ /bin/rm -rf Shared Static *.o
+ /bin/rm -rf libvoclient.* *voclient.so
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf dataset.* examples/dataset.*
+ /bin/rm -rf voclient* SWIG* php_*.h
+
+help: HELP
+
+install: all
+ cp VOClient.h ../include
+ cp libvoclient.a ../lib
+
+
+
+###############################################################################
+# SWIG Wrapper code generation
+###############################################################################
+
+wrapper_code: tcl_wrap py_wrap perl_wrap java_wrap php_wrap ruby_wrap mono_wrap
+
+tcl_wrap: VOClient.i
+ (swig -tcl -o vocWrapTcl.c VOClient.i )
+
+py_wrap: VOClient.i
+ (swig -python -o vocWrapPython.c VOClient.i )
+
+perl_wrap: VOClient.i
+ (swig -perl -o vocWrapPerl.c VOClient.i )
+
+java_wrap: VOClient.i
+ (swig -java -o vocWrapJava.c VOClient.i )
+
+php_wrap: VOClient.i
+ (swig -php -o vocWrapPhp.c VOClient.i )
+
+ruby_wrap: VOClient.i
+ (swig -ruby -o vocWrapRuby.c VOClient.i )
+
+mono_wrap: VOClient.i
+ (swig -csharp -o vocWrapCSharp.c VOClient.i )
+
+
+
+###############################################################################
+# SWIG Wrapper share library builds -- highly platform dependent!!
+###############################################################################
+
+wrapper_libs: wrapper_code tcl_lib python_lib perl_lib java_lib
+
+tcl_lib: VOClient.i
+ $(CC) -fPIC -c $(SRCS) vocWrapTcl.c
+ $(CC) -shared $(OBJS) vocWrapTcl.o -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+PY_INCS = -I. -I/usr/include/python2.3 -I/usr/include/python2.4
+
+python_lib: VOClient.i
+ $(CC) -w -c $(PY_INCS) $(SRCS) vocWrapPython.c
+ ld -shared $(OBJS) vocWrapPython.o -o _voclient.so
+ $(RM) VOClient_wrap.*
+
+perl_lib: VOClient.i
+ gcc -c $(SRCS) vocWrapPerl.c `perl -MExtUtils::Embed -e ccopts`
+ ld -G $(OBJS) -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+JWRAP_FLAGS = -I/usr/java/j2sdk/include/ -I/usr/java/j2sdk/include/linux
+
+java_lib: VOClient.i
+ gcc -fpic -c $(WRAP_SRCS) vocWrapJava.c $(JWRAP_FLAGS)
+ gcc -shared $(WRAP_OBJS) vocWrapJava.o -o libvoclient.so
+ $(RM) VOClient_wrap.*
+
+
+PHP_INCS = -I. -I/usr/include/php -I/usr/local/include/php -I/usr/local/php \
+ -I/usr/include/php/Zend -I/usr/local/include/php/Zend
+
+php_lib: VOClient.i
+ gcc -fpic -c $(PHP_INCS) $(WRAP_SRCS) vocWrapPhp.c
+ gcc -shared $(WRAP_OBJS) vocWrapPhp.o -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/Makefile.orig b/vendor/voclient/libvoclient/Makefile.orig
new file mode 100644
index 00000000..f544b509
--- /dev/null
+++ b/vendor/voclient/libvoclient/Makefile.orig
@@ -0,0 +1,183 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#// Makefile for the VOClient C API procedures
+#//
+#// M. Fitzpatrick, NOAO, June 2006 initial version
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = voclient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so.$(VERSION)
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE)
+#CFLAGS = -O2 -DDEBUG -D$(PLATFORM)
+CFLAGS = -g -Wall -D$(PLATFORM)
+
+
+# list of source and include files
+
+SRCS = vocDAL.c vocDAL_f77.c vocDAL_spp.c \
+ vocLib.c vocLib_f77.c vocLib_spp.c \
+ vocRegistry.c vocRegistry_f77.c vocRegistry_spp.c \
+ vocSesame.c vocSesame_f77.c vocSesame_spp.c \
+ vocSkybot.c vocSkybot_f77.c vocSkybot_spp.c \
+ vocUtil_f77.c vocUtil_spp.c vocMsg.c
+OBJS = vocDAL.o vocDAL_f77.o vocDAL_spp.o \
+ vocLib.o vocLib_f77.o vocLib_spp.o \
+ vocRegistry.o vocRegistry_f77.o vocRegistry_spp.o \
+ vocSesame.o vocSesame_f77.o vocSesame_spp.o \
+ vocSkybot.o vocSkybot_f77.o vocSkybot_spp.o \
+ vocUtil_f77.o vocUtil_spp.o vocMsg.o
+INCS = VOClient.h
+
+WRAP_SRCS = vocDAL.c vocLib.c vocMsg.c vocSesame.c vocSkybot.c vocRegistry.c
+WRAP_OBJS = vocDAL.o vocLib.o vocMsg.o vocSesame.o vocSkybot.o vocRegistry.o
+
+
+
+
+# targets
+
+all: Static $(STATICLIB)
+
+all_static: Static $(STATICLIB)
+
+all_shared: Shared $(SHAREDLIB)
+
+World:
+ make clean
+ make all
+ make wrapper_code
+ make wrapper_libs
+ make install
+
+clean:
+ /bin/rm -rf Shared Static *.o
+ /bin/rm -rf libvoclient.* *voclient.so
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf dataset.* examples/dataset.*
+ /bin/rm -rf voclient* SWIG* php_*.h
+
+help: HELP
+
+install: all
+ cp VOClient.h ../include
+ cp libvoclient.a ../lib
+
+
+
+###############################################################################
+# SWIG Wrapper code generation
+###############################################################################
+
+wrapper_code: tcl_wrap py_wrap perl_wrap java_wrap php_wrap ruby_wrap mono_wrap
+
+tcl_wrap: VOClient.i
+ (swig -tcl -o vocWrapTcl.c VOClient.i )
+
+py_wrap: VOClient.i
+ (swig -python -o vocWrapPython.c VOClient.i )
+
+perl_wrap: VOClient.i
+ (swig -perl -o vocWrapPerl.c VOClient.i )
+
+java_wrap: VOClient.i
+ (swig -java -o vocWrapJava.c VOClient.i )
+
+php_wrap: VOClient.i
+ (swig -php -o vocWrapPhp.c VOClient.i )
+
+ruby_wrap: VOClient.i
+ (swig -ruby -o vocWrapRuby.c VOClient.i )
+
+mono_wrap: VOClient.i
+ (swig -csharp -o vocWrapCSharp.c VOClient.i )
+
+
+
+###############################################################################
+# SWIG Wrapper share library builds -- highly platform dependent!!
+###############################################################################
+
+wrapper_libs: wrapper_code tcl_lib python_lib perl_lib java_lib
+
+tcl_lib: VOClient.i
+ $(CC) -fPIC -c $(SRCS) vocWrapTcl.c
+ $(CC) -shared $(OBJS) vocWrapTcl.o -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+PY_INCS = -I. -I/usr/include/python2.3 -I/usr/include/python2.4
+
+python_lib: VOClient.i
+ $(CC) -w -c $(PY_INCS) $(SRCS) vocWrapPython.c
+ ld -shared $(OBJS) vocWrapPython.o -o _voclient.so
+ $(RM) VOClient_wrap.*
+
+perl_lib: VOClient.i
+ gcc -c $(SRCS) vocWrapPerl.c `perl -MExtUtils::Embed -e ccopts`
+ ld -G $(OBJS) -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+JWRAP_FLAGS = -I/usr/java/j2sdk/include/ -I/usr/java/j2sdk/include/linux
+
+java_lib: VOClient.i
+ gcc -fpic -c $(WRAP_SRCS) vocWrapJava.c $(JWRAP_FLAGS)
+ gcc -shared $(WRAP_OBJS) vocWrapJava.o -o libvoclient.so
+ $(RM) VOClient_wrap.*
+
+
+PHP_INCS = -I. -I/usr/include/php -I/usr/local/include/php -I/usr/local/php \
+ -I/usr/include/php/Zend -I/usr/local/include/php/Zend
+
+php_lib: VOClient.i
+ gcc -fpic -c $(PHP_INCS) $(WRAP_SRCS) vocWrapPhp.c
+ gcc -shared $(WRAP_OBJS) vocWrapPhp.o -o voclient.so
+ $(RM) VOClient_wrap.*
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/README b/vendor/voclient/libvoclient/README
new file mode 100644
index 00000000..10f067b3
--- /dev/null
+++ b/vendor/voclient/libvoclient/README
@@ -0,0 +1,7 @@
+VOClient Client language/environment APIs
+------------------------------------------
+
+What is provided here is essentially the same VOClient functionality and
+API, bound into each target language or environment. These include so
+far, the base C binding, plus Java, FORTRAN, IRAF SPP, Python, PHP, Perl,
+and Tcl. An IDL binding is also planned.
diff --git a/vendor/voclient/libvoclient/VOClient.h b/vendor/voclient/libvoclient/VOClient.h
new file mode 100644
index 00000000..1f570078
--- /dev/null
+++ b/vendor/voclient/libvoclient/VOClient.h
@@ -0,0 +1,353 @@
+/*
+ * VOCLIENT.H == Global include file for the VOClient Interface.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/file.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/un.h>
+#include <netdb.h>
+#include <fcntl.h>
+
+
+/* Function prototypes */
+#ifdef __STDC__
+#include <stddef.h>
+#include <stdlib.h>
+#else
+char *getenv();
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For the signal handling. */
+typedef void (*SIGFUNC)();
+
+
+/* Interface Variables.
+ */
+
+
+
+#ifdef OK
+#undef OK
+#endif
+#define OK 0
+
+#ifdef ERR
+#undef ERR
+#endif
+#define ERR 1
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#define TRUE 1
+
+#ifdef FALSE
+#undef FALSE
+#endif
+#define FALSE 0
+
+#define DEF_SERVER "6200:localhost"
+#define DEF_NET_SERVER "9000:iraf-nvo.noao.edu"
+
+#define DEF_RUNID "VOClient"
+
+#define MSG_CALL 1
+#define MSG_RESULT 2
+#define MSG_MESSAGE 3
+
+#define TY_INT 1 /* result data types */
+#define TY_FLOAT 2
+#define TY_STRING 3
+#define TY_BULK 4
+
+#define SZ_MSGBUF 102400
+#define SZ_METHOD 64
+#define SZ_CLASS 64
+#define SZ_MSGSTR 65535
+#define SZ_PBUF 128
+#define SZ_FNAME 256
+#define MAX_VALUES 64
+
+#define DAL_CONN 1 /* DAL Connection Types */
+#define CONE_CONN 2 /* Simple Cone Search */
+#define SIAP_CONN 3 /* Simple Image Access */
+#define SSAP_CONN 4 /* Simple Spectral Access */
+#define SLAP_CONN 5 /* Simple Line Access */
+#define STAP_CONN 6 /* Synch TAP Access */
+
+#define CONE_SERVICE 1
+#define SIAP_SERVICE 2
+#define SSAP_SERVICE 3
+#define TAP_SERVICE 4
+#define REG_SERVICE 5
+#define SKYNODE_SERVICE 6
+#define WEB_SERVICE 7
+#define REST_SERVICE 8
+
+#define VOC_RAW 0
+#define VOC_CSV 1
+#define VOC_TSV 2
+#define VOC_ASCII 3
+#define VOC_VOTABLE 4
+
+#define VOC_NULL 0 /* integer NULL */
+
+
+typedef int ObjectID; /* DAL type aliases */
+typedef int DAL;
+typedef int Query;
+typedef int QResponse;
+typedef int QRecord;
+typedef int QRAttribute;
+
+typedef int Sesame; /* Name Resolver aliases */
+
+typedef int Skybot; /* SkyBoT Service aliases */
+
+typedef int RegQuery; /* Registry Query object */
+typedef int RegResult; /* Query Reuslt object */
+
+#ifdef _VOCLIENT_LIB_
+
+typedef struct vocMsg {
+ int type; /* message type */
+
+ ObjectID objId; /* for CALL messages */
+ char method[SZ_METHOD];
+ int nparams;
+
+ int status; /* for RESULT messages */
+ int restype;
+ int nitems;
+
+ char msgclass[SZ_CLASS]; /* for MESSAGE messages */
+ char msgstr[SZ_MSGSTR];
+
+ char message[SZ_MSGBUF]; /* fully formed message */
+} vocMsg_t;
+
+
+
+typedef struct vocRes {
+ int status; /* result status */
+ int type; /* type of result value */
+ int nitems; /* no. of returned items */
+ char value[MAX_VALUES][SZ_MSGSTR]; /* value strings */
+
+ void *buf; /* bulk data buffer */
+ int buflen; /* length of buffer */
+} vocRes_t;
+
+
+typedef struct VOClient {
+ char *server_host; /* socket to DALServer */
+ char *runid; /* RUNID logging string */
+ int server_port;
+ int io_chan;
+
+ int msg_port; /* asynch message socket */
+ int msg_chan;
+
+ int onetrip; /* private invocation flag */
+ int debug; /* debug flag */
+ int quiet; /* suppress output? */
+ int use_cache; /* use cached results? */
+ int use_runid; /* use RUNID parameter? */
+
+} VOClient, *VOClientPtr;
+
+
+#define VOC_DEBUG (vo->debug > 0)
+#define MSG_DEBUG (vo->debug > 1)
+
+#endif
+
+
+
+
+
+/* Prototype Declarations.
+ */
+
+/* DAL Interface procedures.
+ */
+char *voc_coneCaller (char *url, double ra, double dec, double sr,
+ int otype);
+int voc_coneCallerToFile (char *url, double ra, double dec, double sr,
+ int otype, char *file);
+
+char *voc_siapCaller (char *url, double ra, double dec, double rsize,
+ double dsize, char *fmt, int otype);
+int voc_siapCallerToFile (char *url, double ra, double dec,
+ double rsize, double dsize, char *fmt, int otype, char *file);
+char *voc_ssapCaller (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt, int otype);
+int voc_ssapCallerToFile (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt, int otype,
+ char *file);
+char *voc_getRawURL (char *url, int *nbytes);
+int voc_validateObject (int hcode);
+void voc_freePointer (char *ptr);
+
+
+int voc_initVOClient (char *opts);
+void voc_closeVOClient (int shutdown);
+void voc_abortVOClient (int code, char *msg);
+
+DAL voc_openConnection (char *service_url, int type);
+DAL voc_openConeConnection (char *service_url);
+DAL voc_openSiapConnection (char *service_url);
+DAL voc_openSsapConnection (char *service_url);
+void voc_closeConnection (DAL dal);
+
+int voc_getServiceCount (DAL dal);
+void voc_addServiceURL (DAL dal, char *service_url);
+char *voc_getServiceURL (DAL dal, int index);
+
+Query voc_getQuery (DAL dal, int type);
+Query voc_getConeQuery (DAL dal, double ra, double dec, double sr);
+Query voc_getSiapQuery (DAL dal, double ra, double dec,
+ double ra_size, double dec_size, char *format);
+Query voc_getSsapQuery (DAL dal, double ra, double dec,
+ double size, char *band, char *time, char *format);
+
+int voc_addIntParam (Query query, char *name, int value);
+int voc_addFloatParam (Query query, char *name, double value);
+int voc_addStringParam (Query query, char *name, char *value);
+
+char *voc_getQueryString (Query query, int type, int index);
+
+QResponse voc_executeQuery (Query query);
+QResponse voc_getQueryResponse (Query query);
+char *voc_executeCSV (Query query);
+char *voc_executeTSV (Query query);
+char *voc_executeASCII (Query query);
+char *voc_executeVOTable (Query query);
+int voc_executeQueryAs (Query query, char *fname, int type);
+int voc_getRecordCount (QResponse qr);
+
+QRecord voc_getRecord (QResponse qr, int recnum);
+char *voc_getFieldAttr (QResponse qr, int fieldnum, char *attr);
+
+QRAttribute voc_getAttribute (QRecord rec, char *attrname);
+
+int voc_intValue (QRAttribute v);
+double voc_floatValue (QRAttribute v);
+char *voc_stringValue (QRAttribute v);
+
+int voc_getIntAttr (QRecord rec, char *attr_name);
+double voc_getFloatAttr (QRecord rec, char *attr_name);
+char *voc_getStringAttr (QRecord rec, char *attr_name);
+
+char *voc_getAttrList (QRecord rec);
+int voc_getAttrCount (QRecord rec);
+
+void voc_setIntAttr (QRecord rec, char *attrname, int ival);
+void voc_setFloatAttr (QRecord rec, char *attrname, double dval) ;
+void voc_setStringAttr (QRecord rec, char *attrname, char *str);
+
+int voc_getDataset (QRecord rec, char *acref, char *fname);
+
+
+
+/* Registry Interface procedures.
+ */
+
+RegResult voc_regSearch (char *term1, char *term2, int orValues);
+RegResult voc_regSearchByService (char *svc, char *term, int orValues);
+RegQuery voc_regQuery (char *term, int orValues);
+void voc_regConstSvcType (RegQuery query, char *svc);
+void voc_regConstWaveband (RegQuery query, char *bpass);
+void voc_regDALOnly (RegQuery query, int value);
+void voc_regSortRes (RegQuery query, int value);
+void voc_regAddSearchTerm (RegQuery query, char *term, int orValue);
+void voc_regRemoveSearchTerm (RegQuery query, char *term);
+int voc_regGetSTCount (RegQuery query);
+char *voc_regGetQueryString (RegQuery query);
+RegResult voc_regExecute (RegQuery query);
+char *voc_regExecuteRaw (RegQuery query);
+
+int voc_resGetCount (RegResult res);
+char *voc_resGetStr (RegResult res, char *attribute, int index);
+double voc_resGetFloat (RegResult res, char *attribute, int index);
+int voc_resGetInt (RegResult res, char *attribute, int index);
+
+
+
+/* SESAME interface procedures.
+ */
+Sesame voc_nameResolver (char *target);
+char *voc_resolverPos (Sesame sr);
+double voc_resolverRA (Sesame sr);
+double voc_resolverDEC (Sesame sr);
+double voc_resolverRAErr (Sesame sr);
+double voc_resolverDECErr (Sesame sr);
+char *voc_resolverOtype (Sesame sr);
+
+
+
+/* SkyBoT interface procedures.
+ */
+Skybot voc_skybot (double ra, double dec, double rsz, double dsz,
+ double epoch);
+int voc_skybotNObjs (Skybot sb);
+char *voc_skybotStrAttr (Skybot sb, char *attr, int index);
+double voc_skybotDblAttr (Skybot sb, char *attr, int index);
+
+
+
+/***************************************************************************
+ * VOCMSG.C Prototypes
+ */
+#ifdef _VOCLIENT_LIB_
+
+vocMsg_t *msg_newCallMsg (ObjectID objid, char *method, int nparams);
+vocMsg_t *msg_newResultMsg (int status, int type, int nitems);
+vocMsg_t *msg_newMsg (char *msgclass, char *str);
+
+vocMsg_t *msg_shutdownMsg ();
+vocMsg_t *msg_quitMsg ();
+vocMsg_t *msg_ackMsg ();
+
+vocRes_t *msg_sendMsg (int fd, vocMsg_t *msg);
+int msg_sendRawMsg (int fd, vocMsg_t *msg);
+
+vocRes_t *msg_getResult (int fd);
+vocRes_t *msg_getResultToFile (int fd, char *fname, int overwrite);
+
+void msg_addIntParam (vocMsg_t *msg, int ival);
+void msg_addFloatParam (vocMsg_t *msg, double dval);
+void msg_addStringParam (vocMsg_t *msg, char *str);
+void msg_addIntResult (vocMsg_t *msg, int ival);
+void msg_addFloatResult (vocMsg_t *msg, double dval);
+void msg_addStringResult (vocMsg_t *msg, char *str);
+
+int msg_resultStatus (vocRes_t *res);
+int msg_resultType (vocRes_t *res);
+int msg_resultLength (vocRes_t *res);
+
+int msg_getIntResult (vocRes_t *res, int index);
+double msg_getFloatResult (vocRes_t *res, int index);
+char *msg_getStringResult (vocRes_t *res, int index);
+void *msg_getBuffer (vocRes_t *res);
+char *msg_getFilename (vocRes_t *res);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vendor/voclient/libvoclient/VOClient.i b/vendor/voclient/libvoclient/VOClient.i
new file mode 100644
index 00000000..a0afd0bf
--- /dev/null
+++ b/vendor/voclient/libvoclient/VOClient.i
@@ -0,0 +1,212 @@
+/* VOClient.i -- SWIG Interface definition file.
+ */
+%module voclient
+%{
+typedef int ObjectID;
+typedef int DAL;
+typedef int Query;
+typedef int QResponse;
+typedef int QRecord;
+typedef int QRAttribute;
+
+extern char *voc_coneCaller (char *url, double ra, double dec, double sr,
+ int otype);
+extern int voc_coneCallerToFile (char *url, double ra, double dec,
+ double sr, int otype, char *file);
+
+extern char *voc_siapCaller (char *url, double ra, double dec,
+ double rsize, double dsize, char *fmt, int otype);
+extern int voc_siapCallerToFile (char *url, double ra, double dec,
+ double rsize, double dsize, char *fmt, int otype,
+ char *file);
+extern char *voc_ssapCaller (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt);
+extern int voc_ssapCallerToFile (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt,
+ char *file);
+extern char *voc_getRawURL (char *url, int *nbytes);
+
+extern int voc_validateObject (int hcode);
+
+
+
+extern int voc_initVOClient (char *opts);
+extern void voc_closeVOClient (int shutdown);
+extern void voc_abortVOClient (int code, char *msg);
+extern DAL voc_openConnection (char *service_url, int type);
+extern DAL voc_openConeConnection (char *service_url);
+extern DAL voc_openSiapConnection (char *service_url);
+extern DAL voc_openSsapConnection (char *service_url);
+extern void voc_closeConnection (DAL dal);
+extern int voc_getServiceCount (DAL dal);
+extern void voc_addServiceURL (DAL dal, char *service_url);
+extern char *voc_getServiceURL (DAL dal, int index);
+extern Query voc_getQuery (DAL dal, int type);
+extern Query voc_getConeQuery (DAL dal, double ra, double dec, double sr);
+extern Query voc_getSiapQuery (DAL dal, double ra, double dec,
+ double ra_size, double dec_size, char *format);
+extern Query voc_getSsapQuery (DAL dal, double ra, double dec,
+ double size, char *band, char *time, char *format);
+extern int voc_addIntParam (Query query, char *name, int value);
+extern int voc_addFloatParam (Query query, char *name, double value);
+extern int voc_addStringParam (Query query, char *name, char *value);
+extern char *voc_getQueryString (Query query, int type, int index);
+extern QResponse voc_executeQuery (Query query);
+extern QResponse voc_getQueryResponse (Query query);
+extern char *voc_executeCSV (Query query);
+extern char *voc_executeVOTable (Query query);
+extern int voc_executeQueryAs (Query query, char *fname, int type);
+extern int voc_getRecordCount (QResponse qr);
+extern QRecord voc_getRecord (QResponse qr, int recnum);
+extern char *voc_getFieldAttr (QResponse qr, int fieldnum, char *attr);
+extern QRAttribute voc_getAttribute (QRecord rec, char *attrname);
+extern int voc_intValue (QRAttribute v);
+extern double voc_floatValue (QRAttribute v);
+extern char *voc_stringValue (QRAttribute v);
+extern int voc_getIntAttr (QRecord rec, char *attr_name);
+extern double voc_getFloatAttr (QRecord rec, char *attr_name);
+extern char *voc_getStringAttr (QRecord rec, char *attr_name);
+extern char *voc_getAttrList (QRecord rec);
+extern int voc_getAttrCount (QRecord rec);
+extern int voc_getDataset (QRecord rec, char *acref, char *fname);
+extern int voc_debugLevel (int level);
+
+
+
+typedef int RegResult;
+typedef int RegQuery;
+
+
+extern RegResult voc_regSearch (char *term1, char *term2, int orValues);
+extern RegResult voc_regSearchByService (char *svc, char *term, int orValues);
+extern RegQuery voc_regQuery (char *term, int orValues);
+extern void voc_regConstSvcType (RegQuery query, char *svc);
+extern void voc_regConstWaveband (RegQuery query, char *waveband);
+extern void voc_regDALOnly (RegQuery query, int value);
+extern void voc_regSortRes (RegQuery query, int value);
+extern void voc_regAddSearchTerm (RegQuery query, char *term,
+ int orValue);
+extern void voc_removeSearchTerm (RegQuery query, char *term);
+extern int voc_regGetSTCount (RegQuery query);
+extern char *voc_regGetQueryString (RegQuery query);
+extern RegResult voc_regExecute (RegQuery query);
+extern char *voc_regExecuteRaw (RegQuery query);
+extern int voc_resGetCount (RegResult res);
+extern char *voc_resGetStr (RegResult res, char *attribute, int index);
+extern double voc_resGetFloat (RegResult res, char *attribute, int index);
+extern int voc_resGetInt (RegResult res, char *attribute, int index);
+
+
+typedef int Sesame;
+
+extern Sesame voc_nameResolver (char *target);
+extern char *voc_resolverPos (Sesame sr);
+extern double voc_resolverRA (Sesame sr);
+extern double voc_resolverDEC (Sesame sr);
+extern double voc_resolverRAErr (Sesame sr);
+extern double voc_resolverDECErr (Sesame sr);
+extern char *voc_resolverOtype (Sesame sr);
+
+
+typedef int Skybot;
+
+extern Skybot voc_skybot (double ra, double dec, double rsz, double dsz,
+ double epoch);
+extern int voc_skybotNObjs (Skybot sb);
+extern char *voc_skybotStrAttr (Skybot sb, char *attr, int index);
+extern double voc_skybotDblAttr (Skybot sb, char *attr, int index);
+%}
+
+
+
+extern char *voc_coneCaller (char *url, double ra, double dec, double sr,
+ int otype);
+extern int voc_coneCallerToFile (char *url, double ra, double dec,
+ double sr, int otype, char *file);
+
+extern char *voc_siapCaller (char *url, double ra, double dec,
+ double rsize, double dsize, char *fmt, int otype);
+extern int voc_siapCallerToFile (char *url, double ra, double dec,
+ double rsize, double dsize, char *fmt, int otype,
+ char *file);
+extern char *voc_ssapCaller (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt);
+extern int voc_ssapCallerToFile (char *url, double ra, double dec,
+ double size, char *band, char *time, char *fmt,
+ char *file);
+
+extern char *voc_getRawURL (char *url, int *nbytes);
+extern int voc_validateObject (int hcode);
+
+
+extern int voc_initVOClient (char *opts);
+extern void voc_closeVOClient (int shutdown);
+extern void voc_abortVOClient (int code, char *msg);
+extern DAL voc_openConnection (char *service_url, int type);
+extern DAL voc_openConeConnection (char *service_url);
+extern DAL voc_openSiapConnection (char *service_url);
+extern DAL voc_openSsapConnection (char *service_url);
+extern void voc_closeConnection (DAL dal);
+extern int voc_getServiceCount (DAL dal);
+extern void voc_addServiceURL (DAL dal, char *service_url);
+extern char *voc_getServiceURL (DAL dal, int index);
+extern Query voc_getQuery (DAL dal, int type);
+extern Query voc_getConeQuery (DAL dal, double ra, double dec, double sr);
+extern Query voc_getSiapQuery (DAL dal, double ra, double dec,
+ double ra_size, double dec_size, char *format);
+extern Query voc_getSsapQuery (DAL dal, double ra, double dec,
+ double size, char *band, char *time, char *format);
+extern int voc_addIntParam (Query query, char *name, int value);
+extern int voc_addFloatParam (Query query, char *name, double value);
+extern int voc_addStringParam (Query query, char *name, char *value);
+extern char *voc_getQueryString (Query query, int type, int index);
+extern QResponse voc_executeQuery (Query query);
+extern char *voc_executeCSV (Query query);
+extern char *voc_executeVOTable (Query query);
+extern int voc_executeQueryAs (Query query, char *fname, int type);
+extern int voc_getRecordCount (QResponse qr);
+extern QRecord voc_getRecord (QResponse qr, int recnum);
+extern char *voc_getFieldAttr (QResponse qr, int fieldnum, char *attr);
+extern QRAttribute voc_getAttribute (QRecord rec, char *attrname);
+extern int voc_intValue (QRAttribute v);
+extern double voc_floatValue (QRAttribute v);
+extern char *voc_stringValue (QRAttribute v);
+extern int voc_getIntAttr (QRecord rec, char *attr_name);
+extern double voc_getFloatAttr (QRecord rec, char *attr_name);
+extern char *voc_getStringAttr (QRecord rec, char *attr_name);
+extern char *voc_getAttrList (QRecord rec);
+extern int voc_getAttrCount (QRecord rec);
+extern int voc_getDataset (QRecord rec, char *acref, char *fname);
+extern int voc_debugLevel (int level);
+
+
+extern RegResult voc_regSearch (char *term1, char *term2, int orValues);
+extern RegResult voc_regSearchByService (char *svc, char *term, int orValues);
+extern RegQuery voc_regQuery (char *term, int orValues);
+extern void voc_regAddSearchTerm (RegQuery query, char *term,
+ int orValue);
+extern void voc_regRemoveSearchTerm (RegQuery query, char *term);
+extern int voc_regGetSTCount (RegQuery query);
+extern char *voc_regGetQueryString (RegQuery query);
+extern RegResult voc_regExecute (RegQuery query);
+extern char *voc_regExecuteRaw (RegQuery query);
+extern int voc_resGetCount (RegResult res);
+extern char *voc_resGetStr (RegResult res, char *attribute, int index);
+extern double voc_resGetFloat (RegResult res, char *attribute, int index);
+extern int voc_resGetInt (RegResult res, char *attribute, int index);
+
+
+extern Sesame voc_nameResolver (char *target);
+extern char *voc_resolverPos (Sesame sr);
+extern double voc_resolverRA (Sesame sr);
+extern double voc_resolverDEC (Sesame sr);
+extern double voc_resolverRAErr (Sesame sr);
+extern double voc_resolverDECErr (Sesame sr);
+extern char *voc_resolverOtype (Sesame sr);
+
+
+extern Skybot voc_skybot (double ra, double dec, double rsz, double dsz,
+ double epoch);
+extern int voc_skybotNObjs (Skybot sb);
+extern char *voc_skybotStrAttr (Skybot sb, char *attr, int index);
+extern double voc_skybotDblAttr (Skybot sb, char *attr, int index);
diff --git a/vendor/voclient/libvoclient/_api b/vendor/voclient/libvoclient/_api
new file mode 100644
index 00000000..df5aa620
--- /dev/null
+++ b/vendor/voclient/libvoclient/_api
@@ -0,0 +1,136 @@
+**
+** VOCLient Library -- Client interface library to the DAL Server
+** application. This API allows non-Java programs to make use of the DAL
+** client interface by means of a remote procedure call between this
+** interface and the DAL server. State is maintained in the server and
+** values passed back are language-neutral integer 'handles' on the remote
+** objects, or simple int/double/string values.
+**
+** All tasks must initialize the VO Client and establish a connection to
+** the DAL server by calling voc_initVOClient() before making any service
+** connections, thereafter new connections may be opened/closed at will.
+** Convenience procedures allow for easy use of specific services, e.g. Cone
+** or Siap. Service-specific parameters may be added to a query using the
+** voc_add<type>Param() calls. No action is taken until an execute of the
+** query is performed, applications may get back a handle on the result and
+** interrogate attributes directly, the raw VOTable or a CSV/TSV/ASCII
+** representation of the result may also be returned.
+**
+** High-Level Functions:
+** ---------------------
+**
+** voc_initVOClient (config_opts)
+** voc_closeVOClient (shutdown_flag)
+** voc_abortVOClient (errcode, errmsg)
+**
+** string = voc_coneCaller (url, ra, dec, sr, otype)
+** status = voc_coneCallerToFile (url, ra, dec, sr, otype, file)
+** string = voc_siapCaller (url, ra, dec, rsize, dsize, fmt, otype)
+** status = voc_siapCallerToFile (url, ra, dec, rsize, dsize, fmt, otype, file)
+** string = voc_ssapCaller (url, ra, dec, size, band, time, fmt)
+** status = voc_ssapCallerToFile (url, ra, dec, size, band, time, fmt, file)
+**
+** string = voc_getRawURL (url, buflen)
+**
+**
+** Main DAL Interface Procedures:
+** ------------------------------
+**
+** dal = voc_openConnection (svc_url, type)
+** dal = voc_openConeConnection (svc_url) # Utility aliases
+** dal = voc_openSiapConnection (svc_url)
+** dal = voc_openSsapConnection (svc_url)
+** voc_closeConnection (dal)
+**
+** count = voc_getServiceCount (dal)
+** voc_addServiceURL (dal, svc_url)
+** url = voc_getServiceURL (dal, index)
+**
+** query = voc_getQuery (dal, type)
+** query = voc_getConeQuery (dal, ra, dec, sr)
+** query = voc_getSiapQuery (dal, ra, dec, ra_size, dec_size, format)
+** query = voc_getSsapQuery (dal, ra, dec, size, band, time, format)
+**
+** stat = voc_addIntParam (query, pname, ival)
+** stat = voc_addFloatParam (query, pname, dval)
+** stat = voc_addStringParam (query, pname, str)
+**
+** url_str = voc_getQueryString (query, type, index)
+**
+** qr = voc_executeQuery (query)
+** qr = voc_getQueryResponse (query)
+** csv_tab = voc_executeCSV (query)
+** tsv_tab = voc_executeTSV (query)
+** ascii = voc_executeASCII (query)
+** vot_str = voc_executeVOTable (query)
+**
+** count = voc_getRecordCount (qr)
+** rec = voc_getRecord (qr, recnum)
+** str = voc_getFieldAttr (qr, fieldnum, attr)
+**
+** attr = voc_getAttribute (rec, char *attrname)
+** count = voc_getAttrCount (rec)
+** list_str = voc_getAttrList (rec)
+**
+** ival = voc_intValue (attr)
+** dval = voc_floatValue (attr)
+** str = voc_stringValue (attr)
+**
+** stat = voc_getDataset (rec, acref, fname)
+**
+**
+** Sesame Name Resolver Interface:
+** -------------------------------
+**
+** sr = voc_nameResolver (target)
+** pos_str = voc_resolverPos (sr)
+** radeg = voc_resolverRA (sr)
+** decdeg = voc_resolverDEC (sr)
+** ra_err = voc_resolverRAErr (sr)
+** dec_err = voc_resolverDECErr (sr)
+** typ_str = voc_resolverOtype (sr)
+**
+**
+**
+** RegistryQuery
+** ----------------------
+**
+** High-Level Query:
+**
+** res = voc_regSearch (sql, keywords, orValues)
+** res =voc_regSearchByService (svc, term, orValues)
+**
+** Programmatic Query:
+**
+** query = voc_regQuery (term, orValues) // OR keyword list?
+**
+** voc_regConstSvcType (query, svcType) // search constraints
+** voc_regConstWaveband (query, waveband)
+** voc_regDALOnly (query, value)
+** voc_regSortRes (query, value)
+**
+** voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous
+** voc_regRemoveSearchTerm (query, term) // remove search term
+** count = voc_regGetSTCount (query)
+**
+** str = voc_regGetQueryString (query) // GET form of query
+**
+** res = voc_regExecute (query) // return result obj
+** str = voc_regExecuteRaw (query) // return raw XML
+**
+** RegistryQueryResult
+**
+** count = voc_resGetCount (res)
+**
+** str = voc_resGetStr (res, attribute, index)
+** dval = voc_resGetFloat (res, attribute, index)
+** ival = voc_resGetInt (res, attribute, index)
+**
+** For this implementation, we've chose to use the NVO Registry at
+** JHU/STScI, specifically the QueryRegistry() method which provides a
+** 'SimpleResource' form of the resource record. Support for the newer
+** IVOA standard will be added later, for now we can quickly access the most
+** commonly used fields of a resource using both a keyword and SQL form of
+** the search.
+**
+*/
diff --git a/vendor/voclient/libvoclient/_d b/vendor/voclient/libvoclient/_d
new file mode 100644
index 00000000..a96d3dc1
--- /dev/null
+++ b/vendor/voclient/libvoclient/_d
@@ -0,0 +1,90 @@
+Document the code with Doxygen
+
+Documenting structs
+
+
+ 1 /**
+ 2 * A structure to represent 3d vectors
+ 3 */
+ 4 typedef struct
+ 5 {
+ 6 /*@{*/
+ 7 double x ; /**< the x coordinate */
+ 8 double y ; /**< the y coordinate */
+ 9 double z ; /**< the z coordinate */
+ 10 /*@}*/
+ 11 /**
+ 12 * @name group 2
+ 13 */
+ 14 /*@{*/
+ 15 char * name ; /**< the name of the point */
+ 16 int namelength ; /**< the size of the point name */
+ 17 /*@}*/
+ 18 } point3d ;
+
+
+
+Documenting enums
+
+
+ 1 /**
+ 2 * The enumeration of space dimension
+ 3 */
+ 4 typedef enum
+ 5 {
+ 6 UND, /**< 1D */
+ 7 DEUXD, /**< 2D */
+ 8 TROISD /**< 3D */
+ 9 } dimensions ;
+
+
+Documenting functions
+
+ 1 /*!
+ 2 Copies bytes from a source memory area to a destination memory area,
+ 3 where both areas may not overlap.
+ 4 @param[out] dest The memory area to copy to.
+ 5 @param[in] src The memory area to copy from.
+ 6 @param[in] n The number of bytes to copy
+ 7 */
+ 8 void memcpy(void *dest, const void *src, size_t n);
+
+
+
+
+
+ 1 /**
+ 2 * The point3d structure is stupid
+ 3 * @param[out] x the modified input
+ 4 * @return \f$x + 1\f$
+ 5 */
+ 6 int megaFunc( int * x ) ;
+ 7 /**
+ 8 * The main procedure. It can do the following:
+ 9 * - do nothing
+ 10 * - sleep
+ 11 *
+ 12 * @code
+ 13 * for ( i = 0 ; i < 5 ; i++ ) { megaFunc(i) ; }
+ 14 * @endcode
+ 15 * Which compute \f$(x_1,y_1)\f$ sometimes.
+ 16 * @param argc the command line
+ 17 * @param argv the number of options in the command line.
+ 18 * @return whatever
+ 19 * @author jb silvy
+ 20 */
+ 21 int main( char ** argc, int argv )
+ 22 {
+ 23 return megaFunc( 3 ) ;
+ 24 }
+
+
+
+
+Documenting others
+
+ 1 /**
+ 2 * scilab version
+ 3 */
+ 4 #define VERSION 5.0
+
diff --git a/vendor/voclient/libvoclient/_msg b/vendor/voclient/libvoclient/_msg
new file mode 100644
index 00000000..6ce2e7f0
--- /dev/null
+++ b/vendor/voclient/libvoclient/_msg
@@ -0,0 +1,65 @@
+vocDAL.c:
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "getRawURL", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "newConnection", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "removeConnection", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getServiceCount", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "addServiceURL", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getServiceURL", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getQuery", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "addParameter", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "getQueryString", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "execute", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "getQResponse", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeCSV", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeTSV", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeASCII", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeVOTable", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getRecordCount", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getRecord", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttrCount", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getFieldAttr", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttrList", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttribute", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (v, "intValue", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (v, "floatValue", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (v, "stringValue", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getDataset", 0);
+
+vocLib.c:
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (hcode, "validateObject", 0);
+
+vocRegistry.c:
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regSearch", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regSearchBySvc", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regQuery", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regAddSearchTerm", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regRemoveSearchTerm", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regConstWaveband", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regConstSvcType", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regDALOnly", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regSortRes", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regGetSTCount", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regGetQueryString", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regExecute", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "resExecuteRaw", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetCount", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetString", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetFloat", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetInt", 0);
+
+vocSesame.c:
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "nameResolver", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetPOS", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetOtype", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetRA", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetRAErr", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetDEC", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, "srGetDECErr", 0);
+
+vocSkybot.c:
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "skybot", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbStrAttr", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbDblAttr", 0);
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbNObjs", 0);
+
+
diff --git a/vendor/voclient/libvoclient/doc/html/VOClient_8h_source.html b/vendor/voclient/libvoclient/doc/html/VOClient_8h_source.html
new file mode 100644
index 00000000..1bf5e4b6
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/VOClient_8h_source.html
@@ -0,0 +1,380 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: VOClient.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+<h1>VOClient.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * VOCLIENT.H == Global include file for the VOClient Interface.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * M. Fitzpatrick, NOAO, June 2006</span>
+<a name="l00005"></a>00005 <span class="comment"> */</span>
+<a name="l00006"></a>00006
+<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
+<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
+<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;string.h&gt;</span>
+<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;ctype.h&gt;</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;sys/file.h&gt;</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;netinet/in.h&gt;</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;arpa/inet.h&gt;</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;sys/un.h&gt;</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include &lt;netdb.h&gt;</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
+<a name="l00019"></a>00019
+<a name="l00020"></a>00020
+<a name="l00021"></a>00021 <span class="comment">/* Function prototypes */</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#ifdef __STDC__</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#include &lt;stddef.h&gt;</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#else</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="keywordtype">char</span> *getenv();
+<a name="l00027"></a>00027 <span class="preprocessor">#endif</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="comment">/* For the signal handling. */</span>
+<a name="l00035"></a>00035 <span class="keyword">typedef</span> void (*SIGFUNC)();
+<a name="l00036"></a>00036
+<a name="l00037"></a>00037
+<a name="l00038"></a>00038 <span class="comment">/* Interface Variables.</span>
+<a name="l00039"></a>00039 <span class="comment"> */</span>
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="preprocessor">#ifdef OK</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#undef OK</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define OK 0</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00048"></a>00048 <span class="preprocessor">#ifdef ERR</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#undef ERR</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define ERR 1</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 <span class="preprocessor">#ifdef TRUE</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#undef TRUE</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define TRUE 1</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00058"></a>00058 <span class="preprocessor">#ifdef FALSE</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#undef FALSE</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define FALSE 0</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a>00063 <span class="preprocessor">#define DEF_SERVER "6200:localhost"</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define DEF_NET_SERVER "9000:iraf-nvo.noao.edu"</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="preprocessor">#define DEF_RUNID "VOClient"</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a>00068 <span class="preprocessor">#define MSG_CALL 1</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define MSG_RESULT 2</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define MSG_MESSAGE 3</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a>00072 <span class="preprocessor">#define TY_INT 1 </span><span class="comment">/* result data types */</span>
+<a name="l00073"></a>00073 <span class="preprocessor">#define TY_FLOAT 2</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define TY_STRING 3</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define TY_BULK 4</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="preprocessor">#define SZ_MSGBUF 102400</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define SZ_METHOD 64</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define SZ_CLASS 64</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define SZ_MSGSTR 65535</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define SZ_PBUF 128</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define SZ_FNAME 128</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define MAX_VALUES 64</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>
+<a name="l00085"></a>00085 <span class="preprocessor">#define DAL_CONN 1 </span><span class="comment">/* DAL Connection Types */</span>
+<a name="l00086"></a>00086 <span class="preprocessor">#define CONE_CONN 2 </span><span class="comment">/* Simple Cone Search */</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#define SIAP_CONN 3 </span><span class="comment">/* Simple Image Access */</span>
+<a name="l00088"></a>00088 <span class="preprocessor">#define SSAP_CONN 4 </span><span class="comment">/* Simple Spectral Access */</span>
+<a name="l00089"></a>00089 <span class="preprocessor">#define SLAP_CONN 5 </span><span class="comment">/* Simple Line Access */</span>
+<a name="l00090"></a>00090 <span class="preprocessor">#define STAP_CONN 6 </span><span class="comment">/* Synch TAP Access */</span>
+<a name="l00091"></a>00091
+<a name="l00092"></a>00092 <span class="preprocessor">#define CONE_SERVICE 1</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#define SIAP_SERVICE 2</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#define SSAP_SERVICE 3</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define TAP_SERVICE 4</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define REG_SERVICE 5</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define SKYNODE_SERVICE 6</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define WEB_SERVICE 7</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define REST_SERVICE 8</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span>
+<a name="l00101"></a>00101 <span class="preprocessor">#define VOC_RAW 0</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define VOC_CSV 1</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define VOC_TSV 2</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define VOC_ASCII 3</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define VOC_VOTABLE 4</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span>
+<a name="l00107"></a>00107 <span class="preprocessor">#define VOC_NULL 0 </span><span class="comment">/* integer NULL */</span>
+<a name="l00108"></a>00108
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="keyword">typedef</span> <span class="keywordtype">int</span> ObjectID; <span class="comment">/* DAL type aliases */</span>
+<a name="l00111"></a>00111 <span class="keyword">typedef</span> <span class="keywordtype">int</span> DAL;
+<a name="l00112"></a>00112 <span class="keyword">typedef</span> <span class="keywordtype">int</span> Query;
+<a name="l00113"></a>00113 <span class="keyword">typedef</span> <span class="keywordtype">int</span> QResponse;
+<a name="l00114"></a>00114 <span class="keyword">typedef</span> <span class="keywordtype">int</span> QRecord;
+<a name="l00115"></a>00115 <span class="keyword">typedef</span> <span class="keywordtype">int</span> QRAttribute;
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 <span class="keyword">typedef</span> <span class="keywordtype">int</span> Sesame; <span class="comment">/* Name Resolver aliases */</span>
+<a name="l00118"></a>00118
+<a name="l00119"></a>00119 <span class="keyword">typedef</span> <span class="keywordtype">int</span> Skybot; <span class="comment">/* SkyBoT Service aliases */</span>
+<a name="l00120"></a>00120
+<a name="l00121"></a>00121 <span class="keyword">typedef</span> <span class="keywordtype">int</span> RegQuery; <span class="comment">/* Registry Query object */</span>
+<a name="l00122"></a>00122 <span class="keyword">typedef</span> <span class="keywordtype">int</span> RegResult; <span class="comment">/* Query Reuslt object */</span>
+<a name="l00123"></a>00123
+<a name="l00124"></a>00124 <span class="preprocessor">#ifdef _VOCLIENT_LIB_</span>
+<a name="l00125"></a>00125 <span class="preprocessor"></span>
+<a name="l00126"></a>00126 <span class="keyword">typedef</span> <span class="keyword">struct </span>vocMsg {
+<a name="l00127"></a>00127 <span class="keywordtype">int</span> type; <span class="comment">/* message type */</span>
+<a name="l00128"></a>00128
+<a name="l00129"></a>00129 ObjectID objId; <span class="comment">/* for CALL messages */</span>
+<a name="l00130"></a>00130 <span class="keywordtype">char</span> method[SZ_METHOD];
+<a name="l00131"></a>00131 <span class="keywordtype">int</span> nparams;
+<a name="l00132"></a>00132
+<a name="l00133"></a>00133 <span class="keywordtype">int</span> status; <span class="comment">/* for RESULT messages */</span>
+<a name="l00134"></a>00134 <span class="keywordtype">int</span> restype;
+<a name="l00135"></a>00135 <span class="keywordtype">int</span> nitems;
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 <span class="keywordtype">char</span> msgclass[SZ_CLASS]; <span class="comment">/* for MESSAGE messages */</span>
+<a name="l00138"></a>00138 <span class="keywordtype">char</span> msgstr[SZ_MSGSTR];
+<a name="l00139"></a>00139
+<a name="l00140"></a>00140 <span class="keywordtype">char</span> message[SZ_MSGBUF]; <span class="comment">/* fully formed message */</span>
+<a name="l00141"></a>00141 } vocMsg_t;
+<a name="l00142"></a>00142
+<a name="l00143"></a>00143
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 <span class="keyword">typedef</span> <span class="keyword">struct </span>vocRes {
+<a name="l00146"></a>00146 <span class="keywordtype">int</span> status; <span class="comment">/* result status */</span>
+<a name="l00147"></a>00147 <span class="keywordtype">int</span> type; <span class="comment">/* type of result value */</span>
+<a name="l00148"></a>00148 <span class="keywordtype">int</span> nitems; <span class="comment">/* no. of returned items */</span>
+<a name="l00149"></a>00149 <span class="keywordtype">char</span> value[MAX_VALUES][SZ_MSGSTR]; <span class="comment">/* value strings */</span>
+<a name="l00150"></a>00150
+<a name="l00151"></a>00151 <span class="keywordtype">void</span> *buf; <span class="comment">/* bulk data buffer */</span>
+<a name="l00152"></a>00152 <span class="keywordtype">int</span> buflen; <span class="comment">/* length of buffer */</span>
+<a name="l00153"></a>00153 } vocRes_t;
+<a name="l00154"></a>00154
+<a name="l00155"></a>00155
+<a name="l00156"></a>00156 <span class="keyword">typedef</span> <span class="keyword">struct </span>VOClient {
+<a name="l00157"></a>00157 <span class="keywordtype">char</span> *server_host; <span class="comment">/* socket to DALServer */</span>
+<a name="l00158"></a>00158 <span class="keywordtype">char</span> *runid; <span class="comment">/* RUNID logging string */</span>
+<a name="l00159"></a>00159 <span class="keywordtype">int</span> server_port;
+<a name="l00160"></a>00160 <span class="keywordtype">int</span> io_chan;
+<a name="l00161"></a>00161
+<a name="l00162"></a>00162 <span class="keywordtype">int</span> msg_port; <span class="comment">/* asynch message socket */</span>
+<a name="l00163"></a>00163 <span class="keywordtype">int</span> msg_chan;
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <span class="keywordtype">int</span> onetrip; <span class="comment">/* private invocation flag */</span>
+<a name="l00166"></a>00166 <span class="keywordtype">int</span> debug; <span class="comment">/* debug flag */</span>
+<a name="l00167"></a>00167 <span class="keywordtype">int</span> quiet; <span class="comment">/* suppress output? */</span>
+<a name="l00168"></a>00168 <span class="keywordtype">int</span> use_cache; <span class="comment">/* use cached results? */</span>
+<a name="l00169"></a>00169 <span class="keywordtype">int</span> use_runid; <span class="comment">/* use RUNID parameter? */</span>
+<a name="l00170"></a>00170
+<a name="l00171"></a>00171 } VOClient, *VOClientPtr;
+<a name="l00172"></a>00172
+<a name="l00173"></a>00173
+<a name="l00174"></a>00174 <span class="preprocessor">#define VOC_DEBUG (vo-&gt;debug &gt; 0)</span>
+<a name="l00175"></a>00175 <span class="preprocessor"></span><span class="preprocessor">#define MSG_DEBUG (vo-&gt;debug &gt; 1)</span>
+<a name="l00176"></a>00176 <span class="preprocessor"></span>
+<a name="l00177"></a>00177 <span class="preprocessor">#endif</span>
+<a name="l00178"></a>00178 <span class="preprocessor"></span>
+<a name="l00179"></a>00179
+<a name="l00180"></a>00180
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182
+<a name="l00183"></a>00183 <span class="comment">/* Prototype Declarations.</span>
+<a name="l00184"></a>00184 <span class="comment"> */</span>
+<a name="l00185"></a>00185
+<a name="l00186"></a>00186 <span class="comment">/* DAL Interface procedures.</span>
+<a name="l00187"></a>00187 <span class="comment"> */</span>
+<a name="l00188"></a>00188 <span class="keywordtype">char</span> *voc_coneCaller (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec, <span class="keywordtype">double</span> sr,
+<a name="l00189"></a>00189 <span class="keywordtype">int</span> otype);
+<a name="l00190"></a>00190 <span class="keywordtype">int</span> voc_coneCallerToFile (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec, <span class="keywordtype">double</span> sr,
+<a name="l00191"></a>00191 <span class="keywordtype">int</span> otype, <span class="keywordtype">char</span> *file);
+<a name="l00192"></a>00192
+<a name="l00193"></a>00193 <span class="keywordtype">char</span> *voc_siapCaller (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec, <span class="keywordtype">double</span> rsize,
+<a name="l00194"></a>00194 <span class="keywordtype">double</span> dsize, <span class="keywordtype">char</span> *fmt, <span class="keywordtype">int</span> otype);
+<a name="l00195"></a>00195 <span class="keywordtype">int</span> voc_siapCallerToFile (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec,
+<a name="l00196"></a>00196 <span class="keywordtype">double</span> rsize, <span class="keywordtype">double</span> dsize, <span class="keywordtype">char</span> *fmt, <span class="keywordtype">int</span> otype, <span class="keywordtype">char</span> *file);
+<a name="l00197"></a>00197 <span class="keywordtype">char</span> *voc_ssapCaller (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec,
+<a name="l00198"></a>00198 <span class="keywordtype">double</span> size, <span class="keywordtype">char</span> *band, <span class="keywordtype">char</span> *time, <span class="keywordtype">char</span> *fmt, <span class="keywordtype">int</span> otype);
+<a name="l00199"></a>00199 <span class="keywordtype">int</span> voc_ssapCallerToFile (<span class="keywordtype">char</span> *url, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec,
+<a name="l00200"></a>00200 <span class="keywordtype">double</span> size, <span class="keywordtype">char</span> *band, <span class="keywordtype">char</span> *time, <span class="keywordtype">char</span> *fmt, <span class="keywordtype">int</span> otype,
+<a name="l00201"></a>00201 <span class="keywordtype">char</span> *file);
+<a name="l00202"></a>00202 <span class="keywordtype">char</span> *voc_getRawURL (<span class="keywordtype">char</span> *url, <span class="keywordtype">int</span> *nbytes);
+<a name="l00203"></a>00203 <span class="keywordtype">int</span> voc_validateObject (<span class="keywordtype">int</span> hcode);
+<a name="l00204"></a>00204 <span class="keywordtype">void</span> voc_freePointer (<span class="keywordtype">char</span> *ptr);
+<a name="l00205"></a>00205
+<a name="l00206"></a>00206
+<a name="l00207"></a>00207 <span class="keywordtype">int</span> voc_initVOClient (<span class="keywordtype">char</span> *opts);
+<a name="l00208"></a>00208 <span class="keywordtype">void</span> voc_closeVOClient (<span class="keywordtype">int</span> shutdown);
+<a name="l00209"></a>00209 <span class="keywordtype">void</span> voc_abortVOClient (<span class="keywordtype">int</span> code, <span class="keywordtype">char</span> *msg);
+<a name="l00210"></a>00210
+<a name="l00211"></a>00211 DAL voc_openConnection (<span class="keywordtype">char</span> *service_url, <span class="keywordtype">int</span> type);
+<a name="l00212"></a>00212 DAL voc_openConeConnection (<span class="keywordtype">char</span> *service_url);
+<a name="l00213"></a>00213 DAL voc_openSiapConnection (<span class="keywordtype">char</span> *service_url);
+<a name="l00214"></a>00214 DAL voc_openSsapConnection (<span class="keywordtype">char</span> *service_url);
+<a name="l00215"></a>00215 <span class="keywordtype">void</span> voc_closeConnection (DAL dal);
+<a name="l00216"></a>00216
+<a name="l00217"></a>00217 <span class="keywordtype">int</span> voc_getServiceCount (DAL dal);
+<a name="l00218"></a>00218 <span class="keywordtype">void</span> voc_addServiceURL (DAL dal, <span class="keywordtype">char</span> *service_url);
+<a name="l00219"></a>00219 <span class="keywordtype">char</span> *voc_getServiceURL (DAL dal, <span class="keywordtype">int</span> index);
+<a name="l00220"></a>00220
+<a name="l00221"></a>00221 Query voc_getQuery (DAL dal, <span class="keywordtype">int</span> type);
+<a name="l00222"></a>00222 Query voc_getConeQuery (DAL dal, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec, <span class="keywordtype">double</span> sr);
+<a name="l00223"></a>00223 Query voc_getSiapQuery (DAL dal, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec,
+<a name="l00224"></a>00224 <span class="keywordtype">double</span> ra_size, <span class="keywordtype">double</span> dec_size, <span class="keywordtype">char</span> *format);
+<a name="l00225"></a>00225 Query voc_getSsapQuery (DAL dal, <span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec,
+<a name="l00226"></a>00226 <span class="keywordtype">double</span> size, <span class="keywordtype">char</span> *band, <span class="keywordtype">char</span> *time, <span class="keywordtype">char</span> *format);
+<a name="l00227"></a>00227
+<a name="l00228"></a>00228 <span class="keywordtype">int</span> voc_addIntParam (Query query, <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> value);
+<a name="l00229"></a>00229 <span class="keywordtype">int</span> voc_addFloatParam (Query query, <span class="keywordtype">char</span> *name, <span class="keywordtype">double</span> value);
+<a name="l00230"></a>00230 <span class="keywordtype">int</span> voc_addStringParam (Query query, <span class="keywordtype">char</span> *name, <span class="keywordtype">char</span> *value);
+<a name="l00231"></a>00231
+<a name="l00232"></a>00232 <span class="keywordtype">char</span> *voc_getQueryString (Query query, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> index);
+<a name="l00233"></a>00233
+<a name="l00234"></a>00234 QResponse voc_executeQuery (Query query);
+<a name="l00235"></a>00235 QResponse voc_getQueryResponse (Query query);
+<a name="l00236"></a>00236 <span class="keywordtype">char</span> *voc_executeCSV (Query query);
+<a name="l00237"></a>00237 <span class="keywordtype">char</span> *voc_executeTSV (Query query);
+<a name="l00238"></a>00238 <span class="keywordtype">char</span> *voc_executeASCII (Query query);
+<a name="l00239"></a>00239 <span class="keywordtype">char</span> *voc_executeVOTable (Query query);
+<a name="l00240"></a>00240 <span class="keywordtype">int</span> voc_executeQueryAs (Query query, <span class="keywordtype">char</span> *fname, <span class="keywordtype">int</span> type);
+<a name="l00241"></a>00241 <span class="keywordtype">int</span> voc_getRecordCount (QResponse qr);
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243 QRecord voc_getRecord (QResponse qr, <span class="keywordtype">int</span> recnum);
+<a name="l00244"></a>00244 <span class="keywordtype">char</span> *voc_getFieldAttr (QResponse qr, <span class="keywordtype">int</span> fieldnum, <span class="keywordtype">char</span> *attr);
+<a name="l00245"></a>00245
+<a name="l00246"></a>00246 QRAttribute voc_getAttribute (QRecord rec, <span class="keywordtype">char</span> *attrname);
+<a name="l00247"></a>00247
+<a name="l00248"></a>00248 <span class="keywordtype">int</span> voc_intValue (QRAttribute v);
+<a name="l00249"></a>00249 <span class="keywordtype">double</span> voc_floatValue (QRAttribute v);
+<a name="l00250"></a>00250 <span class="keywordtype">char</span> *voc_stringValue (QRAttribute v);
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="keywordtype">int</span> voc_getIntAttr (QRecord rec, <span class="keywordtype">char</span> *attr_name);
+<a name="l00253"></a>00253 <span class="keywordtype">double</span> voc_getFloatAttr (QRecord rec, <span class="keywordtype">char</span> *attr_name);
+<a name="l00254"></a>00254 <span class="keywordtype">char</span> *voc_getStringAttr (QRecord rec, <span class="keywordtype">char</span> *attr_name);
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="keywordtype">char</span> *voc_getAttrList (QRecord rec);
+<a name="l00257"></a>00257 <span class="keywordtype">int</span> voc_getAttrCount (QRecord rec);
+<a name="l00258"></a>00258
+<a name="l00259"></a>00259 <span class="keywordtype">void</span> voc_setIntAttr (QRecord rec, <span class="keywordtype">char</span> *attrname, <span class="keywordtype">int</span> ival);
+<a name="l00260"></a>00260 <span class="keywordtype">void</span> voc_setFloatAttr (QRecord rec, <span class="keywordtype">char</span> *attrname, <span class="keywordtype">double</span> dval) ;
+<a name="l00261"></a>00261 <span class="keywordtype">void</span> voc_setStringAttr (QRecord rec, <span class="keywordtype">char</span> *attrname, <span class="keywordtype">char</span> *str);
+<a name="l00262"></a>00262
+<a name="l00263"></a>00263 <span class="keywordtype">int</span> voc_getDataset (QRecord rec, <span class="keywordtype">char</span> *acref, <span class="keywordtype">char</span> *fname);
+<a name="l00264"></a>00264
+<a name="l00265"></a>00265
+<a name="l00266"></a>00266
+<a name="l00267"></a>00267 <span class="comment">/* Registry Interface procedures.</span>
+<a name="l00268"></a>00268 <span class="comment"> */</span>
+<a name="l00269"></a>00269
+<a name="l00270"></a>00270 RegResult <a class="code" href="vocRegistry_8c.html#555aa2dc7ece17033e9399ed00ff4b78" title="High-level Registry query interface.">voc_regSearch</a> (<span class="keywordtype">char</span> *term1, <span class="keywordtype">char</span> *term2, <span class="keywordtype">int</span> orValues);
+<a name="l00271"></a>00271 RegResult <a class="code" href="vocRegistry_8c.html#25e61b2c021394192ca8e74e96f45b28" title="Search Registry using a search term and service constraint.">voc_regSearchByService</a> (<span class="keywordtype">char</span> *svc, <span class="keywordtype">char</span> *term, <span class="keywordtype">int</span> orValues);
+<a name="l00272"></a>00272 RegQuery <a class="code" href="vocRegistry_8c.html#cfd7f451139af07ff58c173d793b3962" title="Create a RegistryQuery object.">voc_regQuery</a> (<span class="keywordtype">char</span> *term, <span class="keywordtype">int</span> orValues);
+<a name="l00273"></a>00273 <span class="keywordtype">void</span> voc_regConstSvcType (RegQuery query, <span class="keywordtype">char</span> *svc);
+<a name="l00274"></a>00274 <span class="keywordtype">void</span> <a class="code" href="vocRegistry_8c.html#8d63761f770b4327d44cd1c618ce186f" title="Constrain the Registry search by waveband.">voc_regConstWaveband</a> (RegQuery query, <span class="keywordtype">char</span> *bpass);
+<a name="l00275"></a>00275 <span class="keywordtype">void</span> <a class="code" href="vocRegistry_8c.html#494458ce877c4fa8442ff398873195b4" title="Set the &amp;quot;DAL Only&amp;quot; flag.">voc_regDALOnly</a> (RegQuery query, <span class="keywordtype">int</span> value);
+<a name="l00276"></a>00276 <span class="keywordtype">void</span> <a class="code" href="vocRegistry_8c.html#800645e5f4dc73bcf99730db9cb4d439" title="Set the resource &amp;quot;sort&amp;quot; flag.">voc_regSortRes</a> (RegQuery query, <span class="keywordtype">int</span> value);
+<a name="l00277"></a>00277 <span class="keywordtype">void</span> <a class="code" href="vocRegistry_8c.html#eb0ee2e29939419af10cfbebc82e2110" title="Add a search term to the specified query.">voc_regAddSearchTerm</a> (RegQuery query, <span class="keywordtype">char</span> *term, <span class="keywordtype">int</span> orValue);
+<a name="l00278"></a>00278 <span class="keywordtype">void</span> <a class="code" href="vocRegistry_8c.html#9b9e8c445ffb38711ef4ee345fa0f68d" title="Remove a search term to the specified query.">voc_regRemoveSearchTerm</a> (RegQuery query, <span class="keywordtype">char</span> *term);
+<a name="l00279"></a>00279 <span class="keywordtype">int</span> <a class="code" href="vocRegistry_8c.html#4780f7c8975abf074f3b41e27c31a7e3" title="Get the number of search terms in the current query.">voc_regGetSTCount</a> (RegQuery query);
+<a name="l00280"></a>00280 <span class="keywordtype">char</span> *<a class="code" href="vocRegistry_8c.html#6b8ad34f22f1c22e34b56dc0ff635355" title="Get the current query as an http GET URL.">voc_regGetQueryString</a> (RegQuery query);
+<a name="l00281"></a>00281 RegResult <a class="code" href="vocRegistry_8c.html#cea0f3cbac1f593ad5899a5252803689" title="Execute the specified query.">voc_regExecute</a> (RegQuery query);
+<a name="l00282"></a>00282 <span class="keywordtype">char</span> *<a class="code" href="vocRegistry_8c.html#ac9bb69c156fbdae90cb33f396336995" title="Execute the specified query and return raw result string.">voc_regExecuteRaw</a> (RegQuery query);
+<a name="l00283"></a>00283
+<a name="l00284"></a>00284 <span class="keywordtype">int</span> <a class="code" href="vocRegistry_8c.html#b6ce658f8bb8803ad73c5c15ccdf7dd4" title="Return a count of the number of results records.">voc_resGetCount</a> (RegResult res);
+<a name="l00285"></a>00285 <span class="keywordtype">char</span> *<a class="code" href="vocRegistry_8c.html#c5376fa75dc000e0b820fd4e29e5cfaa" title="Get a string-valued attribute from the result resource record.">voc_resGetStr</a> (RegResult res, <span class="keywordtype">char</span> *attribute, <span class="keywordtype">int</span> index);
+<a name="l00286"></a>00286 <span class="keywordtype">double</span> <a class="code" href="vocRegistry_8c.html#3dceef82335c216785372fdd9789cc0c" title="Get a real-valued attribute from the result resource record.">voc_resGetFloat</a> (RegResult res, <span class="keywordtype">char</span> *attribute, <span class="keywordtype">int</span> index);
+<a name="l00287"></a>00287 <span class="keywordtype">int</span> <a class="code" href="vocRegistry_8c.html#8b2e5aa46ad515427da01b9314434cef" title="Get an int-valued attribute from the result resource record.">voc_resGetInt</a> (RegResult res, <span class="keywordtype">char</span> *attribute, <span class="keywordtype">int</span> index);
+<a name="l00288"></a>00288
+<a name="l00289"></a>00289
+<a name="l00290"></a>00290
+<a name="l00291"></a>00291 <span class="comment">/* SESAME interface procedures.</span>
+<a name="l00292"></a>00292 <span class="comment"> */</span>
+<a name="l00293"></a>00293 Sesame <a class="code" href="vocSesame_8c.html#467c02f32e92e6808b6d1c129b8d5b04" title="Query the CDS Sesame name resolver service.">voc_nameResolver</a> (<span class="keywordtype">char</span> *target);
+<a name="l00294"></a>00294 <span class="keywordtype">char</span> *<a class="code" href="vocSesame_8c.html#911355789d941847843c8d42ad00314a" title="Return the (ra,dec) position for the object.">voc_resolverPos</a> (Sesame sr);
+<a name="l00295"></a>00295 <span class="keywordtype">double</span> <a class="code" href="vocSesame_8c.html#4526ce29541bc2a1b4c939c494c6d00e" title="Return the RA as a double precision value.">voc_resolverRA</a> (Sesame sr);
+<a name="l00296"></a>00296 <span class="keywordtype">double</span> <a class="code" href="vocSesame_8c.html#46c25290911c3217bdc4294eded2ba46" title="Return the DEC as a double precision value.">voc_resolverDEC</a> (Sesame sr);
+<a name="l00297"></a>00297 <span class="keywordtype">double</span> <a class="code" href="vocSesame_8c.html#4fe9b855c8e4cca0f1fdced36d5ae8ea" title="Return the RA error as a double precision value.">voc_resolverRAErr</a> (Sesame sr);
+<a name="l00298"></a>00298 <span class="keywordtype">double</span> <a class="code" href="vocSesame_8c.html#f0fb68ddb8bd62c72e21de2bed525b4c" title="Return the Dec error as a double precision value.">voc_resolverDECErr</a> (Sesame sr);
+<a name="l00299"></a>00299 <span class="keywordtype">char</span> *<a class="code" href="vocSesame_8c.html#c7d46e5f565c97b0250fe837f985e283" title="Return a string containing the object type description.">voc_resolverOtype</a> (Sesame sr);
+<a name="l00300"></a>00300
+<a name="l00301"></a>00301
+<a name="l00302"></a>00302
+<a name="l00303"></a>00303 <span class="comment">/* SkyBoT interface procedures.</span>
+<a name="l00304"></a>00304 <span class="comment"> */</span>
+<a name="l00305"></a>00305 Skybot voc_skybot (<span class="keywordtype">double</span> ra, <span class="keywordtype">double</span> dec, <span class="keywordtype">double</span> rsz, <span class="keywordtype">double</span> dsz,
+<a name="l00306"></a>00306 <span class="keywordtype">double</span> epoch);
+<a name="l00307"></a>00307 <span class="keywordtype">int</span> voc_skybotNObjs (Skybot sb);
+<a name="l00308"></a>00308 <span class="keywordtype">char</span> *voc_skybotStrAttr (Skybot sb, <span class="keywordtype">char</span> *attr, <span class="keywordtype">int</span> index);
+<a name="l00309"></a>00309 <span class="keywordtype">double</span> voc_skybotDblAttr (Skybot sb, <span class="keywordtype">char</span> *attr, <span class="keywordtype">int</span> index);
+<a name="l00310"></a>00310
+<a name="l00311"></a>00311
+<a name="l00312"></a>00312
+<a name="l00313"></a>00313 <span class="comment">/***************************************************************************</span>
+<a name="l00314"></a>00314 <span class="comment"> * VOCMSG.C Prototypes</span>
+<a name="l00315"></a>00315 <span class="comment"> */</span>
+<a name="l00316"></a>00316 <span class="preprocessor">#ifdef _VOCLIENT_LIB_</span>
+<a name="l00317"></a>00317 <span class="preprocessor"></span>
+<a name="l00318"></a>00318 vocMsg_t *<a class="code" href="vocMsg_8c.html#a36229a2ccfb8e7a446bcf8fd66e56e5" title="Create a CALL message structure initialized w/ parameters.">msg_newCallMsg</a> (ObjectID objid, <span class="keywordtype">char</span> *method, <span class="keywordtype">int</span> nparams);
+<a name="l00319"></a>00319 vocMsg_t *<a class="code" href="vocMsg_8c.html#517cadcc8f9fcdf4133f7cacf629ca4a" title="Create a RESULT message structure initialized w/ parameters.">msg_newResultMsg</a> (<span class="keywordtype">int</span> status, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> nitems);
+<a name="l00320"></a>00320 vocMsg_t *<a class="code" href="vocMsg_8c.html#77b1550e78504576d33c763da2e0e10e" title="Create a MSG message initialized w/ parameters.">msg_newMsg</a> (<span class="keywordtype">char</span> *msgclass, <span class="keywordtype">char</span> *str);
+<a name="l00321"></a>00321
+<a name="l00322"></a>00322 vocMsg_t *<a class="code" href="vocMsg_8c.html#e894a9cdf87bb390cddd090447d2d644" title="Create a END message to shutdown the server.">msg_shutdownMsg</a> ();
+<a name="l00323"></a>00323 vocMsg_t *<a class="code" href="vocMsg_8c.html#3183a0065ee97668b3a96dff25b919c4" title="Create a QUIT message.">msg_quitMsg</a> ();
+<a name="l00324"></a>00324 vocMsg_t *<a class="code" href="vocMsg_8c.html#b97f1775026d5eaf7de3e03de6e94f1e" title="Create an ACK message.">msg_ackMsg</a> ();
+<a name="l00325"></a>00325
+<a name="l00326"></a>00326 vocRes_t *<a class="code" href="vocMsg_8c.html#35bfd91fb870b9e42398c2c77099a486" title="Send the message to the VOClient server.">msg_sendMsg</a> (<span class="keywordtype">int</span> fd, vocMsg_t *msg);
+<a name="l00327"></a>00327 <span class="keywordtype">int</span> <a class="code" href="vocMsg_8c.html#1aec8e19abd5f1741434bc0e70823965" title="Send the message to the VOClient server.">msg_sendRawMsg</a> (<span class="keywordtype">int</span> fd, vocMsg_t *msg);
+<a name="l00328"></a>00328
+<a name="l00329"></a>00329 vocRes_t *<a class="code" href="vocMsg_8c.html#c6db5a0bf755a1637562ab4a314c5468" title="Read and parse a result message.">msg_getResult</a> (<span class="keywordtype">int</span> fd);
+<a name="l00330"></a>00330 vocRes_t *<a class="code" href="vocMsg_8c.html#97a642f02095c629a992c67a7cc09080" title="Read and parse a result message, saving data to named file.">msg_getResultToFile</a> (<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> *fname, <span class="keywordtype">int</span> overwrite);
+<a name="l00331"></a>00331
+<a name="l00332"></a>00332 <span class="keywordtype">void</span> <a class="code" href="vocMsg_8c.html#5fb36fa1a1b0bf447771272393e77df2" title="Add a int parameter to an outgoing CALL message.">msg_addIntParam</a> (vocMsg_t *msg, <span class="keywordtype">int</span> ival);
+<a name="l00333"></a>00333 <span class="keywordtype">void</span> <a class="code" href="vocMsg_8c.html#eae320530430c840411cb1c401b88033" title="Add a float parameter to an outgoing CALL message.">msg_addFloatParam</a> (vocMsg_t *msg, <span class="keywordtype">double</span> dval);
+<a name="l00334"></a>00334 <span class="keywordtype">void</span> <a class="code" href="vocMsg_8c.html#4f880a3c986d13c65b7a7d5c49c79707" title="Add a string parameter to an outgoing CALL message.">msg_addStringParam</a> (vocMsg_t *msg, <span class="keywordtype">char</span> *str);
+<a name="l00335"></a>00335 <span class="keywordtype">void</span> <a class="code" href="vocMsg_8c.html#cf6e8745c00f7d832dcfc275cf43fcf5" title="Add a integer value to a RESULT string.">msg_addIntResult</a> (vocMsg_t *msg, <span class="keywordtype">int</span> ival);
+<a name="l00336"></a>00336 <span class="keywordtype">void</span> msg_addFloatResult (vocMsg_t *msg, <span class="keywordtype">double</span> dval);
+<a name="l00337"></a>00337 <span class="keywordtype">void</span> <a class="code" href="vocMsg_8c.html#51fb5ca640761a4e517562dee9698fff" title="Add a string value to a RESULT string.">msg_addStringResult</a> (vocMsg_t *msg, <span class="keywordtype">char</span> *str);
+<a name="l00338"></a>00338
+<a name="l00339"></a>00339 <span class="keywordtype">int</span> <a class="code" href="vocMsg_8c.html#0d9804ce039ea71007d8d500fbf49809" title="Get result status.">msg_resultStatus</a> (vocRes_t *res);
+<a name="l00340"></a>00340 <span class="keywordtype">int</span> <a class="code" href="vocMsg_8c.html#ec73a99da1108fa9da1a2ff97d235a36" title="Get result type.">msg_resultType</a> (vocRes_t *res);
+<a name="l00341"></a>00341 <span class="keywordtype">int</span> <a class="code" href="vocMsg_8c.html#8e2098c2d797fc23b8edf7886e65334c" title="Get result length.">msg_resultLength</a> (vocRes_t *res);
+<a name="l00342"></a>00342
+<a name="l00343"></a>00343 <span class="keywordtype">int</span> <a class="code" href="vocMsg_8c.html#44250b9b039021f88ddf37fbe5361065" title="Get an integer result by index.">msg_getIntResult</a> (vocRes_t *res, <span class="keywordtype">int</span> index);
+<a name="l00344"></a>00344 <span class="keywordtype">double</span> <a class="code" href="vocMsg_8c.html#b060cbd5cfe61864cc91b24080b5c2cd" title="Get a float result by index.">msg_getFloatResult</a> (vocRes_t *res, <span class="keywordtype">int</span> index);
+<a name="l00345"></a>00345 <span class="keywordtype">char</span> *<a class="code" href="vocMsg_8c.html#71e1c7c95771d4e6ba986bcf6099d746" title="Get a string result by index.">msg_getStringResult</a> (vocRes_t *res, <span class="keywordtype">int</span> index);
+<a name="l00346"></a>00346 <span class="keywordtype">void</span> *<a class="code" href="vocMsg_8c.html#3bce32d52e40e26a9fb0bd57c48e6dbe" title="Get result buffer.">msg_getBuffer</a> (vocRes_t *res);
+<a name="l00347"></a>00347 <span class="keywordtype">char</span> *msg_getFilename (vocRes_t *res);
+<a name="l00348"></a>00348
+<a name="l00349"></a>00349 <span class="preprocessor">#ifdef __cplusplus</span>
+<a name="l00350"></a>00350 <span class="preprocessor"></span>}
+<a name="l00351"></a>00351 <span class="preprocessor">#endif</span>
+<a name="l00352"></a>00352 <span class="preprocessor"></span>
+<a name="l00353"></a>00353 <span class="preprocessor">#endif</span>
+</pre></div></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/annotated.html b/vendor/voclient/libvoclient/doc/html/annotated.html
new file mode 100644
index 00000000..3da57461
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/annotated.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="structObject.html">Object</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/classes.html b/vendor/voclient/libvoclient/doc/html/classes.html
new file mode 100644
index 00000000..c6b5dc3a
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/classes.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Alphabetical List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Class Index</h1><p><div class="qindex"><a class="qindex" href="#letter_O">O</a></div><p>
+<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;O&nbsp;&nbsp;</div></td></tr></table>
+</td><td><a class="el" href="structObject.html">Object</a>&nbsp;&nbsp;&nbsp;</td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_O">O</a></div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/doxygen.css b/vendor/voclient/libvoclient/doc/html/doxygen.css
new file mode 100644
index 00000000..3767dc95
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/doxygen.css
@@ -0,0 +1,441 @@
+body, table, div, p, dl {
+ font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+ font-size: 12px;
+}
+
+/* @group Heading Levels */
+
+h1 {
+ text-align: center;
+ font-size: 150%;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+div.qindex, div.navtab{
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #153788;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #1b77c5;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+}
+
+a.codeRef {
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+pre.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+
+td.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ border: 1px solid #CCCCCC;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+}
+
+td.indexvalue {
+ background-color: #e8eef2;
+ border: 1px solid #CCCCCC;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #f0f0f0;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+/* @end */
+
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+
+th.dirtab {
+ background: #e8eef2;
+ font-weight: bold;
+}
+
+hr {
+ height: 0;
+ border: none;
+ border-top: 1px solid #666;
+}
+
+/* @group Member Descriptions */
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #FAFAFA;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+ border-top: 1px solid #ccc;
+}
+
+.memTemplParams {
+ color: #606060;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+ margin-left: 3px;
+}
+
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memitem {
+ padding: 0;
+}
+
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+
+.memproto, .memdoc {
+ border: 1px solid #84b0c7;
+}
+
+.memproto {
+ padding: 0;
+ background-color: #d5e1e8;
+ font-weight: bold;
+ -webkit-border-top-left-radius: 8px;
+ -webkit-border-top-right-radius: 8px;
+ -moz-border-radius-topleft: 8px;
+ -moz-border-radius-topright: 8px;
+}
+
+.memdoc {
+ padding: 2px 5px;
+ background-color: #eef3f5;
+ border-top-width: 0;
+ -webkit-border-bottom-left-radius: 8px;
+ -webkit-border-bottom-right-radius: 8px;
+ -moz-border-radius-bottomleft: 8px;
+ -moz-border-radius-bottomright: 8px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ font-family: sans-serif;
+ margin: 0.5em;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice. Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+ height: 61px;
+ background-repeat: no-repeat;
+ background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+ display: none;
+}
+*/
+
+.directory > h3 {
+ margin-top: 0;
+}
+
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory div {
+ display: none;
+ margin: 0px;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+.directory-alt > h3 {
+ margin-top: 0;
+}
+
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+
+.directory-alt img {
+ vertical-align: -30%;
+}
+
+/* @end */
+
+address {
+ font-style: normal;
+ color: #333;
+}
diff --git a/vendor/voclient/libvoclient/doc/html/doxygen.png b/vendor/voclient/libvoclient/doc/html/doxygen.png
new file mode 100644
index 00000000..f0a274bb
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/doxygen.png
Binary files differ
diff --git a/vendor/voclient/libvoclient/doc/html/files.html b/vendor/voclient/libvoclient/doc/html/files.html
new file mode 100644
index 00000000..4f6320e1
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/files.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: File Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey"><b>VOClient.h</b> <a href="VOClient_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocMsg_8c.html">vocMsg.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocRegistry_8c.html">vocRegistry.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocRegistry__f77_8c.html">vocRegistry_f77.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocRegistry__spp_8c.html">vocRegistry_spp.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocSesame_8c.html">vocSesame.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocSesame__f77_8c.html">vocSesame_f77.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocSesame__spp_8c.html">vocSesame_spp.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocSkybot_8c.html">vocSkybot.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocUtil__f77_8c.html">vocUtil_f77.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vocUtil__spp_8c.html">vocUtil_spp.c</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/globals.html b/vendor/voclient/libvoclient/doc/html/globals.html
new file mode 100644
index 00000000..bde6c30c
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/globals.html
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_x"><span>x</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all documented file members with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>msg_ackMsg()
+: <a class="el" href="vocMsg_8c.html#b97f1775026d5eaf7de3e03de6e94f1e">vocMsg.c</a>
+<li>msg_addFloatParam()
+: <a class="el" href="vocMsg_8c.html#eae320530430c840411cb1c401b88033">vocMsg.c</a>
+<li>msg_addIntParam()
+: <a class="el" href="vocMsg_8c.html#5fb36fa1a1b0bf447771272393e77df2">vocMsg.c</a>
+<li>msg_addIntResult()
+: <a class="el" href="vocMsg_8c.html#cf6e8745c00f7d832dcfc275cf43fcf5">vocMsg.c</a>
+<li>msg_addStringParam()
+: <a class="el" href="vocMsg_8c.html#4f880a3c986d13c65b7a7d5c49c79707">vocMsg.c</a>
+<li>msg_addStringResult()
+: <a class="el" href="vocMsg_8c.html#51fb5ca640761a4e517562dee9698fff">vocMsg.c</a>
+<li>msg_getBuffer()
+: <a class="el" href="vocMsg_8c.html#3bce32d52e40e26a9fb0bd57c48e6dbe">vocMsg.c</a>
+<li>msg_getFloatResult()
+: <a class="el" href="vocMsg_8c.html#b060cbd5cfe61864cc91b24080b5c2cd">vocMsg.c</a>
+<li>msg_getIntResult()
+: <a class="el" href="vocMsg_8c.html#44250b9b039021f88ddf37fbe5361065">vocMsg.c</a>
+<li>msg_getResult()
+: <a class="el" href="vocMsg_8c.html#c6db5a0bf755a1637562ab4a314c5468">vocMsg.c</a>
+<li>msg_getResultToFile()
+: <a class="el" href="vocMsg_8c.html#97a642f02095c629a992c67a7cc09080">vocMsg.c</a>
+<li>msg_getStringResult()
+: <a class="el" href="vocMsg_8c.html#71e1c7c95771d4e6ba986bcf6099d746">vocMsg.c</a>
+<li>msg_newCallMsg()
+: <a class="el" href="vocMsg_8c.html#a36229a2ccfb8e7a446bcf8fd66e56e5">vocMsg.c</a>
+<li>msg_newMsg()
+: <a class="el" href="vocMsg_8c.html#77b1550e78504576d33c763da2e0e10e">vocMsg.c</a>
+<li>msg_newResultMsg()
+: <a class="el" href="vocMsg_8c.html#517cadcc8f9fcdf4133f7cacf629ca4a">vocMsg.c</a>
+<li>msg_noackMsg()
+: <a class="el" href="vocMsg_8c.html#3cc1a4a8e24b8322ac8a2b0f6e151134">vocMsg.c</a>
+<li>msg_quitMsg()
+: <a class="el" href="vocMsg_8c.html#3183a0065ee97668b3a96dff25b919c4">vocMsg.c</a>
+<li>msg_resultLength()
+: <a class="el" href="vocMsg_8c.html#8e2098c2d797fc23b8edf7886e65334c">vocMsg.c</a>
+<li>msg_resultStatus()
+: <a class="el" href="vocMsg_8c.html#0d9804ce039ea71007d8d500fbf49809">vocMsg.c</a>
+<li>msg_resultType()
+: <a class="el" href="vocMsg_8c.html#ec73a99da1108fa9da1a2ff97d235a36">vocMsg.c</a>
+<li>msg_sendMsg()
+: <a class="el" href="vocMsg_8c.html#35bfd91fb870b9e42398c2c77099a486">vocMsg.c</a>
+<li>msg_sendRawMsg()
+: <a class="el" href="vocMsg_8c.html#1aec8e19abd5f1741434bc0e70823965">vocMsg.c</a>
+<li>msg_shutdownMsg()
+: <a class="el" href="vocMsg_8c.html#e894a9cdf87bb390cddd090447d2d644">vocMsg.c</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>spp2c()
+: <a class="el" href="vocUtil__spp_8c.html#ee3f5c02637713505163c630426633da">vocUtil_spp.c</a>
+<li>sstrip()
+: <a class="el" href="vocUtil__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">vocUtil_f77.c</a>
+, <a class="el" href="vocSesame__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">vocSesame_f77.c</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>voc_nameResolver()
+: <a class="el" href="vocSesame_8c.html#467c02f32e92e6808b6d1c129b8d5b04">vocSesame.c</a>
+<li>voc_regAddSearchTerm()
+: <a class="el" href="vocRegistry_8c.html#eb0ee2e29939419af10cfbebc82e2110">vocRegistry.c</a>
+<li>voc_regConstWaveband()
+: <a class="el" href="vocRegistry_8c.html#8d63761f770b4327d44cd1c618ce186f">vocRegistry.c</a>
+<li>voc_regDALOnly()
+: <a class="el" href="vocRegistry_8c.html#494458ce877c4fa8442ff398873195b4">vocRegistry.c</a>
+<li>voc_regExecute()
+: <a class="el" href="vocRegistry_8c.html#cea0f3cbac1f593ad5899a5252803689">vocRegistry.c</a>
+<li>voc_regExecuteRaw()
+: <a class="el" href="vocRegistry_8c.html#ac9bb69c156fbdae90cb33f396336995">vocRegistry.c</a>
+<li>voc_regGetQueryString()
+: <a class="el" href="vocRegistry_8c.html#6b8ad34f22f1c22e34b56dc0ff635355">vocRegistry.c</a>
+<li>voc_regGetSTCount()
+: <a class="el" href="vocRegistry_8c.html#4780f7c8975abf074f3b41e27c31a7e3">vocRegistry.c</a>
+<li>voc_regQuery()
+: <a class="el" href="vocRegistry_8c.html#cfd7f451139af07ff58c173d793b3962">vocRegistry.c</a>
+<li>voc_regRemoveSearchTerm()
+: <a class="el" href="vocRegistry_8c.html#9b9e8c445ffb38711ef4ee345fa0f68d">vocRegistry.c</a>
+<li>voc_regSearch()
+: <a class="el" href="vocRegistry_8c.html#555aa2dc7ece17033e9399ed00ff4b78">vocRegistry.c</a>
+<li>voc_regSearchByService()
+: <a class="el" href="vocRegistry_8c.html#25e61b2c021394192ca8e74e96f45b28">vocRegistry.c</a>
+<li>voc_regSortRes()
+: <a class="el" href="vocRegistry_8c.html#800645e5f4dc73bcf99730db9cb4d439">vocRegistry.c</a>
+<li>voc_resGetCount()
+: <a class="el" href="vocRegistry_8c.html#b6ce658f8bb8803ad73c5c15ccdf7dd4">vocRegistry.c</a>
+<li>voc_resGetFloat()
+: <a class="el" href="vocRegistry_8c.html#3dceef82335c216785372fdd9789cc0c">vocRegistry.c</a>
+<li>voc_resGetInt()
+: <a class="el" href="vocRegistry_8c.html#8b2e5aa46ad515427da01b9314434cef">vocRegistry.c</a>
+<li>voc_resGetStr()
+: <a class="el" href="vocRegistry_8c.html#c5376fa75dc000e0b820fd4e29e5cfaa">vocRegistry.c</a>
+<li>voc_resolverDEC()
+: <a class="el" href="vocSesame_8c.html#46c25290911c3217bdc4294eded2ba46">vocSesame.c</a>
+<li>voc_resolverDECErr()
+: <a class="el" href="vocSesame_8c.html#f0fb68ddb8bd62c72e21de2bed525b4c">vocSesame.c</a>
+<li>voc_resolverOtype()
+: <a class="el" href="vocSesame_8c.html#c7d46e5f565c97b0250fe837f985e283">vocSesame.c</a>
+<li>voc_resolverPos()
+: <a class="el" href="vocSesame_8c.html#911355789d941847843c8d42ad00314a">vocSesame.c</a>
+<li>voc_resolverRA()
+: <a class="el" href="vocSesame_8c.html#4526ce29541bc2a1b4c939c494c6d00e">vocSesame.c</a>
+<li>voc_resolverRAErr()
+: <a class="el" href="vocSesame_8c.html#4fe9b855c8e4cca0f1fdced36d5ae8ea">vocSesame.c</a>
+<li>vx_errresolverdec()
+: <a class="el" href="vocSesame__spp_8c.html#593db6460d3932869f55cfdf398dddce">vocSesame_spp.c</a>
+<li>vx_errresolverra()
+: <a class="el" href="vocSesame__spp_8c.html#81978654bf3f111cbde1c3d9643a6224">vocSesame_spp.c</a>
+<li>vx_nameresolver()
+: <a class="el" href="vocSesame__spp_8c.html#07b6bc655c41867be4719d72e30e7dcd">vocSesame_spp.c</a>
+<li>vx_raddsearchterm()
+: <a class="el" href="vocRegistry__spp_8c.html#bd44eef01bb352184e0b8b7999641537">vocRegistry_spp.c</a>
+<li>vx_regquery()
+: <a class="el" href="vocRegistry__spp_8c.html#0ca491fff22d8bb32252ac23d4ae7560">vocRegistry_spp.c</a>
+<li>vx_regsearch()
+: <a class="el" href="vocRegistry__spp_8c.html#3c05d7c8cc258aa0727c1c1468384993">vocRegistry_spp.c</a>
+<li>vx_regsearchbysvc()
+: <a class="el" href="vocRegistry__spp_8c.html#efe6285c929da91b5c3a9554eb5fe1ee">vocRegistry_spp.c</a>
+<li>vx_resolverdec()
+: <a class="el" href="vocSesame__spp_8c.html#243498f57a863c7364d12bf8da806119">vocSesame_spp.c</a>
+<li>vx_resolverpos()
+: <a class="el" href="vocSesame__spp_8c.html#701bdc17597db7e4e7a6dcace4578935">vocSesame_spp.c</a>
+<li>vx_resolverra()
+: <a class="el" href="vocSesame__spp_8c.html#443309cb8f9cf4d5659d1530551b1a4e">vocSesame_spp.c</a>
+<li>vx_rexecute()
+: <a class="el" href="vocRegistry__spp_8c.html#3010d75062148d186e6c168d012eb01b">vocRegistry_spp.c</a>
+<li>vx_rexecuteraw()
+: <a class="el" href="vocRegistry__spp_8c.html#b98d1ec0013f957594820a379dbc55f0">vocRegistry_spp.c</a>
+<li>vx_rgetquerystring()
+: <a class="el" href="vocRegistry__spp_8c.html#e4339cec42aa0ba730c335879b9d3ca1">vocRegistry_spp.c</a>
+<li>vx_rgetstcount()
+: <a class="el" href="vocRegistry__spp_8c.html#8232e1a2c9e548c9ed0a38f33ff462bc">vocRegistry_spp.c</a>
+<li>vx_rremovesearchterm()
+: <a class="el" href="vocRegistry__spp_8c.html#95f961540d6a3c3eb7c06beb87c1bab7">vocRegistry_spp.c</a>
+<li>vx_rscount()
+: <a class="el" href="vocRegistry__spp_8c.html#2b3cbaf9c927266e4d0fb9ee3b3d7231">vocRegistry_spp.c</a>
+<li>vx_rsfloat()
+: <a class="el" href="vocRegistry__spp_8c.html#8e6f51d16bf357c212001d101e43201c">vocRegistry_spp.c</a>
+<li>vx_rsint()
+: <a class="el" href="vocRegistry__spp_8c.html#db53941e5010c36f6a36e318f4fe55da">vocRegistry_spp.c</a>
+<li>vx_rsstr()
+: <a class="el" href="vocRegistry__spp_8c.html#e8ada1986ac82faa682eb28296d00b97">vocRegistry_spp.c</a>
+</ul>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>XCHAR
+: <a class="el" href="vocUtil__spp_8c.html#a438904dccdba8cd87e4161c96dac1a1">vocUtil_spp.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/globals_defs.html b/vendor/voclient/libvoclient/doc/html/globals_defs.html
new file mode 100644
index 00000000..94d779a3
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/globals_defs.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<ul>
+<li>XCHAR
+: <a class="el" href="vocUtil__spp_8c.html#a438904dccdba8cd87e4161c96dac1a1">vocUtil_spp.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/globals_func.html b/vendor/voclient/libvoclient/doc/html/globals_func.html
new file mode 100644
index 00000000..7f1e6963
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/globals_func.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>msg_ackMsg()
+: <a class="el" href="vocMsg_8c.html#b97f1775026d5eaf7de3e03de6e94f1e">vocMsg.c</a>
+<li>msg_addFloatParam()
+: <a class="el" href="vocMsg_8c.html#eae320530430c840411cb1c401b88033">vocMsg.c</a>
+<li>msg_addIntParam()
+: <a class="el" href="vocMsg_8c.html#5fb36fa1a1b0bf447771272393e77df2">vocMsg.c</a>
+<li>msg_addIntResult()
+: <a class="el" href="vocMsg_8c.html#cf6e8745c00f7d832dcfc275cf43fcf5">vocMsg.c</a>
+<li>msg_addStringParam()
+: <a class="el" href="vocMsg_8c.html#4f880a3c986d13c65b7a7d5c49c79707">vocMsg.c</a>
+<li>msg_addStringResult()
+: <a class="el" href="vocMsg_8c.html#51fb5ca640761a4e517562dee9698fff">vocMsg.c</a>
+<li>msg_getBuffer()
+: <a class="el" href="vocMsg_8c.html#3bce32d52e40e26a9fb0bd57c48e6dbe">vocMsg.c</a>
+<li>msg_getFloatResult()
+: <a class="el" href="vocMsg_8c.html#b060cbd5cfe61864cc91b24080b5c2cd">vocMsg.c</a>
+<li>msg_getIntResult()
+: <a class="el" href="vocMsg_8c.html#44250b9b039021f88ddf37fbe5361065">vocMsg.c</a>
+<li>msg_getResult()
+: <a class="el" href="vocMsg_8c.html#c6db5a0bf755a1637562ab4a314c5468">vocMsg.c</a>
+<li>msg_getResultToFile()
+: <a class="el" href="vocMsg_8c.html#97a642f02095c629a992c67a7cc09080">vocMsg.c</a>
+<li>msg_getStringResult()
+: <a class="el" href="vocMsg_8c.html#71e1c7c95771d4e6ba986bcf6099d746">vocMsg.c</a>
+<li>msg_newCallMsg()
+: <a class="el" href="vocMsg_8c.html#a36229a2ccfb8e7a446bcf8fd66e56e5">vocMsg.c</a>
+<li>msg_newMsg()
+: <a class="el" href="vocMsg_8c.html#77b1550e78504576d33c763da2e0e10e">vocMsg.c</a>
+<li>msg_newResultMsg()
+: <a class="el" href="vocMsg_8c.html#517cadcc8f9fcdf4133f7cacf629ca4a">vocMsg.c</a>
+<li>msg_noackMsg()
+: <a class="el" href="vocMsg_8c.html#3cc1a4a8e24b8322ac8a2b0f6e151134">vocMsg.c</a>
+<li>msg_quitMsg()
+: <a class="el" href="vocMsg_8c.html#3183a0065ee97668b3a96dff25b919c4">vocMsg.c</a>
+<li>msg_resultLength()
+: <a class="el" href="vocMsg_8c.html#8e2098c2d797fc23b8edf7886e65334c">vocMsg.c</a>
+<li>msg_resultStatus()
+: <a class="el" href="vocMsg_8c.html#0d9804ce039ea71007d8d500fbf49809">vocMsg.c</a>
+<li>msg_resultType()
+: <a class="el" href="vocMsg_8c.html#ec73a99da1108fa9da1a2ff97d235a36">vocMsg.c</a>
+<li>msg_sendMsg()
+: <a class="el" href="vocMsg_8c.html#35bfd91fb870b9e42398c2c77099a486">vocMsg.c</a>
+<li>msg_sendRawMsg()
+: <a class="el" href="vocMsg_8c.html#1aec8e19abd5f1741434bc0e70823965">vocMsg.c</a>
+<li>msg_shutdownMsg()
+: <a class="el" href="vocMsg_8c.html#e894a9cdf87bb390cddd090447d2d644">vocMsg.c</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>spp2c()
+: <a class="el" href="vocUtil__spp_8c.html#ee3f5c02637713505163c630426633da">vocUtil_spp.c</a>
+<li>sstrip()
+: <a class="el" href="vocUtil__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">vocUtil_f77.c</a>
+, <a class="el" href="vocSesame__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">vocSesame_f77.c</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>voc_nameResolver()
+: <a class="el" href="vocSesame_8c.html#467c02f32e92e6808b6d1c129b8d5b04">vocSesame.c</a>
+<li>voc_regAddSearchTerm()
+: <a class="el" href="vocRegistry_8c.html#eb0ee2e29939419af10cfbebc82e2110">vocRegistry.c</a>
+<li>voc_regConstWaveband()
+: <a class="el" href="vocRegistry_8c.html#8d63761f770b4327d44cd1c618ce186f">vocRegistry.c</a>
+<li>voc_regDALOnly()
+: <a class="el" href="vocRegistry_8c.html#494458ce877c4fa8442ff398873195b4">vocRegistry.c</a>
+<li>voc_regExecute()
+: <a class="el" href="vocRegistry_8c.html#cea0f3cbac1f593ad5899a5252803689">vocRegistry.c</a>
+<li>voc_regExecuteRaw()
+: <a class="el" href="vocRegistry_8c.html#ac9bb69c156fbdae90cb33f396336995">vocRegistry.c</a>
+<li>voc_regGetQueryString()
+: <a class="el" href="vocRegistry_8c.html#6b8ad34f22f1c22e34b56dc0ff635355">vocRegistry.c</a>
+<li>voc_regGetSTCount()
+: <a class="el" href="vocRegistry_8c.html#4780f7c8975abf074f3b41e27c31a7e3">vocRegistry.c</a>
+<li>voc_regQuery()
+: <a class="el" href="vocRegistry_8c.html#cfd7f451139af07ff58c173d793b3962">vocRegistry.c</a>
+<li>voc_regRemoveSearchTerm()
+: <a class="el" href="vocRegistry_8c.html#9b9e8c445ffb38711ef4ee345fa0f68d">vocRegistry.c</a>
+<li>voc_regSearch()
+: <a class="el" href="vocRegistry_8c.html#555aa2dc7ece17033e9399ed00ff4b78">vocRegistry.c</a>
+<li>voc_regSearchByService()
+: <a class="el" href="vocRegistry_8c.html#25e61b2c021394192ca8e74e96f45b28">vocRegistry.c</a>
+<li>voc_regSortRes()
+: <a class="el" href="vocRegistry_8c.html#800645e5f4dc73bcf99730db9cb4d439">vocRegistry.c</a>
+<li>voc_resGetCount()
+: <a class="el" href="vocRegistry_8c.html#b6ce658f8bb8803ad73c5c15ccdf7dd4">vocRegistry.c</a>
+<li>voc_resGetFloat()
+: <a class="el" href="vocRegistry_8c.html#3dceef82335c216785372fdd9789cc0c">vocRegistry.c</a>
+<li>voc_resGetInt()
+: <a class="el" href="vocRegistry_8c.html#8b2e5aa46ad515427da01b9314434cef">vocRegistry.c</a>
+<li>voc_resGetStr()
+: <a class="el" href="vocRegistry_8c.html#c5376fa75dc000e0b820fd4e29e5cfaa">vocRegistry.c</a>
+<li>voc_resolverDEC()
+: <a class="el" href="vocSesame_8c.html#46c25290911c3217bdc4294eded2ba46">vocSesame.c</a>
+<li>voc_resolverDECErr()
+: <a class="el" href="vocSesame_8c.html#f0fb68ddb8bd62c72e21de2bed525b4c">vocSesame.c</a>
+<li>voc_resolverOtype()
+: <a class="el" href="vocSesame_8c.html#c7d46e5f565c97b0250fe837f985e283">vocSesame.c</a>
+<li>voc_resolverPos()
+: <a class="el" href="vocSesame_8c.html#911355789d941847843c8d42ad00314a">vocSesame.c</a>
+<li>voc_resolverRA()
+: <a class="el" href="vocSesame_8c.html#4526ce29541bc2a1b4c939c494c6d00e">vocSesame.c</a>
+<li>voc_resolverRAErr()
+: <a class="el" href="vocSesame_8c.html#4fe9b855c8e4cca0f1fdced36d5ae8ea">vocSesame.c</a>
+<li>vx_errresolverdec()
+: <a class="el" href="vocSesame__spp_8c.html#593db6460d3932869f55cfdf398dddce">vocSesame_spp.c</a>
+<li>vx_errresolverra()
+: <a class="el" href="vocSesame__spp_8c.html#81978654bf3f111cbde1c3d9643a6224">vocSesame_spp.c</a>
+<li>vx_nameresolver()
+: <a class="el" href="vocSesame__spp_8c.html#07b6bc655c41867be4719d72e30e7dcd">vocSesame_spp.c</a>
+<li>vx_raddsearchterm()
+: <a class="el" href="vocRegistry__spp_8c.html#bd44eef01bb352184e0b8b7999641537">vocRegistry_spp.c</a>
+<li>vx_regquery()
+: <a class="el" href="vocRegistry__spp_8c.html#0ca491fff22d8bb32252ac23d4ae7560">vocRegistry_spp.c</a>
+<li>vx_regsearch()
+: <a class="el" href="vocRegistry__spp_8c.html#3c05d7c8cc258aa0727c1c1468384993">vocRegistry_spp.c</a>
+<li>vx_regsearchbysvc()
+: <a class="el" href="vocRegistry__spp_8c.html#efe6285c929da91b5c3a9554eb5fe1ee">vocRegistry_spp.c</a>
+<li>vx_resolverdec()
+: <a class="el" href="vocSesame__spp_8c.html#243498f57a863c7364d12bf8da806119">vocSesame_spp.c</a>
+<li>vx_resolverpos()
+: <a class="el" href="vocSesame__spp_8c.html#701bdc17597db7e4e7a6dcace4578935">vocSesame_spp.c</a>
+<li>vx_resolverra()
+: <a class="el" href="vocSesame__spp_8c.html#443309cb8f9cf4d5659d1530551b1a4e">vocSesame_spp.c</a>
+<li>vx_rexecute()
+: <a class="el" href="vocRegistry__spp_8c.html#3010d75062148d186e6c168d012eb01b">vocRegistry_spp.c</a>
+<li>vx_rexecuteraw()
+: <a class="el" href="vocRegistry__spp_8c.html#b98d1ec0013f957594820a379dbc55f0">vocRegistry_spp.c</a>
+<li>vx_rgetquerystring()
+: <a class="el" href="vocRegistry__spp_8c.html#e4339cec42aa0ba730c335879b9d3ca1">vocRegistry_spp.c</a>
+<li>vx_rgetstcount()
+: <a class="el" href="vocRegistry__spp_8c.html#8232e1a2c9e548c9ed0a38f33ff462bc">vocRegistry_spp.c</a>
+<li>vx_rremovesearchterm()
+: <a class="el" href="vocRegistry__spp_8c.html#95f961540d6a3c3eb7c06beb87c1bab7">vocRegistry_spp.c</a>
+<li>vx_rscount()
+: <a class="el" href="vocRegistry__spp_8c.html#2b3cbaf9c927266e4d0fb9ee3b3d7231">vocRegistry_spp.c</a>
+<li>vx_rsfloat()
+: <a class="el" href="vocRegistry__spp_8c.html#8e6f51d16bf357c212001d101e43201c">vocRegistry_spp.c</a>
+<li>vx_rsint()
+: <a class="el" href="vocRegistry__spp_8c.html#db53941e5010c36f6a36e318f4fe55da">vocRegistry_spp.c</a>
+<li>vx_rsstr()
+: <a class="el" href="vocRegistry__spp_8c.html#e8ada1986ac82faa682eb28296d00b97">vocRegistry_spp.c</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/index.html b/vendor/voclient/libvoclient/doc/html/index.html
new file mode 100644
index 00000000..0d1ce1c9
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>VOClient API Documentation</h1>
+<p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/structObject-members.html b/vendor/voclient/libvoclient/doc/html/structObject-members.html
new file mode 100644
index 00000000..5deb1453
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/structObject-members.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Object Member List</h1>This is the complete list of members for <a class="el" href="structObject.html">Object</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>dec</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>edec</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>era</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>hms_pos</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>ra</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>target</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>type</b> (defined in <a class="el" href="structObject.html">Object</a>)</td><td><a class="el" href="structObject.html">Object</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/structObject.html b/vendor/voclient/libvoclient/doc/html/structObject.html
new file mode 100644
index 00000000..414ca7ba
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/structObject.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: Object Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Object Struct Reference</h1><!-- doxytag: class="Object" -->
+<p>
+<a href="structObject-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8132cc4ab5e191de82b257172c67c03"></a><!-- doxytag: member="Object::target" ref="a8132cc4ab5e191de82b257172c67c03" args="[SZ_TARGET]" -->
+char&nbsp;</td><td class="memItemRight" valign="bottom"><b>target</b> [SZ_TARGET]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="607a5e695e1b0f9a077b76b0d640e23a"></a><!-- doxytag: member="Object::hms_pos" ref="607a5e695e1b0f9a077b76b0d640e23a" args="[SZ_TARGET]" -->
+char&nbsp;</td><td class="memItemRight" valign="bottom"><b>hms_pos</b> [SZ_TARGET]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d7b960d76d5ea50bb92efedc3c68878"></a><!-- doxytag: member="Object::ra" ref="4d7b960d76d5ea50bb92efedc3c68878" args="" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>ra</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6e49034ae594ec8685489ea90cc2bac"></a><!-- doxytag: member="Object::dec" ref="a6e49034ae594ec8685489ea90cc2bac" args="" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>dec</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2cb904c8ddcab5a9e3a9d3eca0e29083"></a><!-- doxytag: member="Object::era" ref="2cb904c8ddcab5a9e3a9d3eca0e29083" args="" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>era</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5a95e66e7737fb043264861e9a251f2"></a><!-- doxytag: member="Object::edec" ref="f5a95e66e7737fb043264861e9a251f2" args="" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>edec</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c87f83c0327f534da1613be4bff610f5"></a><!-- doxytag: member="Object::type" ref="c87f83c0327f534da1613be4bff610f5" args="[SZ_TARGET]" -->
+char&nbsp;</td><td class="memItemRight" valign="bottom"><b>type</b> [SZ_TARGET]</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Structure for the object being queried. <hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="vocSesame_8c.html">vocSesame.c</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/tab_b.gif b/vendor/voclient/libvoclient/doc/html/tab_b.gif
new file mode 100644
index 00000000..0d623483
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/tab_b.gif
Binary files differ
diff --git a/vendor/voclient/libvoclient/doc/html/tab_l.gif b/vendor/voclient/libvoclient/doc/html/tab_l.gif
new file mode 100644
index 00000000..9b1e6337
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/tab_l.gif
Binary files differ
diff --git a/vendor/voclient/libvoclient/doc/html/tab_r.gif b/vendor/voclient/libvoclient/doc/html/tab_r.gif
new file mode 100644
index 00000000..ce9dd9f5
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/tab_r.gif
Binary files differ
diff --git a/vendor/voclient/libvoclient/doc/html/tabs.css b/vendor/voclient/libvoclient/doc/html/tabs.css
new file mode 100644
index 00000000..ab02c624
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/tabs.css
@@ -0,0 +1,105 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : 80%;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : 80%;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI.current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI.current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.navpath
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+ text-align : center;
+ margin : 2px;
+ padding : 2px;
+}
diff --git a/vendor/voclient/libvoclient/doc/html/vocMsg_8c.html b/vendor/voclient/libvoclient/doc/html/vocMsg_8c.html
new file mode 100644
index 00000000..1219ab9d
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocMsg_8c.html
@@ -0,0 +1,960 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocMsg.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocMsg.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;string.h&gt;</code><br>
+<code>#include &lt;stddef.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;ctype.h&gt;</code><br>
+<code>#include &lt;pthread.h&gt;</code><br>
+<code>#include &lt;sys/file.h&gt;</code><br>
+<code>#include &lt;sys/types.h&gt;</code><br>
+<code>#include &lt;sys/socket.h&gt;</code><br>
+<code>#include &lt;sys/select.h&gt;</code><br>
+<code>#include &lt;sys/time.h&gt;</code><br>
+<code>#include &lt;netinet/in.h&gt;</code><br>
+<code>#include &lt;sys/un.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;netdb.h&gt;</code><br>
+<code>#include &lt;fcntl.h&gt;</code><br>
+<code>#include &lt;sys/uio.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocMsg.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="578d5b29868572f072202c1ae23ea3dd"></a><!-- doxytag: member="vocMsg.c::SELWIDTH" ref="578d5b29868572f072202c1ae23ea3dd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SELWIDTH</b>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db119203ebbaf890a9648abbeb59ad92"></a><!-- doxytag: member="vocMsg.c::SZ_CHUNK" ref="db119203ebbaf890a9648abbeb59ad92" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_CHUNK</b>&nbsp;&nbsp;&nbsp;4096</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1a1c40536cc314c339296c65d860c83"></a><!-- doxytag: member="vocMsg.c::SZ_BULKDATA" ref="d1a1c40536cc314c339296c65d860c83" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_BULKDATA</b>&nbsp;&nbsp;&nbsp;1024000</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#a36229a2ccfb8e7a446bcf8fd66e56e5">msg_newCallMsg</a> (ObjectID objid, char *method, int nparams)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a CALL message structure initialized w/ parameters. <a href="#a36229a2ccfb8e7a446bcf8fd66e56e5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#517cadcc8f9fcdf4133f7cacf629ca4a">msg_newResultMsg</a> (int status, int type, int nitems)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a RESULT message structure initialized w/ parameters. <a href="#517cadcc8f9fcdf4133f7cacf629ca4a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#77b1550e78504576d33c763da2e0e10e">msg_newMsg</a> (char *msgclass, char *str)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a MSG message initialized w/ parameters. <a href="#77b1550e78504576d33c763da2e0e10e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#e894a9cdf87bb390cddd090447d2d644">msg_shutdownMsg</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a END message to shutdown the server. <a href="#e894a9cdf87bb390cddd090447d2d644"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#3183a0065ee97668b3a96dff25b919c4">msg_quitMsg</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a QUIT message. <a href="#3183a0065ee97668b3a96dff25b919c4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#b97f1775026d5eaf7de3e03de6e94f1e">msg_ackMsg</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create an ACK message. <a href="#b97f1775026d5eaf7de3e03de6e94f1e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocMsg_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#3cc1a4a8e24b8322ac8a2b0f6e151134">msg_noackMsg</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a NOACK message. <a href="#3cc1a4a8e24b8322ac8a2b0f6e151134"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocRes_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#35bfd91fb870b9e42398c2c77099a486">msg_sendMsg</a> (int fd, vocMsg_t *msg)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send the message to the VOClient server. <a href="#35bfd91fb870b9e42398c2c77099a486"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#1aec8e19abd5f1741434bc0e70823965">msg_sendRawMsg</a> (int fd, vocMsg_t *msg)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send the message to the VOClient server. <a href="#1aec8e19abd5f1741434bc0e70823965"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocRes_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#c6db5a0bf755a1637562ab4a314c5468">msg_getResult</a> (int fd)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read and parse a result message. <a href="#c6db5a0bf755a1637562ab4a314c5468"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">vocRes_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#97a642f02095c629a992c67a7cc09080">msg_getResultToFile</a> (int fd, char *fname, int overwrite)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read and parse a result message, saving data to named file. <a href="#97a642f02095c629a992c67a7cc09080"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#5fb36fa1a1b0bf447771272393e77df2">msg_addIntParam</a> (vocMsg_t *msg, int ival)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a int parameter to an outgoing CALL message. <a href="#5fb36fa1a1b0bf447771272393e77df2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#eae320530430c840411cb1c401b88033">msg_addFloatParam</a> (vocMsg_t *msg, double dval)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a float parameter to an outgoing CALL message. <a href="#eae320530430c840411cb1c401b88033"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#4f880a3c986d13c65b7a7d5c49c79707">msg_addStringParam</a> (vocMsg_t *msg, char *str)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a string parameter to an outgoing CALL message. <a href="#4f880a3c986d13c65b7a7d5c49c79707"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#cf6e8745c00f7d832dcfc275cf43fcf5">msg_addIntResult</a> (vocMsg_t *msg, int ival)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a integer value to a RESULT string. <a href="#cf6e8745c00f7d832dcfc275cf43fcf5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a828295a8b60db29870c8bdb1e6922ba"></a><!-- doxytag: member="vocMsg.c::msg_addFloatResult" ref="a828295a8b60db29870c8bdb1e6922ba" args="(vocMsg_t *msg, double dval)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>msg_addFloatResult</b> (vocMsg_t *msg, double dval)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#51fb5ca640761a4e517562dee9698fff">msg_addStringResult</a> (vocMsg_t *msg, char *str)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a string value to a RESULT string. <a href="#51fb5ca640761a4e517562dee9698fff"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#0d9804ce039ea71007d8d500fbf49809">msg_resultStatus</a> (vocRes_t *res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get result status. <a href="#0d9804ce039ea71007d8d500fbf49809"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#ec73a99da1108fa9da1a2ff97d235a36">msg_resultType</a> (vocRes_t *res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get result type. <a href="#ec73a99da1108fa9da1a2ff97d235a36"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#8e2098c2d797fc23b8edf7886e65334c">msg_resultLength</a> (vocRes_t *res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get result length. <a href="#8e2098c2d797fc23b8edf7886e65334c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#44250b9b039021f88ddf37fbe5361065">msg_getIntResult</a> (vocRes_t *res, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get an integer result by index. <a href="#44250b9b039021f88ddf37fbe5361065"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#b060cbd5cfe61864cc91b24080b5c2cd">msg_getFloatResult</a> (vocRes_t *res, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a float result by index. <a href="#b060cbd5cfe61864cc91b24080b5c2cd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#71e1c7c95771d4e6ba986bcf6099d746">msg_getStringResult</a> (vocRes_t *res, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a string result by index. <a href="#71e1c7c95771d4e6ba986bcf6099d746"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocMsg_8c.html#3bce32d52e40e26a9fb0bd57c48e6dbe">msg_getBuffer</a> (vocRes_t *res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get result buffer. <a href="#3bce32d52e40e26a9fb0bd57c48e6dbe"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocMsg.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCMSG.C -- VOClient Messaging Interface. This interface is used internally to communicate between the API and the VOClient Daemon.<p>
+msg = newCallMsg (objid, method, nparams) msg = newResultMsg (status, type, nitems) msg = newMsg (msgclass, str)<p>
+msgAddIntParam (msg, ival) msgAddFloatParam (msg, dval) msgAddStringParam (msg, str)<p>
+msgAddIntResult (msg, ival) msgAddFloatResult (msg, dval) msgAddStringResult (msg, str)<p>
+sendMsg (fd, msg) freeMsg (msg)<p>
+res = getResult (fd) # for reading RESULT msgs freeResult (res)<p>
+stat = resultStatus (res) type = resultType (res) nitems = resultLength (res)<p>
+ival = getIntResult (res, index) dval = getFloatResult (res, index) str = getStringResult (res, index)<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="b97f1775026d5eaf7de3e03de6e94f1e"></a><!-- doxytag: member="vocMsg.c::msg_ackMsg" ref="b97f1775026d5eaf7de3e03de6e94f1e" args="()" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_ackMsg </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create an ACK message.
+<p>
+MSG_ACKMSG -- Create an ACK message to the VOClient Server.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="eae320530430c840411cb1c401b88033"></a><!-- doxytag: member="vocMsg.c::msg_addFloatParam" ref="eae320530430c840411cb1c401b88033" args="(vocMsg_t *msg, double dval)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg_addFloatParam </td>
+ <td>(</td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double&nbsp;</td>
+ <td class="paramname"> <em>dval</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a float parameter to an outgoing CALL message.
+<p>
+MSG_ADDFLOATPARAM -- Add a float parameter to an outgoing CALL message. We simply append to an existing message.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>outgoing message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>dval</em>&nbsp;</td><td>double value </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="5fb36fa1a1b0bf447771272393e77df2"></a><!-- doxytag: member="vocMsg.c::msg_addIntParam" ref="5fb36fa1a1b0bf447771272393e77df2" args="(vocMsg_t *msg, int ival)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg_addIntParam </td>
+ <td>(</td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>ival</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a int parameter to an outgoing CALL message.
+<p>
+MSG_ADDINTPARAM -- Add a int parameter to an outgoing CALL message. We simply append to an existing message.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>outgoing message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ival</em>&nbsp;</td><td>integer value </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="cf6e8745c00f7d832dcfc275cf43fcf5"></a><!-- doxytag: member="vocMsg.c::msg_addIntResult" ref="cf6e8745c00f7d832dcfc275cf43fcf5" args="(vocMsg_t *msg, int ival)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg_addIntResult </td>
+ <td>(</td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>ival</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a integer value to a RESULT string.
+<p>
+MSG_ADDINTRESULT -- Add an integer value to a RESULT string.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>result string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ival</em>&nbsp;</td><td>integer value </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4f880a3c986d13c65b7a7d5c49c79707"></a><!-- doxytag: member="vocMsg.c::msg_addStringParam" ref="4f880a3c986d13c65b7a7d5c49c79707" args="(vocMsg_t *msg, char *str)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg_addStringParam </td>
+ <td>(</td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>str</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a string parameter to an outgoing CALL message.
+<p>
+MSG_ADDSTRINGPARAM -- Add a string parameter to an outgoing CALL message. We simply append to an existing message.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>outgoing message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>string value </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="51fb5ca640761a4e517562dee9698fff"></a><!-- doxytag: member="vocMsg.c::msg_addStringResult" ref="51fb5ca640761a4e517562dee9698fff" args="(vocMsg_t *msg, char *str)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg_addStringResult </td>
+ <td>(</td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>str</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a string value to a RESULT string.
+<p>
+MSG_ADDSTRINGRESULT -- Add a string value to a RESULT string.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>result string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>string value </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3bce32d52e40e26a9fb0bd57c48e6dbe"></a><!-- doxytag: member="vocMsg.c::msg_getBuffer" ref="3bce32d52e40e26a9fb0bd57c48e6dbe" args="(vocRes_t *res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">len msg_getBuffer </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get result buffer.
+<p>
+MSG_GETBUFFER -- Get result buffer.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>result message </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to result buffer </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="b060cbd5cfe61864cc91b24080b5c2cd"></a><!-- doxytag: member="vocMsg.c::msg_getFloatResult" ref="b060cbd5cfe61864cc91b24080b5c2cd" args="(vocRes_t *res, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">dval msg_getFloatResult </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a float result by index.
+<p>
+MSG_GETFLOATRESULT -- Get a float result by index.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>result message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>result index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>float value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="44250b9b039021f88ddf37fbe5361065"></a><!-- doxytag: member="vocMsg.c::msg_getIntResult" ref="44250b9b039021f88ddf37fbe5361065" args="(vocRes_t *res, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ival msg_getIntResult </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get an integer result by index.
+<p>
+MSG_GETINTRESULT -- Get an integer result by index.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>result message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>result index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c6db5a0bf755a1637562ab4a314c5468"></a><!-- doxytag: member="vocMsg.c::msg_getResult" ref="c6db5a0bf755a1637562ab4a314c5468" args="(int fd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">res msg_getResult </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>fd</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read and parse a result message.
+<p>
+MSG_GETRESULT -- Read and parse a result message.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>fd</em>&nbsp;</td><td>message channel descriptor </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>result message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="97a642f02095c629a992c67a7cc09080"></a><!-- doxytag: member="vocMsg.c::msg_getResultToFile" ref="97a642f02095c629a992c67a7cc09080" args="(int fd, char *fname, int overwrite)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">res msg_getResultToFile </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>fname</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>overwrite</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read and parse a result message, saving data to named file.
+<p>
+MSG_GETRESULTTOFILE -- Read and parse a result message, save bulk data to the named file.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>fd</em>&nbsp;</td><td>message channel descriptor </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>result message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="71e1c7c95771d4e6ba986bcf6099d746"></a><!-- doxytag: member="vocMsg.c::msg_getStringResult" ref="71e1c7c95771d4e6ba986bcf6099d746" args="(vocRes_t *res, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">str msg_getStringResult </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a string result by index.
+<p>
+MSG_GETSTRINGRESULT -- Get a string result by index.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>result message </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>result index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a36229a2ccfb8e7a446bcf8fd66e56e5"></a><!-- doxytag: member="vocMsg.c::msg_newCallMsg" ref="a36229a2ccfb8e7a446bcf8fd66e56e5" args="(ObjectID objid, char *method, int nparams)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_newCallMsg </td>
+ <td>(</td>
+ <td class="paramtype">ObjectID&nbsp;</td>
+ <td class="paramname"> <em>objid</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>method</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>nparams</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a CALL message structure initialized w/ parameters.
+<p>
+MSG_NEWCALLMSG -- Create a CALL message structure and initialize with the requested parameters. Structures are allocated dynamically, the caller is responsible for freeing the struct when finished.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>objid</em>&nbsp;</td><td>object id </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>method</em>&nbsp;</td><td>name of method to call </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>nparams</em>&nbsp;</td><td>number of parameters in message </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="77b1550e78504576d33c763da2e0e10e"></a><!-- doxytag: member="vocMsg.c::msg_newMsg" ref="77b1550e78504576d33c763da2e0e10e" args="(char *msgclass, char *str)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_newMsg </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>msgclass</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>str</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a MSG message initialized w/ parameters.
+<p>
+MSG_NEWMSG -- Create a new MSG message context and initialize with the requested parameters. The caller is responsible for freeing the struct when complete.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msgclass</em>&nbsp;</td><td>message class </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>message string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="517cadcc8f9fcdf4133f7cacf629ca4a"></a><!-- doxytag: member="vocMsg.c::msg_newResultMsg" ref="517cadcc8f9fcdf4133f7cacf629ca4a" args="(int status, int type, int nitems)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_newResultMsg </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>status</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>nitems</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a RESULT message structure initialized w/ parameters.
+<p>
+MSG_NEWRESULTMSG -- Create a new RESULT message context and initialize with the requested parameters. The caller is responsible for freeing the struct when complete.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td>result status </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>result type </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>nitems</em>&nbsp;</td><td>number of items in message </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3cc1a4a8e24b8322ac8a2b0f6e151134"></a><!-- doxytag: member="vocMsg.c::msg_noackMsg" ref="3cc1a4a8e24b8322ac8a2b0f6e151134" args="()" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_noackMsg </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a NOACK message.
+<p>
+MSG_NOACKMSG -- Create an NO-ACK message to the VOClient Server.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3183a0065ee97668b3a96dff25b919c4"></a><!-- doxytag: member="vocMsg.c::msg_quitMsg" ref="3183a0065ee97668b3a96dff25b919c4" args="()" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_quitMsg </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a QUIT message.
+<p>
+MSG_QUITMSG -- Create a QUIT message to the VOClient Server to tell it we're leaving but that it should keep running<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8e2098c2d797fc23b8edf7886e65334c"></a><!-- doxytag: member="vocMsg.c::msg_resultLength" ref="8e2098c2d797fc23b8edf7886e65334c" args="(vocRes_t *res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">len msg_resultLength </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get result length.
+<p>
+MSG_RESULTLENGTH -- Get result length.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>result string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>result length </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="0d9804ce039ea71007d8d500fbf49809"></a><!-- doxytag: member="vocMsg.c::msg_resultStatus" ref="0d9804ce039ea71007d8d500fbf49809" args="(vocRes_t *res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">status msg_resultStatus </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get result status.
+<p>
+MSG_RESULTSTATUS -- Get result status.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>result string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>result status </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ec73a99da1108fa9da1a2ff97d235a36"></a><!-- doxytag: member="vocMsg.c::msg_resultType" ref="ec73a99da1108fa9da1a2ff97d235a36" args="(vocRes_t *res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">type msg_resultType </td>
+ <td>(</td>
+ <td class="paramtype">vocRes_t *&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get result type.
+<p>
+MSG_RESULTTYPE -- Get result type.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>result string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>result type </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="35bfd91fb870b9e42398c2c77099a486"></a><!-- doxytag: member="vocMsg.c::msg_sendMsg" ref="35bfd91fb870b9e42398c2c77099a486" args="(int fd, vocMsg_t *msg)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_sendMsg </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Send the message to the VOClient server.
+<p>
+MSG_SENDMSG -- Send the message to the VOClient Server and wait for the ACK. The simple form of the message returns the result handle, for the raw message we only send to allow to a bullk return object.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>fd</em>&nbsp;</td><td>message channel descriptor </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>message string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="1aec8e19abd5f1741434bc0e70823965"></a><!-- doxytag: member="vocMsg.c::msg_sendRawMsg" ref="1aec8e19abd5f1741434bc0e70823965" args="(int fd, vocMsg_t *msg)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">len msg_sendRawMsg </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vocMsg_t *&nbsp;</td>
+ <td class="paramname"> <em>msg</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Send the message to the VOClient server.
+<p>
+MSG_SENDRAWMSG -- Send the message to the VOClient Server.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>fd</em>&nbsp;</td><td>message channel descriptor </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>message string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e894a9cdf87bb390cddd090447d2d644"></a><!-- doxytag: member="vocMsg.c::msg_shutdownMsg" ref="e894a9cdf87bb390cddd090447d2d644" args="()" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">msg msg_shutdownMsg </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a END message to shutdown the server.
+<p>
+MSG_SHUTDOWNMSG -- Create an END message to the VOClient Server to shut it down.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>a new message object </dd></dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocRegistry_8c.html b/vendor/voclient/libvoclient/doc/html/vocRegistry_8c.html
new file mode 100644
index 00000000..b69f7af6
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocRegistry_8c.html
@@ -0,0 +1,745 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocRegistry.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocRegistry.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#555aa2dc7ece17033e9399ed00ff4b78">voc_regSearch</a> (char *term1, char *term2, int orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">High-level Registry query interface. <a href="#555aa2dc7ece17033e9399ed00ff4b78"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#25e61b2c021394192ca8e74e96f45b28">voc_regSearchByService</a> (char *svc, char *term, int orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Search Registry using a search term and service constraint. <a href="#25e61b2c021394192ca8e74e96f45b28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegQuery&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#cfd7f451139af07ff58c173d793b3962">voc_regQuery</a> (char *term, int orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a RegistryQuery object. <a href="#cfd7f451139af07ff58c173d793b3962"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#eb0ee2e29939419af10cfbebc82e2110">voc_regAddSearchTerm</a> (RegQuery query, char *term, int orValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a search term to the specified query. <a href="#eb0ee2e29939419af10cfbebc82e2110"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#9b9e8c445ffb38711ef4ee345fa0f68d">voc_regRemoveSearchTerm</a> (RegQuery query, char *term)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove a search term to the specified query. <a href="#9b9e8c445ffb38711ef4ee345fa0f68d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#8d63761f770b4327d44cd1c618ce186f">voc_regConstWaveband</a> (RegQuery query, char *waveband)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constrain the Registry search by waveband. <a href="#8d63761f770b4327d44cd1c618ce186f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae38f1ab3f9a3682971fd8edf339b20c"></a><!-- doxytag: member="vocRegistry.c::voc_regConstSvcType" ref="ae38f1ab3f9a3682971fd8edf339b20c" args="(RegQuery query, char *svcType)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_regConstSvcType</b> (RegQuery query, char *svcType)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#494458ce877c4fa8442ff398873195b4">voc_regDALOnly</a> (RegQuery query, int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the "DAL Only" flag. <a href="#494458ce877c4fa8442ff398873195b4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#800645e5f4dc73bcf99730db9cb4d439">voc_regSortRes</a> (RegQuery query, int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the resource "sort" flag. <a href="#800645e5f4dc73bcf99730db9cb4d439"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#4780f7c8975abf074f3b41e27c31a7e3">voc_regGetSTCount</a> (RegQuery query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of search terms in the current query. <a href="#4780f7c8975abf074f3b41e27c31a7e3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#6b8ad34f22f1c22e34b56dc0ff635355">voc_regGetQueryString</a> (RegQuery query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the current query as an http GET URL. <a href="#6b8ad34f22f1c22e34b56dc0ff635355"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#cea0f3cbac1f593ad5899a5252803689">voc_regExecute</a> (RegQuery query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Execute the specified query. <a href="#cea0f3cbac1f593ad5899a5252803689"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#ac9bb69c156fbdae90cb33f396336995">voc_regExecuteRaw</a> (RegQuery query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Execute the specified query and return raw result string. <a href="#ac9bb69c156fbdae90cb33f396336995"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#b6ce658f8bb8803ad73c5c15ccdf7dd4">voc_resGetCount</a> (RegResult res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return a count of the number of results records. <a href="#b6ce658f8bb8803ad73c5c15ccdf7dd4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#c5376fa75dc000e0b820fd4e29e5cfaa">voc_resGetStr</a> (RegResult res, char *attribute, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a string-valued attribute from the result resource record. <a href="#c5376fa75dc000e0b820fd4e29e5cfaa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#3dceef82335c216785372fdd9789cc0c">voc_resGetFloat</a> (RegResult res, char *attribute, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a real-valued attribute from the result resource record. <a href="#3dceef82335c216785372fdd9789cc0c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry_8c.html#8b2e5aa46ad515427da01b9314434cef">voc_resGetInt</a> (RegResult res, char *attribute, int index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get an int-valued attribute from the result resource record. <a href="#8b2e5aa46ad515427da01b9314434cef"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocRegistry.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOC_REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.<p>
+RegistryQuery ----------------------<p>
+High-Level Query:<p>
+res = voc_regSearch (sql, keywords, orValues) res =voc_regSearchByService (svc, term, orValues)<p>
+Programmatic Query:<p>
+query = voc_regQuery (term, orValues) // OR keyword list?<p>
+voc_regConstSvcType (query, svcType) // search constraints voc_regConstWaveband (query, waveband) voc_regDALOnly (query, value) voc_regSortRes (query, value)<p>
+voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous voc_regRemoveSearchTerm (query, term) // remove search term count = voc_regGetSTCount (query)<p>
+str = voc_regGetQueryString (query) // GET form of query<p>
+res = voc_regExecute (query) // return result obj str = voc_regExecuteRaw (query) // return raw XML<p>
+RegistryQueryResult<p>
+count = voc_resGetCount (res)<p>
+str = voc_resGetStr (res, attribute, index) dval = voc_resGetFloat (res, attribute, index) ival = voc_resGetInt (res, attribute, index)<p>
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>July 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="eb0ee2e29939419af10cfbebc82e2110"></a><!-- doxytag: member="vocRegistry.c::voc_regAddSearchTerm" ref="eb0ee2e29939419af10cfbebc82e2110" args="(RegQuery query, char *term, int orValue)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void voc_regAddSearchTerm </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>orValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a search term to the specified query.
+<p>
+VOC_REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list) to the specified query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8d63761f770b4327d44cd1c618ce186f"></a><!-- doxytag: member="vocRegistry.c::voc_regConstWaveband" ref="8d63761f770b4327d44cd1c618ce186f" args="(RegQuery query, char *waveband)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void voc_regConstWaveband </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>waveband</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Constrain the Registry search by waveband.
+<p>
+Constrain the Registry search by service type.<p>
+VOC_REGCONSTWAVEBAND -- Constrain the Registry search by waveband.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>waveband</em>&nbsp;</td><td>waveband string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing</dd></dl>
+VOC_REGCONSTSVCTYPE -- Constraing the Registry search by service type.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>svcType</em>&nbsp;</td><td>service type string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="494458ce877c4fa8442ff398873195b4"></a><!-- doxytag: member="vocRegistry.c::voc_regDALOnly" ref="494458ce877c4fa8442ff398873195b4" args="(RegQuery query, int value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void voc_regDALOnly </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the "DAL Only" flag.
+<p>
+VOC_REGDALONLY -- Set the "DAL Only" flag. If set, we expand a resource search to break out the individual DAL services into separate results.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>value of the DAL-only flag </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="cea0f3cbac1f593ad5899a5252803689"></a><!-- doxytag: member="vocRegistry.c::voc_regExecute" ref="cea0f3cbac1f593ad5899a5252803689" args="(RegQuery query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult voc_regExecute </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Execute the specified query.
+<p>
+VOC_REGEXECUTE -- Execute the specified query, returning a result object code or NULL.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>registry result object handle </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ac9bb69c156fbdae90cb33f396336995"></a><!-- doxytag: member="vocRegistry.c::voc_regExecuteRaw" ref="ac9bb69c156fbdae90cb33f396336995" args="(RegQuery query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* voc_regExecuteRaw </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Execute the specified query and return raw result string.
+<p>
+VOC_REGEXECUTERAW -- Execute the specified query and return the raw resulting XML string.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>raw data return from data </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="6b8ad34f22f1c22e34b56dc0ff635355"></a><!-- doxytag: member="vocRegistry.c::voc_regGetQueryString" ref="6b8ad34f22f1c22e34b56dc0ff635355" args="(RegQuery query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* voc_regGetQueryString </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the current query as an http GET URL.
+<p>
+VOC_REGGETQUERYSTRING -- Get the current query as an http GET URL.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>query URL </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4780f7c8975abf074f3b41e27c31a7e3"></a><!-- doxytag: member="vocRegistry.c::voc_regGetSTCount" ref="4780f7c8975abf074f3b41e27c31a7e3" args="(RegQuery query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int voc_regGetSTCount </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the number of search terms in the current query.
+<p>
+VOC_REGGETSTCOUNT -- Get the number of search terms in the current query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="cfd7f451139af07ff58c173d793b3962"></a><!-- doxytag: member="vocRegistry.c::voc_regQuery" ref="cfd7f451139af07ff58c173d793b3962" args="(char *term, int orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegQuery voc_regQuery </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a RegistryQuery object.
+<p>
+VOC_REGQUERY -- Create a RegistryQuery object.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to Registry Query object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="9b9e8c445ffb38711ef4ee345fa0f68d"></a><!-- doxytag: member="vocRegistry.c::voc_regRemoveSearchTerm" ref="9b9e8c445ffb38711ef4ee345fa0f68d" args="(RegQuery query, char *term)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void voc_regRemoveSearchTerm </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Remove a search term to the specified query.
+<p>
+VOC_REMOVESEARCHTERM -- Remove the search term from the query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="555aa2dc7ece17033e9399ed00ff4b78"></a><!-- doxytag: member="vocRegistry.c::voc_regSearch" ref="555aa2dc7ece17033e9399ed00ff4b78" args="(char *term1, char *term2, int orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult voc_regSearch </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+High-level Registry query interface.
+<p>
+VOC_REGSEARCH -- High-level procedure to form a query and execute it immediately. We allow that 'term1' may be a complex SQL WHERE predicate, and that 'term2' (or vice versa) is a search-keyword list. The 'orValues' applies to the keyword list (if present), otherwise it applies to the two search term elements. The default action if two terms are specified is to logically AND them.<p>
+The thinking here is that one might want SIAP services for Quasars. This is easily expressed in an SQL form to get SIAP resources, however a Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a easy way to OR the keywords but AND that result with the SQL predicate.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>term1</em>&nbsp;</td><td>first search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term2</em>&nbsp;</td><td>second search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to Registry result object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="25e61b2c021394192ca8e74e96f45b28"></a><!-- doxytag: member="vocRegistry.c::voc_regSearchByService" ref="25e61b2c021394192ca8e74e96f45b28" args="(char *svc, char *term, int orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult voc_regSearchByService </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>svc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Search Registry using a search term and service constraint.
+<p>
+VOC_REGSEARCHBYSERVICE -- Search the Registry using a search term and constrain by service type.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>svc</em>&nbsp;</td><td>service type constraint </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to Registry result object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="800645e5f4dc73bcf99730db9cb4d439"></a><!-- doxytag: member="vocRegistry.c::voc_regSortRes" ref="800645e5f4dc73bcf99730db9cb4d439" args="(RegQuery query, int value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void voc_regSortRes </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set the resource "sort" flag.
+<p>
+VOC_REGSORTRES -- Set the resource "sort" flag. If enabled, we try to order the resource table by some logical means.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>value of the sort flag </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="b6ce658f8bb8803ad73c5c15ccdf7dd4"></a><!-- doxytag: member="vocRegistry.c::voc_resGetCount" ref="b6ce658f8bb8803ad73c5c15ccdf7dd4" args="(RegResult res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int voc_resGetCount </td>
+ <td>(</td>
+ <td class="paramtype">RegResult&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return a count of the number of results records.
+<p>
+VOC_RESGETCOUNT -- Return a count of the number of results records.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>number of result records </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3dceef82335c216785372fdd9789cc0c"></a><!-- doxytag: member="vocRegistry.c::voc_resGetFloat" ref="3dceef82335c216785372fdd9789cc0c" args="(RegResult res, char *attribute, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double voc_resGetFloat </td>
+ <td>(</td>
+ <td class="paramtype">RegResult&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>attribute</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a real-valued attribute from the result resource record.
+<p>
+VOC_GETFLOAT -- Get a real-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+MaxSR maximum search radius<p>
+Attribute string are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string-valued attribute </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8b2e5aa46ad515427da01b9314434cef"></a><!-- doxytag: member="vocRegistry.c::voc_resGetInt" ref="8b2e5aa46ad515427da01b9314434cef" args="(RegResult res, char *attribute, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int voc_resGetInt </td>
+ <td>(</td>
+ <td class="paramtype">RegResult&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>attribute</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get an int-valued attribute from the result resource record.
+<p>
+VOC_GETINT -- Get a integer-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+MaxRecords maximum records returned by the service<p>
+Attribute string are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string-valued attribute </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c5376fa75dc000e0b820fd4e29e5cfaa"></a><!-- doxytag: member="vocRegistry.c::voc_resGetStr" ref="c5376fa75dc000e0b820fd4e29e5cfaa" args="(RegResult res, char *attribute, int index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* voc_resGetStr </td>
+ <td>(</td>
+ <td class="paramtype">RegResult&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>attribute</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a string-valued attribute from the result resource record.
+<p>
+VOC_GETSTR -- Get a string-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+Title Resource title (long version) ShortName Short name of Resource ServiceURL Service URL (if appropriate) ReferenceURL URL to reference about Resource Description Text description of resource Identifier Standard ivo identifier of resource ServiceType Service Type (Cone, Siap, etc) Type Resource Type (catalog, survey, etc) CoverageSpatial Spatial coverage (STC) CoverageTemporal Temporal coverage of data<p>
+CoverageSpectral Spectral coverage (csv list of bandpasses) ContentLevel Content level (research, EPO, etc -- csv list)<p>
+Attribute strings are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string-valued attribute </dd></dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocRegistry__f77_8c.html b/vendor/voclient/libvoclient/doc/html/vocRegistry__f77_8c.html
new file mode 100644
index 00000000..3a17639e
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocRegistry__f77_8c.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocRegistry_f77.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocRegistry_f77.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocRegistry_f77.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d0a47e0e4c4cc21f6bce63946951f591"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGSEARCH" ref="d0a47e0e4c4cc21f6bce63946951f591" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGSEARCH</b>&nbsp;&nbsp;&nbsp;vfregsearch_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c429ce54f92b75c827a32a3c8a1fb477"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGSEARCHBYSVC" ref="c429ce54f92b75c827a32a3c8a1fb477" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGSEARCHBYSVC</b>&nbsp;&nbsp;&nbsp;vfregsearchbysvc_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="310b266f3ee28ac7f8bc51350066c4be"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGQUERY" ref="310b266f3ee28ac7f8bc51350066c4be" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGQUERY</b>&nbsp;&nbsp;&nbsp;vfregquery_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85a983dc952d380a1aeec0444c77aeb1"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGADDSEARCHTERM" ref="85a983dc952d380a1aeec0444c77aeb1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGADDSEARCHTERM</b>&nbsp;&nbsp;&nbsp;vfregaddsearchterm_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5eb9bf70285c8326d70232df392b7c7a"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGREMOVESEARCHTERM" ref="5eb9bf70285c8326d70232df392b7c7a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGREMOVESEARCHTERM</b>&nbsp;&nbsp;&nbsp;vfregremovesearchterm_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="73509c36262920ed66b9be3e8e4fad53"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGGETSTCOUNT" ref="73509c36262920ed66b9be3e8e4fad53" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGGETSTCOUNT</b>&nbsp;&nbsp;&nbsp;vfreggetstcount_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c5721d23ad83e520b6aed1069a18fe60"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGGETQUERYSTRING" ref="c5721d23ad83e520b6aed1069a18fe60" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGGETQUERYSTRING</b>&nbsp;&nbsp;&nbsp;vfreggetquerystring_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="954e4d285c3a090ef6861e08dd219d31"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGEXECUTE" ref="954e4d285c3a090ef6861e08dd219d31" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGEXECUTE</b>&nbsp;&nbsp;&nbsp;vfregexecute_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e2235f2d0ee4619f5b1d9edb8c831d2"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGEXECUTERAW" ref="2e2235f2d0ee4619f5b1d9edb8c831d2" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGEXECUTERAW</b>&nbsp;&nbsp;&nbsp;vfregexecuteraw_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7fd1f50356779d7d51b2206e51992cb8"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETCOUNT" ref="7fd1f50356779d7d51b2206e51992cb8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETCOUNT</b>&nbsp;&nbsp;&nbsp;vfresgetcount_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8dfa587e446e2f16221d88a8ea9198eb"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETSTR" ref="8dfa587e446e2f16221d88a8ea9198eb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETSTR</b>&nbsp;&nbsp;&nbsp;vfresgetstr_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba23a3c2742b829a8c36425ce28e7652"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETFLOAT" ref="ba23a3c2742b829a8c36425ce28e7652" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETFLOAT</b>&nbsp;&nbsp;&nbsp;vfresgetfloat_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9e65ffdee69fa482c63e519397b9a3ff"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETINT" ref="9e65ffdee69fa482c63e519397b9a3ff" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETINT</b>&nbsp;&nbsp;&nbsp;vfresgetint_</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a04b0cb13135b0dc9fea171d098057f0"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGSEARCH" ref="a04b0cb13135b0dc9fea171d098057f0" args="(char *term1, char *term2, int *orValues, RegResult *result, int *ier, int len1, int len2)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGSEARCH</b> (char *term1, char *term2, int *orValues, RegResult *result, int *ier, int len1, int len2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9bda98a20940751d2c740a9d3e9acdb5"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGSEARCHBYSVC" ref="9bda98a20940751d2c740a9d3e9acdb5" args="(char *svc, char *term, int *orValues, RegResult *result, int *ier, int slen, int tlen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGSEARCHBYSVC</b> (char *svc, char *term, int *orValues, RegResult *result, int *ier, int slen, int tlen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="678164a0d810653aea4de02a38e5bc23"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGQUERY" ref="678164a0d810653aea4de02a38e5bc23" args="(char *term, int *orValues, RegQuery *query, int *ier, int len)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGQUERY</b> (char *term, int *orValues, RegQuery *query, int *ier, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="42bfd9d85a6579e273a9e0c2759e5ee8"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGADDSEARCHTERM" ref="42bfd9d85a6579e273a9e0c2759e5ee8" args="(RegQuery *query, char *term, int *orValue, int tlen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGADDSEARCHTERM</b> (RegQuery *query, char *term, int *orValue, int tlen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3a0baf1b1a0821f5db7c5ff2e058d8c"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGREMOVESEARCHTERM" ref="c3a0baf1b1a0821f5db7c5ff2e058d8c" args="(RegQuery *query, char *term, int tlen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGREMOVESEARCHTERM</b> (RegQuery *query, char *term, int tlen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a51852deb3bd9b1915612fa9b7c5b56"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGGETSTCOUNT" ref="4a51852deb3bd9b1915612fa9b7c5b56" args="(RegQuery *query, int *count)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGGETSTCOUNT</b> (RegQuery *query, int *count)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ae0fbe0c04ee035ed0db674248829eb9"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGGETQUERYSTRING" ref="ae0fbe0c04ee035ed0db674248829eb9" args="(RegQuery *query, char *qstr, int *len, int qlen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGGETQUERYSTRING</b> (RegQuery *query, char *qstr, int *len, int qlen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0a1264fca96776b0d0997df16398d8dc"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGEXECUTE" ref="0a1264fca96776b0d0997df16398d8dc" args="(RegQuery *query, RegResult *result)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGEXECUTE</b> (RegQuery *query, RegResult *result)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a732f70bd54c1f4e42c5ef821fa801ef"></a><!-- doxytag: member="vocRegistry_f77.c::VF_REGEXECUTERAW" ref="a732f70bd54c1f4e42c5ef821fa801ef" args="(RegQuery *query, char *raw, int *len, int rlen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_REGEXECUTERAW</b> (RegQuery *query, char *raw, int *len, int rlen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9aedd288a3284600ce857081c7ab53ae"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETCOUNT" ref="9aedd288a3284600ce857081c7ab53ae" args="(RegResult *res, int *count)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETCOUNT</b> (RegResult *res, int *count)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d9966b970e4a150c167b427e60be5906"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETSTR" ref="d9966b970e4a150c167b427e60be5906" args="(RegResult *res, char *attr, int *index, char *str, int *len, int alen, int slen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETSTR</b> (RegResult *res, char *attr, int *index, char *str, int *len, int alen, int slen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96c7d92da283c1fec69e27282fa849ad"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETFLOAT" ref="96c7d92da283c1fec69e27282fa849ad" args="(RegResult *res, char *attr, int *index, double *dval, int alen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETFLOAT</b> (RegResult *res, char *attr, int *index, double *dval, int alen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8dd109c837ae96932224eb73e4a63cac"></a><!-- doxytag: member="vocRegistry_f77.c::VF_RESGETINT" ref="8dd109c837ae96932224eb73e4a63cac" args="(RegResult *res, char *attr, int *index, int *ival, int alen)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESGETINT</b> (RegResult *res, char *attr, int *index, int *ival, int alen)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78086d706029e0ca297fc1be4c83cf33"></a><!-- doxytag: member="vocRegistry_f77.c::sstrip" ref="78086d706029e0ca297fc1be4c83cf33" args="(char *instr, int len)" -->
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>sstrip</b> (char *instr, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a71b9804381d56348caee3fe8b7d39ab"></a><!-- doxytag: member="vocRegistry_f77.c::spad" ref="a71b9804381d56348caee3fe8b7d39ab" args="(char *outstr, int len)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>spad</b> (char *outstr, int len)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocRegistry_f77.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOC_REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.<p>
+RegistryQuery ----------------------<p>
+High-Level Query:<p>
+res = voc_regSearch (term1, term2, orValues) res = voc_regSearchBySvc (svc, term, orValues)<p>
+Programmatic Query:<p>
+query = voc_regQuery (term, orValues) // OR keyword list?<p>
+voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous voc_regRemoveSearchTerm (query, term) // remove search term count = voc_regGetSTCount (query)<p>
+str = voc_regGetQueryString (query) // GET form of query<p>
+res = voc_regExecute (query) // return result obj str = voc_regExecuteRaw (query) // return raw XML<p>
+RegistryQueryResult<p>
+count = voc_resGetCount (res)<p>
+str = voc_resGetStr (res, attribute, index) dval = voc_resGetFloat (res, attribute, index) ival = voc_resGetInt (res, attribute, index)<p>
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>July 2006 </dd></dl>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocRegistry__spp_8c.html b/vendor/voclient/libvoclient/doc/html/vocRegistry__spp_8c.html
new file mode 100644
index 00000000..63c047b5
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocRegistry__spp_8c.html
@@ -0,0 +1,730 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocRegistry_spp.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocRegistry_spp.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocRegistry_spp.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41f54a3456edd7d62ac7732471be86f6"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regsearch" ref="41f54a3456edd7d62ac7732471be86f6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_regsearch</b>&nbsp;&nbsp;&nbsp;vxregh_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10edb43aa47392f25b3c73dbb45cd8a"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regsearchbysvc" ref="a10edb43aa47392f25b3c73dbb45cd8a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_regsearchbysvc</b>&nbsp;&nbsp;&nbsp;vxregc_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0a1bf77af8a5b0afcd7f5df3233b3cb"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regquery" ref="a0a1bf77af8a5b0afcd7f5df3233b3cb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_regquery</b>&nbsp;&nbsp;&nbsp;vxregy_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb6c8f0f129ada5b692199274de46c36"></a><!-- doxytag: member="vocRegistry_spp.c::vx_raddsearchterm" ref="cb6c8f0f129ada5b692199274de46c36" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_raddsearchterm</b>&nbsp;&nbsp;&nbsp;vxradm_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5c63cb486f8c51527f3049dc25b9362"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rremovesearchterm" ref="f5c63cb486f8c51527f3049dc25b9362" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rremovesearchterm</b>&nbsp;&nbsp;&nbsp;vxrrem_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79a68360d7ea961bb87b453a6520d7bb"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgetstcount" ref="79a68360d7ea961bb87b453a6520d7bb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgetstcount</b>&nbsp;&nbsp;&nbsp;vxrget_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c0b1903b53fc5792b2e5e0415165f7e3"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgetquerystring" ref="c0b1903b53fc5792b2e5e0415165f7e3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgetquerystring</b>&nbsp;&nbsp;&nbsp;vxrgeg_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb980d699a93fa377708b1ac9febf886"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rexecute" ref="cb980d699a93fa377708b1ac9febf886" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rexecute</b>&nbsp;&nbsp;&nbsp;vxrexe_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="246ecdbf9ba0854c71fc2ceb851f8b89"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rexecuteraw" ref="246ecdbf9ba0854c71fc2ceb851f8b89" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rexecuteraw</b>&nbsp;&nbsp;&nbsp;vxrexw_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="844d033287d1883cb8487b948b33ad13"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rscount" ref="844d033287d1883cb8487b948b33ad13" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rscount</b>&nbsp;&nbsp;&nbsp;vxrsct_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="18e206273082cb36e9b30008384fd531"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsstr" ref="18e206273082cb36e9b30008384fd531" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rsstr</b>&nbsp;&nbsp;&nbsp;vxrssr_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="497e37a8b67269e7aa85a132aff2973f"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsfloat" ref="497e37a8b67269e7aa85a132aff2973f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rsfloat</b>&nbsp;&nbsp;&nbsp;vxrsft_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2196a81afa7f275f1358817ef5ad1f35"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsint" ref="2196a81afa7f275f1358817ef5ad1f35" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rsint</b>&nbsp;&nbsp;&nbsp;vxrsit_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a438904dccdba8cd87e4161c96dac1a1"></a><!-- doxytag: member="vocRegistry_spp.c::XCHAR" ref="a438904dccdba8cd87e4161c96dac1a1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XCHAR</b>&nbsp;&nbsp;&nbsp;short</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0acc6410b155e9c6f4946a7902360076"></a><!-- doxytag: member="vocRegistry_spp.c::PKCHAR" ref="0acc6410b155e9c6f4946a7902360076" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>PKCHAR</b>&nbsp;&nbsp;&nbsp;char</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b5bd3113cf759baf3cf77f03138ec2e"></a><!-- doxytag: member="vocRegistry_spp.c::XINT" ref="8b5bd3113cf759baf3cf77f03138ec2e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XINT</b>&nbsp;&nbsp;&nbsp;int</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2d16c5c8637505285edc2ce06f510d3"></a><!-- doxytag: member="vocRegistry_spp.c::XEOS" ref="e2d16c5c8637505285edc2ce06f510d3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XEOS</b>&nbsp;&nbsp;&nbsp;NULL</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#3c05d7c8cc258aa0727c1c1468384993">vx_regsearch</a> (XCHAR *term1, XCHAR *term2, int *orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">High-level Registry query interface. <a href="#3c05d7c8cc258aa0727c1c1468384993"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#efe6285c929da91b5c3a9554eb5fe1ee">vx_regsearchbysvc</a> (XCHAR *svc, XCHAR *term, int *orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Search Registry using a search term and service constraint. <a href="#efe6285c929da91b5c3a9554eb5fe1ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegQuery&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#0ca491fff22d8bb32252ac23d4ae7560">vx_regquery</a> (XCHAR *term, int *orValues)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a RegistryQuery object. <a href="#0ca491fff22d8bb32252ac23d4ae7560"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#bd44eef01bb352184e0b8b7999641537">vx_raddsearchterm</a> (RegQuery *query, XCHAR *term, int *orValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a search term to the specified query. <a href="#bd44eef01bb352184e0b8b7999641537"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#95f961540d6a3c3eb7c06beb87c1bab7">vx_rremovesearchterm</a> (RegQuery *query, XCHAR *term)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove a search term to the specified query. <a href="#95f961540d6a3c3eb7c06beb87c1bab7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#8232e1a2c9e548c9ed0a38f33ff462bc">vx_rgetstcount</a> (RegQuery *query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of search terms in the current query. <a href="#8232e1a2c9e548c9ed0a38f33ff462bc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#e4339cec42aa0ba730c335879b9d3ca1">vx_rgetquerystring</a> (RegQuery *query, XCHAR *qstring, int *maxch)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the current query as an http GET URL. <a href="#e4339cec42aa0ba730c335879b9d3ca1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">RegResult&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#3010d75062148d186e6c168d012eb01b">vx_rexecute</a> (RegQuery *query)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Execute the specified query. <a href="#3010d75062148d186e6c168d012eb01b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#b98d1ec0013f957594820a379dbc55f0">vx_rexecuteraw</a> (RegQuery *query, XCHAR *result, int *maxch)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Execute the specified query and return raw result string. <a href="#b98d1ec0013f957594820a379dbc55f0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="53d0fc07b2448b458c81a8d5a78b473a"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgcount" ref="53d0fc07b2448b458c81a8d5a78b473a" args="(RegResult *res)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgcount</b> (RegResult *res)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a74254fab826980457106b67ea6131ae"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgstr" ref="a74254fab826980457106b67ea6131ae" args="(RegResult *res, XCHAR *attribute, int *index, XCHAR *result, int *maxch)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgstr</b> (RegResult *res, XCHAR *attribute, int *index, XCHAR *result, int *maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="91362d2ed60f7f77052b2e9e878ed2af"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgfloat" ref="91362d2ed60f7f77052b2e9e878ed2af" args="(RegResult *res, XCHAR *attribute, int *index)" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgfloat</b> (RegResult *res, XCHAR *attribute, int *index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ef83c208ec74243a9e068bd92da33c25"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgint" ref="ef83c208ec74243a9e068bd92da33c25" args="(RegResult *res, XCHAR *attribute, int *index)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_rgint</b> (RegResult *res, XCHAR *attribute, int *index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ee3f5c02637713505163c630426633da"></a><!-- doxytag: member="vocRegistry_spp.c::spp2c" ref="ee3f5c02637713505163c630426633da" args="(XCHAR *instr, int maxch)" -->
+PKCHAR *&nbsp;</td><td class="memItemRight" valign="bottom"><b>spp2c</b> (XCHAR *instr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="444d4dd026760f72e06d13881e289bcf"></a><!-- doxytag: member="vocRegistry_spp.c::c2spp" ref="444d4dd026760f72e06d13881e289bcf" args="(PKCHAR *instr, XCHAR *outstr, int maxch)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>c2spp</b> (PKCHAR *instr, XCHAR *outstr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2abc3ffcecace56cb0e39d6cd5693e0e"></a><!-- doxytag: member="vocRegistry_spp.c::spplen" ref="2abc3ffcecace56cb0e39d6cd5693e0e" args="(XCHAR *str)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>spplen</b> (XCHAR *str)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#2b3cbaf9c927266e4d0fb9ee3b3d7231">vx_rscount</a> (RegResult *res)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return a count of the number of results records. <a href="#2b3cbaf9c927266e4d0fb9ee3b3d7231"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#e8ada1986ac82faa682eb28296d00b97">vx_rsstr</a> (RegResult *res, XCHAR *attribute, int *index, XCHAR *result, int *maxch)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a string-valued attribute from the result resource record. <a href="#e8ada1986ac82faa682eb28296d00b97"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#8e6f51d16bf357c212001d101e43201c">vx_rsfloat</a> (RegResult *res, XCHAR *attribute, int *index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a real-valued attribute from the result resource record. <a href="#8e6f51d16bf357c212001d101e43201c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocRegistry__spp_8c.html#db53941e5010c36f6a36e318f4fe55da">vx_rsint</a> (RegResult *res, XCHAR *attribute, int *index)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get an int-valued attribute from the result resource record. <a href="#db53941e5010c36f6a36e318f4fe55da"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocRegistry_spp.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOC_REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.<p>
+RegistryQuery ----------------------<p>
+High-Level Query:<p>
+res = voc_regSearch (term1, term2, orValues)<p>
+Programmatic Query:<p>
+query = voc_regQuery (term, orValues) // OR keyword list?<p>
+voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous voc_regRemoveSearchTerm (query, term) // remove search term count = voc_regGetSTCount (query)<p>
+str = voc_regGetQueryString (query) // GET form of query<p>
+res = voc_regExecute (query) // return result obj str = voc_regExecuteRaw (query) // return raw XML<p>
+RegistryQueryResult<p>
+count = voc_resGetCount (res)<p>
+str = voc_resGetStr (res, attribute, index) dval = voc_resGetFloat (res, attribute, index) ival = voc_resGetInt (res, attribute, index)<p>
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>July 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="bd44eef01bb352184e0b8b7999641537"></a><!-- doxytag: member="vocRegistry_spp.c::vx_raddsearchterm" ref="bd44eef01bb352184e0b8b7999641537" args="(RegQuery *query, XCHAR *term, int *orValue)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vx_raddsearchterm </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>orValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Add a search term to the specified query.
+<p>
+VX_REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list) to the specified query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="0ca491fff22d8bb32252ac23d4ae7560"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regquery" ref="0ca491fff22d8bb32252ac23d4ae7560" args="(XCHAR *term, int *orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegQuery vx_regquery </td>
+ <td>(</td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create a RegistryQuery object.
+<p>
+VX_REGQUERY -- Get a RegistryQuery object.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to query object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3c05d7c8cc258aa0727c1c1468384993"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regsearch" ref="3c05d7c8cc258aa0727c1c1468384993" args="(XCHAR *term1, XCHAR *term2, int *orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult vx_regsearch </td>
+ <td>(</td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+High-level Registry query interface.
+<p>
+VX_REGSEARCH -- High-level procedure to form a query and execute it immediately. We allow that 'term1' may be a complex SQL WHERE predicate, and that 'term2' (or vice versa) is a search-keyword list. The 'orValues' applies to the keyword list (if present), otherwise it applies to the two search term elements. The default action if two terms are specified is to logically AND them.<p>
+The thinking here is that one might want SIAP services for Quasars. This is easily expressed in an SQL form to get SIAP resources, however a Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a easy way to OR the keywords but AND that result with the SQL predicate.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>term1</em>&nbsp;</td><td>first search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term2</em>&nbsp;</td><td>second search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to result object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="efe6285c929da91b5c3a9554eb5fe1ee"></a><!-- doxytag: member="vocRegistry_spp.c::vx_regsearchbysvc" ref="efe6285c929da91b5c3a9554eb5fe1ee" args="(XCHAR *svc, XCHAR *term, int *orValues)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult vx_regsearchbysvc </td>
+ <td>(</td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>svc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>orValues</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Search Registry using a search term and service constraint.
+<p>
+VX_REGSEARCHBYSERVICE -- Search the Registry using a search term and constrain by service type.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>svc</em>&nbsp;</td><td>service type constraint </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>orValues</em>&nbsp;</td><td>logically OR values? </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to result object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3010d75062148d186e6c168d012eb01b"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rexecute" ref="3010d75062148d186e6c168d012eb01b" args="(RegQuery *query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegResult vx_rexecute </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Execute the specified query.
+<p>
+VX_REGEXECUTE -- Execute the specified query, returning a result object code or NULL.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="b98d1ec0013f957594820a379dbc55f0"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rexecuteraw" ref="b98d1ec0013f957594820a379dbc55f0" args="(RegQuery *query, XCHAR *result, int *maxch)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int vx_rexecuteraw </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>raw</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>maxch</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Execute the specified query and return raw result string.
+<p>
+VX_REGEXECUTERAW -- Execute the specified query and return the raw resulting XML string.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>raw</em>&nbsp;</td><td>raw result string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>maxch</em>&nbsp;</td><td>length of result string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e4339cec42aa0ba730c335879b9d3ca1"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgetquerystring" ref="e4339cec42aa0ba730c335879b9d3ca1" args="(RegQuery *query, XCHAR *qstring, int *maxch)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int vx_rgetquerystring </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>qstr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>maxch</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the current query as an http GET URL.
+<p>
+VX_REGGETQUERYSTRING -- Get the current query as an http GET URL.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>qstr</em>&nbsp;</td><td>returned query string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>maxch</em>&nbsp;</td><td>length of query string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8232e1a2c9e548c9ed0a38f33ff462bc"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rgetstcount" ref="8232e1a2c9e548c9ed0a38f33ff462bc" args="(RegQuery *query)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int vx_rgetstcount </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get the number of search terms in the current query.
+<p>
+VX_REGGETSTCOUNT -- Get the number of search terms in the current query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>count of search terms </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="95f961540d6a3c3eb7c06beb87c1bab7"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rremovesearchterm" ref="95f961540d6a3c3eb7c06beb87c1bab7" args="(RegQuery *query, XCHAR *term)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vx_rremovesearchterm </td>
+ <td>(</td>
+ <td class="paramtype">RegQuery *&nbsp;</td>
+ <td class="paramname"> <em>query</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>term</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Remove a search term to the specified query.
+<p>
+VX_REMOVESEARCHTERM -- Remove the search term from the query.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>Registry query handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>term</em>&nbsp;</td><td>keyword search term </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="2b3cbaf9c927266e4d0fb9ee3b3d7231"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rscount" ref="2b3cbaf9c927266e4d0fb9ee3b3d7231" args="(RegResult *res)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">count vx_rscount </td>
+ <td>(</td>
+ <td class="paramtype">RegResult *&nbsp;</td>
+ <td class="paramname"> <em>res</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return a count of the number of results records.
+<p>
+VX_RESGETCOUNT -- Return a count of the number of results records.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>number of result records </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8e6f51d16bf357c212001d101e43201c"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsfloat" ref="8e6f51d16bf357c212001d101e43201c" args="(RegResult *res, XCHAR *attribute, int *index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">dval vx_rsfloat </td>
+ <td>(</td>
+ <td class="paramtype">RegResult *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a real-valued attribute from the result resource record.
+<p>
+VX_GETFLOAT -- Get a real-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+MaxSR maximum search radius<p>
+Attribute string are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>double-precision value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="db53941e5010c36f6a36e318f4fe55da"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsint" ref="db53941e5010c36f6a36e318f4fe55da" args="(RegResult *res, XCHAR *attribute, int *index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ival vx_rsint </td>
+ <td>(</td>
+ <td class="paramtype">RegResult *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>index</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get an int-valued attribute from the result resource record.
+<p>
+VX_GETINT -- Get a integer-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+MaxRecords maximum records returned by the service<p>
+Attribute string are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer value </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e8ada1986ac82faa682eb28296d00b97"></a><!-- doxytag: member="vocRegistry_spp.c::vx_rsstr" ref="e8ada1986ac82faa682eb28296d00b97" args="(RegResult *res, XCHAR *attribute, int *index, XCHAR *result, int *maxch)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">len vx_rsstr </td>
+ <td>(</td>
+ <td class="paramtype">RegResult *&nbsp;</td>
+ <td class="paramname"> <em>res</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>maxch</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Get a string-valued attribute from the result resource record.
+<p>
+VX_GETSTR -- Get a string-valued attribute from the result resource record. Currently recognized real-valued attributes include:<p>
+Title Resource title (long version) ShortName Short name of Resource ServiceURL Service URL (if appropriate) ReferenceURL URL to reference about Resource Description Text description of resource Identifier Standard ivo identifier of resource ServiceType Service Type (Cone, Siap, etc) Type Resource Type (catalog, survey, etc) CoverageSpatial Spatial coverage (STC) CoverageTemporal Temporal coverage of data<p>
+CoverageSpectral Spectral coverage (csv list of bandpasses) ContentLevel Content level (research, EPO, etc -- csv list)<p>
+Attribute string are case-insensitive.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>res</em>&nbsp;</td><td>Registry result handle </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>attr</em>&nbsp;</td><td>record attribute </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>record index </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>result</em>&nbsp;</td><td>attribute string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>maxch</em>&nbsp;</td><td>length of attribute string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>nothing </dd></dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocSesame_8c.html b/vendor/voclient/libvoclient/doc/html/vocSesame_8c.html
new file mode 100644
index 00000000..26ce69e1
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocSesame_8c.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocSesame.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocSesame.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &lt;sys/types.h&gt;</code><br>
+<code>#include &lt;sys/stat.h&gt;</code><br>
+<code>#include &lt;dirent.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structObject.html">Object</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocSesame.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cdc7844fbd4d45737d4aa56834d37829"></a><!-- doxytag: member="vocSesame.c::MAX_OBJECTS" ref="cdc7844fbd4d45737d4aa56834d37829" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>MAX_OBJECTS</b>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e97c1de9ed6a4c34b8731fed4b2e624"></a><!-- doxytag: member="vocSesame.c::SZ_TARGET" ref="2e97c1de9ed6a4c34b8731fed4b2e624" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_TARGET</b>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="867c408546a8562a552a59405804f607"></a><!-- doxytag: member="vocSesame.c::ObjectPtr" ref="867c408546a8562a552a59405804f607" args="" -->
+typedef struct <a class="el" href="structObject.html">Object</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>ObjectPtr</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">Sesame&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#467c02f32e92e6808b6d1c129b8d5b04">voc_nameResolver</a> (char *target)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the CDS Sesame name resolver service. <a href="#467c02f32e92e6808b6d1c129b8d5b04"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#911355789d941847843c8d42ad00314a">voc_resolverPos</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the (ra,dec) position for the object. <a href="#911355789d941847843c8d42ad00314a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#c7d46e5f565c97b0250fe837f985e283">voc_resolverOtype</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return a string containing the object type description. <a href="#c7d46e5f565c97b0250fe837f985e283"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#4526ce29541bc2a1b4c939c494c6d00e">voc_resolverRA</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the RA as a double precision value. <a href="#4526ce29541bc2a1b4c939c494c6d00e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#4fe9b855c8e4cca0f1fdced36d5ae8ea">voc_resolverRAErr</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the RA error as a double precision value. <a href="#4fe9b855c8e4cca0f1fdced36d5ae8ea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#46c25290911c3217bdc4294eded2ba46">voc_resolverDEC</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the DEC as a double precision value. <a href="#46c25290911c3217bdc4294eded2ba46"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame_8c.html#f0fb68ddb8bd62c72e21de2bed525b4c">voc_resolverDECErr</a> (Sesame sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the Dec error as a double precision value. <a href="#f0fb68ddb8bd62c72e21de2bed525b4c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5383de2a3bf7243d0ac205fc0faa6785"></a><!-- doxytag: member="vocSesame.c::voc_getCacheDir" ref="5383de2a3bf7243d0ac205fc0faa6785" args="(char *subdir)" -->
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_getCacheDir</b> (char *subdir)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1d587466a412b72dd4432e473f0fb60e"></a><!-- doxytag: member="vocSesame.c::clientCache" ref="1d587466a412b72dd4432e473f0fb60e" args="[MAX_OBJECTS]" -->
+<a class="el" href="structObject.html">Object</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>clientCache</b> [MAX_OBJECTS]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d8d847f1b70d0e2bc3da7e990ff0d317"></a><!-- doxytag: member="vocSesame.c::cacheTop" ref="d8d847f1b70d0e2bc3da7e990ff0d317" args="" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>cacheTop</b> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocSesame.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCSESAME.C -- Interface to the Sesame name resolver service.<h2><a class="anchor" name="DESCRIPTION">
+DESCRIPTION</a></h2>
+Sesame Name Resolver Interface: -------------------------------<p>
+sr = voc_nameResolver (target) pos_str = voc_resolverPos (sr) radeg = voc_resolverRA (sr) decdeg = voc_resolverDEC (sr) ra_err = voc_resolverRAErr (sr) dec_err = voc_resolverDECErr (sr) typ_str = voc_resolverOtype (sr)<p>
+Client programs may be written in any language that can interface to C code. Sample programs using the interface are provided as is a SWIG interface definition file. This inferface is based closely on the DAL client code produced for the 2005 NVOSS, as that interface evolves<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="467c02f32e92e6808b6d1c129b8d5b04"></a><!-- doxytag: member="vocSesame.c::voc_nameResolver" ref="467c02f32e92e6808b6d1c129b8d5b04" args="(char *target)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Sesame voc_nameResolver </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>target</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Query the CDS Sesame name resolver service.
+<p>
+NAMERESOLVER -- Query the CDS Sesame service to resolve the target name to coordinates. The query is done when creating the Sesame object, thereafter we simply query the object data.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td>name of target to be resolved </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>Sesame Sesame object handle </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="46c25290911c3217bdc4294eded2ba46"></a><!-- doxytag: member="vocSesame.c::voc_resolverDEC" ref="46c25290911c3217bdc4294eded2ba46" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double voc_resolverDEC </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the DEC as a double precision value.
+<p>
+RESOLVERDEC -- Return the DEC as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>object Declination (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="f0fb68ddb8bd62c72e21de2bed525b4c"></a><!-- doxytag: member="vocSesame.c::voc_resolverDECErr" ref="f0fb68ddb8bd62c72e21de2bed525b4c" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double voc_resolverDECErr </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the Dec error as a double precision value.
+<p>
+RESOLVERDECERR -- Return the Dec error as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>object DEC error (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c7d46e5f565c97b0250fe837f985e283"></a><!-- doxytag: member="vocSesame.c::voc_resolverOtype" ref="c7d46e5f565c97b0250fe837f985e283" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* voc_resolverOtype </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return a string containing the object type description.
+<p>
+RESOLVEROTYPE -- Return a string containing the object type description<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string to object type description </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="911355789d941847843c8d42ad00314a"></a><!-- doxytag: member="vocSesame.c::voc_resolverPos" ref="911355789d941847843c8d42ad00314a" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* voc_resolverPos </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the (ra,dec) position for the object.
+<p>
+RESOLVERPOS -- Return a string containing the (ra,dec) position as sexagesimal strings.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>string containing (ra,dec) position </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4526ce29541bc2a1b4c939c494c6d00e"></a><!-- doxytag: member="vocSesame.c::voc_resolverRA" ref="4526ce29541bc2a1b4c939c494c6d00e" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double voc_resolverRA </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the RA as a double precision value.
+<p>
+RESOLVERRA -- Return the RA as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>object RA (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4fe9b855c8e4cca0f1fdced36d5ae8ea"></a><!-- doxytag: member="vocSesame.c::voc_resolverRAErr" ref="4fe9b855c8e4cca0f1fdced36d5ae8ea" args="(Sesame sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double voc_resolverRAErr </td>
+ <td>(</td>
+ <td class="paramtype">Sesame&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the RA error as a double precision value.
+<p>
+RESOLVERRAERR -- Return the RA error as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to previus query return </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>object RA error (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocSesame__f77_8c.html b/vendor/voclient/libvoclient/doc/html/vocSesame__f77_8c.html
new file mode 100644
index 00000000..37a25e58
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocSesame__f77_8c.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocSesame_f77.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocSesame_f77.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocSesame_f77.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="921062a2a717d161e03be3f6e4b49069"></a><!-- doxytag: member="vocSesame_f77.c::VF_NAMERESOLVER" ref="921062a2a717d161e03be3f6e4b49069" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_NAMERESOLVER</b>&nbsp;&nbsp;&nbsp;vfnameresolver_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f3397b9fcdd160c3e446ed2a0841713"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVERRA" ref="0f3397b9fcdd160c3e446ed2a0841713" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVERRA</b>&nbsp;&nbsp;&nbsp;vfresolverra_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1037654e8c8094c6e6ffc70d0222437d"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVERDEC" ref="1037654e8c8094c6e6ffc70d0222437d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVERDEC</b>&nbsp;&nbsp;&nbsp;vfresolverdec_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8d1bbf00258ebc53319543b1fe31720f"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVERPOS" ref="8d1bbf00258ebc53319543b1fe31720f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVERPOS</b>&nbsp;&nbsp;&nbsp;vfresolverpos_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f94ca385a61e8817cc99fbfd2ba54ad3"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVERRAERR" ref="f94ca385a61e8817cc99fbfd2ba54ad3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVERRAERR</b>&nbsp;&nbsp;&nbsp;vfresolverraerr_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="77348dd6e7f0f385d635da12a1faae17"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVERDECERR" ref="77348dd6e7f0f385d635da12a1faae17" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVERDECERR</b>&nbsp;&nbsp;&nbsp;vfresolverdecerr_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aa2dc39d2a511c21a40c485b469c922a"></a><!-- doxytag: member="vocSesame_f77.c::VF_RESOLVEROTYPE" ref="aa2dc39d2a511c21a40c485b469c922a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>VF_RESOLVEROTYPE</b>&nbsp;&nbsp;&nbsp;vfresolverotype_</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">sstrip</a> (char *instr, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a71b9804381d56348caee3fe8b7d39ab"></a><!-- doxytag: member="vocSesame_f77.c::spad" ref="a71b9804381d56348caee3fe8b7d39ab" args="(char *outstr, int len)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>spad</b> (char *outstr, int len)</td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCSESAME_F77.C -- F77 Interface to the Sesame name resolver service.<h2><a class="anchor" name="DESCRIPTION">
+DESCRIPTION</a></h2>
+Sesame Name Resolver F77 Interface: -----------------------------------<p>
+vf_nameResolver (target, sr) vf_resolverPos (sr, pos_str, len) vf_resolverRA (sr, radeg) vf_resolverRAErr (sr, radeg) vf_resolverDEC (sr, decdeg) vf_resolverDECErr (sr, decdeg)<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="78086d706029e0ca297fc1be4c83cf33"></a><!-- doxytag: member="vocSesame_f77.c::sstrip" ref="78086d706029e0ca297fc1be4c83cf33" args="(char *instr, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* sstrip </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>instr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>len</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Private interface declarations.
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocSesame__spp_8c.html b/vendor/voclient/libvoclient/doc/html/vocSesame__spp_8c.html
new file mode 100644
index 00000000..fb7254b2
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocSesame__spp_8c.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocSesame_spp.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocSesame_spp.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocSesame_spp.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="27ff538e856ee7c0ac0d68f7dd26c992"></a><!-- doxytag: member="vocSesame_spp.c::vx_nameresolver" ref="27ff538e856ee7c0ac0d68f7dd26c992" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_nameresolver</b>&nbsp;&nbsp;&nbsp;vxnamr_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ca25723ef38d747ac8d29165b8ab72c"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverra" ref="2ca25723ef38d747ac8d29165b8ab72c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_resolverra</b>&nbsp;&nbsp;&nbsp;vxresa_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fd2d2d5f9c7189adb3fba85deb6758ce"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverdec" ref="fd2d2d5f9c7189adb3fba85deb6758ce" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_resolverdec</b>&nbsp;&nbsp;&nbsp;vxresc_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="100c06789014a58ab7e06bed380a67e1"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverpos" ref="100c06789014a58ab7e06bed380a67e1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_resolverpos</b>&nbsp;&nbsp;&nbsp;vxress_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="67d46854be59984c5bbee5bcc6497fef"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverotype" ref="67d46854be59984c5bbee5bcc6497fef" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_resolverotype</b>&nbsp;&nbsp;&nbsp;vxrese_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49d633cc6f44ef6ad7d77eb9827aab62"></a><!-- doxytag: member="vocSesame_spp.c::vx_errresolverra" ref="49d633cc6f44ef6ad7d77eb9827aab62" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_errresolverra</b>&nbsp;&nbsp;&nbsp;vxerra_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8898286ea656b45dfdff39e7187d8b8d"></a><!-- doxytag: member="vocSesame_spp.c::vx_errresolverdec" ref="8898286ea656b45dfdff39e7187d8b8d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_errresolverdec</b>&nbsp;&nbsp;&nbsp;vxerrc_</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a438904dccdba8cd87e4161c96dac1a1"></a><!-- doxytag: member="vocSesame_spp.c::XCHAR" ref="a438904dccdba8cd87e4161c96dac1a1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XCHAR</b>&nbsp;&nbsp;&nbsp;short</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0acc6410b155e9c6f4946a7902360076"></a><!-- doxytag: member="vocSesame_spp.c::PKCHAR" ref="0acc6410b155e9c6f4946a7902360076" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>PKCHAR</b>&nbsp;&nbsp;&nbsp;char</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b5bd3113cf759baf3cf77f03138ec2e"></a><!-- doxytag: member="vocSesame_spp.c::XINT" ref="8b5bd3113cf759baf3cf77f03138ec2e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XINT</b>&nbsp;&nbsp;&nbsp;int</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2d16c5c8637505285edc2ce06f510d3"></a><!-- doxytag: member="vocSesame_spp.c::XEOS" ref="e2d16c5c8637505285edc2ce06f510d3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XEOS</b>&nbsp;&nbsp;&nbsp;NULL</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#07b6bc655c41867be4719d72e30e7dcd">vx_nameresolver</a> (XCHAR *target)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the CDS Sesame name resolver service. <a href="#07b6bc655c41867be4719d72e30e7dcd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#701bdc17597db7e4e7a6dcace4578935">vx_resolverpos</a> (int *sr, XCHAR *pos, int *len)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return a string containing the (ra,dec) position. <a href="#701bdc17597db7e4e7a6dcace4578935"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#443309cb8f9cf4d5659d1530551b1a4e">vx_resolverra</a> (int *sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the RA as a double precision value. <a href="#443309cb8f9cf4d5659d1530551b1a4e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#243498f57a863c7364d12bf8da806119">vx_resolverdec</a> (int *sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the DEC as a double precision value. <a href="#243498f57a863c7364d12bf8da806119"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f06b828fdbfb1bdad3d45e5b5ee8bb06"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverotype" ref="f06b828fdbfb1bdad3d45e5b5ee8bb06" args="(int *sr, XCHAR *type, int *len)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>vx_resolverotype</b> (int *sr, XCHAR *type, int *len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#81978654bf3f111cbde1c3d9643a6224">vx_errresolverra</a> (int *sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the RA error as a double precision value. <a href="#81978654bf3f111cbde1c3d9643a6224"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocSesame__spp_8c.html#593db6460d3932869f55cfdf398dddce">vx_errresolverdec</a> (int *sr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the Dec error as a double precision value. <a href="#593db6460d3932869f55cfdf398dddce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ee3f5c02637713505163c630426633da"></a><!-- doxytag: member="vocSesame_spp.c::spp2c" ref="ee3f5c02637713505163c630426633da" args="(XCHAR *instr, int maxch)" -->
+PKCHAR *&nbsp;</td><td class="memItemRight" valign="bottom"><b>spp2c</b> (XCHAR *instr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="444d4dd026760f72e06d13881e289bcf"></a><!-- doxytag: member="vocSesame_spp.c::c2spp" ref="444d4dd026760f72e06d13881e289bcf" args="(PKCHAR *instr, XCHAR *outstr, int maxch)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>c2spp</b> (PKCHAR *instr, XCHAR *outstr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2abc3ffcecace56cb0e39d6cd5693e0e"></a><!-- doxytag: member="vocSesame_spp.c::spplen" ref="2abc3ffcecace56cb0e39d6cd5693e0e" args="(XCHAR *str)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>spplen</b> (XCHAR *str)</td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCSESAME_SPP.C -- SPP Interface to the Sesame name resolver service.<h2><a class="anchor" name="DESCRIPTION">
+DESCRIPTION</a></h2>
+Sesame Name Resolver SPP Interface: -----------------------------------<p>
+sr = vx_nameResolver (target) pos_str = vx_resolverPos (sr) radeg = vx_resolverRA (sr) decdeg = vx_resolverDEC (sr) typ_str = vx_resolverOtype (sr) raerr = vx_resolverRAErr (sr) decerr = vx_resolverDECErr (sr)<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="593db6460d3932869f55cfdf398dddce"></a><!-- doxytag: member="vocSesame_spp.c::vx_errresolverdec" ref="593db6460d3932869f55cfdf398dddce" args="(int *sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double vx_errresolverdec </td>
+ <td>(</td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the Dec error as a double precision value.
+<p>
+VX_ERRRESOLVERDEC -- Return the DEC as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to Sesame object </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>Dec error of object position (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="81978654bf3f111cbde1c3d9643a6224"></a><!-- doxytag: member="vocSesame_spp.c::vx_errresolverra" ref="81978654bf3f111cbde1c3d9643a6224" args="(int *sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double vx_errresolverra </td>
+ <td>(</td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the RA error as a double precision value.
+<p>
+VX_ERRRESOLVERRA -- Return the RA error as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to Sesame object </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>RA error of object position (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="07b6bc655c41867be4719d72e30e7dcd"></a><!-- doxytag: member="vocSesame_spp.c::vx_nameresolver" ref="07b6bc655c41867be4719d72e30e7dcd" args="(XCHAR *target)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int vx_nameresolver </td>
+ <td>(</td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>target</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Query the CDS Sesame name resolver service.
+<p>
+VX_NAMERESOLVER -- Query the CDS Sesame service to resolve the target name to coordinates. The query is done when creating the Sesame object, thereafter we simply query the object data.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td>name of target to be resolved </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>handle to Sesame object </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="243498f57a863c7364d12bf8da806119"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverdec" ref="243498f57a863c7364d12bf8da806119" args="(int *sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double vx_resolverdec </td>
+ <td>(</td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the DEC as a double precision value.
+<p>
+VX_RESOLVERDEC -- Return the DEC as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to Sesame object </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>Dec of object position (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="701bdc17597db7e4e7a6dcace4578935"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverpos" ref="701bdc17597db7e4e7a6dcace4578935" args="(int *sr, XCHAR *pos, int *len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int vx_resolverpos </td>
+ <td>(</td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>sr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>maxch</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return a string containing the (ra,dec) position.
+<p>
+VX_RESOLVERPOS -- Return a string containing the (ra,dec) position as sexagesimal strings.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to Sesame object </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>pos</em>&nbsp;</td><td>returned position string </td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>maxch</em>&nbsp;</td><td>max size of position string </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>length of position string </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="443309cb8f9cf4d5659d1530551b1a4e"></a><!-- doxytag: member="vocSesame_spp.c::vx_resolverra" ref="443309cb8f9cf4d5659d1530551b1a4e" args="(int *sr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double vx_resolverra </td>
+ <td>(</td>
+ <td class="paramtype">int *&nbsp;</td>
+ <td class="paramname"> <em>sr</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Return the RA as a double precision value.
+<p>
+VX_RESOLVERRA -- Return the RA as a double precision value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>sr</em>&nbsp;</td><td>handle to Sesame object </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>RA of object position (decimal degrees) </dd></dl>
+
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocSkybot_8c.html b/vendor/voclient/libvoclient/doc/html/vocSkybot_8c.html
new file mode 100644
index 00000000..1208e0dd
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocSkybot_8c.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocSkybot.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocSkybot.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f8d79a0314338263841485c24d97cf1f"></a><!-- doxytag: member="vocSkybot.c::voc_skybot" ref="f8d79a0314338263841485c24d97cf1f" args="(double ra, double dec, double rsz, double dsz, double epoch)" -->
+Skybot&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_skybot</b> (double ra, double dec, double rsz, double dsz, double epoch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5559779a075d5933afb4c9021c1aee4a"></a><!-- doxytag: member="vocSkybot.c::voc_skybotNObjs" ref="5559779a075d5933afb4c9021c1aee4a" args="(Skybot sb)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_skybotNObjs</b> (Skybot sb)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="097a23954288e4085314abc5804efe26"></a><!-- doxytag: member="vocSkybot.c::voc_skybotStrAttr" ref="097a23954288e4085314abc5804efe26" args="(Skybot sb, char *attr, int index)" -->
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_skybotStrAttr</b> (Skybot sb, char *attr, int index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ed96e652da4487d89505ccc9ca917f5"></a><!-- doxytag: member="vocSkybot.c::voc_skybotDblAttr" ref="9ed96e652da4487d89505ccc9ca917f5" args="(Skybot sb, char *attr, int index)" -->
+double&nbsp;</td><td class="memItemRight" valign="bottom"><b>voc_skybotDblAttr</b> (Skybot sb, char *attr, int index)</td></tr>
+
+<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8b9013ac3d6a8f93991444d8c8c5919"></a><!-- doxytag: member="vocSkybot.c::vo" ref="e8b9013ac3d6a8f93991444d8c8c5919" args="" -->
+VOClient *&nbsp;</td><td class="memItemRight" valign="bottom"><b>vo</b></td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+SkyBoT Minor Planet Service Interface: --------------------------------------<p>
+A utility class for accessing the IMCCE Skybot ephemerides service. The service is called as part of the constructor for the object allowing easy access to the result data. Class methods also exist so a VO Client interface the same access to the data.<p>
+Reference: <a href="http://www.imcce.fr/webservices/skybot/">http://www.imcce.fr/webservices/skybot/</a><p>
+Class Methods: --------------<p>
+sb = voc_skybot (ra, dec, rsz, dsz, epoch)<p>
+count = voc_skybotNObjs (sb) str = voc_skybotStrAttr (sb, attrname, index) dval = voc_skybotDblAttr (sb, attrname, index)<p>
+Available Attributes: ---------------------<p>
+number string Asteroid number name string Asteroid name ra double J2000 Equatorial RA dec double J2000 Equatorial Dec class string <a class="el" href="structObject.html">Object</a> classification vmag double Visual magnitude poserr double Error on position (arcsec) cdist double Body-to-center angular distance dra double RA motion (arcsec/hr) ddec double Dec motion (arcsec/hr) dgeo double Geocentric distance (AU) dhelio double Heliocentric distance (AU) px double Mean J2000 heliocentric position vector (AU) py double " " " " " pz double " " " " " vx double Mean J2000 heliocentric position vector (AU/day) vy double " " " " " vz double " " " " " JD0 double T0, epoch of position vector (JD)<p>
+Example Usage: ---------------<p>
+1) Find bodies in a 900" radius around (0.0,0.0) on JD 2453939.123<p>
+VOCSkybot skybot = new VOCSkybot (0.0,0.0,900,2453939.123); for (int i=0; i &lt; skybot.getNObjs(); i++) System.out.print ("Name: '" + sb.getStrAttr("name",i)+"' " + "RA: " + sb.getDblAttr("ra",i) + " " + "Dec: " + sb.getDblAttr("dec",i) + " " + "Mv: " + sb.getDblAttr("vmag",i) + " ");<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocUtil__f77_8c.html b/vendor/voclient/libvoclient/doc/html/vocUtil__f77_8c.html
new file mode 100644
index 00000000..efc5dbd6
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocUtil__f77_8c.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocUtil_f77.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocUtil_f77.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocUtil_f77.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32108415ff44b6f7537b9516f4a84be7"></a><!-- doxytag: member="vocUtil_f77.c::SZ_LINE" ref="32108415ff44b6f7537b9516f4a84be7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_LINE</b>&nbsp;&nbsp;&nbsp;1024</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b924d5aea72f589528a7f42ace5e26e9"></a><!-- doxytag: member="vocUtil_f77.c::SZ_TYPECODE" ref="b924d5aea72f589528a7f42ace5e26e9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_TYPECODE</b>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocUtil__f77_8c.html#78086d706029e0ca297fc1be4c83cf33">sstrip</a> (char *instr, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a71b9804381d56348caee3fe8b7d39ab"></a><!-- doxytag: member="vocUtil_f77.c::spad" ref="a71b9804381d56348caee3fe8b7d39ab" args="(char *outstr, int len)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><b>spad</b> (char *outstr, int len)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f155b115baf43f6e663b6d217ff1f4ee"></a><!-- doxytag: member="vocUtil_f77.c::typecode" ref="f155b115baf43f6e663b6d217ff1f4ee" args="(char *typestr)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>typecode</b> (char *typestr)</td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCUTIL_F77.C -- Utility routines to support Fortran bindings.<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="78086d706029e0ca297fc1be4c83cf33"></a><!-- doxytag: member="vocUtil_f77.c::sstrip" ref="78086d706029e0ca297fc1be4c83cf33" args="(char *instr, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* sstrip </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>instr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>len</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Local interface declarations.
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/html/vocUtil__spp_8c.html b/vendor/voclient/libvoclient/doc/html/vocUtil__spp_8c.html
new file mode 100644
index 00000000..63096c48
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/html/vocUtil__spp_8c.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>VOClient API: vocUtil_spp.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.9 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>vocUtil_spp.c File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;signal.h&gt;</code><br>
+<code>#include &lt;errno.h&gt;</code><br>
+<code>#include &quot;VOClient.h&quot;</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="96522681f45fae55d1e17bcb63620e45"></a><!-- doxytag: member="vocUtil_spp.c::_VOCLIENT_LIB_" ref="96522681f45fae55d1e17bcb63620e45" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_VOCLIENT_LIB_</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocUtil__spp_8c.html#a438904dccdba8cd87e4161c96dac1a1">XCHAR</a>&nbsp;&nbsp;&nbsp;short</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0acc6410b155e9c6f4946a7902360076"></a><!-- doxytag: member="vocUtil_spp.c::PKCHAR" ref="0acc6410b155e9c6f4946a7902360076" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>PKCHAR</b>&nbsp;&nbsp;&nbsp;char</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b5bd3113cf759baf3cf77f03138ec2e"></a><!-- doxytag: member="vocUtil_spp.c::XINT" ref="8b5bd3113cf759baf3cf77f03138ec2e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XINT</b>&nbsp;&nbsp;&nbsp;int</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2d16c5c8637505285edc2ce06f510d3"></a><!-- doxytag: member="vocUtil_spp.c::XEOS" ref="e2d16c5c8637505285edc2ce06f510d3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>XEOS</b>&nbsp;&nbsp;&nbsp;VOC_NULL</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b924d5aea72f589528a7f42ace5e26e9"></a><!-- doxytag: member="vocUtil_spp.c::SZ_TYPECODE" ref="b924d5aea72f589528a7f42ace5e26e9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>SZ_TYPECODE</b>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">PKCHAR *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="vocUtil__spp_8c.html#ee3f5c02637713505163c630426633da">spp2c</a> (XCHAR *instr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="444d4dd026760f72e06d13881e289bcf"></a><!-- doxytag: member="vocUtil_spp.c::c2spp" ref="444d4dd026760f72e06d13881e289bcf" args="(PKCHAR *instr, XCHAR *outstr, int maxch)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>c2spp</b> (PKCHAR *instr, XCHAR *outstr, int maxch)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2abc3ffcecace56cb0e39d6cd5693e0e"></a><!-- doxytag: member="vocUtil_spp.c::spplen" ref="2abc3ffcecace56cb0e39d6cd5693e0e" args="(XCHAR *str)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>spplen</b> (XCHAR *str)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fd88d92f076ce42db56b0502610e4f7c"></a><!-- doxytag: member="vocUtil_spp.c::dal_typecode" ref="fd88d92f076ce42db56b0502610e4f7c" args="(char *typestr)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>dal_typecode</b> (char *typestr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0620181bc05a53c2692e109194790616"></a><!-- doxytag: member="vocUtil_spp.c::out_typecode" ref="0620181bc05a53c2692e109194790616" args="(char *typestr)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>out_typecode</b> (char *typestr)</td></tr>
+
+</table>
+<hr><h2>Detailed Description</h2>
+VOCUTIL_SPP.C -- Utility routines for the SPP proceduers.<p>
+Michael Fitzpatrick, NOAO, Jul 2006<p>
+<dl class="author" compact><dt><b>Author:</b></dt><dd>Michael Fitzpatrick </dd></dl>
+<dl class="version" compact><dt><b>Version:</b></dt><dd>June 2006 </dd></dl>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="a438904dccdba8cd87e4161c96dac1a1"></a><!-- doxytag: member="vocUtil_spp.c::XCHAR" ref="a438904dccdba8cd87e4161c96dac1a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XCHAR&nbsp;&nbsp;&nbsp;short </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+SPP Name mapping macros. SPP procedure names are mappad as the first-5 plus the last character of a name minus any underscores. This should be done such that a unique 6-character name is produced for each SPP symbol. In these definitions the SPP code may use the long form of the name in the code, the mapping is done automatically and so we need the macros here so the symbol entered in the library is actually the short name. SPP Type definitions.
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ee3f5c02637713505163c630426633da"></a><!-- doxytag: member="vocUtil_spp.c::spp2c" ref="ee3f5c02637713505163c630426633da" args="(XCHAR *instr, int maxch)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PKCHAR* spp2c </td>
+ <td>(</td>
+ <td class="paramtype">XCHAR *&nbsp;</td>
+ <td class="paramname"> <em>instr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>maxch</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Public interface procedures.
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Wed Feb 27 21:08:58 2013 for VOClient API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
+</body>
+</html>
diff --git a/vendor/voclient/libvoclient/doc/latex/Makefile b/vendor/voclient/libvoclient/doc/latex/Makefile
new file mode 100644
index 00000000..8b7c89a1
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/Makefile
@@ -0,0 +1,19 @@
+all: clean refman.pdf
+
+pdf: refman.pdf
+
+refman.pdf: refman.tex
+ pdflatex refman.tex
+ makeindex refman.idx
+ pdflatex refman.tex
+ latex_count=5 ; \
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
+ do \
+ echo "Rerunning latex...." ;\
+ pdflatex refman.tex ;\
+ latex_count=`expr $$latex_count - 1` ;\
+ done
+
+
+clean:
+ rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf
diff --git a/vendor/voclient/libvoclient/doc/latex/annotated.tex b/vendor/voclient/libvoclient/doc/latex/annotated.tex
new file mode 100644
index 00000000..0f3b7f10
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/annotated.tex
@@ -0,0 +1,4 @@
+\section{Class List}
+Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList}
+\item\contentsline{section}{\hyperlink{structObject}{Object} }{\pageref{structObject}}{}
+\end{CompactList}
diff --git a/vendor/voclient/libvoclient/doc/latex/doxygen.sty b/vendor/voclient/libvoclient/doc/latex/doxygen.sty
new file mode 100644
index 00000000..7227135c
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/doxygen.sty
@@ -0,0 +1,97 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+\RequirePackage{calc}
+\RequirePackage{array}
+\RequirePackage{color}
+\pagestyle{fancyplain}
+\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
+\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
+\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
+\lhead[\fancyplain{}{\bfseries\thepage}]
+ {\fancyplain{}{\bfseries\rightmark}}
+\rhead[\fancyplain{}{\bfseries\leftmark}]
+ {\fancyplain{}{\bfseries\thepage}}
+\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Wed Feb 27 21:08:58 2013 for VOClient API by Doxygen }]{}
+\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Wed Feb 27 21:08:58 2013 for VOClient API by Doxygen }}
+\cfoot{}
+\newenvironment{Code}
+{\footnotesize}
+{\normalsize}
+\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
+\newenvironment{DocInclude}
+{\footnotesize}
+{\normalsize}
+\newenvironment{VerbInclude}
+{\footnotesize}
+{\normalsize}
+\newenvironment{Image}
+{\begin{figure}[H]}
+{\end{figure}}
+\newenvironment{ImageNoCaption}{}{}
+\newenvironment{CompactList}
+{\begin{list}{}{
+ \setlength{\leftmargin}{0.5cm}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{0pt}
+ \renewcommand{\makelabel}{\hfill}}}
+{\end{list}}
+\newenvironment{CompactItemize}
+{
+ \begin{itemize}
+ \setlength{\itemsep}{-3pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{0pt}
+ \setlength{\partopsep}{0pt}
+}
+{\end{itemize}}
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
+\newlength{\tmplength}
+\newenvironment{TabularC}[1]
+{
+\setlength{\tmplength}
+ {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
+ \par\begin{tabular*}{\linewidth}
+ {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
+}
+{\end{tabular*}\par}
+\newcommand{\entrylabel}[1]{
+ {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
+\newenvironment{Desc}
+{\begin{list}{}
+ {
+ \settowidth{\labelwidth}{40pt}
+ \setlength{\leftmargin}{\labelwidth}
+ \setlength{\parsep}{0pt}
+ \setlength{\itemsep}{-4pt}
+ \renewcommand{\makelabel}{\entrylabel}
+ }
+}
+{\end{list}}
+\newenvironment{Indent}
+ {\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
+ \item[]\ignorespaces}
+ {\unskip\end{list}}
+\setlength{\parindent}{0cm}
+\setlength{\parskip}{0.2cm}
+\addtocounter{secnumdepth}{1}
+\sloppy
+\usepackage[T1]{fontenc}
+\makeatletter
+\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}%
+ {-3.25ex plus -1ex minus -0.2ex}%
+ {1.5ex plus 0.2ex}%
+ {\normalfont\normalsize\bfseries}}
+\makeatother
+\stepcounter{secnumdepth}
+\stepcounter{tocdepth}
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
diff --git a/vendor/voclient/libvoclient/doc/latex/files.tex b/vendor/voclient/libvoclient/doc/latex/files.tex
new file mode 100644
index 00000000..05e63e0f
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/files.tex
@@ -0,0 +1,14 @@
+\section{File List}
+Here is a list of all documented files with brief descriptions:\begin{CompactList}
+\item\contentsline{section}{\textbf{VOClient.h} }{\pageref{VOClient_8h}}{}
+\item\contentsline{section}{\hyperlink{vocMsg_8c}{vocMsg.c} }{\pageref{vocMsg_8c}}{}
+\item\contentsline{section}{\hyperlink{vocRegistry_8c}{vocRegistry.c} }{\pageref{vocRegistry_8c}}{}
+\item\contentsline{section}{\hyperlink{vocRegistry__f77_8c}{vocRegistry\_\-f77.c} }{\pageref{vocRegistry__f77_8c}}{}
+\item\contentsline{section}{\hyperlink{vocRegistry__spp_8c}{vocRegistry\_\-spp.c} }{\pageref{vocRegistry__spp_8c}}{}
+\item\contentsline{section}{\hyperlink{vocSesame_8c}{vocSesame.c} }{\pageref{vocSesame_8c}}{}
+\item\contentsline{section}{\hyperlink{vocSesame__f77_8c}{vocSesame\_\-f77.c} }{\pageref{vocSesame__f77_8c}}{}
+\item\contentsline{section}{\hyperlink{vocSesame__spp_8c}{vocSesame\_\-spp.c} }{\pageref{vocSesame__spp_8c}}{}
+\item\contentsline{section}{\hyperlink{vocSkybot_8c}{vocSkybot.c} }{\pageref{vocSkybot_8c}}{}
+\item\contentsline{section}{\hyperlink{vocUtil__f77_8c}{vocUtil\_\-f77.c} }{\pageref{vocUtil__f77_8c}}{}
+\item\contentsline{section}{\hyperlink{vocUtil__spp_8c}{vocUtil\_\-spp.c} }{\pageref{vocUtil__spp_8c}}{}
+\end{CompactList}
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.aux b/vendor/voclient/libvoclient/doc/latex/refman.aux
new file mode 100644
index 00000000..42aeada6
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.aux
@@ -0,0 +1,66 @@
+\relax
+\ifx\hyper@anchor\@undefined
+\global \let \oldcontentsline\contentsline
+\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global \let \oldnewlabel\newlabel
+\gdef \newlabel#1#2{\newlabelxx{#1}#2}
+\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\let \contentsline\oldcontentsline
+\let \newlabel\oldnewlabel}
+\else
+\global \let \hyper@last\relax
+\fi
+
+\@writefile{toc}{\contentsline {chapter}{\numberline {1}Class Index}{1}{chapter.1}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {1.1}Class List}{1}{section.1.1}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {2}File Index}{3}{chapter.2}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {2.1}File List}{3}{section.2.1}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {3}Class Documentation}{5}{chapter.3}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {3.1}Object Struct Reference}{5}{section.3.1}}
+\newlabel{structObject}{{3.1}{5}{Object Struct Reference\relax }{section.3.1}{}}
+\newlabel{structObject_a8132cc4ab5e191de82b257172c67c03}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_607a5e695e1b0f9a077b76b0d640e23a}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_4d7b960d76d5ea50bb92efedc3c68878}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_a6e49034ae594ec8685489ea90cc2bac}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_2cb904c8ddcab5a9e3a9d3eca0e29083}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_f5a95e66e7737fb043264861e9a251f2}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\newlabel{structObject_c87f83c0327f534da1613be4bff610f5}{{3.1}{5}{Public Attributes\relax }{section*.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Detailed Description}{5}{subsection.3.1.1}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {4}File Documentation}{7}{chapter.4}}
+\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\contentsline {section}{\numberline {4.1}vocSesame.c File Reference}{7}{section.4.1}}
+\newlabel{vocSesame_8c}{{4.1}{7}{vocSesame.c File Reference\relax }{section.4.1}{}}
+\newlabel{vocSesame_8c_96522681f45fae55d1e17bcb63620e45}{{4.1}{7}{Defines\relax }{section*.4}{}}
+\newlabel{vocSesame_8c_cdc7844fbd4d45737d4aa56834d37829}{{4.1}{7}{Defines\relax }{section*.4}{}}
+\newlabel{vocSesame_8c_2e97c1de9ed6a4c34b8731fed4b2e624}{{4.1}{7}{Defines\relax }{section*.4}{}}
+\newlabel{vocSesame_8c_867c408546a8562a552a59405804f607}{{4.1}{7}{Typedefs\relax }{section*.5}{}}
+\newlabel{vocSesame_8c_5383de2a3bf7243d0ac205fc0faa6785}{{4.1}{8}{Functions\relax }{section*.6}{}}
+\newlabel{vocSesame_8c_1d587466a412b72dd4432e473f0fb60e}{{4.1}{8}{Variables\relax }{section*.7}{}}
+\newlabel{vocSesame_8c_d8d847f1b70d0e2bc3da7e990ff0d317}{{4.1}{8}{Variables\relax }{section*.7}{}}
+\newlabel{vocSesame_8c_e8b9013ac3d6a8f93991444d8c8c5919}{{4.1}{8}{Variables\relax }{section*.7}{}}
+\newlabel{_details}{{4.1}{8}{Variables\relax }{section*.7}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Detailed Description}{8}{subsection.4.1.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}DESCRIPTION}{8}{subsection.4.1.2}}
+\newlabel{vocSesame_8c_DESCRIPTION}{{4.1.2}{8}{DESCRIPTION\relax }{subsection.4.1.2}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.3}Function Documentation}{8}{subsection.4.1.3}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.1}voc\_\discretionary {-}{}{}nameResolver}{8}{subsubsection.4.1.3.1}}
+\newlabel{vocSesame_8c_467c02f32e92e6808b6d1c129b8d5b04}{{4.1.3.1}{8}{voc\_\-nameResolver\relax }{subsubsection.4.1.3.1}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.2}voc\_\discretionary {-}{}{}resolverDEC}{9}{subsubsection.4.1.3.2}}
+\newlabel{vocSesame_8c_46c25290911c3217bdc4294eded2ba46}{{4.1.3.2}{9}{voc\_\-resolverDEC\relax }{subsubsection.4.1.3.2}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.3}voc\_\discretionary {-}{}{}resolverDECErr}{9}{subsubsection.4.1.3.3}}
+\newlabel{vocSesame_8c_f0fb68ddb8bd62c72e21de2bed525b4c}{{4.1.3.3}{9}{voc\_\-resolverDECErr\relax }{subsubsection.4.1.3.3}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.4}voc\_\discretionary {-}{}{}resolverOtype}{9}{subsubsection.4.1.3.4}}
+\newlabel{vocSesame_8c_c7d46e5f565c97b0250fe837f985e283}{{4.1.3.4}{9}{voc\_\-resolverOtype\relax }{subsubsection.4.1.3.4}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.5}voc\_\discretionary {-}{}{}resolverPos}{9}{subsubsection.4.1.3.5}}
+\newlabel{vocSesame_8c_911355789d941847843c8d42ad00314a}{{4.1.3.5}{9}{voc\_\-resolverPos\relax }{subsubsection.4.1.3.5}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.6}voc\_\discretionary {-}{}{}resolverRA}{9}{subsubsection.4.1.3.6}}
+\newlabel{vocSesame_8c_4526ce29541bc2a1b4c939c494c6d00e}{{4.1.3.6}{9}{voc\_\-resolverRA\relax }{subsubsection.4.1.3.6}{}}
+\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3.7}voc\_\discretionary {-}{}{}resolverRAErr}{9}{subsubsection.4.1.3.7}}
+\newlabel{vocSesame_8c_4fe9b855c8e4cca0f1fdced36d5ae8ea}{{4.1.3.7}{9}{voc\_\-resolverRAErr\relax }{subsubsection.4.1.3.7}{}}
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.idx b/vendor/voclient/libvoclient/doc/latex/refman.idx
new file mode 100644
index 00000000..f3d3b926
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.idx
@@ -0,0 +1,16 @@
+\indexentry{Object@{Object}|hyperpage}{5}
+\indexentry{vocSesame.c@{vocSesame.c}|hyperpage}{7}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}nameResolver@{voc\_\discretionary {-}{}{}nameResolver}|hyperpage}{8}
+\indexentry{voc\_\discretionary {-}{}{}nameResolver@{voc\_\discretionary {-}{}{}nameResolver}!vocSesame.c@{vocSesame.c}|hyperpage}{8}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverDEC@{voc\_\discretionary {-}{}{}resolverDEC}|hyperpage}{8}
+\indexentry{voc\_\discretionary {-}{}{}resolverDEC@{voc\_\discretionary {-}{}{}resolverDEC}!vocSesame.c@{vocSesame.c}|hyperpage}{8}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverDECErr@{voc\_\discretionary {-}{}{}resolverDECErr}|hyperpage}{9}
+\indexentry{voc\_\discretionary {-}{}{}resolverDECErr@{voc\_\discretionary {-}{}{}resolverDECErr}!vocSesame.c@{vocSesame.c}|hyperpage}{9}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverOtype@{voc\_\discretionary {-}{}{}resolverOtype}|hyperpage}{9}
+\indexentry{voc\_\discretionary {-}{}{}resolverOtype@{voc\_\discretionary {-}{}{}resolverOtype}!vocSesame.c@{vocSesame.c}|hyperpage}{9}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverPos@{voc\_\discretionary {-}{}{}resolverPos}|hyperpage}{9}
+\indexentry{voc\_\discretionary {-}{}{}resolverPos@{voc\_\discretionary {-}{}{}resolverPos}!vocSesame.c@{vocSesame.c}|hyperpage}{9}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverRA@{voc\_\discretionary {-}{}{}resolverRA}|hyperpage}{9}
+\indexentry{voc\_\discretionary {-}{}{}resolverRA@{voc\_\discretionary {-}{}{}resolverRA}!vocSesame.c@{vocSesame.c}|hyperpage}{9}
+\indexentry{vocSesame.c@{vocSesame.c}!voc\_\discretionary {-}{}{}resolverRAErr@{voc\_\discretionary {-}{}{}resolverRAErr}|hyperpage}{9}
+\indexentry{voc\_\discretionary {-}{}{}resolverRAErr@{voc\_\discretionary {-}{}{}resolverRAErr}!vocSesame.c@{vocSesame.c}|hyperpage}{9}
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.log b/vendor/voclient/libvoclient/doc/latex/refman.log
new file mode 100644
index 00000000..82365b76
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.log
@@ -0,0 +1,478 @@
+This is pdfTeX, Version 3.14159-14h-released-20010417 (Web2C 7.3.3.1) (format=pdflatex 2003.2.18) 9 JUN 2009 23:48
+**refman.tex
+(./refman.tex{/usr/share/texmf/pdftex/config/pdftex.cfg}
+LaTeX2e <2001/06/01>
+Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, i
+talian, nohyphenation, loaded.
+(/usr/share/texmf/tex/latex/base/book.cls
+Document Class: book 2001/04/21 v1.4e Standard LaTeX document class
+(/usr/share/texmf/tex/latex/base/bk10.clo
+File: bk10.clo 2001/04/21 v1.4e Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@chapter=\count80
+\c@section=\count81
+\c@subsection=\count82
+\c@subsubsection=\count83
+\c@paragraph=\count84
+\c@subparagraph=\count85
+\c@figure=\count86
+\c@table=\count87
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/usr/share/texmf/tex/latex/misc/a4wide.sty
+Package: a4wide 1994/08/30
+
+(/usr/share/texmf/tex/latex/ntgclass/a4.sty
+Package: a4 1999/03/03 v1.2f A4 based page layout
+))
+(/usr/share/texmf/tex/latex/base/makeidx.sty
+Package: makeidx 2000/03/29 v1.0m Standard LaTeX package
+)
+(/usr/share/texmf/tex/latex/fancyhdr/fancyhdr.sty
+\headwidth=\dimen103
+)
+(/usr/share/texmf/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks14
+)
+(/usr/share/texmf/tex/latex/graphics/graphics.sty
+Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+)
+(/usr/share/texmf/tex/latex/config/graphics.cfg)
+Package graphics Info: Driver file: pdftex.def on input line 80.
+
+(/usr/share/texmf/tex/latex/graphics/pdftex.def
+File: pdftex.def 2001/11/29 v0.03i graphics/color for pdftex
+\Gread@gobject=\count88
+))
+\Gin@req@height=\dimen104
+\Gin@req@width=\dimen105
+)
+(/usr/share/texmf/tex/latex/tools/multicol.sty
+Package: multicol 2000/07/10 v1.5z multicolumn formatting (FMi)
+\c@tracingmulticols=\count89
+\mult@box=\box26
+\multicol@leftmargin=\dimen106
+\c@unbalance=\count90
+\c@collectmore=\count91
+\doublecol@number=\count92
+\multicoltolerance=\count93
+\multicolpretolerance=\count94
+\full@width=\dimen107
+\page@free=\dimen108
+\premulticols=\dimen109
+\postmulticols=\dimen110
+\multicolsep=\skip43
+\multicolbaselineskip=\skip44
+\partial@page=\box27
+\last@line=\box28
+\mult@rightbox=\box29
+\mult@grightbox=\box30
+\mult@gfirstbox=\box31
+\mult@firstbox=\box32
+\@tempa=\box33
+\@tempa=\box34
+\@tempa=\box35
+\@tempa=\box36
+\@tempa=\box37
+\@tempa=\box38
+\@tempa=\box39
+\@tempa=\box40
+\@tempa=\box41
+\@tempa=\box42
+\@tempa=\box43
+\@tempa=\box44
+\@tempa=\box45
+\@tempa=\box46
+\@tempa=\box47
+\@tempa=\box48
+\@tempa=\box49
+\c@columnbadness=\count95
+\c@finalcolumnbadness=\count96
+\last@try=\dimen111
+\multicolovershoot=\dimen112
+\multicolundershoot=\dimen113
+\mult@nat@firstbox=\box50
+\colbreak@box=\box51
+)
+(/usr/share/texmf/tex/latex/misc/float.sty
+Package: float 2001/11/08 v1.3d Float enhancements (AL)
+\c@float@type=\count97
+\float@exts=\toks15
+\float@box=\box52
+\@float@everytoks=\toks16
+\@floatcapt=\box53
+)
+(/usr/share/texmf/tex/latex/listings/listings.sty
+Package: listings 1999/07/12 v0.20 (Carsten Heinz)
+\lst@mode=\count98
+\lst@token=\toks17
+\lst@length=\count99
+\lst@width=\dimen114
+\lst@linewidth=\dimen115
+\lst@column=\count100
+\lst@pos=\count101
+\lst@lostspace=\dimen116
+\lst@lineno=\count102
+\c@lstlisting=\count103
+\lst@maxwidth=\dimen117
+
+(/usr/share/texmf/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 1999/07/12 v0.20 (Carsten Heinz)
+\c@lstlabel=\count104
+\lst@skiplabels=\count105
+\lst@innerspread=\dimen118
+\lst@outerspread=\dimen119
+)
+(/usr/share/texmf/tex/latex/listings/listings.cfg))
+(/usr/share/texmf/tex/latex/graphics/color.sty
+Package: color 1999/02/16 v1.0i Standard LaTeX Color (DPC)
+
+(/usr/share/texmf/tex/latex/config/color.cfg)
+Package color Info: Driver file: pdftex.def on input line 125.
+)
+(/usr/share/texmf/tex/latex/base/textcomp.sty
+Package: textcomp 2001/06/05 v1.94 Standard LaTeX package
+
+(/usr/share/texmf/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+))
+(/usr/share/texmf/tex/latex/base/alltt.sty
+Package: alltt 1997/06/16 v2.0g defines alltt environment
+)
+(/usr/share/texmf/tex/latex/psnfss/times.sty
+Package: times 2001/06/04 PSNFSS-v8.2 (SPQR)
+)
+(/usr/share/texmf/tex/latex/oberdiek/ifpdf.sty
+Package: ifpdf 2001/06/14 v1.0 Providing \ifpdf (HO)
+Package ifpdf Info: pdfTeX in pdf mode detected on input line 140.
+)
+(/usr/share/texmf/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2002/08/04 v6.72v Hypertext links for LaTeX
+\@linkdim=\dimen120
+\Hy@linkcounter=\count106
+\Hy@pagecounter=\count107
+
+(/usr/share/texmf/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2002/08/04 v6.72v Hyperref: PDFDocEncoding definition (HO)
+)
+Package hyperref Info: Option `colorlinks' set `true' on input line 1739.
+Package hyperref Info: Option `unicode' set `true' on input line 1739.
+
+(/usr/share/texmf/tex/latex/hyperref/puenc.def
+File: puenc.def 2002/08/04 v6.72v Hyperref: PDF Unicode definition (HO)
+)
+Package hyperref Info: Bookmarks ON on input line 1797.
+Package hyperref Info: Hyper figures OFF on input line 1816.
+Package hyperref Info: Link nesting OFF on input line 1821.
+Package hyperref Info: Hyper index ON on input line 1824.
+Package hyperref Info: Plain pages ON on input line 1829.
+Package hyperref Info: Backreferencing ON on input line 1834.
+
+Implicit mode ON; LaTeX internals redefined
+(/usr/share/texmf/tex/latex/hyperref/backref.sty
+Package: backref 2002/06/09 v1.20 Bibliographical back referencing
+)
+(/usr/share/texmf/tex/latex/html/url.sty
+Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file
+ names
+)
+LaTeX Info: Redefining \url on input line 2048.
+\Fld@menulength=\count108
+\Field@Width=\dimen121
+\Fld@charsize=\dimen122
+\Choice@toks=\toks18
+\Field@toks=\toks19
+Package hyperref Info: Hyper figures OFF on input line 2506.
+Package hyperref Info: Link nesting OFF on input line 2511.
+Package hyperref Info: Hyper index ON on input line 2514.
+Package hyperref Info: backreferencing ON on input line 2519.
+Package hyperref Info: Link coloring ON on input line 2524.
+\c@Item=\count109
+\c@Hfootnote=\count110
+)
+*hyperref using driver hpdftex*
+(/usr/share/texmf/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2002/08/04 v6.72v Hyperref driver for pdfTeX
+
+(/usr/share/texmf/tex/latex/psnfss/pifont.sty
+Package: pifont 2001/06/04 PSNFSS-v8.2 Pi font support (SPQR)
+LaTeX Font Info: Try loading font information for U+pzd on input line 62.
+
+(/usr/share/texmf/tex/latex/psnfss/upzd.fd
+File: upzd.fd 2001/06/04 font definitions for U/pzd.
+)
+LaTeX Font Info: Try loading font information for U+psy on input line 63.
+
+(/usr/share/texmf/tex/latex/psnfss/upsy.fd
+File: upsy.fd 2001/06/04 font definitions for U/psy.
+))
+\Fld@listcount=\count111
+\@outlinefile=\write3
+)
+(/usr/share/texmf/tex/latex/base/inputenc.sty
+Package: inputenc 2001/07/10 v0.99a Input encoding file
+
+(/usr/share/texmf/tex/latex/unicode/utf8.def
+File: utf8.def 2002/05/21 UCS: Input encoding UTF-8
+))
+(/usr/share/texmf/tex/latex/unicode/ucs.sty
+Package: ucs 2002/06/22 UCS: Unicode input support
+
+(/usr/share/texmf/tex/latex/unicode/data/uni-global.def
+File: uni-global.def 2002/07/04 UCS: Unicode global data
+)
+\uc@secondtry=\count112
+\uc@combtoks=\toks20
+\uc@combtoksb=\toks21
+\uc@temptokena=\toks22
+) (./doxygen.sty
+Package: doxygen
+
+(/usr/share/texmf/tex/latex/tools/calc.sty
+Package: calc 1998/07/07 v4.1b Infix arithmetic (KKT,FJ)
+\calc@Acount=\count113
+\calc@Bcount=\count114
+\calc@Adimen=\dimen123
+\calc@Bdimen=\dimen124
+\calc@Askip=\skip45
+\calc@Bskip=\skip46
+LaTeX Info: Redefining \setlength on input line 59.
+LaTeX Info: Redefining \addtolength on input line 60.
+\calc@denominator=\count115
+)
+(/usr/share/texmf/tex/latex/tools/array.sty
+Package: array 1998/05/13 v2.3m Tabular extension package (FMi)
+\col@sep=\dimen125
+\extrarowheight=\dimen126
+\NC@list=\toks23
+\extratabsurround=\skip47
+\backup@length=\skip48
+)
+\tmplength=\skip49
+
+(/usr/share/texmf/tex/latex/base/fontenc.sty
+Package: fontenc 2001/06/05 v1.94 Standard LaTeX package
+
+(/usr/share/texmf/tex/latex/base/t1enc.def
+File: t1enc.def 2001/06/05 v1.94 Standard LaTeX file
+LaTeX Font Info: Redeclaring font encoding T1 on input line 38.
+)))
+(/usr/share/texmf/tex/latex/listings/lstlang1.sty)
+(/usr/share/texmf/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 1999/07/12 v0.20 (Carsten Heinz)
+)
+
+! Package keyval Error: inputencoding undefined.
+
+See the keyval package documentation for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.32 ...atwhitespace=true,tabsize=8,numbers=left }
+
+?
+
+! Package keyval Error: breaklines undefined.
+
+See the keyval package documentation for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.32 ...atwhitespace=true,tabsize=8,numbers=left }
+
+?
+
+! Package keyval Error: breakatwhitespace undefined.
+
+See the keyval package documentation for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.32 ...atwhitespace=true,tabsize=8,numbers=left }
+
+?
+
+! Package keyval Error: numbers undefined.
+
+See the keyval package documentation for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.32 ...atwhitespace=true,tabsize=8,numbers=left }
+
+?
+\@indexfile=\write4
+\openout4 = `refman.idx'.
+
+Writing index file refman.idx
+No file refman.aux.
+\openout1 = `refman.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 36.
+LaTeX Font Info: Try loading font information for TS1+cmr on input line 36.
+(/usr/share/texmf/tex/latex/base/ts1cmr.fd
+File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 36.
+LaTeX Font Info: ... okay on input line 36.
+LaTeX Font Info: Try loading font information for T1+ptm on input line 36.
+
+(/usr/share/texmf/tex/latex/psnfss/t1ptm.fd
+File: t1ptm.fd 2001/06/04 font definitions for T1/ptm.
+)
+(/usr/share/texmf/tex/context/base/supp-pdf.tex
+(/usr/share/texmf/tex/context/base/supp-mis.tex
+loading : Context Support Macros / Missing
+\protectiondepth=\count116
+\scratchcounter=\count117
+\scratchtoks=\toks24
+\scratchdimen=\dimen127
+\scratchskip=\skip50
+\scratchmuskip=\muskip10
+\scratchbox=\box54
+\scratchread=\read1
+\scratchwrite=\write5
+\zeropoint=\dimen128
+\nextbox=\box55
+\nextdepth=\dimen129
+\everyline=\toks25
+\!!counta=\count118
+\!!countb=\count119
+\recursecounter=\count120
+)
+loading : Context Support Macros / PDF
+\nofMPsegments=\count121
+\nofMParguments=\count122
+\everyMPtoPDFconversion=\toks26
+)
+Package hyperref Info: Link coloring ON on input line 36.
+ (/usr/share/texmf/tex/latex/hyperref/nameref.sty
+Package: nameref 2001/01/27 v2.19 Cross-referencing by name of section
+\c@section@level=\count123
+)
+LaTeX Info: Redefining \ref on input line 36.
+LaTeX Info: Redefining \pageref on input line 36.
+\openout3 = `refman.out'.
+
+
+(/usr/share/texmf/tex/latex/unicode/ucsencs.def
+File: ucsencs.def 2002/06/15 Fixes to fontencodings LGR, LHE, T3
+)
+Package hyperref Info: Option `pageanchor' set `false' on input line 37.
+ [1
+
+
+{/usr/share/texmf/dvips/config/pdftex.map}] [2
+
+]
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <24.88> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 50.
+\tf@toc=\write6
+\openout6 = `refman.toc'.
+
+ [1
+
+] [2
+
+]
+Package hyperref Info: Option `pageanchor' set `true' on input line 53.
+
+Chapter 1.
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <20.74> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 54.
+(./annotated.tex
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <14.4> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 1.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <7> on input line 3.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <5> on input line 3.
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <10> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 3.
+
+
+LaTeX Warning: Reference `structObject' on page 1 undefined on input line 3.
+
+) [1
+
+]
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <7> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 56.
+ [2
+
+]
+Chapter 2.
+(./files.tex
+
+LaTeX Warning: Reference `VOClient_8h' on page 3 undefined on input line 3.
+
+
+LaTeX Warning: Reference `vocSesame_8c' on page 3 undefined on input line 4.
+
+) [3] [4
+
+]
+Chapter 3.
+(./structObject.tex
+LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <12> not available
+(Font) Font shape `T1/ptm/b/n' tried instead on input line 5.
+LaTeX Font Info: Try loading font information for TS1+ptm on input line 8.
+ (/usr/share/texmf/tex/latex/psnfss/ts1ptm.fd
+File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm.
+)) [5] [6
+
+]
+Chapter 4.
+(./vocSesame_8c.tex
+LaTeX Font Info: Try loading font information for T1+pcr on input line 5.
+ (/usr/share/texmf/tex/latex/psnfss/t1pcr.fd
+File: t1pcr.fd 2001/06/04 font definitions for T1/pcr.
+) [7]
+LaTeX Font Info: Font shape `T1/ptm/bx/it' in size <10> not available
+(Font) Font shape `T1/ptm/b/it' tried instead on input line 106.
+ [8])
+No file refman.ind.
+[9] (./refman.aux)
+
+LaTeX Warning: There were undefined references.
+
+
+LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
+
+ )
+Here is how much of TeX's memory you used:
+ 5443 strings out of 50453
+ 73747 string characters out of 688420
+ 131215 words of memory out of 1500001
+ 8281 multiletter control sequences out of 10000+25000
+ 39789 words of font info for 44 fonts, out of 400000 for 1000
+ 14 hyphenation exceptions out of 10000
+ 29i,11n,40p,354b,446s stack positions out of 3000i,500n,3000p,50000b,5000s
+{/usr/share/texmf/dvips/base/8r.enc}</usr/share/texmf/fonts/type1/bluesky/cm/
+cmsy10.pfb></usr/share/texmf/fonts/type1/bluesky/cm/cmmi10.pfb>
+Output written on refman.pdf (13 pages, 27890 bytes).
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.out b/vendor/voclient/libvoclient/doc/latex/refman.out
new file mode 100644
index 00000000..5a74eb08
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.out
@@ -0,0 +1,19 @@
+\BOOKMARK [0][-]{chapter.1}{\376\377\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x}{}
+\BOOKMARK [1][-]{section.1.1}{\376\377\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t}{chapter.1}
+\BOOKMARK [0][-]{chapter.2}{\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x}{}
+\BOOKMARK [1][-]{section.2.1}{\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t}{chapter.2}
+\BOOKMARK [0][-]{chapter.3}{\376\377\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}
+\BOOKMARK [1][-]{section.3.1}{\376\377\000O\000b\000j\000e\000c\000t\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.3}
+\BOOKMARK [2][-]{subsection.3.1.1}{\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.3.1}
+\BOOKMARK [0][-]{chapter.4}{\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}
+\BOOKMARK [1][-]{section.4.1}{\376\377\000v\000o\000c\000S\000e\000s\000a\000m\000e\000.\000c\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.4}
+\BOOKMARK [2][-]{subsection.4.1.1}{\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.4.1}
+\BOOKMARK [2][-]{subsection.4.1.2}{\376\377\000D\000E\000S\000C\000R\000I\000P\000T\000I\000O\000N}{section.4.1}
+\BOOKMARK [2][-]{subsection.4.1.3}{\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{section.4.1}
+\BOOKMARK [3][-]{subsubsection.4.1.3.1}{\376\377\000v\000o\000c\000\137\000n\000a\000m\000e\000R\000e\000s\000o\000l\000v\000e\000r}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.2}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000D\000E\000C}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.3}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000D\000E\000C\000E\000r\000r}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.4}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000O\000t\000y\000p\000e}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.5}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000P\000o\000s}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.6}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000R\000A}{subsection.4.1.3}
+\BOOKMARK [3][-]{subsubsection.4.1.3.7}{\376\377\000v\000o\000c\000\137\000r\000e\000s\000o\000l\000v\000e\000r\000R\000A\000E\000r\000r}{subsection.4.1.3}
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.pdf b/vendor/voclient/libvoclient/doc/latex/refman.pdf
new file mode 100644
index 00000000..52774a73
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.pdf
Binary files differ
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.tex b/vendor/voclient/libvoclient/doc/latex/refman.tex
new file mode 100644
index 00000000..3ab948ba
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.tex
@@ -0,0 +1,72 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\usepackage{ifpdf}
+\ifpdf
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\else
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\usepackage{pspicture}
+\fi
+\usepackage[utf8]{inputenc}
+\usepackage{doxygen}
+\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left }
+\makeindex
+\setcounter{tocdepth}{3}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+\hypersetup{pageanchor=false}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Large VOClient API }\\
+\vspace*{1cm}
+{\large Generated by Doxygen 1.5.9}\\
+\vspace*{0.5cm}
+{\small Wed Feb 27 21:08:58 2013}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true}
+\chapter{Class Index}
+\input{annotated}
+\chapter{File Index}
+\input{files}
+\chapter{Class Documentation}
+\input{structObject}
+\chapter{File Documentation}
+\input{vocMsg_8c}
+\include{vocRegistry_8c}
+\include{vocRegistry__f77_8c}
+\include{vocRegistry__spp_8c}
+\include{vocSesame_8c}
+\include{vocSesame__f77_8c}
+\include{vocSesame__spp_8c}
+\include{vocSkybot_8c}
+\include{vocUtil__f77_8c}
+\include{vocUtil__spp_8c}
+\printindex
+\end{document}
diff --git a/vendor/voclient/libvoclient/doc/latex/refman.toc b/vendor/voclient/libvoclient/doc/latex/refman.toc
new file mode 100644
index 00000000..995a1a05
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/refman.toc
@@ -0,0 +1,19 @@
+\contentsline {chapter}{\numberline {1}Class Index}{1}{chapter.1}
+\contentsline {section}{\numberline {1.1}Class List}{1}{section.1.1}
+\contentsline {chapter}{\numberline {2}File Index}{3}{chapter.2}
+\contentsline {section}{\numberline {2.1}File List}{3}{section.2.1}
+\contentsline {chapter}{\numberline {3}Class Documentation}{5}{chapter.3}
+\contentsline {section}{\numberline {3.1}Object Struct Reference}{5}{section.3.1}
+\contentsline {subsection}{\numberline {3.1.1}Detailed Description}{5}{subsection.3.1.1}
+\contentsline {chapter}{\numberline {4}File Documentation}{7}{chapter.4}
+\contentsline {section}{\numberline {4.1}vocSesame.c File Reference}{7}{section.4.1}
+\contentsline {subsection}{\numberline {4.1.1}Detailed Description}{8}{subsection.4.1.1}
+\contentsline {subsection}{\numberline {4.1.2}DESCRIPTION}{8}{subsection.4.1.2}
+\contentsline {subsection}{\numberline {4.1.3}Function Documentation}{8}{subsection.4.1.3}
+\contentsline {subsubsection}{\numberline {4.1.3.1}voc\_\discretionary {-}{}{}nameResolver}{8}{subsubsection.4.1.3.1}
+\contentsline {subsubsection}{\numberline {4.1.3.2}voc\_\discretionary {-}{}{}resolverDEC}{9}{subsubsection.4.1.3.2}
+\contentsline {subsubsection}{\numberline {4.1.3.3}voc\_\discretionary {-}{}{}resolverDECErr}{9}{subsubsection.4.1.3.3}
+\contentsline {subsubsection}{\numberline {4.1.3.4}voc\_\discretionary {-}{}{}resolverOtype}{9}{subsubsection.4.1.3.4}
+\contentsline {subsubsection}{\numberline {4.1.3.5}voc\_\discretionary {-}{}{}resolverPos}{9}{subsubsection.4.1.3.5}
+\contentsline {subsubsection}{\numberline {4.1.3.6}voc\_\discretionary {-}{}{}resolverRA}{9}{subsubsection.4.1.3.6}
+\contentsline {subsubsection}{\numberline {4.1.3.7}voc\_\discretionary {-}{}{}resolverRAErr}{9}{subsubsection.4.1.3.7}
diff --git a/vendor/voclient/libvoclient/doc/latex/structObject.tex b/vendor/voclient/libvoclient/doc/latex/structObject.tex
new file mode 100644
index 00000000..7ba584d7
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/structObject.tex
@@ -0,0 +1,50 @@
+\hypertarget{structObject}{
+\section{Object Struct Reference}
+\label{structObject}\index{Object@{Object}}
+}
+\subsection*{Public Attributes}
+\begin{CompactItemize}
+\item
+\hypertarget{structObject_a8132cc4ab5e191de82b257172c67c03}{
+char \textbf{target} \mbox{[}SZ\_\-TARGET\mbox{]}}
+\label{structObject_a8132cc4ab5e191de82b257172c67c03}
+
+\item
+\hypertarget{structObject_607a5e695e1b0f9a077b76b0d640e23a}{
+char \textbf{hms\_\-pos} \mbox{[}SZ\_\-TARGET\mbox{]}}
+\label{structObject_607a5e695e1b0f9a077b76b0d640e23a}
+
+\item
+\hypertarget{structObject_4d7b960d76d5ea50bb92efedc3c68878}{
+double \textbf{ra}}
+\label{structObject_4d7b960d76d5ea50bb92efedc3c68878}
+
+\item
+\hypertarget{structObject_a6e49034ae594ec8685489ea90cc2bac}{
+double \textbf{dec}}
+\label{structObject_a6e49034ae594ec8685489ea90cc2bac}
+
+\item
+\hypertarget{structObject_2cb904c8ddcab5a9e3a9d3eca0e29083}{
+double \textbf{era}}
+\label{structObject_2cb904c8ddcab5a9e3a9d3eca0e29083}
+
+\item
+\hypertarget{structObject_f5a95e66e7737fb043264861e9a251f2}{
+double \textbf{edec}}
+\label{structObject_f5a95e66e7737fb043264861e9a251f2}
+
+\item
+\hypertarget{structObject_c87f83c0327f534da1613be4bff610f5}{
+char \textbf{type} \mbox{[}SZ\_\-TARGET\mbox{]}}
+\label{structObject_c87f83c0327f534da1613be4bff610f5}
+
+\end{CompactItemize}
+
+
+\subsection{Detailed Description}
+Structure for the object being queried.
+
+The documentation for this struct was generated from the following file:\begin{CompactItemize}
+\item
+\hyperlink{vocSesame_8c}{vocSesame.c}\end{CompactItemize}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocMsg_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocMsg_8c.tex
new file mode 100644
index 00000000..05c77163
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocMsg_8c.tex
@@ -0,0 +1,531 @@
+\hypertarget{vocMsg_8c}{
+\section{vocMsg.c File Reference}
+\label{vocMsg_8c}\index{vocMsg.c@{vocMsg.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$string.h$>$}\par
+{\tt \#include $<$stddef.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$ctype.h$>$}\par
+{\tt \#include $<$pthread.h$>$}\par
+{\tt \#include $<$sys/file.h$>$}\par
+{\tt \#include $<$sys/types.h$>$}\par
+{\tt \#include $<$sys/socket.h$>$}\par
+{\tt \#include $<$sys/select.h$>$}\par
+{\tt \#include $<$sys/time.h$>$}\par
+{\tt \#include $<$netinet/in.h$>$}\par
+{\tt \#include $<$sys/un.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$netdb.h$>$}\par
+{\tt \#include $<$fcntl.h$>$}\par
+{\tt \#include $<$sys/uio.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocMsg_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocMsg_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocMsg_8c_578d5b29868572f072202c1ae23ea3dd}{
+\#define \textbf{SELWIDTH}~32}
+\label{vocMsg_8c_578d5b29868572f072202c1ae23ea3dd}
+
+\item
+\hypertarget{vocMsg_8c_db119203ebbaf890a9648abbeb59ad92}{
+\#define \textbf{SZ\_\-CHUNK}~4096}
+\label{vocMsg_8c_db119203ebbaf890a9648abbeb59ad92}
+
+\item
+\hypertarget{vocMsg_8c_d1a1c40536cc314c339296c65d860c83}{
+\#define \textbf{SZ\_\-BULKDATA}~1024000}
+\label{vocMsg_8c_d1a1c40536cc314c339296c65d860c83}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_a36229a2ccfb8e7a446bcf8fd66e56e5}{msg\_\-newCallMsg} (ObjectID objid, char $\ast$method, int nparams)
+\begin{CompactList}\small\item\em Create a CALL message structure initialized w/ parameters. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_517cadcc8f9fcdf4133f7cacf629ca4a}{msg\_\-newResultMsg} (int status, int type, int nitems)
+\begin{CompactList}\small\item\em Create a RESULT message structure initialized w/ parameters. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_77b1550e78504576d33c763da2e0e10e}{msg\_\-newMsg} (char $\ast$msgclass, char $\ast$str)
+\begin{CompactList}\small\item\em Create a MSG message initialized w/ parameters. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_e894a9cdf87bb390cddd090447d2d644}{msg\_\-shutdownMsg} ()
+\begin{CompactList}\small\item\em Create a END message to shutdown the server. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_3183a0065ee97668b3a96dff25b919c4}{msg\_\-quitMsg} ()
+\begin{CompactList}\small\item\em Create a QUIT message. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_b97f1775026d5eaf7de3e03de6e94f1e}{msg\_\-ackMsg} ()
+\begin{CompactList}\small\item\em Create an ACK message. \item\end{CompactList}\item
+vocMsg\_\-t $\ast$ \hyperlink{vocMsg_8c_3cc1a4a8e24b8322ac8a2b0f6e151134}{msg\_\-noackMsg} ()
+\begin{CompactList}\small\item\em Create a NOACK message. \item\end{CompactList}\item
+vocRes\_\-t $\ast$ \hyperlink{vocMsg_8c_35bfd91fb870b9e42398c2c77099a486}{msg\_\-sendMsg} (int fd, vocMsg\_\-t $\ast$msg)
+\begin{CompactList}\small\item\em Send the message to the VOClient server. \item\end{CompactList}\item
+int \hyperlink{vocMsg_8c_1aec8e19abd5f1741434bc0e70823965}{msg\_\-sendRawMsg} (int fd, vocMsg\_\-t $\ast$msg)
+\begin{CompactList}\small\item\em Send the message to the VOClient server. \item\end{CompactList}\item
+vocRes\_\-t $\ast$ \hyperlink{vocMsg_8c_c6db5a0bf755a1637562ab4a314c5468}{msg\_\-getResult} (int fd)
+\begin{CompactList}\small\item\em Read and parse a result message. \item\end{CompactList}\item
+vocRes\_\-t $\ast$ \hyperlink{vocMsg_8c_97a642f02095c629a992c67a7cc09080}{msg\_\-getResultToFile} (int fd, char $\ast$fname, int overwrite)
+\begin{CompactList}\small\item\em Read and parse a result message, saving data to named file. \item\end{CompactList}\item
+void \hyperlink{vocMsg_8c_5fb36fa1a1b0bf447771272393e77df2}{msg\_\-addIntParam} (vocMsg\_\-t $\ast$msg, int ival)
+\begin{CompactList}\small\item\em Add a int parameter to an outgoing CALL message. \item\end{CompactList}\item
+void \hyperlink{vocMsg_8c_eae320530430c840411cb1c401b88033}{msg\_\-addFloatParam} (vocMsg\_\-t $\ast$msg, double dval)
+\begin{CompactList}\small\item\em Add a float parameter to an outgoing CALL message. \item\end{CompactList}\item
+void \hyperlink{vocMsg_8c_4f880a3c986d13c65b7a7d5c49c79707}{msg\_\-addStringParam} (vocMsg\_\-t $\ast$msg, char $\ast$str)
+\begin{CompactList}\small\item\em Add a string parameter to an outgoing CALL message. \item\end{CompactList}\item
+void \hyperlink{vocMsg_8c_cf6e8745c00f7d832dcfc275cf43fcf5}{msg\_\-addIntResult} (vocMsg\_\-t $\ast$msg, int ival)
+\begin{CompactList}\small\item\em Add a integer value to a RESULT string. \item\end{CompactList}\item
+\hypertarget{vocMsg_8c_a828295a8b60db29870c8bdb1e6922ba}{
+void \textbf{msg\_\-addFloatResult} (vocMsg\_\-t $\ast$msg, double dval)}
+\label{vocMsg_8c_a828295a8b60db29870c8bdb1e6922ba}
+
+\item
+void \hyperlink{vocMsg_8c_51fb5ca640761a4e517562dee9698fff}{msg\_\-addStringResult} (vocMsg\_\-t $\ast$msg, char $\ast$str)
+\begin{CompactList}\small\item\em Add a string value to a RESULT string. \item\end{CompactList}\item
+int \hyperlink{vocMsg_8c_0d9804ce039ea71007d8d500fbf49809}{msg\_\-resultStatus} (vocRes\_\-t $\ast$res)
+\begin{CompactList}\small\item\em Get result status. \item\end{CompactList}\item
+int \hyperlink{vocMsg_8c_ec73a99da1108fa9da1a2ff97d235a36}{msg\_\-resultType} (vocRes\_\-t $\ast$res)
+\begin{CompactList}\small\item\em Get result type. \item\end{CompactList}\item
+int \hyperlink{vocMsg_8c_8e2098c2d797fc23b8edf7886e65334c}{msg\_\-resultLength} (vocRes\_\-t $\ast$res)
+\begin{CompactList}\small\item\em Get result length. \item\end{CompactList}\item
+int \hyperlink{vocMsg_8c_44250b9b039021f88ddf37fbe5361065}{msg\_\-getIntResult} (vocRes\_\-t $\ast$res, int index)
+\begin{CompactList}\small\item\em Get an integer result by index. \item\end{CompactList}\item
+double \hyperlink{vocMsg_8c_b060cbd5cfe61864cc91b24080b5c2cd}{msg\_\-getFloatResult} (vocRes\_\-t $\ast$res, int index)
+\begin{CompactList}\small\item\em Get a float result by index. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocMsg_8c_71e1c7c95771d4e6ba986bcf6099d746}{msg\_\-getStringResult} (vocRes\_\-t $\ast$res, int index)
+\begin{CompactList}\small\item\em Get a string result by index. \item\end{CompactList}\item
+void $\ast$ \hyperlink{vocMsg_8c_3bce32d52e40e26a9fb0bd57c48e6dbe}{msg\_\-getBuffer} (vocRes\_\-t $\ast$res)
+\begin{CompactList}\small\item\em Get result buffer. \item\end{CompactList}\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocMsg_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocMsg_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCMSG.C -- VOClient Messaging Interface. This interface is used internally to communicate between the API and the VOClient Daemon.
+
+msg = newCallMsg (objid, method, nparams) msg = newResultMsg (status, type, nitems) msg = newMsg (msgclass, str)
+
+msgAddIntParam (msg, ival) msgAddFloatParam (msg, dval) msgAddStringParam (msg, str)
+
+msgAddIntResult (msg, ival) msgAddFloatResult (msg, dval) msgAddStringResult (msg, str)
+
+sendMsg (fd, msg) freeMsg (msg)
+
+res = getResult (fd) \# for reading RESULT msgs freeResult (res)
+
+stat = resultStatus (res) type = resultType (res) nitems = resultLength (res)
+
+ival = getIntResult (res, index) dval = getFloatResult (res, index) str = getStringResult (res, index)
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocMsg_8c_b97f1775026d5eaf7de3e03de6e94f1e}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-ackMsg@{msg\_\-ackMsg}}
+\index{msg\_\-ackMsg@{msg\_\-ackMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-ackMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-ackMsg (void)}}
+\label{vocMsg_8c_b97f1775026d5eaf7de3e03de6e94f1e}
+
+
+Create an ACK message.
+
+MSG\_\-ACKMSG -- Create an ACK message to the VOClient Server.
+
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_eae320530430c840411cb1c401b88033}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-addFloatParam@{msg\_\-addFloatParam}}
+\index{msg\_\-addFloatParam@{msg\_\-addFloatParam}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-addFloatParam}]{\setlength{\rightskip}{0pt plus 5cm}msg\_\-addFloatParam (vocMsg\_\-t $\ast$ {\em msg}, \/ double {\em dval})}}
+\label{vocMsg_8c_eae320530430c840411cb1c401b88033}
+
+
+Add a float parameter to an outgoing CALL message.
+
+MSG\_\-ADDFLOATPARAM -- Add a float parameter to an outgoing CALL message. We simply append to an existing message.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]outgoing message \item[{\em dval}]double value \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocMsg_8c_5fb36fa1a1b0bf447771272393e77df2}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-addIntParam@{msg\_\-addIntParam}}
+\index{msg\_\-addIntParam@{msg\_\-addIntParam}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-addIntParam}]{\setlength{\rightskip}{0pt plus 5cm}msg\_\-addIntParam (vocMsg\_\-t $\ast$ {\em msg}, \/ int {\em ival})}}
+\label{vocMsg_8c_5fb36fa1a1b0bf447771272393e77df2}
+
+
+Add a int parameter to an outgoing CALL message.
+
+MSG\_\-ADDINTPARAM -- Add a int parameter to an outgoing CALL message. We simply append to an existing message.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]outgoing message \item[{\em ival}]integer value \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocMsg_8c_cf6e8745c00f7d832dcfc275cf43fcf5}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-addIntResult@{msg\_\-addIntResult}}
+\index{msg\_\-addIntResult@{msg\_\-addIntResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-addIntResult}]{\setlength{\rightskip}{0pt plus 5cm}msg\_\-addIntResult (vocMsg\_\-t $\ast$ {\em msg}, \/ int {\em ival})}}
+\label{vocMsg_8c_cf6e8745c00f7d832dcfc275cf43fcf5}
+
+
+Add a integer value to a RESULT string.
+
+MSG\_\-ADDINTRESULT -- Add an integer value to a RESULT string.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]result string \item[{\em ival}]integer value \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocMsg_8c_4f880a3c986d13c65b7a7d5c49c79707}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-addStringParam@{msg\_\-addStringParam}}
+\index{msg\_\-addStringParam@{msg\_\-addStringParam}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-addStringParam}]{\setlength{\rightskip}{0pt plus 5cm}msg\_\-addStringParam (vocMsg\_\-t $\ast$ {\em msg}, \/ char $\ast$ {\em str})}}
+\label{vocMsg_8c_4f880a3c986d13c65b7a7d5c49c79707}
+
+
+Add a string parameter to an outgoing CALL message.
+
+MSG\_\-ADDSTRINGPARAM -- Add a string parameter to an outgoing CALL message. We simply append to an existing message.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]outgoing message \item[{\em str}]string value \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocMsg_8c_51fb5ca640761a4e517562dee9698fff}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-addStringResult@{msg\_\-addStringResult}}
+\index{msg\_\-addStringResult@{msg\_\-addStringResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-addStringResult}]{\setlength{\rightskip}{0pt plus 5cm}msg\_\-addStringResult (vocMsg\_\-t $\ast$ {\em msg}, \/ char $\ast$ {\em str})}}
+\label{vocMsg_8c_51fb5ca640761a4e517562dee9698fff}
+
+
+Add a string value to a RESULT string.
+
+MSG\_\-ADDSTRINGRESULT -- Add a string value to a RESULT string.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]result string \item[{\em str}]string value \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocMsg_8c_3bce32d52e40e26a9fb0bd57c48e6dbe}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getBuffer@{msg\_\-getBuffer}}
+\index{msg\_\-getBuffer@{msg\_\-getBuffer}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getBuffer}]{\setlength{\rightskip}{0pt plus 5cm}len msg\_\-getBuffer (vocRes\_\-t $\ast$ {\em res})}}
+\label{vocMsg_8c_3bce32d52e40e26a9fb0bd57c48e6dbe}
+
+
+Get result buffer.
+
+MSG\_\-GETBUFFER -- Get result buffer.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]result message \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]pointer to result buffer \end{Desc}
+\hypertarget{vocMsg_8c_b060cbd5cfe61864cc91b24080b5c2cd}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getFloatResult@{msg\_\-getFloatResult}}
+\index{msg\_\-getFloatResult@{msg\_\-getFloatResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getFloatResult}]{\setlength{\rightskip}{0pt plus 5cm}dval msg\_\-getFloatResult (vocRes\_\-t $\ast$ {\em res}, \/ int {\em index})}}
+\label{vocMsg_8c_b060cbd5cfe61864cc91b24080b5c2cd}
+
+
+Get a float result by index.
+
+MSG\_\-GETFLOATRESULT -- Get a float result by index.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]result message \item[{\em index}]result index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]float value \end{Desc}
+\hypertarget{vocMsg_8c_44250b9b039021f88ddf37fbe5361065}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getIntResult@{msg\_\-getIntResult}}
+\index{msg\_\-getIntResult@{msg\_\-getIntResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getIntResult}]{\setlength{\rightskip}{0pt plus 5cm}ival msg\_\-getIntResult (vocRes\_\-t $\ast$ {\em res}, \/ int {\em index})}}
+\label{vocMsg_8c_44250b9b039021f88ddf37fbe5361065}
+
+
+Get an integer result by index.
+
+MSG\_\-GETINTRESULT -- Get an integer result by index.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]result message \item[{\em index}]result index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]integer value \end{Desc}
+\hypertarget{vocMsg_8c_c6db5a0bf755a1637562ab4a314c5468}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getResult@{msg\_\-getResult}}
+\index{msg\_\-getResult@{msg\_\-getResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getResult}]{\setlength{\rightskip}{0pt plus 5cm}res msg\_\-getResult (int {\em fd})}}
+\label{vocMsg_8c_c6db5a0bf755a1637562ab4a314c5468}
+
+
+Read and parse a result message.
+
+MSG\_\-GETRESULT -- Read and parse a result message.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em fd}]message channel descriptor \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]result message object \end{Desc}
+\hypertarget{vocMsg_8c_97a642f02095c629a992c67a7cc09080}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getResultToFile@{msg\_\-getResultToFile}}
+\index{msg\_\-getResultToFile@{msg\_\-getResultToFile}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getResultToFile}]{\setlength{\rightskip}{0pt plus 5cm}res msg\_\-getResultToFile (int {\em fd}, \/ char $\ast$ {\em fname}, \/ int {\em overwrite})}}
+\label{vocMsg_8c_97a642f02095c629a992c67a7cc09080}
+
+
+Read and parse a result message, saving data to named file.
+
+MSG\_\-GETRESULTTOFILE -- Read and parse a result message, save bulk data to the named file.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em fd}]message channel descriptor \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]result message object \end{Desc}
+\hypertarget{vocMsg_8c_71e1c7c95771d4e6ba986bcf6099d746}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-getStringResult@{msg\_\-getStringResult}}
+\index{msg\_\-getStringResult@{msg\_\-getStringResult}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-getStringResult}]{\setlength{\rightskip}{0pt plus 5cm}str msg\_\-getStringResult (vocRes\_\-t $\ast$ {\em res}, \/ int {\em index})}}
+\label{vocMsg_8c_71e1c7c95771d4e6ba986bcf6099d746}
+
+
+Get a string result by index.
+
+MSG\_\-GETSTRINGRESULT -- Get a string result by index.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]result message \item[{\em index}]result index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string value \end{Desc}
+\hypertarget{vocMsg_8c_a36229a2ccfb8e7a446bcf8fd66e56e5}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-newCallMsg@{msg\_\-newCallMsg}}
+\index{msg\_\-newCallMsg@{msg\_\-newCallMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-newCallMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-newCallMsg (ObjectID {\em objid}, \/ char $\ast$ {\em method}, \/ int {\em nparams})}}
+\label{vocMsg_8c_a36229a2ccfb8e7a446bcf8fd66e56e5}
+
+
+Create a CALL message structure initialized w/ parameters.
+
+MSG\_\-NEWCALLMSG -- Create a CALL message structure and initialize with the requested parameters. Structures are allocated dynamically, the caller is responsible for freeing the struct when finished.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em objid}]object id \item[{\em method}]name of method to call \item[{\em nparams}]number of parameters in message \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_77b1550e78504576d33c763da2e0e10e}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-newMsg@{msg\_\-newMsg}}
+\index{msg\_\-newMsg@{msg\_\-newMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-newMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-newMsg (char $\ast$ {\em msgclass}, \/ char $\ast$ {\em str})}}
+\label{vocMsg_8c_77b1550e78504576d33c763da2e0e10e}
+
+
+Create a MSG message initialized w/ parameters.
+
+MSG\_\-NEWMSG -- Create a new MSG message context and initialize with the requested parameters. The caller is responsible for freeing the struct when complete.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msgclass}]message class \item[{\em str}]message string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_517cadcc8f9fcdf4133f7cacf629ca4a}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-newResultMsg@{msg\_\-newResultMsg}}
+\index{msg\_\-newResultMsg@{msg\_\-newResultMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-newResultMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-newResultMsg (int {\em status}, \/ int {\em type}, \/ int {\em nitems})}}
+\label{vocMsg_8c_517cadcc8f9fcdf4133f7cacf629ca4a}
+
+
+Create a RESULT message structure initialized w/ parameters.
+
+MSG\_\-NEWRESULTMSG -- Create a new RESULT message context and initialize with the requested parameters. The caller is responsible for freeing the struct when complete.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em status}]result status \item[{\em type}]result type \item[{\em nitems}]number of items in message \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_3cc1a4a8e24b8322ac8a2b0f6e151134}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-noackMsg@{msg\_\-noackMsg}}
+\index{msg\_\-noackMsg@{msg\_\-noackMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-noackMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-noackMsg (void)}}
+\label{vocMsg_8c_3cc1a4a8e24b8322ac8a2b0f6e151134}
+
+
+Create a NOACK message.
+
+MSG\_\-NOACKMSG -- Create an NO-ACK message to the VOClient Server.
+
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_3183a0065ee97668b3a96dff25b919c4}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-quitMsg@{msg\_\-quitMsg}}
+\index{msg\_\-quitMsg@{msg\_\-quitMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-quitMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-quitMsg (void)}}
+\label{vocMsg_8c_3183a0065ee97668b3a96dff25b919c4}
+
+
+Create a QUIT message.
+
+MSG\_\-QUITMSG -- Create a QUIT message to the VOClient Server to tell it we're leaving but that it should keep running
+
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_8e2098c2d797fc23b8edf7886e65334c}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-resultLength@{msg\_\-resultLength}}
+\index{msg\_\-resultLength@{msg\_\-resultLength}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-resultLength}]{\setlength{\rightskip}{0pt plus 5cm}len msg\_\-resultLength (vocRes\_\-t $\ast$ {\em res})}}
+\label{vocMsg_8c_8e2098c2d797fc23b8edf7886e65334c}
+
+
+Get result length.
+
+MSG\_\-RESULTLENGTH -- Get result length.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]result string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]result length \end{Desc}
+\hypertarget{vocMsg_8c_0d9804ce039ea71007d8d500fbf49809}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-resultStatus@{msg\_\-resultStatus}}
+\index{msg\_\-resultStatus@{msg\_\-resultStatus}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-resultStatus}]{\setlength{\rightskip}{0pt plus 5cm}status msg\_\-resultStatus (vocRes\_\-t $\ast$ {\em res})}}
+\label{vocMsg_8c_0d9804ce039ea71007d8d500fbf49809}
+
+
+Get result status.
+
+MSG\_\-RESULTSTATUS -- Get result status.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]result string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]result status \end{Desc}
+\hypertarget{vocMsg_8c_ec73a99da1108fa9da1a2ff97d235a36}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-resultType@{msg\_\-resultType}}
+\index{msg\_\-resultType@{msg\_\-resultType}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-resultType}]{\setlength{\rightskip}{0pt plus 5cm}type msg\_\-resultType (vocRes\_\-t $\ast$ {\em res})}}
+\label{vocMsg_8c_ec73a99da1108fa9da1a2ff97d235a36}
+
+
+Get result type.
+
+MSG\_\-RESULTTYPE -- Get result type.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em msg}]result string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]result type \end{Desc}
+\hypertarget{vocMsg_8c_35bfd91fb870b9e42398c2c77099a486}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-sendMsg@{msg\_\-sendMsg}}
+\index{msg\_\-sendMsg@{msg\_\-sendMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-sendMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-sendMsg (int {\em fd}, \/ vocMsg\_\-t $\ast$ {\em msg})}}
+\label{vocMsg_8c_35bfd91fb870b9e42398c2c77099a486}
+
+
+Send the message to the VOClient server.
+
+MSG\_\-SENDMSG -- Send the message to the VOClient Server and wait for the ACK. The simple form of the message returns the result handle, for the raw message we only send to allow to a bullk return object.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em fd}]message channel descriptor \item[{\em str}]message string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_1aec8e19abd5f1741434bc0e70823965}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-sendRawMsg@{msg\_\-sendRawMsg}}
+\index{msg\_\-sendRawMsg@{msg\_\-sendRawMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-sendRawMsg}]{\setlength{\rightskip}{0pt plus 5cm}len msg\_\-sendRawMsg (int {\em fd}, \/ vocMsg\_\-t $\ast$ {\em msg})}}
+\label{vocMsg_8c_1aec8e19abd5f1741434bc0e70823965}
+
+
+Send the message to the VOClient server.
+
+MSG\_\-SENDRAWMSG -- Send the message to the VOClient Server.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em fd}]message channel descriptor \item[{\em str}]message string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
+\hypertarget{vocMsg_8c_e894a9cdf87bb390cddd090447d2d644}{
+\index{vocMsg.c@{vocMsg.c}!msg\_\-shutdownMsg@{msg\_\-shutdownMsg}}
+\index{msg\_\-shutdownMsg@{msg\_\-shutdownMsg}!vocMsg.c@{vocMsg.c}}
+\subsubsection[{msg\_\-shutdownMsg}]{\setlength{\rightskip}{0pt plus 5cm}msg msg\_\-shutdownMsg (void)}}
+\label{vocMsg_8c_e894a9cdf87bb390cddd090447d2d644}
+
+
+Create a END message to shutdown the server.
+
+MSG\_\-SHUTDOWNMSG -- Create an END message to the VOClient Server to shut it down.
+
+\begin{Desc}
+\item[Returns:]a new message object \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocRegistry_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocRegistry_8c.tex
new file mode 100644
index 00000000..127e12c5
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocRegistry_8c.tex
@@ -0,0 +1,413 @@
+\hypertarget{vocRegistry_8c}{
+\section{vocRegistry.c File Reference}
+\label{vocRegistry_8c}\index{vocRegistry.c@{vocRegistry.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+RegResult \hyperlink{vocRegistry_8c_555aa2dc7ece17033e9399ed00ff4b78}{voc\_\-regSearch} (char $\ast$term1, char $\ast$term2, int orValues)
+\begin{CompactList}\small\item\em High-level Registry query interface. \item\end{CompactList}\item
+RegResult \hyperlink{vocRegistry_8c_25e61b2c021394192ca8e74e96f45b28}{voc\_\-regSearchByService} (char $\ast$svc, char $\ast$term, int orValues)
+\begin{CompactList}\small\item\em Search Registry using a search term and service constraint. \item\end{CompactList}\item
+RegQuery \hyperlink{vocRegistry_8c_cfd7f451139af07ff58c173d793b3962}{voc\_\-regQuery} (char $\ast$term, int orValues)
+\begin{CompactList}\small\item\em Create a RegistryQuery object. \item\end{CompactList}\item
+void \hyperlink{vocRegistry_8c_eb0ee2e29939419af10cfbebc82e2110}{voc\_\-regAddSearchTerm} (RegQuery query, char $\ast$term, int orValue)
+\begin{CompactList}\small\item\em Add a search term to the specified query. \item\end{CompactList}\item
+void \hyperlink{vocRegistry_8c_9b9e8c445ffb38711ef4ee345fa0f68d}{voc\_\-regRemoveSearchTerm} (RegQuery query, char $\ast$term)
+\begin{CompactList}\small\item\em Remove a search term to the specified query. \item\end{CompactList}\item
+void \hyperlink{vocRegistry_8c_8d63761f770b4327d44cd1c618ce186f}{voc\_\-regConstWaveband} (RegQuery query, char $\ast$waveband)
+\begin{CompactList}\small\item\em Constrain the Registry search by waveband. \item\end{CompactList}\item
+\hypertarget{vocRegistry_8c_ae38f1ab3f9a3682971fd8edf339b20c}{
+void \textbf{voc\_\-regConstSvcType} (RegQuery query, char $\ast$svcType)}
+\label{vocRegistry_8c_ae38f1ab3f9a3682971fd8edf339b20c}
+
+\item
+void \hyperlink{vocRegistry_8c_494458ce877c4fa8442ff398873195b4}{voc\_\-regDALOnly} (RegQuery query, int value)
+\begin{CompactList}\small\item\em Set the \char`\"{}DAL Only\char`\"{} flag. \item\end{CompactList}\item
+void \hyperlink{vocRegistry_8c_800645e5f4dc73bcf99730db9cb4d439}{voc\_\-regSortRes} (RegQuery query, int value)
+\begin{CompactList}\small\item\em Set the resource \char`\"{}sort\char`\"{} flag. \item\end{CompactList}\item
+int \hyperlink{vocRegistry_8c_4780f7c8975abf074f3b41e27c31a7e3}{voc\_\-regGetSTCount} (RegQuery query)
+\begin{CompactList}\small\item\em Get the number of search terms in the current query. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocRegistry_8c_6b8ad34f22f1c22e34b56dc0ff635355}{voc\_\-regGetQueryString} (RegQuery query)
+\begin{CompactList}\small\item\em Get the current query as an http GET URL. \item\end{CompactList}\item
+RegResult \hyperlink{vocRegistry_8c_cea0f3cbac1f593ad5899a5252803689}{voc\_\-regExecute} (RegQuery query)
+\begin{CompactList}\small\item\em Execute the specified query. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocRegistry_8c_ac9bb69c156fbdae90cb33f396336995}{voc\_\-regExecuteRaw} (RegQuery query)
+\begin{CompactList}\small\item\em Execute the specified query and return raw result string. \item\end{CompactList}\item
+int \hyperlink{vocRegistry_8c_b6ce658f8bb8803ad73c5c15ccdf7dd4}{voc\_\-resGetCount} (RegResult res)
+\begin{CompactList}\small\item\em Return a count of the number of results records. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocRegistry_8c_c5376fa75dc000e0b820fd4e29e5cfaa}{voc\_\-resGetStr} (RegResult res, char $\ast$attribute, int index)
+\begin{CompactList}\small\item\em Get a string-valued attribute from the result resource record. \item\end{CompactList}\item
+double \hyperlink{vocRegistry_8c_3dceef82335c216785372fdd9789cc0c}{voc\_\-resGetFloat} (RegResult res, char $\ast$attribute, int index)
+\begin{CompactList}\small\item\em Get a real-valued attribute from the result resource record. \item\end{CompactList}\item
+int \hyperlink{vocRegistry_8c_8b2e5aa46ad515427da01b9314434cef}{voc\_\-resGetInt} (RegResult res, char $\ast$attribute, int index)
+\begin{CompactList}\small\item\em Get an int-valued attribute from the result resource record. \item\end{CompactList}\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocRegistry_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOC\_\-REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.
+
+RegistryQuery ----------------------
+
+High-Level Query:
+
+res = voc\_\-regSearch (sql, keywords, orValues) res =voc\_\-regSearchByService (svc, term, orValues)
+
+Programmatic Query:
+
+query = voc\_\-regQuery (term, orValues) // OR keyword list?
+
+voc\_\-regConstSvcType (query, svcType) // search constraints voc\_\-regConstWaveband (query, waveband) voc\_\-regDALOnly (query, value) voc\_\-regSortRes (query, value)
+
+voc\_\-regAddSearchTerm (query, term, orValue) // OR term w/ previous voc\_\-regRemoveSearchTerm (query, term) // remove search term count = voc\_\-regGetSTCount (query)
+
+str = voc\_\-regGetQueryString (query) // GET form of query
+
+res = voc\_\-regExecute (query) // return result obj str = voc\_\-regExecuteRaw (query) // return raw XML
+
+RegistryQueryResult
+
+count = voc\_\-resGetCount (res)
+
+str = voc\_\-resGetStr (res, attribute, index) dval = voc\_\-resGetFloat (res, attribute, index) ival = voc\_\-resGetInt (res, attribute, index)
+
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]July 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocRegistry_8c_eb0ee2e29939419af10cfbebc82e2110}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regAddSearchTerm@{voc\_\-regAddSearchTerm}}
+\index{voc\_\-regAddSearchTerm@{voc\_\-regAddSearchTerm}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regAddSearchTerm}]{\setlength{\rightskip}{0pt plus 5cm}void voc\_\-regAddSearchTerm (RegQuery {\em query}, \/ char $\ast$ {\em term}, \/ int {\em orValue})}}
+\label{vocRegistry_8c_eb0ee2e29939419af10cfbebc82e2110}
+
+
+Add a search term to the specified query.
+
+VOC\_\-REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list) to the specified query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_8d63761f770b4327d44cd1c618ce186f}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regConstWaveband@{voc\_\-regConstWaveband}}
+\index{voc\_\-regConstWaveband@{voc\_\-regConstWaveband}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regConstWaveband}]{\setlength{\rightskip}{0pt plus 5cm}void voc\_\-regConstWaveband (RegQuery {\em query}, \/ char $\ast$ {\em waveband})}}
+\label{vocRegistry_8c_8d63761f770b4327d44cd1c618ce186f}
+
+
+Constrain the Registry search by waveband.
+
+Constrain the Registry search by service type.
+
+VOC\_\-REGCONSTWAVEBAND -- Constrain the Registry search by waveband.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em waveband}]waveband string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing\end{Desc}
+VOC\_\-REGCONSTSVCTYPE -- Constraing the Registry search by service type.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em svcType}]service type string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_494458ce877c4fa8442ff398873195b4}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regDALOnly@{voc\_\-regDALOnly}}
+\index{voc\_\-regDALOnly@{voc\_\-regDALOnly}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regDALOnly}]{\setlength{\rightskip}{0pt plus 5cm}void voc\_\-regDALOnly (RegQuery {\em query}, \/ int {\em value})}}
+\label{vocRegistry_8c_494458ce877c4fa8442ff398873195b4}
+
+
+Set the \char`\"{}DAL Only\char`\"{} flag.
+
+VOC\_\-REGDALONLY -- Set the \char`\"{}DAL Only\char`\"{} flag. If set, we expand a resource search to break out the individual DAL services into separate results.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em value}]value of the DAL-only flag \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_cea0f3cbac1f593ad5899a5252803689}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regExecute@{voc\_\-regExecute}}
+\index{voc\_\-regExecute@{voc\_\-regExecute}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regExecute}]{\setlength{\rightskip}{0pt plus 5cm}RegResult voc\_\-regExecute (RegQuery {\em query})}}
+\label{vocRegistry_8c_cea0f3cbac1f593ad5899a5252803689}
+
+
+Execute the specified query.
+
+VOC\_\-REGEXECUTE -- Execute the specified query, returning a result object code or NULL.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]registry result object handle \end{Desc}
+\hypertarget{vocRegistry_8c_ac9bb69c156fbdae90cb33f396336995}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regExecuteRaw@{voc\_\-regExecuteRaw}}
+\index{voc\_\-regExecuteRaw@{voc\_\-regExecuteRaw}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regExecuteRaw}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ voc\_\-regExecuteRaw (RegQuery {\em query})}}
+\label{vocRegistry_8c_ac9bb69c156fbdae90cb33f396336995}
+
+
+Execute the specified query and return raw result string.
+
+VOC\_\-REGEXECUTERAW -- Execute the specified query and return the raw resulting XML string.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]raw data return from data \end{Desc}
+\hypertarget{vocRegistry_8c_6b8ad34f22f1c22e34b56dc0ff635355}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regGetQueryString@{voc\_\-regGetQueryString}}
+\index{voc\_\-regGetQueryString@{voc\_\-regGetQueryString}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regGetQueryString}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ voc\_\-regGetQueryString (RegQuery {\em query})}}
+\label{vocRegistry_8c_6b8ad34f22f1c22e34b56dc0ff635355}
+
+
+Get the current query as an http GET URL.
+
+VOC\_\-REGGETQUERYSTRING -- Get the current query as an http GET URL.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]query URL \end{Desc}
+\hypertarget{vocRegistry_8c_4780f7c8975abf074f3b41e27c31a7e3}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regGetSTCount@{voc\_\-regGetSTCount}}
+\index{voc\_\-regGetSTCount@{voc\_\-regGetSTCount}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regGetSTCount}]{\setlength{\rightskip}{0pt plus 5cm}int voc\_\-regGetSTCount (RegQuery {\em query})}}
+\label{vocRegistry_8c_4780f7c8975abf074f3b41e27c31a7e3}
+
+
+Get the number of search terms in the current query.
+
+VOC\_\-REGGETSTCOUNT -- Get the number of search terms in the current query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_cfd7f451139af07ff58c173d793b3962}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regQuery@{voc\_\-regQuery}}
+\index{voc\_\-regQuery@{voc\_\-regQuery}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regQuery}]{\setlength{\rightskip}{0pt plus 5cm}RegQuery voc\_\-regQuery (char $\ast$ {\em term}, \/ int {\em orValues})}}
+\label{vocRegistry_8c_cfd7f451139af07ff58c173d793b3962}
+
+
+Create a RegistryQuery object.
+
+VOC\_\-REGQUERY -- Create a RegistryQuery object.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to Registry Query object \end{Desc}
+\hypertarget{vocRegistry_8c_9b9e8c445ffb38711ef4ee345fa0f68d}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regRemoveSearchTerm@{voc\_\-regRemoveSearchTerm}}
+\index{voc\_\-regRemoveSearchTerm@{voc\_\-regRemoveSearchTerm}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regRemoveSearchTerm}]{\setlength{\rightskip}{0pt plus 5cm}void voc\_\-regRemoveSearchTerm (RegQuery {\em query}, \/ char $\ast$ {\em term})}}
+\label{vocRegistry_8c_9b9e8c445ffb38711ef4ee345fa0f68d}
+
+
+Remove a search term to the specified query.
+
+VOC\_\-REMOVESEARCHTERM -- Remove the search term from the query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em term}]keyword search term \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_555aa2dc7ece17033e9399ed00ff4b78}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regSearch@{voc\_\-regSearch}}
+\index{voc\_\-regSearch@{voc\_\-regSearch}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regSearch}]{\setlength{\rightskip}{0pt plus 5cm}RegResult voc\_\-regSearch (char $\ast$ {\em term1}, \/ char $\ast$ {\em term2}, \/ int {\em orValues})}}
+\label{vocRegistry_8c_555aa2dc7ece17033e9399ed00ff4b78}
+
+
+High-level Registry query interface.
+
+VOC\_\-REGSEARCH -- High-level procedure to form a query and execute it immediately. We allow that 'term1' may be a complex SQL WHERE predicate, and that 'term2' (or vice versa) is a search-keyword list. The 'orValues' applies to the keyword list (if present), otherwise it applies to the two search term elements. The default action if two terms are specified is to logically AND them.
+
+The thinking here is that one might want SIAP services for Quasars. This is easily expressed in an SQL form to get SIAP resources, however a Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a easy way to OR the keywords but AND that result with the SQL predicate.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em term1}]first search term \item[{\em term2}]second search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to Registry result object \end{Desc}
+\hypertarget{vocRegistry_8c_25e61b2c021394192ca8e74e96f45b28}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regSearchByService@{voc\_\-regSearchByService}}
+\index{voc\_\-regSearchByService@{voc\_\-regSearchByService}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regSearchByService}]{\setlength{\rightskip}{0pt plus 5cm}RegResult voc\_\-regSearchByService (char $\ast$ {\em svc}, \/ char $\ast$ {\em term}, \/ int {\em orValues})}}
+\label{vocRegistry_8c_25e61b2c021394192ca8e74e96f45b28}
+
+
+Search Registry using a search term and service constraint.
+
+VOC\_\-REGSEARCHBYSERVICE -- Search the Registry using a search term and constrain by service type.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em svc}]service type constraint \item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to Registry result object \end{Desc}
+\hypertarget{vocRegistry_8c_800645e5f4dc73bcf99730db9cb4d439}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-regSortRes@{voc\_\-regSortRes}}
+\index{voc\_\-regSortRes@{voc\_\-regSortRes}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-regSortRes}]{\setlength{\rightskip}{0pt plus 5cm}void voc\_\-regSortRes (RegQuery {\em query}, \/ int {\em value})}}
+\label{vocRegistry_8c_800645e5f4dc73bcf99730db9cb4d439}
+
+
+Set the resource \char`\"{}sort\char`\"{} flag.
+
+VOC\_\-REGSORTRES -- Set the resource \char`\"{}sort\char`\"{} flag. If enabled, we try to order the resource table by some logical means.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em value}]value of the sort flag \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry_8c_b6ce658f8bb8803ad73c5c15ccdf7dd4}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-resGetCount@{voc\_\-resGetCount}}
+\index{voc\_\-resGetCount@{voc\_\-resGetCount}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-resGetCount}]{\setlength{\rightskip}{0pt plus 5cm}int voc\_\-resGetCount (RegResult {\em res})}}
+\label{vocRegistry_8c_b6ce658f8bb8803ad73c5c15ccdf7dd4}
+
+
+Return a count of the number of results records.
+
+VOC\_\-RESGETCOUNT -- Return a count of the number of results records.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]number of result records \end{Desc}
+\hypertarget{vocRegistry_8c_3dceef82335c216785372fdd9789cc0c}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-resGetFloat@{voc\_\-resGetFloat}}
+\index{voc\_\-resGetFloat@{voc\_\-resGetFloat}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-resGetFloat}]{\setlength{\rightskip}{0pt plus 5cm}double voc\_\-resGetFloat (RegResult {\em res}, \/ char $\ast$ {\em attribute}, \/ int {\em index})}}
+\label{vocRegistry_8c_3dceef82335c216785372fdd9789cc0c}
+
+
+Get a real-valued attribute from the result resource record.
+
+VOC\_\-GETFLOAT -- Get a real-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+MaxSR maximum search radius
+
+Attribute string are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string-valued attribute \end{Desc}
+\hypertarget{vocRegistry_8c_8b2e5aa46ad515427da01b9314434cef}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-resGetInt@{voc\_\-resGetInt}}
+\index{voc\_\-resGetInt@{voc\_\-resGetInt}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-resGetInt}]{\setlength{\rightskip}{0pt plus 5cm}int voc\_\-resGetInt (RegResult {\em res}, \/ char $\ast$ {\em attribute}, \/ int {\em index})}}
+\label{vocRegistry_8c_8b2e5aa46ad515427da01b9314434cef}
+
+
+Get an int-valued attribute from the result resource record.
+
+VOC\_\-GETINT -- Get a integer-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+MaxRecords maximum records returned by the service
+
+Attribute string are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string-valued attribute \end{Desc}
+\hypertarget{vocRegistry_8c_c5376fa75dc000e0b820fd4e29e5cfaa}{
+\index{vocRegistry.c@{vocRegistry.c}!voc\_\-resGetStr@{voc\_\-resGetStr}}
+\index{voc\_\-resGetStr@{voc\_\-resGetStr}!vocRegistry.c@{vocRegistry.c}}
+\subsubsection[{voc\_\-resGetStr}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ voc\_\-resGetStr (RegResult {\em res}, \/ char $\ast$ {\em attribute}, \/ int {\em index})}}
+\label{vocRegistry_8c_c5376fa75dc000e0b820fd4e29e5cfaa}
+
+
+Get a string-valued attribute from the result resource record.
+
+VOC\_\-GETSTR -- Get a string-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+Title Resource title (long version) ShortName Short name of Resource ServiceURL Service URL (if appropriate) ReferenceURL URL to reference about Resource Description Text description of resource Identifier Standard ivo identifier of resource ServiceType Service Type (Cone, Siap, etc) Type Resource Type (catalog, survey, etc) CoverageSpatial Spatial coverage (STC) CoverageTemporal Temporal coverage of data
+
+CoverageSpectral Spectral coverage (csv list of bandpasses) ContentLevel Content level (research, EPO, etc -- csv list)
+
+Attribute strings are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string-valued attribute \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocRegistry__f77_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocRegistry__f77_8c.tex
new file mode 100644
index 00000000..87b9eea7
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocRegistry__f77_8c.tex
@@ -0,0 +1,204 @@
+\hypertarget{vocRegistry__f77_8c}{
+\section{vocRegistry\_\-f77.c File Reference}
+\label{vocRegistry__f77_8c}\index{vocRegistry\_\-f77.c@{vocRegistry\_\-f77.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry__f77_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocRegistry__f77_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocRegistry__f77_8c_d0a47e0e4c4cc21f6bce63946951f591}{
+\#define \textbf{VF\_\-REGSEARCH}~vfregsearch\_\-}
+\label{vocRegistry__f77_8c_d0a47e0e4c4cc21f6bce63946951f591}
+
+\item
+\hypertarget{vocRegistry__f77_8c_c429ce54f92b75c827a32a3c8a1fb477}{
+\#define \textbf{VF\_\-REGSEARCHBYSVC}~vfregsearchbysvc\_\-}
+\label{vocRegistry__f77_8c_c429ce54f92b75c827a32a3c8a1fb477}
+
+\item
+\hypertarget{vocRegistry__f77_8c_310b266f3ee28ac7f8bc51350066c4be}{
+\#define \textbf{VF\_\-REGQUERY}~vfregquery\_\-}
+\label{vocRegistry__f77_8c_310b266f3ee28ac7f8bc51350066c4be}
+
+\item
+\hypertarget{vocRegistry__f77_8c_85a983dc952d380a1aeec0444c77aeb1}{
+\#define \textbf{VF\_\-REGADDSEARCHTERM}~vfregaddsearchterm\_\-}
+\label{vocRegistry__f77_8c_85a983dc952d380a1aeec0444c77aeb1}
+
+\item
+\hypertarget{vocRegistry__f77_8c_5eb9bf70285c8326d70232df392b7c7a}{
+\#define \textbf{VF\_\-REGREMOVESEARCHTERM}~vfregremovesearchterm\_\-}
+\label{vocRegistry__f77_8c_5eb9bf70285c8326d70232df392b7c7a}
+
+\item
+\hypertarget{vocRegistry__f77_8c_73509c36262920ed66b9be3e8e4fad53}{
+\#define \textbf{VF\_\-REGGETSTCOUNT}~vfreggetstcount\_\-}
+\label{vocRegistry__f77_8c_73509c36262920ed66b9be3e8e4fad53}
+
+\item
+\hypertarget{vocRegistry__f77_8c_c5721d23ad83e520b6aed1069a18fe60}{
+\#define \textbf{VF\_\-REGGETQUERYSTRING}~vfreggetquerystring\_\-}
+\label{vocRegistry__f77_8c_c5721d23ad83e520b6aed1069a18fe60}
+
+\item
+\hypertarget{vocRegistry__f77_8c_954e4d285c3a090ef6861e08dd219d31}{
+\#define \textbf{VF\_\-REGEXECUTE}~vfregexecute\_\-}
+\label{vocRegistry__f77_8c_954e4d285c3a090ef6861e08dd219d31}
+
+\item
+\hypertarget{vocRegistry__f77_8c_2e2235f2d0ee4619f5b1d9edb8c831d2}{
+\#define \textbf{VF\_\-REGEXECUTERAW}~vfregexecuteraw\_\-}
+\label{vocRegistry__f77_8c_2e2235f2d0ee4619f5b1d9edb8c831d2}
+
+\item
+\hypertarget{vocRegistry__f77_8c_7fd1f50356779d7d51b2206e51992cb8}{
+\#define \textbf{VF\_\-RESGETCOUNT}~vfresgetcount\_\-}
+\label{vocRegistry__f77_8c_7fd1f50356779d7d51b2206e51992cb8}
+
+\item
+\hypertarget{vocRegistry__f77_8c_8dfa587e446e2f16221d88a8ea9198eb}{
+\#define \textbf{VF\_\-RESGETSTR}~vfresgetstr\_\-}
+\label{vocRegistry__f77_8c_8dfa587e446e2f16221d88a8ea9198eb}
+
+\item
+\hypertarget{vocRegistry__f77_8c_ba23a3c2742b829a8c36425ce28e7652}{
+\#define \textbf{VF\_\-RESGETFLOAT}~vfresgetfloat\_\-}
+\label{vocRegistry__f77_8c_ba23a3c2742b829a8c36425ce28e7652}
+
+\item
+\hypertarget{vocRegistry__f77_8c_9e65ffdee69fa482c63e519397b9a3ff}{
+\#define \textbf{VF\_\-RESGETINT}~vfresgetint\_\-}
+\label{vocRegistry__f77_8c_9e65ffdee69fa482c63e519397b9a3ff}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry__f77_8c_a04b0cb13135b0dc9fea171d098057f0}{
+void \textbf{VF\_\-REGSEARCH} (char $\ast$term1, char $\ast$term2, int $\ast$orValues, RegResult $\ast$result, int $\ast$ier, int len1, int len2)}
+\label{vocRegistry__f77_8c_a04b0cb13135b0dc9fea171d098057f0}
+
+\item
+\hypertarget{vocRegistry__f77_8c_9bda98a20940751d2c740a9d3e9acdb5}{
+void \textbf{VF\_\-REGSEARCHBYSVC} (char $\ast$svc, char $\ast$term, int $\ast$orValues, RegResult $\ast$result, int $\ast$ier, int slen, int tlen)}
+\label{vocRegistry__f77_8c_9bda98a20940751d2c740a9d3e9acdb5}
+
+\item
+\hypertarget{vocRegistry__f77_8c_678164a0d810653aea4de02a38e5bc23}{
+void \textbf{VF\_\-REGQUERY} (char $\ast$term, int $\ast$orValues, RegQuery $\ast$query, int $\ast$ier, int len)}
+\label{vocRegistry__f77_8c_678164a0d810653aea4de02a38e5bc23}
+
+\item
+\hypertarget{vocRegistry__f77_8c_42bfd9d85a6579e273a9e0c2759e5ee8}{
+void \textbf{VF\_\-REGADDSEARCHTERM} (RegQuery $\ast$query, char $\ast$term, int $\ast$orValue, int tlen)}
+\label{vocRegistry__f77_8c_42bfd9d85a6579e273a9e0c2759e5ee8}
+
+\item
+\hypertarget{vocRegistry__f77_8c_c3a0baf1b1a0821f5db7c5ff2e058d8c}{
+void \textbf{VF\_\-REGREMOVESEARCHTERM} (RegQuery $\ast$query, char $\ast$term, int tlen)}
+\label{vocRegistry__f77_8c_c3a0baf1b1a0821f5db7c5ff2e058d8c}
+
+\item
+\hypertarget{vocRegistry__f77_8c_4a51852deb3bd9b1915612fa9b7c5b56}{
+void \textbf{VF\_\-REGGETSTCOUNT} (RegQuery $\ast$query, int $\ast$count)}
+\label{vocRegistry__f77_8c_4a51852deb3bd9b1915612fa9b7c5b56}
+
+\item
+\hypertarget{vocRegistry__f77_8c_ae0fbe0c04ee035ed0db674248829eb9}{
+void \textbf{VF\_\-REGGETQUERYSTRING} (RegQuery $\ast$query, char $\ast$qstr, int $\ast$len, int qlen)}
+\label{vocRegistry__f77_8c_ae0fbe0c04ee035ed0db674248829eb9}
+
+\item
+\hypertarget{vocRegistry__f77_8c_0a1264fca96776b0d0997df16398d8dc}{
+void \textbf{VF\_\-REGEXECUTE} (RegQuery $\ast$query, RegResult $\ast$result)}
+\label{vocRegistry__f77_8c_0a1264fca96776b0d0997df16398d8dc}
+
+\item
+\hypertarget{vocRegistry__f77_8c_a732f70bd54c1f4e42c5ef821fa801ef}{
+void \textbf{VF\_\-REGEXECUTERAW} (RegQuery $\ast$query, char $\ast$raw, int $\ast$len, int rlen)}
+\label{vocRegistry__f77_8c_a732f70bd54c1f4e42c5ef821fa801ef}
+
+\item
+\hypertarget{vocRegistry__f77_8c_9aedd288a3284600ce857081c7ab53ae}{
+void \textbf{VF\_\-RESGETCOUNT} (RegResult $\ast$res, int $\ast$count)}
+\label{vocRegistry__f77_8c_9aedd288a3284600ce857081c7ab53ae}
+
+\item
+\hypertarget{vocRegistry__f77_8c_d9966b970e4a150c167b427e60be5906}{
+void \textbf{VF\_\-RESGETSTR} (RegResult $\ast$res, char $\ast$attr, int $\ast$index, char $\ast$str, int $\ast$len, int alen, int slen)}
+\label{vocRegistry__f77_8c_d9966b970e4a150c167b427e60be5906}
+
+\item
+\hypertarget{vocRegistry__f77_8c_96c7d92da283c1fec69e27282fa849ad}{
+void \textbf{VF\_\-RESGETFLOAT} (RegResult $\ast$res, char $\ast$attr, int $\ast$index, double $\ast$dval, int alen)}
+\label{vocRegistry__f77_8c_96c7d92da283c1fec69e27282fa849ad}
+
+\item
+\hypertarget{vocRegistry__f77_8c_8dd109c837ae96932224eb73e4a63cac}{
+void \textbf{VF\_\-RESGETINT} (RegResult $\ast$res, char $\ast$attr, int $\ast$index, int $\ast$ival, int alen)}
+\label{vocRegistry__f77_8c_8dd109c837ae96932224eb73e4a63cac}
+
+\item
+\hypertarget{vocRegistry__f77_8c_78086d706029e0ca297fc1be4c83cf33}{
+char $\ast$ \textbf{sstrip} (char $\ast$instr, int len)}
+\label{vocRegistry__f77_8c_78086d706029e0ca297fc1be4c83cf33}
+
+\item
+\hypertarget{vocRegistry__f77_8c_a71b9804381d56348caee3fe8b7d39ab}{
+void \textbf{spad} (char $\ast$outstr, int len)}
+\label{vocRegistry__f77_8c_a71b9804381d56348caee3fe8b7d39ab}
+
+\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry__f77_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocRegistry__f77_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOC\_\-REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.
+
+RegistryQuery ----------------------
+
+High-Level Query:
+
+res = voc\_\-regSearch (term1, term2, orValues) res = voc\_\-regSearchBySvc (svc, term, orValues)
+
+Programmatic Query:
+
+query = voc\_\-regQuery (term, orValues) // OR keyword list?
+
+voc\_\-regAddSearchTerm (query, term, orValue) // OR term w/ previous voc\_\-regRemoveSearchTerm (query, term) // remove search term count = voc\_\-regGetSTCount (query)
+
+str = voc\_\-regGetQueryString (query) // GET form of query
+
+res = voc\_\-regExecute (query) // return result obj str = voc\_\-regExecuteRaw (query) // return raw XML
+
+RegistryQueryResult
+
+count = voc\_\-resGetCount (res)
+
+str = voc\_\-resGetStr (res, attribute, index) dval = voc\_\-resGetFloat (res, attribute, index) ival = voc\_\-resGetInt (res, attribute, index)
+
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]July 2006 \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocRegistry__spp_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocRegistry__spp_8c.tex
new file mode 100644
index 00000000..32356009
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocRegistry__spp_8c.tex
@@ -0,0 +1,463 @@
+\hypertarget{vocRegistry__spp_8c}{
+\section{vocRegistry\_\-spp.c File Reference}
+\label{vocRegistry__spp_8c}\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry__spp_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocRegistry__spp_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocRegistry__spp_8c_41f54a3456edd7d62ac7732471be86f6}{
+\#define \textbf{vx\_\-regsearch}~vxregh\_\-}
+\label{vocRegistry__spp_8c_41f54a3456edd7d62ac7732471be86f6}
+
+\item
+\hypertarget{vocRegistry__spp_8c_a10edb43aa47392f25b3c73dbb45cd8a}{
+\#define \textbf{vx\_\-regsearchbysvc}~vxregc\_\-}
+\label{vocRegistry__spp_8c_a10edb43aa47392f25b3c73dbb45cd8a}
+
+\item
+\hypertarget{vocRegistry__spp_8c_a0a1bf77af8a5b0afcd7f5df3233b3cb}{
+\#define \textbf{vx\_\-regquery}~vxregy\_\-}
+\label{vocRegistry__spp_8c_a0a1bf77af8a5b0afcd7f5df3233b3cb}
+
+\item
+\hypertarget{vocRegistry__spp_8c_cb6c8f0f129ada5b692199274de46c36}{
+\#define \textbf{vx\_\-raddsearchterm}~vxradm\_\-}
+\label{vocRegistry__spp_8c_cb6c8f0f129ada5b692199274de46c36}
+
+\item
+\hypertarget{vocRegistry__spp_8c_f5c63cb486f8c51527f3049dc25b9362}{
+\#define \textbf{vx\_\-rremovesearchterm}~vxrrem\_\-}
+\label{vocRegistry__spp_8c_f5c63cb486f8c51527f3049dc25b9362}
+
+\item
+\hypertarget{vocRegistry__spp_8c_79a68360d7ea961bb87b453a6520d7bb}{
+\#define \textbf{vx\_\-rgetstcount}~vxrget\_\-}
+\label{vocRegistry__spp_8c_79a68360d7ea961bb87b453a6520d7bb}
+
+\item
+\hypertarget{vocRegistry__spp_8c_c0b1903b53fc5792b2e5e0415165f7e3}{
+\#define \textbf{vx\_\-rgetquerystring}~vxrgeg\_\-}
+\label{vocRegistry__spp_8c_c0b1903b53fc5792b2e5e0415165f7e3}
+
+\item
+\hypertarget{vocRegistry__spp_8c_cb980d699a93fa377708b1ac9febf886}{
+\#define \textbf{vx\_\-rexecute}~vxrexe\_\-}
+\label{vocRegistry__spp_8c_cb980d699a93fa377708b1ac9febf886}
+
+\item
+\hypertarget{vocRegistry__spp_8c_246ecdbf9ba0854c71fc2ceb851f8b89}{
+\#define \textbf{vx\_\-rexecuteraw}~vxrexw\_\-}
+\label{vocRegistry__spp_8c_246ecdbf9ba0854c71fc2ceb851f8b89}
+
+\item
+\hypertarget{vocRegistry__spp_8c_844d033287d1883cb8487b948b33ad13}{
+\#define \textbf{vx\_\-rscount}~vxrsct\_\-}
+\label{vocRegistry__spp_8c_844d033287d1883cb8487b948b33ad13}
+
+\item
+\hypertarget{vocRegistry__spp_8c_18e206273082cb36e9b30008384fd531}{
+\#define \textbf{vx\_\-rsstr}~vxrssr\_\-}
+\label{vocRegistry__spp_8c_18e206273082cb36e9b30008384fd531}
+
+\item
+\hypertarget{vocRegistry__spp_8c_497e37a8b67269e7aa85a132aff2973f}{
+\#define \textbf{vx\_\-rsfloat}~vxrsft\_\-}
+\label{vocRegistry__spp_8c_497e37a8b67269e7aa85a132aff2973f}
+
+\item
+\hypertarget{vocRegistry__spp_8c_2196a81afa7f275f1358817ef5ad1f35}{
+\#define \textbf{vx\_\-rsint}~vxrsit\_\-}
+\label{vocRegistry__spp_8c_2196a81afa7f275f1358817ef5ad1f35}
+
+\item
+\hypertarget{vocRegistry__spp_8c_a438904dccdba8cd87e4161c96dac1a1}{
+\#define \textbf{XCHAR}~short}
+\label{vocRegistry__spp_8c_a438904dccdba8cd87e4161c96dac1a1}
+
+\item
+\hypertarget{vocRegistry__spp_8c_0acc6410b155e9c6f4946a7902360076}{
+\#define \textbf{PKCHAR}~char}
+\label{vocRegistry__spp_8c_0acc6410b155e9c6f4946a7902360076}
+
+\item
+\hypertarget{vocRegistry__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}{
+\#define \textbf{XINT}~int}
+\label{vocRegistry__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}
+
+\item
+\hypertarget{vocRegistry__spp_8c_e2d16c5c8637505285edc2ce06f510d3}{
+\#define \textbf{XEOS}~NULL}
+\label{vocRegistry__spp_8c_e2d16c5c8637505285edc2ce06f510d3}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+RegResult \hyperlink{vocRegistry__spp_8c_3c05d7c8cc258aa0727c1c1468384993}{vx\_\-regsearch} (XCHAR $\ast$term1, XCHAR $\ast$term2, int $\ast$orValues)
+\begin{CompactList}\small\item\em High-level Registry query interface. \item\end{CompactList}\item
+RegResult \hyperlink{vocRegistry__spp_8c_efe6285c929da91b5c3a9554eb5fe1ee}{vx\_\-regsearchbysvc} (XCHAR $\ast$svc, XCHAR $\ast$term, int $\ast$orValues)
+\begin{CompactList}\small\item\em Search Registry using a search term and service constraint. \item\end{CompactList}\item
+RegQuery \hyperlink{vocRegistry__spp_8c_0ca491fff22d8bb32252ac23d4ae7560}{vx\_\-regquery} (XCHAR $\ast$term, int $\ast$orValues)
+\begin{CompactList}\small\item\em Create a RegistryQuery object. \item\end{CompactList}\item
+void \hyperlink{vocRegistry__spp_8c_bd44eef01bb352184e0b8b7999641537}{vx\_\-raddsearchterm} (RegQuery $\ast$query, XCHAR $\ast$term, int $\ast$orValue)
+\begin{CompactList}\small\item\em Add a search term to the specified query. \item\end{CompactList}\item
+void \hyperlink{vocRegistry__spp_8c_95f961540d6a3c3eb7c06beb87c1bab7}{vx\_\-rremovesearchterm} (RegQuery $\ast$query, XCHAR $\ast$term)
+\begin{CompactList}\small\item\em Remove a search term to the specified query. \item\end{CompactList}\item
+int \hyperlink{vocRegistry__spp_8c_8232e1a2c9e548c9ed0a38f33ff462bc}{vx\_\-rgetstcount} (RegQuery $\ast$query)
+\begin{CompactList}\small\item\em Get the number of search terms in the current query. \item\end{CompactList}\item
+int \hyperlink{vocRegistry__spp_8c_e4339cec42aa0ba730c335879b9d3ca1}{vx\_\-rgetquerystring} (RegQuery $\ast$query, XCHAR $\ast$qstring, int $\ast$maxch)
+\begin{CompactList}\small\item\em Get the current query as an http GET URL. \item\end{CompactList}\item
+RegResult \hyperlink{vocRegistry__spp_8c_3010d75062148d186e6c168d012eb01b}{vx\_\-rexecute} (RegQuery $\ast$query)
+\begin{CompactList}\small\item\em Execute the specified query. \item\end{CompactList}\item
+int \hyperlink{vocRegistry__spp_8c_b98d1ec0013f957594820a379dbc55f0}{vx\_\-rexecuteraw} (RegQuery $\ast$query, XCHAR $\ast$result, int $\ast$maxch)
+\begin{CompactList}\small\item\em Execute the specified query and return raw result string. \item\end{CompactList}\item
+\hypertarget{vocRegistry__spp_8c_53d0fc07b2448b458c81a8d5a78b473a}{
+int \textbf{vx\_\-rgcount} (RegResult $\ast$res)}
+\label{vocRegistry__spp_8c_53d0fc07b2448b458c81a8d5a78b473a}
+
+\item
+\hypertarget{vocRegistry__spp_8c_a74254fab826980457106b67ea6131ae}{
+int \textbf{vx\_\-rgstr} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index, XCHAR $\ast$result, int $\ast$maxch)}
+\label{vocRegistry__spp_8c_a74254fab826980457106b67ea6131ae}
+
+\item
+\hypertarget{vocRegistry__spp_8c_91362d2ed60f7f77052b2e9e878ed2af}{
+double \textbf{vx\_\-rgfloat} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index)}
+\label{vocRegistry__spp_8c_91362d2ed60f7f77052b2e9e878ed2af}
+
+\item
+\hypertarget{vocRegistry__spp_8c_ef83c208ec74243a9e068bd92da33c25}{
+int \textbf{vx\_\-rgint} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index)}
+\label{vocRegistry__spp_8c_ef83c208ec74243a9e068bd92da33c25}
+
+\item
+\hypertarget{vocRegistry__spp_8c_ee3f5c02637713505163c630426633da}{
+PKCHAR $\ast$ \textbf{spp2c} (XCHAR $\ast$instr, int maxch)}
+\label{vocRegistry__spp_8c_ee3f5c02637713505163c630426633da}
+
+\item
+\hypertarget{vocRegistry__spp_8c_444d4dd026760f72e06d13881e289bcf}{
+int \textbf{c2spp} (PKCHAR $\ast$instr, XCHAR $\ast$outstr, int maxch)}
+\label{vocRegistry__spp_8c_444d4dd026760f72e06d13881e289bcf}
+
+\item
+\hypertarget{vocRegistry__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}{
+int \textbf{spplen} (XCHAR $\ast$str)}
+\label{vocRegistry__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}
+
+\item
+int \hyperlink{vocRegistry__spp_8c_2b3cbaf9c927266e4d0fb9ee3b3d7231}{vx\_\-rscount} (RegResult $\ast$res)
+\begin{CompactList}\small\item\em Return a count of the number of results records. \item\end{CompactList}\item
+int \hyperlink{vocRegistry__spp_8c_e8ada1986ac82faa682eb28296d00b97}{vx\_\-rsstr} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index, XCHAR $\ast$result, int $\ast$maxch)
+\begin{CompactList}\small\item\em Get a string-valued attribute from the result resource record. \item\end{CompactList}\item
+double \hyperlink{vocRegistry__spp_8c_8e6f51d16bf357c212001d101e43201c}{vx\_\-rsfloat} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index)
+\begin{CompactList}\small\item\em Get a real-valued attribute from the result resource record. \item\end{CompactList}\item
+int \hyperlink{vocRegistry__spp_8c_db53941e5010c36f6a36e318f4fe55da}{vx\_\-rsint} (RegResult $\ast$res, XCHAR $\ast$attribute, int $\ast$index)
+\begin{CompactList}\small\item\em Get an int-valued attribute from the result resource record. \item\end{CompactList}\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocRegistry__spp_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocRegistry__spp_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOC\_\-REGISTRYQUERY -- Utility code to act as a client interface to the NVO Registry service.
+
+RegistryQuery ----------------------
+
+High-Level Query:
+
+res = voc\_\-regSearch (term1, term2, orValues)
+
+Programmatic Query:
+
+query = voc\_\-regQuery (term, orValues) // OR keyword list?
+
+voc\_\-regAddSearchTerm (query, term, orValue) // OR term w/ previous voc\_\-regRemoveSearchTerm (query, term) // remove search term count = voc\_\-regGetSTCount (query)
+
+str = voc\_\-regGetQueryString (query) // GET form of query
+
+res = voc\_\-regExecute (query) // return result obj str = voc\_\-regExecuteRaw (query) // return raw XML
+
+RegistryQueryResult
+
+count = voc\_\-resGetCount (res)
+
+str = voc\_\-resGetStr (res, attribute, index) dval = voc\_\-resGetFloat (res, attribute, index) ival = voc\_\-resGetInt (res, attribute, index)
+
+For this implementation, we've chose to use the NVO Registry at JHU/STScI, specifically the QueryRegistry() method which provides a 'SimpleResource' form of the resource record. Support for the newer IVOA standard will be added later, for now we can quickly access the most commonly used fields of a resource using both a keyword and SQL form of the search.
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]July 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocRegistry__spp_8c_bd44eef01bb352184e0b8b7999641537}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-raddsearchterm@{vx\_\-raddsearchterm}}
+\index{vx\_\-raddsearchterm@{vx\_\-raddsearchterm}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-raddsearchterm}]{\setlength{\rightskip}{0pt plus 5cm}void vx\_\-raddsearchterm (RegQuery $\ast$ {\em query}, \/ XCHAR $\ast$ {\em term}, \/ int $\ast$ {\em orValue})}}
+\label{vocRegistry__spp_8c_bd44eef01bb352184e0b8b7999641537}
+
+
+Add a search term to the specified query.
+
+VX\_\-REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list) to the specified query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry__spp_8c_0ca491fff22d8bb32252ac23d4ae7560}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-regquery@{vx\_\-regquery}}
+\index{vx\_\-regquery@{vx\_\-regquery}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-regquery}]{\setlength{\rightskip}{0pt plus 5cm}RegQuery vx\_\-regquery (XCHAR $\ast$ {\em term}, \/ int $\ast$ {\em orValues})}}
+\label{vocRegistry__spp_8c_0ca491fff22d8bb32252ac23d4ae7560}
+
+
+Create a RegistryQuery object.
+
+VX\_\-REGQUERY -- Get a RegistryQuery object.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to query object \end{Desc}
+\hypertarget{vocRegistry__spp_8c_3c05d7c8cc258aa0727c1c1468384993}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-regsearch@{vx\_\-regsearch}}
+\index{vx\_\-regsearch@{vx\_\-regsearch}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-regsearch}]{\setlength{\rightskip}{0pt plus 5cm}RegResult vx\_\-regsearch (XCHAR $\ast$ {\em term1}, \/ XCHAR $\ast$ {\em term2}, \/ int $\ast$ {\em orValues})}}
+\label{vocRegistry__spp_8c_3c05d7c8cc258aa0727c1c1468384993}
+
+
+High-level Registry query interface.
+
+VX\_\-REGSEARCH -- High-level procedure to form a query and execute it immediately. We allow that 'term1' may be a complex SQL WHERE predicate, and that 'term2' (or vice versa) is a search-keyword list. The 'orValues' applies to the keyword list (if present), otherwise it applies to the two search term elements. The default action if two terms are specified is to logically AND them.
+
+The thinking here is that one might want SIAP services for Quasars. This is easily expressed in an SQL form to get SIAP resources, however a Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a easy way to OR the keywords but AND that result with the SQL predicate.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em term1}]first search term \item[{\em term2}]second search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to result object \end{Desc}
+\hypertarget{vocRegistry__spp_8c_efe6285c929da91b5c3a9554eb5fe1ee}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-regsearchbysvc@{vx\_\-regsearchbysvc}}
+\index{vx\_\-regsearchbysvc@{vx\_\-regsearchbysvc}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-regsearchbysvc}]{\setlength{\rightskip}{0pt plus 5cm}RegResult vx\_\-regsearchbysvc (XCHAR $\ast$ {\em svc}, \/ XCHAR $\ast$ {\em term}, \/ int $\ast$ {\em orValues})}}
+\label{vocRegistry__spp_8c_efe6285c929da91b5c3a9554eb5fe1ee}
+
+
+Search Registry using a search term and service constraint.
+
+VX\_\-REGSEARCHBYSERVICE -- Search the Registry using a search term and constrain by service type.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em svc}]service type constraint \item[{\em term}]keyword search term \item[{\em orValues}]logically OR values? \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to result object \end{Desc}
+\hypertarget{vocRegistry__spp_8c_3010d75062148d186e6c168d012eb01b}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rexecute@{vx\_\-rexecute}}
+\index{vx\_\-rexecute@{vx\_\-rexecute}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rexecute}]{\setlength{\rightskip}{0pt plus 5cm}RegResult vx\_\-rexecute (RegQuery $\ast$ {\em query})}}
+\label{vocRegistry__spp_8c_3010d75062148d186e6c168d012eb01b}
+
+
+Execute the specified query.
+
+VX\_\-REGEXECUTE -- Execute the specified query, returning a result object code or NULL.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry__spp_8c_b98d1ec0013f957594820a379dbc55f0}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rexecuteraw@{vx\_\-rexecuteraw}}
+\index{vx\_\-rexecuteraw@{vx\_\-rexecuteraw}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rexecuteraw}]{\setlength{\rightskip}{0pt plus 5cm}int vx\_\-rexecuteraw (RegQuery $\ast$ {\em query}, \/ XCHAR $\ast$ {\em raw}, \/ int $\ast$ {\em maxch})}}
+\label{vocRegistry__spp_8c_b98d1ec0013f957594820a379dbc55f0}
+
+
+Execute the specified query and return raw result string.
+
+VX\_\-REGEXECUTERAW -- Execute the specified query and return the raw resulting XML string.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em raw}]raw result string \item[{\em maxch}]length of result string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry__spp_8c_e4339cec42aa0ba730c335879b9d3ca1}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rgetquerystring@{vx\_\-rgetquerystring}}
+\index{vx\_\-rgetquerystring@{vx\_\-rgetquerystring}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rgetquerystring}]{\setlength{\rightskip}{0pt plus 5cm}int vx\_\-rgetquerystring (RegQuery $\ast$ {\em query}, \/ XCHAR $\ast$ {\em qstr}, \/ int $\ast$ {\em maxch})}}
+\label{vocRegistry__spp_8c_e4339cec42aa0ba730c335879b9d3ca1}
+
+
+Get the current query as an http GET URL.
+
+VX\_\-REGGETQUERYSTRING -- Get the current query as an http GET URL.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em qstr}]returned query string \item[{\em maxch}]length of query string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry__spp_8c_8232e1a2c9e548c9ed0a38f33ff462bc}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rgetstcount@{vx\_\-rgetstcount}}
+\index{vx\_\-rgetstcount@{vx\_\-rgetstcount}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rgetstcount}]{\setlength{\rightskip}{0pt plus 5cm}int vx\_\-rgetstcount (RegQuery $\ast$ {\em query})}}
+\label{vocRegistry__spp_8c_8232e1a2c9e548c9ed0a38f33ff462bc}
+
+
+Get the number of search terms in the current query.
+
+VX\_\-REGGETSTCOUNT -- Get the number of search terms in the current query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]count of search terms \end{Desc}
+\hypertarget{vocRegistry__spp_8c_95f961540d6a3c3eb7c06beb87c1bab7}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rremovesearchterm@{vx\_\-rremovesearchterm}}
+\index{vx\_\-rremovesearchterm@{vx\_\-rremovesearchterm}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rremovesearchterm}]{\setlength{\rightskip}{0pt plus 5cm}void vx\_\-rremovesearchterm (RegQuery $\ast$ {\em query}, \/ XCHAR $\ast$ {\em term})}}
+\label{vocRegistry__spp_8c_95f961540d6a3c3eb7c06beb87c1bab7}
+
+
+Remove a search term to the specified query.
+
+VX\_\-REMOVESEARCHTERM -- Remove the search term from the query.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em query}]Registry query handle \item[{\em term}]keyword search term \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
+\hypertarget{vocRegistry__spp_8c_2b3cbaf9c927266e4d0fb9ee3b3d7231}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rscount@{vx\_\-rscount}}
+\index{vx\_\-rscount@{vx\_\-rscount}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rscount}]{\setlength{\rightskip}{0pt plus 5cm}count vx\_\-rscount (RegResult $\ast$ {\em res})}}
+\label{vocRegistry__spp_8c_2b3cbaf9c927266e4d0fb9ee3b3d7231}
+
+
+Return a count of the number of results records.
+
+VX\_\-RESGETCOUNT -- Return a count of the number of results records.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]number of result records \end{Desc}
+\hypertarget{vocRegistry__spp_8c_8e6f51d16bf357c212001d101e43201c}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rsfloat@{vx\_\-rsfloat}}
+\index{vx\_\-rsfloat@{vx\_\-rsfloat}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rsfloat}]{\setlength{\rightskip}{0pt plus 5cm}dval vx\_\-rsfloat (RegResult $\ast$ {\em res}, \/ XCHAR $\ast$ {\em attr}, \/ int $\ast$ {\em index})}}
+\label{vocRegistry__spp_8c_8e6f51d16bf357c212001d101e43201c}
+
+
+Get a real-valued attribute from the result resource record.
+
+VX\_\-GETFLOAT -- Get a real-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+MaxSR maximum search radius
+
+Attribute string are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]double-precision value \end{Desc}
+\hypertarget{vocRegistry__spp_8c_db53941e5010c36f6a36e318f4fe55da}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rsint@{vx\_\-rsint}}
+\index{vx\_\-rsint@{vx\_\-rsint}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rsint}]{\setlength{\rightskip}{0pt plus 5cm}ival vx\_\-rsint (RegResult $\ast$ {\em res}, \/ XCHAR $\ast$ {\em attr}, \/ int $\ast$ {\em index})}}
+\label{vocRegistry__spp_8c_db53941e5010c36f6a36e318f4fe55da}
+
+
+Get an int-valued attribute from the result resource record.
+
+VX\_\-GETINT -- Get a integer-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+MaxRecords maximum records returned by the service
+
+Attribute string are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]integer value \end{Desc}
+\hypertarget{vocRegistry__spp_8c_e8ada1986ac82faa682eb28296d00b97}{
+\index{vocRegistry\_\-spp.c@{vocRegistry\_\-spp.c}!vx\_\-rsstr@{vx\_\-rsstr}}
+\index{vx\_\-rsstr@{vx\_\-rsstr}!vocRegistry_spp.c@{vocRegistry\_\-spp.c}}
+\subsubsection[{vx\_\-rsstr}]{\setlength{\rightskip}{0pt plus 5cm}len vx\_\-rsstr (RegResult $\ast$ {\em res}, \/ XCHAR $\ast$ {\em attr}, \/ int $\ast$ {\em index}, \/ XCHAR $\ast$ {\em result}, \/ int $\ast$ {\em maxch})}}
+\label{vocRegistry__spp_8c_e8ada1986ac82faa682eb28296d00b97}
+
+
+Get a string-valued attribute from the result resource record.
+
+VX\_\-GETSTR -- Get a string-valued attribute from the result resource record. Currently recognized real-valued attributes include:
+
+Title Resource title (long version) ShortName Short name of Resource ServiceURL Service URL (if appropriate) ReferenceURL URL to reference about Resource Description Text description of resource Identifier Standard ivo identifier of resource ServiceType Service Type (Cone, Siap, etc) Type Resource Type (catalog, survey, etc) CoverageSpatial Spatial coverage (STC) CoverageTemporal Temporal coverage of data
+
+CoverageSpectral Spectral coverage (csv list of bandpasses) ContentLevel Content level (research, EPO, etc -- csv list)
+
+Attribute string are case-insensitive.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em res}]Registry result handle \item[{\em attr}]record attribute \item[{\em index}]record index \item[{\em result}]attribute string \item[{\em maxch}]length of attribute string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]nothing \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocSesame_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocSesame_8c.tex
new file mode 100644
index 00000000..2cc726cb
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocSesame_8c.tex
@@ -0,0 +1,229 @@
+\hypertarget{vocSesame_8c}{
+\section{vocSesame.c File Reference}
+\label{vocSesame_8c}\index{vocSesame.c@{vocSesame.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include $<$sys/types.h$>$}\par
+{\tt \#include $<$sys/stat.h$>$}\par
+{\tt \#include $<$dirent.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Classes}
+\begin{CompactItemize}
+\item
+struct \hyperlink{structObject}{Object}
+\end{CompactItemize}
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSesame_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocSesame_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocSesame_8c_cdc7844fbd4d45737d4aa56834d37829}{
+\#define \textbf{MAX\_\-OBJECTS}~128}
+\label{vocSesame_8c_cdc7844fbd4d45737d4aa56834d37829}
+
+\item
+\hypertarget{vocSesame_8c_2e97c1de9ed6a4c34b8731fed4b2e624}{
+\#define \textbf{SZ\_\-TARGET}~128}
+\label{vocSesame_8c_2e97c1de9ed6a4c34b8731fed4b2e624}
+
+\end{CompactItemize}
+\subsection*{Typedefs}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSesame_8c_867c408546a8562a552a59405804f607}{
+typedef struct \hyperlink{structObject}{Object} $\ast$ \textbf{ObjectPtr}}
+\label{vocSesame_8c_867c408546a8562a552a59405804f607}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+Sesame \hyperlink{vocSesame_8c_467c02f32e92e6808b6d1c129b8d5b04}{voc\_\-nameResolver} (char $\ast$target)
+\begin{CompactList}\small\item\em Query the CDS Sesame name resolver service. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocSesame_8c_911355789d941847843c8d42ad00314a}{voc\_\-resolverPos} (Sesame sr)
+\begin{CompactList}\small\item\em Return the (ra,dec) position for the object. \item\end{CompactList}\item
+char $\ast$ \hyperlink{vocSesame_8c_c7d46e5f565c97b0250fe837f985e283}{voc\_\-resolverOtype} (Sesame sr)
+\begin{CompactList}\small\item\em Return a string containing the object type description. \item\end{CompactList}\item
+double \hyperlink{vocSesame_8c_4526ce29541bc2a1b4c939c494c6d00e}{voc\_\-resolverRA} (Sesame sr)
+\begin{CompactList}\small\item\em Return the RA as a double precision value. \item\end{CompactList}\item
+double \hyperlink{vocSesame_8c_4fe9b855c8e4cca0f1fdced36d5ae8ea}{voc\_\-resolverRAErr} (Sesame sr)
+\begin{CompactList}\small\item\em Return the RA error as a double precision value. \item\end{CompactList}\item
+double \hyperlink{vocSesame_8c_46c25290911c3217bdc4294eded2ba46}{voc\_\-resolverDEC} (Sesame sr)
+\begin{CompactList}\small\item\em Return the DEC as a double precision value. \item\end{CompactList}\item
+double \hyperlink{vocSesame_8c_f0fb68ddb8bd62c72e21de2bed525b4c}{voc\_\-resolverDECErr} (Sesame sr)
+\begin{CompactList}\small\item\em Return the Dec error as a double precision value. \item\end{CompactList}\item
+\hypertarget{vocSesame_8c_5383de2a3bf7243d0ac205fc0faa6785}{
+char $\ast$ \textbf{voc\_\-getCacheDir} (char $\ast$subdir)}
+\label{vocSesame_8c_5383de2a3bf7243d0ac205fc0faa6785}
+
+\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSesame_8c_1d587466a412b72dd4432e473f0fb60e}{
+\hyperlink{structObject}{Object} \textbf{clientCache} \mbox{[}MAX\_\-OBJECTS\mbox{]}}
+\label{vocSesame_8c_1d587466a412b72dd4432e473f0fb60e}
+
+\item
+\hypertarget{vocSesame_8c_d8d847f1b70d0e2bc3da7e990ff0d317}{
+int \textbf{cacheTop} = 0}
+\label{vocSesame_8c_d8d847f1b70d0e2bc3da7e990ff0d317}
+
+\item
+\hypertarget{vocSesame_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocSesame_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCSESAME.C -- Interface to the Sesame name resolver service.\hypertarget{vocSesame__spp_8c_DESCRIPTION}{}\subsection{DESCRIPTION}\label{vocSesame__spp_8c_DESCRIPTION}
+Sesame Name Resolver Interface: -------------------------------
+
+sr = voc\_\-nameResolver (target) pos\_\-str = voc\_\-resolverPos (sr) radeg = voc\_\-resolverRA (sr) decdeg = voc\_\-resolverDEC (sr) ra\_\-err = voc\_\-resolverRAErr (sr) dec\_\-err = voc\_\-resolverDECErr (sr) typ\_\-str = voc\_\-resolverOtype (sr)
+
+Client programs may be written in any language that can interface to C code. Sample programs using the interface are provided as is a SWIG interface definition file. This inferface is based closely on the DAL client code produced for the 2005 NVOSS, as that interface evolves
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocSesame_8c_467c02f32e92e6808b6d1c129b8d5b04}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-nameResolver@{voc\_\-nameResolver}}
+\index{voc\_\-nameResolver@{voc\_\-nameResolver}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-nameResolver}]{\setlength{\rightskip}{0pt plus 5cm}Sesame voc\_\-nameResolver (char $\ast$ {\em target})}}
+\label{vocSesame_8c_467c02f32e92e6808b6d1c129b8d5b04}
+
+
+Query the CDS Sesame name resolver service.
+
+NAMERESOLVER -- Query the CDS Sesame service to resolve the target name to coordinates. The query is done when creating the Sesame object, thereafter we simply query the object data.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em target}]name of target to be resolved \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]Sesame Sesame object handle \end{Desc}
+\hypertarget{vocSesame_8c_46c25290911c3217bdc4294eded2ba46}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverDEC@{voc\_\-resolverDEC}}
+\index{voc\_\-resolverDEC@{voc\_\-resolverDEC}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverDEC}]{\setlength{\rightskip}{0pt plus 5cm}double voc\_\-resolverDEC (Sesame {\em sr})}}
+\label{vocSesame_8c_46c25290911c3217bdc4294eded2ba46}
+
+
+Return the DEC as a double precision value.
+
+RESOLVERDEC -- Return the DEC as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]object Declination (decimal degrees) \end{Desc}
+\hypertarget{vocSesame_8c_f0fb68ddb8bd62c72e21de2bed525b4c}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverDECErr@{voc\_\-resolverDECErr}}
+\index{voc\_\-resolverDECErr@{voc\_\-resolverDECErr}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverDECErr}]{\setlength{\rightskip}{0pt plus 5cm}double voc\_\-resolverDECErr (Sesame {\em sr})}}
+\label{vocSesame_8c_f0fb68ddb8bd62c72e21de2bed525b4c}
+
+
+Return the Dec error as a double precision value.
+
+RESOLVERDECERR -- Return the Dec error as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]object DEC error (decimal degrees) \end{Desc}
+\hypertarget{vocSesame_8c_c7d46e5f565c97b0250fe837f985e283}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverOtype@{voc\_\-resolverOtype}}
+\index{voc\_\-resolverOtype@{voc\_\-resolverOtype}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverOtype}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ voc\_\-resolverOtype (Sesame {\em sr})}}
+\label{vocSesame_8c_c7d46e5f565c97b0250fe837f985e283}
+
+
+Return a string containing the object type description.
+
+RESOLVEROTYPE -- Return a string containing the object type description
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string to object type description \end{Desc}
+\hypertarget{vocSesame_8c_911355789d941847843c8d42ad00314a}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverPos@{voc\_\-resolverPos}}
+\index{voc\_\-resolverPos@{voc\_\-resolverPos}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverPos}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ voc\_\-resolverPos (Sesame {\em sr})}}
+\label{vocSesame_8c_911355789d941847843c8d42ad00314a}
+
+
+Return the (ra,dec) position for the object.
+
+RESOLVERPOS -- Return a string containing the (ra,dec) position as sexagesimal strings.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]string containing (ra,dec) position \end{Desc}
+\hypertarget{vocSesame_8c_4526ce29541bc2a1b4c939c494c6d00e}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverRA@{voc\_\-resolverRA}}
+\index{voc\_\-resolverRA@{voc\_\-resolverRA}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverRA}]{\setlength{\rightskip}{0pt plus 5cm}double voc\_\-resolverRA (Sesame {\em sr})}}
+\label{vocSesame_8c_4526ce29541bc2a1b4c939c494c6d00e}
+
+
+Return the RA as a double precision value.
+
+RESOLVERRA -- Return the RA as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]object RA (decimal degrees) \end{Desc}
+\hypertarget{vocSesame_8c_4fe9b855c8e4cca0f1fdced36d5ae8ea}{
+\index{vocSesame.c@{vocSesame.c}!voc\_\-resolverRAErr@{voc\_\-resolverRAErr}}
+\index{voc\_\-resolverRAErr@{voc\_\-resolverRAErr}!vocSesame.c@{vocSesame.c}}
+\subsubsection[{voc\_\-resolverRAErr}]{\setlength{\rightskip}{0pt plus 5cm}double voc\_\-resolverRAErr (Sesame {\em sr})}}
+\label{vocSesame_8c_4fe9b855c8e4cca0f1fdced36d5ae8ea}
+
+
+Return the RA error as a double precision value.
+
+RESOLVERRAERR -- Return the RA error as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to previus query return \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]object RA error (decimal degrees) \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocSesame__f77_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocSesame__f77_8c.tex
new file mode 100644
index 00000000..fa046b98
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocSesame__f77_8c.tex
@@ -0,0 +1,88 @@
+\hypertarget{vocSesame__f77_8c}{
+\section{vocSesame\_\-f77.c File Reference}
+\label{vocSesame__f77_8c}\index{vocSesame\_\-f77.c@{vocSesame\_\-f77.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSesame__f77_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocSesame__f77_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocSesame__f77_8c_921062a2a717d161e03be3f6e4b49069}{
+\#define \textbf{VF\_\-NAMERESOLVER}~vfnameresolver\_\-}
+\label{vocSesame__f77_8c_921062a2a717d161e03be3f6e4b49069}
+
+\item
+\hypertarget{vocSesame__f77_8c_0f3397b9fcdd160c3e446ed2a0841713}{
+\#define \textbf{VF\_\-RESOLVERRA}~vfresolverra\_\-}
+\label{vocSesame__f77_8c_0f3397b9fcdd160c3e446ed2a0841713}
+
+\item
+\hypertarget{vocSesame__f77_8c_1037654e8c8094c6e6ffc70d0222437d}{
+\#define \textbf{VF\_\-RESOLVERDEC}~vfresolverdec\_\-}
+\label{vocSesame__f77_8c_1037654e8c8094c6e6ffc70d0222437d}
+
+\item
+\hypertarget{vocSesame__f77_8c_8d1bbf00258ebc53319543b1fe31720f}{
+\#define \textbf{VF\_\-RESOLVERPOS}~vfresolverpos\_\-}
+\label{vocSesame__f77_8c_8d1bbf00258ebc53319543b1fe31720f}
+
+\item
+\hypertarget{vocSesame__f77_8c_f94ca385a61e8817cc99fbfd2ba54ad3}{
+\#define \textbf{VF\_\-RESOLVERRAERR}~vfresolverraerr\_\-}
+\label{vocSesame__f77_8c_f94ca385a61e8817cc99fbfd2ba54ad3}
+
+\item
+\hypertarget{vocSesame__f77_8c_77348dd6e7f0f385d635da12a1faae17}{
+\#define \textbf{VF\_\-RESOLVERDECERR}~vfresolverdecerr\_\-}
+\label{vocSesame__f77_8c_77348dd6e7f0f385d635da12a1faae17}
+
+\item
+\hypertarget{vocSesame__f77_8c_aa2dc39d2a511c21a40c485b469c922a}{
+\#define \textbf{VF\_\-RESOLVEROTYPE}~vfresolverotype\_\-}
+\label{vocSesame__f77_8c_aa2dc39d2a511c21a40c485b469c922a}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+char $\ast$ \hyperlink{vocSesame__f77_8c_78086d706029e0ca297fc1be4c83cf33}{sstrip} (char $\ast$instr, int len)
+\item
+\hypertarget{vocSesame__f77_8c_a71b9804381d56348caee3fe8b7d39ab}{
+void \textbf{spad} (char $\ast$outstr, int len)}
+\label{vocSesame__f77_8c_a71b9804381d56348caee3fe8b7d39ab}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCSESAME\_\-F77.C -- F77 Interface to the Sesame name resolver service.\hypertarget{vocSesame__spp_8c_DESCRIPTION}{}\subsection{DESCRIPTION}\label{vocSesame__spp_8c_DESCRIPTION}
+Sesame Name Resolver F77 Interface: -----------------------------------
+
+vf\_\-nameResolver (target, sr) vf\_\-resolverPos (sr, pos\_\-str, len) vf\_\-resolverRA (sr, radeg) vf\_\-resolverRAErr (sr, radeg) vf\_\-resolverDEC (sr, decdeg) vf\_\-resolverDECErr (sr, decdeg)
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocSesame__f77_8c_78086d706029e0ca297fc1be4c83cf33}{
+\index{vocSesame\_\-f77.c@{vocSesame\_\-f77.c}!sstrip@{sstrip}}
+\index{sstrip@{sstrip}!vocSesame_f77.c@{vocSesame\_\-f77.c}}
+\subsubsection[{sstrip}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ sstrip (char $\ast$ {\em instr}, \/ int {\em len})}}
+\label{vocSesame__f77_8c_78086d706029e0ca297fc1be4c83cf33}
+
+
+Private interface declarations. \ No newline at end of file
diff --git a/vendor/voclient/libvoclient/doc/latex/vocSesame__spp_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocSesame__spp_8c.tex
new file mode 100644
index 00000000..6962bd14
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocSesame__spp_8c.tex
@@ -0,0 +1,233 @@
+\hypertarget{vocSesame__spp_8c}{
+\section{vocSesame\_\-spp.c File Reference}
+\label{vocSesame__spp_8c}\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSesame__spp_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocSesame__spp_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocSesame__spp_8c_27ff538e856ee7c0ac0d68f7dd26c992}{
+\#define \textbf{vx\_\-nameresolver}~vxnamr\_\-}
+\label{vocSesame__spp_8c_27ff538e856ee7c0ac0d68f7dd26c992}
+
+\item
+\hypertarget{vocSesame__spp_8c_2ca25723ef38d747ac8d29165b8ab72c}{
+\#define \textbf{vx\_\-resolverra}~vxresa\_\-}
+\label{vocSesame__spp_8c_2ca25723ef38d747ac8d29165b8ab72c}
+
+\item
+\hypertarget{vocSesame__spp_8c_fd2d2d5f9c7189adb3fba85deb6758ce}{
+\#define \textbf{vx\_\-resolverdec}~vxresc\_\-}
+\label{vocSesame__spp_8c_fd2d2d5f9c7189adb3fba85deb6758ce}
+
+\item
+\hypertarget{vocSesame__spp_8c_100c06789014a58ab7e06bed380a67e1}{
+\#define \textbf{vx\_\-resolverpos}~vxress\_\-}
+\label{vocSesame__spp_8c_100c06789014a58ab7e06bed380a67e1}
+
+\item
+\hypertarget{vocSesame__spp_8c_67d46854be59984c5bbee5bcc6497fef}{
+\#define \textbf{vx\_\-resolverotype}~vxrese\_\-}
+\label{vocSesame__spp_8c_67d46854be59984c5bbee5bcc6497fef}
+
+\item
+\hypertarget{vocSesame__spp_8c_49d633cc6f44ef6ad7d77eb9827aab62}{
+\#define \textbf{vx\_\-errresolverra}~vxerra\_\-}
+\label{vocSesame__spp_8c_49d633cc6f44ef6ad7d77eb9827aab62}
+
+\item
+\hypertarget{vocSesame__spp_8c_8898286ea656b45dfdff39e7187d8b8d}{
+\#define \textbf{vx\_\-errresolverdec}~vxerrc\_\-}
+\label{vocSesame__spp_8c_8898286ea656b45dfdff39e7187d8b8d}
+
+\item
+\hypertarget{vocSesame__spp_8c_a438904dccdba8cd87e4161c96dac1a1}{
+\#define \textbf{XCHAR}~short}
+\label{vocSesame__spp_8c_a438904dccdba8cd87e4161c96dac1a1}
+
+\item
+\hypertarget{vocSesame__spp_8c_0acc6410b155e9c6f4946a7902360076}{
+\#define \textbf{PKCHAR}~char}
+\label{vocSesame__spp_8c_0acc6410b155e9c6f4946a7902360076}
+
+\item
+\hypertarget{vocSesame__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}{
+\#define \textbf{XINT}~int}
+\label{vocSesame__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}
+
+\item
+\hypertarget{vocSesame__spp_8c_e2d16c5c8637505285edc2ce06f510d3}{
+\#define \textbf{XEOS}~NULL}
+\label{vocSesame__spp_8c_e2d16c5c8637505285edc2ce06f510d3}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+int \hyperlink{vocSesame__spp_8c_07b6bc655c41867be4719d72e30e7dcd}{vx\_\-nameresolver} (XCHAR $\ast$target)
+\begin{CompactList}\small\item\em Query the CDS Sesame name resolver service. \item\end{CompactList}\item
+int \hyperlink{vocSesame__spp_8c_701bdc17597db7e4e7a6dcace4578935}{vx\_\-resolverpos} (int $\ast$sr, XCHAR $\ast$pos, int $\ast$len)
+\begin{CompactList}\small\item\em Return a string containing the (ra,dec) position. \item\end{CompactList}\item
+double \hyperlink{vocSesame__spp_8c_443309cb8f9cf4d5659d1530551b1a4e}{vx\_\-resolverra} (int $\ast$sr)
+\begin{CompactList}\small\item\em Return the RA as a double precision value. \item\end{CompactList}\item
+double \hyperlink{vocSesame__spp_8c_243498f57a863c7364d12bf8da806119}{vx\_\-resolverdec} (int $\ast$sr)
+\begin{CompactList}\small\item\em Return the DEC as a double precision value. \item\end{CompactList}\item
+\hypertarget{vocSesame__spp_8c_f06b828fdbfb1bdad3d45e5b5ee8bb06}{
+int \textbf{vx\_\-resolverotype} (int $\ast$sr, XCHAR $\ast$type, int $\ast$len)}
+\label{vocSesame__spp_8c_f06b828fdbfb1bdad3d45e5b5ee8bb06}
+
+\item
+double \hyperlink{vocSesame__spp_8c_81978654bf3f111cbde1c3d9643a6224}{vx\_\-errresolverra} (int $\ast$sr)
+\begin{CompactList}\small\item\em Return the RA error as a double precision value. \item\end{CompactList}\item
+double \hyperlink{vocSesame__spp_8c_593db6460d3932869f55cfdf398dddce}{vx\_\-errresolverdec} (int $\ast$sr)
+\begin{CompactList}\small\item\em Return the Dec error as a double precision value. \item\end{CompactList}\item
+\hypertarget{vocSesame__spp_8c_ee3f5c02637713505163c630426633da}{
+PKCHAR $\ast$ \textbf{spp2c} (XCHAR $\ast$instr, int maxch)}
+\label{vocSesame__spp_8c_ee3f5c02637713505163c630426633da}
+
+\item
+\hypertarget{vocSesame__spp_8c_444d4dd026760f72e06d13881e289bcf}{
+int \textbf{c2spp} (PKCHAR $\ast$instr, XCHAR $\ast$outstr, int maxch)}
+\label{vocSesame__spp_8c_444d4dd026760f72e06d13881e289bcf}
+
+\item
+\hypertarget{vocSesame__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}{
+int \textbf{spplen} (XCHAR $\ast$str)}
+\label{vocSesame__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCSESAME\_\-SPP.C -- SPP Interface to the Sesame name resolver service.\hypertarget{vocSesame__spp_8c_DESCRIPTION}{}\subsection{DESCRIPTION}\label{vocSesame__spp_8c_DESCRIPTION}
+Sesame Name Resolver SPP Interface: -----------------------------------
+
+sr = vx\_\-nameResolver (target) pos\_\-str = vx\_\-resolverPos (sr) radeg = vx\_\-resolverRA (sr) decdeg = vx\_\-resolverDEC (sr) typ\_\-str = vx\_\-resolverOtype (sr) raerr = vx\_\-resolverRAErr (sr) decerr = vx\_\-resolverDECErr (sr)
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocSesame__spp_8c_593db6460d3932869f55cfdf398dddce}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-errresolverdec@{vx\_\-errresolverdec}}
+\index{vx\_\-errresolverdec@{vx\_\-errresolverdec}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-errresolverdec}]{\setlength{\rightskip}{0pt plus 5cm}double vx\_\-errresolverdec (int $\ast$ {\em sr})}}
+\label{vocSesame__spp_8c_593db6460d3932869f55cfdf398dddce}
+
+
+Return the Dec error as a double precision value.
+
+VX\_\-ERRRESOLVERDEC -- Return the DEC as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to Sesame object \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]Dec error of object position (decimal degrees) \end{Desc}
+\hypertarget{vocSesame__spp_8c_81978654bf3f111cbde1c3d9643a6224}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-errresolverra@{vx\_\-errresolverra}}
+\index{vx\_\-errresolverra@{vx\_\-errresolverra}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-errresolverra}]{\setlength{\rightskip}{0pt plus 5cm}double vx\_\-errresolverra (int $\ast$ {\em sr})}}
+\label{vocSesame__spp_8c_81978654bf3f111cbde1c3d9643a6224}
+
+
+Return the RA error as a double precision value.
+
+VX\_\-ERRRESOLVERRA -- Return the RA error as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to Sesame object \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]RA error of object position (decimal degrees) \end{Desc}
+\hypertarget{vocSesame__spp_8c_07b6bc655c41867be4719d72e30e7dcd}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-nameresolver@{vx\_\-nameresolver}}
+\index{vx\_\-nameresolver@{vx\_\-nameresolver}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-nameresolver}]{\setlength{\rightskip}{0pt plus 5cm}int vx\_\-nameresolver (XCHAR $\ast$ {\em target})}}
+\label{vocSesame__spp_8c_07b6bc655c41867be4719d72e30e7dcd}
+
+
+Query the CDS Sesame name resolver service.
+
+VX\_\-NAMERESOLVER -- Query the CDS Sesame service to resolve the target name to coordinates. The query is done when creating the Sesame object, thereafter we simply query the object data.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em target}]name of target to be resolved \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]handle to Sesame object \end{Desc}
+\hypertarget{vocSesame__spp_8c_243498f57a863c7364d12bf8da806119}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-resolverdec@{vx\_\-resolverdec}}
+\index{vx\_\-resolverdec@{vx\_\-resolverdec}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-resolverdec}]{\setlength{\rightskip}{0pt plus 5cm}double vx\_\-resolverdec (int $\ast$ {\em sr})}}
+\label{vocSesame__spp_8c_243498f57a863c7364d12bf8da806119}
+
+
+Return the DEC as a double precision value.
+
+VX\_\-RESOLVERDEC -- Return the DEC as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to Sesame object \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]Dec of object position (decimal degrees) \end{Desc}
+\hypertarget{vocSesame__spp_8c_701bdc17597db7e4e7a6dcace4578935}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-resolverpos@{vx\_\-resolverpos}}
+\index{vx\_\-resolverpos@{vx\_\-resolverpos}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-resolverpos}]{\setlength{\rightskip}{0pt plus 5cm}int vx\_\-resolverpos (int $\ast$ {\em sr}, \/ XCHAR $\ast$ {\em pos}, \/ int $\ast$ {\em maxch})}}
+\label{vocSesame__spp_8c_701bdc17597db7e4e7a6dcace4578935}
+
+
+Return a string containing the (ra,dec) position.
+
+VX\_\-RESOLVERPOS -- Return a string containing the (ra,dec) position as sexagesimal strings.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to Sesame object \item[{\em pos}]returned position string \item[{\em maxch}]max size of position string \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]length of position string \end{Desc}
+\hypertarget{vocSesame__spp_8c_443309cb8f9cf4d5659d1530551b1a4e}{
+\index{vocSesame\_\-spp.c@{vocSesame\_\-spp.c}!vx\_\-resolverra@{vx\_\-resolverra}}
+\index{vx\_\-resolverra@{vx\_\-resolverra}!vocSesame_spp.c@{vocSesame\_\-spp.c}}
+\subsubsection[{vx\_\-resolverra}]{\setlength{\rightskip}{0pt plus 5cm}double vx\_\-resolverra (int $\ast$ {\em sr})}}
+\label{vocSesame__spp_8c_443309cb8f9cf4d5659d1530551b1a4e}
+
+
+Return the RA as a double precision value.
+
+VX\_\-RESOLVERRA -- Return the RA as a double precision value.
+
+\begin{Desc}
+\item[Parameters:]
+\begin{description}
+\item[{\em sr}]handle to Sesame object \end{description}
+\end{Desc}
+\begin{Desc}
+\item[Returns:]RA of object position (decimal degrees) \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocSkybot_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocSkybot_8c.tex
new file mode 100644
index 00000000..c9157715
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocSkybot_8c.tex
@@ -0,0 +1,72 @@
+\hypertarget{vocSkybot_8c}{
+\section{vocSkybot.c File Reference}
+\label{vocSkybot_8c}\index{vocSkybot.c@{vocSkybot.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSkybot_8c_f8d79a0314338263841485c24d97cf1f}{
+Skybot \textbf{voc\_\-skybot} (double ra, double dec, double rsz, double dsz, double epoch)}
+\label{vocSkybot_8c_f8d79a0314338263841485c24d97cf1f}
+
+\item
+\hypertarget{vocSkybot_8c_5559779a075d5933afb4c9021c1aee4a}{
+int \textbf{voc\_\-skybotNObjs} (Skybot sb)}
+\label{vocSkybot_8c_5559779a075d5933afb4c9021c1aee4a}
+
+\item
+\hypertarget{vocSkybot_8c_097a23954288e4085314abc5804efe26}{
+char $\ast$ \textbf{voc\_\-skybotStrAttr} (Skybot sb, char $\ast$attr, int index)}
+\label{vocSkybot_8c_097a23954288e4085314abc5804efe26}
+
+\item
+\hypertarget{vocSkybot_8c_9ed96e652da4487d89505ccc9ca917f5}{
+double \textbf{voc\_\-skybotDblAttr} (Skybot sb, char $\ast$attr, int index)}
+\label{vocSkybot_8c_9ed96e652da4487d89505ccc9ca917f5}
+
+\end{CompactItemize}
+\subsection*{Variables}
+\begin{CompactItemize}
+\item
+\hypertarget{vocSkybot_8c_e8b9013ac3d6a8f93991444d8c8c5919}{
+VOClient $\ast$ \textbf{vo}}
+\label{vocSkybot_8c_e8b9013ac3d6a8f93991444d8c8c5919}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+SkyBoT Minor Planet Service Interface: --------------------------------------
+
+A utility class for accessing the IMCCE Skybot ephemerides service. The service is called as part of the constructor for the object allowing easy access to the result data. Class methods also exist so a VO Client interface the same access to the data.
+
+Reference: \href{http://www.imcce.fr/webservices/skybot/}{\tt http://www.imcce.fr/webservices/skybot/}
+
+Class Methods: --------------
+
+sb = voc\_\-skybot (ra, dec, rsz, dsz, epoch)
+
+count = voc\_\-skybotNObjs (sb) str = voc\_\-skybotStrAttr (sb, attrname, index) dval = voc\_\-skybotDblAttr (sb, attrname, index)
+
+Available Attributes: ---------------------
+
+number string Asteroid number name string Asteroid name ra double J2000 Equatorial RA dec double J2000 Equatorial Dec class string \hyperlink{structObject}{Object} classification vmag double Visual magnitude poserr double Error on position (arcsec) cdist double Body-to-center angular distance dra double RA motion (arcsec/hr) ddec double Dec motion (arcsec/hr) dgeo double Geocentric distance (AU) dhelio double Heliocentric distance (AU) px double Mean J2000 heliocentric position vector (AU) py double \char`\"{} \char`\"{} \char`\"{} \char`\"{} \char`\"{} pz double \char`\"{} \char`\"{} \char`\"{} \char`\"{} \char`\"{} vx double Mean J2000 heliocentric position vector (AU/day) vy double \char`\"{} \char`\"{} \char`\"{} \char`\"{} \char`\"{} vz double \char`\"{} \char`\"{} \char`\"{} \char`\"{} \char`\"{} JD0 double T0, epoch of position vector (JD)
+
+Example Usage: ---------------
+
+1) Find bodies in a 900\char`\"{} radius around (0.0,0.0) on JD 2453939.123
+
+VOCSkybot skybot = new VOCSkybot (0.0,0.0,900,2453939.123); for (int i=0; i $<$ skybot.getNObjs(); i++) System.out.print (\char`\"{}Name: '\char`\"{} + sb.getStrAttr(\char`\"{}name\char`\"{},i)+\char`\"{}' \char`\"{} + \char`\"{}RA: \char`\"{} + sb.getDblAttr(\char`\"{}ra\char`\"{},i) + \char`\"{} \char`\"{} + \char`\"{}Dec: \char`\"{} + sb.getDblAttr(\char`\"{}dec\char`\"{},i) + \char`\"{} \char`\"{} + \char`\"{}Mv: \char`\"{} + sb.getDblAttr(\char`\"{}vmag\char`\"{},i) + \char`\"{} \char`\"{});
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
diff --git a/vendor/voclient/libvoclient/doc/latex/vocUtil__f77_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocUtil__f77_8c.tex
new file mode 100644
index 00000000..8370460b
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocUtil__f77_8c.tex
@@ -0,0 +1,65 @@
+\hypertarget{vocUtil__f77_8c}{
+\section{vocUtil\_\-f77.c File Reference}
+\label{vocUtil__f77_8c}\index{vocUtil\_\-f77.c@{vocUtil\_\-f77.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocUtil__f77_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocUtil__f77_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\hypertarget{vocUtil__f77_8c_32108415ff44b6f7537b9516f4a84be7}{
+\#define \textbf{SZ\_\-LINE}~1024}
+\label{vocUtil__f77_8c_32108415ff44b6f7537b9516f4a84be7}
+
+\item
+\hypertarget{vocUtil__f77_8c_b924d5aea72f589528a7f42ace5e26e9}{
+\#define \textbf{SZ\_\-TYPECODE}~32}
+\label{vocUtil__f77_8c_b924d5aea72f589528a7f42ace5e26e9}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+char $\ast$ \hyperlink{vocUtil__f77_8c_78086d706029e0ca297fc1be4c83cf33}{sstrip} (char $\ast$instr, int len)
+\item
+\hypertarget{vocUtil__f77_8c_a71b9804381d56348caee3fe8b7d39ab}{
+void \textbf{spad} (char $\ast$outstr, int len)}
+\label{vocUtil__f77_8c_a71b9804381d56348caee3fe8b7d39ab}
+
+\item
+\hypertarget{vocUtil__f77_8c_f155b115baf43f6e663b6d217ff1f4ee}{
+int \textbf{typecode} (char $\ast$typestr)}
+\label{vocUtil__f77_8c_f155b115baf43f6e663b6d217ff1f4ee}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCUTIL\_\-F77.C -- Utility routines to support Fortran bindings.
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Function Documentation}
+\hypertarget{vocUtil__f77_8c_78086d706029e0ca297fc1be4c83cf33}{
+\index{vocUtil\_\-f77.c@{vocUtil\_\-f77.c}!sstrip@{sstrip}}
+\index{sstrip@{sstrip}!vocUtil_f77.c@{vocUtil\_\-f77.c}}
+\subsubsection[{sstrip}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ sstrip (char $\ast$ {\em instr}, \/ int {\em len})}}
+\label{vocUtil__f77_8c_78086d706029e0ca297fc1be4c83cf33}
+
+
+Local interface declarations. \ No newline at end of file
diff --git a/vendor/voclient/libvoclient/doc/latex/vocUtil__spp_8c.tex b/vendor/voclient/libvoclient/doc/latex/vocUtil__spp_8c.tex
new file mode 100644
index 00000000..50484a3a
--- /dev/null
+++ b/vendor/voclient/libvoclient/doc/latex/vocUtil__spp_8c.tex
@@ -0,0 +1,99 @@
+\hypertarget{vocUtil__spp_8c}{
+\section{vocUtil\_\-spp.c File Reference}
+\label{vocUtil__spp_8c}\index{vocUtil\_\-spp.c@{vocUtil\_\-spp.c}}
+}
+{\tt \#include $<$stdio.h$>$}\par
+{\tt \#include $<$stdlib.h$>$}\par
+{\tt \#include $<$unistd.h$>$}\par
+{\tt \#include $<$signal.h$>$}\par
+{\tt \#include $<$errno.h$>$}\par
+{\tt \#include \char`\"{}VOClient.h\char`\"{}}\par
+\subsection*{Defines}
+\begin{CompactItemize}
+\item
+\hypertarget{vocUtil__spp_8c_96522681f45fae55d1e17bcb63620e45}{
+\#define \textbf{\_\-VOCLIENT\_\-LIB\_\-}}
+\label{vocUtil__spp_8c_96522681f45fae55d1e17bcb63620e45}
+
+\item
+\#define \hyperlink{vocUtil__spp_8c_a438904dccdba8cd87e4161c96dac1a1}{XCHAR}~short
+\item
+\hypertarget{vocUtil__spp_8c_0acc6410b155e9c6f4946a7902360076}{
+\#define \textbf{PKCHAR}~char}
+\label{vocUtil__spp_8c_0acc6410b155e9c6f4946a7902360076}
+
+\item
+\hypertarget{vocUtil__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}{
+\#define \textbf{XINT}~int}
+\label{vocUtil__spp_8c_8b5bd3113cf759baf3cf77f03138ec2e}
+
+\item
+\hypertarget{vocUtil__spp_8c_e2d16c5c8637505285edc2ce06f510d3}{
+\#define \textbf{XEOS}~VOC\_\-NULL}
+\label{vocUtil__spp_8c_e2d16c5c8637505285edc2ce06f510d3}
+
+\item
+\hypertarget{vocUtil__spp_8c_b924d5aea72f589528a7f42ace5e26e9}{
+\#define \textbf{SZ\_\-TYPECODE}~32}
+\label{vocUtil__spp_8c_b924d5aea72f589528a7f42ace5e26e9}
+
+\end{CompactItemize}
+\subsection*{Functions}
+\begin{CompactItemize}
+\item
+PKCHAR $\ast$ \hyperlink{vocUtil__spp_8c_ee3f5c02637713505163c630426633da}{spp2c} (XCHAR $\ast$instr, int maxch)
+\item
+\hypertarget{vocUtil__spp_8c_444d4dd026760f72e06d13881e289bcf}{
+int \textbf{c2spp} (PKCHAR $\ast$instr, XCHAR $\ast$outstr, int maxch)}
+\label{vocUtil__spp_8c_444d4dd026760f72e06d13881e289bcf}
+
+\item
+\hypertarget{vocUtil__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}{
+int \textbf{spplen} (XCHAR $\ast$str)}
+\label{vocUtil__spp_8c_2abc3ffcecace56cb0e39d6cd5693e0e}
+
+\item
+\hypertarget{vocUtil__spp_8c_fd88d92f076ce42db56b0502610e4f7c}{
+int \textbf{dal\_\-typecode} (char $\ast$typestr)}
+\label{vocUtil__spp_8c_fd88d92f076ce42db56b0502610e4f7c}
+
+\item
+\hypertarget{vocUtil__spp_8c_0620181bc05a53c2692e109194790616}{
+int \textbf{out\_\-typecode} (char $\ast$typestr)}
+\label{vocUtil__spp_8c_0620181bc05a53c2692e109194790616}
+
+\end{CompactItemize}
+
+
+\label{_details}
+\hypertarget{_details}{}
+\subsection{Detailed Description}
+VOCUTIL\_\-SPP.C -- Utility routines for the SPP proceduers.
+
+Michael Fitzpatrick, NOAO, Jul 2006
+
+\begin{Desc}
+\item[Author:]Michael Fitzpatrick \end{Desc}
+\begin{Desc}
+\item[Version:]June 2006 \end{Desc}
+
+
+\subsection{Define Documentation}
+\hypertarget{vocUtil__spp_8c_a438904dccdba8cd87e4161c96dac1a1}{
+\index{vocUtil\_\-spp.c@{vocUtil\_\-spp.c}!XCHAR@{XCHAR}}
+\index{XCHAR@{XCHAR}!vocUtil_spp.c@{vocUtil\_\-spp.c}}
+\subsubsection[{XCHAR}]{\setlength{\rightskip}{0pt plus 5cm}\#define XCHAR~short}}
+\label{vocUtil__spp_8c_a438904dccdba8cd87e4161c96dac1a1}
+
+
+SPP Name mapping macros. SPP procedure names are mappad as the first-5 plus the last character of a name minus any underscores. This should be done such that a unique 6-character name is produced for each SPP symbol. In these definitions the SPP code may use the long form of the name in the code, the mapping is done automatically and so we need the macros here so the symbol entered in the library is actually the short name. SPP Type definitions.
+
+\subsection{Function Documentation}
+\hypertarget{vocUtil__spp_8c_ee3f5c02637713505163c630426633da}{
+\index{vocUtil\_\-spp.c@{vocUtil\_\-spp.c}!spp2c@{spp2c}}
+\index{spp2c@{spp2c}!vocUtil_spp.c@{vocUtil\_\-spp.c}}
+\subsubsection[{spp2c}]{\setlength{\rightskip}{0pt plus 5cm}PKCHAR$\ast$ spp2c (XCHAR $\ast$ {\em instr}, \/ int {\em maxch})}}
+\label{vocUtil__spp_8c_ee3f5c02637713505163c630426633da}
+
+
+Public interface procedures. \ No newline at end of file
diff --git a/vendor/voclient/libvoclient/doxygen.cfg b/vendor/voclient/libvoclient/doxygen.cfg
new file mode 100644
index 00000000..21f25f05
--- /dev/null
+++ b/vendor/voclient/libvoclient/doxygen.cfg
@@ -0,0 +1,1514 @@
+# Doxyfile 1.5.9
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "VOClient API"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ./doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature. Other possible values
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW = NONE
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/vendor/voclient/libvoclient/examples/.deps/cone1.Po b/vendor/voclient/libvoclient/examples/.deps/cone1.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/cone1.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/cone2.Po b/vendor/voclient/libvoclient/examples/.deps/cone2.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/cone2.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/cone3.Po b/vendor/voclient/libvoclient/examples/.deps/cone3.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/cone3.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/registry1.Po b/vendor/voclient/libvoclient/examples/.deps/registry1.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/registry1.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/registry2.Po b/vendor/voclient/libvoclient/examples/.deps/registry2.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/registry2.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/registry3.Po b/vendor/voclient/libvoclient/examples/.deps/registry3.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/registry3.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/resolver.Po b/vendor/voclient/libvoclient/examples/.deps/resolver.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/resolver.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/siap1.Po b/vendor/voclient/libvoclient/examples/.deps/siap1.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/siap1.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/siap2.Po b/vendor/voclient/libvoclient/examples/.deps/siap2.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/siap2.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/siap3.Po b/vendor/voclient/libvoclient/examples/.deps/siap3.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/siap3.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/siap4.Po b/vendor/voclient/libvoclient/examples/.deps/siap4.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/siap4.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/simple.Po b/vendor/voclient/libvoclient/examples/.deps/simple.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/simple.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.deps/skybot.Po b/vendor/voclient/libvoclient/examples/.deps/skybot.Po
new file mode 100644
index 00000000..9ce06a81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.deps/skybot.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/vendor/voclient/libvoclient/examples/.gdb_history b/vendor/voclient/libvoclient/examples/.gdb_history
new file mode 100644
index 00000000..01b62df9
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/.gdb_history
@@ -0,0 +1,5 @@
+run
+where
+quit
+run
+quit
diff --git a/vendor/voclient/libvoclient/examples/Makefile b/vendor/voclient/libvoclient/examples/Makefile
new file mode 100644
index 00000000..54e888ca
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/Makefile
@@ -0,0 +1,213 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = VOClient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so.$(VERSION)
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE) -I../
+CFLAGS = -g -Wall -D$(PLATFORM) $(CINCS)
+
+F77 = g77
+FFLAGS = -g -Wall
+
+XC = xc
+XFLAGS =
+
+
+# list of source and include files
+
+SRCS = cone1.c cone2.c cone3.c \
+ siap1.c siap2.c siap3.c siap4.c siap5.c \
+ ssap1.c ssap2.c ssap3.c ssap4.c ssap5.c \
+ simple.c resolver.c skybot.c \
+ spptext.x \
+ registry1.c registry2.c registry3.c \
+ f77cone.f f77siap.f f77sesame.f f77registry.f
+OBJS = cone1.o cone2.o cone3.o \
+ siap1.o siap2.o siap3.o siap4.o siap4.o \
+ ssap1.o ssap2.o ssap3.o ssap4.o ssap4.o \
+ simple.o resolver.o skybot.o \
+ spptest.o \
+ registry1.o registry2.o registry3.o \
+ f77cone.o f77siap.o f77sesame.o f77registry.o
+INCS = ../VOClient.h
+
+
+# targets
+
+all: demo
+
+clean:
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf simple cone1 cone2 cone3
+ /bin/rm -rf siap1 siap2 siap3 siap4 siap5
+ /bin/rm -rf ssap1 ssap2 ssap3 ssap4 ssap5
+ /bin/rm -rf f77cone f77siap f77sesame f77registry spptest.e
+ /bin/rm -rf resolver registry1 registry2 registry3 skybot
+ /bin/rm -rf dataset*.fits *.o
+
+everything:
+ make clean
+ make all
+ make install
+
+help: HELP
+
+install: all
+
+
+
+###############################################################################
+# Unit test programs to be built.
+###############################################################################
+
+demo: simple resolver skybot spptest \
+ cone1 cone2 cone3 \
+ siap1 siap2 siap3 siap4 siap5 \
+ ssap1 ssap2 ssap3 ssap4 ssap5 \
+ f77cone f77siap f77sesame f77registry f77skybot \
+ registry1 registry2 registry3
+
+
+###########################
+# C Test programs.
+###########################
+
+simple: simple.c
+ $(CC) $(CFLAGS) -o simple simple.c -L../ -lVOClient -lm -lc
+
+cone1: cone1.c
+ $(CC) $(CFLAGS) -o cone1 cone1.c -L../ -lVOClient -lm -lc
+
+cone2: cone2.c
+ $(CC) $(CFLAGS) -o cone2 cone2.c -L../ -lVOClient -lm -lc
+
+cone3: cone3.c
+ $(CC) $(CFLAGS) -o cone3 cone3.c -L../ -lVOClient -lm -lc
+
+siap1: siap1.c
+ $(CC) $(CFLAGS) -o siap1 siap1.c -L../ -lVOClient -lm -lc
+
+siap2: siap2.c
+ $(CC) $(CFLAGS) -o siap2 siap2.c -L../ -lVOClient -lm -lc
+
+siap3: siap3.c
+ $(CC) $(CFLAGS) -o siap3 siap3.c -L../ -lVOClient -lm -lc
+
+siap4: siap4.c
+ $(CC) $(CFLAGS) -o siap4 siap4.c -L../ -lVOClient -lm -lc
+
+siap5: siap5.c
+ $(CC) $(CFLAGS) -o siap5 siap5.c -L../ -lVOClient -lm -lc
+
+ssap1: ssap1.c
+ $(CC) $(CFLAGS) -o ssap1 ssap1.c -L../ -lVOClient -lm -lc
+
+ssap2: ssap2.c
+ $(CC) $(CFLAGS) -o ssap2 ssap2.c -L../ -lVOClient -lm -lc
+
+ssap3: ssap3.c
+ $(CC) $(CFLAGS) -o ssap3 ssap3.c -L../ -lVOClient -lm -lc
+
+ssap4: ssap4.c
+ $(CC) $(CFLAGS) -o ssap4 ssap4.c -L../ -lVOClient -lm -lc
+
+ssap5: ssap5.c
+ $(CC) $(CFLAGS) -o ssap5 ssap5.c -L../ -lVOClient -lm -lc
+
+
+registry1: registry1.c
+ $(CC) $(CFLAGS) -o registry1 registry1.c -L../ -lVOClient -lm -lc
+
+registry2: registry2.c
+ $(CC) $(CFLAGS) -o registry2 registry2.c -L../ -lVOClient -lm -lc
+
+registry3: registry3.c
+ $(CC) $(CFLAGS) -o registry3 registry3.c -L../ -lVOClient -lm -lc
+
+
+resolver: resolver.c
+ $(CC) $(CFLAGS) -o resolver resolver.c -L../ -lVOClient -lm -lc
+
+skybot: skybot.c
+ $(CC) $(CFLAGS) -o skybot skybot.c -L../ -lVOClient -lm -lc
+
+
+
+###########################
+# Fortran Test programs.
+###########################
+
+f77cone: f77cone.f
+ $(F77) $(FFLAGS) -o f77cone f77cone.f -L../ -lVOClient -lm -lc
+
+f77siap: f77siap.f
+ $(F77) $(FFLAGS) -o f77siap f77siap.f -L../ -lVOClient -lm -lc
+
+f77sesame: f77sesame.f
+ $(F77) $(FFLAGS) -o f77sesame f77sesame.f -L../ -lVOClient -lm -lc
+
+f77skybot: f77skybot.f
+ $(F77) $(FFLAGS) -o f77skybot f77skybot.f -L../ -lVOClient -lm -lc
+
+f77registry: f77registry.f
+ $(F77) $(FFLAGS) -o f77registry f77registry.f -L../ -lVOClient -lm -lc
+
+
+
+###########################
+# IRAF Test programs.
+###########################
+
+spptest: spptest.x
+ $(XC) $(XFLAGS) -o spptest.e spptest.x -L../ -lVOClient
+
+
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/examples/Makefile.am b/vendor/voclient/libvoclient/examples/Makefile.am
new file mode 100644
index 00000000..80e1a3e8
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/Makefile.am
@@ -0,0 +1,62 @@
+## VOClient example/unit test programs
+## Process this file with automake to produce Makefile.in
+
+bin_PROGRAMS = cone1 cone2 cone3 registry1 registry2 \
+ registry3 resolver siap1 siap2 siap3 siap4 \
+ simple skybot
+
+VOCLIBS = $(top_builddir)/clientapi/libvoclient.la
+INCLUDES = -I$(top_srcdir)/clientapi
+
+cone1_SOURCES = cone1.c
+cone1_LDADD = $(VOCLIBS)
+cone1_DEPENDENCIES = $(VOCLIBS)
+
+cone2_SOURCES = cone2.c
+cone2_LDADD = $(VOCLIBS)
+cone2_DEPENDENCIES = $(VOCLIBS)
+
+cone3_SOURCES = cone3.c
+cone3_LDADD = $(VOCLIBS)
+cone3_DEPENDENCIES = $(VOCLIBS)
+
+registry1_SOURCES = registry1.c
+registry1_LDADD = $(VOCLIBS)
+registry1_DEPENDENCIES = $(VOCLIBS)
+
+registry2_SOURCES = registry2.c
+registry2_LDADD = $(VOCLIBS)
+registry2_DEPENDENCIES = $(VOCLIBS)
+
+registry3_SOURCES = registry3.c
+registry3_LDADD = $(VOCLIBS)
+registry3_DEPENDENCIES = $(VOCLIBS)
+
+resolver_SOURCES = resolver.c
+resolver_LDADD = $(VOCLIBS)
+resolver_DEPENDENCIES = $(VOCLIBS)
+
+siap1_SOURCES = siap1.c
+siap1_LDADD = $(VOCLIBS)
+siap1_DEPENDENCIES = $(VOCLIBS)
+
+siap2_SOURCES = siap2.c
+siap2_LDADD = $(VOCLIBS)
+siap2_DEPENDENCIES = $(VOCLIBS)
+
+siap3_SOURCES = siap3.c
+siap3_LDADD = $(VOCLIBS)
+siap3_DEPENDENCIES = $(VOCLIBS)
+
+siap4_SOURCES = siap4.c
+siap4_LDADD = $(VOCLIBS)
+siap4_DEPENDENCIES = $(VOCLIBS)
+
+simple_SOURCES = simple.c
+simple_LDADD = $(VOCLIBS)
+simple_DEPENDENCIES = $(VOCLIBS)
+
+skybot_SOURCES = skybot.c
+skybot_LDADD = $(VOCLIBS)
+skybot_DEPENDENCIES = $(VOCLIBS)
+
diff --git a/vendor/voclient/libvoclient/examples/Makefile.in b/vendor/voclient/libvoclient/examples/Makefile.in
new file mode 100644
index 00000000..7a352419
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/Makefile.in
@@ -0,0 +1,571 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = cone1$(EXEEXT) cone2$(EXEEXT) cone3$(EXEEXT) \
+ registry1$(EXEEXT) registry2$(EXEEXT) registry3$(EXEEXT) \
+ resolver$(EXEEXT) siap1$(EXEEXT) siap2$(EXEEXT) siap3$(EXEEXT) \
+ siap4$(EXEEXT) simple$(EXEEXT) skybot$(EXEEXT)
+subdir = clientapi/examples
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/config/ac_pkg_swig.m4 \
+ $(top_srcdir)/config/ac_python_devel.m4 \
+ $(top_srcdir)/config/ac_python_module.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_cone1_OBJECTS = cone1.$(OBJEXT)
+cone1_OBJECTS = $(am_cone1_OBJECTS)
+am__DEPENDENCIES_1 = $(top_builddir)/clientapi/libvoclient.la
+am_cone2_OBJECTS = cone2.$(OBJEXT)
+cone2_OBJECTS = $(am_cone2_OBJECTS)
+am_cone3_OBJECTS = cone3.$(OBJEXT)
+cone3_OBJECTS = $(am_cone3_OBJECTS)
+am_registry1_OBJECTS = registry1.$(OBJEXT)
+registry1_OBJECTS = $(am_registry1_OBJECTS)
+am_registry2_OBJECTS = registry2.$(OBJEXT)
+registry2_OBJECTS = $(am_registry2_OBJECTS)
+am_registry3_OBJECTS = registry3.$(OBJEXT)
+registry3_OBJECTS = $(am_registry3_OBJECTS)
+am_resolver_OBJECTS = resolver.$(OBJEXT)
+resolver_OBJECTS = $(am_resolver_OBJECTS)
+am_siap1_OBJECTS = siap1.$(OBJEXT)
+siap1_OBJECTS = $(am_siap1_OBJECTS)
+am_siap2_OBJECTS = siap2.$(OBJEXT)
+siap2_OBJECTS = $(am_siap2_OBJECTS)
+am_siap3_OBJECTS = siap3.$(OBJEXT)
+siap3_OBJECTS = $(am_siap3_OBJECTS)
+am_siap4_OBJECTS = siap4.$(OBJEXT)
+siap4_OBJECTS = $(am_siap4_OBJECTS)
+am_simple_OBJECTS = simple.$(OBJEXT)
+simple_OBJECTS = $(am_simple_OBJECTS)
+am_skybot_OBJECTS = skybot.$(OBJEXT)
+skybot_OBJECTS = $(am_skybot_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(cone1_SOURCES) $(cone2_SOURCES) $(cone3_SOURCES) \
+ $(registry1_SOURCES) $(registry2_SOURCES) $(registry3_SOURCES) \
+ $(resolver_SOURCES) $(siap1_SOURCES) $(siap2_SOURCES) \
+ $(siap3_SOURCES) $(siap4_SOURCES) $(simple_SOURCES) \
+ $(skybot_SOURCES)
+DIST_SOURCES = $(cone1_SOURCES) $(cone2_SOURCES) $(cone3_SOURCES) \
+ $(registry1_SOURCES) $(registry2_SOURCES) $(registry3_SOURCES) \
+ $(resolver_SOURCES) $(siap1_SOURCES) $(siap2_SOURCES) \
+ $(siap3_SOURCES) $(siap4_SOURCES) $(simple_SOURCES) \
+ $(skybot_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+VOCLIBS = $(top_builddir)/clientapi/libvoclient.la
+INCLUDES = -I$(top_srcdir)/clientapi
+cone1_SOURCES = cone1.c
+cone1_LDADD = $(VOCLIBS)
+cone1_DEPENDENCIES = $(VOCLIBS)
+cone2_SOURCES = cone2.c
+cone2_LDADD = $(VOCLIBS)
+cone2_DEPENDENCIES = $(VOCLIBS)
+cone3_SOURCES = cone3.c
+cone3_LDADD = $(VOCLIBS)
+cone3_DEPENDENCIES = $(VOCLIBS)
+registry1_SOURCES = registry1.c
+registry1_LDADD = $(VOCLIBS)
+registry1_DEPENDENCIES = $(VOCLIBS)
+registry2_SOURCES = registry2.c
+registry2_LDADD = $(VOCLIBS)
+registry2_DEPENDENCIES = $(VOCLIBS)
+registry3_SOURCES = registry3.c
+registry3_LDADD = $(VOCLIBS)
+registry3_DEPENDENCIES = $(VOCLIBS)
+resolver_SOURCES = resolver.c
+resolver_LDADD = $(VOCLIBS)
+resolver_DEPENDENCIES = $(VOCLIBS)
+siap1_SOURCES = siap1.c
+siap1_LDADD = $(VOCLIBS)
+siap1_DEPENDENCIES = $(VOCLIBS)
+siap2_SOURCES = siap2.c
+siap2_LDADD = $(VOCLIBS)
+siap2_DEPENDENCIES = $(VOCLIBS)
+siap3_SOURCES = siap3.c
+siap3_LDADD = $(VOCLIBS)
+siap3_DEPENDENCIES = $(VOCLIBS)
+siap4_SOURCES = siap4.c
+siap4_LDADD = $(VOCLIBS)
+siap4_DEPENDENCIES = $(VOCLIBS)
+simple_SOURCES = simple.c
+simple_LDADD = $(VOCLIBS)
+simple_DEPENDENCIES = $(VOCLIBS)
+skybot_SOURCES = skybot.c
+skybot_LDADD = $(VOCLIBS)
+skybot_DEPENDENCIES = $(VOCLIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign clientapi/examples/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign clientapi/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+cone1$(EXEEXT): $(cone1_OBJECTS) $(cone1_DEPENDENCIES)
+ @rm -f cone1$(EXEEXT)
+ $(LINK) $(cone1_LDFLAGS) $(cone1_OBJECTS) $(cone1_LDADD) $(LIBS)
+cone2$(EXEEXT): $(cone2_OBJECTS) $(cone2_DEPENDENCIES)
+ @rm -f cone2$(EXEEXT)
+ $(LINK) $(cone2_LDFLAGS) $(cone2_OBJECTS) $(cone2_LDADD) $(LIBS)
+cone3$(EXEEXT): $(cone3_OBJECTS) $(cone3_DEPENDENCIES)
+ @rm -f cone3$(EXEEXT)
+ $(LINK) $(cone3_LDFLAGS) $(cone3_OBJECTS) $(cone3_LDADD) $(LIBS)
+registry1$(EXEEXT): $(registry1_OBJECTS) $(registry1_DEPENDENCIES)
+ @rm -f registry1$(EXEEXT)
+ $(LINK) $(registry1_LDFLAGS) $(registry1_OBJECTS) $(registry1_LDADD) $(LIBS)
+registry2$(EXEEXT): $(registry2_OBJECTS) $(registry2_DEPENDENCIES)
+ @rm -f registry2$(EXEEXT)
+ $(LINK) $(registry2_LDFLAGS) $(registry2_OBJECTS) $(registry2_LDADD) $(LIBS)
+registry3$(EXEEXT): $(registry3_OBJECTS) $(registry3_DEPENDENCIES)
+ @rm -f registry3$(EXEEXT)
+ $(LINK) $(registry3_LDFLAGS) $(registry3_OBJECTS) $(registry3_LDADD) $(LIBS)
+resolver$(EXEEXT): $(resolver_OBJECTS) $(resolver_DEPENDENCIES)
+ @rm -f resolver$(EXEEXT)
+ $(LINK) $(resolver_LDFLAGS) $(resolver_OBJECTS) $(resolver_LDADD) $(LIBS)
+siap1$(EXEEXT): $(siap1_OBJECTS) $(siap1_DEPENDENCIES)
+ @rm -f siap1$(EXEEXT)
+ $(LINK) $(siap1_LDFLAGS) $(siap1_OBJECTS) $(siap1_LDADD) $(LIBS)
+siap2$(EXEEXT): $(siap2_OBJECTS) $(siap2_DEPENDENCIES)
+ @rm -f siap2$(EXEEXT)
+ $(LINK) $(siap2_LDFLAGS) $(siap2_OBJECTS) $(siap2_LDADD) $(LIBS)
+siap3$(EXEEXT): $(siap3_OBJECTS) $(siap3_DEPENDENCIES)
+ @rm -f siap3$(EXEEXT)
+ $(LINK) $(siap3_LDFLAGS) $(siap3_OBJECTS) $(siap3_LDADD) $(LIBS)
+siap4$(EXEEXT): $(siap4_OBJECTS) $(siap4_DEPENDENCIES)
+ @rm -f siap4$(EXEEXT)
+ $(LINK) $(siap4_LDFLAGS) $(siap4_OBJECTS) $(siap4_LDADD) $(LIBS)
+simple$(EXEEXT): $(simple_OBJECTS) $(simple_DEPENDENCIES)
+ @rm -f simple$(EXEEXT)
+ $(LINK) $(simple_LDFLAGS) $(simple_OBJECTS) $(simple_LDADD) $(LIBS)
+skybot$(EXEEXT): $(skybot_OBJECTS) $(skybot_DEPENDENCIES)
+ @rm -f skybot$(EXEEXT)
+ $(LINK) $(skybot_LDFLAGS) $(skybot_OBJECTS) $(skybot_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cone1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cone2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cone3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/registry1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/registry2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/registry3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siap1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siap2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siap3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siap4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skybot.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/vendor/voclient/libvoclient/examples/Makefile.man b/vendor/voclient/libvoclient/examples/Makefile.man
new file mode 100644
index 00000000..9e3b6846
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/Makefile.man
@@ -0,0 +1,192 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = voclient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so.$(VERSION)
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE) -I../
+CFLAGS = -g -Wall -D$(PLATFORM) $(CINCS)
+
+F77 = g77
+FFLAGS = -g -Wall
+
+XC = xc
+XFLAGS =
+
+
+# list of source and include files
+
+SRCS = cone1.c cone2.c cone3.c \
+ siap1.c siap2.c siap3.c siap4.c \
+ simple.c resolver.c skybot.c \
+ spptext.x \
+ registry1.c registry2.c registry3.c \
+ f77cone.f f77siap.f f77sesame.f f77registry.f
+OBJS = cone1.o cone2.o cone3.o \
+ siap1.o siap2.o siap3.o siap4.o \
+ simple.o resolver.o skybot.o \
+ spptest.o \
+ registry1.o registry2.o registry3.o \
+ f77cone.o f77siap.o f77sesame.o f77registry.o
+INCS = ../VOClient.h
+
+
+# targets
+
+all: demo
+
+clean:
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf simple cone1 cone2 cone3
+ /bin/rm -rf siap1 siap2 siap3 siap4
+ /bin/rm -rf f77cone f77siap f77sesame f77registry spptest.e
+ /bin/rm -rf resolver registry1 registry2 registry3
+ /bin/rm -rf skybot f77skybot
+ /bin/rm -rf dataset*.fits *.o
+
+everything:
+ make clean
+ make all
+ make install
+
+help: HELP
+
+install: all
+
+
+
+###############################################################################
+# Unit test programs to be built.
+###############################################################################
+
+demo: simple resolver skybot spptest \
+ cone1 cone2 cone3 \
+ siap1 siap2 siap3 siap4 \
+ f77cone f77siap f77sesame f77registry f77skybot \
+ registry1 registry2 registry3
+
+
+###########################
+# C Test programs.
+###########################
+
+simple: simple.c
+ $(CC) $(CFLAGS) -o simple simple.c -L../ -lvoclient -lm -lc
+
+cone1: cone1.c
+ $(CC) $(CFLAGS) -o cone1 cone1.c -L../ -lvoclient -lm -lc
+
+cone2: cone2.c
+ $(CC) $(CFLAGS) -o cone2 cone2.c -L../ -lvoclient -lm -lc
+
+cone3: cone3.c
+ $(CC) $(CFLAGS) -o cone3 cone3.c -L../ -lvoclient -lm -lc
+
+siap1: siap1.c
+ $(CC) $(CFLAGS) -o siap1 siap1.c -L../ -lvoclient -lm -lc
+
+siap2: siap2.c
+ $(CC) $(CFLAGS) -o siap2 siap2.c -L../ -lvoclient -lm -lc
+
+siap3: siap3.c
+ $(CC) $(CFLAGS) -o siap3 siap3.c -L../ -lvoclient -lm -lc
+
+siap4: siap4.c
+ $(CC) $(CFLAGS) -o siap4 siap4.c -L../ -lvoclient -lm -lc
+
+
+registry1: registry1.c
+ $(CC) $(CFLAGS) -o registry1 registry1.c -L../ -lvoclient -lm -lc
+
+registry2: registry2.c
+ $(CC) $(CFLAGS) -o registry2 registry2.c -L../ -lvoclient -lm -lc
+
+registry3: registry3.c
+ $(CC) $(CFLAGS) -o registry3 registry3.c -L../ -lvoclient -lm -lc
+
+
+resolver: resolver.c
+ $(CC) $(CFLAGS) -o resolver resolver.c -L../ -lvoclient -lm -lc
+
+skybot: skybot.c
+ $(CC) $(CFLAGS) -o skybot skybot.c -L../ -lvoclient -lm -lc
+
+
+
+###########################
+# Fortran Test programs.
+###########################
+
+f77cone: f77cone.f
+ $(F77) $(FFLAGS) -o f77cone f77cone.f -L../ -lvoclient -lm -lc
+
+f77siap: f77siap.f
+ $(F77) $(FFLAGS) -o f77siap f77siap.f -L../ -lvoclient -lm -lc
+
+f77sesame: f77sesame.f
+ $(F77) $(FFLAGS) -o f77sesame f77sesame.f -L../ -lvoclient -lm -lc
+
+f77skybot: f77skybot.f
+ $(F77) $(FFLAGS) -o f77skybot f77skybot.f -L../ -lvoclient -lm -lc
+
+f77registry: f77registry.f
+ $(F77) $(FFLAGS) -o f77registry f77registry.f -L../ -lvoclient -lm -lc
+
+
+
+###########################
+# IRAF Test programs.
+###########################
+
+spptest: spptest.x
+ $(XC) $(XFLAGS) -o spptest.e spptest.x -L../ -lvoclient
+
+
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/examples/Makefile.orig b/vendor/voclient/libvoclient/examples/Makefile.orig
new file mode 100644
index 00000000..0e239af5
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/Makefile.orig
@@ -0,0 +1,191 @@
+#///////////////////////////////////////////////////////////////////////////////
+#//
+#//
+#///////////////////////////////////////////////////////////////////////////////
+
+# primary dependencies
+
+NAME = voclient
+VERSION = 1.0
+PLATFORM := $(shell uname -s)
+#PLATFORM = LINUX
+#PLATFORM = MACOSX
+#PLATFORM = CYGWIN
+HERE := $(shell /bin/pwd)
+
+
+# secondary dependencies
+
+LIBBASE = lib$(NAME)
+STATICLIB = $(HERE)/$(LIBBASE).a
+SHAREDLIB = $(HERE)/$(LIBBASE).so.$(VERSION)
+
+
+# stuff that's precious to keep
+
+.PRECIOUS: $(STATICLIB) $(SHAREDLIB)
+.KEEP_STATE:
+
+
+# includes, flags and libraries
+CC = gcc
+CINCS = -I$(HERE) -I../
+CFLAGS = -g -Wall -D$(PLATFORM) $(CINCS)
+
+F77 = g77
+FFLAGS = -g -Wall
+
+XC = xc
+XFLAGS =
+
+
+# list of source and include files
+
+SRCS = cone1.c cone2.c cone3.c \
+ siap1.c siap2.c siap3.c siap4.c \
+ simple.c resolver.c skybot.c \
+ spptext.x \
+ registry1.c registry2.c registry3.c \
+ f77cone.f f77siap.f f77sesame.f f77registry.f
+OBJS = cone1.o cone2.o cone3.o \
+ siap1.o siap2.o siap3.o siap4.o \
+ simple.o resolver.o skybot.o \
+ spptest.o \
+ registry1.o registry2.o registry3.o \
+ f77cone.o f77siap.o f77sesame.o f77registry.o
+INCS = ../VOClient.h
+
+
+# targets
+
+all: demo
+
+clean:
+ /bin/rm -rf .make.state .nse_depinfo
+ /bin/rm -rf simple cone1 cone2 cone3
+ /bin/rm -rf siap1 siap2 siap3 siap4 skybot
+ /bin/rm -rf f77cone f77siap f77sesame f77registry spptest.e
+ /bin/rm -rf resolver registry1 registry2 registry3
+ /bin/rm -rf dataset*.fits *.o
+
+everything:
+ make clean
+ make all
+ make install
+
+help: HELP
+
+install: all
+
+
+
+###############################################################################
+# Unit test programs to be built.
+###############################################################################
+
+demo: simple resolver skybot spptest \
+ cone1 cone2 cone3 \
+ siap1 siap2 siap3 siap4 \
+ f77cone f77siap f77sesame f77registry f77skybot \
+ registry1 registry2 registry3
+
+
+###########################
+# C Test programs.
+###########################
+
+simple: simple.c
+ $(CC) $(CFLAGS) -o simple simple.c -L../ -lvoclient -lm -lc
+
+cone1: cone1.c
+ $(CC) $(CFLAGS) -o cone1 cone1.c -L../ -lvoclient -lm -lc
+
+cone2: cone2.c
+ $(CC) $(CFLAGS) -o cone2 cone2.c -L../ -lvoclient -lm -lc
+
+cone3: cone3.c
+ $(CC) $(CFLAGS) -o cone3 cone3.c -L../ -lvoclient -lm -lc
+
+siap1: siap1.c
+ $(CC) $(CFLAGS) -o siap1 siap1.c -L../ -lvoclient -lm -lc
+
+siap2: siap2.c
+ $(CC) $(CFLAGS) -o siap2 siap2.c -L../ -lvoclient -lm -lc
+
+siap3: siap3.c
+ $(CC) $(CFLAGS) -o siap3 siap3.c -L../ -lvoclient -lm -lc
+
+siap4: siap4.c
+ $(CC) $(CFLAGS) -o siap4 siap4.c -L../ -lvoclient -lm -lc
+
+
+registry1: registry1.c
+ $(CC) $(CFLAGS) -o registry1 registry1.c -L../ -lvoclient -lm -lc
+
+registry2: registry2.c
+ $(CC) $(CFLAGS) -o registry2 registry2.c -L../ -lvoclient -lm -lc
+
+registry3: registry3.c
+ $(CC) $(CFLAGS) -o registry3 registry3.c -L../ -lvoclient -lm -lc
+
+
+resolver: resolver.c
+ $(CC) $(CFLAGS) -o resolver resolver.c -L../ -lvoclient -lm -lc
+
+skybot: skybot.c
+ $(CC) $(CFLAGS) -o skybot skybot.c -L../ -lvoclient -lm -lc
+
+
+
+###########################
+# Fortran Test programs.
+###########################
+
+f77cone: f77cone.f
+ $(F77) $(FFLAGS) -o f77cone f77cone.f -L../ -lvoclient -lm -lc
+
+f77siap: f77siap.f
+ $(F77) $(FFLAGS) -o f77siap f77siap.f -L../ -lvoclient -lm -lc
+
+f77sesame: f77sesame.f
+ $(F77) $(FFLAGS) -o f77sesame f77sesame.f -L../ -lvoclient -lm -lc
+
+f77skybot: f77skybot.f
+ $(F77) $(FFLAGS) -o f77skybot f77skybot.f -L../ -lvoclient -lm -lc
+
+f77registry: f77registry.f
+ $(F77) $(FFLAGS) -o f77registry f77registry.f -L../ -lvoclient -lm -lc
+
+
+
+###########################
+# IRAF Test programs.
+###########################
+
+spptest: spptest.x
+ $(XC) $(XFLAGS) -o spptest.e spptest.x -L../ -lvoclient
+
+
+
+
+
+
+###############################################################################
+# Leave this stuff alone.
+###############################################################################
+
+$(STATICLIB): $(SRCS:%.c=Static/%.o)
+ /usr/bin/ar rv $@ $?
+Static/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -c $< -o $@
+Static:
+ /bin/mkdir $@
+ chmod 777 $@
+
+$(SHAREDLIB): $(SRCS:%.c=Shared/%.o)
+ /usr/bin/ld -shared -o $@ $? -lc -ldl
+Shared/%.o: %.c $(INCS)
+ /usr/bin/gcc $(CINCS) $(CFLAGS) -fpic -shared -c $< -o $@
+Shared:
+ /bin/mkdir $@
+ chmod 777 $@
diff --git a/vendor/voclient/libvoclient/examples/README b/vendor/voclient/libvoclient/examples/README
new file mode 100644
index 00000000..b2308316
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/README
@@ -0,0 +1,2 @@
+EXAMPLES - Simple sample client applications, illustrating the use of
+VOClient in various languages or environments.
diff --git a/vendor/voclient/libvoclient/examples/cone1.c b/vendor/voclient/libvoclient/examples/cone1.c
new file mode 100644
index 00000000..8547bd80
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/cone1.c
@@ -0,0 +1,156 @@
+/************************************************************************
+ * Call a cone search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: cone1 ra dec sr [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+double ra = 12.0; /* default values */
+double dec = 12.0;
+double sr = 0.1;
+
+#ifdef USNOB
+char *service = \
+ "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&";
+#else
+ char *service = "http://chart.stsci.edu/GSCVO/GSC22VO.jsp?";
+#endif
+
+char *server = "6200:localhost";
+
+static void callConeService (char *url, double ra, double dec, double sr);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ sr = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: cone1 [-ds server] ra dec sr [coneURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Cone Service and summarize the results.
+ */
+ callConeService (service, ra, dec, sr);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Cone search service and summarize results.
+ */
+static void
+callConeService (char *service_url, double ra, double dec, double sr)
+{
+ char *voc_opts = NULL;
+ int i=0, nrec=0, nattr=0;
+ char *attrList = NULL, *ip;
+
+ DAL cone; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ cone = voc_openConeConnection (service_url); /* open a connection */
+
+ query = voc_getConeQuery (cone, ra, dec, sr); /* form a query */
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, CONE_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ if ((nrec = voc_getRecordCount (qr)) <= 0) { /* summarize response */
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ printf ("# --- Summary output ---\n#\n");
+
+ attrList = voc_getAttrList (rec);
+ printf ("# Attribute List:\n# ");
+ for (ip = attrList; *ip; ip++)
+ if (isspace (*ip))
+ printf ("\n# ");
+ else
+ putchar (*ip);
+ printf ("\n#\n");
+ }
+
+ /* Summarize and print selected query results.
+ */
+ for (i = 0; i < nrec; i++) {
+ char *s_id, *s_ra, *s_dec, *s_class;
+
+ rec = voc_getRecord (qr, i); /* get a row in the table */
+
+ /* The getStringAttr method returns an allocated pointer to a string
+ * we'll need to free below, however we can use a NULL pointer to
+ * know when no data were found.
+ */
+ s_id = voc_getStringAttr (rec, "ID_MAIN");
+ s_ra = voc_getStringAttr (rec, "POS_EQ_RA_MAIN");
+ s_dec = voc_getStringAttr (rec, "POS_EQ_DEC_MAIN");
+ s_class = voc_getStringAttr (rec, "CLASS_OBJECT");
+
+
+ printf ("id=%-16s ra=%s\tdec=%s\tclass=%s\n",
+ (s_id ? s_id : "<null>"),
+ (s_ra ? s_ra : "<null>"),
+ (s_dec ? s_dec : "<null>"),
+ (s_class ? s_class : "<null>"));
+
+ if (s_id) free ((void *) s_id); /* clean up temp pointers */
+ if (s_ra) free ((void *) s_ra);
+ if (s_dec) free ((void *) s_dec);
+ if (s_class) free ((void *) s_class);
+ }
+
+ free ((void *) attrList);
+
+ voc_closeConnection (cone); /* close the cone connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/cone2.c b/vendor/voclient/libvoclient/examples/cone2.c
new file mode 100644
index 00000000..58126507
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/cone2.c
@@ -0,0 +1,111 @@
+/************************************************************************
+ * Call a cone search service and print the results as a CSV file.
+ *
+ * Usage: cone2 ra dec sr [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 12.0;
+double sr = 0.1;
+
+#ifdef USNOB
+char *service = \
+ "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&";
+#else
+ char *service = "http://chart.stsci.edu/GSCVO/GSC22VO.jsp?";
+#endif
+
+char *fmt = "ascii";
+char *server = "6200:localhost";
+
+static void callConeService (char *url, double ra, double dec, double sr,
+ char *fmt);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ sr = atof (argv[arg++]);
+ if (arg < argc)
+ fmt = argv[arg++];
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr,
+ "Usage: cone1 [-ds server] ra dec sr [fmt [coneURL] ]\n");
+ exit(1);
+ }
+
+ /* Now call the Cone Service and summarize the results.
+ */
+ callConeService (service, ra, dec, sr, fmt);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Cone search service and summarize results.
+ */
+static void
+callConeService (char *service_url, double ra, double dec, double sr, char *fmt)
+{
+ char *voc_opts = NULL;
+ char *res = NULL;
+
+ DAL cone; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ cone = voc_openConeConnection (service_url); /* open a connection */
+
+ query = voc_getConeQuery (cone, ra, dec, sr); /* form a query */
+
+ switch (fmt[0]) {
+ case 'c': res = voc_executeCSV (query); break;
+ case 't': res = voc_executeTSV (query); break;
+ case 'a': res = voc_executeASCII (query); break;
+ case 'v': res = voc_executeVOTable (query); break;
+ default:
+ fprintf (stderr, "Invalid format specification '%s'\n", fmt);
+ exit (1);
+ }
+ write (fileno(stdout), res, strlen (res));
+ printf ("\n");
+
+ free ((void *) res); /* free local storage */
+
+ voc_closeConnection (cone); /* close the cone connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/cone3.c b/vendor/voclient/libvoclient/examples/cone3.c
new file mode 100644
index 00000000..f8eb33db
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/cone3.c
@@ -0,0 +1,97 @@
+/************************************************************************
+ * Call a cone search service and dump the raw VOTable result.
+ *
+ * Usage: cone3 ra dec sr [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 12.0;
+double sr = 0.1;
+
+#ifdef USNOB
+char *service = \
+ "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&";
+#else
+ char *service = "http://chart.stsci.edu/GSCVO/GSC22VO.jsp?";
+#endif
+
+char *server = "6200:localhost";
+
+static void callConeService (char *url, double ra, double dec, double sr);
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ sr = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: cone1 [-ds server] ra dec sr [coneURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Cone Service and summarize the results.
+ */
+ callConeService (service, ra, dec, sr);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Cone search service and summarize results.
+ */
+static void
+callConeService (char *service_url, double ra, double dec, double sr)
+{
+ char *voc_opts = NULL;
+ char *vot = NULL;
+
+ DAL cone; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ cone = voc_openConeConnection (service_url); /* open a connection */
+
+ query = voc_getConeQuery (cone, ra, dec, sr); /* form a query */
+
+ vot = voc_executeVOTable (query);
+ write (fileno(stdout), vot, strlen (vot));
+ printf ("\n\n");
+
+ free ((void *) vot); /* free local storage */
+
+ voc_closeConnection (cone); /* close the cone connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/datascope.cl b/vendor/voclient/libvoclient/examples/datascope.cl
new file mode 100644
index 00000000..51cbaa81
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/datascope.cl
@@ -0,0 +1,124 @@
+#{ DATASCOPE -- Toy DataScope task that returns a table of data services
+# and the number of results that can be expected for each given either an
+# input image or object name. For image input, the WCS footprint is computed
+# and used as the search parameters; For an object name the coordinates are
+# resolved and the search radius specified by the user is used.
+#
+# Examples:
+# 1) Query a specific set of services, finding how many hits would
+# be returned against the dev$wpix test image
+#
+# cl> datascope dev$wpix service="GSC2.2,USNO-B1,DSS2"
+# #Num ShortName Count IVO Identifier
+# #--- --------- ----- --------------
+# 1 GSC2.2 50 ivo://archive.stsci.edu/gsc/gsc2.2
+# 2 USNO-B1 344 ivo://fs.usno/cat/usnob
+# 3 DSS2 1 ivo://archive.stsci.edu/dss/dss2
+#
+# 2) Query all Cone Services offering Infrared data against our image
+#
+# cl> datascope dev$wpis service="cone" bandpass="infrared"
+#
+# REQUIRES: NVO package and VO-CL builtin functions.
+#
+# M. Fitzpatrick, Aug 2006
+
+
+procedure datascope (what)
+
+string what { prompt = "Object Name or Image" }
+string service = "cone" { prompt = "Service Type or list" }
+string bandpass = "optical" { prompt = "Bandpass of search" }
+real sr = 0.25 { prompt = "search radius" }
+
+bool verbose = yes { prompt = "Verbose output?" }
+int status = 0 { prompt = "Service status code" }
+
+begin
+ string url, tname, stype, this, bpass
+ string sname, ivorn, regResults, junk, svctyp
+ real ra, dec, size
+ bool verb
+ int dal, index, count
+
+ this = what
+ bpass = bandpass
+ verb = verbose
+ stype = service
+
+ if (imaccess (this)) {
+ iferr { wcsinfo (this) } then {
+ error (0, "Cannot determine image coords for `"//this//"'")
+ } else {
+ ra = wcsinfo.midx
+ dec = wcsinfo.midy
+ size = max (wcsinfo.width, wcsinfo.height) / 60.0
+ }
+
+ } else {
+ # Assume it's an object name, resolve to coords.
+ sesame (this)
+ if (sesame.status < 0)
+ error (0, "Cannot resolve object `"//this//"'")
+ ra = sesame.ra
+ dec = sesame.dec
+ size = sr
+ }
+
+
+ # Now do a Registry query for the given service type and bandpass.
+ regResults = mktemp ("tmp$reg")
+ if (stype == "cone" || stype == "siap") {
+ registry ("", svc=stype, bandpass=bpass, verb-, header-,
+ >& regResults)
+
+ } else {
+ s1 = mktemp ("tmp$reg")
+ print (stype) | translit ("STDIN",",","\n",del-, > s1)
+ list = s1
+ i = 1
+
+ # Convert the list of specific services to a table we use below to
+ # query each.
+ while (fscan (list, s2) != EOF) {
+ printf ("%4d %s\n", i,
+ regResolver (s2,"","ShortName,ServiceType,Identifier"),
+ >> regResults)
+ i = i + 1
+ }
+ delete (s1, verify-)
+ }
+
+
+ if (verbose) {
+ printf ("#\n")
+ printf ("# Search Terms: RA=%H Dec=%h SR=%.3f\n", ra, dec, size)
+ printf ("# Service Type: %s\n", stype)
+ printf ("#\n#\n")
+ printf ("#Num ShortName Count IVO Identifier\n")
+ printf ("#--- --------- ----- --------------\n")
+ }
+
+ # Loop over the registry and query by service type.
+ list = regResults
+ while (fscan (list, index, sname, svctyp, ivorn) != EOF) {
+ printf ("%4d %-14.14s ", index, sname)
+
+ if (substr (svctyp,1,4) == "CONE")
+ count = dalRecordCount (\
+ dalConeSvc(\
+ regResolver(ivorn), ra, dec, size))
+ else if (substr (svctyp,1,4) == "SIAP")
+ count = dalRecordCount (\
+ dalSiapSvc(\
+ regResolver(ivorn), ra, dec, size, size))
+
+ if (count < 0)
+ printf (" Error %s\n", ivorn)
+ else
+ printf ("%6d %s\n", count, ivorn)
+ }
+
+ # Clean up.
+ delete (regResults, verify-)
+end
diff --git a/vendor/voclient/libvoclient/examples/f77cone.f b/vendor/voclient/libvoclient/examples/f77cone.f
new file mode 100644
index 00000000..5a4eeff2
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/f77cone.f
@@ -0,0 +1,108 @@
+C
+C F77CONE -- Fortran example task of VOClient interface
+C
+C M.Fitzpatrick, NOAO, Jul 2006
+
+ program f77cone
+
+ double precision ra, dec, sr
+ character service*80
+
+C Initialize values. Note the VOClient library assumes all floating
+C point values are double precision.
+ ra = 12.0d0
+ dec = 12.0d0
+ sr = 0.1d0
+ service = "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&"
+
+ call coneservice (service, ra, dec, sr)
+
+ stop
+ end
+
+
+C Simple test routine to call a Cone search service and summarize results.
+
+ subroutine coneservice (service, ra, dec, sr)
+
+ character*80 service, fmt, sid, sra, sdec
+ character*160 attrlist, qstring
+ integer nrec, nattr, len, ier, index
+ integer cone, query, qr, rec
+ double precision ra, dec, sr
+
+
+C Initialize the VOClient
+ call vfinitvoclient ("", ier)
+
+C Get a new connection to the named service and form a query.
+ call vfopenconeconnection (service, cone, ier)
+ call vfgetconequery (cone, ra, dec, sr, query)
+
+C Print the query string we're about to execute.
+ index = 1
+ call vfgetquerystring (query, 3, index, qstring, len)
+ print *, "Executing Query: "
+ print *, qstring
+ print *, ""
+
+
+C Execute the query, get back a response handle 'qr'.
+ call vfexecquery (query, qr)
+
+C Now summarize the response.
+ call vfgetrecordcount (qr, nrec)
+ if (nrec <= 0) then
+ print *, "No records matched"
+ return
+ endif
+
+C Get a sample record so we can summarize columns.
+ call vfgetrecord (qr, 1, rec)
+ if (rec > 0) then
+ call vfgetattrcount (rec, nattr)
+ endif
+
+ print *, "# returns ", nrec, " records of ", nattr, " attrs"
+ print *, "#"
+ print *, "# --- Summary output ---"
+ print *, "#"
+
+C Get the list of attributes. Note that when receiving a string value
+C the interface requires you specify the max length of the string and
+C will return the actual length of the string.
+ call vfgetattrlist (rec, attrlist, len)
+ print *, "# ", attrlist
+ print *, "#"
+
+
+C Summarize and print selected query results. Note the results table
+C is one-indexed in this interface. We also show how to catch an invalid
+C record descriptor. To try this, change the starting index to 0 instead
+C of 1.
+
+ do i = 1, nrec, 1
+
+C Get the row in the table and then select values to print
+ call vfgetrecord (qr, i, rec)
+ if (rec > 0) then
+ call vfgetstringattr (rec, "ID_MAIN", sid, len)
+ call vfgetstringattr (rec, "POS_EQ_RA_MAIN", sra, len)
+ call vfgetstringattr (rec, "POS_EQ_DEC_MAIN", sdec, len)
+ else
+ print *, "Error getting record number: ", i
+ goto 100
+ endif
+
+ fmt = '(i3,a6,a18,a6,a18,a6,a18)'
+ write (*, fmt) i, " id= ", sid, " ra= ", sra, " dec= ", sdec
+ enddo
+100 continue
+
+
+C Close the connection and shut down the VOClient server.
+ call vfcloseconnection (cone)
+ call vfclosevoclient (1, ier)
+
+ return
+ end
diff --git a/vendor/voclient/libvoclient/examples/f77registry.f b/vendor/voclient/libvoclient/examples/f77registry.f
new file mode 100644
index 00000000..d7f2fb21
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/f77registry.f
@@ -0,0 +1,45 @@
+C
+C F77REGISTRY -- Fortran example task of VOClient Registry interface
+C
+C M.Fitzpatrick, NOAO, July 2006
+
+ program f77registry
+
+ character svc*10, term*60
+ character title*70, type*20, sname*20
+ integer result, ier, count
+
+ svc = "cone"
+ term = "cool stars"
+
+c Initialize the VOClient interface
+ call vfinitvoclient ("", ier)
+
+c Do a keyword Registry search of Cone services.
+ call vfregsearchbysvc (svc, term, 0, result, ier)
+
+C Summarize the results
+ call vfresgetcount (result, count)
+ print *, "#"
+ print *, "# Service Type: ", svc
+ print *, "# Search Term: ", term
+ print *, "#"
+ print *, "# Found ", count, " matching records"
+ print *, "#"
+
+ do 10 i = 1, count
+
+ call vfresgetstr (result, "Title", i, title, len)
+ call vfresgetstr (result, "ShortName", i, sname, len)
+ call vfresgetstr (result, "Type", i, type, len)
+
+ print *, "----------------------------------------------------"
+ print *, "Title: ", title
+ print *, "Type: ", type, " ShortName: ", sname
+
+10 continue
+
+c Shut down the VO Client
+ call vfclosevoclient (0)
+ stop
+ end
diff --git a/vendor/voclient/libvoclient/examples/f77sesame.f b/vendor/voclient/libvoclient/examples/f77sesame.f
new file mode 100644
index 00000000..16c1246f
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/f77sesame.f
@@ -0,0 +1,23 @@
+C
+C F77SESAME -- Fortran example task of VOClient Sesame interface
+C
+C M.Fitzpatrick, NOAO, Jul 2006
+
+ program f77sesame
+
+ double precision ra, dec
+ character target*10, pos*24
+ integer sr, len
+
+ target = "ngc1234"
+
+ call vfnameresolver (target, sr)
+ call vfresolverra (sr, ra)
+ call vfresolverdec (sr, dec)
+ call vfresolverpos (sr, pos, len)
+
+ print *, "Target: ", target, " ra=", ra, " dec=", dec
+ print *, " (", pos,")"
+
+ stop
+ end
diff --git a/vendor/voclient/libvoclient/examples/f77siap.f b/vendor/voclient/libvoclient/examples/f77siap.f
new file mode 100644
index 00000000..bcb1c1a2
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/f77siap.f
@@ -0,0 +1,118 @@
+C
+C F77SIAP -- Fortran example task of VOClient interface
+C
+C M.Fitzpatrick, NOAO, Jul 2006
+
+ program f77siap
+
+ double precision ra, dec, size
+ character service*80, ffmt*80
+ integer maxim
+
+C Initialize values. Note the VOClient library assumes all floating
+C point values are double precision.
+ ra = 12.0d0
+ dec = 0.0d0
+ size = 0.5d0
+C service = "http://envoy.cacr.caltech.edu:8080/questsiap/siap?band=JU&"
+C service = "http://www-gsss.stsci.edu/gscvo/DSS2.jsp"
+ service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?"
+
+ ffmt = "image/fits"
+ maxim = 5
+
+ call siapservice (service, ra, dec, size, size, ffmt, maxim)
+
+ stop
+ end
+
+
+C Simple test routine to call a Cone search service and summarize results.
+
+ subroutine siapservice (service, ra, dec, rasiz, decsiz, ffmt, maxim)
+
+ character*80 service, ffmt, fname
+ character*160 qstring, acref
+ integer nrec, nattr, len, ier, maxim, index, nloop
+ integer siap, query, qr, rec, v
+ double precision ra, dec, rasiz, decsiz
+
+C Define VOClient interface constants we'll use.
+
+C Initialize the VOClient
+ call vfinitvoclient ("", ier)
+
+C Get a new connection to the named service and form a query.
+ call vfopensiapconnection (service, siap, ier)
+ call vfgetsiapquery (siap, ra, dec, rasiz, decsiz, ffmt, query)
+
+C Print the query string we're about to execute.
+ index = 1
+ call vfgetquerystring (query, "siap", index, qstring, len)
+ print *, "Executing Query: "
+ print *, qstring
+ print *, ""
+
+C Execute the query, get back a response handle 'qr'.
+ call vfexecquery (query, qr)
+
+C Now summarize the response.
+ call vfgetrecordcount (qr, nrec)
+ if (nrec <= 0) then
+ print *, "No records matched"
+ return
+ endif
+
+C Get a sample record so we can summarize columns.
+ call vfgetrecord (qr, 1, rec)
+ if (rec > 0) then
+ call vfgetattrcount (rec, nattr)
+ endif
+
+ print *, "# returns ", nrec, " records of ", nattr, " attrs"
+ print *, "#"
+ print *, "# --- Summary output ---"
+ print *, "#"
+
+
+
+C Download the first 'maxim' images in the list. Note the results table
+C is one-indexed in this interface. We also show how to catch an invalid
+C record descriptor. To try this, change the starting index to 0 instead
+C of 1.
+
+ nloop = min (maxim, nrec)
+ do i = 1, nloop, 1
+
+C Get the row in the table and then select values to print.
+ call vfgetrecord (qr, i, rec)
+ if (rec < 0) then
+ write (*,'(a,i4)'), "Error getting record number: ", i
+ goto 100
+ endif
+
+C Get the image access reference and download the file.
+ call vfgetattribute (rec, "AccessReference", v)
+ call vfstringvalue (v, acref, len)
+ write (*,'(a,a)'), "Downloading: ", acref
+
+C Create a filename for the download.
+ call vfmkfname ("dataset%04d.fits", i, fname, len)
+
+ call vfgetdataset (rec, acref, fname, ier)
+ if (ier .eq. 0) then
+ write (*,'(a,a)'), " Saved to file: ",fname
+ else
+ write (*, '(a)'), " ERROR: Download failed...."
+ endif
+
+ enddo
+100 continue
+
+
+C Shut down the VOClient server.
+ call vfcloseconnection (siap)
+ call vfclosevoclient (1, ier)
+
+ return
+ end
diff --git a/vendor/voclient/libvoclient/examples/f77skybot.f b/vendor/voclient/libvoclient/examples/f77skybot.f
new file mode 100644
index 00000000..e6e538ef
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/f77skybot.f
@@ -0,0 +1,38 @@
+C
+C F77SKYBOT -- Fortran example task of VOClient SkyBoT interface
+C
+C M.Fitzpatrick, NOAO, Aug 2006
+
+ program f77skybot
+
+ double precision ra, dec, sr, epoch, vmag
+ character name*15
+ integer skybot, nobjs, len, i
+
+ ra = 0.0
+ dec = 0.0
+ sr = 600.0
+ epoch = 2454545.0
+
+ print *, "#"
+ print *, "# ra=", ra, " dec=", dec, " sr=", sr, " epoch=", epoch
+ print *, "#"
+ call vfskybot (ra, dec, sr, sr, epoch, skybot)
+ call vfskybotnobjs (skybot, nobjs)
+
+ print *, "#"
+ print *, "# Found ", nobjs, " objects"
+ print *, "#"
+
+ do 10 i = 1, nobjs
+ call vfskybotstr (skybot, "name", i, name, len)
+ call vfskybotdbl (skybot, "ra", i, ra)
+ call vfskybotdbl (skybot, "dec", i, dec)
+ call vfskybotdbl (skybot, "vmag", i, vmag)
+
+ print *, "Obj: ", name, " ra=", ra, " dec=", dec, " Mv=", vmag
+
+10 continue
+
+ stop
+ end
diff --git a/vendor/voclient/libvoclient/examples/messier.cl b/vendor/voclient/libvoclient/examples/messier.cl
new file mode 100644
index 00000000..54926590
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/messier.cl
@@ -0,0 +1,22 @@
+# MESSIER -- Loop through the Messier catalog, displaying a DSS image of each.
+
+procedure messier ()
+
+begin
+ int qr, stat
+ string svc, coords = "/tmp/coords"
+
+ reset clobber = yes # Allow file overwrites
+
+ svc = regResolver ("dss","sia") # Find the DSS SIA service
+
+ for (i=1; i < 111; i=i+1) { # Loop over Messier objs
+ sesame ("M"//i,verb+) | scan (x,y) # Resolve name to coords
+ print ("30 30 0 :text M"//i, > coords)
+
+ qr = dalSiapSvc (svc, x, y, 0.25) # Query for data
+ stat = dalGetData (qr, 0, "foo.fits") # Download 1st image
+ display ("foo.fits[0]", 1) # Display it
+ tvmark (1,"",commands=coords,txsiz=5,col=205) # Label it
+ }
+end
diff --git a/vendor/voclient/libvoclient/examples/registry1.c b/vendor/voclient/libvoclient/examples/registry1.c
new file mode 100644
index 00000000..60e38ba9
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/registry1.c
@@ -0,0 +1,140 @@
+/************************************************************************
+ * Simple test program of a Registry query using the high-level procedure
+ * voc_regSearch() to do the search.
+ *
+ * Usage: registry1 [-flags] [keyword_list]
+ *
+ * Or call with no args for the built-in unit test. The '-o' flag says
+ * to logically OR the keywords
+ *
+ * Examples:
+ *
+ * registry1 -siap // List all SIAP services
+ * registry1 -cone cool stars // keyword search on Cone services
+ * registry1 cool stars // keyword search on all resources
+ *
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+#define ANY -1
+#define CONE 0
+#define SIAP 1
+#define TABULAR 2
+
+
+char *keywords = "cool stars\0"; /* default search terms */
+int orValues = 0;
+int svc_type = ANY;
+
+
+static void callRegistry (char *keywords, int orValues, int type);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ callRegistry (keywords, orValues, svc_type); /* use defaults */
+ return (0);
+
+ } else if (argc >= 2) {
+ int arg = 1;
+ char keyw[1024];
+
+ bzero (keyw, 1024);
+ while (arg < argc) {
+ if (strncmp (argv[arg], "-any", 2) == 0)
+ svc_type = ANY;
+ else if (strncmp (argv[arg], "-cone", 2) == 0)
+ svc_type = CONE;
+ else if (strncmp (argv[arg], "-siap", 2) == 0)
+ svc_type = SIAP;
+ else if (strncmp (argv[arg], "-tabular", 2) == 0)
+ svc_type = TABULAR;
+ else if (strncmp (argv[arg], "-or", 2) == 0)
+ orValues = 1;
+ else {
+ strcat (keyw, argv[arg]);
+ if (arg < (argc-1)) strcat (keyw, " ");
+ }
+ arg++;
+ }
+
+ /* Now call the SIAP Service and summarize the results.
+ */
+ callRegistry (keyw, orValues, svc_type);
+ }
+
+ return (0);
+}
+
+
+/* Simple procedure to test a Registry query and print some results.
+ */
+static void
+callRegistry (char *keywords, int orValues, int type)
+{
+ int i, nresources = -1;
+ char *surl, *rtype, *title, *sname, *clev;
+ char *sql =
+ (type == CONE ? "ResourceType like '%cone%'" :
+ (type == SIAP ? "ResourceType like '%siap%'" :
+ (type == TABULAR ? "ResourceType like '%tabular%'" : NULL)
+ )
+ );
+
+
+ /* Initialize the VO Client interface.
+ */
+ if (voc_initVOClient ("") == ERR)
+ return;
+
+ printf ("#\n# Search words: '%s'\n", keywords);
+ printf ("# SQL predicate: '%s'\n#\n", sql);
+
+ /* Do the search.
+ */
+ RegResult res = voc_regSearch (sql, keywords, orValues);
+ if (res < 0) {
+ printf ("error from regSearch(), aborting...\n");
+ voc_closeVOClient (0); /* shutdown */
+ return;
+ }
+
+ /* Summarize the results.
+ */
+ nresources = voc_resGetCount (res);
+ printf ("#\n#Found %d matching records\n#\n\n", nresources);
+
+ for (i = 0; i < nresources; i++) {
+ title = voc_resGetStr (res, "Title", i);
+ surl = voc_resGetStr (res, "ServiceUrl", i);
+ rtype = voc_resGetStr (res, "ServiceType", i);
+ sname = voc_resGetStr (res, "ShortName", i);
+ clev = voc_resGetStr (res, "ContentLevel", i);
+
+ printf ("----------------------------------------------------------\n");
+ printf ("(%d of %d) %s\n", i+1, nresources, title);
+ printf ("SvcURL: %s\n", surl);
+ printf ("ShortName: %-30.30s\tResType: %s\n", sname, rtype);
+ printf ("ContentLevel: %s\n\n", (clev ? clev : "none provided"));
+
+ /* Free the pointers returned. */
+ if (title) free ((char *)title);
+ if (surl) free ((char *)surl);
+ if (rtype) free ((char *)rtype);
+ if (sname) free ((char *)sname);
+ if (clev) free ((char *)clev);
+ }
+
+ voc_closeVOClient (0); /* shutdown */
+}
diff --git a/vendor/voclient/libvoclient/examples/registry2.c b/vendor/voclient/libvoclient/examples/registry2.c
new file mode 100644
index 00000000..db7e2e6a
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/registry2.c
@@ -0,0 +1,151 @@
+/************************************************************************
+ * Simple test program of a Registry query using the lower-level interface
+ * calls to explicitly form the query.
+ *
+ * Usage: registry2 [flags] [keyword_list]
+ *
+ * Or call with no args for the built-in unit test. The '-o' flag says
+ * to logically OR the keywords
+ *
+ * Example usage:
+ *
+ * registry1 -siap // List all SIAP services
+ * registry1 -cone cool stars // keyword search on Cone services
+ * registry1 cool stars // keyword search on all resources
+ *
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+#define ANY -1
+#define CONE 0
+#define SIAP 1
+#define TABULAR 2
+
+
+char *keywords = "radio galaxies\0"; /* default search terms */
+int orValues = 0;
+int svc_type = ANY;
+
+
+static void callRegistry (char *keywords, int orValues, int type);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ callRegistry (keywords, orValues, svc_type); /* use defaults */
+ return (0);
+
+ } else if (argc >= 2) {
+ int arg = 1;
+ char keyw[1024];
+
+ bzero (keyw, 1024);
+ while (arg < argc) {
+ if (strncmp (argv[arg], "-any", 2) == 0)
+ svc_type = ANY;
+ else if (strncmp (argv[arg], "-cone", 2) == 0)
+ svc_type = CONE;
+ else if (strncmp (argv[arg], "-siap", 2) == 0)
+ svc_type = SIAP;
+ else if (strncmp (argv[arg], "-tabular", 2) == 0)
+ svc_type = TABULAR;
+ else if (strncmp (argv[arg], "-or", 2) == 0)
+ orValues = 1;
+ else {
+ strcat (keyw, argv[arg]);
+ if (arg < (argc-1)) strcat (keyw, " ");
+ }
+ arg++;
+ }
+
+ /* Now call the SIAP Service and summarize the results.
+ */
+ callRegistry (keyw, orValues, svc_type);
+ }
+
+ return (0);
+}
+
+
+/* Simple procedure to test a Registry query and print some results.
+ */
+static void
+callRegistry (char *keywords, int orValues, int type)
+{
+ int i, nresources = -1;
+ char *rtype, *title, *sname;
+ char *sql =
+ (type == CONE ? "ResourceType like '%cone%'" :
+ (type == SIAP ? "ResourceType like '%siap%'" :
+ (type == TABULAR ? "ResourceType like '%tabular%'" : NULL)
+ )
+ );
+ RegQuery query;
+ RegResult res;
+
+
+ /* Initialize the VO Client interface.
+ */
+ if (voc_initVOClient ("") == ERR)
+ return;
+
+ printf ("#\n# Search words: '%s'\n", keywords);
+ printf ("# SQL predicate: '%s'\n#\n", sql);
+
+ /* Form the query and do the search.
+ */
+ query = voc_regQuery (sql, 0);
+ if (keywords && keywords[0])
+ voc_regAddSearchTerm (query, keywords, orValues);
+
+ /*
+ {
+ char *qstring;
+ qstring = voc_regGetQueryString(query);
+ printf ("#\n# Query String:\n\n%s\n\n", qstring);
+ }
+ */
+
+ /* Now execute the query.
+ */
+ res = voc_regExecute (query);
+ if (res == (RegResult) NULL) {
+ fprintf (stderr, "Error executing query, quitting.\n");
+ voc_closeVOClient (0); /* shutdown */
+ return;
+ }
+
+ /* Summarize the results.
+ */
+ printf ("#\n#Found %d matching records\n#\n\n",
+ (nresources = voc_resGetCount(res) ));
+
+ for (i = 0; i < nresources; i++) {
+ title = voc_resGetStr (res, "Title", i);
+ rtype = voc_resGetStr (res, "ServiceType", i);
+ sname = voc_resGetStr (res, "ShortName", i);
+
+ printf ("----------------------------------------------------------\n");
+ printf ("(%d of %d) %s\n", i+1, nresources, title);
+ printf ("ShortName: %-30.30s\tResType: %s\n", sname, rtype);
+
+ /* Free the pointers returned. */
+ if (title) free ((char *)title);
+ if (rtype) free ((char *)rtype);
+ if (sname) free ((char *)sname);
+ }
+ printf ("\n\n");
+
+ voc_closeVOClient (0); /* shutdown */
+}
diff --git a/vendor/voclient/libvoclient/examples/registry3.c b/vendor/voclient/libvoclient/examples/registry3.c
new file mode 100644
index 00000000..ed9fd63e
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/registry3.c
@@ -0,0 +1,132 @@
+/************************************************************************
+ * Simple test program of a Registry query using the high-level procedure
+ * voc_regSearchByService() to do the search.
+ *
+ * Usage: registry3 [-flags] [keyword_list]
+ *
+ * Or call with no args for the built-in unit test. The '-o' flag says
+ * to logically OR the keywords
+ *
+ * Examples:
+ *
+ * registry3 -siap // List all SIAP services
+ * registry3 -cone cool stars // keyword search on Cone services
+ * registry3 cool stars // keyword search on all resources
+ *
+ *
+ * M. Fitzpatrick, NOAO, July 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+#define ANY -1
+#define CONE 0
+#define SIAP 1
+#define TABULAR 2
+
+
+char *keywords = "cool stars\0"; /* default search terms */
+int orValues = 0;
+int svc_type = ANY;
+
+
+static void callRegistry (char *keywords, int orValues, int type);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ callRegistry (keywords, orValues, svc_type); /* use defaults */
+ return (0);
+
+ } else if (argc >= 2) {
+ int arg = 1;
+ char keyw[1024];
+
+ bzero (keyw, 1024);
+ while (arg < argc) {
+ if (strncmp (argv[arg], "-any", 2) == 0)
+ svc_type = ANY;
+ else if (strncmp (argv[arg], "-cone", 2) == 0)
+ svc_type = CONE;
+ else if (strncmp (argv[arg], "-siap", 2) == 0)
+ svc_type = SIAP;
+ else if (strncmp (argv[arg], "-tabular", 2) == 0)
+ svc_type = TABULAR;
+ else if (strncmp (argv[arg], "-or", 2) == 0)
+ orValues = 1;
+ else {
+ strcat (keyw, argv[arg]);
+ if (arg < (argc-1)) strcat (keyw, " ");
+ }
+ arg++;
+ }
+
+ /* Now call the SIAP Service and summarize the results.
+ */
+ callRegistry (keyw, orValues, svc_type);
+ }
+
+ return (0);
+}
+
+
+/* Simple procedure to test a Registry query and print some results.
+ */
+static void
+callRegistry (char *keywords, int orValues, int type)
+{
+ int i, nresources = -1;
+ char *rtype, *title, *sname, *clev;
+ char *svc =
+ (type == CONE ? "cone" :
+ (type == SIAP ? "siap" :
+ (type == TABULAR ? "tabular" : NULL)
+ )
+ );
+
+
+ /* Initialize the VO Client interface.
+ */
+ if (voc_initVOClient ("") == ERR)
+ return;
+
+ printf ("#\n# Search words: '%s'\n", keywords);
+ printf ("# Service Type: '%s'\n#\n", svc);
+
+ /* Do the search.
+ */
+ RegResult res = voc_regSearchByService (svc, keywords, orValues);
+
+ /* Summarize the results.
+ */
+ nresources = voc_resGetCount (res);
+ printf ("#\n#Found %d matching records\n#\n\n", nresources);
+
+ for (i = 0; i < nresources; i++) {
+ title = voc_resGetStr (res, "Title", i);
+ rtype = voc_resGetStr (res, "ServiceType", i);
+ sname = voc_resGetStr (res, "ShortName", i);
+ clev = voc_resGetStr (res, "ContentLevel", i);
+
+ printf ("----------------------------------------------------------\n");
+ printf ("(%d of %d) %s\n", i+1, nresources, title);
+ printf ("ShortName: %-30.30s\tResType: %s\n", sname, rtype);
+ printf ("ContentLevel: %s\n\n", (clev ? clev : "none provided"));
+
+ /* Free the pointers returned. */
+ if (title) free ((char *)title);
+ if (rtype) free ((char *)rtype);
+ if (sname) free ((char *)sname);
+ if (clev) free ((char *)clev);
+ }
+
+ voc_closeVOClient (0); /* shutdown */
+}
diff --git a/vendor/voclient/libvoclient/examples/resolver.c b/vendor/voclient/libvoclient/examples/resolver.c
new file mode 100644
index 00000000..83fedbfa
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/resolver.c
@@ -0,0 +1,37 @@
+/************************************************************************
+ * Call the Sesame name resolver with the specified target.
+ *
+ * Usage: resolver <target>
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, July 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+char *target = "m31";
+
+int main (int argc, char *argv[])
+{
+ Sesame sr = (Sesame) NULL;
+
+ /* Process command line arguments.
+ */
+ target = (argc <= 1 ? "m31" : argv[1]);
+
+ /* Now call the Resolver Service and summarize the results. We'll
+ * let the interface initialize the VO Client server and simply call
+ * the procedure we need.
+ */
+ sr = voc_nameResolver (target);
+
+ printf ("target: %s ra=%f dec=%f (%s)\n",
+ target, voc_resolverRA(sr), voc_resolverDEC(sr), voc_resolverPos(sr) );
+
+ return (0);
+}
diff --git a/vendor/voclient/libvoclient/examples/resolver.java b/vendor/voclient/libvoclient/examples/resolver.java
new file mode 100644
index 00000000..519746e9
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/resolver.java
@@ -0,0 +1,32 @@
+
+// Test program for the VOCSesame class.
+//
+// Assuming the NVOSS classpath and working from this directory:
+//
+// % javac -classpath ../../lib/voclient.jar:$CLASSPATH resolver.java
+// % java -classpath ../../lib/voclient.jar:$CLASSPATH resolver m51
+//
+
+import voclient.*;
+
+public class resolver {
+
+ public static void main (String[] args) {
+
+ // Require a target name
+ if (args.length == 0) {
+ System.out.println ("Usage: resolve <target>");
+ System.exit (0);
+ }
+
+ // Invoke the service in the constructor so we can just use the result.
+ VOCSesame sr = new VOCSesame (args[0]);
+
+ // The following two lines should produce the same results.
+ System.out.println ( "target = "+ sr.target +
+ " ra = "+ sr.ra + " dec = "+ sr.dec + " (" + sr.pos + ")");
+ System.out.println ( "target = "+ sr.getTarget() +
+ " ra = "+ sr.getRa() + " dec = "+ sr.getDec() +
+ " (" + sr.pos + ")" );
+ }
+}
diff --git a/vendor/voclient/libvoclient/examples/siap1.c b/vendor/voclient/libvoclient/examples/siap1.c
new file mode 100644
index 00000000..1109c6e9
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/siap1.c
@@ -0,0 +1,159 @@
+/************************************************************************
+ * Call a SIAP search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: siap1 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.5;
+
+char *service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+char *server = "6200:localhost";
+
+static void callSiapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: siap1 [-ds server] ra dec size [siapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the SIAP Service and summarize the results.
+ */
+ callSiapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a SIA service and summarize results.
+ */
+static void
+callSiapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ int i=0, nrec=0, nattr=0;
+ char *attrList = NULL, *ip;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record andle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, size, size, NULL);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SIAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ if ((nrec = voc_getRecordCount (qr)) <= 0) { /* summarize response */
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ printf ("# --- Summary output ---\n#\n");
+
+ attrList = voc_getAttrList (rec);
+ printf ("# Attribute List:\n# ");
+ for (ip = attrList; *ip; ip++)
+ if (isspace (*ip))
+ printf ("\n# ");
+ else
+ putchar (*ip);
+ printf ("\n#\n");
+
+ free ((void *) attrList);
+ }
+
+ /* Summarize and print selected query results.
+ */
+ for (i = 0; i < nrec; i++) {
+ char *s_ra, *s_dec, *s_naxis, *s_format, *s_title, *s_fsize;
+
+ rec = voc_getRecord (qr, i); /* get a row in the table */
+
+ /* The getStringAttr method returns an allocated pointer to a string
+ * we'll need to free below, however we can use a NULL pointer to
+ * know when no data were found.
+ */
+ s_ra = voc_getStringAttr (rec, "RA");
+ s_dec = voc_getStringAttr (rec, "DEC");
+ s_naxis = voc_getStringAttr (rec, "Naxis");
+ s_format = voc_getStringAttr (rec, "Format");
+ s_title = voc_getStringAttr (rec, "Title");
+ s_fsize = voc_getStringAttr (rec, "Filesize");
+ if (! s_title )
+ s_title = voc_getStringAttr (rec, "ID_MAIN"); /* fallback */
+
+ printf ("ra=%-.10s\tdec=%-.10s\t[%s] %9.9s %-.12s\t%-32.32s\n",
+ (s_ra ? s_ra : "<null>"),
+ (s_dec ? s_dec : "<null>"),
+ (s_naxis ? s_naxis : "<null>"),
+ (s_fsize ? s_fsize : "<null>"),
+ (s_format ? s_format : "<null>"),
+ (s_title ? s_title : "<null>"));
+
+ if (s_ra) free ((void *) s_ra); /* clean up temp pointers */
+ if (s_dec) free ((void *) s_dec);
+ if (s_naxis) free ((void *) s_naxis);
+ if (s_fsize) free ((void *) s_fsize);
+ if (s_format) free ((void *) s_format);
+ if (s_title) free ((void *) s_title);
+ }
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/siap2.c b/vendor/voclient/libvoclient/examples/siap2.c
new file mode 100644
index 00000000..1d6e94a4
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/siap2.c
@@ -0,0 +1,95 @@
+/************************************************************************
+ * Call a SIAP search service and print the results as a CSV file.
+ *
+ * Usage: siap2 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.5;
+
+char *service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+char *server = "6200:localhost";
+
+static void callSiapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: siap2 [-ds server] ra dec size [siapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Siap Service and summarize the results.
+ */
+ callSiapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Siap search service and summarize results.
+ */
+static void
+callSiapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ char *csv = NULL;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, size, size, NULL);
+
+ csv = voc_executeCSV (query);
+ write (fileno(stdout), csv, strlen (csv));
+ fprintf (stdout, "\n");
+
+ free ((void *) csv); /* free local storage */
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/siap3.c b/vendor/voclient/libvoclient/examples/siap3.c
new file mode 100644
index 00000000..a5b69add
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/siap3.c
@@ -0,0 +1,94 @@
+/************************************************************************
+ * Call a SIAP search service and print the results as a CSV file.
+ *
+ * Usage: siap3 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.5;
+
+char *service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+char *server = "6200:localhost";
+
+static void callSiapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: siap3 [-ds server] ra dec size [siapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Siap Service and summarize the results.
+ */
+ callSiapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Siap search service and summarize results.
+ */
+static void
+callSiapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ char *vot = NULL;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, size, size, NULL);
+
+ vot = voc_executeVOTable (query);
+ write (fileno(stdout), vot, strlen (vot));
+
+ free ((void *) vot); /* free local storage */
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/siap4.c b/vendor/voclient/libvoclient/examples/siap4.c
new file mode 100644
index 00000000..5d5b8def
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/siap4.c
@@ -0,0 +1,146 @@
+/************************************************************************
+ * Call a SIAP search service and download resulting datasets.
+ *
+ * Usage: siap4 ra dec size [format [maximages [serviceURL]]]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.5;
+char *format = "ALL";
+int maximages= 5;
+
+char *service1 = "http://www-gsss.stsci.edu/gscvo/DSS2.jsp";
+char *service2 = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+
+char *server = "6200:localhost";
+
+static void callSiapService (char *url, double ra, double dec, double size,
+ char *format, int maximages);
+
+
+int main (int argc, char *argv[])
+{
+ char *service = service2;
+
+
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc) format = argv[arg++];
+ if (arg < argc) maximages = atoi (argv[arg++]);
+ if (arg < argc) service = argv[arg++];
+
+ } else {
+ fprintf (stderr,
+ "Usage: siap4 [-ds server] ra dec size [fmt [maximg [siapURL]]]\n");
+ exit(1);
+ }
+
+ /* Now call the Siap Service and summarize the results.
+ */
+ callSiapService (service, ra, dec, size, format, maximages);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Siap search service and summarize results.
+ */
+static void
+callSiapService (char *service_url, double ra, double dec, double size,
+ char *format, int maximages)
+{
+ char *voc_opts = NULL;
+ char *acref = NULL;
+ char fname[SZ_FNAME];
+ int i, nattr = 0, nrec = 0;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record handle */
+ QRAttribute v; /* dataset attribute */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, size, size, format);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SIAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ /* Summarize response.
+ */
+ if ((nrec = voc_getRecordCount (qr)) <= 0) {
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ }
+
+
+ /* Download the first 'maximages' images.
+ */
+ printf ("Downloading images:\n");
+
+ for (i=0; i < nrec && i < maximages; i++) {
+ rec = voc_getRecord (qr, i); /* get a row in the table */
+
+ v = voc_getAttribute (rec, "AccessReference");
+
+ if (v <= 0)
+ continue;
+
+ bzero (fname, SZ_FNAME);
+ sprintf (fname, "dataset.%04d", i);
+ printf ("Downloading: %s\n", (acref = voc_stringValue (v)) );
+
+ if ( voc_getDataset (rec, acref, fname) == OK )
+ printf ("Downloaded %s\n", fname);
+ else
+ printf ("Download failed\n");
+ }
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/siap5.c b/vendor/voclient/libvoclient/examples/siap5.c
new file mode 100644
index 00000000..de4ddad4
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/siap5.c
@@ -0,0 +1,133 @@
+/************************************************************************
+ * Call a SIAP search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: siap5 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, Feb 2009
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.2;
+
+char *service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+char *server = "6200:localhost";
+
+static void callSiapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: siap1 [-ds server] ra dec size [siapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the SIAP Service and summarize the results.
+ */
+ callSiapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a SIA service and summarize results.
+ */
+static void
+callSiapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ int i=0, nrec=0, nattr=0;
+ char *attrList = NULL, *ip;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record andle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, size, size, NULL);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SIAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ if ((nrec = voc_getRecordCount (qr)) <= 0) { /* summarize response */
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ printf ("# --- Summary output ---\n#\n");
+
+ attrList = voc_getAttrList (rec);
+ printf ("# Attribute List:\n# ");
+ for (ip = attrList; *ip; ip++)
+ if (isspace (*ip))
+ printf ("\n# ");
+ else
+ putchar (*ip);
+ printf ("\n#\n");
+
+
+ printf ("\n\n");
+ printf ("#N,ID,UCD,Name,UType\n");
+ for (i=0; i < nattr; i++) {
+ printf ("%d,%s,%s,%s,%s\n", i,
+ voc_getFieldAttr (qr, i, "id"),
+ voc_getFieldAttr (qr, i, "ucd"),
+ voc_getFieldAttr (qr, i, "name"),
+ voc_getFieldAttr (qr, i, "utype"));
+ }
+ }
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+ free ((void *) attrList);
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/simple.c b/vendor/voclient/libvoclient/examples/simple.c
new file mode 100644
index 00000000..670be8d7
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/simple.c
@@ -0,0 +1,81 @@
+/************************************************************************
+ * Call a cone/siap search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: simple [cone|siap] ra dec sr [type [serviceURL]]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+double ra = 12.0; /* default values */
+double dec = 12.0;
+double sr = 0.1;
+
+char *cone_service = \
+ "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&";
+char *siap_service = "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?";
+
+
+
+int main (int argc, char *argv[])
+{
+ char *result = NULL;
+ char *service = cone_service;
+ int svc_type = CONE_SERVICE;
+ int type = VOC_CSV;
+ int status = 0;
+
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+
+ } else if (argc == 2) {
+ /* Use builtin defaults with requested service type. */
+ if (argv[1][0] == 'c') {
+ svc_type = CONE_SERVICE, service = cone_service;
+ } else {
+ svc_type = SIAP_SERVICE, service = siap_service;
+ }
+
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ svc_type = (argv[arg++][0] == 'c' ? CONE_SERVICE : SIAP_SERVICE);
+ ra = atof (argv[arg++]); /* parse arguments */
+ dec = atof (argv[arg++]);
+ sr = atof (argv[arg++]);
+ if (arg < argc)
+ type = (argv[arg++][0] == 'v' ? VOC_VOTABLE : VOC_CSV);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: simpleCone ra dec sr [type [coneURL]]\n");
+ exit(1);
+ }
+
+ /* Now call the Cone Service and print the results.
+ */
+ if (svc_type == CONE_SERVICE)
+ result = voc_coneCaller (service, ra, dec, sr, type);
+ else if (svc_type == SIAP_SERVICE)
+ result = voc_siapCaller (service, ra, dec, sr, sr, "image/fits", type);
+
+ if (result)
+ write (fileno(stdout), result, strlen (result));
+ else {
+ fprintf (stderr, "Error executing query\n");
+ status = 1;
+ }
+
+ return (status);
+}
diff --git a/vendor/voclient/libvoclient/examples/simple.java b/vendor/voclient/libvoclient/examples/simple.java
new file mode 100644
index 00000000..fb1e79b6
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/simple.java
@@ -0,0 +1,23 @@
+
+public class simple {
+
+ public static void main (String[] argv) {
+
+ // Load the VOClient shared library.
+ try {
+ System.loadLibrary ("voclient");
+
+ } catch (UnsatisfiedLinkError Err) {
+ System.err.println ("Load Error " + Err);
+ System.exit (1);
+ }
+
+ // Call a simple Cone service.
+ System.out.println (
+ voclient.voc_coneCaller (
+ "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&",
+ 0.0, 0.0, 0.05, 1)
+ );
+
+ }
+}
diff --git a/vendor/voclient/libvoclient/examples/simple.pl b/vendor/voclient/libvoclient/examples/simple.pl
new file mode 100755
index 00000000..38e295d3
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/simple.pl
@@ -0,0 +1,6 @@
+#!/usr/local/bin/perl
+
+use voclient;
+
+print voclient::voc_coneCaller("http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&",12.,12.,0.1,2),"\n\n";
+
diff --git a/vendor/voclient/libvoclient/examples/simple.py b/vendor/voclient/libvoclient/examples/simple.py
new file mode 100755
index 00000000..d3638709
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/simple.py
@@ -0,0 +1,6 @@
+#!/usr/local/bin/python
+
+import voclient
+
+print voclient.voc_coneCaller("http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&",12.,12.,0.1,2),"\n\n";
+
diff --git a/vendor/voclient/libvoclient/examples/simple.tcl b/vendor/voclient/libvoclient/examples/simple.tcl
new file mode 100755
index 00000000..a47e325f
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/simple.tcl
@@ -0,0 +1,5 @@
+#!/usr/bin/tclsh
+
+load ./voclient.so voclient
+puts [voc_coneCaller "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&" 12. 12. 0.1 1]
+
diff --git a/vendor/voclient/libvoclient/examples/skybot.c b/vendor/voclient/libvoclient/examples/skybot.c
new file mode 100644
index 00000000..78da18ca
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/skybot.c
@@ -0,0 +1,59 @@
+/************************************************************************
+ * Call the SkyBoT minor planet service with the specified parameters.
+ *
+ * Usage: skybot <ra> <dec> <sr> <jd_epoch>
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, August 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+
+double ra = 0.0, /* RA of search (J2000) */
+ dec = 0.0, /* Dec of search (J2000) */
+ sr = 900.0, /* Search radius (arcsec) */
+ epoch = 2454545.0; /* JD epoch */
+
+
+int main (int argc, char *argv[])
+{
+ Skybot sb = (Skybot) NULL;
+ int i, n;
+
+
+ /* Process command line arguments or else use built-in defaults.
+ */
+ if (argc == 5) {
+ ra = atof (argv[1]);
+ dec = atof (argv[2]);
+ sr = atof (argv[3]);
+ epoch = atof (argv[4]);
+ }
+ printf ("#\n# SkyBoT Service\n#\n# Search Terms:\n");
+ printf ("#\t ra=%f dec=%f sr=%.2f epoch=%f\n#\n", ra, dec, sr, epoch);
+
+ /* Now call the SkyBoT Service and summarize the results. We'll
+ * let the interface initialize the VO Client server and simply call
+ * the procedure we need.
+ */
+ sb = voc_skybot (ra, dec, sr, sr, epoch);
+
+ printf ("# Found %d objects\n#\n", (n = voc_skybotNObjs(sb)) );
+
+ for (i = 0; i < n; i++) {
+ printf ("%02d: %-12s ra=%10.6f dec=%10.6f Mv=%.2f R=%.4f\n", i+1,
+ voc_skybotStrAttr(sb, "name", i),
+ voc_skybotDblAttr(sb, "ra", i),
+ voc_skybotDblAttr(sb, "dec", i),
+ voc_skybotDblAttr(sb, "vmag", i),
+ voc_skybotDblAttr(sb, "cdist", i));
+ }
+
+ voc_closeVOClient (1);
+ return (0);
+}
diff --git a/vendor/voclient/libvoclient/examples/skyportal1_java b/vendor/voclient/libvoclient/examples/skyportal1_java
new file mode 100644
index 00000000..fb2c6d5a
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/skyportal1_java
@@ -0,0 +1,85 @@
+
+import voclient.*;
+import dalclient.*;
+
+
+/**
+ */
+public class skyportal1 {
+ private static final double DEF_RA = 16.031;
+ private static final double DEF_DEC = -0.891;
+
+ public static void main(String args[]) throws Exception
+ {
+ double ra = DEF_RA,
+ dec = DEF_DEC;
+ int arg = 0;
+
+
+ if (args.length == 0) {
+ // Built-in no-args unit test.
+ } else if (args.length >= 3) {
+ ra = Double.parseDouble(args[arg++]);
+ dec = Double.parseDouble(args[arg++]);
+ } else {
+ System.out.println ("Usage: skyportal1 ra dec");
+ System.exit(1);
+ }
+
+ querySkyPortal (ra, dec); // make the query
+ }
+
+
+ /** Simple test routine to query a SkyPortal and summarize results.
+ */
+ static void querySkyPortal (double ra, double dec) throws Exception
+ {
+
+ String qry = " SELECT o.objId, o.ra,o.dec, o.type,t.objId,t.j_m,o.z " +
+ " FROM SDSS:PhotoPrimary o, " +
+ " TWOMASS:PhotoPrimary t WHERE XMATCH(o,t)<2.5 " +
+ " AND Region('Circle J2000 " + ra + " " + dec + " .10') " +
+ " AND( o.z- t.j_m)>1 " ;
+
+ // Get a new connection to the service.
+ VOCSkyPortal sp = new VOCSkyPortal (qry);
+
+ // Execute the query and fetch results.
+ sp.executeCSV();
+
+ QueryResponse qr = sp.execute();
+ if (qr.getRecordCount() <= 0) {
+ System.out.println("no records found");
+ System.exit(1);
+ }
+
+ // Summarize query response.
+ {
+ int nrec = qr.getRecordCount();
+ QueryRecord r = qr.getRecord(0);
+ int nattr = (r != null) ? r.getAttributeCount() : 0;
+ System.out.println("# returns " + nrec + " records containing " +
+ nattr + " attributes each");
+ System.out.println("# --- Summary output ---");
+ }
+
+ // Summarize and print selected query results.
+ for (int i=0; i < qr.getRecordCount(); i++) {
+ QueryRecord r = qr.getRecord(i);
+ String s_id, s_ra, s_dec, s_class;
+ QRAttribute v;
+
+ s_id = ((v = r.getAttribute("sdss_objid")) != null) ?
+ v.stringValue() : "<none>";
+ s_ra = ((v = r.getAttribute("sdss_ra")) != null) ?
+ v.stringValue() : "<unknown>";
+ s_dec = ((v = r.getAttribute("sdss_dec")) != null) ?
+ v.stringValue() : "<unknown>";
+ s_class = ((v = r.getAttribute("sdss_type")) != null) ?
+ v.stringValue() : "<unknown>";
+
+ System.out.println("id=" + s_id + "\tra=" + s_ra +
+ "\tdec=" + s_dec + "\tclass=" + s_class);
+ }
+ }
+}
diff --git a/vendor/voclient/libvoclient/examples/spptest.x b/vendor/voclient/libvoclient/examples/spptest.x
new file mode 100644
index 00000000..d0ef5693
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/spptest.x
@@ -0,0 +1,471 @@
+#
+# SPPTEST -- SPP test programs for the VOClient interface.
+#
+# M. Fitzpatrick, NOAO, Jul 2006
+
+
+task simple = t_simple,
+ cone = t_cone,
+ siap = t_siap,
+ sesame = t_sesame,
+ skybot = t_skybot,
+ registry1 = t_registry1,
+ registry2 = t_registry2,
+ registry3 = t_registry3
+
+
+define DEF_RA 12.0; # default search values
+define DEF_DEC 12.0;
+define DEF_SIZE 0.1;
+define DEF_SR 0.5;
+
+define CONE_SVC "http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&"
+define SIAP_SVC "http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl?"
+
+
+define MAX_IMAGES 5
+
+define SZ_URL 512
+define SZ_RESULT 128000 # allow up to 128K of results
+
+
+# SIMPLE -- Trivial SPP task to call the high-level interface functions.
+# Here we test the all-in-one caller procedures and get the result as a
+# string. We'll simply write out the string, a real app could just as
+# easily open the string as a file and parse it as needed.
+
+procedure t_simple ()
+
+char fname[SZ_FNAME], otype[SZ_FNAME], svctype[SZ_FNAME]
+char result[SZ_RESULT]
+double ra, dec, size
+int reslen
+
+double clgetd()
+bool streq()
+int vx_conecaller() # returns the length of the result
+int vx_siapcaller() # returns the length of the result
+
+begin
+ call aclrs (fname, SZ_FNAME) # clear string arrays
+ call aclrs (otype, SZ_FNAME)
+ call aclrs (svctype, SZ_FNAME)
+ call aclrs (result, SZ_RESULT)
+
+ call clgstr ("dal", svctype, SZ_FNAME) # get task parameters
+ ra = clgetd ("ra")
+ dec = clgetd ("dec")
+ size = clgetd ("size")
+ call clgstr ("type", otype, SZ_FNAME)
+
+ # Now call the service requested.
+ if (streq ("cone", svctype)) {
+ reslen = vx_coneCaller (CONE_SVC, ra, dec, size, otype,
+ result, SZ_RESULT)
+
+ } else if (streq ("siap", svctype)) {
+ reslen = vx_siapCaller (SIAP_SVC, ra, dec, size, size,
+ "image/fits", otype, result, SZ_RESULT)
+
+ } else {
+ call eprintf ("Invalid service type '%s'\n")
+ call pargstr (svctype)
+ return
+ }
+
+ # Print the results to the screen.
+ if (reslen > 0) {
+ call write (STDOUT, result, reslen)
+ if (reslen >= SZ_RESULT)
+ call eprintf ("\n\nResults possibly truncated....\n\n")
+ } else
+ call eprintf ("No results from service\n")
+end
+
+
+# CONE -- Simple test program to call a Cone search service and summarize
+# the results to the screen.
+
+procedure t_cone ()
+
+char qstring[SZ_URL]
+char sid[SZ_FNAME], sra[SZ_FNAME], sdec[SZ_FNAME]
+double ra, dec, size
+int cone, query, qr, rec
+int i, nrec, nattr, len
+
+double clgetd()
+int vx_initVOClient(), vx_coneConnection()
+int vx_executeQuery(), vx_coneQuery(), vx_stringAttr()
+int vx_record(), vx_recordCount(), vx_atCount()
+
+begin
+ ra = clgetd ("ra") # get task parameters
+ dec = clgetd ("dec")
+ size = clgetd ("size")
+
+ # Make the Cone call and summarize the table.
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ # Open a connection and form the query.
+ cone = vx_coneConnection (CONE_SVC)
+ query = vx_coneQuery (cone, ra, dec, size)
+
+ call vx_queryString (query, "cone", 0, qstring, SZ_PATHNAME)
+ call printf ("\nExecuting query:\n %s\n\n")
+ call pargstr (qstring)
+
+ # Execute the query.
+ qr = vx_executeQuery (query)
+
+ # Summarize the response.
+ nrec = vx_recordCount (qr)
+ if (nrec <= 0) {
+ call eprintf ("No records matched.")
+ return
+
+ } else {
+ rec = vx_record (qr, 0)
+ nattr = 0
+ if (rec != ERR)
+ nattr = vx_atCount (rec)
+
+ call printf ("# return %d records containing %d attrs each\n#\n")
+ call pargi (nrec)
+ call pargi (nattr)
+
+ call printf ("#\n# --- Summary output ---\n#\n")
+ }
+
+
+ # Download a few images.
+ for (i = 0; i < nrec; i=i+1) {
+ rec = vx_record (qr, i)
+
+ if (rec > 0) {
+ len = vx_stringAttr (rec, "ID_MAIN", sid, SZ_FNAME)
+ len = vx_stringAttr (rec, "POS_EQ_RA_MAIN", sra, SZ_FNAME)
+ len = vx_stringAttr (rec, "POS_EQ_DEC_MAIN", sdec, SZ_FNAME)
+
+ call printf ("%4d id=%s ra=%s dec=%s\n")
+ call pargi (i)
+ call pargstr (sid)
+ call pargstr (sra)
+ call pargstr (sdec)
+
+ } else {
+ call eprintf ("\nError getting record number %d\n")
+ call pargi (i)
+ }
+
+ }
+
+ call vx_closeConnection (cone)
+ call vx_closeVOClient (0)
+end
+
+
+# SIAP -- Simple test procedure to call a SIAP service and download several
+# test images.
+
+procedure t_siap ()
+
+char fname[SZ_FNAME], qstring[SZ_URL], acref[SZ_URL]
+double ra, dec, size
+int siap, query, qr, rec, v
+int i, nrec, nattr, len
+
+double clgetd()
+int vx_initVOClient(), vx_siapConnection()
+int vx_executeQuery(), vx_siapQuery()
+int vx_record(), vx_recordCount(), vx_atCount()
+int vx_getAttribute(), vx_getDataset(), vx_stringValue()
+
+begin
+ ra = clgetd ("ra") # get task parameters
+ dec = clgetd ("dec")
+ size = clgetd ("size")
+
+ # Make the SIAP call and download a few images.
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ # Open a connection and form the query.
+ siap = vx_siapConnection (SIAP_SVC)
+ query = vx_siapQuery (siap, ra, dec, size, size, "image/fits")
+
+ call vx_queryString (query, "siap", 0, qstring, SZ_PATHNAME)
+ call printf ("\nExecuting query:\n %s\n\n")
+ call pargstr (qstring)
+
+ # Execute the query.
+ qr = vx_executeQuery (query)
+
+ # Summarize the response.
+ nrec = vx_recordCount (qr)
+ if (nrec <= 0) {
+ call eprintf ("No records matched.")
+ return
+
+ } else {
+ rec = vx_record (qr, 0)
+ nattr = 0
+ if (rec != ERR)
+ nattr = vx_atCount (rec)
+
+ call printf ("# return %d records containing %d attrs each\n#\n")
+ call pargi (nrec)
+ call pargi (nattr)
+ }
+
+
+ # Download a few images.
+ for (i = 0; i < nrec && i < MAX_IMAGES; i=i+1) {
+ rec = vx_record (qr, i)
+ v = vx_getAttribute (rec, "AccessReference")
+
+ if (v <= 0)
+ next
+
+ call aclrs (fname, SZ_FNAME) # clear string arrays
+ call sprintf (fname, SZ_FNAME, "dataset%04d.fits")
+ call pargi (i)
+
+ len = vx_stringValue (v, acref, SZ_URL)
+ call printf ("Downloading: %s\n")
+ call pargstr (acref)
+
+ if (vx_getDataset (rec, acref, fname) == OK) {
+ call printf ("\n Saved to file: %s\n\n")
+ call pargstr (fname)
+ } else
+ call eprintf ("\n Downloaded failed\n")
+ }
+
+ call vx_closeConnection (siap)
+ call vx_closeVOClient (0)
+end
+
+
+# SESAME -- Simple test procedure of the Sesame service.
+
+procedure t_sesame ()
+
+char target[SZ_FNAME], pos[SZ_LINE]
+double ra, dec
+int sr, len
+
+int vx_initVOClient()
+int vx_nameresolver(), vx_resolverpos()
+double vx_resolverra(), vx_resolverdec()
+
+begin
+ call clgstr ("target", target, SZ_FNAME)
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ sr = vx_nameresolver (target)
+
+ ra = vx_resolverra (sr)
+ dec = vx_resolverdec (sr)
+ len = vx_resolverpos (sr, pos, SZ_LINE)
+
+ call printf ("target=%s ra=%.6f dec=%.6f (%s)\n\n")
+ call pargstr (target)
+ call pargd (ra)
+ call pargd (dec)
+ call pargstr (pos)
+
+ call vx_closeVOClient (0)
+end
+
+
+# SKYBOT -- Simple test procedure of the SkyBoT service.
+
+procedure t_skybot ()
+
+char name[SZ_FNAME]
+double ra, dec, sr, epoch, vmag
+int sb, nobjs, len, i
+
+real clgetr()
+int vx_initVOClient()
+int vx_skybot(), vx_skybotnobjs(), vx_skybotstr()
+double vx_skybotdbl()
+
+begin
+ ra = clgetr ("ra") # Get the parameters
+ dec = clgetr ("dec")
+ sr = clgetr ("sr")
+ epoch = clgetr ("epoch")
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ call printf ("#\n# Search Terms: ra=%.6f dec=%.6f sr=%.1f epoch=%.3f\n")
+ call pargd (ra)
+ call pargd (dec)
+ call pargd (sr)
+ call pargd (epoch)
+
+ # Call the service
+ sb = vx_skybot (ra, dec, sr, sr, epoch)
+
+ nobjs = vx_skybotnobjs (sb)
+ call printf ("#\n# Found %d objects\n#\n")
+ call pargi (nobjs)
+
+ for (i=0; i < nobjs; i=i+1) {
+ len = vx_skybotstr (sb, "name", i, name, SZ_FNAME)
+ ra = vx_skybotdbl (sb, "ra", i)
+ dec = vx_skybotdbl (sb, "dec", i)
+ vmag = vx_skybotdbl (sb, "vmag", i)
+
+ call printf ("%d: obj=%12s ra=%.6f dec=%.6f Mv=%s\n")
+ call pargi (i)
+ call pargstr (name)
+ call pargd (ra)
+ call pargd (dec)
+ call pargd (vmag)
+ }
+
+ call vx_closeVOClient (0)
+end
+
+
+# REGISTRY -- Simple tests of the Registry search procedures.
+
+procedure t_registry1 ()
+
+char sql[SZ_LINE], keywords[SZ_LINE]
+int orValues, res, count
+
+int vx_initVOClient(), vx_regsearch(), vx_rscount(), btoi()
+bool clgetb()
+
+begin
+ call clgstr ("sql", sql, SZ_LINE)
+ call clgstr ("keywords", keywords, SZ_LINE)
+ orValues = btoi (clgetb ("orValues"))
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ # Do the Registry search, get back a result object. Remember that
+ # the 'orValues' is an integer in the interface, we converted from
+ # the boolean parameter above.
+
+ res = vx_regsearch (sql, keywords, orValues)
+
+ count = vx_rscount (res)
+ call printf ("#\n# Found %d matching records\n#\n\n")
+ call pargi (count)
+
+ call reg_printRecords (res, count)
+
+ call vx_closeVOClient (0)
+end
+
+
+procedure t_registry2 ()
+
+char sql[SZ_LINE], keywords[SZ_LINE], qstring[1024]
+int orValues, res, query, count, len
+
+int vx_initVOClient(), vx_rscount(), vx_regquery()
+int btoi(), vx_rgetquerystring(), vx_rexecute()
+bool clgetb()
+
+begin
+ call clgstr ("sql", sql, SZ_LINE)
+ call clgstr ("keywords", keywords, SZ_LINE)
+ orValues = btoi (clgetb ("orValues"))
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ # Do the Registry search, get back a result object. Remember that
+ # the 'orValues' is an integer in the interface, we converted from
+ # the boolean parameter above.
+
+ query = vx_regquery (sql, 0);
+ call vx_raddsearchterm (query, keywords, orValues)
+
+ len = vx_rgetquerystring (query, qstring, 1024)
+ call printf ("#\n# Query;\n %s\n#\n\n")
+ call pargstr (qstring)
+
+ res = vx_rexecute (query)
+
+ count = vx_rscount (res)
+ call printf ("#\n# Found %d matching records\n#\n\n")
+ call pargi (count)
+
+ call reg_printRecords (res, count)
+
+ call vx_closeVOClient (0)
+end
+
+
+procedure t_registry3 ()
+
+char svc[SZ_LINE], term[SZ_LINE]
+int orValues, res, count
+
+int vx_initVOClient(), vx_regsearchbysvc(), vx_rscount(), btoi()
+bool clgetb()
+
+begin
+ call clgstr ("svc", svc, SZ_LINE)
+ call clgstr ("term", term, SZ_LINE)
+ orValues = btoi (clgetb ("orValues"))
+
+ if (vx_initVOClient("") == ERR) # Initialize
+ return
+
+ # Do the Registry search given the particular service type. The
+ # search term may be either a keyword list or another SQL predicate.
+
+ res = vx_regsearchbysvc (svc, term, orValues)
+
+ count = vx_rscount (res)
+ call printf ("#\n# Found %d matching records\n#\n\n")
+ call pargi (count)
+
+ call reg_printRecords (res, count)
+
+ call vx_closeVOClient (0)
+end
+
+
+procedure reg_printRecords (res, count)
+
+int res, count, i
+char title[SZ_LINE], url[SZ_LINE], svctype[SZ_LINE], type[SZ_LINE]
+
+begin
+ for (i = 0; i < count; i=i+1) {
+ call vx_rsstr (res, "Title", i, title, SZ_LINE)
+ call vx_rsstr (res, "ServiceUrl", i, url, SZ_LINE)
+ call vx_rsstr (res, "ResourceType", i, svctype, SZ_LINE)
+ call vx_rsstr (res, "Type", i, type, SZ_LINE)
+
+ call printf ("\n----------------------------------------------------\n")
+ call printf ("(%d of %d) %s\n")
+ call pargi (i+1)
+ call pargi (count)
+ call pargstr (title)
+ call printf ("ServiceURL: %s\n")
+ call pargstr (url)
+ call printf ("ResourceType: %s\t\tType: %s\n")
+ call pargstr (svctype)
+ call pargstr (type)
+ }
+end
+
+
+
diff --git a/vendor/voclient/libvoclient/examples/ssap1.c b/vendor/voclient/libvoclient/examples/ssap1.c
new file mode 100644
index 00000000..b26ef27d
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/ssap1.c
@@ -0,0 +1,156 @@
+/************************************************************************
+ * Call a SSAP search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: ssap1 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 350.25; /* default values */
+double dec = -16.4;
+double size = 0.5;
+
+char *service = "http://galex.stsci.edu/gxWS/SSAP/gxSSAP.aspx?";
+char *server = "6200:localhost";
+
+static void callSsapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: ssap1 [-ds server] ra dec size [ssapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the SSAP Service and summarize the results.
+ */
+ callSsapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a SSA service and summarize results.
+ */
+static void
+callSsapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ int i=0, nrec=0, nattr=0;
+ char *attrList = NULL, *ip;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record andle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, NULL, NULL, NULL);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SSAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ if ((nrec = voc_getRecordCount (qr)) <= 0) { /* summarize response */
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ printf ("# --- Summary output ---\n#\n");
+
+ attrList = voc_getAttrList (rec);
+ printf ("# Attribute List:\n# ");
+ for (ip = attrList; *ip; ip++)
+ if (isspace (*ip))
+ printf ("\n# ");
+ else
+ putchar (*ip);
+ printf ("\n#\n");
+
+ free ((void *) attrList);
+ }
+
+ /* Summarize and print selected query results.
+ */
+ for (i = 0; i < nrec; i++) {
+ char *s_ra, *s_dec, *s_naxis, *s_title, *s_fsize;
+
+ rec = voc_getRecord (qr, i); /* get a row in the table */
+
+ /* The getStringAttr method returns an allocated pointer to a string
+ * we'll need to free below, however we can use a NULL pointer to
+ * know when no data were found.
+ */
+ s_ra = voc_getStringAttr (rec, "RA");
+ s_dec = voc_getStringAttr (rec, "DEC");
+ s_naxis = voc_getStringAttr (rec, "Naxis");
+ s_title = voc_getStringAttr (rec, "Title");
+ s_fsize = voc_getStringAttr (rec, "Filesize");
+ if (! s_title )
+ s_title = voc_getStringAttr (rec, "ID_MAIN"); /* fallback */
+
+ printf ("ra=%-.10s\tdec=%-.10s\t[%s] %9.9s\t%-32.32s\n",
+ (s_ra ? s_ra : "<null>"),
+ (s_dec ? s_dec : "<null>"),
+ (s_naxis ? s_naxis : "<null>"),
+ (s_fsize ? s_fsize : "<null>"),
+ (s_title ? s_title : "<null>"));
+
+ if (s_ra) free ((void *) s_ra); /* clean up temp pointers */
+ if (s_dec) free ((void *) s_dec);
+ if (s_naxis) free ((void *) s_naxis);
+ if (s_fsize) free ((void *) s_fsize);
+ if (s_title) free ((void *) s_title);
+ }
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/ssap2.c b/vendor/voclient/libvoclient/examples/ssap2.c
new file mode 100644
index 00000000..98556167
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/ssap2.c
@@ -0,0 +1,95 @@
+/************************************************************************
+ * Call a SSAP search service and print the results as a CSV file.
+ *
+ * Usage: ssap2 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 350.25; /* default values */
+double dec = -16.4;
+double size = 0.5;
+
+char *service = "http://galex.stsci.edu/gxWS/SSAP/gxSSAP.aspx?";
+char *server = "6200:localhost";
+
+static void callSsapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: ssap2 [-ds server] ra dec size [ssapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Ssap Service and summarize the results.
+ */
+ callSsapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Ssap search service and summarize results.
+ */
+static void
+callSsapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ char *csv = NULL;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, NULL, NULL, NULL);
+
+ csv = voc_executeCSV (query);
+ write (fileno(stdout), csv, strlen (csv));
+ fprintf (stdout, "\n");
+
+ free ((void *) csv); /* free local storage */
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/ssap3.c b/vendor/voclient/libvoclient/examples/ssap3.c
new file mode 100644
index 00000000..f1fa4c4e
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/ssap3.c
@@ -0,0 +1,94 @@
+/************************************************************************
+ * Call a SSAP search service and print the results as a CSV file.
+ *
+ * Usage: ssap3 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 350.25; /* default values */
+double dec = -16.4;
+double size = 0.5;
+
+char *service = "http://galex.stsci.edu/gxWS/SSAP/gxSSAP.aspx?";
+char *server = "6200:localhost";
+
+static void callSsapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: ssap3 [-ds server] ra dec size [ssapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the Ssap Service and summarize the results.
+ */
+ callSsapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Ssap search service and summarize results.
+ */
+static void
+callSsapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ char *vot = NULL;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, NULL, NULL, NULL);
+
+ vot = voc_executeVOTable (query);
+ write (fileno(stdout), vot, strlen (vot));
+
+ free ((void *) vot); /* free local storage */
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/ssap4.c b/vendor/voclient/libvoclient/examples/ssap4.c
new file mode 100644
index 00000000..89b27351
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/ssap4.c
@@ -0,0 +1,141 @@
+/************************************************************************
+ * Call a SSAP search service and download resulting datasets.
+ *
+ * Usage: ssap4 ra dec size [format [maximages [serviceURL]]]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, June 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 350.25; /* default values */
+double dec = -16.4;
+double size = 0.5;
+char *format = "ALL";
+int maximages= 5;
+
+char *service = "http://galex.stsci.edu/gxWS/SSAP/gxSSAP.aspx?";
+char *server = "6200:localhost";
+
+static void callSsapService (char *url, double ra, double dec, double size,
+ char *format, int maximages);
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc) format = argv[arg++];
+ if (arg < argc) maximages = atoi (argv[arg++]);
+ if (arg < argc) service = argv[arg++];
+
+ } else {
+ fprintf (stderr,
+ "Usage: ssap4 [-ds server] ra dec size [fmt [maximg [ssapURL]]]\n");
+ exit(1);
+ }
+
+ /* Now call the Ssap Service and summarize the results.
+ */
+ callSsapService (service, ra, dec, size, format, maximages);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a Ssap search service and summarize results.
+ */
+static void
+callSsapService (char *service_url, double ra, double dec, double size,
+ char *format, int maximages)
+{
+ char *voc_opts = NULL;
+ char *acref = NULL;
+ char fname[SZ_FNAME];
+ int i, nattr = 0, nrec = 0;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record handle */
+ QRAttribute v; /* dataset attribute */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, NULL, NULL, format);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SSAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ /* Summarize response.
+ */
+ if ((nrec = voc_getRecordCount (qr)) <= 0) {
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ }
+
+
+ /* Download the first 'maximages' images.
+ */
+ printf ("Downloading images:\n");
+
+ for (i=0; i < nrec && i < maximages; i++) {
+ rec = voc_getRecord (qr, i); /* get a row in the table */
+
+ v = voc_getAttribute (rec, "AccessReference");
+
+ if (v <= 0)
+ continue;
+
+ bzero (fname, SZ_FNAME);
+ sprintf (fname, "dataset.%04d", i);
+ printf ("Downloading: %s\n", (acref = voc_stringValue (v)) );
+
+ if ( voc_getDataset (rec, acref, fname) == OK )
+ printf ("Downloaded %s\n", fname);
+ else
+ printf ("Download failed\n");
+ }
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/examples/ssap5.c b/vendor/voclient/libvoclient/examples/ssap5.c
new file mode 100644
index 00000000..554741be
--- /dev/null
+++ b/vendor/voclient/libvoclient/examples/ssap5.c
@@ -0,0 +1,135 @@
+/************************************************************************
+ * Call a SSAP search service and print a summary selected fields of the
+ * results.
+ *
+ * Usage: ssap5 ra dec size [serviceURL]
+ *
+ * Or call with no args for the built-in unit test.
+ *
+ * M. Fitzpatrick, NOAO, Feb 2009
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "VOClient.h"
+
+double ra = 12.0; /* default values */
+double dec = 0.0;
+double size = 0.05;
+
+char *service = "http://galex.stsci.edu/gxWS/SSAP/gxSSAP.aspx?";
+char *server = "6200:localhost";
+
+static void callSsapService (char *url, double ra, double dec, double size);
+
+
+
+int main (int argc, char *argv[])
+{
+ /* Process command line arguments.
+ */
+ if (argc <= 1) {
+ /* Use builtin defaults. */
+ } else if (argc >= 3) {
+ int arg = 1;
+
+ /* Look for a server specification. */
+ if (strncmp (argv[arg], "-ds",3) == 0)
+ server = argv[++arg];
+ ra = atof (argv[arg++]);
+ dec = atof (argv[arg++]);
+ size = atof (argv[arg++]);
+ if (arg < argc)
+ service = argv[arg++];
+
+ } else {
+ fprintf (stderr, "Usage: ssap51 [-ds server] ra dec size [ssapURL]\n");
+ exit(1);
+ }
+
+ /* Now call the SSAP Service and summarize the results.
+ */
+ callSsapService (service, ra, dec, size);
+
+ return (0);
+}
+
+
+/* Simple test routine to call a SIA service and summarize results.
+ */
+static void
+callSsapService (char *service_url, double ra, double dec, double size)
+{
+ char *voc_opts = NULL;
+ int i=0, nrec=0, nattr=0;
+ char *attrList = NULL, *ip;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+ QResponse qr; /* query response handle */
+ QRecord rec; /* result record andle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (voc_initVOClient (voc_opts) == ERR)
+ return;
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (service_url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, NULL, NULL, NULL);
+
+ printf ("Executing Query:\n %s\n\n",
+ voc_getQueryString (query, SSAP_CONN, 0));
+ qr = voc_executeQuery (query); /* execute the query */
+
+
+ if ((nrec = voc_getRecordCount (qr)) <= 0) { /* summarize response */
+ fprintf (stderr, "no records matched");
+ exit (1);
+
+ } else {
+ rec = voc_getRecord (qr, 0);
+ nattr = (rec != ERR) ? voc_getAttrCount (rec) : 0;
+
+
+ printf ("# returns %d records containing %d attributes each\n#\n",
+ nrec, nattr);
+ printf ("# --- Summary output ---\n#\n");
+
+ attrList = voc_getAttrList (rec);
+ printf ("# Attribute List:\n# ");
+ for (ip = attrList; *ip; ip++)
+ if (isspace (*ip))
+ printf ("\n# ");
+ else
+ putchar (*ip);
+ printf ("\n#\n");
+
+
+ printf ("\n\n");
+ printf ("#N,ID,UCD,Name,DataType,UType\n");
+ for (i=0; i < nattr; i++) {
+ printf ("%d,%s,%s,%s,%s,%s,%s\n", i,
+ voc_getFieldAttr (qr, i, "id"),
+ voc_getFieldAttr (qr, i, "ucd"),
+ voc_getFieldAttr (qr, i, "name"),
+ voc_getFieldAttr (qr, i, "datatype"),
+ voc_getFieldAttr (qr, i, "arraysize"),
+ voc_getFieldAttr (qr, i, "utype"));
+ }
+ }
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (1); /* clean up and shutdown */
+ free ((void *) attrList);
+
+ return;
+}
diff --git a/vendor/voclient/libvoclient/mkpkg b/vendor/voclient/libvoclient/mkpkg
new file mode 100644
index 00000000..d7abcd53
--- /dev/null
+++ b/vendor/voclient/libvoclient/mkpkg
@@ -0,0 +1,19 @@
+# Make the VO Client API. This MKPKG file is used when VOClient is installed
+# as part of the NVO external package, we used the host Makefile for the
+# build.
+
+$call relink
+$exit
+
+update:
+ $call relink
+ $call install
+ ;
+
+relink:
+ !make
+ ;
+
+install:
+ $move libvoclient.a nvobin$libvoclient.a
+ ;
diff --git a/vendor/voclient/libvoclient/vocDAL.c b/vendor/voclient/libvoclient/vocDAL.c
new file mode 100644
index 00000000..a8bcf743
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocDAL.c
@@ -0,0 +1,1321 @@
+/***************************************************************************
+**
+** VOCLient Library -- Client interface library to the DAL Server
+** application. This API allows non-Java programs to make use of the DAL
+** client interface by means of a remote procedure call between this
+** interface and the DAL server. State is maintained in the server and
+** values passed back are language-neutral integer 'handles' on the remote
+** objects, or simple int/double/string values.
+**
+** All tasks must initialize the VO Client and establish a connection to
+** the DAL server by calling voc_initVOClient() before making any service
+** connections, thereafter new connections may be opened/closed at will.
+** Convenience procedures allow for easy use of specific services, e.g. Cone
+** or Siap. Service-specific parameters may be added to a query using the
+** voc_add<type>Param() calls. No action is taken until an execute of the
+** query is performed, applications may get back a handle on the result and
+** interrogate attributes directly, the raw VOTable or a CSV/TSV/ASCII
+** representation of the result may also be returned.
+**
+** High-Level Functions:
+** ---------------------
+**
+** voc_initVOClient (config_opts)
+** voc_closeVOClient (shutdown_flag)
+** voc_abortVOClient (errcode, errmsg)
+**
+** string = voc_coneCaller (url, ra, dec, sr, otype)
+** status = voc_coneCallerToFile (url, ra, dec, sr, otype, file)
+** string = voc_siapCaller (url, ra, dec, rsize, dsize, fmt, otype)
+** status = voc_siapCallerToFile (url, ra, dec, rsize, dsize, fmt, otype, file)
+** string = voc_ssapCaller (url, ra, dec, size, band, time, fmt)
+** status = voc_ssapCallerToFile (url, ra, dec, size, band, time, fmt, file)
+**
+** string = voc_getRawURL (url, buflen)
+**
+**
+** Main DAL Interface Procedures:
+** ------------------------------
+**
+** dal = voc_openConnection (svc_url, type)
+** dal = voc_openConeConnection (svc_url) # Utility aliases
+** dal = voc_openSiapConnection (svc_url)
+** dal = voc_openSsapConnection (svc_url)
+** voc_closeConnection (dal)
+**
+** count = voc_getServiceCount (dal)
+** voc_addServiceURL (dal, svc_url)
+** url = voc_getServiceURL (dal, index)
+**
+** query = voc_getQuery (dal, type)
+** query = voc_getConeQuery (dal, ra, dec, sr)
+** query = voc_getSiapQuery (dal, ra, dec, ra_size, dec_size, format)
+** query = voc_getSsapQuery (dal, ra, dec, size, band, time, format)
+**
+** stat = voc_addIntParam (query, pname, ival)
+** stat = voc_addFloatParam (query, pname, dval)
+** stat = voc_addStringParam (query, pname, str)
+**
+** url_str = voc_getQueryString (query, type, index)
+**
+** qr = voc_executeQuery (query)
+** qr = voc_getQueryResponse (query)
+** stat = voc_executeQueryAs (query, fname, type) (Not Yet Implemented)
+** csv_tab = voc_executeCSV (query)
+** tsv_tab = voc_executeTSV (query)
+** ascii = voc_executeASCII (query)
+** vot_str = voc_executeVOTable (query)
+**
+** count = voc_getRecordCount (qr)
+** rec = voc_getRecord (qr, recnum)
+** str = voc_getFieldAttr (qr, fieldnum, attr)
+**
+** attr = voc_getAttribute (rec, char *attrname)
+** count = voc_getAttrCount (rec)
+** list_str = voc_getAttrList (rec)
+**
+** ival = voc_intValue (attr)
+** dval = voc_floatValue (attr)
+** str = voc_stringValue (attr)
+**
+** voc_setIntAttr (rec, attrname, ival) (Not Yet Implemented)
+** voc_setFloatAttr (rec, attrname, dval) ( " " " )
+** voc_setStringAttr (rec, attrname, str) ( " " " )
+**
+** stat = voc_getDataset (rec, acref, fname)
+**
+**
+** Sesame Name Resolver Interface:
+** -------------------------------
+**
+** sr = voc_nameResolver (target)
+** pos_str = voc_resolverPos (sr)
+** radeg = voc_resolverRA (sr)
+** decdeg = voc_resolverDEC (sr)
+**
+**
+** Client programs may be written in any language that can interface to
+** C code. Sample programs using the interface are provided as is a SWIG
+** interface definition file.
+**
+** Michael Fitzpatrick, NOAO, June 2006
+**
+***************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+extern VOClient *vo; /* Interface runtime struct */
+
+#define SZ_ERRMSG 256
+static char errmsg[SZ_ERRMSG];
+
+
+
+
+/******************************************************************************
+*********** High Level Functions **********
+******************************************************************************/
+
+/******************************************************************************
+** CONECALLER -- Simple all-in-one interface to call a Cone service and
+** return the results as a text string of either the raw VOTable or a
+** CSV/TSV/Ascii table.
+** Result string is allocated here and must be freed by the caller.
+*/
+char *
+voc_coneCaller (char *url, double ra, double dec, double sr, int otype)
+{
+ char *res = NULL;
+
+ DAL cone; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (!vo && voc_initVOClient (NULL) == ERR)
+ return ((char *)NULL);
+
+ /* Get a new connection to the named service.
+ */
+ cone = voc_openConeConnection (url); /* open a connection */
+
+ query = voc_getConeQuery (cone, ra, dec, sr); /* form a query */
+
+ if (otype == VOC_CSV)
+ res = voc_executeCSV (query);
+ else if (otype == VOC_TSV)
+ res = voc_executeTSV (query);
+ else if (otype == VOC_ASCII)
+ res = voc_executeASCII (query);
+ else if (otype == VOC_VOTABLE)
+ res = voc_executeVOTable (query);
+
+ voc_closeConnection (cone); /* close the cone connection */
+ voc_closeVOClient (0); /* clean up and shutdown */
+
+ return ((char *) res);
+}
+
+
+/******************************************************************************
+** CONECALLERTOFILE -- Simple all-in-one interface to call a Cone service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+voc_coneCallerToFile (char *url, double ra, double dec, double sr, int otype,
+ char *file)
+{
+ return (OK);
+}
+
+
+/******************************************************************************
+** SIAPCALLER -- Simple all-in-one interface to call a Siap service and
+** return the results as a text string of either the raw VOTable or a CSV.
+*/
+char *
+voc_siapCaller (char *url, double ra, double dec, double rsize, double dsize,
+ char *fmt, int otype)
+{
+ char *res = NULL;
+
+ DAL siap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (!vo && voc_initVOClient (NULL) == ERR)
+ return ((char *) NULL);
+
+ /* Get a new connection to the named service.
+ */
+ siap = voc_openSiapConnection (url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSiapQuery (siap, ra, dec, rsize, dsize, fmt);
+
+ if (otype == VOC_CSV)
+ res = voc_executeCSV (query);
+ else if (otype == VOC_TSV)
+ res = voc_executeTSV (query);
+ else if (otype == VOC_ASCII)
+ res = voc_executeASCII (query);
+ else if (otype == VOC_VOTABLE)
+ res = voc_executeVOTable (query);
+
+ voc_closeConnection (siap); /* close the siap connection */
+ voc_closeVOClient (0); /* clean up and shutdown */
+
+ return ((char *) res);
+}
+
+
+/******************************************************************************
+** SIAPCALLERTOFILE -- Simple all-in-one interface to call a Siap service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+voc_siapCallerToFile (char *url, double ra, double dec, double rsize,
+ double dsize, char *fmt, int otype, char *file)
+{
+ return (OK);
+}
+
+
+
+/******************************************************************************
+** SSAPCALLER -- Simple all-in-one interface to call a SSAP service and
+** return the results as a text string of either the raw VOTable or a CSV.
+*/
+char *
+voc_ssapCaller (char *url, double ra, double dec, double size,
+ char *band, char *time, char *fmt, int otype)
+{
+ char *res = NULL;
+
+ DAL ssap; /* DAL Connection */
+ Query query; /* query handle */
+
+
+ /* Initialize the VOClient code. Error messages are printed by the
+ * interface so we just quit if there is a problem.
+ */
+ if (!vo && voc_initVOClient (NULL) == ERR)
+ return ((char *) NULL);
+
+ /* Get a new connection to the named service.
+ */
+ ssap = voc_openSsapConnection (url); /* open a connection */
+
+ /* Form a query. Here we'll use the one search size we're given for
+ * both the RA,DEC sizes, and specify a null format.
+ */
+ query = voc_getSsapQuery (ssap, ra, dec, size, band, time, fmt);
+
+ if (otype == VOC_CSV)
+ res = voc_executeCSV (query);
+ else if (otype == VOC_TSV)
+ res = voc_executeTSV (query);
+ else if (otype == VOC_ASCII)
+ res = voc_executeASCII (query);
+ else if (otype == VOC_VOTABLE)
+ res = voc_executeVOTable (query);
+
+ voc_closeConnection (ssap); /* close the ssap connection */
+ voc_closeVOClient (0); /* clean up and shutdown */
+
+ return ((char *) res);
+}
+
+
+/******************************************************************************
+** SSAPCALLERTOFILE -- Simple all-in-one interface to call a Ssap service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+voc_ssapCallerToFile (char *url, double ra, double dec, double size,
+ char *band, char *time, char *fmt, int otype, char *file)
+{
+ return (OK);
+}
+
+
+
+/******************************************************************************
+** GETRAWURL -- Get a raw URL to a returned string. Note this is only
+** for text files because of the assumed use of EOF that may actually be
+** a NULL byte in a binary data stream.
+*/
+char *
+voc_getRawURL (char *url, int *nbytes)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "getRawURL", 0);
+ char c, *ip, *buf = NULL, *raw = NULL;
+ int nb = -1;
+
+
+ msg_addStringParam (msg, url);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getRawURL failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ strcpy (errmsg, "ERROR: getRawURL failed");
+ *nbytes = -1;
+ } else {
+ raw = ip = msg_getBuffer (result);
+ nb = result->buflen;
+
+ /* Skip leading newlines
+ */
+ while ((c = *ip) == '\n') {
+ ip++, nb--;
+ }
+ buf = calloc (result->buflen+2, sizeof (char));
+ memmove (buf, ip, nb);
+ *nbytes = nb;
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (raw) free ((void *)raw);
+ if (result) free ((void *)result);
+
+ return ((char *)buf);
+}
+
+
+
+/***************************************************************************
+** OPENCONNECTION -- Open a new DAL context connection.
+*/
+DAL
+voc_openConnection (char *service_url, int type)
+{
+ DAL dal = (int) VOC_NULL;
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "newConnection", 0);
+
+
+ /* Make sure we've been initialized properly first.
+ */
+ if (vo == (VOClient *) NULL) {
+ if (voc_initVOClient (NULL) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: Can't initialize VO Client....\n");
+ exit (1);
+ } else if (VOC_DEBUG)
+ printf ("Warning: Initializing VO Client....\n");
+ }
+
+ switch (type) {
+ case DAL_CONN: msg_addStringParam (msg, "DAL"); break;
+ case CONE_CONN: msg_addStringParam (msg, "Cone"); break;
+ case SIAP_CONN: msg_addStringParam (msg, "Siap"); break;
+ case SSAP_CONN: msg_addStringParam (msg, "Ssap"); break;
+ default:
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: Invalid newConnection request type=%d\n",
+ type);
+ if (msg) free ((void *) msg); /* free the pointers */
+ return ((DAL) VOC_NULL);
+ }
+
+ /* Send message and read result. */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot open connection\n");
+ } else
+ dal = msg_getIntResult (result, 0);
+
+
+ /* If we were given a service_url add it as a param and send message.
+ */
+ if (service_url)
+ voc_addServiceURL (dal, service_url);
+
+
+ /* Free the message and return the object ID.
+ */
+ if (msg) free ((void *)msg);
+ if (result) free ((void *)result);
+
+ return (dal);
+}
+
+
+/* Utility aliases for code readability.
+ */
+DAL voc_openConeConnection (char *service_url) {
+ return ( voc_openConnection (service_url, CONE_CONN) );
+}
+
+DAL voc_openSiapConnection (char *service_url) {
+ return ( voc_openConnection (service_url, SIAP_CONN) );
+}
+
+DAL voc_openSsapConnection (char *service_url) {
+ return ( voc_openConnection (service_url, SSAP_CONN) );
+}
+
+
+
+
+/***************************************************************************
+** CLOSECONNETION -- Close the requested connection, i.e. tell the server
+** we no longer need this handle.
+*/
+void
+voc_closeConnection (DAL dal)
+{
+ vocRes_t *result;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "removeConnection", 0);
+
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot close connection\n");
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+}
+
+
+/***************************************************************************
+** GETSERVICECOUNT -- Get a count of the number of services associated
+** with the given DAL connection context.
+*/
+int
+voc_getServiceCount (DAL dal)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getServiceCount", 0);
+ vocRes_t *result;
+ int count = -1;
+
+
+ /* Read result and check for any faults.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getServiceCount() failed\n");
+ } else
+ count = msg_getIntResult (result, 0);
+
+ if (VOC_DEBUG)
+ fprintf (stderr, "svcCount: DAL=%ld count=%ld\n",(long)dal,(long)count);
+
+ if (msg) free ((void *)msg); /* free the pointers and return the objID */
+ if (result) free ((void *)result);
+
+ return (count);
+}
+
+
+/***************************************************************************
+** ADDSERVICEURL -- Add a service URL to the specified connection.
+*/
+void
+voc_addServiceURL (DAL dal, char *service_url)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "addServiceURL", 0);
+
+ /* If we were given a service_url add it as a param and send message.
+ */
+ if (service_url) {
+ msg_addStringParam (msg, service_url);
+
+ /* Read result and check for any faults.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot add service URL: %s\n",
+ service_url);
+ }
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: empty service URL\n");
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+}
+
+
+/***************************************************************************
+** GETSERVICEURL -- Get the requested service URL for the connection.
+*/
+char *
+voc_getServiceURL (DAL dal, int index)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getServiceURL", 0);
+ char *url = (char *) NULL;
+
+
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getServiceURL() failed\n");
+ } else
+ url = msg_getStringResult (result, 0);
+
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (url);
+}
+
+
+/***************************************************************************
+** GETQUERY -- Get a generic Query context from the server.
+*/
+Query
+voc_getQuery (DAL dal, int type)
+{
+ Query query = (Query) VOC_NULL;
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (dal, "getQuery", 0);
+
+ switch (type) {
+ case DAL_CONN: msg_addStringParam (msg, "DAL"); break;
+ case CONE_CONN: msg_addStringParam (msg, "Cone"); break;
+ case SIAP_CONN: msg_addStringParam (msg, "Siap"); break;
+ case SSAP_CONN: msg_addStringParam (msg, "Ssap"); break;
+ default:
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: Invalid getQuery request type=%d\n", type);
+ if (msg) free ((void *)msg); /* free the pointers */
+ return (query);
+ }
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getQuery() failed\n");
+ } else
+ query = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (query);
+}
+
+
+/***************************************************************************
+** GETCONEQUERY -- Get a query for a Cone service. We take the typical
+** Cone arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+voc_getConeQuery (DAL dal, double ra, double dec, double sr)
+{
+ Query query = voc_getQuery (dal, CONE_CONN);
+
+ if (query == (Query) VOC_NULL) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot get Query\n");
+ return (query);
+ }
+
+ /* Allow for a negative search radius to inhibit adding the standard
+ ** cone parameters. This allows us to access the raw ServiceURL and
+ ** in the case of Vizier, to access the entire table.
+ */
+ if (sr >= 0.0) {
+ voc_addFloatParam (query, "RA", (double) ra);
+ voc_addFloatParam (query, "DEC",(double) dec);
+ voc_addFloatParam (query, "SR", (double) sr);
+ }
+
+ /* Add a RUNID string to the query for logging.
+ */
+ if (vo->use_runid)
+ voc_addStringParam (query, "RUNID", vo->runid);
+
+ return (query);
+}
+
+
+/***************************************************************************
+** GETSIAPQUERY -- Get a query for a SIAP service. We take the typical
+** SIAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+voc_getSiapQuery (DAL dal, double ra, double dec, double ra_size,
+ double dec_size, char *format)
+{
+ Query query = voc_getQuery (dal, SIAP_CONN);
+ char pos[SZ_PBUF], size[SZ_PBUF], fmt[SZ_PBUF];
+
+ if (query == (Query) VOC_NULL) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot get Query\n");
+ return (query);
+ }
+
+ memset (pos, 0, SZ_PBUF); /* clear arrays */
+ memset (size, 0, SZ_PBUF);
+ memset (fmt, 0, SZ_PBUF);
+
+
+ /* Encode the RA,DEC as a POS string.
+ */
+ sprintf (pos, "%g,%g", ra, dec);
+ voc_addStringParam (query, "POS", pos);
+
+
+ /* Encode the search box size, collapse to a single value of they're
+ * the same size.
+ */
+ if (ra_size == dec_size)
+ sprintf (size, "%g", ra_size);
+ else
+ sprintf (size, "%g,%g", ra_size,dec_size);
+
+ voc_addStringParam (query, "SIZE", size);
+
+
+ /* Encode the format request if we're given one.
+ */
+ if (format)
+ voc_addStringParam (query, "FORMAT", format);
+
+ /* Add a RUNID string to the query for logging.
+ */
+ if (vo->use_runid)
+ voc_addStringParam (query, "RUNID", vo->runid);
+
+ return (query);
+}
+
+
+/***************************************************************************
+** GETSSAPQUERY -- Get a query for a SSAP service. We take the typical
+** SIAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+voc_getSsapQuery (DAL dal, double ra, double dec, double size, char *band,
+ char *tim, char *format)
+{
+ Query query = voc_getQuery (dal, SSAP_CONN);
+ char pos[SZ_PBUF], sz[SZ_PBUF];
+
+
+ if (query == (Query) VOC_NULL) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot get Query\n");
+ return (query);
+ }
+
+ memset (pos, 0, SZ_PBUF); /* clear arrays */
+ memset (sz, 0, SZ_PBUF);
+
+
+ /* Encode the RA,DEC as a POS string, and the search size as POS.
+ */
+ sprintf (pos, "%g,%g", ra, dec);
+ voc_addStringParam (query, "POS", pos);
+ sprintf (sz, "%g", size);
+ voc_addStringParam (query, "SIZE", sz);
+
+
+ /* Encode the band, time and format requests if we're given one.
+ */
+ if (band)
+ voc_addStringParam (query, "BAND", band);
+ if (tim)
+ voc_addStringParam (query, "TIME", tim);
+ if (format)
+ voc_addStringParam (query, "FORMAT", format);
+
+ /* Add a RUNID string to the query for logging.
+ */
+ if (vo->use_runid)
+ voc_addStringParam (query, "RUNID", vo->runid);
+
+ return (query);
+}
+
+
+/***************************************************************************
+** ADDPARAM -- Add a parameter to a Query string.
+*/
+int
+voc_addIntParam (Query query, char *name, int ival)
+{
+ char buf[SZ_PBUF];
+
+ sprintf (buf, "%d", ival);
+ return ( voc_addStringParam (query, name, buf) );
+}
+
+int
+voc_addFloatParam (Query query, char *name, double dval)
+{
+ char buf[SZ_PBUF];
+
+ sprintf (buf, "%g", dval);
+ return ( voc_addStringParam (query, name, buf) );
+}
+
+int
+voc_addStringParam (Query query, char *name, char *str)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "addParameter", 0);
+ int status = OK;
+
+
+ /* Add the parameters to the message. */
+ msg_addStringParam (msg, name);
+ msg_addStringParam (msg, str);
+
+ /* send the message */
+ status = msg_resultStatus ( (result = msg_sendMsg (vo->io_chan, msg)) );
+
+ if (msg) free ((void *) msg); /* free the pointers */
+ if (result) free ((void *) result);
+
+ return (status);
+}
+
+
+
+/***************************************************************************
+** GETQUERYSTRING -- Get the complete query string that will be executed.
+*/
+char *
+voc_getQueryString (Query query, int type, int index)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "getQueryString", 0);
+ char *qstring = (char *) NULL;
+
+ switch (type) {
+ case DAL_CONN: msg_addStringParam (msg, "DAL"); break;
+ case CONE_CONN: msg_addStringParam (msg, "Cone"); break;
+ case SIAP_CONN: msg_addStringParam (msg, "Siap"); break;
+ case SSAP_CONN: msg_addStringParam (msg, "Ssap"); break;
+ default:
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: Invalid QueryString request type=%d\n",
+ type);
+ if (msg) free ((void *) msg); /* free the pointers */
+ return ((char *) NULL);
+ }
+
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot get query string URL\n");
+ } else
+ qstring = msg_getStringResult (result, 0);
+
+ if (msg) free ((void *) msg); /* free the pointers */
+ if (result) free ((void *) result);
+
+ return (qstring);
+}
+
+
+
+/***************************************************************************
+** EXECUTEQUERY -- Execute the specified query in the DAL server, return
+** the QResponse object handle.
+*/
+QResponse
+voc_executeQuery (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "execute", 0);
+ QResponse qr = (QResponse) VOC_NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: executeQuery failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ strcpy (errmsg, "executeQuery failed");
+ qr = -1;
+ } else
+ qr = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (qr);
+}
+
+
+
+/***************************************************************************
+** GETQUERYRESPONSE -- Utility procedure to get the QResponse handle when
+** the query itself was executed by a routine that doesn't directly return
+** it (e.g. voc_executeCSV()).
+*/
+QResponse
+voc_getQueryResponse (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "getQResponse", 0);
+ QResponse qr = (QResponse) VOC_NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getQueryResponse failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ strcpy (errmsg, "getQueryResponse failed");
+ qr = -1;
+ } else
+ qr = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (qr);
+}
+
+
+char *
+voc_executeCSV (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeCSV", 0);
+ char *raw = NULL, *csv = NULL, *rp = NULL, *buf = NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: executeCSV failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ buf = msg_getBuffer (result);
+ if (buf)
+ strcpy (errmsg, (buf ? buf : "executeCSV failed"));
+ } else
+ raw = msg_getBuffer (result);
+
+ if (raw) {
+ for (rp=raw; *rp && isspace(*rp); rp++)
+ ; /* skip leading whitespace */
+ csv = strdup (rp);
+ } else
+ csv = NULL;
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (raw) free ((void *)raw);
+ if (result) free ((void *)result);
+
+ return (csv);
+}
+
+
+char *
+voc_executeTSV (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeTSV", 0);
+ char *raw = NULL, *tsv = NULL, *rp = NULL, *buf = NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: executeTSV failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ buf = msg_getBuffer (result);
+ if (buf)
+ strcpy (errmsg, (buf ? buf : "executeTSV failed"));
+ } else
+ raw = msg_getBuffer (result);
+
+ if (raw) {
+ for (rp=raw; *rp && isspace(*rp); rp++)
+ ; /* skip leading whitespace */
+ tsv = strdup (rp);
+ } else
+ tsv = NULL;
+
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (raw) free ((void *)raw);
+ if (result) free ((void *)result);
+
+ return (tsv);
+}
+
+
+char *
+voc_executeASCII (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeASCII", 0);
+ char *raw = NULL, *ascii = NULL, *rp = NULL, *buf = NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: executeASCII failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ buf = msg_getBuffer (result);
+ if (buf)
+ strcpy (errmsg, (buf ? buf : "executeASCII failed"));
+ } else
+ raw = msg_getBuffer (result);
+
+ if (raw) {
+ for (rp=raw; *rp && isspace(*rp); rp++)
+ ; /* skip leading whitespace */
+ ascii = strdup (rp);
+ } else
+ ascii = NULL;
+
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (raw) free ((void *)raw);
+ if (result) free ((void *)result);
+
+ return (ascii);
+}
+
+
+char *
+voc_executeVOTable (Query query)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "executeVOTable", 0);
+ char *raw = NULL, *vot = NULL, *rp = NULL, *buf = NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: executeVOTable failed\n");
+ memset (errmsg, 0, SZ_ERRMSG);
+ buf = msg_getBuffer (result);
+ if (buf)
+ strcpy (errmsg, (buf ? buf : "executeVOTable failed"));
+ } else
+ raw = msg_getBuffer (result);
+
+ if (raw) {
+ for (rp=raw; *rp && isspace(*rp); rp++)
+ ; /* skip leading whitespace */
+ vot = strdup (rp);
+ } else
+ vot = NULL;
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (raw) free ((void *)raw);
+ if (result) free ((void *)result);
+
+ return (vot);
+}
+
+char *
+voc_getErrMsg ()
+{
+ return (errmsg);
+}
+
+
+/***************************************************************************
+** EXECUTEQUERYAS -- Execute the specified query in the DAL server,
+** saving the results in the specified format (e.g. CSV or VOTable) in
+** the specified file.
+*/
+int
+voc_executeQueryAs (Query query, char *fname, int type)
+{
+ return (0);
+}
+
+
+/***************************************************************************
+** GETRECORDCOUNT -- Get a count of the records returned by the QResponse.
+*/
+int
+voc_getRecordCount (QResponse qr)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getRecordCount", 0);
+ int count = -1;
+
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getRecordCount failed\n");
+ } else
+ count = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (count);
+}
+
+
+/***************************************************************************
+** Access by dataset attribute:
+*/
+QRecord
+voc_getRecord (QResponse qr, int recnum)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getRecord", 0);
+ int rec = -1;
+
+ msg_addIntParam (msg, recnum);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getRecord failed\n");
+ } else
+ rec = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (rec);
+}
+
+
+int
+voc_getAttrCount (QRecord rec)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttrCount", 0);
+ int count = -1;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getAttrCount failed\n");
+ } else
+ count = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (count);
+}
+
+
+char *
+voc_getFieldAttr (QResponse qr, int index, char *attr)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (qr, "getFieldAttr", 0);
+ char *id = (char *)NULL;
+
+ msg_addIntParam (msg, index);
+ msg_addStringParam (msg, attr);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getFieldAttr failed\n");
+ } else
+ id = msg_getStringResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (id);
+}
+
+
+char *
+voc_getAttrList (QRecord rec)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttrList", 0);
+ char *attr_list = (char *)NULL;
+
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getAttrList failed\n");
+ } else
+ attr_list = msg_getStringResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (attr_list);
+}
+
+
+
+/***************************************************************************
+** Dataset Attribute Methods:
+*/
+
+QRAttribute
+voc_getAttribute (QRecord rec, char *attrname)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getAttribute", 0);
+ int attr = -1;
+
+ msg_addStringParam (msg, attrname);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getAttribute failed\n");
+ } else
+ attr = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (attr);
+}
+
+
+/***
+ *** NOT YET IMPLEMENTED
+ **/
+
+void
+voc_setIntAttr (QRecord rec, char *attrname, int ival) { }
+
+void
+voc_setFloatAttr (QRecord rec, char *attrname, double dval) { }
+
+void
+voc_setStringAttr (QRecord rec, char *attrname, char *str) { }
+
+
+
+
+
+/***************************************************************************
+** Utility aliases for the messaging commands below.
+*/
+int voc_getIntAttr (QRecord rec, char *attrname) {
+ return ( voc_intValue ( voc_getAttribute (rec, attrname)) );
+}
+
+double voc_getFloatAttr (QRecord rec, char *attrname) {
+ return ( voc_floatValue ( voc_getAttribute (rec, attrname)) );
+}
+
+char * voc_getStringAttr (QRecord rec, char *attrname) {
+ return ( voc_stringValue ( voc_getAttribute (rec, attrname)) );
+}
+
+
+
+/*
+ */
+
+int
+voc_intValue (QRAttribute v)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) NULL;
+ int ival = 0;
+
+ if (v > 0) {
+ msg = (vocMsg_t *) msg_newCallMsg (v, "intValue", 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: intValue() failed\n");
+ } else
+ ival = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null attribute to intValue\n");
+
+ return (ival);
+}
+
+double
+voc_floatValue (QRAttribute v)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) NULL;
+ double dval = (double) 0.0;
+
+ if (v > 0) {
+ msg = (vocMsg_t *) msg_newCallMsg (v, "floatValue", 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: floatValue() failed\n");
+ } else
+ dval = msg_getFloatResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null attribute to floatValue\n");
+
+ return (dval);
+}
+
+char *
+voc_stringValue (QRAttribute v)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) NULL;
+ char *val = NULL, *str = NULL;
+ int len = 0;
+
+ if (v > 0) {
+ msg = (vocMsg_t *) msg_newCallMsg (v, "stringValue", 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: stringValue() failed\n");
+ } else {
+ val = msg_getStringResult (result, 0);
+ str = calloc (1, (len = strlen(val)));
+ strncpy (str, val, len);
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (val) free ((void *)val);
+ if (result) free ((void *)result);
+ }
+
+ return (str);
+}
+
+
+/***************************************************************************
+** GETDATASET -- Download the AccessReference dataset object to the named
+** file. If fname is NULL, a temp file will be created and the fname
+** pointer allocated with a string containing the name.
+*/
+int
+voc_getDataset (QRecord rec, char *acref, char *fname)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (rec, "getDataset", 0);
+ int fd, status = OK;
+ char name[SZ_FNAME];
+
+
+ msg_addStringParam (msg, acref);
+
+ /* Create a temp file if no name is supplied.
+ */
+ memset (name, 0, SZ_FNAME);
+ if (fname == (char *)NULL) {
+ strcpy (name, "dataXXXXXX");
+ if ((fd = mkstemp (name)) > 0)
+ close (fd);
+ fname = calloc (1, strlen (name) + 1);
+ strcpy (fname, name);
+ }
+ strncpy (name, fname, strlen(fname));
+
+ /* Send message and read result.
+ */
+ if (msg_sendRawMsg (vo->io_chan, msg) != ERR) {
+ result = msg_getResultToFile (vo->io_chan, name, TRUE);
+
+ if (msg_resultStatus (result) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: getDataset failed\n");
+ status = ERR;
+ }
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (status);
+}
diff --git a/vendor/voclient/libvoclient/vocDAL_f77.c b/vendor/voclient/libvoclient/vocDAL_f77.c
new file mode 100644
index 00000000..c84493ba
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocDAL_f77.c
@@ -0,0 +1,827 @@
+/***************************************************************************
+**
+** VOCF77.C -- Fortran binding for the VOClient interface. As part of
+** the binding we map the interface procedure names and convert string
+** constants as needed per Fortran rules. Note that another aspect of
+** the fortran calling convention is that the length of strings in the
+** argument list are appended to the call stack. As C code we need to
+** take this into account when defining the interface.
+**
+** M. Fitzpatrick, NOAO, Jul 2006
+**
+***************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* Fortran Interface Definitions.
+**
+** Fortran compilers on various platforms may append one or more trailing
+** underscores to symbol names, we'll use macros for the interface names
+** and use defines to see what the symbol name is.
+*/
+
+#ifdef _NO_US_
+#define VF_CONECALLTOFILE vfconetofile
+#define VF_SIAPCALLTOFILE vfsiaptofile
+#define VF_SSAPCALLTOFILE vfssaptofile
+#define VF_GETRAWURL vfgetrawurl
+
+#define VF_OPENCONNECTION vfopenconnection
+#define VF_OPENCONECONNECTION vfopenconeconnection
+#define VF_OPENSIAPCONNECTION vfopensiapconnection
+#define VF_OPENSSAPCONNECTION vfopenssapconnection
+#define VF_CLOSECONNECTION vfcloseconnection
+#define VF_GETSERVICECOUNT vfgetservicecount
+#define VF_ADDSERVICEURL vfaddserviceurl
+#define VF_GETSERVICEURL vfgetserviceurl
+#define VF_GETQUERY vfgetquery
+#define VF_GETCONEQUERY vfgetconequery
+#define VF_GETSIAPQUERY vfgetsiapquery
+#define VF_GETSSAPQUERY vfgetssapquery
+#define VF_ADDINTPARAM vfaddintparam
+#define VF_ADDFLOATPARAM vfaddfloatparam
+#define VF_ADDSTRINGPARAM vfaddstringparam
+#define VF_GETQUERYSTRING vfgetquerystring
+#define VF_EXECUTEQUERY vfexecquery
+#define VF_GETQUERYRESPONSE vfgetqr
+#define VF_EXECUTECSV vfexeccsv
+#define VF_EXECUTETSV vfexectsv
+#define VF_EXECUTEASCII vfexecascii
+#define VF_EXECUTEVOTABLE vfexecvotable
+#define VF_EXECUTEQUERYAS vfexecqueryas
+#define VF_GETRECORDCOUNT vfgetrecordcount
+#define VF_GETRECORD vfgetrecord
+#define VF_GETFIELDATTR vfgetfieldattr
+#define VF_GETATTRCOUNT vfgetattrcount
+#define VF_GETATTRLIST vfgetattrlist
+#define VF_GETATTRIBUTE vfgetattribute
+#define VF_GETINTATTR vfgetintattr
+#define VF_GETFLOATATTR vfgetfloatattr
+#define VF_GETSTRINGATTR vfgetstringattr
+#define VF_INTVALUE vfintvalue
+#define VF_FLOATVALUE vffloatvalue
+#define VF_STRINGVALUE vfstringvalue
+#define VF_GETDATASET vfgetdataset
+#define VF_SETINTATTR vfsetintattr
+#define VF_SETFLOATATTR vfsetfloatattr
+#define VF_SETSTRINGATTR vfsetstringattr
+
+#else
+#define VF_CONECALLTOFILE vfconetofile_
+#define VF_SIAPCALLTOFILE vfsiaptofile_
+#define VF_SSAPCALLTOFILE vfssaptofile_
+#define VF_GETRAWURL vfgetrawurl_
+
+#define VF_OPENCONNECTION vfopenconnection_
+#define VF_OPENCONECONNECTION vfopenconeconnection_
+#define VF_OPENSIAPCONNECTION vfopensiapconnection_
+#define VF_OPENSSAPCONNECTION vfopenssapconnection_
+#define VF_CLOSECONNECTION vfcloseconnection_
+#define VF_GETSERVICECOUNT vfgetservicecount_
+#define VF_ADDSERVICEURL vfaddserviceurl_
+#define VF_GETSERVICEURL vfgetserviceurl_
+#define VF_GETQUERY vfgetquery_
+#define VF_GETCONEQUERY vfgetconequery_
+#define VF_GETSIAPQUERY vfgetsiapquery_
+#define VF_GETSSAPQUERY vfgetssapquery_
+#define VF_ADDINTPARAM vfaddintparam_
+#define VF_ADDFLOATPARAM vfaddfloatparam_
+#define VF_ADDSTRINGPARAM vfaddstringparam_
+#define VF_GETQUERYSTRING vfgetquerystring_
+#define VF_EXECUTEQUERY vfexecquery_
+#define VF_GETQUERYRESPONSE vfgetqr_
+#define VF_EXECUTECSV vfexeccsv_
+#define VF_EXECUTETSV vfexectsv_
+#define VF_EXECUTEASCII vfexecascii_
+#define VF_EXECUTEVOTABLE vfexecvotable_
+#define VF_EXECUTEQUERYAS vfexecqueryas_
+#define VF_GETRECORDCOUNT vfgetrecordcount_
+#define VF_GETRECORD vfgetrecord_
+#define VF_GETFIELDATTR vfgetfieldattr_
+#define VF_GETATTRCOUNT vfgetattrcount_
+#define VF_GETATTRLIST vfgetattrlist_
+#define VF_GETATTRIBUTE vfgetattribute_
+#define VF_GETINTATTR vfgetintattr_
+#define VF_GETFLOATATTR vfgetfloatattr_
+#define VF_GETSTRINGATTR vfgetstringattr_
+#define VF_INTVALUE vfintvalue_
+#define VF_FLOATVALUE vffloatvalue_
+#define VF_STRINGVALUE vfstringvalue_
+#define VF_GETDATASET vfgetdataset_
+#define VF_SETINTATTR vfsetintattr_
+#define VF_SETFLOATATTR vfsetfloatattr_
+#define VF_SETSTRINGATTR vfsetstringattr_
+
+#endif
+
+
+/* Function prototypes.
+*/
+void VF_CONECALLTOFILE (char *url, double *ra, double *dec, double *sr,
+ int *otype, char *file, int *ier, int ulen, int flen);
+void VF_SIAPCALLTOFILE (char *url, double *ra, double *dec, double *rsize,
+ double *dsize, char *fmt, int *otype, char *file, int *ier,
+ int ulen, int fmtlen, int fillen);
+void VF_SSAPCALLTOFILE (char *url, double *ra, double *dec, double *size,
+ char *band, char *time, char *fmt, int *otype, char *file, int *ier,
+ int ulen, int blen, int tlen, int fmtlen, int fillen);
+void VF_GETRAWURL (char *url, char *result, int *len, int *ier,
+ int ulen, int rlen);
+
+void VF_OPENCONNECTION (char *service_url, int *type, DAL *dal, int *ier,
+ int len);
+void VF_OPENCONECONNECTION (char *service_url, DAL *cone, int *ier, int len);
+void VF_OPENSIAPCONNECTION (char *service_url, DAL *siap, int *ier, int len);
+void VF_OPENSSAPCONNECTION (char *service_url, DAL *ssap, int *ier, int len);
+void VF_CLOSECONNECTION (DAL *dal, int *ier);
+void VF_GETSERVICECOUNT (DAL *dal, int *count);
+void VF_ADDSERVICEURL (DAL *dal, char *service_url, int *ier, int len);
+void VF_GETSERVICEURL (DAL *dal, int *index, char *url, int *len, int slen);
+void VF_GETQUERY (DAL *dal, int *type, Query *query);
+void VF_GETCONEQUERY (DAL *dal, double *ra, double *dec, double *sr,
+ Query *query);
+void VF_GETSIAPQUERY (DAL *dal, double *ra, double *dec, double *ra_size,
+ double *dec_size, char *format, Query *query, int len);
+void VF_GETSSAPQUERY (DAL *dal, double *ra, double *dec, double *size,
+ char *band, char *time, char *format, Query *query,
+ int blen, int tlen, int flen);
+void VF_ADDINTPARAM (Query *query, char *name, int *ival, int *ier, int len);
+void VF_ADDFLOATPARAM (Query *query, char *name, double *dval, int *ier,
+ int len);
+void VF_ADDSTRINGPARAM (Query *query, char *name, char *str, int *ier,
+ int nlen, int slen);
+void VF_GETQUERYSTRING (Query *query, char *type, int *index, char *qstring,
+ int *len, int tlen, int qlen);
+void VF_EXECUTEQUERY (Query *query, QResponse *qr);
+void VF_GETQUERYRESPONSE (Query *query, QResponse *qr);
+void VF_EXECUTECSV (Query *query, char *csv, int *len, int clen);
+void VF_EXECUTETSV (Query *query, char *tsv, int *len, int tlen);
+void VF_EXECUTEASCII (Query *query, char *ascii, int *len, int alen);
+void VF_EXECUTEVOTABLE (Query *query, char *votable, int *len, int vlen);
+void VF_EXECUTEQUERYAS (Query *query, char *fname, int *type, int *ier,
+ int len);
+void VF_GETRECORDCOUNT (QResponse *qr, int *count);
+void VF_GETRECORD (QResponse *qr, int *recnum, QRecord *rec);
+void VF_GETFIELDATTR (QResponse *qr, int *fieldnum, char *attr, char *aval,
+ int *len, int alen);
+void VF_GETATTRCOUNT (QRecord *rec, int *count);
+void VF_GETATTRLIST (QRecord *rec, char *alist, int *len, int alen);
+void VF_GETATTRIBUTE (QRecord *rec, char *attrname, QRAttribute *attr, int len);
+void VF_GETINTATTR (QRecord *rec, char *attrname, int *ival, int len);
+void VF_GETFLOATATTR (QRecord *rec, char *attrname, double *dval, int len);
+void VF_GETSTRINGATTR (QRecord *rec, char *attrname, char *str, int *len,
+ int alen, int slen);
+void VF_INTVALUE (QRAttribute *v, int *ival);
+void VF_FLOATVALUE (QRAttribute *v, double *dval);
+void VF_STRINGVALUE (QRAttribute *v, char *str, int *len, int slen);
+void VF_GETDATASET (QRecord *rec, char *acref, char *fname, int *ier,
+ int alen, int flen);
+void VF_SETINTATTR (QRecord *rec, char *attrname, int *ival, int alen);
+void VF_SETFLOATATTR (QRecord *rec, char *attrname, double *dval, int alen);
+void VF_SETSTRINGATTR (QRecord *rec, char *attrname, char *str,
+ int alen, int slen);
+
+
+/** Private interface declarations.
+**/
+extern char *sstrip (char *instr, int len);
+extern void spad (char *outstr, int len);
+extern int typecode (char *typestr);
+
+extern void voc_debugLevel ();
+
+
+
+/******************************************************************************
+** CONECALLTOFILE -- Simple all-in-one interface to call a Cone service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+void
+VF_CONECALLTOFILE (char *url, double *ra, double *dec, double *sr, int *otype,
+ char *file, int *ier, int ulen, int flen)
+{
+ char *_url = sstrip (url, ulen);
+ char *_file = sstrip (file, flen);
+
+ *ier = voc_coneCallerToFile (_url, *ra, *dec, *sr, *otype, _file);
+
+ free ((char *) _url);
+ free ((char *) _file);
+}
+
+
+
+/******************************************************************************
+** SIAPCALLTOFILE -- Simple all-in-one interface to call a Siap service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+void
+VF_SIAPCALLTOFILE (char *url, double *ra, double *dec, double *rsize,
+ double *dsize, char *fmt, int *otype, char *file, int *ier,
+ int ulen, int fmtlen, int fillen)
+{
+ char *_url = sstrip (url, ulen);
+ char *_fmt = sstrip (fmt, fmtlen);
+ char *_file = sstrip (file, fillen);
+
+ *ier = voc_siapCallerToFile (_url, *ra, *dec, *rsize, *dsize, _fmt,
+ *otype, _file);
+
+ free ((char *) _url);
+ free ((char *) _fmt);
+ free ((char *) _file);
+}
+
+
+/******************************************************************************
+** SSAPCALLTOFILE -- Simple all-in-one interface to call a SSAP service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+void
+VF_SSAPCALLTOFILE (char *url, double *ra, double *dec, double *size,
+ char *band, char *tim, char *fmt, int *otype, char *file, int *ier,
+ int ulen, int blen, int tlen, int fmtlen, int fillen)
+{
+ char *_url = sstrip (url, ulen);
+ char *_band = sstrip (band, blen);
+ char *_tim = sstrip (tim, tlen);
+ char *_fmt = sstrip (fmt, fmtlen);
+ char *_file = sstrip (file, fillen);
+
+ *ier = voc_ssapCallerToFile (_url, *ra, *dec, *size, _band, _tim, _fmt,
+ *otype, _file);
+
+ free ((char *) _url);
+ free ((char *) _band);
+ free ((char *) _tim);
+ free ((char *) _fmt);
+ free ((char *) _file);
+}
+
+
+/******************************************************************************
+** GETRAWURL -- Get the raw contents of a URL to a string.
+*/
+void
+VF_GETRAWURL (char *url, char *result, int *len, int *ier, int ulen, int rlen)
+{
+ char *_url = sstrip (url, ulen);
+ int nbytes;
+ char *res = voc_getRawURL (_url, &nbytes);
+
+ memset (result, 0, rlen);
+ if ((*len = strlen(res)) > rlen)
+ fprintf (stderr, "Warning: truncating query string: len=%d maxch=%d\n",
+ *len, rlen);
+ spad (strncpy (result, res, *len), rlen);
+
+ free ((char *) res);
+ free ((char *) _url);
+}
+
+
+
+
+/******************************************************************************
+** OPENCONNECTION -- Open a new DAL context connection.
+*/
+void
+VF_OPENCONNECTION (char *service_url, int *type, DAL *dal, int *ier, int len)
+{
+ char *_service_url = sstrip (service_url, len);
+
+ *dal = voc_openConnection (_service_url, *type);
+ *ier = (*dal ? OK : ERR);
+
+ free ((char *) _service_url);
+}
+
+
+/******************************************************************************
+** Utility aliases for code readability.
+*/
+void
+VF_OPENCONECONNECTION (char *service_url, DAL *cone, int *ier, int len)
+{
+ char *_service_url = sstrip (service_url, len);
+
+ *cone = voc_openConeConnection (_service_url);
+ *ier = (*cone ? OK : ERR);
+
+ free ((char *) _service_url);
+}
+
+void
+VF_OPENSIAPCONNECTION (char *service_url, DAL *siap, int *ier, int len)
+{
+ char *_service_url = sstrip (service_url, len);
+
+ *siap = voc_openSiapConnection (_service_url);
+ *ier = (*siap ? OK : ERR);
+
+ free ((char *) _service_url);
+}
+
+void
+VF_OPENSSAPCONNECTION (char *service_url, DAL *ssap, int *ier, int len)
+{
+ char *_service_url = sstrip (service_url, len);
+
+ *ssap = voc_openSsapConnection (_service_url);
+ *ier = (*ssap ? OK : ERR);
+
+ free ((char *) _service_url);
+}
+
+
+
+
+/******************************************************************************
+** CLOSECONNETION -- Close the requested connection, i.e. tell the server
+** we no longer need this handle.
+*/
+void
+VF_CLOSECONNECTION (DAL *dal, int *ier)
+{
+ voc_closeConnection (*dal);
+ *ier = OK;
+}
+
+
+/******************************************************************************
+** GETSERVICECOUNT -- Get a count of the number of services associated
+** with the given DAL connection context.
+*/
+void
+VF_GETSERVICECOUNT (DAL *dal, int *count)
+{
+ *count = voc_getServiceCount (*dal);
+}
+
+
+/******************************************************************************
+** ADDSERVICEURL -- Add a service URL to the specified connection.
+*/
+void
+VF_ADDSERVICEURL (DAL *dal, char *service_url, int *ier, int len)
+{
+ char *_service_url = sstrip (service_url, len);
+
+ voc_addServiceURL (*dal, _service_url);
+ *ier = OK;
+
+ free ((char *) _service_url);
+}
+
+
+/******************************************************************************
+** GETSERVICEURL -- Get the requested service URL for the connection.
+** For Fortran we adjust the 'index' so the call can be 1-indexed.
+*/
+void
+VF_GETSERVICEURL (DAL *dal, int *index, char *url, int *len, int ulen)
+{
+ char *res = voc_getServiceURL (*dal, (*index - 1));
+
+ memset (url, 0, ulen);
+ if ((*len = strlen(res)) > ulen)
+ fprintf (stderr, "Warning: truncating URL string: len=%d maxch=%d\n",
+ *len, ulen);
+ spad (strncpy (url, res, *len), ulen);
+
+ free ((char *) res);
+}
+
+
+
+
+/******************************************************************************
+** GETQUERY -- Get a generic Query context from the server.
+*/
+void
+VF_GETQUERY (DAL *dal, int *type, Query *query)
+{
+ *query = voc_getQuery (*dal, *type);
+}
+
+
+/******************************************************************************
+** GETCONEQUERY -- Get a query for a Cone service. We take the typical
+** Cone arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+void
+VF_GETCONEQUERY (DAL *dal, double *ra, double *dec, double *sr, Query *query)
+{
+ *query = voc_getConeQuery (*dal, *ra, *dec, *sr);
+}
+
+
+/******************************************************************************
+** GETSIAPQUERY -- Get a query for a SIAP service. We take the typical
+** SIAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+void
+VF_GETSIAPQUERY (DAL *dal, double *ra, double *dec, double *ra_size,
+ double *dec_size, char *format, Query *query, int len)
+{
+ char *_format = sstrip (format,len);
+
+ *query = voc_getSiapQuery (*dal, *ra, *dec, *ra_size, *dec_size, _format);
+
+ free ((char *) _format);
+}
+
+
+/******************************************************************************
+** GETSSAPQUERY -- Get a query for a SSAP service. We take the typical
+** SSAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+void
+VF_GETSSAPQUERY (DAL *dal, double *ra, double *dec, double *size,
+ char *band, char *tim, char *format, Query *query,
+ int blen, int tlen, int flen)
+{
+ char *_band = sstrip (band,blen);
+ char *_tim = sstrip (tim,tlen);
+ char *_format = sstrip (format,flen);
+
+ *query = voc_getSsapQuery (*dal, *ra, *dec, *size, _band, _tim, _format);
+
+ free ((char *) _format);
+}
+
+
+/******************************************************************************
+** ADDPARAM -- Add a parameter to a Query string.
+*/
+void
+VF_ADDINTPARAM (Query *query, char *name, int *ival, int *ier, int len)
+{
+ char *_name = sstrip (name, len);
+
+ *ier = voc_addIntParam (*query, _name, *ival);
+
+ free ((char *) _name);
+}
+
+void
+VF_ADDFLOATPARAM (Query *query, char *name, double *dval, int *ier, int len)
+{
+ char *_name = sstrip (name, len);
+
+ *ier = voc_addFloatParam (*query, _name, *dval);
+
+ free ((char *) _name);
+}
+
+void
+VF_ADDSTRINGPARAM (Query *query, char *name, char *str, int *ier,
+ int nlen, int slen)
+{
+ char *_name = sstrip (name, nlen);
+ char *_str = sstrip (str, slen);
+
+ *ier = voc_addStringParam (*query, _name, _str);
+
+ free ((char *) _str);
+ free ((char *) _name);
+}
+
+
+
+/******************************************************************************
+** GETQUERYSTRING -- Get the complete query string that will be executed.
+** For Fortran we adjust the 'index' so the call can be 1-indexed.
+*/
+void
+VF_GETQUERYSTRING (Query *query, char *type, int *index, char *qstring,
+ int *len, int tlen, int qlen)
+{
+ char *_type = sstrip (type, tlen);
+ int code = typecode (_type);
+
+ char *res = voc_getQueryString (*query, code, (*index - 1));
+
+ memset (qstring, 0, qlen);
+ if ((*len = strlen(res)) > qlen)
+ fprintf (stderr, "Warning: truncating query string: len=%d maxch=%d\n",
+ *len, qlen);
+ spad (strncpy (qstring, res, *len), qlen);
+
+ free ((char *) res);
+ free ((char *) _type);
+}
+
+
+/******************************************************************************
+** EXECUTEQUERY -- Execute the specified query in the DAL server, return
+** the QResponse object handle.
+*/
+void
+VF_EXECUTEQUERY (Query *query, QResponse *qr)
+{
+ *qr = voc_executeQuery (*query);
+}
+
+
+void
+VF_GETQUERYRESPONSE (Query *query, QResponse *qr)
+{
+ *qr = voc_getQueryResponse (*query);
+}
+
+
+void
+VF_EXECUTECSV (Query *query, char *csv, int *len, int clen)
+{
+ char *res = voc_executeCSV (*query);
+
+ memset (csv, 0, clen);
+ if ((*len = strlen(res)) > clen)
+ fprintf (stderr, "Warning: truncating CSV: len=%d maxch=%d\n",
+ *len, clen);
+ spad (strncpy (csv, res, *len), clen);
+
+ free ((char *) res);
+}
+
+void
+VF_EXECUTETSV (Query *query, char *tsv, int *len, int tlen)
+{
+ char *res = voc_executeTSV (*query);
+
+ memset (tsv, 0, tlen);
+ if ((*len = strlen(res)) > tlen)
+ fprintf (stderr, "Warning: truncating TSV: len=%d maxch=%d\n",
+ *len, tlen);
+ spad (strncpy (tsv, res, *len), tlen);
+
+ free ((char *) res);
+}
+
+void
+VF_EXECUTEASCII (Query *query, char *ascii, int *len, int alen)
+{
+ char *res = voc_executeASCII (*query);
+
+ memset (ascii, 0, alen);
+ if ((*len = strlen(res)) > alen)
+ fprintf (stderr, "Warning: truncating CSV: len=%d maxch=%d\n",
+ *len, alen);
+ spad (strncpy (ascii, res, *len), alen);
+
+ free ((char *) res);
+}
+
+
+void
+VF_EXECUTEVOTABLE (Query *query, char *votable, int *len, int vlen)
+{
+ char *res = voc_executeVOTable (*query);
+
+ memset (votable, 0, vlen);
+ if ((*len = strlen(res)) > vlen)
+ fprintf (stderr, "Warning: truncating VOTable: len=%d maxch=%d\n",
+ *len, vlen);
+ spad (strncpy (votable, res, *len), vlen);
+
+ free ((char *) res);
+}
+
+
+
+/******************************************************************************
+** EXECUTEQUERYAS -- Execute the specified query in the DAL server,
+** saving the results in the specified format (e.g. CSV or VOTable) in
+** the specified file.
+*/
+void
+VF_EXECUTEQUERYAS (Query *query, char *fname, int *type, int *ier, int len)
+{
+ char *_fname = sstrip (fname,len);
+
+ *ier = voc_executeQueryAs (*query, _fname, *type);
+
+ free ((char *) _fname);
+}
+
+
+/* GETRECORDCOUNT -- Get a count of the records returned by the QResponse.
+*/
+void
+VF_GETRECORDCOUNT (QResponse *qr, int *count)
+{
+ *count = voc_getRecordCount (*qr);
+}
+
+
+/***************************************************************************
+** Access by dataset attribute:
+**
+** For Fortran we adjust the 'recnum' so the call can be 1-indexed.
+*/
+
+void
+VF_GETRECORD (QResponse *qr, int *recnum, QRecord *rec)
+{
+ *rec = voc_getRecord (*qr, (*recnum - 1));
+}
+
+
+void
+VF_GETFIELDATTR (QResponse *qr, int *fieldnum, char *attr, char *aval,
+ int *len, int alen)
+{
+ char *_attrname = sstrip (attr, alen);
+ char *res = voc_getFieldAttr (*qr, (*fieldnum - 1), _attrname);
+
+ memset (aval, 0, alen);
+ if ((*len = strlen(res)) > alen)
+ fprintf (stderr,
+ "Warning: truncating string attr '%s': len=%d maxch=%d\n",
+ _attrname, *len, alen);
+ spad (strncpy (aval, res, *len), alen);
+
+ free ((char *) res);
+ free ((char *) _attrname);
+}
+
+
+void
+VF_GETATTRCOUNT (QRecord *rec, int *count)
+{
+ *count = voc_getAttrCount (*rec);
+}
+
+
+void
+VF_GETATTRLIST (QRecord *rec, char *alist, int *len, int alen)
+{
+ char *res = voc_getAttrList (*rec);
+
+ memset (alist, 0, alen);
+ if ((*len = strlen(res)) > alen)
+ fprintf (stderr, "Warning: truncating attrList: len=%d maxch=%d\n",
+ *len, alen);
+ spad (strncpy (alist, res, *len), alen);
+
+ free ((char *) res);
+}
+
+
+
+/***************************************************************************
+** Dataset Attribute Methods:
+*/
+
+void
+VF_GETATTRIBUTE (QRecord *rec, char *attrname, QRAttribute *attr, int len)
+{
+ char *_attrname = sstrip (attrname,len);
+
+ *attr = voc_getAttribute (*rec, _attrname);
+
+ free ((char *) _attrname);
+}
+
+
+/*********************************************
+**** NOT YET IMPLEMENTED IN DAL CLIENT
+***/
+
+void
+VF_SETINTATTR (QRecord *rec, char *attrname, int *ival, int alen)
+{
+ char *_attrname = sstrip (attrname, alen);
+
+ voc_setIntAttr (*rec, _attrname, *ival);
+
+ free ((char *) _attrname);
+}
+
+void
+VF_SETFLOATATTR (QRecord *rec, char *attrname, double *dval, int alen)
+{
+ char *_attrname = sstrip (attrname, alen);
+
+ voc_setFloatAttr (*rec, _attrname, *dval) ;
+
+ free ((char *) _attrname);
+}
+
+void
+VF_SETSTRINGATTR (QRecord *rec, char *attrname, char *str, int alen, int slen)
+{
+ char *_attrname = sstrip (attrname, alen);
+ char *s = sstrip (str, slen);
+
+ voc_setStringAttr (*rec, _attrname, s);
+
+ free ((char *) _attrname);
+ free ((char *) s);
+}
+
+
+
+/******************************************************************************
+** Utility aliases for the messaging commands below.
+*/
+void
+VF_GETINTATTR (QRecord *rec, char *attrname, int *ival, int len)
+{
+ char *_attrname = sstrip (attrname, len);
+
+ *ival = voc_getIntAttr (*rec, _attrname);
+
+ free ((char *) _attrname);
+}
+
+void
+VF_GETFLOATATTR (QRecord *rec, char *attrname, double *dval, int len)
+{
+ char *_attrname = sstrip (attrname, len);
+
+ *dval = voc_getFloatAttr (*rec, _attrname);
+
+ free ((char *) _attrname);
+}
+
+void
+VF_GETSTRINGATTR (QRecord *rec, char *attrname, char *str, int *len,
+ int alen, int slen)
+{
+ char *_attrname = sstrip (attrname, alen);
+ char *res = voc_getStringAttr (*rec, _attrname);
+
+ memset (str, 0, slen);
+ if ((*len = strlen(res)) > slen)
+ fprintf (stderr,
+ "Warning: truncating string attr '%s': len=%d maxch=%d\n",
+ _attrname, *len, slen);
+ spad (strncpy (str, res, *len), slen);
+
+ free ((char *) res);
+ free ((char *) _attrname);
+}
+
+
+
+/******************************************************************************
+** Value Conversion routines.
+*/
+
+void
+VF_INTVALUE (QRAttribute *v, int *ival)
+{
+ *ival = voc_intValue (*v);
+}
+
+void
+VF_FLOATVALUE (QRAttribute *v, double *dval)
+{
+ *dval = voc_floatValue (*v);
+}
+
+void
+VF_STRINGVALUE (QRAttribute *v, char *str, int *len, int slen)
+{
+ char *res = voc_stringValue (*v);
+
+ memset (str, 0, slen);
+ if ((*len = strlen(res)) > slen)
+ fprintf (stderr, "Warning: truncating string value: len=%d maxch=%d\n",
+ *len, slen);
+ spad (strncpy (str, res, *len), slen);
+
+ free ((char *) res);
+}
+
+
+/******************************************************************************
+** GETDATASET -- Download the AccessReference dataset object to the named
+** file. If fname is NULL, a temp file will be created and the fname
+** pointer allocated with a string containing the name.
+*/
+void
+VF_GETDATASET (QRecord *rec, char *acref, char *fname, int *ier,
+ int alen, int flen)
+{
+ char *_acref = sstrip (acref, alen);
+ char *_fname = sstrip (fname, flen);
+
+ *ier = voc_getDataset (*rec, _acref, _fname);
+
+ free ((char *) _fname);
+ free ((char *) _acref);
+}
diff --git a/vendor/voclient/libvoclient/vocDAL_spp.c b/vendor/voclient/libvoclient/vocDAL_spp.c
new file mode 100644
index 00000000..fc55a877
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocDAL_spp.c
@@ -0,0 +1,891 @@
+/***************************************************************************
+**
+** SPP Language binding for the VOClient interface.
+**
+** Michael Fitzpatrick, NOAO, Jul 2006
+**
+***************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* SPP Name mapping macros. SPP procedure names are mappad as the first-5
+** plus the last character of a name minus any underscores. This should
+** be done such that a unique 6-character name is produced for each SPP
+** symbol. In these definitions the SPP code may use the long form of the
+** name in the code, the mapping is done automatically and so we need the
+** macros here so the symbol entered in the library is actually the short
+** name.
+*/
+
+#ifdef _NO_US_
+
+#define vx_conecaller vxconr
+#define vx_siapcaller vxsiar
+#define vx_ssapcaller vxssar
+#define vx_rawurl vxrawl
+#define vx_conetofile vxcone
+#define vx_siaptofile vxsiae
+#define vx_ssaptofile vxssae
+#define vx_dalconnection vxdaln
+#define vx_coneconnection vxconn
+#define vx_siapconnection vxsian
+#define vx_ssapconnection vxssan
+#define vx_closeconnection vxclon
+#define vx_servicecount vxsert
+#define vx_addserviceurl vxaddl
+#define vx_getserviceurl vxgetl
+#define vx_query vxquey
+#define vx_conequery vxcony
+#define vx_siapquery vxsiay
+#define vx_ssapquery vxssay
+#define vx_intparam vxintm
+#define vx_floatparam vxflom
+#define vx_stringparam vxstrm
+#define vx_querystring vxqueg
+#define vx_executequery vxexey
+#define vx_getqueryresp vxgetp
+#define vx_executecsv vxexev
+#define vx_executetab vxexeb
+#define vx_executeascii vxexei
+#define vx_executevotable vxexee
+#define vx_executequeryas vxexes
+#define vx_recordcount vxrect
+#define vx_record vxrecd
+#define vx_fieldattr vxgfat
+#define vx_atcount vxatct
+#define vx_atlist vxatlt
+#define vx_getattribute vxgete
+#define vx_sattri vxsati
+#define vx_sattrr vxsatr
+#define vx_sattrs vxsats
+#define vx_intattr vxintr
+#define vx_floatattr vxflor
+#define vx_stringattr vxstrr
+#define vx_intvalue vxinte
+#define vx_floatvalue vxfloe
+#define vx_stringvalue vxstre
+#define vx_getDataset vxgett
+
+#else
+
+#define vx_conecaller vxconr_
+#define vx_siapcaller vxsiar_
+#define vx_ssapcaller vxssar_
+#define vx_rawurl vxrawl_
+#define vx_conetofile vxcone_
+#define vx_siaptofile vxsiae_
+#define vx_ssaptofile vxssae_
+#define vx_dalconnection vxdaln_
+#define vx_coneconnection vxconn_
+#define vx_siapconnection vxsian_
+#define vx_ssapconnection vxssan_
+#define vx_closeconnection vxclon_
+#define vx_servicecount vxsert_
+#define vx_addserviceurl vxaddl_
+#define vx_getserviceurl vxgetl_
+#define vx_query vxquey_
+#define vx_conequery vxcony_
+#define vx_siapquery vxsiay_
+#define vx_ssapquery vxssay_
+#define vx_intparam vxintm_
+#define vx_floatparam vxflom_
+#define vx_stringparam vxstrm_
+#define vx_querystring vxqueg_
+#define vx_executequery vxexey_
+#define vx_getqueryresp vxgetp_
+#define vx_executecsv vxexev_
+#define vx_executetab vxexeb_
+#define vx_executeascii vxexei_
+#define vx_executevotable vxexee_
+#define vx_executequeryas vxexes_
+#define vx_recordcount vxrect_
+#define vx_record vxrecd_
+#define vx_fieldattr vxgfat_
+#define vx_atcount vxatct_
+#define vx_atlist vxatlt_
+#define vx_getattribute vxgete_
+#define vx_sattri vxsati_
+#define vx_sattrr vxsatr_
+#define vx_sattrs vxsats_
+#define vx_intattr vxintr_
+#define vx_floatattr vxflor_
+#define vx_stringattr vxstrr_
+#define vx_intvalue vxinte_
+#define vx_floatvalue vxfloe_
+#define vx_stringvalue vxstre_
+#define vx_getDataset vxgett_
+
+
+#endif
+
+
+
+/* SPP Type definitions.
+*/
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS NULL
+
+
+/* Public interface procedures.
+**
+*/
+int vx_conecaller (XCHAR *url, double *ra, double *dec, double *sr,
+ XCHAR *otype, XCHAR *res, int *maxch);
+int vx_siapcaller (XCHAR *url, double *ra, double *dec, double *rsize,
+ double *dsize, XCHAR *fmt, XCHAR *type, XCHAR *result, int *maxch);
+int vx_siaptofile (XCHAR *url, double *ra, double *dec, double *rsize,
+ double *dsize, XCHAR *fmt, int *otype, XCHAR *file);
+int vx_ssapcaller (XCHAR *url, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *fmt, XCHAR *type, XCHAR *result,
+ int *maxch);
+int vx_ssaptofile (XCHAR *url, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *fmt, int *otype, XCHAR *file);
+int vx_conetofile (XCHAR *url, double *ra, double *dec, double *sr,
+ XCHAR *otype, XCHAR *file);
+int vx_rawurl (XCHAR *url, XCHAR *result, int *maxch);
+
+DAL vx_dalconnection (XCHAR *service_url, int *type);
+DAL vx_coneconnection (XCHAR *service_url);
+DAL vx_siapconnection (XCHAR *service_url);
+DAL vx_ssapconnection (XCHAR *service_url);
+void vx_closeconnection (DAL *dal);
+int vx_servicecount (DAL *dal);
+void vx_addserviceurl (DAL *dal, XCHAR *service_url);
+void vx_getserviceurl (DAL *dal, int *index, XCHAR *url, int *maxch,
+ int *len);
+Query vx_query (DAL *dal, int *type);
+Query vx_conequery (DAL *dal, double *ra, double *dec, double *sr);
+Query vx_siapquery (DAL *dal, double *ra, double *dec, double *ra_size,
+ double *dec_size, XCHAR *format);
+Query vx_ssapquery (DAL *dal, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *format);
+int vx_intparam (Query *query, XCHAR *name, int *ival);
+int vx_floatparam (Query *query, XCHAR *name, double *dval);
+int vx_stringparam (Query *query, XCHAR *name, XCHAR *str);
+int vx_querystring (Query *query, XCHAR *type, int *index, XCHAR *qstring,
+ int *maxch);
+QResponse vx_executequery (Query *query);
+QResponse vx_getqueryresp (Query *query);
+int vx_executecsv (Query *query, XCHAR *csv, int *maxch);
+int vx_executetab (Query *query, XCHAR *tsv, int *maxch);
+int vx_executeascii (Query *query, XCHAR *ascii, int *maxch);
+int vx_executevotable (Query *query, XCHAR *votable, int *maxch);
+int vx_executequeryas (Query *query, XCHAR *fname, int *type);
+int vx_recordcount (QResponse *qr);
+QRecord vx_record (QResponse *qr, int *recnum);
+int vx_atcount (QRecord *rec);
+int vx_fieldattr (QResponse *qr, int *fieldnum, XCHAR *attr,
+ XCHAR *id, int *maxch);
+int vx_atlist (QRecord *rec, XCHAR *alist, int *maxch);
+
+QRAttribute vx_getattribute (QRecord *rec, XCHAR *attrname);
+void vx_sattri (QRecord *rec, XCHAR *attrname, int *ival);
+void vx_sattrr (QRecord *rec, XCHAR *attrname, double *dval);
+void vx_sattrs (QRecord *rec, XCHAR *attrname, XCHAR *str);
+int vx_intattr (QRecord *rec, XCHAR *attrname);
+double vx_floatattr (QRecord *rec, XCHAR *attrname);
+int vx_stringattr (QRecord *rec, XCHAR *attrname, XCHAR *attrval,
+ int *maxch);
+
+int vx_intvalue (QRAttribute *v);
+double vx_floatvalue (QRAttribute *v);
+int vx_stringvalue (QRAttribute *v, XCHAR *val, int *maxch);
+
+int vx_getDataset (QRecord *rec, XCHAR *acref, XCHAR *fname);
+
+
+
+/* Private interface procedures.
+*/
+extern PKCHAR *spp2c (XCHAR *instr, int maxch);
+extern int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+extern int spplen (XCHAR *str);
+extern int dal_typecode (char *typestr);
+extern int out_typecode (char *typestr);
+
+
+
+
+
+/******************************************************************************
+*********** High Level Functions **********
+******************************************************************************/
+
+
+/******************************************************************************
+** CONECALLER -- Simple all-in-one interface to call a Cone service and
+** return the result as a character string to the caller.
+*/
+int
+vx_conecaller (XCHAR *url, double *ra, double *dec, double *sr, XCHAR *otype,
+ XCHAR *result, int *maxch)
+{
+ int len = ERR;
+ char *_otype = spp2c (otype, spplen (otype));
+ char *_url = spp2c (url, spplen (url));
+
+ char *_result = voc_coneCaller (_url, *ra, *dec, *sr, out_typecode(_otype));
+ if (_result)
+ len = c2spp (_result, result, *maxch);
+
+ free ((char *) _otype);
+ free ((char *) _url);
+ if (_result) free ((char *) _result);
+
+ return (len);
+}
+
+
+/******************************************************************************
+** SIAPCALLER -- Simple all-in-one interface to call a SIAP service and
+** return the result as a character string to the caller.
+*/
+int
+vx_siapcaller (XCHAR *url, double *ra, double *dec, double *rsize,
+ double *dsize, XCHAR *fmt, XCHAR *type, XCHAR *result, int *maxch)
+{
+ int len = ERR;
+ char *_url = spp2c (url, spplen (url));
+ char *_fmt = spp2c (fmt, spplen (fmt)); /* image/fits, etc */
+ char *_type = spp2c (type, spplen (type)); /* csv or votable */
+
+ char *_result = voc_siapCaller (_url, *ra, *dec, *rsize, *dsize, _fmt,
+ out_typecode(_type));
+ if (_result)
+ len = c2spp (_result, result, *maxch);
+
+ free ((char *) _fmt);
+ free ((char *) _type);
+ free ((char *) _url);
+ if (_result) free ((char *) _result);
+
+ return (len);
+}
+
+
+/******************************************************************************
+** SSAPCALLER -- Simple all-in-one interface to call a SSAP service and
+** return the result as a character string to the caller.
+*/
+int
+vx_ssapcaller (XCHAR *url, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *fmt, XCHAR *type, XCHAR *result, int *maxch)
+{
+ int len = ERR;
+ char *_url = spp2c (url, spplen (url));
+ char *_band = spp2c (band, spplen (band));
+ char *_tim = spp2c (tim, spplen (tim));
+ char *_fmt = spp2c (fmt, spplen (fmt)); /* image/fits, etc */
+ char *_type = spp2c (type, spplen (type)); /* csv or votable */
+
+ char *_result = voc_ssapCaller (_url, *ra, *dec, *size, _band, _tim, _fmt,
+ out_typecode(_type));
+ if (_result)
+ len = c2spp (_result, result, *maxch);
+
+ free ((char *) _band);
+ free ((char *) _tim);
+ free ((char *) _fmt);
+ free ((char *) _type);
+ free ((char *) _url);
+ if (_result) free ((char *) _result);
+
+ return (len);
+}
+
+
+/******************************************************************************
+** RAWURL -- Get the contents of a raw URL to a string.
+*/
+int
+vx_rawurl (XCHAR *url, XCHAR *result, int *maxch)
+{
+ int nbytes, rlen;
+ char *_url = spp2c (url, spplen (url));
+ char *_result = voc_getRawURL (_url, &rlen);
+
+
+ nbytes = c2spp (_result, result, *maxch);
+
+ free ((char *) _url);
+ free ((char *) _result);
+
+ return (nbytes);
+}
+
+
+
+/******************************************************************************
+** CONETOFILE -- Simple all-in-one interface to call a Cone service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+vx_conetofile (XCHAR *url, double *ra, double *dec, double *sr, XCHAR *otype,
+ XCHAR *file)
+{
+ char *_otype = spp2c (otype, spplen (otype));
+ char *_url = spp2c (url, spplen (url));
+ char *_file = spp2c (file, spplen (file));
+
+ int ier = voc_coneCallerToFile (_url, *ra, *dec, *sr,
+ out_typecode(_otype), _file);
+
+ free ((char *) _file);
+ free ((char *) _url);
+ free ((char *) _otype);
+
+ return (ier);
+}
+
+
+/******************************************************************************
+** SIAPTOFILE -- Simple all-in-one interface to call a Siap service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+vx_siaptofile (XCHAR *url, double *ra, double *dec, double *rsize,
+ double *dsize, XCHAR *fmt, int *otype, XCHAR *file)
+{
+ char *_url = spp2c (url, spplen (url));
+ char *_file = spp2c (file, spplen (file));
+ char *_fmt = spp2c (fmt, spplen (fmt));
+
+ int ier = voc_siapCallerToFile (_url, *ra, *dec, *rsize, *dsize,
+ _fmt , *otype, _file);
+
+ free ((char *) _file);
+ free ((char *) _url);
+ free ((char *) _fmt );
+ return (ier);
+}
+
+
+/******************************************************************************
+** SSAPTOFILE -- Simple all-in-one interface to call a SSAP service and
+** save the resulting raw VOTable or a CSV to the named file.
+*/
+int
+vx_ssaptofile (XCHAR *url, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *fmt, int *otype, XCHAR *file)
+{
+ char *_url = spp2c (url, spplen (url));
+ char *_band = spp2c (band, spplen (band));
+ char *_tim = spp2c (tim, spplen (tim));
+ char *_file = spp2c (file, spplen (file));
+ char *_fmt = spp2c (fmt, spplen (fmt));
+
+ int ier = voc_ssapCallerToFile (_url, *ra, *dec, *size, _band, _tim,
+ _fmt , *otype, _file);
+
+ free ((char *) _file);
+ free ((char *) _url);
+ free ((char *) _fmt );
+ free ((char *) _tim );
+ free ((char *) _band );
+ return (ier);
+}
+
+
+
+/***************************************************************************
+** OPENCONNECTION -- Open a new DAL context connection.
+*/
+DAL
+vx_dalconnection (XCHAR *service_url, int *type)
+{
+ char *_service_url = spp2c (service_url, spplen (service_url));
+ int dal = voc_openConnection (_service_url, *type);
+
+ free ((char *) _service_url);
+ return (dal);
+}
+
+
+/* Utility aliases for code readability.
+*/
+DAL
+vx_coneconnection (XCHAR *service_url)
+{
+ char *_service_url = spp2c (service_url, spplen (service_url));
+ int dal = voc_openConeConnection (_service_url);
+
+ free ((char *) _service_url);
+ return (dal);
+}
+
+DAL
+vx_siapconnection (XCHAR *service_url)
+{
+ char *_service_url = spp2c (service_url, spplen (service_url));
+ int dal = voc_openSiapConnection (_service_url);
+
+ free ((char *) _service_url);
+ return (dal);
+}
+
+DAL
+vx_ssapconnection (XCHAR *service_url)
+{
+ char *_service_url = spp2c (service_url, spplen (service_url));
+ int dal = voc_openSsapConnection (_service_url);
+
+ free ((char *) _service_url);
+ return (dal);
+}
+
+
+
+/******************************************************************************
+** CLOSECONNETION -- Close the requested connection, i.e. tell the server
+** we no longer need this handle.
+*/
+void
+vx_closeconnection (DAL *dal)
+{
+ voc_closeConnection (*dal);
+}
+
+
+/******************************************************************************
+** GETSERVICECOUNT -- Get a count of the number of services associated
+** with the given DAL connection context.
+*/
+int
+vx_servicecount (DAL *dal)
+{
+ return (voc_getServiceCount (*dal));
+}
+
+
+/******************************************************************************
+** ADDSERVICEURL -- Add a service URL to the specified connection.
+*/
+void
+vx_addserviceurl (DAL *dal, XCHAR *service_url)
+{
+ char *_service_url = spp2c (service_url, spplen (service_url));
+
+ voc_addServiceURL (*dal, _service_url);
+
+ free ((char *) _service_url);
+}
+
+
+/******************************************************************************
+** GETSERVICEURL -- Get the requested service URL for the connection.
+*/
+void
+vx_getserviceurl (DAL *dal, int *index, XCHAR *url, int *maxch, int *len)
+{
+ char *_url = voc_getServiceURL (*dal, *index);
+
+ *len = c2spp (_url, url, *maxch);
+ free ((char *) _url);
+}
+
+
+/******************************************************************************
+** GETQUERY -- Get a generic Query context from the server.
+*/
+Query
+vx_query (DAL *dal, int *type)
+{
+ return ( voc_getQuery (*dal, *type) );
+}
+
+
+/******************************************************************************
+** GETCONEQUERY -- Get a query for a Cone service. We take the typical
+** Cone arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+vx_conequery (DAL *dal, double *ra, double *dec, double *sr)
+{
+ return ( voc_getConeQuery (*dal, *ra, *dec, *sr) );
+}
+
+
+/******************************************************************************
+** GETSIAPQUERY -- Get a query for a SIAP service. We take the typical
+** SIAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+vx_siapquery (DAL *dal, double *ra, double *dec, double *ra_size,
+ double *dec_size, XCHAR *format)
+{
+ char *_format = spp2c (format, spplen (format));
+ Query siap = voc_getSiapQuery (*dal, *ra, *dec, *ra_size, *dec_size,
+ _format);
+
+ free ((char *) _format);
+ return (siap);
+}
+
+
+/******************************************************************************
+** GETSIAPQUERY -- Get a query for a SIAP service. We take the typical
+** SIAP arguments in the interface routine but break it down into a series
+** of messages to get a general Query object and then add parameters.
+*/
+Query
+vx_ssapquery (DAL *dal, double *ra, double *dec, double *size,
+ XCHAR *band, XCHAR *tim, XCHAR *format)
+{
+ char *_band = spp2c (band, spplen (band));
+ char *_tim = spp2c (tim, spplen (tim));
+ char *_format = spp2c (format, spplen (format));
+
+ Query ssap = voc_getSsapQuery(*dal, *ra, *dec, *size, _band, _tim, _format);
+
+ free ((char *) _format);
+ return (ssap);
+}
+
+
+
+/******************************************************************************
+** ADDPARAM -- Add a parameter to a Query string.
+*/
+int
+vx_intparam (Query *query, XCHAR *name, int *ival)
+{
+ char *_name = spp2c (name, spplen (name));
+
+ int stat = voc_addIntParam (*query, _name, *ival);
+
+ free ((char *) _name);
+ return (stat);
+}
+
+int
+vx_floatparam (Query *query, XCHAR *name, double *dval)
+{
+ char *_name = spp2c (name, spplen (name));
+
+ int stat = voc_addFloatParam (*query, _name, *dval);
+
+ free ((char *) _name);
+ return (stat);
+}
+
+int
+vx_stringparam (Query *query, XCHAR *name, XCHAR *str)
+{
+ char *_name = spp2c (name, spplen (name));
+ char *_str = spp2c (str, spplen (str));
+
+ int stat = voc_addStringParam (*query, _name, _str);
+
+ free ((char *) _name);
+ free ((char *) _str);
+ return (stat);
+}
+
+
+
+
+/******************************************************************************
+** GETQUERYSTRING -- Get the complete query string that will be executed.
+*/
+int
+vx_querystring (Query *query, XCHAR *type, int *index, XCHAR *qstring,
+ int *maxch)
+{
+ char *_type = spp2c (type, spplen (type));
+
+ char *_qstring = voc_getQueryString (*query, dal_typecode(_type), *index);
+ int len = c2spp (_qstring, qstring, *maxch);
+
+ free ((char *) _type);
+ free ((char *) _qstring);
+ return (len);
+}
+
+
+/******************************************************************************
+** EXECUTEQUERY -- Execute the specified query in the DAL server, return
+** the QResponse object handle.
+*/
+QResponse
+vx_executequery (Query *query)
+{
+ return ( voc_executeQuery (*query) );
+}
+
+
+QResponse
+vx_getqueryresp (Query *query)
+{
+ return ( voc_getQueryResponse (*query) );
+}
+
+
+int
+vx_executecsv (Query *query, XCHAR *csv, int *maxch)
+{
+ char *_result = voc_executeCSV (*query);
+ int len = c2spp (_result, csv, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+int
+vx_executetab (Query *query, XCHAR *tsv, int *maxch)
+{
+ char *_result = voc_executeTSV (*query);
+ int len = c2spp (_result, tsv, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+int
+vx_executeascii (Query *query, XCHAR *ascii, int *maxch)
+{
+ char *_result = voc_executeASCII (*query);
+ int len = c2spp (_result, ascii, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+int
+vx_executevotable (Query *query, XCHAR *votable, int *maxch)
+{
+ char *_result = voc_executeVOTable (*query);
+ int len = c2spp (_result, votable, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+/******************************************************************************
+** EXECUTEQUERYAS -- Execute the specified query in the DAL server,
+** saving the results in the specified format (e.g. CSV or VOTable) in
+** the specified file.
+*/
+int
+vx_executequeryas (Query *query, XCHAR *fname, int *type)
+{
+ char *_fname = spp2c (fname, spplen (fname));
+ int stat = voc_executeQueryAs (*query, _fname, *type);
+
+ free ((char *) _fname);
+ return (stat);
+}
+
+
+/******************************************************************************
+** GETRECORDCOUNT -- Get a count of the records returned by the QResponse.
+*/
+int
+vx_recordcount (QResponse *qr)
+{
+ return ( voc_getRecordCount (*qr) );
+}
+
+
+/***************************************************************************
+** Access by dataset attribute:
+*/
+
+QRecord
+vx_record (QResponse *qr, int *recnum)
+{
+ return ( voc_getRecord (*qr, *recnum) );
+}
+
+
+int
+vx_atcount (QRecord *rec)
+{
+ return ( voc_getAttrCount (*rec) );
+}
+
+
+int
+vx_fieldattr (QRecord *rec, int *fieldnum, XCHAR *attr, XCHAR *aval, int *maxch)
+{
+/*
+ char *_attr = vot_getFieldID (*rec, *fieldnum, attr);
+*/
+ char *_attr = "";
+ int len = c2spp (_attr, attr, *maxch);
+
+ free ((char *) _attr);
+ return (len);
+}
+
+
+int
+vx_atlist (QRecord *rec, XCHAR *alist, int *maxch)
+{
+ char *_list = voc_getAttrList (*rec);
+ int len = c2spp (_list, alist, *maxch);
+
+ free ((char *) _list);
+ return (len);
+}
+
+
+
+/***************************************************************************
+** Dataset Attribute Methods:
+*/
+
+QRAttribute
+vx_getattribute (QRecord *rec, XCHAR *attrname)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ QRAttribute v = voc_getAttribute (*rec, _attrname);
+
+ free ((char *) _attrname);
+ return (v);
+}
+
+
+/***
+**** NOT YET IMPLEMENTED IN DAL CLIENT CLASSES.
+***/
+
+void
+vx_sattri (QRecord *rec, XCHAR *attrname, int *ival)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ voc_setIntAttr (*rec, _attrname, *ival);
+
+ free ((char *) _attrname);
+}
+
+void
+vx_sattrr (QRecord *rec, XCHAR *attrname, double *dval)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ voc_setFloatAttr (*rec, _attrname, *dval);
+
+ free ((char *) _attrname);
+}
+
+void
+vx_sattrs (QRecord *rec, XCHAR *attrname, XCHAR *str)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+ char *_str = spp2c (str, spplen (str));
+
+ voc_setStringAttr (*rec, _attrname, _str);
+
+ free ((char *) _attrname);
+ free ((char *) _str);
+}
+
+
+
+
+/***************************************************************************
+** Utility aliases for the messaging commands below.
+*/
+int
+vx_intattr (QRecord *rec, XCHAR *attrname)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ int ival = voc_getIntAttr (*rec, _attrname);
+
+ free ((char *) _attrname);
+ return (ival);
+}
+
+
+double
+vx_floatattr (QRecord *rec, XCHAR *attrname)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ double dval = voc_getFloatAttr (*rec, _attrname);
+
+ free ((char *) _attrname);
+ return (dval);
+}
+
+
+int
+vx_stringattr (QRecord *rec, XCHAR *attrname, XCHAR *attrval, int *maxch)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ char *_result = voc_getStringAttr (*rec, _attrname);
+ int len = c2spp (_result, attrval, *maxch);
+
+ free ((char *) _result);
+ free ((char *) _attrname);
+ return (len);
+}
+
+
+
+/***************************************************************************
+** Return attribute as given type.
+*/
+
+int
+vx_intvalue (QRAttribute *v)
+{
+ return ( voc_intValue (*v) );
+}
+
+double
+vx_floatvalue (QRAttribute *v)
+{
+ return ( voc_floatValue (*v) );
+}
+
+int
+vx_stringvalue (QRAttribute *v, XCHAR *val, int *maxch)
+{
+ char *_result = voc_stringValue (*v);
+ int len = c2spp (_result, val, *maxch);
+
+ free ((char *) _result);
+
+ return (len);
+}
+
+
+/***************************************************************************
+** GETDATASET -- Download the AccessReference dataset object to the named
+** file. If fname is NULL, a temp file will be created and the fname
+** pointer allocated with a string containing the name.
+*/
+int
+vx_getDataset (QRecord *rec, XCHAR *acref, XCHAR *fname)
+{
+ char *_acref = spp2c (acref, spplen (acref));
+ char *_fname = spp2c (fname, spplen (fname));
+
+ int stat = voc_getDataset (*rec, _acref, _fname);
+
+ free ((char *) _acref);
+ free ((char *) _fname);
+
+ return (stat);
+}
diff --git a/vendor/voclient/libvoclient/vocLib.c b/vendor/voclient/libvoclient/vocLib.c
new file mode 100644
index 00000000..19b2a435
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocLib.c
@@ -0,0 +1,920 @@
+/***************************************************************************
+ *
+ * VOCLient Library -- Client interface library to the VOClient daemon
+ * application. This API allows non-Java programs to make use of the DAL
+ * client interface by means of a remote procedure call between this
+ * interface and the VOClient daemon. State is maintained in the server and
+ * values passed back are language-neutral integer 'handles' on the remote
+ * objects, or simple int/double/string values.
+ *
+ * All tasks must initialize the VO Client and establish a connection to
+ * the VOClient daemon by calling voc_initVOClient() before making any service
+ * connections, thereafter new connections may be opened/closed at will.
+ * Convenience procedures allow for easy use of specific services, e.g. Cone
+ * or Siap. Service-specific parameters may be added to a query using the
+ * voc_add<type>Param() calls. No action is taken until an execute of the
+ * query is performed, applications may get back a handle on the result and
+ * interrogate attributes directly, the raw VOTable or a CSV representation
+ * of the result may also be returned.
+ *
+ * High-Level Functions:
+ * ---------------------
+ *
+ * voc_initVOClient (config_opts)
+ * voc_closeVOClient (shutdown_flag)
+ * voc_abortVOClient (errcode, errmsg)
+ *
+ * string = voc_coneCaller (url, ra, dec, sr, otype)
+ * status = voc_coneCallerToFile (url, ra, dec, sr, otype, file)
+ * string = voc_siapCaller (url, ra, dec, rsize, dsize, fmt, otype)
+ * status = voc_siapCallerToFile (url, ra, dec, rsize, dsize, fmt, otype, file)
+ *
+ *
+ * Interface Utility Procedures:
+ * ------------------------------
+ *
+ * flag = voc_validateObj (hcode)
+ * voc_debugLevel (level)
+ * voc_freePointer (ptr)
+ *
+ *
+ * Main DAL Interface Procedures:
+ * ------------------------------
+ *
+ * dal = voc_openConnection (svc_url, type)
+ * dal = voc_openConeConnection (svc_url) # Utility aliases
+ * dal = voc_openSiapConnection (svc_url)
+ * voc_closeConnection (dal)
+ *
+ * count = voc_getServiceCount (dal)
+ * voc_addServiceURL (dal, svc_url)
+ * url = voc_getServiceURL (dal, index)
+ *
+ * query = voc_getQuery (dal, type)
+ * query = voc_getConeQuery (dal, ra, dec, sr)
+ * query = voc_getSiapQuery (dal, ra, dec, ra_size, dec_size, format)
+ *
+ * stat = voc_addIntParam (query, pname, ival)
+ * stat = voc_addFloatParam (query, pname, dval)
+ * stat = voc_addStringParam (query, pname, str)
+ *
+ * url_str = voc_getQueryString (query, type, index)
+ *
+ * qr = voc_executeQuery (query)
+ * stat = voc_executeQueryAs (query, fname, type)
+ * csv_str = voc_executeCSV (query)
+ * vot_str = voc_executeVOTable (query)
+ *
+ * count = voc_getRecordCount (qr)
+ * rec = voc_getRecord (qr, recnum)
+ *
+ * attr = voc_getAttribute (rec, char *attrname)
+ * count = voc_getAttrCount (rec)
+ * list_str = voc_getAttrList (rec)
+ *
+ * ival = voc_intValue (attr)
+ * dval = voc_floatValue (attr)
+ * str = voc_stringValue (attr)
+ *
+ * voc_setIntAttr (rec, attrname, ival) (Not Yet Implemented)
+ * voc_setFloatAttr (rec, attrname, dval) ( " " " )
+ * voc_setStringAttr (rec, attrname, str) ( " " " )
+ *
+ * stat = voc_getDataset (rec, acref, fname)
+ *
+ *
+ * Sesame Name Resolver Interface:
+ * -------------------------------
+ *
+ * sr = voc_nameResolver (target)
+ * pos_str = voc_resolverPos (sr)
+ * radeg = voc_resolverRA (sr)
+ * decdeg = voc_resolverDEC (sr)
+ *
+ *
+ * Client programs may be written in any language that can interface to
+ * C code. Sample programs using the interface are provided as is a SWIG
+ * interface definition file. This inferface is based closely on the DAL
+ * client code produced for the 2005 NVOSS, as that interface evolves
+ *
+ *
+ * Michael Fitzpatrick, NOAO, June 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+VOClient *vo = (VOClient *) NULL; /* Interface runtime struct */
+
+#define SVR_MAXTRY 5
+#define DEF_VOCSERVER_PORT 6200
+
+
+typedef struct {
+ char server[SZ_FNAME]; /* VOClient server daemon */
+ char proxy[SZ_FNAME]; /* VOClient server proxy */
+ char config[SZ_FNAME]; /* VOClient config file */
+ char path[SZ_FNAME]; /* VOClientd path */
+ char runid[SZ_FNAME]; /* RUNID logging string */
+
+ int port; /* Server port */
+ int spawn; /* spawn a local daemon? */
+ int console; /* initiate a console? */
+ int onetrip; /* force a single instance? */
+ int use_cache; /* use object/registry cache? */
+ int use_runid; /* use RUNID parameter? */
+ int quiet; /* suppress API output? */
+} vocOpt;
+
+
+
+
+/*************************************
+ * Private procedure declarations.
+ *************************************/
+static int voc_openVOCServer (char *dev);
+static int voc_parseDev (char *dev, unsigned short *host_port,
+ unsigned long *host_addr);
+
+static vocOpt *voc_initOpts ();
+static vocOpt *voc_parseOpts (char *opts);
+static vocOpt *voc_readConfig (char *config);
+
+static char *voc_cacheCreate (char *home, char *cache, char *subdir);
+
+vocOpt *vopt = (vocOpt *) NULL;
+
+
+void voc_exitHandler();
+
+
+/******************************************************************************
+** OPENVOCLIENT -- Open and initialize the VOClient interface.
+*/
+int
+voc_initVOClient (char *opts)
+{
+ register int i;
+ char *home, *s, config[128], *opt_str;
+
+ char *VOCServer = (char *)NULL;
+ char *VOCProxy = (char *)NULL;
+ int port = DEF_VOCSERVER_PORT;
+ int spawn = TRUE;
+ int console = FALSE;
+ int onetrip = FALSE;
+
+
+ /* Initialize the options.
+ */
+ vopt = (vocOpt *) voc_initOpts ();
+
+
+ /* Configuration order (should be):
+ **
+ ** - defaults (default)
+ ** - $home/.voclient/config file (user pref default)
+ ** - application settings (app requirements)
+ ** - environment settings (app-specific req.)
+ */
+
+ /* Get a debug flag from the opt string or the environment if we can.
+ */
+ opt_str = ( opts ? opts : getenv ("VOC_OPTS"));
+ if (opt_str) {
+ if (! (vopt = voc_parseOpts (opt_str))) {
+ if (!vopt->quiet)
+ fprintf (stderr, "ERROR: Invalid opt string '%s'!\n", opt_str);
+ return ERR;
+
+ } else {
+ /* Allow an opt string to specify a config file to be used.
+ */
+ if (vopt->config && access (vopt->config, R_OK) == 0)
+ vopt = voc_readConfig (vopt->config);
+ }
+
+ } else {
+ /* Attempt to open the config file. This may be specified using
+ ** either and environment variable or the default path.
+ */
+ memset (config, 0, 128);
+ if ((s = getenv ("VOC_CONFIG")))
+ strcpy (config, s);
+ else if ((home = getenv ("HOME")))
+ sprintf (config, "%s/.voclient/config", home);
+
+ /* Use the config from the environment, then try the user's
+ ** config file before using the default.
+ */
+ if (access (config, R_OK) == 0)
+ vopt = voc_readConfig (config);
+ }
+
+
+ /* Use defaults if we didn't get any config options.
+ */
+ if (vopt == (vocOpt *)NULL) {
+ vopt = (vocOpt *) calloc (1, sizeof (vocOpt));
+ strcpy (vopt->server, DEF_SERVER);
+ strcpy (vopt->proxy, DEF_NET_SERVER);
+ strcpy (vopt->runid, DEF_RUNID);
+ vopt->port = DEF_VOCSERVER_PORT;
+ vopt->spawn = TRUE;
+ vopt->quiet = TRUE;
+ vopt->use_cache = TRUE;
+ vopt->use_runid = TRUE;
+ vopt->console = FALSE;
+ vopt->onetrip = onetrip;
+ }
+
+
+ /* Allow an environment variable to override a config file setting or
+ ** task option string.
+ */
+ VOCServer = ((s = getenv("VOC_SERVER")) ? s : vopt->server);
+ VOCProxy = ((s = getenv("VOC_PROXY")) ? s : vopt->proxy);
+
+ if (0) {
+ fprintf (stderr, "Server: '%s' Proxy: '%s' ", VOCServer, VOCProxy);
+ fprintf (stderr, "spawn=%d console=%d port=%d onetrip=%d\n",
+ spawn, console, port, onetrip);
+ }
+
+ if (vo) {
+ if (VOC_DEBUG)
+ fprintf (stderr, "Warning: VOClient already initialized!\n");
+ return OK;
+
+ } else {
+ /* Allocate the struct.
+ */
+ vo = calloc (1, sizeof (VOClient));
+
+ /* Get a channel to a server. If we can't start our own daemon, try
+ ** connecting to the proxy server.
+ */
+ if (!vopt->spawn) {
+ if ((vo->io_chan = voc_openVOCServer(VOCProxy)) == (int) VOC_NULL) {
+ if (!vopt->quiet)
+ fprintf (stderr,
+ "Cannot connect to local or proxy server.\n");
+ return ERR;
+ }
+
+
+ } else if ((vo->io_chan=voc_openVOCServer(VOCServer))==(int)VOC_NULL) {
+ char *cmd = calloc (1, 128);
+
+ if (VOC_DEBUG)
+ fprintf (stderr, "Couldn't open server, starting private...\n");
+
+ /* FIXME --
+ //system ("voclientd -private >& /dev/null &");
+ if (opts && strstr (opts, "console")) {
+ system ("voclientd -gui &");
+ } else {
+ system ("voclientd >& /dev/null &");
+ }
+ */
+ if (vopt->console)
+ sprintf (cmd, "%s -gui -port %d &",
+ (vopt->path[0] ? vopt->path : "voclientd"), vopt->port);
+ else
+ sprintf (cmd, "%s -port %d > /dev/null 2>&1 &",
+ (vopt->path[0] ? vopt->path : "voclientd"), vopt->port);
+
+ system (cmd);
+
+ /* We couldn't connect to the default server, so try to start
+ * a private version for this session. Timeout after SVR_MAXTRY
+ * attempts.
+ */
+ for (i=SVR_MAXTRY; i && vo->io_chan == (int) VOC_NULL; i--) {
+ sleep (1);
+ vo->io_chan = voc_openVOCServer ("6200");
+ }
+ if (i == 0) {
+ if ((vo->io_chan=voc_openVOCServer(VOCProxy))==(int)VOC_NULL) {
+ if (!vopt->quiet)
+ fprintf (stderr,
+ "ERROR: Cannot connect to or create server process\n");
+ return ERR;
+ }
+ }
+ }
+ }
+
+ /* Get a debug flag from the environment if we can.
+ */
+ vo->debug = ((s = getenv("VOC_DEBUG")) != NULL);
+ if (s && (i = atoi(s)))
+ vo->debug = i;
+
+ vo->quiet = vopt->quiet;
+ vo->use_cache = vopt->use_cache;
+ vo->use_runid = vopt->use_runid;
+ vo->onetrip = vopt->onetrip;
+ vo->runid = vopt->runid;
+
+ /* Post an exit handler so we clean up properly.
+ */
+ (void) atexit (voc_exitHandler);
+
+ return OK;
+}
+
+
+/******************************************************************************
+** CLOSEVOCLIENT -- Close and free the VOClient interface.
+*/
+void
+voc_closeVOClient (int shutdown)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_quitMsg ();
+
+
+ if (vo == (VOClient *) NULL) /* no-op on null pointer */
+ return;
+
+ if (vo->onetrip || shutdown) {
+ vocMsg_t *msg = (vocMsg_t *) msg_shutdownMsg ();
+
+ /* Send the shutdown request. We don't expect a reply so send a
+ * raw message and assume it got there. Use an asynchrnous write
+ * so we don't block.
+ */
+ (void) msg_sendRawMsg (vo->io_chan, msg);
+
+ } else {
+ vocRes_t *result;
+
+ /* Send the quit request. */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR)
+ if (vo->debug)
+ fprintf (stderr, "ERROR quitting voclientd.\n");
+
+ free ((vocRes_t *) result);
+ }
+
+ /* Close the VOClient connection.
+ */
+ if (vo->io_chan >= 0) {
+ close (vo->io_chan);
+ vo->io_chan = -1;
+ }
+
+ /* Free the structure.
+ */
+ if (msg) free ((vocMsg_t *) msg);
+ if (vo) free ((void *) vo);
+ vo = (VOClient *) NULL;
+}
+
+
+
+/******************************************************************************
+** ABORTVOCLIENT -- Close the VOClient interface and abort the application.
+*/
+void
+voc_abortVOClient (int code, char *msg)
+{
+ if (msg && !vo->quiet)
+ fprintf (stderr, "ABORT: %s\n", msg);
+ voc_closeVOClient (1);
+ exit (code);
+}
+
+
+
+/******************************************************************************
+** EXITHANDLER -- Automatically disconnect clients that forget to do so.
+*/
+void
+voc_exitHandler()
+{
+ if (vo)
+ voc_closeVOClient (0);
+}
+
+
+/******************************************************************************
+** VALIDATEOBJECT -- Given the hashcode hand for an object, verify it is
+** still valid in the daemon hasmap. Returns 0 if not valid, 1 if valid.
+*/
+int
+voc_validateObject (int hcode)
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (hcode, "validateObject", 0);
+ int flag = 0;
+
+ /* Send message and read result. */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) != ERR)
+ flag = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (flag);
+}
+
+
+/******************************************************************************
+** VOCREADY -- Verify that the VO Client daemon is alive and well.
+*/
+int
+voc_ready ()
+{
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_ackMsg ();
+ int flag = 0;
+
+ /* Send message and read result. */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) != ERR)
+ flag = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (flag);
+}
+
+
+
+/******************************************************************************
+** FREEPOINTER -- Free a pointer allocated in the interface. For Client
+** apps like the IRAF CL a pointer returned for a string cannot be freed
+** properly because of a proprietary memory i/o interface. So, we'll pass
+** it back into the interface to free it.
+*/
+void
+voc_freePointer (char *ptr)
+{
+ if (ptr)
+ free ((void *) ptr);
+}
+
+
+/******************************************************************************
+** DEBUGLEVEL -- Set the package debugging output level.
+*/
+void
+voc_debugLevel (int level) { vo->debug = level; }
+
+
+
+
+
+
+/*****************************************************************************
+ *****************************************************************************
+ ***
+ *** PRIVATE PROCEDURES
+ ***
+ *****************************************************************************
+ ****************************************************************************/
+
+
+/******************************************************************************
+** VOC_OPENVOCSERVER -- Open a connection to the VOClient server. The caller
+** may either specify a connection at device open time, or the procedure will
+** attempt to connect on a unix socket or local port if that fails.
+** The syntax for the imtdev argument is as follows:
+**
+** <domain> : <address>
+**
+** where <domain> is one of "inet" (internet tcp/ip socket), "unix" (unix
+** domain socket) or "fifo" (named pipe). The form of the address depends
+** upon the domain, as illustrated in the examples below.
+**
+** inet:6200 (or '6200') Server connection to port 6200 on the local
+** host. For a client, a connection to the
+** given port on the local host.
+**
+** inet:6200:foo.bar.edu Client connection to port 6200 on internet
+** host foo.bar.edu. The dotted form of address
+** may also be used.
+*/
+
+static int voc_openVOCServer (char *dev)
+{
+ int fd;
+ unsigned short host_port;
+ unsigned long host_addr;
+ struct sockaddr_in sockaddr;
+
+
+ if (dev == (char *) NULL)
+ dev = DEF_SERVER;
+
+ if (voc_parseDev (dev, &host_port, &host_addr) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "Cannot parse device: '%s'.\n", dev);
+ return ((int ) VOC_NULL);
+
+ } else {
+ /* Get a socket.
+ */
+ if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
+ if (!vo->quiet)
+ fprintf (stderr, "Cannot create inet socket on '%s'.\n", dev);
+ return ((int ) VOC_NULL);
+ }
+
+ /* Compose a network address.
+ */
+ memset ((char *)&sockaddr, 0, sizeof(sockaddr));
+ sockaddr.sin_family = AF_INET;
+ sockaddr.sin_port = host_port; /* htons() done above */
+ bcopy ((char *)&host_addr,(char *)&sockaddr.sin_addr,sizeof(host_addr));
+
+ /* Connect to the server.
+ */
+ if (connect(fd,(struct sockaddr *)&sockaddr,sizeof(sockaddr)) < 0) {
+ close (fd);
+ /*
+ if (!vo->quiet)
+ fprintf (stderr, "Cannot open server connection on '%s'.\n",
+ dev);
+ */
+ return ((int ) VOC_NULL);
+ }
+ }
+ if (VOC_DEBUG) fprintf (stderr, "Connection established on '%s'\n", dev);
+
+ return (fd);
+}
+
+
+
+/******************************************************************************
+** VOC_PARSEDEV -- Parse the VOClient Server device string to extract the host
+** and port number information.
+*/
+
+static int
+voc_parseDev (char *dev, unsigned short *hport, unsigned long *host_addr)
+{
+ char *ip, osfn[128], buf[128], host_str[128];
+ unsigned short port;
+ register int i;
+ struct hostent *hp;
+
+
+ if (dev == NULL)
+ return ERR;
+
+ memset (osfn, 0, 128);
+ memset (host_str, 0, 128);
+
+ /* Expand any %d fields in the network address to the UID. */
+ sprintf (osfn, (char *)dev, getuid(), getuid());
+
+ /* Form is a port number with an optional node name. First extract
+ * the port number.
+ */
+ if (isdigit (osfn[0]))
+ ip = osfn;
+ else if (strncmp (osfn, "inet:", 5) == 0)
+ ip = osfn + 5;
+
+ /* Get the port number. */
+ for (i=0; isdigit (*ip); i++, ip++)
+ buf[i] = (char) *ip;
+
+ port = atoi (buf); /* set port number */
+ *hport = htons (port);
+
+ /* Get host address. This may be specified either has a host
+ * name or as an Internet address in dot notation. If no host
+ * name is specified default to the local host.
+ */
+ if (*ip++ == ':') {
+ strcpy (host_str, ip);
+ } else
+ sprintf (host_str, "%s", "127.0.0.1");
+
+ if (isdigit (host_str[0])) {
+ *host_addr = inet_addr (host_str);
+ if ((int)*host_addr == -1)
+ return ERR;
+
+ } else if ((hp = gethostbyname (host_str))) {
+ bcopy (hp->h_addr, (char *)host_addr, sizeof(*host_addr));
+
+ } else
+ return ERR;
+
+ if (VOC_DEBUG)
+ fprintf (stderr, "parseDev: '%s' --> port=%d node='%s'\n",
+ dev, port, host_str);
+
+ return OK;
+}
+
+
+/******************************************************************************
+** VOC_INITOPTS -- Initialize the VOClient configuration options.
+*/
+static vocOpt *
+voc_initOpts ()
+{
+ /* Use defaults if we didn't get any config options.
+ */
+ if (vopt == (vocOpt *)NULL)
+ vopt = (vocOpt *) calloc (1, sizeof (vocOpt));
+
+ strcpy (vopt->server, DEF_SERVER);
+ strcpy (vopt->proxy, DEF_NET_SERVER);
+ strcpy (vopt->runid, DEF_RUNID);
+ vopt->port = DEF_VOCSERVER_PORT;
+ vopt->spawn = TRUE;
+ vopt->quiet = TRUE;
+ vopt->use_cache = TRUE;
+ vopt->use_runid = TRUE;
+ vopt->console = FALSE;
+ vopt->onetrip = FALSE;
+
+ return (vopt);
+}
+
+
+
+/******************************************************************************
+** VOC_PARSEOPTS -- Parse the VOClient Server option string. Options are
+** encoded as a comma-delimited list of options that include:
+**
+** spawn If set, will attempt to spawn a local instance of the
+** voclient daemon if not already running.
+**
+** port Default port to use for a local voclient daemon.
+**
+** console Create a GUI console window for the local daemon?
+**
+** quiet Client API shouldn't produce any error output, it
+** will be handled by the application.
+**
+** runid Set the RUNID logging string
+**
+** use_cache Use the object/registry cache?
+**
+** use_runid Use the RUNID parameter?
+**
+** server VOClient daemon server address. The address is of
+** the form
+** <port> ':' <host>
+**
+** where <host> can be a local machine name, a fully-
+** qualified domain name, or an IP address. <port> is
+** the socket number on which the 'voclientd' is running
+** on that machine. A server will be started if the
+** 'use_local' flag is set and <host> is 'localhost' or
+** the current machine name, the <port> specified here
+** will override the 'port' setting
+**
+** Keyword names may be abbreviated to the smallest unique word.
+**
+** An example opt string would be
+**
+** server=8081:localhost,spawn=yes,console=yes,runid=test
+**
+** to spawn a voclientd running on the local machine at port 8081 with a
+** GUI console panel.
+*/
+
+#define SZ_OPT_BUF 64
+
+
+static vocOpt *
+voc_parseOpts (char *opts)
+{
+ register int i;
+ char *ip, keyw[SZ_OPT_BUF], val[SZ_OPT_BUF];
+ char lserver[SZ_OPT_BUF];
+ char lproxy[SZ_OPT_BUF];
+ char lconfig[SZ_OPT_BUF];
+ char lpath[SZ_OPT_BUF];
+ char lrunid[SZ_OPT_BUF];
+ int lport = DEF_VOCSERVER_PORT;
+ int lspawn = TRUE;
+ int lcons = FALSE;
+ int lone = FALSE;
+ int lquiet = TRUE;
+ int luse_cache = TRUE;
+ int luse_runid = TRUE;
+ int len;
+
+ vocOpt *vopt = (vocOpt *) NULL;
+
+
+ memset (lserver, 0, SZ_OPT_BUF); strcpy (lserver, DEF_SERVER);
+ memset (lproxy, 0, SZ_OPT_BUF); strcpy (lproxy, DEF_NET_SERVER);
+ memset (lconfig, 0, SZ_OPT_BUF);
+ memset (lpath, 0, SZ_OPT_BUF);
+
+ /* Loop through the option string, setting values.
+ */
+ ip = opts;
+ while (*ip) {
+ memset (keyw, 0, SZ_OPT_BUF);
+ memset (val, 0, SZ_OPT_BUF);
+
+ for (i=0; *ip && *ip != '=' && i < SZ_OPT_BUF; )
+ keyw[i++] = tolower (*ip++);
+
+ if (*ip != '=') {
+ /* The presence of a keyword implies it's turned on.
+ */
+ val[0] = '1';
+ } else {
+ ip++;
+ for (i=0; *ip && *ip != ',' && i < SZ_OPT_BUF; )
+ val[i++] = tolower (*ip++);
+ }
+ len = strlen (val);
+
+
+ /* Ugly but effective parsing.
+ */
+ if (strncmp ("config", keyw, 4) == 0)
+ strcpy (lconfig, val);
+
+ else if (strncmp ("console", keyw, 4) == 0)
+ lcons = (val[0] == 'y' || val[0] == '1');
+
+ else if (strncmp ("onetrip", keyw, 2) == 0)
+ lone = (val[0] == 'y' || val[0] == '1');
+
+ else if (strncmp ("port", keyw, 2) == 0)
+ lport = atoi (val);
+
+ else if (strncmp ("proxy", keyw, 2) == 0)
+ strcpy (lproxy, val);
+
+ else if (strncmp ("runid", keyw, 3) == 0)
+ strcpy (lrunid, val);
+
+ /*
+ else if (strncmp ("voc_path", keyw, 8) == 0)
+ strcpy (lpath, val);
+ if (val[len-1] != '/')
+ strcat (lpath, "/");
+ */
+
+ else if (strncmp ("spawn", keyw, 2) == 0)
+ lspawn = (val[0] == 'y' || val[0] == '1');
+
+ else if (strncmp ("use_cache", keyw, 5) == 0)
+ luse_cache = (val[0] == 'y' || val[0] == '1');
+
+ else if (strncmp ("use_runid", keyw, 5) == 0)
+ luse_runid = (val[0] == 'y' || val[0] == '1');
+
+ else if (strncmp ("server", keyw, 2) == 0)
+ strcpy (lserver, val);
+
+ else if (strncmp ("quiet", keyw, 2) == 0)
+ lquiet = atoi (val);
+
+ else if (!lquiet)
+ fprintf (stderr, "parseOpt: invalid option '%s'='%s'\n", keyw, val);
+
+ /* Skip to next option or break.
+ */
+ if (*ip && *ip == ',')
+ ip++;
+ }
+
+
+ /* Save the values and return.
+ */
+ vopt = calloc (1, sizeof (vocOpt));
+ strcpy (vopt->server, lserver);
+ strcpy (vopt->proxy, lproxy);
+ strcpy (vopt->config, lconfig);
+ strcpy (vopt->path, lpath);
+ strcpy (vopt->runid, lrunid);
+ vopt->onetrip = lone;
+ vopt->port = lport;
+ vopt->spawn = lspawn;
+ vopt->quiet = lquiet;
+ vopt->use_cache = luse_cache;
+ vopt->use_runid = luse_runid;
+ vopt->console = lcons;
+
+ return (vopt);
+}
+
+
+static vocOpt *
+voc_readConfig (char *config)
+{
+ return ((vocOpt *)NULL);
+}
+
+
+
+/******************************************************************************
+** Cache Utility procedures.
+*/
+
+char *
+voc_getCacheDir (char *subdir)
+{
+ char *home, cache[SZ_FNAME], fullpath[SZ_FNAME], *path;
+ DIR *dir;
+
+
+ if ((home = getenv ("HOME")) ) {
+ memset (cache, 0, SZ_FNAME);
+ sprintf (cache, "%s/.voclient/cache", home);
+ sprintf (fullpath, "%s/%s", cache, subdir);
+ } else
+ return ((char *) NULL);
+
+
+ /* Create the cache dir if it doesn't already exist.
+ */
+ if (!(dir = opendir (fullpath)) )
+ path = voc_cacheCreate (home, cache, subdir);
+ else {
+ closedir (dir);
+ path = calloc (1, strlen (fullpath)+2);
+ strcpy (path, fullpath);
+ }
+
+ if ((dir = opendir (path)) ) {
+ closedir (dir);
+ return (path);
+ } else
+ return ((char *)NULL);
+}
+
+
+/* Create any needed cache directories.
+*/
+static char *
+voc_cacheCreate (char *home, char *cache, char *subdir)
+{
+ char *path, fname[SZ_FNAME];
+ DIR *dir;
+
+
+ /* Be sure we can open the HOME dir. */
+ if ((dir = opendir (home)) ) {
+ closedir (dir);
+ sprintf (fname, "%s/.voclient/", home);
+
+ /* Check for access to the $HOME/.voclient dir, if it doesn't exist
+ ** then create it.
+ */
+ if (!(dir = opendir (fname)) ) {
+ mkdir (fname, (mode_t) 0777);
+ sprintf (fname, "%s/.voclient/cache", home);
+ mkdir (fname, (mode_t) 0777); /* create cache dir */
+
+ } else {
+ /* The $HOME/.voclient exists, now check for a cache dir.
+ */
+ sprintf (fname, "%s/.voclient/cache", home);
+ if (!(dir = opendir (fname)) )
+ mkdir (fname, (mode_t) 0777);
+ }
+ if (dir)
+ closedir (dir);
+
+ /* We now have the cache dir, see what's to be done about a subdir.
+ */
+ if (subdir) {
+ path = calloc (1, SZ_FNAME);
+
+ sprintf (path, "%s/%s", cache, subdir);
+ if (!(dir = opendir (path)) )
+ mkdir (path, (mode_t) 0777);
+ else
+ closedir (dir);
+ return (path);
+
+ } else
+ return (strdup (cache));
+
+ }
+
+ return ((char *) NULL);
+}
+
+
+int voc_dbg (void) { static int count = 0; count++; return (count); }
diff --git a/vendor/voclient/libvoclient/vocLib_f77.c b/vendor/voclient/libvoclient/vocLib_f77.c
new file mode 100644
index 00000000..58b25913
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocLib_f77.c
@@ -0,0 +1,138 @@
+/***************************************************************************
+ *
+ * VOCF77.C -- Fortran binding for the VOClient interface. As part of
+ * the binding we map the interface procedure names and convert string
+ * constants as needed per Fortran rules. Note that another aspect of
+ * the fortran calling convention is that the length of strings in the
+ * argument list are appended to the call stack. As C code we need to
+ * take this into account when defining the interface.
+ *
+ * M. Fitzpatrick, NOAO, Jul 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* Fortran Interface Definitions.
+ *
+ * Fortran compilers on various platforms may append one or more trailing
+ * underscores to symbol names, we'll use macros for the interface names
+ * and use defines to see what the symbol name is.
+ */
+
+#ifdef _NO_US_
+#define VF_INITVOCLIENT vfinitvoclient
+#define VF_CLOSEVOCLIENT vfclosevoclient
+#define VF_ABORTVOCLIENT vfabortvoclient
+#define VF_DBGLEVEL vfdbglevel
+#define VF_VALIDATE vfvalidate
+#define VF_MKFNAME vfmkfname
+
+#else
+#define VF_INITVOCLIENT vfinitvoclient_
+#define VF_CLOSEVOCLIENT vfclosevoclient_
+#define VF_ABORTVOCLIENT vfabortvoclient_
+#define VF_DBGLEVEL vfdbglevel_
+#define VF_VALIDATE vfvalidate
+#define VF_MKFNAME vfmkfname_
+
+#endif
+
+
+/* Function prototypes.
+*/
+void VF_INITVOCLIENT (char *opts, int *ier, int len);
+void VF_CLOSEVOCLIENT (int *shutdown, int *ier);
+void VF_ABORTVOCLIENT (int *code, char *msg, int *ier, int len);
+void VF_DBGLEVEL (int *level);
+void VF_VALIDATE (int *hcode, int *flag);
+void VF_MKFNAME (char *root, int *num, char *fname, int *len,
+ int rlen, int flen);
+
+
+/** Private interface declarations.
+**/
+extern char *sstrip (char *instr, int len);
+extern void spad (char *outstr, int len);
+extern int typecode (char *typestr);
+
+extern void voc_debugLevel ();
+
+
+
+/******************************************************************************
+** OPENVOCLIENT -- Open and initialize the VOClient interface.
+*/
+void
+VF_INITVOCLIENT (char *opts, int *ier, int len)
+{
+ char *_opts = sstrip (opts, len);
+
+ *ier = voc_initVOClient (_opts);
+
+ free ((char *) _opts);
+}
+
+
+/******************************************************************************
+** CLOSEVOCLIENT -- Close and free the VOClient interface.
+*/
+void
+VF_CLOSEVOCLIENT (int *shutdown, int *ier)
+{
+ voc_closeVOClient (*shutdown);
+ *ier = OK;
+}
+
+
+
+/******************************************************************************
+** ABORTVOCLIENT -- Close the VOClient interface and abort the application.
+*/
+void
+VF_ABORTVOCLIENT (int *code, char *msg, int *ier, int len)
+{
+ char *_msg = sstrip (msg, len);
+
+ voc_abortVOClient (*code, _msg);
+ *ier = OK;
+
+ free ((char *) _msg);
+}
+
+
+/******************************************************************************
+** VALIDATE -- Validate an object in the daemon.
+*/
+void
+VF_VALIDATE (int *hcode, int *flag) { *flag = voc_validateObject (*hcode); }
+
+
+
+/******************************************************************************
+** DEBUGLEVEL -- Set the package debugging output level.
+*/
+void
+VF_DBGLEVEL (int *level) { voc_debugLevel(*level); }
+
+
+
+/******************************************************************************
+** MKFNAME -- Utility procedure for creating a file name.
+*/
+void
+VF_MKFNAME (char *root, int *num, char *fname, int *len, int rlen, int flen)
+{
+ memset (fname, 0, flen);
+ sprintf (fname, sstrip (root,rlen), *num);
+ *len = strlen (fname);
+ spad (fname, flen);
+}
diff --git a/vendor/voclient/libvoclient/vocLib_spp.c b/vendor/voclient/libvoclient/vocLib_spp.c
new file mode 100644
index 00000000..5e2b0ce0
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocLib_spp.c
@@ -0,0 +1,131 @@
+/***************************************************************************
+ *
+ * SPP Language binding for the VOClient interface.
+ *
+ * Michael Fitzpatrick, NOAO, Jul 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* SPP Name mapping macros. SPP procedure names are mappad as the first-5
+** plus the last character of a name minus any underscores. This should
+** be done such that a unique 6-character name is produced for each SPP
+** symbol. In these definitions the SPP code may use the long form of the
+** name in the code, the mapping is done automatically and so we need the
+** macros here so the symbol entered in the library is actually the short
+** name.
+*/
+
+#ifdef _NO_US_
+#define vx_initvoclient vxinit
+#define vx_closevoclient vxclot
+#define vx_abortvoclient vxabot
+#define vx_validate vxvale
+#define vx_dbglevel vxdbgl
+
+#else
+
+#define vx_initvoclient vxinit_
+#define vx_closevoclient vxclot_
+#define vx_abortvoclient vxabot_
+#define vx_validate vxvale_
+#define vx_dbglevel vxdbgl_
+
+#endif
+
+
+
+/* SPP Type definitions.
+*/
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS NULL
+
+
+/* Public interface procedures.
+**
+*/
+int vx_initvoclient (XCHAR *opts);
+void vx_closevoclient (int *shutdown);
+void vx_abortvoclient (int *code, XCHAR *msg);
+int vx_validate (int *hcode);
+void vx_dbglevel (int *level);
+
+
+
+/* Private interface procedures.
+*/
+extern PKCHAR *spp2c (XCHAR *instr, int maxch);
+extern int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+extern int spplen (XCHAR *str);
+extern int dal_typecode (char *typestr);
+extern int out_typecode (char *typestr);
+
+
+
+
+/******************************************************************************
+** OPENVOCLIENT -- Open and initialize the VOClient interface.
+*/
+int
+vx_initvoclient (XCHAR *opts)
+{
+ char *_opts = spp2c (opts, spplen (opts));
+
+ int ier = voc_initVOClient (_opts);
+
+ free ((char *) _opts);
+ return (ier);
+}
+
+
+/******************************************************************************
+** CLOSEVOCLIENT -- Close and free the VOClient interface.
+*/
+void
+vx_closevoclient (int *shutdown)
+{
+ voc_closeVOClient (*shutdown);
+}
+
+
+
+/******************************************************************************
+** ABORTVOCLIENT -- Close the VOClient interface and abort the application.
+*/
+void
+vx_abortvoclient (int *code, XCHAR *msg)
+{
+ char *_msg = spp2c (msg, spplen (msg));
+
+ voc_abortVOClient (*code, _msg);
+
+ free ((char *) _msg);
+}
+
+
+/******************************************************************************
+** VALIDATE -- Validate and object handle in the daemon.
+*/
+int
+vx_validate (int *hcode) { return (voc_validateObject (*hcode)); }
+
+
+/******************************************************************************
+** DEBUGLEVEL -- Set the package debugging output level.
+*/
+void
+vx_dbglevel (int *level) {
+ extern void voc_debugLevel ();
+ voc_debugLevel (*level);
+}
diff --git a/vendor/voclient/libvoclient/vocMsg.c b/vendor/voclient/libvoclient/vocMsg.c
new file mode 100644
index 00000000..9eb1cbfe
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocMsg.c
@@ -0,0 +1,1088 @@
+/**
+ * VOCMSG.C -- VOClient Messaging Interface. This interface is used
+ * internally to communicate between the API and the VOClient Daemon.
+ *
+ * msg = newCallMsg (objid, method, nparams)
+ * msg = newResultMsg (status, type, nitems)
+ * msg = newMsg (msgclass, str)
+ *
+ * msgAddIntParam (msg, ival)
+ * msgAddFloatParam (msg, dval)
+ * msgAddStringParam (msg, str)
+ *
+ * msgAddIntResult (msg, ival)
+ * msgAddFloatResult (msg, dval)
+ * msgAddStringResult (msg, str)
+ *
+ * sendMsg (fd, msg)
+ * freeMsg (msg)
+ *
+ * res = getResult (fd) # for reading RESULT msgs
+ * freeResult (res)
+ *
+ * stat = resultStatus (res)
+ * type = resultType (res)
+ * nitems = resultLength (res)
+ *
+ * ival = getIntResult (res, index)
+ * dval = getFloatResult (res, index)
+ * str = getStringResult (res, index)
+ *
+ *
+ * @file vocMsg.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ *************************************************************************
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/file.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+#include <sys/un.h>
+#include <errno.h>
+#include <signal.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <sys/uio.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+extern VOClient *vo;
+
+#define SELWIDTH 32
+
+
+/**
+ * Private procedures
+ */
+static int msg_write (int fd, char *buf, int nbytes);
+static int msg_read (int fd, char *buf, int maxbytes, int *nbytes);
+static void msg_addParam (vocMsg_t *msg, int type, char *str);
+static vocRes_t *msg_scanResult (char *result);
+static int msg_scanInt (char **ip);
+static char * msg_scanString (char **ip, char *val, int maxchar);
+static void * msg_readBulk (int fd, int *len, int *status);
+static int msg_readBulkToFile (int fd, char *fname, int nexpect,
+ int overwrite, int *len);
+
+static int msg_onsig(int sig, int *arg1, int *arg2);
+
+
+/***************************************************************************/
+/**** Public Procedures ****/
+/***************************************************************************/
+
+/**
+ * MSG_NEWCALLMSG -- Create a CALL message structure and initialize with
+ * the requested parameters. Structures are allocated dynamically,
+ * the caller is responsible for freeing the struct when finished.
+ *
+ * @brief Create a CALL message structure initialized w/ parameters.
+ * @fn msg = msg_newCallMsg (ObjectID objid, char *method, int nparams)
+ *
+ * @param objid object id
+ * @param method name of method to call
+ * @param nparams number of parameters in message
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_newCallMsg (ObjectID objid, char *method, int nparams)
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+
+ msg->type = MSG_CALL;
+ msg->objId = objid;
+ strncpy (msg->method, method, strlen (method));
+ msg->nparams = nparams;
+
+ sprintf (msg->message, "CALL { %ld %s %d }\n",
+ (long) objid, method, nparams);
+
+ return (msg);
+}
+
+
+/**
+ * MSG_NEWRESULTMSG -- Create a new RESULT message context and initialize
+ * with the requested parameters. The caller is responsible for freeing
+ * the struct when complete.
+ *
+ * @brief Create a RESULT message structure initialized w/ parameters.
+ * @fn msg = msg_newResultMsg (int status, int type, int nitems)
+ *
+ * @param status result status
+ * @param type result type
+ * @param nitems number of items in message
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_newResultMsg (int status, int type, int nitems)
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+
+ msg->type = MSG_RESULT;
+ msg->status = status;
+ msg->restype = type;
+ msg->nitems = nitems;
+
+ sprintf (msg->message, "RESULT { %d %d %d }\n", status, type, nitems);
+
+ return (msg);
+}
+
+
+/**
+ * MSG_NEWMSG -- Create a new MSG message context and initialize with the
+ * requested parameters. The caller is responsible for freeing the struct
+ * when complete.
+ *
+ * @brief Create a MSG message initialized w/ parameters.
+ * @fn msg = msg_newMsg (char *msgclass, char *str)
+ *
+ * @param msgclass message class
+ * @param str message string
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_newMsg (char *msgclass, char *str)
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+
+ msg->type = MSG_MESSAGE;
+ strncpy (msg->msgclass, msgclass, strlen (msgclass));
+ strncpy (msg->msgstr, str, strlen (str));
+
+ sprintf (msg->message, "MSG { %s %s }\n", msgclass, str);
+ return (msg);
+}
+
+
+/**
+ * MSG_SHUTDOWNMSG -- Create an END message to the VOClient Server to shut
+ * it down.
+ *
+ * @brief Create a END message to shutdown the server.
+ * @fn msg = msg_shutdownMsg (void)
+ *
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_shutdownMsg ()
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+ sprintf (msg->message, "END");
+ return (msg);
+}
+
+
+/**
+ * MSG_QUITMSG -- Create a QUIT message to the VOClient Server to tell it
+ * we're leaving but that it should keep running
+ *
+ * @brief Create a QUIT message
+ * @fn msg = msg_quitMsg (void)
+ *
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_quitMsg ()
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+ sprintf (msg->message, "QUIT");
+ return (msg);
+}
+
+
+/**
+ * MSG_ACKMSG -- Create an ACK message to the VOClient Server.
+ *
+ * @brief Create an ACK message
+ * @fn msg = msg_ackMsg (void)
+ *
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_ackMsg ()
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+ sprintf (msg->message, "ACK");
+ return (msg);
+}
+
+
+/**
+ * MSG_NOACKMSG -- Create an NO-ACK message to the VOClient Server.
+ *
+ * @brief Create a NOACK message
+ * @fn msg = msg_noackMsg (void)
+ *
+ * @returns a new message object
+ */
+vocMsg_t *
+msg_noackMsg ()
+{
+ vocMsg_t *msg = (vocMsg_t *) calloc (1, sizeof (vocMsg_t));
+ sprintf (msg->message, "NOACK");
+ return (msg);
+}
+
+
+/**
+ * MSG_SENDMSG -- Send the message to the VOClient Server and wait for the ACK.
+ * The simple form of the message returns the result handle, for the raw
+ * message we only send to allow to a bullk return object.
+ *
+ * @brief Send the message to the VOClient server
+ * @fn msg = msg_sendMsg (int fd, vocMsg_t *msg)
+ *
+ * @param fd message channel descriptor
+ * @param str message string
+ * @returns a new message object
+ */
+vocRes_t *
+msg_sendMsg (int fd, vocMsg_t *msg)
+{
+ int stat = msg_sendRawMsg (fd, msg);
+ return ( (stat != ERR) ? msg_getResult (fd) : (vocRes_t *)NULL );
+}
+
+
+/**
+ * MSG_SENDRAWMSG -- Send the message to the VOClient Server.
+ *
+ * @brief Send the message to the VOClient server
+ * @fn len = msg_sendRawMsg (int fd, vocMsg_t *msg)
+ *
+ * @param fd message channel descriptor
+ * @param str message string
+ * @returns a new message object
+ */
+int
+msg_sendRawMsg (int fd, vocMsg_t *msg)
+{
+ int stat = OK;
+
+ if (MSG_DEBUG)
+ fprintf (stderr, "SND: '%s'\n", msg->message);
+
+ strcat (msg->message, "\n");
+ stat = msg_write (fd, msg->message, (int)strlen (msg->message));
+
+ if (MSG_DEBUG)
+ fprintf (stderr, "SND: len=%d of %d\n", stat,(int)strlen(msg->message));
+
+ return (stat);
+}
+
+
+/**
+ * MSG_GETRESULT -- Read and parse a result message.
+ *
+ * @brief Read and parse a result message.
+ * @fn res = msg_getResult (int fd)
+ *
+ * @param fd message channel descriptor
+ * @returns result message object
+ */
+vocRes_t *
+msg_getResult (int fd)
+{
+ char c, last_ch = '\0', complete = 0;
+ int i=0, stat, nread = 0, rc;
+ char *buf;
+ vocRes_t *res = (vocRes_t *) NULL;
+ struct timeval timeout;
+ fd_set fds, wfds;
+
+
+ buf = (char *) calloc (1, SZ_MSGBUF); /* clear buffers */
+
+ timeout.tv_sec = 600;
+ timeout.tv_usec = 0;
+ FD_ZERO (&fds);
+ FD_SET (fd, &fds);
+
+ while (!complete) { /* read the result message */
+ memcpy (&wfds, &fds, sizeof(fds));
+ rc = select (fd+1, &wfds, NULL, NULL, &timeout);
+ if (rc == 0) { /* timeout */
+ /*
+ int stat = ERR;
+ fprintf (stderr, "msg_getResult timeout .... fd=%d\n", fd);
+ pthread_exit (&stat);
+ */
+ free ((void *) buf);
+ return (res);
+ }
+
+ stat = msg_read (fd, &c, 1, &nread);
+ if (c == ';' && last_ch == '}') {
+ buf[i++] = c;
+ complete++;
+ } else if (c != '\n' && c != '\0')
+ buf[i++] = c;
+
+ last_ch = c;
+ }
+ if (MSG_DEBUG) fprintf (stderr, "RCV:%d '%s'\n", complete, buf);
+
+ if (complete) /* parse a complete result */
+ res = (vocRes_t *) msg_scanResult (buf);
+
+ if (res->type == TY_BULK) { /* read any bulk data to follow */
+ int nbytes = msg_getIntResult (res, 0);
+
+ if (nbytes > 0) {
+ /* Read a bulk dataset of a specified size.
+ */
+ res->buf = calloc (1, (nbytes+1));
+ res->buflen = nbytes;
+ stat = msg_read (fd, res->buf, nbytes, &nread);
+
+ } else {
+ int len;
+
+ res->buf = (char *) msg_readBulk (fd, &len, &stat);
+ res->buflen = len;
+ }
+ }
+
+ free ((void *) buf);
+ return ((vocRes_t *) res);
+}
+
+
+/**
+ * MSG_GETRESULTTOFILE -- Read and parse a result message, save bulk data
+ * to the named file.
+ *
+ * @brief Read and parse a result message, saving data to named file.
+ * @fn res = msg_getResultToFile (int fd, char *fname, int overwrite)
+ *
+ * @param fd message channel descriptor
+ * @returns result message object
+ */
+vocRes_t *
+msg_getResultToFile (int fd, char *fname, int overwrite)
+{
+ char c, last_ch = '\0', complete = 0;
+ int i=0, stat=OK, nread = 0;
+ char *buf;
+ vocRes_t *res = (vocRes_t *) NULL;
+
+
+ buf = calloc (1, SZ_MSGBUF); /* clear buffers */
+
+ while (!complete && stat == OK) {
+ stat = msg_read (fd, &c, 1, &nread);
+ if (c == ';' && last_ch == '}') {
+ buf[i++] = c;
+ complete++;
+ } else if (c != '\n' && c != '\0')
+ buf[i++] = c;
+
+ last_ch = c;
+ }
+ if (MSG_DEBUG) fprintf (stderr, "RCV:%d '%s'\n", complete, buf);
+
+ if (complete)
+ res = (vocRes_t *) msg_scanResult (buf);
+
+ if (res->type == TY_BULK) {
+ int nbytes = msg_getIntResult (res, 0);
+ stat = msg_readBulkToFile (fd, fname, overwrite, nbytes, &res->buflen);
+ }
+
+ free ((void *) buf);
+ return ((vocRes_t *) res);
+}
+
+
+/**
+ * MSG_ADDINTPARAM -- Add a int parameter to an outgoing CALL message.
+ * We simply append to an existing message.
+ *
+ * @brief Add a int parameter to an outgoing CALL message
+ * @fn msg_addIntParam (vocMsg_t *msg, int ival)
+ *
+ * @param msg outgoing message
+ * @param ival integer value
+ * @returns nothing
+ */
+void msg_addIntParam (vocMsg_t *msg, int ival)
+{
+ char str[SZ_PBUF];
+ memset (str, 0, SZ_PBUF);
+ sprintf (str, "%d", ival);
+ msg_addParam (msg, 1, str);
+}
+
+
+/**
+ * MSG_ADDFLOATPARAM -- Add a float parameter to an outgoing CALL message.
+ * We simply append to an existing message.
+ *
+ * @brief Add a float parameter to an outgoing CALL message
+ * @fn msg_addFloatParam (vocMsg_t *msg, double dval)
+ *
+ * @param msg outgoing message
+ * @param dval double value
+ * @returns nothing
+ */
+void msg_addFloatParam (vocMsg_t *msg, double dval)
+{
+ char str[SZ_PBUF];
+ memset (str, 0, SZ_PBUF);
+ sprintf (str, "%f", dval);
+ msg_addParam (msg, 2, str);
+}
+
+
+/**
+ * MSG_ADDSTRINGPARAM -- Add a string parameter to an outgoing CALL message.
+ * We simply append to an existing message.
+ *
+ * @brief Add a string parameter to an outgoing CALL message
+ * @fn msg_addStringParam (vocMsg_t *msg, char *str)
+ *
+ * @param msg outgoing message
+ * @param str string value
+ * @returns nothing
+ */
+void msg_addStringParam (vocMsg_t *msg, char *str)
+{
+ msg_addParam (msg, 3, str);
+}
+
+
+/**
+ * MSG_ADDINTRESULT -- Add an integer value to a RESULT string.
+ *
+ * @brief Add a integer value to a RESULT string.
+ * @fn msg_addIntResult (vocMsg_t *msg, int ival)
+ *
+ * @param msg result string
+ * @param ival integer value
+ * @returns nothing
+ */
+void msg_addIntResult (vocMsg_t *msg, int ival)
+{
+ register int i;
+
+ for (i=strlen (msg->message); i > 0 && msg->message[i] != '}'; i--) ;
+ sprintf (&msg->message[i], " 1 1 %d }", ival);
+}
+
+
+/**
+ * MSG_ADDFLOATRESULT -- Add a float value to a RESULT string.
+ *
+ * @brief Add a float value to a RESULT string.
+ * @fn msg_addFloatResult (vocMsg_t *msg, int ival)
+ *
+ * @param msg result string
+ * @param dval double value
+ * @returns nothing
+ */
+void msg_addFloatResult (vocMsg_t *msg, double dval)
+{
+ register int i;
+
+ for (i=strlen (msg->message); i > 0 && msg->message[i] != '}'; i--) ;
+ sprintf (&msg->message[i], " 2 1 %g }", dval);
+}
+
+
+/**
+ * MSG_ADDSTRINGRESULT -- Add a string value to a RESULT string.
+ *
+ * @brief Add a string value to a RESULT string.
+ * @fn msg_addStringResult (vocMsg_t *msg, char *str)
+ *
+ * @param msg result string
+ * @param str string value
+ * @returns nothing
+ */
+void msg_addStringResult (vocMsg_t *msg, char *str)
+{
+ register int i;
+
+ for (i=strlen (msg->message); i > 0 && msg->message[i] != '}'; i--) ;
+ sprintf (&msg->message[i], " 3 %d %s }", (int)strlen (str), str);
+}
+
+
+/**
+ * MSG_RESULTSTATUS -- Get result status.
+ *
+ * @brief Get result status
+ * @fn status = msg_resultStatus (vocRes_t *res)
+ *
+ * @param msg result string
+ * @returns result status
+ */
+int msg_resultStatus (vocRes_t *res)
+{
+ return (res ? res->status : ERR);
+}
+
+
+/**
+ * MSG_RESULTTYPE -- Get result type.
+ *
+ * @brief Get result type
+ * @fn type = msg_resultType (vocRes_t *res)
+ *
+ * @param msg result string
+ * @returns result type
+ */
+int msg_resultType (vocRes_t *res)
+{
+ return (res->type);
+}
+
+
+/**
+ * MSG_RESULTLENGTH -- Get result length.
+ *
+ * @brief Get result length
+ * @fn len = msg_resultLength (vocRes_t *res)
+ *
+ * @param msg result string
+ * @returns result length
+ */
+int
+msg_resultLength (vocRes_t *res)
+{
+ return (res->nitems);
+}
+
+
+/**
+ * MSG_GETINTRESULT -- Get an integer result by index.
+ *
+ * @brief Get an integer result by index.
+ * @fn ival = msg_getIntResult (vocRes_t *res, int index)
+ *
+ * @param res result message
+ * @param index result index
+ * @returns integer value
+ */
+int
+msg_getIntResult (vocRes_t *res, int index)
+{
+ return (atoi (res->value[index]));
+}
+
+
+/**
+ * MSG_GETFLOATRESULT -- Get a float result by index.
+ *
+ * @brief Get a float result by index.
+ * @fn dval = msg_getFloatResult (vocRes_t *res, int index)
+ *
+ * @param res result message
+ * @param index result index
+ * @returns float value
+ */
+double
+msg_getFloatResult (vocRes_t *res, int index)
+{
+ return ((double)atof (res->value[index]));
+}
+
+
+/**
+ * MSG_GETSTRINGRESULT -- Get a string result by index.
+ *
+ * @brief Get a string result by index.
+ * @fn str = msg_getStringResult (vocRes_t *res, int index)
+ *
+ * @param res result message
+ * @param index result index
+ * @returns string value
+ */
+char *
+msg_getStringResult (vocRes_t *res, int index)
+{
+ if (strlen (res->value[index]) > SZ_MSGSTR)
+ *res->value[SZ_MSGSTR-1] = '\0';
+ return (strdup(res->value[index]));
+}
+
+
+/**
+ * MSG_GETBUFFER -- Get result buffer.
+ *
+ * @brief Get result buffer
+ * @fn len = msg_getBuffer (vocRes_t *res)
+ *
+ * @param res result message
+ * @returns pointer to result buffer
+ */
+void *
+msg_getBuffer (vocRes_t *res)
+{
+ return ((res ? (void *)res->buf : NULL));
+}
+
+
+
+/***************************************************************************/
+/**** Private Procedures ****/
+/***************************************************************************/
+
+
+/* MSG_WRITE -- Asynchronous write of data to the server. Write exactly
+ * nbytes bytes from the buffer to the server.
+ */
+
+static int
+msg_write (fd, buf, nbytes)
+int fd; /* connection file descriptor */
+char *buf; /* buffer to write */
+int nbytes; /* number of bytes to write */
+{
+ int n = 0, total = 0, maxbytes = nbytes;
+ char *ip = (char *)buf;
+ fd_set fds, allset;
+ struct timeval tv;
+ SIGFUNC sigpipe;
+
+
+ /* Enable a signal mask to catch SIGPIPE when the server has died.
+ */
+ sigpipe = (SIGFUNC) signal (SIGPIPE, (SIGFUNC)msg_onsig);
+
+
+ for (total=0; total < nbytes; total += n, ip += n) {
+ n = nbytes - total;
+ if (maxbytes)
+ n = ( (maxbytes < n) ? maxbytes : n);
+
+ FD_ZERO (&allset);
+ FD_SET (fd, &allset);
+ tv.tv_sec=1;
+ tv.tv_usec=0;
+
+ fds = allset;
+ if ((n = select (SELWIDTH, NULL, &fds, NULL, &tv)) > 0) {
+ if (FD_ISSET(fd,&fds)) {
+ if ((n = write (fd, ip, n)) < 0) {
+ signal (SIGPIPE, sigpipe); /* restore the signal mask */
+ return (ERR);
+ }
+ } else {
+ printf ("socket not ready ....\n");
+ signal (SIGPIPE, sigpipe); /* restore the signal mask */
+ return (ERR);
+ }
+ } else
+ printf ("msg_write select timeout ....\n");
+ }
+
+ signal (SIGPIPE, sigpipe); /* restore the signal mask */
+
+ return ((total < nbytes) ? ERR : total);
+}
+
+
+/* MSG_READ -- Read data from the server. Try to read at most maxbytes bytes
+ * from the server into the buffer, return the number of bytes actually read.
+ */
+
+static int
+msg_read (fd, buf, maxbytes, nbytes)
+int fd; /* connection file descriptor */
+char *buf; /* buffer to read */
+int maxbytes; /* max number of bytes to read */
+int *nbytes; /* number of bytes actually read*/
+{
+ int nread;
+ int nleft = maxbytes;
+ char *ptr = buf;
+
+ *nbytes = 0;
+ while (nleft > 0) {
+ if ( (nread = read(fd, ptr, nleft)) < 0) {
+ if (errno == EINTR)
+ nread = 0; /* and call read() again */
+ else
+ return (ERR);
+ } else if (nread == 0) {
+ nleft = 0;
+ break; /* EOF */
+ }
+
+ nleft -= nread;
+ ptr += nread;
+ *nbytes += nread;
+ }
+
+ return (OK);
+}
+
+
+/* MSG_READBULK -- Read a bulk data object from the connection stream.
+ * We don't know in advance how big this is, so read whatever is there
+ * (and hope for the best).
+ */
+
+#define SZ_CHUNK 4096
+#define SZ_BULKDATA 1024000
+
+static void *
+msg_readBulk (int fd, int *len, int *status)
+{
+ int i, rc, nbytes=0, nread=0, blen, leading=1;
+ void *chunk, *data, *dp, *ep;
+ char ch;
+ struct timeval timeout;
+ fd_set fds, wfds;
+
+
+ /* Allocate a big chunk and initial data buffer. We'll resize the
+ * output buffer as needed but want a fairly large size so we don't
+ * reallocate it too often. The 'chunk' is a much smaller size, i.e.
+ * what we can reasonably expect to get from a single network read.
+ */
+
+ chunk = calloc (1, SZ_CHUNK);
+ data = calloc (1, SZ_BULKDATA);
+
+ *status = OK; /* initialize */
+ nbytes = 0;
+ dp = data;
+ ep = data + SZ_BULKDATA; /* save end of buffer */
+ blen = SZ_BULKDATA;
+
+ timeout.tv_sec = 600;
+ timeout.tv_usec = 0;
+ FD_ZERO (&fds);
+ FD_SET (fd, &fds);
+
+ while (1) {
+ memset (chunk, 0, SZ_CHUNK);
+
+ memcpy (&wfds, &fds, sizeof(fds));
+ rc = select (fd+1, &wfds, NULL, NULL, &timeout);
+ if (rc == 0) { /* timeout */
+ /*
+ int stat = ERR;
+ fprintf (stderr, "msg_getBulk timeout .... fd=%d\n", fd);
+ pthread_exit (&stat);
+ */
+ free ((void *) chunk);
+ free ((void *) data);
+ return ( (void *) NULL );
+ }
+
+ if ( (nread = read (fd, chunk, SZ_CHUNK)) < 0) {
+ if (errno == EINTR)
+ nread = 0; /* and call read() again */
+ else {
+ *status = ERR;
+ if (nread > 0) {
+ bcopy (chunk, dp, nread);
+ nbytes += nread;
+ }
+ break;
+ }
+ } else if (nread == 1 && (ch = *((char*)chunk)) == '\n') {
+ bcopy ((char *)(chunk), dp, nread);
+ dp += nread;
+ nbytes += nread;
+
+ } else if (strncmp ("EOF", chunk+nread-3, 3) == 0) {
+ bcopy (chunk, dp, nread-2); /* copy data to output buffer */
+ nbytes += (nread - 3); /* update counters */
+ dp += (nread - 3);
+ break; /* EOF msg from server */
+
+ } else if (nread == 0)
+ break; /* EOF */
+
+ if (leading) {
+ for (i=0; i < nread && ((char *)chunk)[i] == '\n'; i++)
+ ;
+ leading = 0;
+ } else
+ i = 0;
+
+ bcopy ((char *)(chunk+i), dp, (nread-i)); /* copy to output buffer */
+
+ dp += (nread-i); /* update counters */
+ nbytes += (nread-i);
+
+
+ /* Reallocate the buffer for more data if we're close to filling
+ * the current buffer. Update other counters as well.
+ */
+ if ((ep-dp) < SZ_CHUNK) {
+ blen += SZ_BULKDATA;
+ data = realloc (data, blen);
+ dp = data + nbytes;
+ ep = data + blen;
+ }
+ }
+ *len = (nbytes - 1);
+ *len = nbytes;
+
+ if (chunk) free ((void *) chunk);
+
+ return ((void *) data);
+}
+
+
+/* MSG_READBULKTOFILE -- Read a bulk data object from the connection stream
+ * into the named file.
+ */
+
+static int
+msg_readBulkToFile (int fd, char *fname, int overwrite, int nexpect, int *len)
+{
+ int nbytes=0, nread=0, out = 0, status, leading=1, i;
+ void *chunk;
+
+
+ /* Open the file in the requested mode. If the 'overwrite' flag
+ * is set we'll remove the file first and create it anew.
+ */
+ if (access ((char *)fname, 0) == 0) {
+ if (overwrite) {
+ if (unlink (fname) < 0) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: Cannot overwrite file '%s'\n",
+ fname);
+ return (ERR);
+ }
+ } else {
+ if (!vo->quiet) {
+ fprintf (stderr, "ERROR: Operation would verwrite file '%s'\n",
+ fname);
+ }
+ return (ERR);
+ }
+ }
+
+ /* Open the file. */
+ if ((out = creat ((char *)fname, 0666)) < 0) {
+ close (out);
+ out = open ((char *)fname, 2);
+ }
+
+ status = OK; /* initialize */
+ nbytes = 0;
+ chunk = malloc (SZ_CHUNK);
+
+ while (1) {
+ memset (chunk, 0, SZ_CHUNK);
+ if ( (nread = read (fd, chunk, SZ_CHUNK)) < 0) {
+ if (errno == EINTR)
+ nread = 0; /* and call read() again */
+ else {
+ status = ERR;
+ break;
+ }
+
+ } else if (strncmp ("EOF", chunk+nread-3, 3) == 0) {
+ nread -= 3;
+ write (out, chunk, nread);
+ nbytes += nread; /* update counters */
+ break; /* EOF msg from server */
+
+ } else if (nread == 0)
+ break; /* EOF */
+
+ if (leading) {
+ for (i=0; i < nread && ((char *)chunk)[i] == '\n'; i++)
+ ;
+ leading = 0;
+ } else
+ i = 0;
+
+ /* write data to output file */
+ if (write (out, (char *)(chunk+i), (nread-i)) < 0) {
+ if (!vo->quiet) {
+ fprintf (stderr,
+ "rdBulkFile: Error writing to output file '%s'\n", fname);
+ }
+ status = ERR;
+ break;
+
+ } else
+ nbytes += (nread - i); /* update counters */
+ }
+ *len = (nbytes - 1);
+ *len = nbytes;
+
+ if (nexpect > 0 && nbytes != nexpect)
+ status = ERR;
+
+ close (out);
+ if (chunk) free ((void *) chunk); /* free the temp space */
+
+ return ((int) status);
+}
+
+
+/* MSG_ADDPARAM -- Add a parameter t a Query.
+ */
+static void
+msg_addParam (vocMsg_t *msg, int type, char *str)
+{
+ register int i, j;
+ char head[SZ_MSGBUF], tail[SZ_MSGBUF];
+
+ if (msg->type != MSG_CALL) {
+ if (!vo->quiet)
+ fprintf (stderr, "Invalid message type for addParam\n");
+ return;
+ }
+
+ /* Clear the buffer arrays.
+ */
+ memset (head, 0, SZ_MSGBUF);
+ memset (tail, 0, SZ_MSGBUF);
+
+ /* Find the end of the message and backup over the arguments to
+ * copy the 'tail' of the message.
+ */
+ for (j=i=0; msg->message[i] && j < 5; i++) {
+ if (msg->message[i] == ' ')
+ j++;
+ }
+ strncpy (tail, &msg->message[i], strlen (&msg->message[i]));
+
+ /* Append the new value.
+ */
+ for (i=strlen (tail); i > 0 && tail[i] != '}'; i--) ;
+ i = ((i-1) <= 0) ? 0 : (i-1);
+ if (type == 3)
+ sprintf (&tail[i], " %d '%s' }", type, str);
+ else
+ sprintf (&tail[i], " %d %s }", type, str);
+
+ /* Format a new 'head' of the message with the increased
+ * parameter count.
+ */
+ msg->nparams++;
+ sprintf (head, "CALL { %d %s %d ", msg->objId, msg->method, msg->nparams);
+
+ sprintf (msg->message, "%s%s", head, tail);
+}
+
+
+/* MSG_SCANRESULT -- Scan and parse the RESULT message.
+ */
+static vocRes_t *
+msg_scanResult (char *result)
+{
+ register int i;
+ char *ip = result;
+ char buf[SZ_MSGSTR], *bp;
+ vocRes_t *res = (vocRes_t *) calloc (1, sizeof (vocRes_t));
+
+ /* Skip over the keyword and opening brace.
+ */
+ for (ip = result; *ip && *ip != '{'; ip++)
+ ;
+ ip++;
+
+ res->status = msg_scanInt (&ip);
+ res->type = msg_scanInt (&ip);
+ res->nitems = msg_scanInt (&ip);
+
+ for (i=0; i < res->nitems; i++) {
+ bp = msg_scanString (&ip, buf, SZ_MSGSTR);
+ if (buf[0] != '}') {
+ memset (res->value[i], 0, SZ_MSGSTR);
+ strncpy (res->value[i], bp, SZ_MSGSTR-1);
+ }
+ }
+
+ return (res);
+}
+
+
+/* MSG_SCANINT -- Scan an integer from the string, leave the pointer after
+ * the last char read.
+ */
+static int
+msg_scanInt (char **ip)
+{
+ char buf[256], *op = *ip;
+ register int i;
+
+ while (*op && isspace (*op)) /* skip leading blanks */
+ op++;
+
+ memset (buf, 0, 256);
+ for (i=0; *op && !isspace (*op); i++)
+ buf[i] = *op++;
+
+ *ip = op;
+ return (atoi (buf));
+}
+
+
+/* MSG_SCANSTRING -- Scan a string from the input string, leave the pointer
+ * after the last char read.
+ */
+static char *
+msg_scanString (char **ip, char *val, int maxchar)
+{
+ register int i;
+ char *op = *ip;
+ char *np = val;
+
+ while (*op && isspace (*op)) /* skip leading blanks */
+ op++;
+
+ memset (val, 0, maxchar);
+ for (i=0; *op && !isspace (*op); ) {
+ if (*op == '"') {
+ for (op++; *op && *op != '"'; )
+ *np++ = *op++;
+ op++;
+ } else
+ *np++ = *op++;
+ }
+ *ip = op;
+
+ return (val);
+}
+
+
+/* MSG_ONSIG -- Catch a signal.
+ */
+static int
+msg_onsig (sig, arg1, arg2)
+int sig; /* signal which was trapped */
+int *arg1; /* not used */
+int *arg2; /* not used */
+{
+ /* If we get a SIGPIPE writing to a server the server has probably
+ * died. Make it look like there was an i/o error on the channel.
+ */
+ if (sig == SIGPIPE)
+ ;
+
+ return (sig);
+}
+
diff --git a/vendor/voclient/libvoclient/vocRegistry.c b/vendor/voclient/libvoclient/vocRegistry.c
new file mode 100644
index 00000000..bdaa697f
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocRegistry.c
@@ -0,0 +1,765 @@
+/**
+ * VOC_REGISTRYQUERY -- Utility code to act as a client interface to
+ * the NVO Registry service.
+ *
+ * RegistryQuery
+ * ----------------------
+ *
+ * High-Level Query:
+ *
+ * res = voc_regSearch (sql, keywords, orValues)
+ * res =voc_regSearchByService (svc, term, orValues)
+ *
+ * Programmatic Query:
+ *
+ * query = voc_regQuery (term, orValues) // OR keyword list?
+ *
+ * voc_regConstSvcType (query, svcType) // search constraints
+ * voc_regConstWaveband (query, waveband)
+ * voc_regDALOnly (query, value)
+ * voc_regSortRes (query, value)
+ *
+ * voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous
+ * voc_regRemoveSearchTerm (query, term) // remove search term
+ * count = voc_regGetSTCount (query)
+ *
+ * str = voc_regGetQueryString (query) // GET form of query
+ *
+ * res = voc_regExecute (query) // return result obj
+ * str = voc_regExecuteRaw (query) // return raw XML
+ *
+ * RegistryQueryResult
+ *
+ * count = voc_resGetCount (res)
+ *
+ * str = voc_resGetStr (res, attribute, index)
+ * dval = voc_resGetFloat (res, attribute, index)
+ * ival = voc_resGetInt (res, attribute, index)
+ *
+ * For this implementation, we've chose to use the NVO Registry at
+ * JHU/STScI, specifically the QueryRegistry() method which provides a
+ * 'SimpleResource' form of the resource record. Support for the newer
+ * IVOA standard will be added later, for now we can quickly access the most
+ * commonly used fields of a resource using both a keyword and SQL form of
+ * the search.
+ *
+ *
+ * @file vocRegistry.c
+ * @author Michael Fitzpatrick
+ * @version July 2006
+ *
+ *************************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+extern VOClient *vo; /* Interface runtime struct */
+
+
+
+
+/**
+ * VOC_REGSEARCH -- High-level procedure to form a query and execute it
+ * immediately. We allow that 'term1' may be a complex SQL WHERE predicate,
+ * and that 'term2' (or vice versa) is a search-keyword list. The
+ * 'orValues' applies to the keyword list (if present), otherwise it applies
+ * to the two search term elements. The default action if two terms are
+ * specified is to logically AND them.
+ *
+ * The thinking here is that one might want SIAP services for Quasars. This
+ * is easily expressed in an SQL form to get SIAP resources, however a
+ * Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a
+ * easy way to OR the keywords but AND that result with the SQL predicate.
+ *
+ * @brief High-level Registry query interface
+ * @fn res = voc_regSearch (char *term1, char *term2, int orValues)
+ *
+ * @param term1 first search term
+ * @param term2 second search term
+ * @param orValues logically OR values?
+ * @returns handle to Registry result object
+ */
+RegResult
+voc_regSearch (char *term1, char *term2, int orValues)
+{
+ RegResult res = (RegResult) VOC_NULL;
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regSearch", 0);
+
+ if (vo == (VOClient *) NULL) {
+ fprintf(stderr,"FATAL: VOClient not initialized in regSearch()\n");
+ exit (1);
+ }
+
+
+ if (term1 && term1[0]) {
+ msg_addStringParam (msg, term1);
+ }
+ if (term2 && term2[0]) {
+ msg_addStringParam (msg, term2);
+ msg_addIntParam (msg, orValues);
+ }
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regSearch() failed\n");
+ } else
+ res = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+
+ return ((RegResult) res);
+}
+
+
+/**
+ * VOC_REGSEARCHBYSERVICE -- Search the Registry using a search term and
+ * constrain by service type.
+ *
+ * @brief Search Registry using a search term and service constraint
+ * @fn res = voc_regSearchByService (char *svc, char *term, int orValues)
+ *
+ * @param svc service type constraint
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns handle to Registry result object
+ */
+RegResult
+voc_regSearchByService (char *svc, char *term, int orValues)
+{
+ RegResult res = (RegResult) VOC_NULL;
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regSearchBySvc", 0);
+
+
+ if (vo == (VOClient *) NULL) {
+ fprintf(stderr,"FATAL: VOClient not initialized in regSearchBySvc()\n");
+ exit (1);
+ }
+
+ msg_addStringParam (msg, svc);
+ msg_addStringParam (msg, term);
+ msg_addIntParam (msg, orValues);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regSearchBySvc() failed\n");
+ } else
+ res = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+
+ return ((RegResult) res);
+}
+
+
+/**
+ * VOC_REGQUERY -- Create a RegistryQuery object.
+ *
+ * @brief Create a RegistryQuery object.
+ * @fn v = voc_regQuery (char *term, int orValues)
+ *
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns handle to Registry Query object
+ */
+RegQuery
+voc_regQuery (char *term, int orValues)
+{
+ RegQuery query = (RegQuery) VOC_NULL;
+
+ if (vo == (VOClient *) NULL) {
+ fprintf(stderr,"FATAL: VOClient not initialized in regQuery()\n");
+ exit (1);
+ }
+
+ if (term) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "regQuery", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, term);
+ msg_addIntParam (msg, orValues);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regQuery() failed\n");
+ } else
+ query = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: empty search term\n");
+
+ return (query);
+}
+
+
+/**
+ * VOC_REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list)
+ * to the specified query.
+ *
+ * @brief Add a search term to the specified query
+ * @fn voc_regAddSearchTerm (RegQuery query, char *term, int orValue)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns nothing
+ */
+void
+voc_regAddSearchTerm (RegQuery query, char *term, int orValue)
+{
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query,
+ "regAddSearchTerm", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, term);
+ msg_addIntParam (msg, orValue);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regAddSearchTerm() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to regAddSearchTerm\n");
+}
+
+
+/**
+ * VOC_REMOVESEARCHTERM -- Remove the search term from the query.
+ *
+ * @brief Remove a search term to the specified query
+ * @fn voc_regRemoveSearchTerm (RegQuery query, char *term)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @returns nothing
+ */
+void
+voc_regRemoveSearchTerm (RegQuery query, char *term)
+{
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query,
+ "regRemoveSearchTerm", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, term);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regRemoveSearchTerm() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to regRemoveSearchTerm\n");
+}
+
+
+/**
+ * VOC_REGCONSTWAVEBAND -- Constrain the Registry search by waveband.
+ *
+ * @brief Constrain the Registry search by waveband.
+ * @fn voc_regConstWaveband (RegQuery query, char *waveband)
+ *
+ * @param query Registry query handle
+ * @param waveband waveband string
+ * @returns nothing
+ */
+void
+voc_regConstWaveband (RegQuery query, char *waveband)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regConstWaveband", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, waveband);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regConstWaveband() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+}
+
+
+/**
+ * VOC_REGCONSTSVCTYPE -- Constraing the Registry search by service type.
+ *
+ * @brief Constrain the Registry search by service type.
+ * @fn voc_regConstWaveband (RegQuery query, char *svcType)
+ *
+ * @param query Registry query handle
+ * @param svcType service type string
+ * @returns nothing
+ */
+void
+voc_regConstSvcType (RegQuery query, char *svcType)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regConstSvcType", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, svcType);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regConstSvcType() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+}
+
+
+/**
+ * VOC_REGDALONLY -- Set the "DAL Only" flag. If set, we expand a resource
+ * search to break out the individual DAL services into separate results.
+ *
+ * @brief Set the "DAL Only" flag
+ * @fn voc_regDALOnly (RegQuery query, int value)
+ *
+ * @param query Registry query handle
+ * @param value value of the DAL-only flag
+ * @returns nothing
+ */
+void
+voc_regDALOnly (RegQuery query, int value)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regDALOnly", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addIntParam (msg, value);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regDALOnly() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+}
+
+
+/**
+ * VOC_REGSORTRES -- Set the resource "sort" flag. If enabled, we try to
+ * order the resource table by some logical means.
+ *
+ * @brief Set the resource "sort" flag
+ * @fn voc_regSortRes (RegQuery query, int value)
+ *
+ * @param query Registry query handle
+ * @param value value of the sort flag
+ * @returns nothing
+ */
+void
+voc_regSortRes (RegQuery query, int value)
+{
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regSortRes", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addIntParam (msg, value);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regSortRes() failed\n");
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+}
+
+
+/**
+ * VOC_REGGETSTCOUNT -- Get the number of search terms in the current query.
+ *
+ * @brief Get the number of search terms in the current query.
+ * @fn count = voc_regGetSTCount (RegQuery query)
+ *
+ * @param query Registry query handle
+ * @returns nothing
+ */
+int
+voc_regGetSTCount (RegQuery query)
+{
+ int count = 0;
+
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regGetSTCount", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regGetSTCount() failed\n");
+ } else
+ count = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to regGetSTCount\n");
+
+ return (count);
+}
+
+
+/**
+ * VOC_REGGETQUERYSTRING -- Get the current query as an http GET URL.
+ *
+ * @brief Get the current query as an http GET URL.
+ * @fn url = voc_regGetQueryString (RegQuery query)
+ *
+ * @param query Registry query handle
+ * @returns query URL
+ */
+char *
+voc_regGetQueryString (RegQuery query)
+{
+ char *val = NULL, *qstring = NULL;
+ int len = 0;
+
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query,
+ "regGetQueryString", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resGetQueryStr() failed\n");
+ } else {
+ val = msg_getStringResult (result, 0);
+ qstring = calloc (1, (len = strlen(val)+1));
+ strncpy (qstring, val, len);
+ }
+
+ free ((void *) msg); /* free the pointers */
+ free ((void *) result);
+ free ((void *) val);
+ }
+
+ return (qstring);
+}
+
+
+/**
+ * VOC_REGEXECUTE -- Execute the specified query, returning a result object
+ * code or NULL.
+ *
+ * @brief Execute the specified query
+ * @fn res = voc_regExecute (RegQuery query)
+ *
+ * @param query Registry query handle
+ * @returns registry result object handle
+ */
+RegResult
+voc_regExecute (RegQuery query)
+{
+ RegResult res = (RegResult) VOC_NULL;
+
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "regExecute", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: regExecute() failed\n");
+ } else
+ res = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ }
+
+ return ((RegResult) res);
+}
+
+
+/**
+ * VOC_REGEXECUTERAW -- Execute the specified query and return the raw
+ * resulting XML string.
+ *
+ * @brief Execute the specified query and return raw result string
+ * @fn str = voc_regExecuteRaw (RegQuery query)
+ *
+ * @param query Registry query handle
+ * @returns raw data return from data
+ */
+char *
+voc_regExecuteRaw (RegQuery query)
+{
+ char *val = NULL, *raw = NULL;
+ int len = 0;
+
+ if (query > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (query, "resExecuteRaw", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resExecuteRaw() failed\n");
+ } else {
+ val = msg_getStringResult (result, 0);
+ raw = calloc (1, (len = strlen(val)+1));
+ strncpy (raw, val, len);
+ }
+
+ free ((void *) msg); /* free the pointers */
+ free ((void *) result);
+ free ((void *) val);
+ }
+
+ return (raw);
+}
+
+
+/*****************************************************************************/
+/***** RegistryQueryResult Methods ******/
+/*****************************************************************************/
+
+
+/**
+ * VOC_RESGETCOUNT -- Return a count of the number of results records.
+ *
+ * @brief Return a count of the number of results records.
+ * @fn count = voc_resGetCount (RegResult res)
+ *
+ * @param res Registry result handle
+ * @returns number of result records
+ */
+int
+voc_resGetCount (RegResult res)
+{
+ int count = 0;
+
+ if (res > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetCount", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resGetCount() failed\n");
+ } else
+ count = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to resGetCount\n");
+
+ return (count);
+}
+
+
+/**
+ * VOC_GETSTR -- Get a string-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * Title Resource title (long version)
+ * ShortName Short name of Resource
+ * ServiceURL Service URL (if appropriate)
+ * ReferenceURL URL to reference about Resource
+ * Description Text description of resource
+ * Identifier Standard ivo identifier of resource
+ * ServiceType Service Type (Cone, Siap, etc)
+ * Type Resource Type (catalog, survey, etc)
+ * CoverageSpatial Spatial coverage (STC)
+ * CoverageTemporal Temporal coverage of data
+
+ * CoverageSpectral Spectral coverage (csv list of bandpasses)
+ * ContentLevel Content level (research, EPO, etc -- csv list)
+ *
+ * Attribute strings are case-insensitive.
+ *
+ *
+ * @brief Get a string-valued attribute from the result resource record
+ * @fn str = voc_resGetStr (RegResult res, char *attr, int index)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @returns string-valued attribute
+ */
+char *
+voc_resGetStr (RegResult res, char *attribute, int index)
+{
+ char *val = NULL, *str = NULL;
+ int len = 0;
+
+
+ if (res > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetString", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, attribute);
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resGetStr() failed\n");
+ } else {
+ val = msg_getStringResult (result, 0);
+
+ if (*val && strncmp (val, "null", 4) != 0) {
+ char *ip = val;
+ len = strlen(val);
+ str = calloc (1, len+1);
+
+ /* Trim string left and right (right side first).
+ */
+ for (ip=(val+len-1); *ip && (ip > val); ip--) {
+ if (ip && (*ip == ' ' || *ip == '\t' || *ip == '\n'))
+ *ip = '\0';
+ else
+ break;
+ }
+ for (ip=val; ip && (*ip == ' ' || *ip == '\t' || *ip == '\n'); )
+ ip++;
+ strncpy (str, ip, strlen(ip));
+ }
+ }
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ if (val)
+ free ((void *)val);
+ }
+
+ return (str);
+}
+
+
+/**
+ * VOC_GETFLOAT -- Get a real-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxSR maximum search radius
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get a real-valued attribute from the result resource record
+ * @fn dval = voc_resGetFloat (RegResult res, char *attr, int index)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @returns string-valued attribute
+ */
+double
+voc_resGetFloat (RegResult res, char *attribute, int index)
+{
+ double dval = 0;
+
+ if (res > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetFloat", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, attribute);
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resGetInt() failed\n");
+ } else
+ dval = msg_getFloatResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to resGetFloat\n");
+
+ return (dval);
+}
+
+
+/**
+ * VOC_GETINT -- Get a integer-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxRecords maximum records returned by the service
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get an int-valued attribute from the result resource record
+ * @fn ival = voc_resGetInt (RegResult res, char *attr, int index)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @returns string-valued attribute
+ */
+int
+voc_resGetInt (RegResult res, char *attribute, int index)
+{
+ int ival = 0;
+
+ if (res > 0) {
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (res, "resGetInt", 0);
+ vocRes_t *result = (vocRes_t *) NULL;
+
+ msg_addStringParam (msg, attribute);
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: resGetInt() failed\n");
+ } else
+ ival = msg_getIntResult (result, 0);
+
+ free ((void *)msg); /* free the pointers */
+ free ((void *)result);
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null result record to resGetInt\n");
+
+ return (ival);
+}
diff --git a/vendor/voclient/libvoclient/vocRegistry_f77.c b/vendor/voclient/libvoclient/vocRegistry_f77.c
new file mode 100644
index 00000000..1714051c
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocRegistry_f77.c
@@ -0,0 +1,482 @@
+/**
+ * VOC_REGISTRYQUERY -- Utility code to act as a client interface to
+ * the NVO Registry service.
+ *
+ * RegistryQuery
+ * ----------------------
+ *
+ * High-Level Query:
+ *
+ * res = voc_regSearch (term1, term2, orValues)
+ * res = voc_regSearchBySvc (svc, term, orValues)
+ *
+ * Programmatic Query:
+ *
+ * query = voc_regQuery (term, orValues) // OR keyword list?
+ *
+ * voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous
+ * voc_regRemoveSearchTerm (query, term) // remove search term
+ * count = voc_regGetSTCount (query)
+ *
+ * str = voc_regGetQueryString (query) // GET form of query
+ *
+ * res = voc_regExecute (query) // return result obj
+ * str = voc_regExecuteRaw (query) // return raw XML
+ *
+ * RegistryQueryResult
+ *
+ * count = voc_resGetCount (res)
+ *
+ * str = voc_resGetStr (res, attribute, index)
+ * dval = voc_resGetFloat (res, attribute, index)
+ * ival = voc_resGetInt (res, attribute, index)
+ *
+ * For this implementation, we've chose to use the NVO Registry at
+ * JHU/STScI, specifically the QueryRegistry() method which provides a
+ * 'SimpleResource' form of the resource record. Support for the newer
+ * IVOA standard will be added later, for now we can quickly access the most
+ * commonly used fields of a resource using both a keyword and SQL form of
+ * the search.
+ *
+ *
+ * @file vocRegistry_f77.c
+ * @author Michael Fitzpatrick
+ * @version July 2006
+ *
+ *************************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* Procedure name mapping.
+ */
+#ifdef _NO_US_
+
+#define VF_REGSEARCH vfregsearch
+#define VF_REGSEARCHBYSVC vfregsearchbysvc
+#define VF_REGQUERY vfregquery
+#define VF_REGADDSEARCHTERM vfregaddsearchterm
+#define VF_REGREMOVESEARCHTERM vfregremovesearchterm
+#define VF_REGGETSTCOUNT vfreggetstcount
+#define VF_REGGETQUERYSTRING vfreggetquerystring
+#define VF_REGEXECUTE vfregexecute
+#define VF_REGEXECUTERAW vfregexecuteraw
+#define VF_RESGETCOUNT vfresgetcount
+#define VF_RESGETSTR vfresgetstr
+#define VF_RESGETFLOAT vfresgetfloat
+#define VF_RESGETINT vfresgetint
+
+#else
+
+#define VF_REGSEARCH vfregsearch_
+#define VF_REGSEARCHBYSVC vfregsearchbysvc_
+#define VF_REGQUERY vfregquery_
+#define VF_REGADDSEARCHTERM vfregaddsearchterm_
+#define VF_REGREMOVESEARCHTERM vfregremovesearchterm_
+#define VF_REGGETSTCOUNT vfreggetstcount_
+#define VF_REGGETQUERYSTRING vfreggetquerystring_
+#define VF_REGEXECUTE vfregexecute_
+#define VF_REGEXECUTERAW vfregexecuteraw_
+#define VF_RESGETCOUNT vfresgetcount_
+#define VF_RESGETSTR vfresgetstr_
+#define VF_RESGETFLOAT vfresgetfloat_
+#define VF_RESGETINT vfresgetint_
+
+#endif
+
+
+/* Prototype declarations.
+ */
+void VF_REGSEARCH (char *term1, char *term2, int *orValues, RegResult *result,
+ int *ier, int len1, int len2);
+void VF_REGSEARCHBYSVC (char *svc, char *term, int *orValues,
+ RegResult *result, int *ier, int slen, int tlen);
+void VF_REGQUERY (char *term, int *orValues, RegQuery *query, int *ier,
+ int len);
+void VF_REGADDSEARCHTERM (RegQuery *query, char *term, int *orValue, int tlen);
+void VF_REGREMOVESEARCHTERM (RegQuery *query, char *term, int tlen);
+void VF_REGGETSTCOUNT (RegQuery *query, int *count);
+void VF_REGGETQUERYSTRING (RegQuery *query, char *qstr, int *len, int qlen);
+void VF_REGEXECUTE (RegQuery *query, RegResult *result);
+void VF_REGEXECUTERAW (RegQuery *query, char *raw, int *len, int rlen);
+void VF_RESGETCOUNT (RegResult *res, int *count);
+void VF_RESGETSTR (RegResult *res, char *attr, int *index, char *str, int *len,
+ int alen, int slen);
+void VF_RESGETFLOAT (RegResult *res, char *attr, int *index, double *dval,
+ int alen);
+void VF_RESGETINT (RegResult *res, char *attr, int *index, int *ival, int alen);
+
+
+extern VOClient *vo; /* Interface runtime struct */
+
+
+/* Private interface declarations.
+ */
+extern char *sstrip (char *instr, int len);
+extern void spad (char *outstr, int len);
+
+
+
+
+/**
+ * VF_REGSEARCH -- High-level procedure to form a query and execute it
+ * immediately. We allow that 'term1' may be a complex SQL WHERE predicate,
+ * and that 'term2' (or vice versa) is a search-keyword list. The
+ * 'orValues' applies to the keyword list (if present), otherwise it applies
+ * to the two search term elements. The default action if two terms are
+ * specified is to logically AND them.
+ *
+ * The thinking here is that one might want SIAP services for Quasars. This
+ * is easily expressed in an SQL form to get SIAP resources, however a
+ * Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a
+ * easy way to OR the keywords but AND that result with the SQL predicate.
+ *
+ * @brief High-level Registry query interface
+ * @fn call vf_regSearch (char *term1, char *term2, int *orValues,
+ * int *result, int *ier)
+ *
+ * @param term1 first search term
+ * @param term2 second search term
+ * @param orValues logically OR values?
+ * @param result handle to result object
+ * @param ier function error code (OK or ERR)
+ * @returns nothing
+ */
+void
+VF_REGSEARCH (char *term1, char *term2, int *orValues, RegResult *result,
+ int *ier, int len1, int len2)
+{
+ char *_term1 = sstrip (term1, len1);
+ char *_term2 = sstrip (term2, len2);
+
+ *result = voc_regSearch (_term1, _term2, *orValues);
+ *ier = (*result ? OK : ERR);
+
+ free ((char *) _term1);
+ free ((char *) _term2);
+}
+
+
+/**
+ * VF_REGSEARCHBYSERVICE -- Search the Registry using a search term and
+ * constrain by service type.
+ *
+ * @brief Search Registry using a search term and service constraint
+ * @fn call vf_regSearchByService (char *svc, char *term, int *orValues,
+ * int *result, int *ier)
+ *
+ * @param svc service type constraint
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @param result handle to result object
+ * @param ier function error code (OK or ERR)
+ * @returns nothing
+ */
+
+void
+VF_REGSEARCHBYSVC (char *svc, char *term, int *orValues, RegResult *result,
+ int *ier, int slen, int tlen)
+{
+ char *_svc = sstrip (svc, slen);
+ char *_term = sstrip (term, tlen);
+
+ *result = voc_regSearchByService (_svc, _term, *orValues);
+ *ier = (*result ? OK : ERR);
+
+ free ((char *) _svc);
+ free ((char *) _term);
+}
+
+
+/**
+ * VF_REGQUERY -- Create a RegistryQuery object.
+ *
+ * @brief Create a RegistryQuery object.
+ * @fn call vf_regQuery (char *term, int *orValues, int *query, int *ier)
+ *
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @param query handle to query object
+ * @param ier function error code (OK or ERR)
+ * @returns nothing
+ */
+void
+VF_REGQUERY (char *term, int *orValues, RegQuery *query, int *ier, int len)
+{
+ char *_term = sstrip (term, len);
+
+ *query = voc_regQuery (_term, *orValues);
+ *ier = (*query ? OK : ERR);
+
+ free ((char *) _term);
+}
+
+
+/**
+ * VF_REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list)
+ * to the specified query.
+ *
+ * @brief Add a search term to the specified query
+ * @fn call vf_regAddSearchTerm (RegQuery *query, char *term, int *orValue)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns nothing
+ */
+void
+VF_REGADDSEARCHTERM (RegQuery *query, char *term, int *orValue, int len)
+{
+ char *_term = sstrip (term, len);
+
+ voc_regAddSearchTerm (*query, _term, *orValue);
+
+ free ((char *) _term);
+}
+
+
+/**
+ * VF_REGREMOVESEARCHTERM -- Remove the search term from the query.
+ *
+ * @brief Remove a search term to the specified query
+ * @fn call vf_regRemoveSearchTerm (RegQuery *query, char *term)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @returns nothing
+ */
+void
+VF_REGREMOVESEARCHTERM (RegQuery *query, char *term, int len)
+{
+ char *_term = sstrip (term, len);
+
+ voc_regRemoveSearchTerm (*query, _term);
+
+ free ((char *) _term);
+}
+
+
+/**
+ * VF_REGGETSTCOUNT -- Get the number of search terms in the current query.
+ *
+ * @brief Get the number of search terms in the current query.
+ * @fn call vf_regGetSTCount (RegQuery *query, int *count)
+ *
+ * @param query Registry query handle
+ * @returns nothing
+ */
+void
+VF_REGGETSTCOUNT (RegQuery *query, int *count)
+{
+ *count = voc_resGetCount (*query);
+}
+
+
+/**
+ * VF_REGGETQUERYSTRING -- Get the current query as an http GET URL.
+ *
+ * @brief Get the current query as an http GET URL.
+ * @fn call vf_regGetQueryString (RegQuery *query, char *qstr, int *len)
+ *
+ * @param query Registry query handle
+ * @param qstr returned query string
+ * @param len length of query string
+ * @returns nothing
+ */
+void
+VF_REGGETQUERYSTRING (RegQuery *query, char *qstr, int *len, int qlen)
+{
+ char *_result = voc_regGetQueryString (*query);
+
+ memset (qstr, 0, qlen);
+ if ((*len = strlen(_result)) > qlen)
+ fprintf (stderr, "Warning: truncating result string: len=%d maxch=%d\n",
+ *len, qlen);
+ spad (strncpy (qstr, _result, *len), qlen);
+
+ free ((char *) _result);
+}
+
+
+/**
+ * VF_REGEXECUTE -- Execute the specified query, returning a result object
+ * code or NULL.
+ *
+ * @brief Execute the specified query
+ * @fn call vf_regExecute (RegQuery *query, RegResult *result)
+ *
+ * @param query Registry query handle
+ * @param result Registry result handle
+ * @returns nothing
+ */
+void
+VF_REGEXECUTE (RegQuery *query, RegResult *result)
+{
+ *result = voc_regExecute (*query);
+}
+
+
+/**
+ * VF_REGEXECUTERAW -- Execute the specified query and return the raw
+ * resulting XML string.
+ *
+ * @brief Execute the specified query and return raw result string
+ * @fn call vf_regExecuteRaw (RegQuery *query, char *raw, int *len)
+ *
+ * @param query Registry query handle
+ * @param raw raw result string
+ * @param len length of result string
+ * @returns nothing
+ */
+void
+VF_REGEXECUTERAW (RegQuery *query, char *raw, int *len, int rlen)
+{
+ char *_result = voc_regExecuteRaw (*query);
+
+ memset (raw, 0, rlen);
+ if ((*len = strlen(_result)) > rlen)
+ fprintf (stderr, "Warning: truncating result string: len=%d maxch=%d\n",
+ *len, rlen);
+ spad (strncpy (raw, _result, *len), rlen);
+
+ free ((char *) _result);
+}
+
+
+/****************************************************************************/
+/********************* RegistryQueryResult Methods ************************/
+/****************************************************************************/
+
+
+/**
+ * VF_RESGETCOUNT -- Return a count of the number of results records.
+ *
+ * @brief Return a count of the number of results records.
+ * @fn call vf_resGetCount (RegResult *res, int *count)
+ *
+ * @param res Registry result handle
+ * @param count result count
+ * @returns nothing
+ */
+void
+VF_RESGETCOUNT (RegResult *res, int *count)
+{
+ *count = voc_resGetCount (*res);
+}
+
+
+/**
+ * VF_GETSTR -- Get a string-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * Title Resource title (long version)
+ * ShortName Short name of Resource
+ * ServiceURL Service URL (if appropriate)
+ * ReferenceURL URL to reference about Resource
+ * Description Text description of resource
+ * Identifier Standard ivo identifier of resource
+ * ServiceType Service Type (Cone, Siap, etc)
+ * Type Resource Type (catalog, survey, etc)
+ * CoverageSpatial Spatial coverage (STC)
+ * CoverageTemporal Temporal coverage of data
+ *
+ * CoverageSpectral Spectral coverage (csv list of bandpasses)
+ * ContentLevel Content level (research, EPO, etc -- csv list)
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get a string-valued attribute from the result resource record
+ * @fn call vf_resGetStr (RegResult *res, char *attr, int *index,
+ * char *str, int *len)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @param str attribute string
+ * @param len length of attribute string
+ * @returns nothing
+ */
+void
+VF_RESGETSTR (RegResult *res, char *attr, int *index, char *str, int *len,
+ int alen, int slen)
+{
+ char *_attr = sstrip (attr, alen);
+
+ char *_result = voc_resGetStr (*res, _attr, *index-1);
+
+ memset (str, 0, slen);
+ if ((*len = strlen(_result)) > slen)
+ fprintf (stderr, "Warning: truncating result string: len=%d maxch=%d\n",
+ *len, slen);
+ spad (strncpy (str, _result, *len), slen);
+
+ free ((char *) _result);
+ free ((char *) _attr);
+}
+
+
+/**
+ * VF_GETFLOAT -- Get a real-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxSR maximum search radius
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get a real-valued attribute from the result resource record
+ * @fn call vf_resGetFloat (RegResult *res, char *attr, int *index,
+ * double *dval)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @param dval double-precision value
+ * @returns nothing
+ */
+void
+VF_RESGETFLOAT (RegResult *res, char *attr, int *index, double *dval, int alen)
+{
+ char *_attr = sstrip (attr, alen);
+
+ *dval = voc_resGetFloat (*res, _attr, *index-1);
+
+ free ((char *) _attr);
+}
+
+
+/**
+ * VF_GETINT -- Get a integer-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxRecords maximum records returned by the service
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get an int-valued attribute from the result resource record
+ * @fn call vf_resGetInt (RegResult *res, char *attr, int *index,
+ * int *ival)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @param ival integer value
+ * @returns nothing
+ */
+void
+VF_RESGETINT (RegResult *res, char *attr, int *index, int *ival, int alen)
+{
+ char *_attr = sstrip (attr, alen);
+
+ *ival = voc_resGetInt (*res, _attr, *index-1);
+
+ free ((char *) _attr);
+}
diff --git a/vendor/voclient/libvoclient/vocRegistry_spp.c b/vendor/voclient/libvoclient/vocRegistry_spp.c
new file mode 100644
index 00000000..56d6b968
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocRegistry_spp.c
@@ -0,0 +1,468 @@
+/**
+ * VOC_REGISTRYQUERY -- Utility code to act as a client interface to
+ * the NVO Registry service.
+ *
+ * RegistryQuery
+ * ----------------------
+ *
+ * High-Level Query:
+ *
+ * res = voc_regSearch (term1, term2, orValues)
+ *
+ * Programmatic Query:
+ *
+ * query = voc_regQuery (term, orValues) // OR keyword list?
+ *
+ * voc_regAddSearchTerm (query, term, orValue) // OR term w/ previous
+ * voc_regRemoveSearchTerm (query, term) // remove search term
+ * count = voc_regGetSTCount (query)
+ *
+ * str = voc_regGetQueryString (query) // GET form of query
+ *
+ * res = voc_regExecute (query) // return result obj
+ * str = voc_regExecuteRaw (query) // return raw XML
+ *
+ * RegistryQueryResult
+ *
+ * count = voc_resGetCount (res)
+ *
+ * str = voc_resGetStr (res, attribute, index)
+ * dval = voc_resGetFloat (res, attribute, index)
+ * ival = voc_resGetInt (res, attribute, index)
+ *
+ * For this implementation, we've chose to use the NVO Registry at
+ * JHU/STScI, specifically the QueryRegistry() method which provides a
+ * 'SimpleResource' form of the resource record. Support for the newer
+ * IVOA standard will be added later, for now we can quickly access the most
+ * commonly used fields of a resource using both a keyword and SQL form of
+ * the search.
+ *
+ *
+ * @file vocRegistry_spp.c
+ * @author Michael Fitzpatrick
+ * @version July 2006
+ *
+ *************************************************************************
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/* Procedure name mapping.
+ */
+#ifdef _NO_US_
+
+#define vx_regsearch vxregh
+#define vx_regsearchbysvc vxregc
+#define vx_regquery vxregy
+#define vx_raddsearchterm vxradm
+#define vx_rremovesearchterm vxrrem
+#define vx_rgetstcount vxrget
+#define vx_rgetquerystring vxrgeg
+#define vx_rexecute vxrexe
+#define vx_rexecuteraw vxrexw
+
+
+#define vx_rscount vxrsct
+#define vx_rsstr vxrssr
+#define vx_rsfloat vxrsft
+#define vx_rsint vxrsit
+
+#else
+
+#define vx_regsearch vxregh_
+#define vx_regsearchbysvc vxregc_
+#define vx_regquery vxregy_
+#define vx_raddsearchterm vxradm_
+#define vx_rremovesearchterm vxrrem_
+#define vx_rgetstcount vxrget_
+#define vx_rgetquerystring vxrgeg_
+#define vx_rexecute vxrexe_
+#define vx_rexecuteraw vxrexw_
+
+#define vx_rscount vxrsct_
+#define vx_rsstr vxrssr_
+#define vx_rsfloat vxrsft_
+#define vx_rsint vxrsit_
+
+#endif
+
+extern VOClient *vo; /* Interface runtime struct */
+
+
+
+/* SPP Type definitions.
+ */
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS NULL
+
+
+/* Public interface procedures.
+ *
+ */
+
+
+RegResult vx_regsearch (XCHAR *term1, XCHAR *term2, int *orValues);
+RegResult vx_regsearchbysvc (XCHAR *svc, XCHAR *term, int *orValues);
+RegQuery vx_regquery (XCHAR *term, int *orValues);
+void vx_raddsearchterm (RegQuery *query, XCHAR *term, int *orValue);
+void vx_rremovesearchterm (RegQuery *query, XCHAR *term);
+int vx_rgetstcount (RegQuery *query);
+int vx_rgetquerystring (RegQuery *query, XCHAR *qstring, int *maxch);
+RegResult vx_rexecute (RegQuery *query);
+int vx_rexecuteraw (RegQuery *query, XCHAR *result, int *maxch);
+
+int vx_rgcount (RegResult *res);
+int vx_rgstr (RegResult *res, XCHAR *attribute, int *index,
+ XCHAR *result, int *maxch);
+double vx_rgfloat (RegResult *res, XCHAR *attribute, int *index);
+int vx_rgint (RegResult *res, XCHAR *attribute, int *index);
+
+
+
+
+
+/* Private interface procedures.
+ */
+extern PKCHAR *spp2c (XCHAR *instr, int maxch);
+extern int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+extern int spplen (XCHAR *str);
+
+
+
+/**
+ * VX_REGSEARCH -- High-level procedure to form a query and execute it
+ * immediately. We allow that 'term1' may be a complex SQL WHERE predicate,
+ * and that 'term2' (or vice versa) is a search-keyword list. The
+ * 'orValues' applies to the keyword list (if present), otherwise it applies
+ * to the two search term elements. The default action if two terms are
+ * specified is to logically AND them.
+ *
+ * The thinking here is that one might want SIAP services for Quasars. This
+ * is easily expressed in an SQL form to get SIAP resources, however a
+ * Quasar may be known as a QSO, AGN, active-nuclei, etc and so we need a
+ * easy way to OR the keywords but AND that result with the SQL predicate.
+ *
+ * @brief High-level Registry query interface
+ * @fn res = vx_regsearch (XCHAR *term1, XCHAR *term2, int *orValues)
+ *
+ * @param term1 first search term
+ * @param term2 second search term
+ * @param orValues logically OR values?
+ * @returns handle to result object
+ */
+RegResult
+vx_regsearch (XCHAR *term1, XCHAR *term2, int *orValues)
+{
+ char *_term1 = spp2c (term1, spplen (term1));
+ char *_term2 = spp2c (term2, spplen (term2));
+
+ RegResult _result = voc_regSearch (_term1, _term2, *orValues);
+
+ free ((char *) _term1);
+ free ((char *) _term2);
+ return (_result);
+}
+
+
+/**
+ * VX_REGSEARCHBYSERVICE -- Search the Registry using a search term and
+ * constrain by service type.
+ *
+ * @brief Search Registry using a search term and service constraint
+ * @fn res = vx_regsearchbysvc (XCHAR *svc, XCHAR *term, int *orValues)
+ *
+ * @param svc service type constraint
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns handle to result object
+ */
+RegResult
+vx_regsearchbysvc (XCHAR *svc, XCHAR *term, int *orValues)
+{
+ char *_svc = spp2c (svc, spplen (svc));
+ char *_term = spp2c (term, spplen (term));
+
+ RegResult _result = voc_regSearchByService (_svc, _term, *orValues);
+
+ free ((char *) _svc);
+ free ((char *) _term);
+ return (_result);
+}
+
+
+/**
+ * VX_REGQUERY -- Get a RegistryQuery object.
+ *
+ * @brief Create a RegistryQuery object.
+ * @fn query = vx_regquery (XCHAR *term, int *orValues)
+ *
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns handle to query object
+ */
+RegQuery
+vx_regquery (XCHAR *term, int *orValues)
+{
+ char *_term = spp2c (term, spplen (term));
+ RegQuery query = voc_regQuery (_term, *orValues);
+
+ free ((char *) _term);
+ return (query);
+}
+
+
+/**
+ * VX_REGADDSEARCHTERM -- Add a search term (sql predicate or keyword list)
+ * to the specified query.
+ *
+ * @brief Add a search term to the specified query
+ * @fn vx_raddsearchterm (RegQuery *query, XCHAR *term, int *orValue)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @param orValues logically OR values?
+ * @returns nothing
+ */
+void
+vx_raddsearchterm (RegQuery *query, XCHAR *term, int *orValue)
+{
+ char *_term = spp2c (term, spplen (term));
+
+ (void) voc_regAddSearchTerm (*query, _term, *orValue);
+
+ free ((char *) _term);
+}
+
+
+/**
+ * VX_REMOVESEARCHTERM -- Remove the search term from the query.
+ *
+ * @brief Remove a search term to the specified query
+ * @fn call vx_rremovesearchterm (RegQuery *query, XCHAR *term)
+ *
+ * @param query Registry query handle
+ * @param term keyword search term
+ * @returns nothing
+ */
+void
+vx_rremovesearchterm (RegQuery *query, XCHAR *term)
+{
+ char *_term = spp2c (term, spplen (term));
+
+ (void) voc_regRemoveSearchTerm (*query, _term);
+
+ free ((char *) _term);
+}
+
+
+/**
+ * VX_REGGETSTCOUNT -- Get the number of search terms in the current query.
+ *
+ * @brief Get the number of search terms in the current query.
+ * @fn count = vx_rgetstcount (RegQuery *query)
+ *
+ * @param query Registry query handle
+ * @returns count of search terms
+ */
+int
+vx_rgetstcount (RegQuery *query)
+{
+ return ( voc_regGetSTCount (*query) );
+}
+
+
+/**
+ * VX_REGGETQUERYSTRING -- Get the current query as an http GET URL.
+ *
+ * @brief Get the current query as an http GET URL.
+ * @fn len = vx_rgetquerystring (RegQuery *query, XCHAR *qstr, int *maxch)
+ *
+ * @param query Registry query handle
+ * @param qstr returned query string
+ * @param maxch length of query string
+ * @returns nothing
+ */
+int
+vx_rgetquerystring (RegQuery *query, XCHAR *qstring, int *maxch)
+{
+ char *_qstring = voc_regGetQueryString (*query);
+
+ int len = c2spp (_qstring, qstring, *maxch);
+
+ free ((char *) _qstring);
+ return (len);
+}
+
+
+/**
+ * VX_REGEXECUTE -- Execute the specified query, returning a result object
+ * code or NULL.
+ *
+ * @brief Execute the specified query
+ * @fn res = vx_rexecute (RegQuery *query)
+ *
+ * @param query Registry query handle
+ * @returns nothing
+ */
+RegResult
+vx_rexecute (RegQuery *query)
+{
+ return ( voc_regExecute (*query) );
+}
+
+
+/**
+ * VX_REGEXECUTERAW -- Execute the specified query and return the raw
+ * resulting XML string.
+ *
+ * @brief Execute the specified query and return raw result string
+ * @fn len = vx_rexecuteraw (RegQuery *query, XCHAR *raw, int *maxch)
+ *
+ * @param query Registry query handle
+ * @param raw raw result string
+ * @param maxch length of result string
+ * @returns nothing
+ */
+int
+vx_rexecuteraw (RegQuery *query, XCHAR *result, int *maxch)
+{
+ char *_raw = voc_regExecuteRaw (*query);
+
+ int len = c2spp (_raw, result, *maxch);
+
+ free ((char *) _raw);
+ return (len);
+}
+
+
+/****************************************************************************/
+/********************* RegistryQueryResult Methods ************************/
+/****************************************************************************/
+
+
+/**
+ * VX_RESGETCOUNT -- Return a count of the number of results records.
+ *
+ * @brief Return a count of the number of results records.
+ * @fn count = vx_rscount (RegResult *res)
+ *
+ * @param res Registry result handle
+ * @returns number of result records
+ */
+int
+vx_rscount (RegResult *res)
+{
+ return ( voc_resGetCount (*res) );
+}
+
+
+/**
+ * VX_GETSTR -- Get a string-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * Title Resource title (long version)
+ * ShortName Short name of Resource
+ * ServiceURL Service URL (if appropriate)
+ * ReferenceURL URL to reference about Resource
+ * Description Text description of resource
+ * Identifier Standard ivo identifier of resource
+ * ServiceType Service Type (Cone, Siap, etc)
+ * Type Resource Type (catalog, survey, etc)
+ * CoverageSpatial Spatial coverage (STC)
+ * CoverageTemporal Temporal coverage of data
+ *
+ * CoverageSpectral Spectral coverage (csv list of bandpasses)
+ * ContentLevel Content level (research, EPO, etc -- csv list)
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get a string-valued attribute from the result resource record
+ * @fn len = vx_rsstr (RegResult *res, XCHAR *attr, int *index,
+ * XCHAR *result, int *maxch)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @param result attribute string
+ * @param maxch length of attribute string
+ * @returns nothing
+ */
+int
+vx_rsstr (RegResult *res, XCHAR *attribute, int *index,
+ XCHAR *result, int *maxch)
+{
+ char *_attribute = spp2c (attribute, spplen (attribute));
+
+ char *_result = voc_resGetStr (*res, _attribute, *index);
+ int len = c2spp (_result, result, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+/**
+ * VX_GETFLOAT -- Get a real-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxSR maximum search radius
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get a real-valued attribute from the result resource record
+ * @fn dval = vx_rsfloat (RegResult *res, XCHAR *attr, int *index)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @returns double-precision value
+ */
+double
+vx_rsfloat (RegResult *res, XCHAR *attribute, int *index)
+{
+ char *_attribute = spp2c (attribute, spplen (attribute));
+
+ double dval = voc_resGetFloat (*res, _attribute, *index);
+
+ free ((char *) _attribute);
+ return (dval);
+}
+
+
+/**
+ * VX_GETINT -- Get a integer-valued attribute from the result resource
+ * record. Currently recognized real-valued attributes include:
+ *
+ * MaxRecords maximum records returned by the service
+ *
+ * Attribute string are case-insensitive.
+ *
+ * @brief Get an int-valued attribute from the result resource record
+ * @fn ival = vx_rsint (RegResult *res, XCHAR *attr, int *index)
+ *
+ * @param res Registry result handle
+ * @param attr record attribute
+ * @param index record index
+ * @returns integer value
+ */
+int
+vx_rsint (RegResult *res, XCHAR *attribute, int *index)
+{
+ char *_attribute = spp2c (attribute, spplen (attribute));
+
+ int ival = voc_resGetInt (*res, _attribute, *index);
+
+ free ((char *) _attribute);
+ return (ival);
+}
diff --git a/vendor/voclient/libvoclient/vocSesame.c b/vendor/voclient/libvoclient/vocSesame.c
new file mode 100644
index 00000000..fe182320
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSesame.c
@@ -0,0 +1,492 @@
+/**
+ * VOCSESAME.C -- Interface to the Sesame name resolver service.
+ *
+ * @section DESCRIPTION
+ *
+ * Sesame Name Resolver Interface:
+ * -------------------------------
+ *
+ * sr = voc_nameResolver (target)
+ * pos_str = voc_resolverPos (sr)
+ * radeg = voc_resolverRA (sr)
+ * decdeg = voc_resolverDEC (sr)
+ * ra_err = voc_resolverRAErr (sr)
+ * dec_err = voc_resolverDECErr (sr)
+ * typ_str = voc_resolverOtype (sr)
+ *
+ * Client programs may be written in any language that can interface to
+ * C code. Sample programs using the interface are provided as is a SWIG
+ * interface definition file. This inferface is based closely on the DAL
+ * client code produced for the 2005 NVOSS, as that interface evolves
+ *
+ *
+ * @file vocSesame.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ *************************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+#define MAX_OBJECTS 128
+#define SZ_TARGET 128
+
+
+/**
+ * @struct Object
+ *
+ * Structure for the object being queried.
+ */
+typedef struct {
+ char target[SZ_TARGET]; /* target name */
+ char hms_pos[SZ_TARGET]; /* sexagesimal position */
+ double ra, dec; /* decimal degrees position */
+ double era, edec; /* decimal degrees error */
+ char type[SZ_TARGET]; /* object type */
+} Object, *ObjectPtr;
+
+
+/* @internal
+ *
+ * The runtime cache is implemented as a circular array of MAX_OBJECTS.
+ * We first check to see if the requested object is in the runtime cache,
+ * then look on the disk cache for the information. If not found we
+ * query the server and store the result. The Sesame handle returned will
+ * be the negative of the index in the runtime cache, i.e "-(1+sr)".
+ */
+Object clientCache[MAX_OBJECTS]; /* runtime client cache */
+int cacheTop = 0;
+
+extern VOClient *vo; /* Interface runtime struct */
+
+
+static Sesame voc_isCachedObject (char *target);
+static Sesame voc_cacheObject (Sesame sr, char *target);
+
+static char *voc_resStrVal (Sesame sr, char *method, char *ifcall);
+static double voc_resDblVal (Sesame sr, char *method, char *ifcall);
+
+
+
+/*****************************************************************************/
+
+/**
+ * NAMERESOLVER -- Query the CDS Sesame service to resolve the target name
+ * to coordinates. The query is done when creating the Sesame object,
+ * thereafter we simply query the object data.
+ *
+ * @brief Query the CDS Sesame name resolver service.
+ * @fn handle = voc_nameResolver (char *name)
+ *
+ * @param target name of target to be resolved
+ * @returns Sesame Sesame object handle
+ */
+Sesame
+voc_nameResolver (char *target)
+{
+ Sesame sr = (Sesame) VOC_NULL;
+
+
+ /* Make sure we've been initialized properly first.
+ */
+ if (vo == (VOClient *) NULL) {
+ if (voc_initVOClient (NULL) == ERR) {
+ fprintf (stderr, "ERROR: Can't initialize VO Client....\n");
+ exit (1);
+ } else if (VOC_DEBUG)
+ printf ("Warning: Initializing VO Client....\n");
+ }
+
+ /* Before we query the server, see whether this is a familiar
+ ** object and we're using the cache. Otherwise, return the cached result.
+ */
+ if (vo->use_cache && (sr=voc_isCachedObject (target)) != (Sesame)VOC_NULL)
+ return (sr);
+
+ if (target) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "nameResolver", 0);
+
+ msg_addStringParam (msg, target);
+
+ /* Read result and check for any faults.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot resolve target: %s\n", target);
+ } else
+ sr = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ if (voc_resolverRA(sr) == 0.0 &&
+ voc_resolverRAErr(sr) == 0.0 &&
+ voc_resolverDEC(sr) == 0.0 &&
+ voc_resolverDECErr(sr) == 0.0) {
+ return (0); /* no match found */
+ }
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: no target specified\n");
+
+
+ /* Store the result in the cache. We can change the return handle if
+ ** the object was successfully cached.
+ */
+ sr = voc_cacheObject (sr, target);
+
+ return (sr);
+}
+
+
+/**
+ * RESOLVERPOS -- Return a string containing the (ra,dec) position as
+ * sexagesimal strings.
+ *
+ * @brief Return the (ra,dec) position for the object
+ * @fn str = voc_resolverPos (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns string containing (ra,dec) position
+ */
+char *
+voc_resolverPos (Sesame sr)
+{
+ if (sr < 0)
+ return ( strdup(clientCache[-(1+sr)].hms_pos) );
+ else
+ return ( voc_resStrVal (sr, "srGetPOS", "resolverPos") );
+}
+
+
+/**
+ * RESOLVEROTYPE -- Return a string containing the object type description
+ *
+ * @brief Return a string containing the object type description
+ * @fn str = voc_resolverOtype (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns string to object type description
+ */
+char *
+voc_resolverOtype (Sesame sr)
+{
+ if (sr < 0)
+ return ( strdup (clientCache[-(1+sr)].type) );
+ else
+ return ( voc_resStrVal (sr, "srGetOtype", "resolverOtype") );
+}
+
+
+/**
+ * RESOLVERRA -- Return the RA as a double precision value.
+ *
+ * @brief Return the RA as a double precision value.
+ * @fn str = voc_resolverRA (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns object RA (decimal degrees)
+ */
+double
+voc_resolverRA (Sesame sr)
+{
+ if (sr < 0)
+ return ( clientCache[-(1+sr)].ra );
+ else
+ return ( voc_resDblVal (sr, "srGetRA", "resolverRA") );
+}
+
+
+/**
+ * RESOLVERRAERR -- Return the RA error as a double precision value.
+ *
+ * @brief Return the RA error as a double precision value.
+ * @fn str = voc_resolverRAErr (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns object RA error (decimal degrees)
+ */
+double
+voc_resolverRAErr (Sesame sr)
+{
+ if (sr < 0)
+ return ( clientCache[-(1+sr)].era );
+ else
+ return ( voc_resDblVal (sr, "srGetRAErr", "resolverRAErr") );
+}
+
+
+/**
+ * RESOLVERDEC -- Return the DEC as a double precision value.
+ *
+ * @brief Return the DEC as a double precision value.
+ * @fn str = voc_resolverDEC (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns object Declination (decimal degrees)
+ */
+double
+voc_resolverDEC (Sesame sr)
+{
+ if (sr < 0)
+ return ( clientCache[-(1+sr)].dec );
+ else
+ return ( voc_resDblVal (sr, "srGetDEC", "resolverDEC") );
+}
+
+
+/**
+ * RESOLVERDECERR -- Return the Dec error as a double precision value.
+ *
+ * @brief Return the Dec error as a double precision value.
+ * @fn str = voc_resolverDECErr (Sesame sr)
+ *
+ * @param sr handle to previus query return
+ * @returns object DEC error (decimal degrees)
+ */
+double
+voc_resolverDECErr (Sesame sr)
+{
+ if (sr < 0)
+ return ( clientCache[-(1+sr)].edec );
+ else
+ return ( voc_resDblVal (sr, "srGetDECErr", "resolverDECErr") );
+}
+
+
+
+/************************************************************
+ * Private procedures
+ ***********************************************************/
+
+extern char *voc_getCacheDir (char *subdir);
+
+
+/**
+ * VOC_ISCACHEDOBJECT -- See if the requested object is in the cache.
+ *
+ * @brief See if the requested object is in the cache.
+ * @fn sr = voc_isCachedObject (char *target)
+ *
+ * @param target target name
+ * @returns handle to cached object
+ */
+static Sesame
+voc_isCachedObject (char *target)
+{
+ FILE *fd;
+ register int index;
+ char *ip, *op, *dir, fname[SZ_FNAME], path[SZ_FNAME], buf[256];
+ Object *obj = (Object *) NULL;
+ struct stat info;
+
+
+ /* Look first for the object in the runtime cache.
+ */
+ for (index=0; index < cacheTop; index++) {
+ if (strcmp (target, clientCache[index].target) == 0) {
+ return (-(index+1));
+ }
+ }
+
+ /* Not in the runtime cache, check to see if we have it on disk.
+ */
+
+ /* Turn the target name into a filename, replacing the white space
+ ** with an underscore.
+ */
+ for (ip=target, op=fname; *ip; ip++)
+ *op++ = ((isspace(*ip) || *ip == '_') ? '+' : *ip);
+ *op = '\0';
+
+ sprintf (path, "%s/%s", (dir = voc_getCacheDir("sesame")), fname);
+ if (! (fd = fopen (path, "r")) )
+ return ((Sesame) VOC_NULL); /* not in cache */
+ if (fstat (fileno (fd), &info) < 0)
+ return ((Sesame) VOC_NULL); /* invalid cache */
+ if (info.st_size == 0)
+ return ((Sesame) VOC_NULL); /* invalid cache */
+
+ fgets (buf, 256, fd);
+
+ /* Save it in the runtime cache.
+ */
+ index = ((cacheTop++) % MAX_OBJECTS); /* runtime cache */
+ obj = &clientCache[index];
+
+ memset (obj, 0, sizeof(Object));
+ for (op=&obj->target[0], ip=buf; *ip && *ip != ':'; )
+ *op++ = *ip++;
+ ip++; /* skip colon */
+ ip++; /* skip space */
+ op = &obj->hms_pos[0];
+ while (*ip && !isspace(*ip)) *op++ = *ip++; /* get ra */
+ while (*ip && isspace(*ip)) *op++ = *ip++; /* skip spaces */
+ while (*ip && !isspace(*ip)) *op++ = *ip++; /* get dec */
+
+ sscanf (ip, " %lf %lf %lf %lf %s\n",
+ &obj->ra, &obj->dec, &obj->era, &obj->edec, obj->type);
+
+ fclose (fd);
+
+ return ((Sesame) -(index+1));
+}
+
+
+/**
+ * VOC_CACHEOBJECT -- Store the object in the cache.
+ *
+ * @brief Store the object in the cache.
+ * @fn sr = voc_cacheObject (Sesame sr, char *target)
+ *
+ * @param sr handle to sesame query
+ * @param target target name
+ * @returns handle to cached object
+ */
+static Sesame
+voc_cacheObject (Sesame sr, char *target)
+{
+ FILE *fd;
+ register int index;
+ char *ip, *op, *dir, *s, fname[SZ_FNAME], path[SZ_FNAME];
+ Object *obj = (Object *) NULL;
+
+
+ if ((s = getenv("VOC_NO_CACHE")))
+ return (sr);
+
+ /* Turn the target name into a filename, replacing the white space
+ ** with an underscore.
+ */
+ for (ip=target, op=fname; *ip; ip++)
+ *op++ = (isspace(*ip) ? '_' : *ip);
+ *op = '\0';
+
+ /* Open the cache file and pre-fetch the results.
+ */
+ sprintf (path, "%s/%s", (dir = voc_getCacheDir("sesame")), fname);
+ if (! (fd = fopen (path, "a+")) )
+ return (sr); /* error return */
+
+ index = ((cacheTop++) % MAX_OBJECTS); /* runtime cache */
+ obj = &clientCache[index];
+
+ fprintf (fd, "%s: %s %f %f %.2f %.2f %s\n",
+ strcpy(obj->target, target),
+ strcpy(obj->hms_pos, voc_resolverPos (sr)),
+ (obj->ra = voc_resolverRA (sr)),
+ (obj->dec = voc_resolverDEC (sr)),
+ (obj->era = voc_resolverRAErr (sr)),
+ (obj->edec = voc_resolverRAErr (sr)),
+ strcpy(obj->type, voc_resolverOtype (sr)) );
+
+ fclose (fd);
+
+ /* Don't cache a NULL return.
+ */
+ if (((int)obj->ra + (int)obj->dec + (int)obj->era + (int)obj->edec) == 0) {
+ unlink (path);
+ return (sr);
+ }
+
+ if (dir)
+ free ((char *)dir);
+
+ return ((Sesame) -(index + 1)); /* return new sr */
+}
+
+
+/**
+ * VOC_RESSTRVAL -- Return a string value from a method with no arguments.
+ *
+ * @brief Return a string value from a method with no args.
+ * @fn str = voc_resStrVal (Sesame sr, char *method, char *ifcall)
+ *
+ * @param sr handle to sesame query
+ * @param method mehod to call
+ * @param ifcall interface method name
+ * @returns the value
+ */
+static char *
+voc_resStrVal (Sesame sr, char *method, char *ifcall)
+{
+ char *val = NULL, *str = NULL;
+ int len = 0;
+
+ if (sr > 0) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, method, 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: %s() failed\n", ifcall);
+ } else {
+ val = msg_getStringResult (result, 0);
+ str = calloc (1, (len = strlen(val)+1));
+ strncpy (str, val, len);
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null object to %s()\n", ifcall);
+
+ return (str);
+}
+
+
+/**
+ * VOC_RESDBLVAL -- Return a double precision value from a method with
+ * no arguments.
+ *
+ * @brief Return a double precision value from a method with no args.
+ * @fn dval = voc_resDblVal (Sesame sr, char *method, char *ifcall)
+ *
+ * @param sr handle to sesame query
+ * @param method mehod to call
+ * @param ifcall interface method name
+ * @returns the value
+ */
+static double
+voc_resDblVal (Sesame sr, char *method, char *ifcall)
+{
+ double dval = (double) 0.0;
+
+
+ if (sr > 0) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sr, method, 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: %s() failed\n", ifcall);
+ } else
+ dval = msg_getFloatResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null object to %s()\n", ifcall);
+
+ return (dval);
+}
diff --git a/vendor/voclient/libvoclient/vocSesame_f77.c b/vendor/voclient/libvoclient/vocSesame_f77.c
new file mode 100644
index 00000000..c8ab8d04
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSesame_f77.c
@@ -0,0 +1,202 @@
+/**
+ * VOCSESAME_F77.C -- F77 Interface to the Sesame name resolver service.
+ *
+ * @section DESCRIPTION
+ *
+ * Sesame Name Resolver F77 Interface:
+ * -----------------------------------
+ *
+ * vf_nameResolver (target, sr)
+ * vf_resolverPos (sr, pos_str, len)
+ * vf_resolverRA (sr, radeg)
+ * vf_resolverRAErr (sr, radeg)
+ * vf_resolverDEC (sr, decdeg)
+ * vf_resolverDECErr (sr, decdeg)
+ *
+ * @file vocSesame_f77.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+#ifdef _NO_US_
+
+#define VF_NAMERESOLVER vfnameresolver
+#define VF_RESOLVERRA vfresolverra
+#define VF_RESOLVERDEC vfresolverdec
+#define VF_RESOLVERPOS vfresolverpos
+#define VF_RESOLVERRAERR vfresolverraerr
+#define VF_RESOLVERDECERR vfresolverdecerr
+#define VF_RESOLVEROTYPE vfresolverotype
+
+#else
+
+#define VF_NAMERESOLVER vfnameresolver_
+#define VF_RESOLVERRA vfresolverra_
+#define VF_RESOLVERDEC vfresolverdec_
+#define VF_RESOLVERPOS vfresolverpos_
+#define VF_RESOLVERRAERR vfresolverraerr_
+#define VF_RESOLVERDECERR vfresolverdecerr_
+#define VF_RESOLVEROTYPE vfresolverotype_
+
+#endif
+
+
+/**
+ * Private interface declarations.
+ */
+extern char *sstrip (char *instr, int len);
+extern void spad (char *outstr, int len);
+
+
+
+/*****************************************************************************/
+
+/**
+ * VF_NAMERESOLVER -- Query the CDS Sesame service to resolve the target
+ * name to coordinates. The query is done when creating the Sesame object,
+ * thereafter we simply query the object data.
+ *
+ * @brief Query the CDS Sesame name resolver service.
+ * @fn call vfnameresolver (char *target, int *sr)
+ *
+ * @param target name of target to be resolved
+ * @param sr returned Sesame handle
+ * @returns nothing
+ */
+void
+VF_NAMERESOLVER (char *target, int *sr, int tlen)
+{
+ char *_target = sstrip (target, tlen);
+
+ *sr = (int) voc_nameResolver (_target);
+
+ free ((char *) _target);
+}
+
+
+/**
+ * VF_RESOLVERPOS -- Return a string containing the (ra,dec) position as
+ * sexagesimal strings.
+ *
+ * @brief Get the resolved position as a string
+ * @fn call vfresolverpos (int *srm char *target, int *sr)
+ *
+ * @param sr Sesame handle
+ * @param pos position string
+ * @returns nothing
+ */
+void
+VF_RESOLVERPOS (int *sr, char *pos, int *len, int plen)
+{
+ char *_result = voc_resolverPos ((Sesame) *sr);
+
+ memset (pos, 0, plen);
+ if ((*len = strlen(_result)) > plen)
+ fprintf (stderr, "Warning: truncating POS string: len=%d maxch=%d\n",
+ *len, plen);
+ spad (strncpy (pos, _result, *len), plen);
+
+ free ((char *) _result);
+}
+
+
+/**
+ * VF_RESOLVEROTYPE -- Return a string containing the object type description
+ *
+ * @brief Get the object type description string
+ * @fn call vfresolverotype (int *sr, char *type)
+ *
+ * @param sr Sesame handle
+ * @param type object type string
+ * @returns nothing
+ */
+void
+VF_RESOLVEROTYPE (int *sr, char *otype, int *len, int olen)
+{
+ char *_result = voc_resolverOtype ((Sesame) *sr);
+
+ memset (otype, 0, olen);
+ if ((*len = strlen(_result)) > olen)
+ fprintf (stderr, "Warning: truncating OType string: len=%d maxch=%d\n",
+ *len, olen);
+ spad (strncpy (otype, _result, *len), olen);
+
+ free ((char *) _result);
+}
+
+
+/**
+ * VF_RESOLVERRA -- Return the RA as a double precision value.
+ *
+ * @brief Return the RA as a double precision value.
+ * @fn call vfresolverra (int *sr, double *ra)
+ *
+ * @param sr Sesame handle
+ * @param ra RA of object (decimal degrees)
+ * @returns nothing
+ */
+void
+VF_RESOLVERRA (int *sr, double *ra)
+{
+ *ra = voc_resolverRA ((Sesame) *sr);
+}
+
+
+/**
+ * VF_RESOLVERDEC -- Return the DEC as a double precision value.
+ *
+ * @brief Return the DEC as a double precision value.
+ * @fn call vfresolverdec (int *sr, double *dec)
+ *
+ * @param sr Sesame handle
+ * @param dec Dec of object (decimal degrees)
+ * @returns nothing
+ */
+void
+VF_RESOLVERDEC (int *sr, double *dec)
+{
+ *dec = voc_resolverDEC ((Sesame) *sr);
+}
+
+
+/**
+ * VF_RESOLVERRAERR -- Return the RA error as a double precision value.
+ *
+ * @brief Return the RA error as a double precision value.
+ * @fn call vfresolverraerr (int *sr, double *err)
+ *
+ * @param sr Sesame handle
+ * @param target RA error of position (decimal degrees)
+ * @returns nothing
+ */
+void
+VF_RESOLVERRAERR (int *sr, double *err)
+{
+ *err = voc_resolverRAErr ((Sesame) *sr);
+}
+
+
+/**
+ * VF_RESOLVERDECERR -- Return the DEC error as a double precision value.
+ *
+ * @brief Return the DEC error as a double precision value.
+ * @fn call vfresolverdecerr (int *sr, double *err)
+ *
+ * @param sr Sesame handle
+ * @param target Dec error of position (decimal degrees)
+ * @returns nothing
+ */
+void
+VF_RESOLVERDECERR (int *sr, double *err)
+{
+ *err = voc_resolverDECErr ((Sesame) *sr);
+}
diff --git a/vendor/voclient/libvoclient/vocSesame_spp.c b/vendor/voclient/libvoclient/vocSesame_spp.c
new file mode 100644
index 00000000..d72af9ab
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSesame_spp.c
@@ -0,0 +1,213 @@
+/**
+ * VOCSESAME_SPP.C -- SPP Interface to the Sesame name resolver service.
+ *
+ * @section DESCRIPTION
+ *
+ * Sesame Name Resolver SPP Interface:
+ * -----------------------------------
+ *
+ * sr = vx_nameResolver (target)
+ * pos_str = vx_resolverPos (sr)
+ * radeg = vx_resolverRA (sr)
+ * decdeg = vx_resolverDEC (sr)
+ * typ_str = vx_resolverOtype (sr)
+ * raerr = vx_resolverRAErr (sr)
+ * decerr = vx_resolverDECErr (sr)
+ *
+ * @file vocSesame_spp.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+#ifdef _NO_US_
+
+#define vx_nameresolver vxnamr
+#define vx_resolverra vxresa
+#define vx_resolverdec vxresc
+#define vx_resolverpos vxress
+#define vx_resolverotype vxrese
+
+#define vx_errresolverra vxerra
+#define vx_errresolverdec vxerrc
+
+#else
+
+#define vx_nameresolver vxnamr_
+#define vx_resolverra vxresa_
+#define vx_resolverdec vxresc_
+#define vx_resolverpos vxress_
+#define vx_resolverotype vxrese_
+
+#define vx_errresolverra vxerra_
+#define vx_errresolverdec vxerrc_
+
+
+#endif
+
+
+/* SPP Type definitions.
+*/
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS NULL
+
+
+/* Public interface procedures
+*/
+int vx_nameresolver (XCHAR *target);
+int vx_resolverpos (int *sr, XCHAR *pos, int *len);
+double vx_resolverra (int *sr);
+double vx_resolverdec (int *sr);
+int vx_resolverotype (int *sr, XCHAR *type, int *len);
+double vx_errresolverra (int *sr);
+double vx_errresolverdec (int *sr);
+
+
+/* Private interface procedures.
+*/
+extern PKCHAR *spp2c (XCHAR *instr, int maxch);
+extern int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+extern int spplen (XCHAR *str);
+
+
+
+/**
+ * VX_NAMERESOLVER -- Query the CDS Sesame service to resolve the target
+ * name to coordinates. The query is done when creating the Sesame object,
+ * thereafter we simply query the object data.
+ *
+ * @brief Query the CDS Sesame name resolver service.
+ * @fn sr = vx_nameresolver (XCHAR *target)
+ *
+ * @param target name of target to be resolved
+ * @returns handle to Sesame object
+ */
+int
+vx_nameresolver (XCHAR *target)
+{
+ char *_target = spp2c (target, spplen (target));
+
+ Sesame ier = (Sesame) voc_nameResolver (_target);
+
+ free ((char *) _target);
+ return (ier);
+}
+
+
+/**
+ * VX_RESOLVERPOS -- Return a string containing the (ra,dec) position as
+ * sexagesimal strings.
+ *
+ * @brief Return a string containing the (ra,dec) position.
+ * @fn len = vx_resolverpos (int *sr, XCHAR *pos, int *maxch)
+ *
+ * @param sr handle to Sesame object
+ * @param pos returned position string
+ * @param maxch max size of position string
+ * @returns length of position string
+ */
+int
+vx_resolverpos (int *sr, XCHAR *pos, int *maxch)
+{
+ char *_result = voc_resolverPos ((Sesame) *sr);
+ int len = c2spp (_result, pos, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+/**
+ * VX_RESOLVEROTYPE -- Return a string containing the object type description.
+ *
+ * @brief Return a string containing the object type description.
+ * @fn len = vx_resolvertype (int *sr, XCHAR *type, int *maxch)
+ *
+ * @param sr handle to Sesame object
+ * @param pos returned object type
+ * @param maxch max size of type string
+ * @returns length of type string
+ */
+int
+vx_resolverotype (int *sr, XCHAR *type, int *maxch)
+{
+ char *_result = voc_resolverOtype ((Sesame) *sr);
+ int len = c2spp (_result, type, *maxch);
+
+ free ((char *) _result);
+ return (len);
+}
+
+
+/**
+ * VX_RESOLVERRA -- Return the RA as a double precision value.
+ *
+ * @brief Return the RA as a double precision value.
+ * @fn ra = vx_resolverra (int *sr)
+ *
+ * @param sr handle to Sesame object
+ * @returns RA of object position (decimal degrees)
+ */
+double
+vx_resolverra (int *sr)
+{
+ return ( voc_resolverRA ((Sesame) *sr) );
+}
+
+
+/**
+ * VX_RESOLVERDEC -- Return the DEC as a double precision value.
+ *
+ * @brief Return the DEC as a double precision value.
+ * @fn dec = vx_resolverdec (int *sr)
+ *
+ * @param sr handle to Sesame object
+ * @returns Dec of object position (decimal degrees)
+ */
+double
+vx_resolverdec (int *sr)
+{
+ return ( voc_resolverDEC ((Sesame) *sr) );
+}
+
+
+/**
+ * VX_ERRRESOLVERRA -- Return the RA error as a double precision value.
+ *
+ * @brief Return the RA error as a double precision value.
+ * @fn err = vx_errresolverra (int *sr)
+ *
+ * @param sr handle to Sesame object
+ * @returns RA error of object position (decimal degrees)
+ */
+double
+vx_errresolverra (int *sr)
+{
+ return ( voc_resolverRAErr ((Sesame) *sr) );
+}
+
+
+/**
+ * VX_ERRRESOLVERDEC -- Return the DEC as a double precision value.
+ *
+ * @brief Return the Dec error as a double precision value.
+ * @fn err = vx_errresolverdec (int *sr)
+ *
+ * @param sr handle to Sesame object
+ * @returns Dec error of object position (decimal degrees)
+ */
+double
+vx_errresolverdec (int *sr)
+{
+ return ( voc_resolverDECErr ((Sesame) *sr) );
+}
diff --git a/vendor/voclient/libvoclient/vocSkybot.c b/vendor/voclient/libvoclient/vocSkybot.c
new file mode 100644
index 00000000..b24d05d8
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSkybot.c
@@ -0,0 +1,261 @@
+/**
+ * SkyBoT Minor Planet Service Interface:
+ * --------------------------------------
+ *
+ * A utility class for accessing the IMCCE Skybot ephemerides service.
+ * The service is called as part of the constructor for the object
+ * allowing easy access to the result data. Class methods also exist so
+ * a VO Client interface the same access to the data.
+ *
+ * Reference: http://www.imcce.fr/webservices/skybot/
+ *
+ * Class Methods:
+ * --------------
+ *
+ * sb = voc_skybot (ra, dec, rsz, dsz, epoch)
+ *
+ * count = voc_skybotNObjs (sb)
+ * str = voc_skybotStrAttr (sb, attrname, index)
+ * dval = voc_skybotDblAttr (sb, attrname, index)
+ *
+ * Available Attributes:
+ * ---------------------
+ *
+ * number string Asteroid number
+ * name string Asteroid name
+ * ra double J2000 Equatorial RA
+ * dec double J2000 Equatorial Dec
+ * class string Object classification
+ * vmag double Visual magnitude
+ * poserr double Error on position (arcsec)
+ * cdist double Body-to-center angular distance
+ * dra double RA motion (arcsec/hr)
+ * ddec double Dec motion (arcsec/hr)
+ * dgeo double Geocentric distance (AU)
+ * dhelio double Heliocentric distance (AU)
+ * px double Mean J2000 heliocentric position vector (AU)
+ * py double " " " " "
+ * pz double " " " " "
+ * vx double Mean J2000 heliocentric position vector (AU/day)
+ * vy double " " " " "
+ * vz double " " " " "
+ * JD0 double T0, epoch of position vector (JD)
+ *
+ *
+ * Example Usage:
+ * ---------------
+ *
+ * 1) Find bodies in a 900" radius around (0.0,0.0) on JD 2453939.123
+ *
+ * VOCSkybot skybot = new VOCSkybot (0.0,0.0,900,2453939.123);
+ * for (int i=0; i < skybot.getNObjs(); i++)
+ * System.out.print ("Name: '" + sb.getStrAttr("name",i)+"' " +
+ * "RA: " + sb.getDblAttr("ra",i) + " " +
+ * "Dec: " + sb.getDblAttr("dec",i) + " " +
+ * "Mv: " + sb.getDblAttr("vmag",i) + " ");
+ *
+ *
+ * @file vocSkybot.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+extern VOClient *vo; /* Interface runtime struct */
+
+
+/* SkyBoT interface procedures.
+ */
+Skybot voc_skybot (double ra, double dec, double rsz, double dsz,
+ double epoch);
+int voc_skybotNObjs (Skybot sb);
+char *voc_skybotStrAttr (Skybot sb, char *attr, int index);
+double voc_skybotDblAttr (Skybot sb, char *attr, int index);
+
+
+/**
+ * VOC_SKYBOT -- Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * This service returns a list of minor planets withing the specified
+ * search radius/box about the poition at the epoch given. Epoch is
+ * assumed to be JD, ra/dec are J2000 decimal degrees, search size is
+ * given in arcsec.
+ *
+ * @brief Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * @fn sb = voc_skybot (double ra, double dec, double rsz,
+ * double dsz, double epoch)
+ *
+ * @param ra RA position of query (decimal degrees)
+ * @param dec Dec position of query (decimal degrees)
+ * @param rsz RA size of query (arcsec)
+ * @param dsz Dec size of query (arcsec)
+ * @param epoch epoch of query (JD)
+ * @returns the string value
+ */
+Skybot
+voc_skybot (double ra, double dec, double rsz, double dsz, double epoch)
+{
+ Skybot sb = (Skybot) VOC_NULL;
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (0, "skybot", 0);
+
+ /* Make sure we've been initialized properly first.
+ */
+ if (vo == (VOClient *) NULL) {
+ if (voc_initVOClient (NULL) == ERR) {
+ fprintf (stderr, "ERROR: Can't initialize VO Client....\n");
+ exit (1);
+ } else if (VOC_DEBUG)
+ printf ("Warning: Initializing VO Client....\n");
+ }
+
+ /* Add the parameters of the call.
+ */
+ msg_addFloatParam (msg, ra);
+ msg_addFloatParam (msg, dec);
+ msg_addFloatParam (msg, rsz);
+ msg_addFloatParam (msg, dsz);
+ msg_addFloatParam (msg, epoch);
+
+ /* Read result and check for any faults.
+ */
+ if (msg_resultStatus ((result = msg_sendMsg (vo->io_chan, msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: cannot invoke SkyBoT service\n");
+ } else
+ sb = msg_getIntResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ return (sb);
+}
+
+
+/**
+ * VOC_SKYBOTSTRATTR -- Return a real-valued field as a string value.
+ *
+ * @brief Return a real-valued field as a string value.
+ * @fn dval = voc_skybotStrAttr (Skybot sb, char *attr, int index)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @returns the string value
+ */
+char *
+voc_skybotStrAttr (Skybot sb, char *attrname, int index)
+{
+ char *val = NULL, *str = NULL;
+ int len = 0;
+
+ if (sb > 0) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbStrAttr", 0);
+
+ msg_addStringParam (msg, attrname);
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: skybotStrAttr() failed\n");
+ } else {
+ val = msg_getStringResult (result, 0);
+ str = calloc (1, (len = strlen(val)+1));
+ strncpy (str, val, len);
+ }
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+ }
+
+ return (str);
+}
+
+
+/**
+ * VOC_SKYBOTDBLATTR -- Return a real-valued field as a double-precision value.
+ *
+ * @brief Return a real-valued field as a double-precision value.
+ * @fn dval = voc_skybotDblAttr (Skybot sb, char *attr, int index)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @returns the double-precision value
+ */
+double
+voc_skybotDblAttr (Skybot sb, char *attrname, int index)
+{
+ double dval = (double) 0.0;
+
+ if (sb > 0) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbDblAttr", 0);
+
+ msg_addStringParam (msg, attrname);
+ msg_addIntParam (msg, index);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: skybotDblAttr() failed\n");
+ } else
+ dval = msg_getFloatResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null object to resolverRA\n");
+
+ return (dval);
+}
+
+
+/**
+ * VOC_SKYBOTNOBJS -- Return the number of objects found from the query.
+ *
+ * @brief Return the number of objects found from the query.
+ * @fn int = voc_skybotNObjs (Skybot sb)
+ *
+ * @param sb handle to skybot query
+ * @returns the number of objects found
+ */
+int
+voc_skybotNObjs (Skybot sb)
+{
+ int ival = (int) 0;
+
+ if (sb > 0) {
+ vocRes_t *result = (vocRes_t *) NULL;
+ vocMsg_t *msg = (vocMsg_t *) msg_newCallMsg (sb, "sbNObjs", 0);
+
+ /* Send message and read result.
+ */
+ if (msg_resultStatus ((result=msg_sendMsg(vo->io_chan,msg))) == ERR) {
+ if (!vo->quiet)
+ fprintf (stderr, "ERROR: skybotNObjs() failed\n");
+ } else
+ ival = msg_getFloatResult (result, 0);
+
+ if (msg) free ((void *)msg); /* free the pointers */
+ if (result) free ((void *)result);
+
+ } else if (!vo->quiet)
+ fprintf (stderr, "ERROR: Null object to skybotNObjs\n");
+
+ return (ival);
+}
diff --git a/vendor/voclient/libvoclient/vocSkybot_f77.c b/vendor/voclient/libvoclient/vocSkybot_f77.c
new file mode 100644
index 00000000..e95bc29c
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSkybot_f77.c
@@ -0,0 +1,196 @@
+/***************************************************************************
+ *
+ * SkyBoT Minor Planet Service Interface:
+ * --------------------------------------
+ *
+ * A utility class for accessing the IMCCE Skybot ephemerides service.
+ * The service is called as part of the constructor for the object
+ * allowing easy access to the result data. Class methods also exist so
+ * a VO Client interface the same access to the data.
+ *
+ * Reference: http://www.imcce.fr/webservices/skybot/
+ *
+ * Class Methods:
+ * --------------
+ *
+ * sb = voc_skybot (ra, dec, rsz, dsz, epoch)
+ *
+ * count = voc_skybotNObjs (sb)
+ * str = voc_skybotStrAttr (sb, attrname, index)
+ * dval = voc_skybotDblAttr (sb, attrname, index)
+ *
+ * Available Attributes:
+ * ---------------------
+ *
+ * number string Asteroid number
+ * name string Asteroid name
+ * ra double J2000 Equatorial RA
+ * dec double J2000 Equatorial Dec
+ * class string Object classification
+ * vmag double Visual magnitude
+ * poserr double Error on position (arcsec)
+ * cdist double Body-to-center angular distance
+ * dra double RA motion (arcsec/hr)
+ * ddec double Dec motion (arcsec/hr)
+ * dgeo double Geocentric distance (AU)
+ * dhelio double Heliocentric distance (AU)
+ * px double Mean J2000 heliocentric position vector (AU)
+ * py double " " " " "
+ * pz double " " " " "
+ * vx double Mean J2000 heliocentric position vector (AU/day)
+ * vy double " " " " "
+ * vz double " " " " "
+ * JD0 double T0, epoch of position vector (JD)
+ *
+ *
+ * Example Usage:
+ * ---------------
+ *
+ * 1) Find bodies in a 900" radius around (0.0,0.0) on JD 2453939.123
+ *
+ * VOCSkybot skybot = new VOCSkybot (0.0,0.0,900,2453939.123);
+ * for (int i=0; i < skybot.getNObjs(); i++)
+ * System.out.print ("Name: '" + sb.getStrAttr("name",i)+"' " +
+ * "RA: " + sb.getDblAttr("ra",i) + " " +
+ * "Dec: " + sb.getDblAttr("dec",i) + " " +
+ * "Mv: " + sb.getDblAttr("vmag",i) + " ");
+ *
+ *
+ *
+ * @file vocSkybot_f77.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+#ifdef _NO_US_
+
+#define VF_SKYBOT vfskybot
+#define VF_SKYBOTNOBJS vfskybotnobjs
+#define VF_SKYBOTSTR vfskybotstr
+#define VF_SKYBOTDBL vfskybotdbl
+
+#else
+
+#define VF_SKYBOT vfskybot_
+#define VF_SKYBOTNOBJS vfskybotnobjs_
+#define VF_SKYBOTSTR vfskybotstr_
+#define VF_SKYBOTDBL vfskybotdbl_
+
+#endif
+
+
+/* Private interface procedures.
+*/
+extern char *sstrip (char *instr, int len);
+extern void spad (char *outstr, int len);
+
+
+
+/**
+ * VFSKYBOT -- Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * This service returns a list of minor planets withing the specified
+ * search radius/box about the poition at the epoch given. Epoch is
+ * assumed to be JD, ra/dec are J2000 decimal degrees, search size is
+ * given in arcsec.
+ *
+ * @brief Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * @fn call vfskybot (double *ra, double *dec, double *rsz,
+ * double *dsz, double *epoch, int *sb)
+ *
+ * @param ra RA position of query (decimal degrees)
+ * @param dec Dec position of query (decimal degrees)
+ * @param rsz RA size of query (arcsec)
+ * @param dsz Dec size of query (arcsec)
+ * @param epoch epoch of query (JD)
+ * @param sb handle to Skybot return object
+ * @returns nothing
+ */
+void
+VF_SKYBOT (double *ra, double *dec, double *rsz, double *dsz, double *epoch,
+ int *sb)
+{
+ *sb = (int) voc_skybot (*ra, *dec, *rsz, *dsz, *epoch);
+}
+
+
+/**
+ * VFSKYBOTSTR -- Return a real-valued field as a string value.
+ * Notice the index begins at 1 and not 0.
+ *
+ * @brief Return a real-valued field as a string value.
+ * @fn call vfskybotstr (int *sb, char *attr, int *index, char *out)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @param out output string value
+ * @returns nothing
+ */
+void
+VF_SKYBOTSTR (int *sb, char *attrname, int *index, char *outstr, int *len,
+ int alen, int olen)
+{
+ char *_attrname = sstrip (attrname, alen);
+
+ char *_result = voc_skybotStrAttr ((Skybot) *sb, _attrname, *index-1);
+ memset (outstr, 0, olen);
+ if ((*len = strlen(_result)) > olen)
+ fprintf (stderr, "Warning: truncating attr string: len=%d maxch=%d\n",
+ *len, olen);
+ spad (strncpy (outstr, _result, *len), olen);
+
+ free ((char *) _result);
+ free ((char *) _attrname);
+}
+
+
+/**
+ * VFSKYBOTDBL -- Return a real-valued field as a double-precision value.
+ * Notice the index begins at 1 and not 0.
+ *
+ * @brief Return a real-valued field as a double-precision value.
+ * @fn call vfskybotdbl (int *sb, char *attr, int *index, double *dval)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @param out output string value
+ * @returns nothing
+ */
+void
+VF_SKYBOTDBL (int *sb, char *attrname, int *index, double *dval, int alen)
+{
+ char *_attrname = sstrip (attrname, alen);
+
+ *dval = voc_skybotDblAttr (*sb, _attrname, *index-1);
+
+ free ((char *) _attrname);
+}
+
+
+/**
+ * VFSKYBOTNOBJS -- Return the number of objects found from the query.
+ *
+ * @brief Return the number of objects found from the query.
+ * @fn call vfskybotnobjs (int *sb, int *nobjs)
+ *
+ * @param sb handle to skybot query
+ * @param nobjs number of objects in the query
+ * @returns nothing
+ */
+void
+VF_SKYBOTNOBJS (int *sb, int *nobjs)
+{
+ *nobjs = voc_skybotNObjs (*sb);
+}
diff --git a/vendor/voclient/libvoclient/vocSkybot_spp.c b/vendor/voclient/libvoclient/vocSkybot_spp.c
new file mode 100644
index 00000000..c42a18ba
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocSkybot_spp.c
@@ -0,0 +1,208 @@
+/***************************************************************************
+ *
+ * SkyBoT Minor Planet Service Interface:
+ * --------------------------------------
+ *
+ * A utility class for accessing the IMCCE Skybot ephemerides service.
+ * The service is called as part of the constructor for the object
+ * allowing easy access to the result data. Class methods also exist so
+ * a VO Client interface the same access to the data.
+ *
+ * Reference: http://www.imcce.fr/webservices/skybot/
+ *
+ * Class Methods:
+ * --------------
+ *
+ * sb = voc_skybot (ra, dec, rsz, dsz, epoch)
+ *
+ * count = voc_skybotNObjs (sb)
+ * str = voc_skybotStrAttr (sb, attrname, index)
+ * dval = voc_skybotDblAttr (sb, attrname, index)
+ *
+ * Available Attributes:
+ * ---------------------
+ *
+ * number string Asteroid number
+ * name string Asteroid name
+ * ra double J2000 Equatorial RA
+ * dec double J2000 Equatorial Dec
+ * class string Object classification
+ * vmag double Visual magnitude
+ * poserr double Error on position (arcsec)
+ * cdist double Body-to-center angular distance
+ * dra double RA motion (arcsec/hr)
+ * ddec double Dec motion (arcsec/hr)
+ * dgeo double Geocentric distance (AU)
+ * dhelio double Heliocentric distance (AU)
+ * px double Mean J2000 heliocentric position vector (AU)
+ * py double " " " " "
+ * pz double " " " " "
+ * vx double Mean J2000 heliocentric position vector (AU/day)
+ * vy double " " " " "
+ * vz double " " " " "
+ * JD0 double T0, epoch of position vector (JD)
+ *
+ *
+ * Example Usage:
+ * ---------------
+ *
+ * 1) Find bodies in a 900" radius around (0.0,0.0) on JD 2453939.123
+ *
+ * VOCSkybot skybot = new VOCSkybot (0.0,0.0,900,2453939.123);
+ * for (int i=0; i < skybot.getNObjs(); i++)
+ * System.out.print ("Name: '" + sb.getStrAttr("name",i)+"' " +
+ * "RA: " + sb.getDblAttr("ra",i) + " " +
+ * "Dec: " + sb.getDblAttr("dec",i) + " " +
+ * "Mv: " + sb.getDblAttr("vmag",i) + " ");
+ *
+ *
+ * @file vocSkybot_f77.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+#ifdef _NO_US_
+
+#define vx_skybot vxskyt
+#define vx_skybotnobjs vxskys
+#define vx_skybotstr vxskyr
+#define vx_skybotdbl vxskyl
+
+#else
+
+#define vx_skybot vxskyt_
+#define vx_skybotnobjs vxskys_
+#define vx_skybotstr vxskyr_
+#define vx_skybotdbl vxskyl_
+
+#endif
+
+
+/* SPP Type definitions.
+ */
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS NULL
+
+
+/* Public interface procedures.
+*/
+int vx_skybot (double *ra, double *dec, double *rsz, double *dsz,
+ double *epoch);
+int vx_skybotnobjs (int *sb);
+int vx_skybotstr (int *sb, XCHAR *attr, int *index, XCHAR *outstr,
+ int *maxch);
+double vx_skybotdbl (int *sb, XCHAR *attr, int *index);
+
+
+/* Private interface procedures.
+*/
+extern PKCHAR *spp2c (XCHAR *instr, int maxch);
+extern int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+extern int spplen (XCHAR *str);
+
+
+
+/**
+ * VX_SKYBOT -- Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * This service returns a list of minor planets withing the specified
+ * search radius/box about the poition at the epoch given. Epoch is
+ * assumed to be JD, ra/dec are J2000 decimal degrees, search size is
+ * given in arcsec.
+ *
+ * @brief Call the SkyBoT (Sky Bodies Tracker) service from IMCCE.
+ * @fn sb = vx_skybot (double *ra, double *dec, double *rsz,
+ * double *dsz, double *epoch)
+ *
+ * @param ra RA position of query (decimal degrees)
+ * @param dec Dec position of query (decimal degrees)
+ * @param rsz RA size of query (arcsec)
+ * @param dsz Dec size of query (arcsec)
+ * @param epoch epoch of query (JD)
+ * @returns handle to Skybot query
+ */
+int
+vx_skybot (double *ra, double *dec, double *rsz, double *dsz, double *epoch)
+{
+ return ( (int) voc_skybot (*ra, *dec, *rsz, *dsz, *epoch) );
+}
+
+
+/**
+ * VX_SKYBOTSTR -- Return a real-valued field as a string value.
+ *
+ * @brief Return a real-valued field as a string value.
+ * @fn len = vx_skybotstr (int *sb, XCHAR *attr, int *index,
+ * XCHAR *out, int *maxch)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @param out output string value
+ * @param maxch max length of output string
+ * @returns length of string value
+ */
+int
+vx_skybotstr (int *sb, XCHAR *attrname, int *index, XCHAR *outstr, int *maxch)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ char *_result = voc_skybotStrAttr ((Skybot) *sb, _attrname, *index);
+ int len = c2spp (_result, outstr, *maxch);
+
+ free ((char *) _result);
+ free ((char *) _attrname);
+
+ return (len);
+}
+
+
+/**
+ * VX_SKYBOTDBL -- Return a real-valued field as a double-precision value.
+ *
+ * @brief Return a real-valued field as a double-precision value.
+ * @fn dval = vx_skybotdbl (int *sb, char *attr, int *index)
+ *
+ * @param sb handle to skybot query
+ * @param attr attribute name
+ * @param index object index
+ * @returns double-precision value
+ */
+double
+vx_skybotdbl (int *sb, XCHAR *attrname, int *index)
+{
+ char *_attrname = spp2c (attrname, spplen (attrname));
+
+ double dval = voc_skybotDblAttr (*sb, _attrname, *index);
+
+ free ((char *) _attrname);
+ return (dval);
+}
+
+
+/**
+ * VX_SKYBOTNOBJS -- Return the number of objects found from the query.
+ *
+ * @brief Return the number of objects found from the query.
+ * @fn nobjs = vx_skybotnobjs (int *sb)
+ *
+ * @param sb handle to skybot query
+ * @returns nothing
+ */
+int
+vx_skybotnobjs (int *sb)
+{
+ return ( voc_skybotNObjs (*sb) );
+}
diff --git a/vendor/voclient/libvoclient/vocUtil_f77.c b/vendor/voclient/libvoclient/vocUtil_f77.c
new file mode 100644
index 00000000..0d05e8aa
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocUtil_f77.c
@@ -0,0 +1,110 @@
+/**
+ *
+ * VOCUTIL_F77.C -- Utility routines to support Fortran bindings.
+ *
+ * @file vocUtil_f77.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ *************************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/**
+ * Local interface declarations.
+ */
+char *sstrip (char *instr, int len);
+void spad (char *outstr, int len);
+int typecode (char *typestr);
+
+
+
+/**
+ * SSTRIP -- Strip trailing blanks from a string and add null terminator.
+ *
+ * @brief Strip trailing blanks from a string and add null terminator
+ * @fn outstr = sstrip (char *instr, int len)
+ *
+ * @param instr string to strip
+ * @param len length of input string
+ * @returns stripped output string
+ */
+#define SZ_LINE 1024
+
+char *sstrip (char *instr, int len)
+{
+ if (len > 0 && instr) {
+ char *newstr = calloc (1, len+1);
+ int i = len;
+
+ strncpy (newstr, instr, len);
+
+ /* trim trailing blanks */
+ for (i=len; newstr[i] == ' ' || newstr[i] == '\0'; i--)
+ newstr[i] = '\0';
+
+ return (newstr);
+ }
+ return ((char *) NULL);
+}
+
+
+/**
+ * SPAD -- Pad a string to length 'len' with blanks, as Fortran requires.
+ *
+ * @brief Pad a string to length 'len' with blanks, as Fortran requires.
+ * @fn spad (char *outstr, int len)
+ *
+ * @param outstr string to pad
+ * @param len pad string to this length
+ * @returns nothing
+ */
+void spad (char *outstr, int len)
+{
+ int i=0;
+
+#ifndef _NO_SPAD_
+ for (i = strlen(outstr); i < len; i++)
+ outstr[i] = ' ';
+#endif
+}
+
+
+/**
+ * TYPECODE -- Convert a DAL type string to a code value.
+ *
+ * @brief Convert a DAL type string to a code value.
+ * @fn val = typecode (char *typestr)
+ *
+ * @param typestr DAL type string
+ * @returns DAL type code
+ */
+
+#define SZ_TYPECODE 32
+
+int typecode (char *typestr)
+{
+ char type[SZ_TYPECODE];
+ int i = 0;
+
+ memset (type, 0, SZ_TYPECODE);
+ for (i=0; typestr[i] && i < SZ_TYPECODE; i++)
+ type[i] = tolower (typestr[i]);
+
+ if (strcmp (type, "dal") == 0) return (DAL_CONN);
+ if (strcmp (type, "cone") == 0) return (CONE_CONN);
+ if (strcmp (type, "siap") == 0) return (SIAP_CONN);
+ if (strcmp (type, "ssap") == 0) return (SSAP_CONN);
+ if (strcmp (type, "slap") == 0) return (SLAP_CONN);
+
+ return (ERR);
+}
diff --git a/vendor/voclient/libvoclient/vocUtil_spp.c b/vendor/voclient/libvoclient/vocUtil_spp.c
new file mode 100644
index 00000000..ec07386d
--- /dev/null
+++ b/vendor/voclient/libvoclient/vocUtil_spp.c
@@ -0,0 +1,193 @@
+/**
+ * VOCUTIL_SPP.C -- Utility routines for the SPP proceduers.
+ *
+ * Michael Fitzpatrick, NOAO, Jul 2006
+ *
+ * @file vocUtil_spp.c
+ * @author Michael Fitzpatrick
+ * @version June 2006
+ *
+ *************************************************************************
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+#define _VOCLIENT_LIB_
+#include "VOClient.h"
+
+
+/**
+ * SPP Name mapping macros. SPP procedure names are mappad as the first-5
+ * plus the last character of a name minus any underscores. This should
+ * be done such that a unique 6-character name is produced for each SPP
+ * symbol. In these definitions the SPP code may use the long form of the
+ * name in the code, the mapping is done automatically and so we need the
+ * macros here so the symbol entered in the library is actually the short
+ * name.
+ */
+
+/**
+ * SPP Type definitions.
+ */
+#define XCHAR short
+#define PKCHAR char
+#define XINT int
+#define XEOS VOC_NULL
+
+
+/**
+ * Public interface procedures.
+ *
+ */
+PKCHAR *spp2c (XCHAR *instr, int maxch);
+int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch);
+int spplen (XCHAR *str);
+int dal_typecode (char *typestr);
+int out_typecode (char *typestr);
+
+
+
+/**
+ * SPP2C -- Convert an SPP string to a C string.
+ *
+ * @brief Convert an SPP string to a C string.
+ * @fn cstr = spp2c (XCHAR *sppstr, int maxch)
+ *
+ * @param sppstr input SPP string
+ * @param maxch max length of SPP string
+ * @returns converted C string
+ */
+char *
+spp2c (XCHAR *instr, int maxch)
+{
+ XCHAR *ip = instr;
+ char *outstr = (char *) calloc (1, maxch+1);
+ char *op = (char *) outstr;
+ int n = maxch;
+
+ while ((*op++ = (char)*ip++) != (char) XEOS && --n >= 0)
+ ;
+ *--op = (char) XEOS;
+
+ return (outstr);
+}
+
+
+/**
+ * C2SPP2C -- Convert a C string to an SPP string.
+ *
+ * @brief Convert a C string to an SPP string.
+ * @fn sppstr = c2spp (PKCHAR *instr, int maxch)
+ *
+ * @param sppstr input SPP string
+ * @param maxch max length of SPP string
+ * @returns converted C string
+ */
+int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch)
+{
+ char *ip = (char *)instr;
+ XCHAR *op = outstr;
+ int len= 0, n = 0;
+
+ /* Is is necessary to determine the length of the string in order to
+ * be able to unpack the string in place, i.e., from right to left.
+ */
+ for (n=0; n < maxch; n++)
+ outstr[n] = (XCHAR) XEOS;
+ for (n=0; *ip; n++)
+ ip++;
+ n -= 1;
+ len = (n < maxch) ? n : maxch;
+ op[n] = (XCHAR) XEOS;
+
+ for (ip = (char *)instr; --n >= 0; )
+ op[n] = ip[n];
+/*
+ op[maxch] = (XCHAR) XEOS;
+*/
+ op[maxch] = (XCHAR) VOC_NULL;
+
+ return (len);
+}
+
+
+/**
+ * SPPLEN -- Get the length of an SPP string.
+ *
+ * @brief Get the length of an SPP string.
+ * @fn len = spplen (XCHAR *str)
+ *
+ * @param str input SPP string
+ * @returns length of string
+ */
+int spplen (XCHAR *str)
+{
+ int len = 0;
+
+ for (len=0; str[len] != (XCHAR) XEOS; len++)
+ ;
+
+ return (len);
+}
+
+
+/**
+ * DAL_TYPECODE -- Convert a DAL service type string to a code.
+ *
+ * @brief Convert a DAL service type string to a code
+ * @fn code = dal_typecode (char *typestr)
+ *
+ * @param typestr input DAL string
+ * @returns type code
+ */
+
+#define SZ_TYPECODE 32
+
+int dal_typecode (char *typestr)
+{
+ char type[SZ_TYPECODE];
+ int i = 0;
+
+ memset (type, 0, SZ_TYPECODE);
+ for (i=0; typestr[i] && i < SZ_TYPECODE; i++)
+ type[i] = tolower (typestr[i]);
+
+ if (strcmp (type, "dal") == 0) return (DAL_CONN);
+ if (strcmp (type, "cone") == 0) return (CONE_CONN);
+ if (strcmp (type, "siap") == 0) return (SIAP_CONN);
+ if (strcmp (type, "ssap") == 0) return (SSAP_CONN);
+ if (strcmp (type, "slap") == 0) return (SLAP_CONN);
+ if (strcmp (type, "stap") == 0) return (STAP_CONN);
+
+ return (ERR);
+}
+
+
+/**
+ * OUT_TYPECODE -- Convert an output type string to a code.
+ *
+ * @brief Convert an output type string to a code
+ * @fn code = out_typecode (char *typestr)
+ *
+ * @param typestr input type string
+ * @returns type code
+ */
+int out_typecode (char *typestr)
+{
+ char type[SZ_TYPECODE];
+ int i = 0;
+
+ memset (type, 0, SZ_TYPECODE);
+ for (i=0; typestr[i] && i < SZ_TYPECODE; i++)
+ type[i] = tolower (typestr[i]);
+
+ if (strcmp (type, "raw") == 0) return (VOC_RAW);
+ if (strcmp (type, "csv") == 0) return (VOC_CSV);
+ if (strcmp (type, "votable") == 0) return (VOC_VOTABLE);
+
+ return (ERR);
+}
diff --git a/vendor/voclient/libvoclient/voclient.py b/vendor/voclient/libvoclient/voclient.py
new file mode 100644
index 00000000..cccef790
--- /dev/null
+++ b/vendor/voclient/libvoclient/voclient.py
@@ -0,0 +1,121 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 1.3.31
+#
+# Don't modify this file, modify the SWIG interface instead.
+# This file is compatible with both classic and new-style classes.
+
+import _voclient
+import new
+new_instancemethod = new.instancemethod
+try:
+ _swig_property = property
+except NameError:
+ pass # Python < 2.2 doesn't have 'property'.
+def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
+ if (name == "thisown"): return self.this.own(value)
+ if (name == "this"):
+ if type(value).__name__ == 'PySwigObject':
+ self.__dict__[name] = value
+ return
+ method = class_type.__swig_setmethods__.get(name,None)
+ if method: return method(self,value)
+ if (not static) or hasattr(self,name):
+ self.__dict__[name] = value
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+
+def _swig_setattr(self,class_type,name,value):
+ return _swig_setattr_nondynamic(self,class_type,name,value,0)
+
+def _swig_getattr(self,class_type,name):
+ if (name == "thisown"): return self.this.own()
+ method = class_type.__swig_getmethods__.get(name,None)
+ if method: return method(self)
+ raise AttributeError,name
+
+def _swig_repr(self):
+ try: strthis = "proxy of " + self.this.__repr__()
+ except: strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+import types
+try:
+ _object = types.ObjectType
+ _newclass = 1
+except AttributeError:
+ class _object : pass
+ _newclass = 0
+del types
+
+
+voc_coneCaller = _voclient.voc_coneCaller
+voc_coneCallerToFile = _voclient.voc_coneCallerToFile
+voc_siapCaller = _voclient.voc_siapCaller
+voc_siapCallerToFile = _voclient.voc_siapCallerToFile
+voc_ssapCaller = _voclient.voc_ssapCaller
+voc_ssapCallerToFile = _voclient.voc_ssapCallerToFile
+voc_getRawURL = _voclient.voc_getRawURL
+voc_validateObject = _voclient.voc_validateObject
+voc_initVOClient = _voclient.voc_initVOClient
+voc_closeVOClient = _voclient.voc_closeVOClient
+voc_abortVOClient = _voclient.voc_abortVOClient
+voc_openConnection = _voclient.voc_openConnection
+voc_openConeConnection = _voclient.voc_openConeConnection
+voc_openSiapConnection = _voclient.voc_openSiapConnection
+voc_openSsapConnection = _voclient.voc_openSsapConnection
+voc_closeConnection = _voclient.voc_closeConnection
+voc_getServiceCount = _voclient.voc_getServiceCount
+voc_addServiceURL = _voclient.voc_addServiceURL
+voc_getServiceURL = _voclient.voc_getServiceURL
+voc_getQuery = _voclient.voc_getQuery
+voc_getConeQuery = _voclient.voc_getConeQuery
+voc_getSiapQuery = _voclient.voc_getSiapQuery
+voc_getSsapQuery = _voclient.voc_getSsapQuery
+voc_addIntParam = _voclient.voc_addIntParam
+voc_addFloatParam = _voclient.voc_addFloatParam
+voc_addStringParam = _voclient.voc_addStringParam
+voc_getQueryString = _voclient.voc_getQueryString
+voc_executeQuery = _voclient.voc_executeQuery
+voc_executeCSV = _voclient.voc_executeCSV
+voc_executeVOTable = _voclient.voc_executeVOTable
+voc_executeQueryAs = _voclient.voc_executeQueryAs
+voc_getRecordCount = _voclient.voc_getRecordCount
+voc_getRecord = _voclient.voc_getRecord
+voc_getFieldAttr = _voclient.voc_getFieldAttr
+voc_getAttribute = _voclient.voc_getAttribute
+voc_intValue = _voclient.voc_intValue
+voc_floatValue = _voclient.voc_floatValue
+voc_stringValue = _voclient.voc_stringValue
+voc_getIntAttr = _voclient.voc_getIntAttr
+voc_getFloatAttr = _voclient.voc_getFloatAttr
+voc_getStringAttr = _voclient.voc_getStringAttr
+voc_getAttrList = _voclient.voc_getAttrList
+voc_getAttrCount = _voclient.voc_getAttrCount
+voc_getDataset = _voclient.voc_getDataset
+voc_debugLevel = _voclient.voc_debugLevel
+voc_regSearch = _voclient.voc_regSearch
+voc_regSearchByService = _voclient.voc_regSearchByService
+voc_regQuery = _voclient.voc_regQuery
+voc_regAddSearchTerm = _voclient.voc_regAddSearchTerm
+voc_regRemoveSearchTerm = _voclient.voc_regRemoveSearchTerm
+voc_regGetSTCount = _voclient.voc_regGetSTCount
+voc_regGetQueryString = _voclient.voc_regGetQueryString
+voc_regExecute = _voclient.voc_regExecute
+voc_regExecuteRaw = _voclient.voc_regExecuteRaw
+voc_resGetCount = _voclient.voc_resGetCount
+voc_resGetStr = _voclient.voc_resGetStr
+voc_resGetFloat = _voclient.voc_resGetFloat
+voc_resGetInt = _voclient.voc_resGetInt
+voc_nameResolver = _voclient.voc_nameResolver
+voc_resolverPos = _voclient.voc_resolverPos
+voc_resolverRA = _voclient.voc_resolverRA
+voc_resolverDEC = _voclient.voc_resolverDEC
+voc_resolverRAErr = _voclient.voc_resolverRAErr
+voc_resolverDECErr = _voclient.voc_resolverDECErr
+voc_resolverOtype = _voclient.voc_resolverOtype
+voc_skybot = _voclient.voc_skybot
+voc_skybotNObjs = _voclient.voc_skybotNObjs
+voc_skybotStrAttr = _voclient.voc_skybotStrAttr
+voc_skybotDblAttr = _voclient.voc_skybotDblAttr
+
+