aboutsummaryrefslogtreecommitdiff
path: root/vendor/voclient/libvotable/examples/zztest.c
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/voclient/libvotable/examples/zztest.c')
-rw-r--r--vendor/voclient/libvotable/examples/zztest.c427
1 files changed, 427 insertions, 0 deletions
diff --git a/vendor/voclient/libvotable/examples/zztest.c b/vendor/voclient/libvotable/examples/zztest.c
new file mode 100644
index 00000000..ff5add17
--- /dev/null
+++ b/vendor/voclient/libvotable/examples/zztest.c
@@ -0,0 +1,427 @@
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "votParse.h"
+
+
+
+typedef struct colum {
+ char name[100];
+ char ucd[1000];
+} col_t;
+
+int
+pseudocode1(char *fname)
+{
+ handle_t vot, res, data, tab, field, tr, td, fits, stream, tdata,
+ bin;
+ int nrows, ncols, i, l, m, use_direct = 1;
+ char *str, *extnum, *href, *ucd, *name;
+
+ printf("--------------Test 1-------------------------------------------\n");
+
+ col_t *col;
+
+ vot = vot_openVOTABLE(fname);
+
+ /* Loop over RESOURCES. */
+ res = vot_getRESOURCE(vot);
+
+ printf("Table has toplevel %i RESOURCE elements\n",
+ vot_getLength(res));
+
+ while (res) {
+ tab = vot_getTABLE(res);
+
+ /* Print column info. */
+
+ /* Get the data element. */
+ data = vot_getDATA(tab);
+
+ /* Get data stored as a TABLEDATA XML block. */
+ tdata = vot_getTABLEDATA(data);
+
+ col = (col_t *) calloc(vot_getNCols(tdata), sizeof(col_t));
+
+ for (field = vot_getFIELD(tab), i = 0; field; field = vot_getNext(field), i++) {
+ name = vot_getAttr(field, "name");
+ ucd = vot_getAttr(field, "ucd");
+
+ if (name != NULL)
+ strcpy(col[i].name, name);
+
+ if (ucd != NULL)
+ strcpy(col[i].ucd, ucd);
+
+ printf("%s, ", col[i].name);
+ }
+
+ printf("\n");
+
+ switch (vot_getDATAType(data)) {
+ case TY_TABLEDATA:
+
+ if (use_direct) {
+ /* Get the table data cells by direct index. */
+ tr = vot_getTR(tdata);
+ nrows = vot_getLength(tr);
+ ncols = vot_getLength(vot_getTD(tr));
+
+ for (l = 0; l < nrows; l++) {
+ for (m = 0; m < ncols; m++) {
+ str = vot_getTableCell(tdata, l, m);
+ printf("%s\n", str);
+ }
+
+ printf("--\n");
+ }
+ } else {
+ /* Get the table data cells by looping over rows/cols. */
+ for (tr = vot_getTR(tdata); tr; tr = vot_getNext(tr)) {
+ for (td = vot_getTD(tr); td; td = vot_getNext(td)) {
+ str = vot_getValue(td);
+ printf("%s\n", str);
+ }
+ }
+ }
+
+ break;
+
+ case TY_BINARY:
+ /*
+ * Get data stored as inline binary. If the encoding of the
+ * stream is based64 read the sequence of bytes and decode.
+ */
+
+ bin = vot_getBINARY(data);
+ stream = vot_getSTREAM(bin);
+
+ if (strcasecmp("base64", vot_getAttr(stream, "encoding")) == 0)
+ str = vot_getValue(stream);
+ printf("%s\n", str);
+
+ break;
+
+ case TY_FITS:
+ /*
+ * Read FITS data. Assumes a particular extension of an MEF is
+ * avaliable for download at the given href.
+ */
+ fits = vot_getFITS(data);
+ extnum = vot_getAttr(fits, "extnum");
+
+ stream = vot_getSTREAM(fits);
+ href = vot_getAttr(stream, "href");
+
+ /* Download the FITS file. */
+
+ break;
+
+ default:
+ printf("Error: Invalid table DATA type.\n");
+ }
+
+ res = vot_getNext(res);
+ }
+
+
+ printf("--------------\\Test 1-----------------------------------------\n");
+
+ return (0);
+
+}
+
+int
+pseudocode2(char *fname)
+{
+ handle_t vot, res, p;
+
+ printf("--------------Test 2-------------------------------------------\n");
+ vot = vot_openVOTABLE(fname);
+
+ res = vot_getRESOURCE(vot);
+
+ for (p = vot_getChild(res); p; p = vot_getSibling(p)) {
+ if (vot_typeOf(p) == TY_PARAM)
+ printf("PARAM name=%s value=%s\n",
+ vot_getAttr(p, "name"), vot_getAttr(p, "value"));
+ }
+
+ printf("\n");
+ res = vot_getRESOURCE(vot);
+
+ for (p = vot_getPARAM(res); p; p = vot_getNext(p)) {
+ printf("PARAM name=%s value=%s\n",
+ vot_getAttr(p, "name"), vot_getAttr(p, "value"));
+ }
+
+
+ printf("------------\\Test 2-------------------------------------------\n");
+
+ return (0);
+}
+
+int
+pseudocode3(char *fname)
+{
+ handle_t vot, res, param, info;
+
+ printf("--------------Test 3-------------------------------------------\n");
+ vot = vot_openVOTABLE(fname);
+
+ if ((info = vot_getINFO(vot))) {
+ if (strcasecmp(vot_getAttr(info, "name"), "error") == 0)
+ printf("ERROR: VALUE=%s\n", vot_getAttr(info, "value"));
+ } else {
+ printf("File OK.\n");
+ }
+
+
+ vot = vot_openVOTABLE(fname);
+ res = vot_getRESOURCE(vot);
+ param = vot_getPARAM(res);
+ info = vot_getINFO(res);
+
+ if ((param) && strcasecmp(vot_getAttr(param, "name"), "error") == 0) {
+ /* SCS alternate method where PARAN defines value the error string. */
+ printf("ERROR: VALUE=%s\n", vot_getAttr(param, "value"));
+ } else if ((info) && strcasecmp(vot_getAttr(info, "name"), "QUERY_STATUS") == 0) {
+ /*
+ * All-other DAL methods where PARAM and INFO of the RESOURCE defines
+ * a QUERY_STATUS of the result.
+ */
+ if (strcasecmp(vot_getAttr(info, "value"), "OK") == 0)
+ printf("FILE OK.\n");
+ else
+ printf("ERROR: Value=%s\n", vot_getValue(info));
+ } else
+ printf("FILE OK.\n");
+
+
+ printf("------------\\Test 3-------------------------------------------\n");
+ return (0);
+}
+
+int
+pseudocode4(void)
+{
+ handle_t vot, res, data, tab, f, tr, td, tdata, desc, info;
+ int nrows = 5, ncols = 10, i, j;
+ char colname[50];
+ char **data_m;
+ char **ip;
+ char *tmpstr;
+
+ printf("--------------Test 4-------------------------------------------\n");
+
+ data_m = (char **) calloc((nrows * ncols), sizeof(char *));
+
+ ip = data_m;
+
+ for (i = 0; i < nrows; i++) {
+ for (j = 0; j < ncols; j++) {
+ tmpstr = (char *) calloc(30, sizeof(char));
+ sprintf(tmpstr, "row: %i, col: %i", i, j);
+ *ip++ = tmpstr;
+ }
+ }
+
+
+ vot = vot_openVOTABLE(NULL);
+
+ res = vot_newNode(vot, TY_RESOURCE);
+ vot_setAttr(res, "id", "newtable");
+
+ desc = vot_newNode(vot, TY_DESCRIPTION);
+ vot_setValue(desc, "This is a test description.");
+
+ tab = vot_newNode(res, TY_TABLE);
+
+ for (i = 0; i < 10; i++) {
+ f = vot_newNode(tab, TY_FIELD);
+ sprintf(colname, "col%d", i);
+ vot_setAttr(f, "name", colname);
+ vot_setAttr(f, "id", colname);
+ }
+
+ data = vot_newNode(tab, TY_DATA);
+ tdata = vot_newNode(data, TY_TABLEDATA);
+
+ for (i = 0; i < nrows; i++) {
+ tr = vot_newNode(tdata, TY_TR);
+ for (j = 0; j < ncols; j++) {
+ td = vot_newNode(tr, TY_TD);
+ vot_setValue(td, (char *) data_m[(i * ncols) + j]);
+ }
+ }
+
+ info = vot_newNode(tab, TY_INFO);
+ vot_setAttr(info, "id", "STATUS");
+ vot_setAttr(info, "value", "OK");
+
+ vot_writeVOTable(vot, "stdout", 1);
+
+
+ printf("------------\\Test 4-------------------------------------------\n");
+
+ return (0);
+}
+
+int
+pseudocode5_copy(char *fname1, char *fname2)
+{
+ handle_t vot2, res2, cres2;
+ handle_t vot1, res1, cres1;
+ handle_t vot3;
+
+ printf("--------------Test 5-------------------------------------------\n");
+
+ vot1 = vot_openVOTABLE(fname1);
+ printf("Handles: %i\n", vot_handleCount());
+ vot2 = vot_openVOTABLE(fname2);
+ printf("Handles: %i\n", vot_handleCount());
+
+ res1 = vot_getRESOURCE(vot1);
+ res2 = vot_getRESOURCE(vot2);
+
+ cres1 = vot_copyElement(res1, 0);
+ cres2 = vot_copyElement(res2, 0);
+ printf("Handles: %i\n", vot_handleCount());
+
+ vot3 = vot_openVOTABLE(NULL);
+
+ vot_attachNode(vot3, cres1);
+ vot_attachNode(vot3, cres2);
+
+ vot_writeVOTable(vot3, "stdout", 1);
+
+ printf("Handles: %i\n", vot_handleCount());
+ vot_closeVOTABLE(vot1);
+ vot_closeVOTABLE(vot2);
+ vot_closeVOTABLE(vot3);
+ vot_closeVOTABLE(cres2);
+ vot_closeVOTABLE(cres1);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_deleteNode(cres2);
+ vot_deleteNode(cres1);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_writeVOTable(vot3, "stdout", 1);
+
+ printf("------------\\Test 5-------------------------------------------\n");
+ return (0);
+}
+
+int
+pseudocode5(char *fname1, char *fname2)
+{
+ handle_t vot2, res2;
+ handle_t vot1, res1;
+ handle_t vot3;
+
+ printf("--------------Test 5-------------------------------------------\n");
+
+ vot1 = vot_openVOTABLE(fname1);
+ vot2 = vot_openVOTABLE(fname2);
+
+ res1 = vot_getRESOURCE(vot1);
+ res2 = vot_getRESOURCE(vot2);
+
+ vot3 = vot_openVOTABLE(NULL);
+
+ vot_attachNode(vot3, res1);
+ vot_attachNode(vot3, res2);
+
+ vot_writeVOTable(vot3, "stdout", 1);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_closeVOTABLE(vot1);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_closeVOTABLE(vot2);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_closeVOTABLE(vot3);
+ printf("Handles: %i\n", vot_handleCount());
+ vot_writeVOTable(vot3, "stdout", 1);
+
+ printf("------------\\Test 5-------------------------------------------\n");
+ return (0);
+}
+
+int
+pseudocode6(void)
+{
+
+ printf("--------------Test 6-------------------------------------------\n");
+ printf("------------\\Test 6-------------------------------------------\n");
+ return (0);
+}
+
+void
+copy_test(char *fname)
+{
+ handle_t vot, copy;
+
+ printf("--------------Copy Test-------------------------------------------\n");
+ vot = vot_openVOTABLE(fname);
+
+ /*
+ vot_writeVOTable(vot, "stdout", 1);
+ */
+
+ printf("Handles: %i\n", vot_handleCount());
+
+
+ copy = vot_copyElement(vot, 0);
+
+
+ /*
+ vot_writeVOTable(copy, "stdout", 1);
+ */
+
+ printf("Handles: %i\n", vot_handleCount());
+
+ vot_closeVOTABLE(copy);
+
+ printf("Handles: %i\n", vot_handleCount());
+
+
+
+ vot_closeVOTABLE(vot);
+
+ printf("Handles: %i\n", vot_handleCount());
+
+ printf("------------\\Copy Test-------------------------------------------\n");
+
+}
+
+
+
+int
+main(int argc, char **argv)
+{
+ char *fname = "zztest.xml";
+ char *fname2 = "zzdummy.xml";
+
+
+ printf("Hello World!\n");
+
+
+ /*
+ */
+ pseudocode1(fname);
+ pseudocode2(fname);
+ pseudocode3(fname);
+ pseudocode4();
+
+ pseudocode5(fname, fname2);
+ pseudocode5_copy(fname, fname2);
+
+ pseudocode6();
+
+ copy_test(fname);
+
+
+ return (0);
+}