diff options
Diffstat (limited to 'vendor/voclient/libvotable/votParse_spp.c')
-rw-r--r-- | vendor/voclient/libvotable/votParse_spp.c | 1745 |
1 files changed, 1745 insertions, 0 deletions
diff --git a/vendor/voclient/libvotable/votParse_spp.c b/vendor/voclient/libvotable/votParse_spp.c new file mode 100644 index 00000000..c4f710d0 --- /dev/null +++ b/vendor/voclient/libvotable/votParse_spp.c @@ -0,0 +1,1745 @@ +/** + * VOTPARSE_SPP.C -- Public interface procedures for the VOT SPP wrapper. + * + * @file votParse_spp.c + * @author Mike Fitzpatrick and Eric Timmermann + * @date 8/03/09 + * + * @brief Public interface procedures for the VOT SPP wrapper. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <expat.h> +#include <unistd.h> +#include <ctype.h> +#include <errno.h> + +#include "votParseP.h" +#include "votParse.h" + + +/* SPP Type definitions. +*/ +#define XCHAR short +#define PKCHAR char +#define XINT int +#define XEOS 0 + + +/* SPP Interface Definitions. + * + * SPP 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 VX_OPENVOTABLE vopene +#define VX_CLOSEVOTABLE vclose + +#define VX_GETRESOURCE vgetre +#define VX_GETTABLE vgette +#define VX_GETFIELD vgetfd +#define VX_GETDATA vgetda +#define VX_GETTABLEDATA vgetta +#define VX_GETTR vgettr +#define VX_GETTD vgettd +#define VX_GETBINARY vgetby +#define VX_GETBINARY2 vgetb2 +#define VX_GETFITS vgetfs +#define VX_GETGROUP vgetgp +#define VX_GETFIELDREF vgetff +#define VX_GETPARAMREF vgetpf +#define VX_GETDESCRIPTION vgetdn +#define VX_GETPARAM vgetpm +#define VX_GETINFO vgetio +#define VX_GETSTREAM vgetsm +#define VX_GETVALUES vgetvs +#define VX_GETMIN vgetmn +#define VX_GETMAX vgetmx +#define VX_GETOPTION vgeton +#define VX_GETLINK vgetlk +#define VX_GETCOOSYS vgetcs +#define VX_GETDATATYPE vgetde +#define VX_GETDATATYPESTR vgetdr + +#define VX_NEWRESOURCE vnetre +#define VX_NEWTABLE vnette +#define VX_NEWFIELD vnetfd +#define VX_NEWDATA vnetda +#define VX_NEWTABLEDATA vnetta +#define VX_NEWTR vnettr +#define VX_NEWTD vnettd +#define VX_NEWBINARY vnetby +#define VX_NEWBINARY2 vnetb2 +#define VX_NEWFITS vnetfs +#define VX_NEWGROUP vnetgp +#define VX_NEWFIELDREF vnetff +#define VX_NEWPARAMREF vnetpf +#define VX_NEWDESCRIPTION vnetdn +#define VX_NEWPARAM vnetpm +#define VX_NEWINFO vnetio +#define VX_NEWSTREAM vnetsm +#define VX_NEWVALUES vnetvs +#define VX_NEWMIN vnetmn +#define VX_NEWMAX vnetmx +#define VX_NEWOPTION vneton +#define VX_NEWLINK vnetlk +#define VX_NEWCOOSYS vnetcs + +#define VX_NEWNODE vnewne +#define VX_FREENODE vfreee +#define VX_ATTACHNODE vattae +#define VX_DELETENODE vdelee +#define VX_COPYELEMENT vcopyt +#define VX_GETNCOLS vgncol +#define VX_GETNROWS vgnrow +#define VX_GETTABLECELL vgstab +#define VX_GETTABLEINT vgitab +#define VX_GETTABLEREAL vgrtab +#define VX_GETLENGTH vgetlh +#define VX_GETNUMBEROF vgetnf +#define VX_FINDBYATTR vfindr +#define VX_FINDINGROUP vfindp +#define VX_NEXTINGROUP vnextp +#define VX_GETNEXT vgetnt +#define VX_GETSIBLING vgetsg +#define VX_GETCHILD vgetcd +#define VX_GETPARENT vgetpt +#define VX_CHILDOFTYPE vchile +#define VX_VALUEOF vvaluf +#define VX_TYPEOF vtypef +#define VX_SETVALUE vsetve +#define VX_GETVALUE vgsval +#define VX_GETINTVALUE vgival +#define VX_GETREALVALUE vgrval +#define VX_SETATTR vsetar +#define VX_GETATTR vgetar +#define VX_WRITEXML vwrxml +#define VX_WRITEHTML vwrhtl +#define VX_WRITESHTML vwrshl +#define VX_WRITEASV vwrasv +#define VX_WRITEBSV vwrbsv +#define VX_WRITECSV vwrcsv +#define VX_WRITETSV vwrtsv +#define VX_SETWARN vswarn + +#else + +#define VX_OPENVOTABLE vopene_ +#define VX_CLOSEVOTABLE vclose_ + +#define VX_GETRESOURCE vgetre_ +#define VX_GETTABLE vgette_ +#define VX_GETFIELD vgetfd_ +#define VX_GETDATA vgetda_ +#define VX_GETTABLEDATA vgetta_ +#define VX_GETTR vgettr_ +#define VX_GETTD vgettd_ +#define VX_GETBINARY vgetby_ +#define VX_GETBINARY2 vgetb2_ +#define VX_GETFITS vgetfs_ +#define VX_GETGROUP vgetgp_ +#define VX_GETFIELDREF vgetff_ +#define VX_GETPARAMREF vgetpf_ +#define VX_GETDESCRIPTION vgetdn_ +#define VX_GETPARAM vgetpm_ +#define VX_GETINFO vgetio_ +#define VX_GETSTREAM vgetsm_ +#define VX_GETVALUES vgetvs_ +#define VX_GETMIN vgetmn_ +#define VX_GETMAX vgetmx_ +#define VX_GETOPTION vgeton_ +#define VX_GETLINK vgetlk_ +#define VX_GETCOOSYS vgetcs_ +#define VX_GETDATATYPE vgetde_ +#define VX_GETDATATYPESTR vgetdr_ + +#define VX_NEWRESOURCE vnetre_ +#define VX_NEWTABLE vnette_ +#define VX_NEWFIELD vnetfd_ +#define VX_NEWDATA vnetda_ +#define VX_NEWTABLEDATA vnetta_ +#define VX_NEWTR vnettr_ +#define VX_NEWTD vnettd_ +#define VX_NEWBINARY vnetby_ +#define VX_NEWBINARY2 vnetb2_ +#define VX_NEWFITS vnetfs_ +#define VX_NEWGROUP vnetgp_ +#define VX_NEWFIELDREF vnetff_ +#define VX_NEWPARAMREF vnetpf_ +#define VX_NEWDESCRIPTION vnetdn_ +#define VX_NEWPARAM vnetpm_ +#define VX_NEWINFO vnetio_ +#define VX_NEWSTREAM vnetsm_ +#define VX_NEWVALUES vnetvs_ +#define VX_NEWMIN vnetmn_ +#define VX_NEWMAX vnetmx_ +#define VX_NEWOPTION vneton_ +#define VX_NEWLINK vnetlk_ +#define VX_NEWCOOSYS vnetcs_ + +#define VX_NEWNODE vnewne_ +#define VX_FREENODE vfreee_ +#define VX_ATTACHNODE vattae_ +#define VX_DELETENODE vdelee_ +#define VX_COPYELEMENT vcopyt_ +#define VX_GETNCOLS vgncol_ +#define VX_GETNROWS vgnrow_ +#define VX_GETTABLECELL vgstab_ +#define VX_GETTABLEINT vgitab_ +#define VX_GETTABLEREAL vgrtab_ +#define VX_GETLENGTH vgetlh_ +#define VX_GETNUMBEROF vgetnf_ +#define VX_FINDBYATTR vfindr_ +#define VX_FINDINGROUP vfindp_ +#define VX_NEXTINGROUP vnextp_ +#define VX_GETNEXT vgetnt_ +#define VX_GETSIBLING vgetsg_ +#define VX_GETCHILD vgetcd_ +#define VX_GETPARENT vgetpt_ +#define VX_CHILDOFTYPE vchile_ +#define VX_VALUEOF vvaluf_ +#define VX_TYPEOF vtypef_ +#define VX_SETVALUE vsetve_ +#define VX_GETVALUE vgsval_ +#define VX_GETINTVALUE vgival_ +#define VX_GETREALVALUE vgrval_ +#define VX_SETATTR vsetar_ +#define VX_GETATTR vgetar_ +#define VX_WRITEXML vwrxml_ +#define VX_WRITEHTML vwrhtl_ +#define VX_WRITESHTML vwrshl_ +#define VX_WRITEASV vwrasv_ +#define VX_WRITEBSV vwrbsv_ +#define VX_WRITECSV vwrcsv_ +#define VX_WRITETSV vwrtsv_ +#define VX_SETWARN vswarn_ + +#endif + + +/** + * Public function prototypes. + */ +handle_t VX_OPENVOTABLE (XCHAR *arg); +void VX_CLOSEVOTABLE (handle_t *vot); + +handle_t VX_GETRESOURCE (handle_t *handle); +handle_t VX_GETTABLE (handle_t *handle); +handle_t VX_GETFIELD (handle_t *handle); +handle_t VX_GETDATA (handle_t *handle); +handle_t VX_GETTABLEDATA (handle_t *handle); +handle_t VX_GETTR (handle_t *handle); +handle_t VX_GETTD (handle_t *handle); +handle_t VX_GETBINARY (handle_t *handle); +handle_t VX_GETBINARY2 (handle_t *handle); +handle_t VX_GETFITS (handle_t *handle); +handle_t VX_GETGROUP (handle_t *handle); +handle_t VX_GETFIELDRef (handle_t *handle); +handle_t VX_GETPARAMREF (handle_t *handle); +handle_t VX_GETDESCRIPTION (handle_t *handle); +handle_t VX_GETPARAM (handle_t *handle); +handle_t VX_GETINFO (handle_t *handle); +handle_t VX_GETSTREAM (handle_t *handle); +handle_t VX_GETVALUES (handle_t *handle); +handle_t VX_GETMIN (handle_t *handle); +handle_t VX_GETMAX (handle_t *handle); +handle_t VX_GETOPTION (handle_t *handle); +handle_t VX_GETLINK (handle_t *handle); +handle_t VX_GETCOOSYS (handle_t *handle); + +handle_t VX_NEWRESOURCE (handle_t *parent_h); +handle_t VX_NEWTABLE (handle_t *parent_h); +handle_t VX_NEWFIELD (handle_t *parent_h); +handle_t VX_NEWDATA (handle_t *parent_h); +handle_t VX_NEWTABLEDATA (handle_t *parent_h); +handle_t VX_NEWTR (handle_t *parent_h); +handle_t VX_NEWTD (handle_t *parent_h); +handle_t VX_NEWBINARY (handle_t *parent_h); +handle_t VX_NEWBINARY2 (handle_t *parent_h); +handle_t VX_NEWFITS (handle_t *parent_h); +handle_t VX_NEWGROUP (handle_t *parent_h); +handle_t VX_NEWFIELDRef (handle_t *parent_h); +handle_t VX_NEWPARAMREF (handle_t *parent_h); +handle_t VX_NEWDESCRIPTION (handle_t *parent_h); +handle_t VX_NEWPARAM (handle_t *parent_h); +handle_t VX_NEWINFO (handle_t *parent_h); +handle_t VX_NEWSTREAM (handle_t *parent_h); +handle_t VX_NEWVALUES (handle_t *parent_h); +handle_t VX_NEWMIN (handle_t *parent_h); +handle_t VX_NEWMAX (handle_t *parent_h); +handle_t VX_NEWOPTION (handle_t *parent_h); +handle_t VX_NEWLINK (handle_t *parent_h); +handle_t VX_NEWCOOSYS (handle_t *parent_h); + +int VX_GETDATAType (handle_t *data); +void VX_GETDATATYPESTR (handle_t *data, XCHAR *type, int *len); + +handle_t VX_NEWNODE (handle_t *parent, int *type); +void VX_ATTACHNODE (handle_t *parent, handle_t *new); +void VX_FREENODE (handle_t *elem); +void VX_DELETENODE (handle_t *elem); +handle_t VX_COPYELEMENT (handle_t *src, handle_t *parent); + +int VX_GETNCOLS (handle_t *tdata); +int VX_GETNROWS (handle_t *tdata); +void VX_GETTABLECELL (handle_t *tdata, int *row, int *col, XCHAR *value, + int *maxch); +int VX_GETTABLEINT (handle_t *tdata, int *row, int *col); +float VX_GETTABLEREAL (handle_t *tdata, int *row, int *col); +int VX_GETLENGTH (handle_t *elem); +int VX_GETNUMBEROF (handle_t *elem, int *type); +handle_t VX_FINDBYATTR (handle_t *parent, XCHAR *name, XCHAR *value); +handle_t VX_FINDINGROUP (handle_t *group, int *type); +handle_t VX_NEXTINGROUP (void); +handle_t VX_GETNEXT (handle_t *elem); +handle_t VX_GETSIBLING (handle_t *elem); +handle_t VX_GETCHILD (handle_t *elem); +handle_t VX_GETPARENT (handle_t *elem); +handle_t VX_CHILDOFTYPE (handle_t *elem, int *type); +int VX_VALUEOF (handle_t *elem); +int VX_TYPEOF (handle_t *elem); + +int VX_SETVALUE (handle_t *elem, XCHAR *value); +void VX_GETVALUE (handle_t *elem, XCHAR *value, int *maxch); +int VX_GETINTVALUE (handle_t *elem); +float VX_GETREALVALUE (handle_t *elem); +void VX_GETATTR (handle_t *elem, XCHAR *name, XCHAR *val, int *len); +int VX_SETATTR (handle_t *elem, XCHAR *attr, XCHAR *value); +void VX_WRITEXML (handle_t *elem, XCHAR *fname); +void VX_WRITEHTML (handle_t *elem, XCHAR *ifname, XCHAR *ofname); +void VX_WRITESHTML (handle_t *elem, XCHAR *ifname, XCHAR *ofname); +void VX_WRITEASV (handle_t *elem, XCHAR *fname); +void VX_WRITEBSV (handle_t *elem, XCHAR *fname); +void VX_WRITECSV (handle_t *elem, XCHAR *fname); +void VX_WRITETSV (handle_t *elem, XCHAR *fname); +void VX_SETWARN (int *value); + + + + +/** + * Local interface declarations. + */ +static PKCHAR *spp2c (XCHAR *instr, int maxch); +static int c2spp (PKCHAR *instr, XCHAR *outstr, int maxch); +static int spplen (XCHAR *str); + +static handle_t *s_group = (handle_t *) NULL; + + + +/***************************************************************************** + * + ****************************************************************************/ + + +/** VX_OPENVOTABLE + * + * @brief This will create a tree holding the VOTable build from + * an XML file parser or just a blank VOTable. + * @param[in] *arg The source of the table. + * @return The root node of the VOTable. + */ +handle_t +VX_OPENVOTABLE (XCHAR *arg) +{ + char *_arg = spp2c (arg, spplen (arg)); + handle_t handle = vot_openVOTABLE (_arg); + + if (_arg) free ((char *) _arg); + + return (handle); +} + + +/** VX_CLOSEVOTABLE + * + * @brief Destroys the node and all of it's children. + * @param[in] vot A handle to the Element that you want deleted. + * @warning Destroys the node and all of it's children. + */ +void +VX_CLOSEVOTABLE (handle_t *vot) +{ + vot_closeVOTABLE (*vot); +} + + + + +/***************************************************************************** + * Routines to get nodes of a VOTable as a handle. + ****************************************************************************/ + +/** VX_GETRESOURCE + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETRESOURCE (handle_t *handle) +{ + return ( vot_getRESOURCE (*handle) ); +} + + +/** VX_GETTABLE + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETTABLE (handle_t *handle) +{ + return ( vot_getTABLE (*handle) ); +} + + +/** VX_GETFIELD + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETFIELD (handle_t *handle) +{ + return ( vot_getFIELD (*handle) ); +} + + +/** VX_GETDATA + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETDATA (handle_t *handle) +{ + return ( vot_getDATA (*handle) ); +} + + +/** VX_GETTABLEDATA + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETTABLEDATA (handle_t *handle) +{ + return ( vot_getTABLEDATA (*handle) ); +} + + +/** VX_GETTR + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETTR (handle_t *handle) +{ + return ( vot_getTR (*handle) ); +} + + +/** VX_GETTD + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETTD (handle_t *handle) +{ + return ( vot_getTD (*handle) ); +} + + +/** VX_GETBINARY + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETBINARY (handle_t *handle) +{ + return ( vot_getBINARY (*handle) ); +} + + +/** VX_GETBINARY2 + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETBINARY2 (handle_t *handle) +{ + return ( vot_getBINARY2 (*handle) ); +} + + +/** VX_GETFITS + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETFITS (handle_t *handle) +{ + return ( vot_getFITS (*handle) ); +} + + +/** VX_GETGROUP + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETGROUP (handle_t *handle) +{ + return ( vot_getGROUP (*handle) ); +} + + +/** VX_GETFIELDRef + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETFIELDRef (handle_t *handle) +{ + return ( vot_getFIELDRef (*handle) ); +} + + +/** VX_GETPARAMREF + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETPARAMREF (handle_t *handle) +{ + return ( vot_getPARAMRef (*handle) ); +} + + +/** VX_GETDESCRIPTION + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETDESCRIPTION (handle_t *handle) +{ + return ( vot_getDESCRIPTION (*handle) ); +} + + +/** VX_GETPARAM + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETPARAM (handle_t *handle) +{ + return ( vot_getPARAM (*handle) ); +} + + +/** VX_GETINFO + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETINFO (handle_t *handle) +{ + return ( vot_getINFO (*handle) ); +} + + +/** VX_GETSTREAM + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETSTREAM (handle_t *handle) +{ + return ( vot_getSTREAM (*handle) ); +} + + +/** VX_GETVALUES + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETVALUES (handle_t *handle) +{ + return ( vot_getVALUES (*handle) ); +} + + +/** VX_GETMIN + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETMIN (handle_t *handle) +{ + return ( vot_getMIN (*handle) ); +} + + +/** VX_GETMAX + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETMAX (handle_t *handle) +{ + return ( vot_getMAX (*handle) ); +} + + +/** VX_GETOPTION + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETOPTION (handle_t *handle) +{ + return ( vot_getOPTION (*handle) ); +} + + +/** VX_GETLINK + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETLINK (handle_t *handle) +{ + return ( vot_getLINK (*handle) ); +} + + +/** VX_GETCOOSYS + * + * @brief Gets the node of a specified type. + * @param[in] handle A handle to the Element will you wish to search from. + * @return A handle to the found node. Zero otherwise. + */ +handle_t +VX_GETCOOSYS (handle_t *handle) +{ + return ( vot_getCOOSYS (*handle) ); +} + + + +/*************************************************************************/ + +/** VX_GETDATAType + * + * @brief Returns the type of the DATA element. + * @param[in] data A handle to a DATA element + * @return The type as an int. + */ +int +VX_GETDATAType (handle_t *data) +{ + return ( vot_getDATAType (*data) ); +} + + +/** VX_GETDATATypeString + * + * @brief Returns the type of the DATA element. + * @param[in] data A handle to a DATA element + * @return The type as an string. + */ +void +VX_GETDATATYPESTR (handle_t *data, XCHAR *type, int *len) +{ + char *_val = vot_getDATATypeString (*data); + + if (_val) + (void) c2spp (_val, type, *len); +} + + + +/***************************************************************************** + * Routines to create new nodes of a VOTable. + ****************************************************************************/ + +/** VX_NEWRESOURCE + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWRESOURCE (handle_t *parent_h) +{ + return ( vot_newRESOURCE (*parent_h) ); +} + + +/** VX_NEWTABLE + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWTABLE (handle_t *parent_h) +{ + return ( vot_newTABLE (*parent_h) ); +} + + +/** VX_NEWFIELD + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWFIELD (handle_t *parent_h) +{ + return ( vot_newFIELD (*parent_h) ); +} + + +/** VX_NEWDATA + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWDATA (handle_t *parent_h) +{ + return ( vot_newDATA (*parent_h) ); +} + + +/** VX_NEWTABLEDATA + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWTABLEDATA (handle_t *parent_h) +{ + return ( vot_newTABLEDATA (*parent_h) ); +} + + +/** VX_NEWTR + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWTR (handle_t *parent_h) +{ + return ( vot_newTR (*parent_h) ); +} + + +/** VX_NEWTD + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWTD (handle_t *parent_h) +{ + return ( vot_newTD (*parent_h) ); +} + + +/** VX_NEWBINARY + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWBINARY (handle_t *parent_h) +{ + return ( vot_newBINARY (*parent_h) ); +} + + +/** VX_NEWBINARY2 + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWBINARY2 (handle_t *parent_h) +{ + return ( vot_newBINARY2 (*parent_h) ); +} + + +/** VX_NEWFITS + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWFITS (handle_t *parent_h) +{ + return ( vot_newFITS (*parent_h) ); +} + + +/** VX_NEWGROUP + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWGROUP (handle_t *parent_h) +{ + return ( vot_newGROUP (*parent_h) ); +} + + +/** VX_NEWFIELDRef + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWFIELDRef (handle_t *parent_h) +{ + return ( vot_newFIELDRef (*parent_h) ); +} + + +/** VX_NEWPARAMREF + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWPARAMREF (handle_t *parent_h) +{ + return ( vot_newPARAMRef (*parent_h) ); +} + + +/** VX_NEWDESCRIPTION + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWDESCRIPTION (handle_t *parent_h) +{ + return ( vot_newDESCRIPTION (*parent_h) ); +} + + +/** VX_NEWPARAM + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWPARAM (handle_t *parent_h) +{ + return ( vot_newPARAM (*parent_h) ); +} + + +/** VX_NEWINFO + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWINFO (handle_t *parent_h) +{ + return ( vot_newINFO (*parent_h) ); +} + + +/** VX_NEWSTREAM + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWSTREAM (handle_t *parent_h) +{ + return ( vot_newSTREAM (*parent_h) ); +} + + +/** VX_NEWVALUES + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWVALUES (handle_t *parent_h) +{ + return ( vot_newVALUES (*parent_h) ); +} + + +/** VX_NEWMIN + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWMIN (handle_t *parent_h) +{ + return ( vot_newMIN (*parent_h) ); +} + + +/** VX_NEWMAX + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWMAX (handle_t *parent_h) +{ + return ( vot_newMAX (*parent_h) ); +} + + +/** VX_NEWOPTION + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWOPTION (handle_t *parent_h) +{ + return ( vot_newOPTION (*parent_h) ); +} + + +/** VX_NEWLINK + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWLINK (handle_t *parent_h) +{ + return ( vot_newLINK (*parent_h) ); +} + + +/** VX_NEWCOOSYS + * + * @brief Create the node of a specified type. + * @param[in] parent_h A handle to the parent node. from. + * @return A handle to the new node. Zero otherwise. + */ +handle_t +VX_NEWCOOSYS (handle_t *parent_h) +{ + return ( vot_newCOOSYS (*parent_h) ); +} + + + +/***************************************************************************** + ****************************************************************************/ + + +/** VX_NEWNODE + * + * @brief Creates a new blank unlinked node. + * @param[in] parent A handle to the Element that you want to add a node to. + * @param[in] type The type of node you wish to create. + * @return A handle to the created node. + */ +handle_t +VX_NEWNODE (handle_t *parent, int *type) +{ + return ( vot_newNode (*parent, *type) ); +} + + +/** VX_ATTACHNODE + * + * @brief Adds a node as a child of parent. + * @param[in] parent A handle to the Element that you want to add a node to. + * @param[in] new A handle to the Element that you want to add. + */ +void +VX_ATTACHNODE (handle_t *parent, handle_t *new) +{ + vot_attachNode (*parent, *new); +} + + +/** VX_FREENODE + * + * @brief Destroys the node and all of it's children. + * @param[in] elem A handle to the Element that you want deleted. + * @warning Destroys the node and all of it's children. + */ +void +VX_FREENODE (handle_t *elem) +{ + vot_freeNode (*elem); +} + + +/** VX_DELETENODE + * + * @brief Destroys the node and all of it's children. + * @param[in] elem A handle to the Element that you want deleted. + * @warning Destroys the node and all of it's children. + */ +void +VX_DELETENODE (handle_t *elem) +{ + vot_deleteNode (*elem); +} + + +/** VX_COPYELEMENT + * + * @brief Adds a node as a child of parent. + * @param[in] src A handle to the Element to copy. + * @param[in] parent A handle to the Elements parent. + * @return A handle of the copy of the structure. + */ +handle_t +VX_COPYELEMENT (handle_t *src, handle_t *parent) +{ + return ( vot_copyElement (*src, *parent) ); +} + + +/***************************************************************************** + * Utility methods + ****************************************************************************/ + + +/** VX_GETNCOLS + * + * @brief Return the nuber of columns in the structure. + * @param[in] tdata A handle to a TABLEDATA + * @return The number of cols. + */ +int +VX_GETNCOLS (handle_t *tdata) +{ + return ( vot_getNCols (*tdata) ); +} + + +/** VX_GETNROWS + * + * @brief Return the nuber of columns in the structure. + * @param[in] tdata A handle to a TABLEDATA + * @return The number of cols. + */ +int +VX_GETNROWS (handle_t *tdata) +{ + return ( vot_getNRows (*tdata) ); +} + + +/** VX_GETTABLECELL + * + * @brief Return the nuber of contents of a table cell + * @param[in] tdata A handle to a TABLEDATA. + * @param[in] row An int for a row. + * @param[in] col An int for a col. + * @return The content of the cell. + */ +void +VX_GETTABLECELL (handle_t *tdata, int *row, int *col, XCHAR *value, int *maxch) +{ + char *_val = vot_getTableCell (*tdata, *row, *col); + + if (_val) + (void) c2spp (_val, value, *maxch); +} + + +/** VX_GETTABLEINT + * + * @brief Return the nuber of contents of a table cell as an int + * @param[in] tdata A handle to a TABLEDATA. + * @param[in] row An int for a row. + * @param[in] col An int for a col. + * @return The content of the cell as an int. + */ +int +VX_GETTABLEINT (handle_t *tdata, int *row, int *col) +{ + return ( atoi (vot_getTableCell (*tdata, *row, *col)) ); +} + + +/** VX_GETTABLEREAL + * + * @brief Return the nuber of contents of a table cell as an real + * @param[in] tdata A handle to a TABLEDATA. + * @param[in] row An int for a row. + * @param[in] col An int for a col. + * @return The content of the cell as a real. + */ +float +VX_GETTABLEREAL (handle_t *tdata, int *row, int *col) +{ + return ( atof (vot_getTableCell (*tdata, *row, *col)) ); +} + + +/** VX_GETLENGTH + * + * @brief Return the number of sibling Elements of the same type. + * @param[in] elem A handle the Element. + * @return The status of the set. + */ +int +VX_GETLENGTH (handle_t *elem) +{ + return ( vot_getLength (*elem) ); +} + + +/** VX_GETNUMBEROF + * + * @brief Return the number of sibling Elements of the type. + * @param[in] elem A handle the Element. + * @param[in] type An int of the type of element you wish to count. + * @return The status of the set. + */ +int +VX_GETNUMBEROF (handle_t *elem, int *type) +{ + return ( vot_getNumberOf (*elem, *type) ); +} + + +/** VX_COLBYATTR. + * + * @brief Return column number of requested attribute. + * @param[in] tab A handle the parent <TABLE> element. + * @param[in] attr A string holding the attribute name + * @param[in] name A string holding the first-choice attribute value + * @param[in] alt A string holding the alternate attribute value + * @return The handle to the element. + */ +int +VX_COLBYATTR (handle_t *parent, XCHAR *attr, XCHAR *name, XCHAR *alt) +{ + char *_attr = spp2c (attr, spplen (attr)); + char *_name = spp2c (name, spplen (name)); + char *_alt = spp2c (alt, spplen (alt)); + + int col = vot_colByAttr (*parent, _attr, _name, _alt); + + free ((char *) _attr); + free ((char *) _name); + free ((char *) _alt); + + return ( col ); +} + + +/** VX_COLBYNAME. + * + * @brief Return column number of requested attribute. + * @param[in] tab A handle the parent <TABLE> element. + * @param[in] name A string holding the first-choice attribute value + * @param[in] value A string holding the alternate attribute value + * @return The handle to the element. + */ +int +VX_COLBYNAME (handle_t *parent, XCHAR *name, XCHAR *alt) +{ + char *_name = spp2c (name, spplen (name)); + char *_alt = spp2c (alt, spplen (alt)); + + int col = vot_colByName (*parent, _name, _alt); + + free ((char *) _name); + free ((char *) _alt); + + return ( col ); +} + + +/** VX_COLBYUCD. + * + * @brief Return column number of requested attribute. + * @param[in] tab A handle the parent <TABLE> element. + * @param[in] name A string holding the first-choice attribute value + * @param[in] value A string holding the alternate attribute value + * @return The handle to the element. + */ +int +VX_COLBYUCD (handle_t *parent, XCHAR *name, XCHAR *alt) +{ + char *_name = spp2c (name, spplen (name)); + char *_alt = spp2c (alt, spplen (alt)); + + int col = vot_colByUCD (*parent, _name, _alt); + + free ((char *) _name); + free ((char *) _alt); + + return ( col ); +} + + +/** VX_COLBYID. + * + * @brief Return column number of requested attribute. + * @param[in] tab A handle the parent <TABLE> element. + * @param[in] name A string holding the first-choice attribute value + * @param[in] value A string holding the alternate attribute value + * @return The handle to the element. + */ +int +VX_COLBYID (handle_t *parent, XCHAR *name, XCHAR *alt) +{ + char *_name = spp2c (name, spplen (name)); + char *_alt = spp2c (alt, spplen (alt)); + + int col = vot_colByID (*parent, _name, _alt); + + free ((char *) _name); + free ((char *) _alt); + + return ( col ); +} + + +/** VX_FINDBYATTR. + * + * @brief Return a handle to an Element with the requested attr. + * @param[in] parent A handle the parent Element. + * @param[in] name A string holding the Value type. + * @param[in] value A string holding the Value value. + * @return The handle to the element. + */ +handle_t +VX_FINDBYATTR (handle_t *parent, XCHAR *name, XCHAR *value) +{ + char *_name = spp2c (name, spplen (name)); + char *_value = spp2c (value, spplen (value)); + + int handle = vot_findByAttr (*parent, _name, _value); + + free ((char *) _name); + free ((char *) _value); + + return ( handle ); +} + + +/** VX_FINDINGROUP. + * + * @brief Return an array of handle_ts of the requested type. + * @param[in] group A handle the parent Element. + * @param[in] type Value of the type. + * @return An array of handles. + */ +handle_t +VX_FINDINGROUP (handle_t *group, int *type) +{ + s_group = vot_findInGroup (*group, *type); + return ( (handle_t) *s_group ); +} + + +/** VX_NEXTINGROUP. + * + * @brief Return an array of handle_ts of the requested type. + * @param[in] group A handle the parent Element. + * @param[in] type Value of the type. + * @return An array of handles. + */ +handle_t +VX_NEXTINGROUP (void) +{ + s_group++; + return ( (handle_t) *s_group ); +} + + +/** VX_GETNEXT + * + * @brief Return a handle of the next Element of the same type. + * @param[in] elem A handle the Element. + * @return A handle of the next Element of the same type. + */ +handle_t +VX_GETNEXT (handle_t *elem) +{ + return ( vot_getNext (*elem) ); +} + + +/** VX_GETSIBLING. + * + * @brief Return a handle of the next Element. + * @param[in] elem A handle the Element. + * @return A handle of the next Element. + */ +handle_t +VX_GETSIBLING (handle_t *elem) +{ + return ( vot_getSibling (*elem) ); +} + + +/** VX_GETCHILD + * + * @brief Return a handle of the child Element. + * @param[in] elem A handle the Element. + * @return A handle of the child Element. + */ +handle_t +VX_GETCHILD (handle_t *elem) +{ + return ( vot_getChild (*elem) ); +} + + +/** VX_GETPARENT + * + * @brief Return a handle of the parent Element. + * @param[in] elem A handle the Element. + * @return A handle of the paretn Element. + */ +handle_t +VX_GETPARENT (handle_t *elem) +{ + return ( vot_getParent (*elem) ); +} + + +/** VX_GETCHILDOfTYPE + * @brief Return a handle of the next Element of the same type. + * @param[in] elem A handle the Element. + * @param[in] type An integer of the Element type for find. + * @return A handle of the Element. + */ +handle_t +VX_CHILDOFTYPE (handle_t *elem, int *type) +{ + return ( vot_getChildOfType (*elem, *type) ); +} + + +/** VX_VALUEOF + * + * @brief Return type of the Element. + * @param[in] elem A handle the Element. + * @return An integer of the type. + */ +int +VX_VALUEOF (handle_t *elem) +{ + return ( vot_valueOf (*elem) ); +} + + +/** VX_TYPEOF + * + * @brief Return type of the Element. + * @param[in] elem A handle the Element. + * @return An integer of the type. + */ +int +VX_TYPEOF (handle_t *elem) +{ + return ( vot_typeOf (*elem) ); +} + + +/** VX_SETWARN + * + * @brief Set warnings level. + * @param[in] elem Warning level + * @return Nothing + */ +void +VX_SETWARN (int *value) +{ + vot_setWarnings (*value); +} + + +/**************************************************************************** + * + ***************************************************************************/ + +/** VX_SETVALUE + * + * @brief Return the Value for the ELEMENT. + * @param[in] elem A handle the ELEMENT. + * @param[in] value A string holding the Value value. + * @return The status of the set. + */ +int +VX_SETVALUE (handle_t *elem, XCHAR *value) +{ + char *_value = spp2c (value, spplen(value)); + int retval = vot_setValue (*elem, _value); + + if (_value) free ((char *) _value); + + return (retval); +} + + +/** VX_GETVALUE + * + * @brief Return the Value for the ELEMENT. + * @param[in] elem A handle the ELEMENT. + * @return A string of the value or the Value. + */ +void +VX_GETVALUE (handle_t *elem, XCHAR *value, int *maxch) +{ + char *_val = vot_getValue (*elem); + + (void) c2spp (_val, value, *maxch); +} + + +/** VX_GETINTVALUE + * + * @brief Return the Value for the ELEMENT as an int. + * @param[in] elem A handle the ELEMENT. + * @return An int value + */ +int +VX_GETINTVALUE (handle_t *elem) +{ + return ( atoi (vot_getValue (*elem)) ); +} + + +/** VX_GETREALVALUE + * + * @brief Return the Value for the ELEMENT. + * @param[in] elem A handle the ELEMENT. + * @return A real value + */ +float +VX_GETREALVALUE (handle_t *elem) +{ + return ( atof (vot_getValue (*elem)) ); +} + + +/** VX_GETATTR + * + * @brief Return the attribute for the Element. + * @param[in] elem A handle the Element. + * @param[in] attr A string holding the attribute name. + * @return A string of the value or the attr. + */ +void +VX_GETATTR (handle_t *elem, XCHAR *name, XCHAR *val, int *len) +{ + char *_name = spp2c (name, spplen(name)); + char *res = vot_getAttr (*elem, _name); + + if (res) + c2spp (res, val, *len); + + if (_name) free ((char *) _name); +} + + +/** VX_SETATTR + * + * @brief Return the attribute for the Element. + * @param[in] elem A handle the Element. + * @param[in] attr A string holding the attribute name. + * @param[in] value A string holding the attribute value. + * @return The status of the set. + */ +int +VX_SETATTR (handle_t *elem, XCHAR *attr, XCHAR *value) +{ + char *_attr = spp2c (attr, spplen(attr)); + char *_value = spp2c (value, spplen(value)); + + int retval = vot_setAttr (*elem, _attr, _value); + + if (_attr) free ((char *) _attr); + if (_value) free ((char *) _value); + + return (retval); +} + + +/** VX_WRITEXML + * + * @brief Print the XML to the named file (or stdout) + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITEXML (handle_t *elem, XCHAR *fname) +{ + char *_fname = spp2c (fname, spplen (fname)); + + vot_writeVOTable (*elem, _fname, 0); + + free ((char *) _fname); +} + + +/** VX_WRITEHTML + * + * @brief Print the XML to the named file (or stdout) + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITEHTML (handle_t *elem, XCHAR *ifname, XCHAR *ofname) +{ + char *_ifname = spp2c (ifname, spplen (ifname)); + char *_ofname = spp2c (ofname, spplen (ofname)); + + vot_writeHTML (*elem, _ifname, _ofname); + + free ((char *) _ifname); + free ((char *) _ofname); +} + + +/** VX_WRITESHTML + * + * @brief Print the XML to the named file (or stdout) + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITESHTML (handle_t *elem, XCHAR *ifname, XCHAR *ofname) +{ + char *_ifname = spp2c (ifname, spplen (ifname)); + char *_ofname = spp2c (ofname, spplen (ofname)); + + vot_writeSHTML (*elem, _ifname, _ofname); + + free ((char *) _ifname); + free ((char *) _ofname); +} + + +/** VX_WRITEASV + * + * @brief Print the XML as Ascii-Separated Values + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITEASV (handle_t *elem, XCHAR *fname) +{ + char *_fname = spp2c (fname, spplen (fname)); + + vot_writeASV (*elem, _fname, 1); + + free ((char *) _fname); +} + + +/** VX_WRITEBSV + * + * @brief Print the XML as Bar-Separated Values + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITEBSV (handle_t *elem, XCHAR *fname) +{ + char *_fname = spp2c (fname, spplen (fname)); + + vot_writeBSV (*elem, _fname, 1); + + free ((char *) _fname); +} + + +/** VX_WRITECSV + * + * @brief Print the XML as Comma-Separated Values + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITECSV (handle_t *elem, XCHAR *fname) +{ + char *_fname = spp2c (fname, spplen (fname)); + + vot_writeCSV (*elem, _fname, 1); + + free ((char *) _fname); +} + + +/** VX_WRITETSV + * + * @brief Print the XML as Tab-Separated Values + * @param[in] elem A handle the root Element. + * @param[in] fname Output file name + */ +void +VX_WRITETSV (handle_t *elem, XCHAR *fname) +{ + char *_fname = spp2c (fname, spplen (fname)); + + vot_writeTSV (*elem, _fname, 1); + + free ((char *) _fname); +} + + + + +/**************************************************************************** + * Private utility procedures + ****************************************************************************/ + + +/* 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. +*/ + + + +static 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); +} + + +static 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) 0; + + return (len); +} + + +static int +spplen (XCHAR *str) +{ + int len = 0; + + for (len=0; str[len] != (XCHAR) XEOS; len++) + ; + + return (len); +} |