+int CompareUserListNameRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+ return strcmp(ChrPtr(u2->UserName), ChrPtr(u1->UserName));
+}
+
+int GroupchangeUserListName(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+ return ChrPtr(u2->UserName)[0] != ChrPtr(u1->UserName)[0];
+}
+
+/*
+ * Sort by access level
+ */
+int CompareAccessLevel(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u1->AccessLevel > u2->AccessLevel);
+}
+
+int CompareAccessLevelRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->AccessLevel > u1->AccessLevel);
+}
+
+int GroupchangeAccessLevel(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return u2->AccessLevel != u1->AccessLevel;
+}
+
+/*
+ * Sort by UID
+ */
+int CompareUID(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u1->UID > u2->UID);
+}
+
+int CompareUIDRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->UID > u1->UID);
+}
+
+int GroupchangeUID(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u2->UID / 10) != (u1->UID / 10);
+}
+
+/*
+ * Sort By Date /// TODO!
+ */
+int CompareLastLogon(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u1->LastLogonT > u2->LastLogonT);
+}
+
+int CompareLastLogonRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->LastLogonT > u1->LastLogonT);
+}
+
+int GroupchangeLastLogon(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u2->LastLogonT != u1->LastLogonT);
+}
+
+/*
+ * Sort By Number of Logons
+ */
+int ComparenLogons(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u1->nLogons > u2->nLogons);
+}
+
+int ComparenLogonsRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->nLogons > u1->nLogons);
+}
+
+int GroupchangenLogons(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u2->nLogons / 100) != (u1->nLogons / 100);
+}
+
+/*
+ * Sort By Number of Posts
+ */
+int ComparenPosts(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u1->nPosts > u2->nPosts);
+}
+
+int ComparenPostsRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->nPosts > u1->nPosts);
+}
+
+int GroupchangenPosts(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u2->nPosts / 100) != (u1->nPosts / 100);
+}
+
+
+HashList *iterate_load_userlist(StrBuf *Target, WCTemplputParams *TP)
+{
+ int Done = 0;
+ CompareFunc SortIt;
+ HashList *Hash = NULL;
+ StrBuf *Buf;
+ UserListEntry* ul;
+ int len;
+ int UID;
+ void *vData;
+ WCTemplputParams SubTP;
+
+ memset(&SubTP, 0, sizeof(WCTemplputParams));