From ae8d47bd45f894d833e30c8d5f4348b823e2fad4 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 31 May 2020 18:34:20 -0400 Subject: [PATCH] Fixed multi-level sort (buildsorttable() can now update existing table.) --- sortdir.c | 28 +++++++++++++++++++++------- sortdir.po | Bin 143360 -> 143360 bytes 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sortdir.c b/sortdir.c index 6477663..3e51554 100644 --- a/sortdir.c +++ b/sortdir.c @@ -27,6 +27,7 @@ * v0.59 Moved creation of filelist[] into buildsorttable(). More bugfix. * v0.60 Modified fileent to be a union. Build it for each subsort. Saves RAM. * v0.61 Squeezed fileent to be a few bytes smaller. Fixed folder sort. + * v0.62 Modified buildsorttable() to update existing filelist[]. */ //#pragma debug 9 @@ -249,7 +250,7 @@ int subdirblocks(uchar device, uint keyblk, struct pd_dirent *ent, void enqueuesubdir(uint blocknum, uint subdiridx); int readdir(uint device, uint blocknum); #ifdef SORT -void buildsorttable(char s); +void buildsorttable(char s, uchar callidx); int cmp_name_asc(const void *a, const void *b); int cmp_name_desc(const void *a, const void *b); int cmp_name_asc_ci(const void *a, const void *b); @@ -1361,8 +1362,11 @@ int readdir(uint device, uint blocknum) { /* * Build filelist[], the table used by the sorting algorithm. + * s - character representing the sorting mode + * callidx - if 0, the routine populates the table, otherwise it updates + * and existing table */ -void buildsorttable(char s) { +void buildsorttable(char s, uchar callidx) { static char namebuf[NMLEN+1]; uint off; uchar entry, i; @@ -1385,8 +1389,17 @@ void buildsorttable(char s) { if (ent->typ_len != 0) { - filelist[idx].blockidx = blkidx; - filelist[idx].entrynum = entry; + if (callidx == 0) { + /* Build filelist[] on first call for each dir */ + filelist[idx].blockidx = blkidx; + filelist[idx].entrynum = entry; + } else { + /* On subsequent calls Find existing entry in list and update it */ + for (idx = 0; idx < numfiles; ++idx) + if ((filelist[idx].blockidx == blkidx) && + (filelist[idx].entrynum == entry)) + break; + } switch (tolower(s)) { case 'n': case 'i': @@ -1421,7 +1434,8 @@ void buildsorttable(char s) { ++blkidx; firstent = 1; } - numfiles = idx; + if (callidx == 0) + numfiles = idx; } /* @@ -1823,7 +1837,7 @@ void interactive(void) { doverbose = 1; - puts("S O R T D I R v0.61 alpha Use ^ to return to previous question"); + puts("S O R T D I R v0.62 alpha Use ^ to return to previous question"); q1: fputs("\nEnter path (e.g.: /H1) of starting directory> ", stdout); @@ -1953,7 +1967,7 @@ void processdir(uint device, uint blocknum) { for (i = 0; i < strlen(sortopts); ++i) { if (doverbose) printf("[%c] ", sortopts[i]); - buildsorttable(sortopts[i]); + buildsorttable(sortopts[i], i); sortlist(sortopts[i]); sortblocks(device); } diff --git a/sortdir.po b/sortdir.po index 58df2df5be0a517a4af39b28d28cc6a4e167e44d..1146da4b7d46262959552f584029dd7f768965b0 100644 GIT binary patch delta 22948 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 E04U)!3IG5A delta 22796 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 Q1Ru-_gZ)>S*-v+FrPHbx5QR08@ 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