summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitri Pal <dpal@dpal.csb>2009-02-23 10:38:06 -0500
committerDmitri Pal <dpal@dpal.csb>2009-02-23 10:38:06 -0500
commitd986aeb99fa33967374290bf7ce75eab76c6d446 (patch)
treee85af838cd95b43c4f1be5bc2203a1a3474ba589 /tools
downloadelapi_draft-d986aeb99fa33967374290bf7ce75eab76c6d446.tar.gz
elapi_draft-d986aeb99fa33967374290bf7ce75eab76c6d446.tar.xz
elapi_draft-d986aeb99fa33967374290bf7ce75eab76c6d446.zip
Initial commit.
Diffstat (limited to 'tools')
-rw-r--r--tools/Makefile.am3
-rw-r--r--tools/elapi_tools.c192
-rw-r--r--tools/elapi_tools.h27
3 files changed, 222 insertions, 0 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 0000000..620da70
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,3 @@
+lib_LIBRARIES = libelapi_tools.a
+libelapi_tools_a_SOURCES = elapi_tools.c
+
diff --git a/tools/elapi_tools.c b/tools/elapi_tools.c
new file mode 100644
index 0000000..d1d00c0
--- /dev/null
+++ b/tools/elapi_tools.c
@@ -0,0 +1,192 @@
+/* Copyright */
+
+#include <stdio.h>
+#include <malloc.h>
+#include "elapi_collection.h"
+#include "elapi_debug.h"
+#include "elapi_util.h"
+#include "elapi_tools.h"
+
+/* Debug handle */
+int debug_handle(char *property,
+ int property_len,
+ int type,
+ void *data,
+ int length,
+ void *custom_data,
+ int *dummy)
+{
+ int i;
+ int nest_level;
+
+ DEBUG_STRING("debug_handle","Entry.");
+
+
+ nest_level = *(int *)(custom_data);
+ DEBUG_NUMBER("We are getting this pointer:",custom_data);
+ DEBUG_NUMBER("Nest level:",nest_level);
+
+ switch(type) {
+ case ELAPI_TYPE_STRING:
+ printf("%*s %s[%d] str: %s (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ (char *)(data),
+ (int)(nest_level));
+ break;
+ case ELAPI_TYPE_BINARY:
+ printf("%*s %s[%d] bin: ",
+ (nest_level-1)*4,"",
+ property,
+ length);
+ for(i=0;i<length;i++) printf("%02X",*((unsigned char *)(data+i)));
+ printf(" (%d)\n",(int)(nest_level));
+ break;
+ case ELAPI_TYPE_INTEGER:
+ printf("%*s %s[%d] int: %d (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ *((int *)(data)),
+ nest_level);
+ break;
+ case ELAPI_TYPE_UNSIGNED:
+ printf("%*s %s[%d] uint: %u (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ *((unsigned int *)(data)),
+ nest_level);
+ break;
+ case ELAPI_TYPE_LONG:
+ printf("%*s %s[%d] long: %ld (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ *((long *)(data)),
+ nest_level);
+ break;
+ case ELAPI_TYPE_ULONG:
+ printf("%*s %s[%d] ulong: %lu (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ *((unsigned long *)(data)),
+ nest_level);
+ break;
+ case ELAPI_TYPE_DOUBLE:
+ printf("%*s %s[%d] double: %.4f (%d)\n",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ *((double *)(data)),
+ nest_level);
+ break;
+ case ELAPI_TYPE_COLLECTION:
+ nest_level++;
+ printf("%*s %s[%d] header: count %d, ref_count %d data: ",
+ (nest_level-1)*4,"",
+ property,
+ length,
+ ((struct collection_header *)(data))->count,
+ ((struct collection_header *)(data))->reference_count);
+ for(i=0;i<length;i++) printf("%02X",*((unsigned char *)(data+i)));
+ printf(" (%d)\n",(int)(nest_level));
+ break;
+ case ELAPI_TYPE_COLLECTIONREF:
+ printf("%*s %s[%d] external link: ",
+ (nest_level-1)*4,"",
+ property,
+ length);
+ for(i=0;i<length;i++) printf("%02X",*((unsigned char *)(data+i)));
+ printf(" (%d)\n",(int)(nest_level));
+ break;
+ case ELAPI_TYPE_END:
+ nest_level--;
+ /* printf("Reduced nest level\n");*/
+ break;
+ default:
+ printf("Not implemented yet.\n");
+ break;
+ }
+ *(int *)(custom_data) = nest_level;
+ DEBUG_NUMBER("Nest level at the end:",nest_level);
+ DEBUG_STRING("debug_handle","Success exit.");
+ return EOK;
+}
+
+/* Print collection for debugging purposes */
+int debug_collection(struct collection_item *handle,int flag)
+{
+ int error = EOK;
+ int nest_level=0;
+
+ DEBUG_STRING("debug_collection","Entry.");
+
+ printf("DEBUG COLLECTION %s\n",handle->property);
+
+ flag |= ELAPI_TRAVERSE_END;
+
+ printf("Traverse flags %d\n",flag);
+
+ /* Traverse collection */
+ error = traverse_collection(handle,flag,debug_handle,(void *)(&nest_level));
+ if(error) printf("Error debuging collection %d\n",error);
+
+ DEBUG_STRING("debug_collection","Exit.");
+ return error;
+}
+
+/* Print the collection using default serialization */
+int print_collection(struct collection_item *handle)
+{
+ struct serial_data buf_data;
+ int error = EOK;
+
+ printf("COLLECTION:\n");
+
+ buf_data.buffer=NULL;
+ buf_data.length=0;
+ buf_data.size=0;
+ buf_data.nest_level=0;
+
+ /* Traverse collection */
+ error = traverse_collection(handle,ELAPI_TRAVERSE_DEFAULT | ELAPI_TRAVERSE_END ,serialize,(void *)(&buf_data));
+ if(error) printf("Error traversing collection %d\n",error);
+ else printf("%s\n",buf_data.buffer);
+
+ free(buf_data.buffer);
+
+ return error;
+}
+
+
+/* Find and print one item using default serialization */
+int print_item(struct collection_item *handle, char *name)
+{
+ struct serial_data buf_data;
+ int error = EOK;
+
+ printf("FIND ITEM:\n");
+
+ buf_data.buffer=NULL;
+ buf_data.length=0;
+ buf_data.size=0;
+ buf_data.nest_level=0;
+
+ error = get_item_and_do(handle, name, ELAPI_TYPE_ANY,ELAPI_TRAVERSE_DEFAULT, serialize,&buf_data);
+ if(error) printf("Error searching collection %d\n",error);
+ else {
+ if(buf_data.buffer != NULL) {
+ if(buf_data.length> 0) buf_data.length--;
+ *(buf_data.buffer+buf_data.length)= '\0',
+ printf("%s\n",buf_data.buffer);
+ free(buf_data.buffer);
+ }
+ else printf("Name %s is not found in the collection %s.\n",name,handle->property);
+ }
+ return error;
+}
+
+
diff --git a/tools/elapi_tools.h b/tools/elapi_tools.h
new file mode 100644
index 0000000..fd9bf63
--- /dev/null
+++ b/tools/elapi_tools.h
@@ -0,0 +1,27 @@
+/* Copyright */
+
+#ifndef ELAPI_TOOLS_H
+#define ELAPI_TOOLS_H
+
+#include "elapi_collection.h"
+
+/* Debug handle */
+int debug_handle(char *property,
+ int property_len,
+ int type,
+ void *data,
+ int length,
+ void *custom_data,
+ int *dummy);
+
+/* Print collection for debugging purposes */
+int debug_collection(struct collection_item *handle,int flag);
+
+/* Print the collection using default serialization */
+int print_collection(struct collection_item *handle);
+
+
+/* Find and print one item using default serialization */
+int print_item(struct collection_item *handle, char *name);
+
+#endif