Initial revision
diff --git a/include/lists.h b/include/lists.h
new file mode 100644
index 0000000..3249fca
--- /dev/null
+++ b/include/lists.h
@@ -0,0 +1,77 @@
+#ifndef _LISTS_H_
+#define _LISTS_H_
+
+#define LIST_START    	-1      /* Handy Constants that substitute for item positions */
+#define LIST_END      	0       /* END_OF_LIST means one past current length of list when */
+                                /* inserting. Otherwise it refers the last item in the list. */
+
+typedef struct
+    {
+    void            *ptr;
+    unsigned int    size;
+    } HandleRecord;
+
+typedef void **Handle;
+
+typedef int (*CompareFunction)(void *data1, void *data2) ;
+
+typedef struct ListStructTag
+    {
+    int signature;              /* debugging aid */
+    int percentIncrease;        /* %of current size to increase by when list is out of space */
+    int minNumItemsIncrease;    /* fixed number of items to increase by when list is out of space */
+    int listSize;               /* number of items than can fit in the currently allocated memory */
+    int itemSize;               /* the size of each item in the list (same for every item) */
+    int numItems;               /* number of items currently in the list */
+    unsigned char itemList[1];  /* resizable array of list elements */
+    } ListStruct;
+
+typedef struct ListStructTag **list_t;        /* The list abstract data type */
+typedef int ( * ListApplicationFunc)(int index, void *ptrToItem, void *callbackData);
+
+/* Basic List Operations */
+list_t	ListCreate(int elementSize);
+int     ListNumItems(list_t list);
+int     ListInsertItem(list_t list, void *ptrToItem, int itemPosition);
+int     ListInsertItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert);
+void    ListDispose(list_t list);
+void    *ListGetPtrToItem(list_t list, int itemPosition);
+void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
+void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
+
+#if 0
+void    ListDisposePtrList(list_t list);
+void    ListGetItem(list_t list, void *itemDestination, int itemPosition);
+void    ListReplaceItem(list_t list, void *ptrToItem, int itemPosition);
+void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
+void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);
+void    ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace);
+void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
+list_t  ListCopy(list_t originalList);
+int     ListAppend(list_t list1, list_t list2);
+void    ListClear(list_t list);
+int     ListEqual(list_t list1, list_t list2);
+int     ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction);
+void    *ListGetDataPtr(list_t list);
+int     ListApplyToEach(list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData);
+
+/* List Searching and Sorting */
+int     ListFindItem(list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction);
+void    ListRemoveDuplicates(list_t list, CompareFunction compareFunction);
+int     ListBinSearch(list_t list, void *itemPtr, CompareFunction compareFunction);
+void    ListQuickSort(list_t list, CompareFunction compareFunction);
+void    ListHeapSort(list_t list, CompareFunction compareFunction);
+void    ListInsertionSort(list_t list, CompareFunction compareFunction);
+int     ListIsSorted(list_t list, CompareFunction compareFunction);
+
+/*  Advanced List Functions */
+void	ListSetAllocationPolicy(list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc);
+void    ListCompact(list_t list);
+int     ListPreAllocate(list_t list, int numItems);
+int     ListGetItemSize(list_t list);
+int     GetIntListFromParmInfo(va_list parmInfo, int numIntegers, list_t *integerList);
+int     ListInsertAfterItem(list_t list, void *ptrToItem, void *ptrToItemToInsertAfter, CompareFunction compareFunction);
+int     ListInsertBeforeItem(list_t list, void *ptrToItem, void *ptrToItemToInsertBefore, CompareFunction compareFunction);
+#endif 0
+
+#endif	/* _LISTS_H_ */