--- ./filetree.c.orig 2006-01-05 11:52:45.000000000 -0500 +++ ./filetree.c 2006-01-05 11:59:43.000000000 -0500 @@ -136,6 +136,8 @@ { struct entry* e1 = (struct entry*)p1; struct entry* e2 = (struct entry*)p2; + char *name1 = e1->name; + char *name2 = e2->name; int criteria; if (e1->attr & ATTR_DIRECTORY && e2->attr & ATTR_DIRECTORY) @@ -174,16 +176,48 @@ /* else fall through to alphabetical sorting */ } case 0: /* sort alphabetically asc */ + /* If name starts with 'the', advance pointer beyond it */ + if (strncasecmp(name1, "the", 3) == 0) + { + if (*(name1 + 3) == ' ') /* Kill trailing space */ + name1 = name1 + 4; + else + name1 = name1 + 3; + } + if (strncasecmp(name2, "the", 3) == 0) + { + if (*(name2 + 3) == ' ') /* Kill trailing space */ + name2 = name2 + 4; + else + name2 = name2 + 3; + } + if (global_settings.sort_case) - return strncmp(e1->name, e2->name, MAX_PATH); + return strncmp(name1, name2, MAX_PATH); else - return strncasecmp(e1->name, e2->name, MAX_PATH); + return strncasecmp(name1, name2, MAX_PATH); case 4: /* sort alphabetically desc */ + /* If name starts with 'the', advance pointer beyond it */ + if (strncasecmp(name1, "the", 3) == 0) + { + if (*(name1 + 3) == ' ') /* Kill trailing space */ + name1 = name1 + 4; + else + name1 = name1 + 3; + } + if (strncasecmp(name2, "the", 3) == 0) + { + if (*(name2 + 3) == ' ') /* Kill trailing space */ + name2 = name2 + 4; + else + name2 = name2 + 3; + } + if (global_settings.sort_case) - return strncmp(e2->name, e1->name, MAX_PATH); + return strncmp(name2, name1, MAX_PATH); else - return strncasecmp(e2->name, e1->name, MAX_PATH); + return strncasecmp(name2, name1, MAX_PATH); case 1: /* sort date */ return e1->time_write - e2->time_write;