|
|
@ -212,6 +212,36 @@ fileorder(const void *a, const void *b)
|
|
|
|
return mystrverscmp(ia->file, ib->file);
|
|
|
|
return mystrverscmp(ia->file, ib->file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
|
|
|
unreadorder(const void *a, const void *b)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
struct mail *ia = (struct mail *)a;
|
|
|
|
|
|
|
|
struct mail *ib = (struct mail *)b;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *fa = strstr(ia->file, ":2,");
|
|
|
|
|
|
|
|
char *fb = strstr(ib->file, ":2,");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int unreada = fa ? !strchr(fa, 'S') : 0;
|
|
|
|
|
|
|
|
int unreadb = fb ? !strchr(fb, 'S') : 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return unreada - unreadb;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
|
|
|
flaggedorder(const void *a, const void *b)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
struct mail *ia = (struct mail *)a;
|
|
|
|
|
|
|
|
struct mail *ib = (struct mail *)b;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *fa = strstr(ia->file, ":2,");
|
|
|
|
|
|
|
|
char *fb = strstr(ib->file, ":2,");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int unreada = fa ? !!strchr(fa, 'F') : 0;
|
|
|
|
|
|
|
|
int unreadb = fb ? !!strchr(fb, 'F') : 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return unreadb - unreada;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
int
|
|
|
|
idxorder(const void *a, const void *b)
|
|
|
|
idxorder(const void *a, const void *b)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -269,7 +299,7 @@ main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int c, i;
|
|
|
|
int c, i;
|
|
|
|
|
|
|
|
|
|
|
|
while ((c = getopt(argc, argv, "fdsFMSr")) != -1)
|
|
|
|
while ((c = getopt(argc, argv, "fdsFMSUIr")) != -1)
|
|
|
|
switch(c) {
|
|
|
|
switch(c) {
|
|
|
|
case 'f': addorder(fromorder); break;
|
|
|
|
case 'f': addorder(fromorder); break;
|
|
|
|
case 'd': addorder(dateorder); break;
|
|
|
|
case 'd': addorder(dateorder); break;
|
|
|
@ -277,10 +307,12 @@ main(int argc, char *argv[])
|
|
|
|
case 'F': addorder(fileorder); break;
|
|
|
|
case 'F': addorder(fileorder); break;
|
|
|
|
case 'M': addorder(mtimeorder); break;
|
|
|
|
case 'M': addorder(mtimeorder); break;
|
|
|
|
case 'S': addorder(sizeorder); break;
|
|
|
|
case 'S': addorder(sizeorder); break;
|
|
|
|
|
|
|
|
case 'U': addorder(unreadorder); break;
|
|
|
|
|
|
|
|
case 'I': addorder(flaggedorder); break;
|
|
|
|
case 'r': rflag = !rflag; break;
|
|
|
|
case 'r': rflag = !rflag; break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
fprintf(stderr,
|
|
|
|
fprintf(stderr,
|
|
|
|
"Usage: msort [-r] [-fdsFMS] [msgs...]\n");
|
|
|
|
"Usage: msort [-r] [-fdsFMSUI] [msgs...]\n");
|
|
|
|
exit(1);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|