+ UserListEntry *ul;
+
+ if (StrLength(SerializedUser) < 8)
+ return NULL;
+
+ ul = (UserListEntry*) malloc(sizeof(UserListEntry));
+ ul->UserName = NewStrBuf();
+ ul->Passvoid = NewStrBuf();
+
+ StrBufExtract_token(ul->UserName, SerializedUser, 0, '|');
+ StrBufExtract_token(ul->Passvoid, SerializedUser, 1, '|');
+ ul->Flags = (unsigned int)StrBufExtract_long(SerializedUser, 2, '|');
+ ul->nLogons = StrBufExtract_int(SerializedUser, 3, '|');
+ ul->nPosts = StrBufExtract_int(SerializedUser, 4, '|');
+ ul->AccessLevel = StrBufExtract_int(SerializedUser, 5, '|');
+ ul->UID = StrBufExtract_int(SerializedUser, 6, '|');
+ ul->LastLogonT = StrBufExtract_long(SerializedUser, 7, '|');
+ ul->DaysTillPurge = StrBufExtract_int(SerializedUser, 8, '|');
+ return ul;
+}
+
+void DeleteUserListEntry(void *vUserList)
+{
+ UserListEntry *ul = (UserListEntry*) vUserList;
+ FreeStrBuf(&ul->UserName);
+ FreeStrBuf(&ul->Passvoid);
+ free(ul);
+}
+
+UserListEntry* NewUserListEntry(StrBuf *SerializedUserList)
+{
+ UserListEntry *ul;
+
+ if (StrLength(SerializedUserList) < 8)
+ return NULL;
+
+ ul = (UserListEntry*) malloc(sizeof(UserListEntry));
+ ul->UserName = NewStrBuf();
+ ul->Passvoid = NewStrBuf();
+
+ StrBufExtract_token(ul->UserName, SerializedUserList, 0, '|');
+ ul->AccessLevel = StrBufExtract_int(SerializedUserList, 1, '|');
+ ul->UID = StrBufExtract_int(SerializedUserList, 2, '|');
+ ul->LastLogonT = StrBufExtract_long(SerializedUserList, 3, '|');
+ ul->nLogons = StrBufExtract_int(SerializedUserList, 4, '|');
+ ul->nPosts = StrBufExtract_int(SerializedUserList, 5, '|');
+ StrBufExtract_token(ul->Passvoid, SerializedUserList, 6, '|');
+ ul->Flags = 0;
+ ul->DaysTillPurge = -1;
+ return ul;
+}
+
+/*
+ * Sort by Username
+ */
+int CompareUserListName(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return strcmp(ChrPtr(u1->UserName), ChrPtr(u2->UserName));
+}
+int CompareUserListNameRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+ return strcmp(ChrPtr(u2->UserName), ChrPtr(u1->UserName));
+}
+
+/*
+ * Sort by AccessLevel
+ */
+int CompareAccessLevel(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u1->AccessLevel > u2->AccessLevel);
+}
+int CompareAccessLevelRev(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*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u1->UID > u2->UID);
+}
+int CompareUIDRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u2->UID > u1->UID);
+}
+
+/*
+ * Sort By Date /// TODO!
+ */
+int CompareLastLogon(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;
+
+ return (u1->LastLogonT > u2->LastLogonT);
+}
+int CompareLastLogonRev(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*) vUser1;
+ UserListEntry *u2 = (UserListEntry*) vUser2;