X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=database.c;h=c17adae62b7da64a6d4e19d83040b05729b83ae2;hb=465ab361f66ef10dd6540da7efa4432928333ec3;hp=70e5a1ccfb00942e076ca2797fc8e0eb1be18072;hpb=c38bc4bc5254bd5925d8567e7ff1554a7844b8c7;p=pkg%2Fabook.git diff --git a/database.c b/database.c index 70e5a1c..c17adae 100644 --- a/database.c +++ b/database.c @@ -351,21 +351,53 @@ surnamecmp(const void *i1, const void *i2) return ret; } +static int sort_field = -1; + static int namecmp(const void *i1, const void *i2) { list_item a, b; + assert(sort_field >= 0 && sort_field <= LAST_FIELD); + itemcpy(a, i1); itemcpy(b, i2); - return safe_strcoll( a[NAME], b[NAME] ); + return safe_strcoll( a[sort_field], b[sort_field] ); +} + +static int +name2field(char *name) +{ + int i, ret = -1; + + for(i = 0; i < ITEM_FIELDS; i++) { + if(!strcasecmp(name, abook_fields[i].key)) { + ret = i; + break; + } + } + + return ret; } void -sort_database() +sort_by_field(int field) { select_none(); + + assert(field <= LAST_FIELD); + + if(field < 0) { + field = name2field(opt_get_str(STR_SORT_FIELD)); + if(field < 0) { + statusline_msg("Not valid field value defined " + "in configuration"); + return; + } + } + + sort_field = field; qsort((void *)database, items, sizeof(list_item), namecmp);