diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c index 0bc873a3d2d175cb34fb8c2bb0be4f90bfd5613a..cd2b9040edc199838b62b9684a71f7536c534e62 100644 --- a/src/syncterm/bbslist.c +++ b/src/syncterm/bbslist.c @@ -21,11 +21,14 @@ struct sort_order_info { char *name; - int reverse; + int flags; size_t offset; int length; }; +#define SORT_ORDER_REVERSED (1<<0) +#define SORT_ORDER_STRING (1<<1) + struct sort_order_info sort_order[] = { { NULL @@ -35,25 +38,25 @@ struct sort_order_info sort_order[] = { } ,{ "BBS Name" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, name) ,LIST_NAME_MAX+1 } ,{ "Date Added" - ,1 + ,SORT_ORDER_REVERSED ,offsetof(struct bbslist, added) ,sizeof(time_t) } ,{ "Date Last Connected" - ,1 + ,SORT_ORDER_REVERSED ,offsetof(struct bbslist, connected) ,sizeof(time_t) } ,{ "Total Calls" - ,1 + ,SORT_ORDER_REVERSED ,offsetof(struct bbslist, calls) ,sizeof(unsigned int) } @@ -65,7 +68,7 @@ struct sort_order_info sort_order[] = { } ,{ "Address" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, addr) ,LIST_NAME_MAX+1 } @@ -77,19 +80,19 @@ struct sort_order_info sort_order[] = { } ,{ "Username" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, user) ,MAX_USER_LEN+1 } ,{ "Password" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, password) ,MAX_PASSWD_LEN+1 } ,{ "System Password" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, syspass) ,MAX_SYSPASS_LEN+1 } @@ -119,19 +122,19 @@ struct sort_order_info sort_order[] = { } ,{ "Dowload Directory" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, dldir) ,MAX_PATH+1 } ,{ "Upload Directory" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, uldir) ,MAX_PATH+1 } ,{ "Log File" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, logfile) ,MAX_PATH+1 } @@ -155,7 +158,7 @@ struct sort_order_info sort_order[] = { } ,{ "Font" - ,0 + ,SORT_ORDER_STRING ,offsetof(struct bbslist, font) ,80 } @@ -321,9 +324,12 @@ int listcmp(const void *aptr, const void *bptr) for(i=0; i<sizeof(sort_order)/sizeof(struct sort_order_info); i++) { item=abs(sortorder[i]); - reverse=(sortorder[i]<0?1:0)^(sort_order[item].reverse?1:0); + reverse=(sortorder[i]<0?1:0)^((sort_order[item].flags&SORT_ORDER_REVERSED)?1:0); if(sort_order[item].name) { - ret=memcmp(a+sort_order[item].offset,b+sort_order[item].offset,sort_order[item].length); + if(sort_order[item].flags & SORT_ORDER_STRING) + ret=stricmp(a+sort_order[item].offset,b+sort_order[item].offset); + else + ret=memcmp(a+sort_order[item].offset,b+sort_order[item].offset,sort_order[item].length); if(ret) { if(reverse) ret=0-ret; @@ -432,7 +438,7 @@ void edit_sorting(struct bbslist **list, int *listcount) for(i=0; i<sizeof(sort_order)/sizeof(struct sort_order_info); i++) { if(sort_order[abs(sortorder[i])].name) { SAFECOPY(opt[i], sort_order[abs(sortorder[i])].name); - if((sortorder[i]<0?1:0) ^ (sort_order[abs(sortorder[i])].reverse?1:0)) + if((sortorder[i]<0?1:0) ^ ((sort_order[abs(sortorder[i])].flags&SORT_ORDER_REVERSED)?1:0)) strcat(opt[i]," (reversed)"); } else