Implement Tournament Options dialog WinBoard
[xboard.git] / filebrowser / dir.c
index 123d329..918d555 100644 (file)
@@ -32,8 +32,6 @@
 #include <ctype.h>
 #endif /* def SEL_FILE_IGNORE_CASE */
 
-#include "selfile.h"
-
 #ifdef HAVE_DIRENT_H
 #include <dirent.h>
 #else
@@ -43,6 +41,8 @@
 
 #include <sys/stat.h>
 
+#include "selfile.h"
+
 #ifdef SEL_FILE_IGNORE_CASE
 int
 SFcompareEntries(p, q)
@@ -128,6 +128,7 @@ SFgetDir(dir)
 #endif /* ndef S_IFLNK */
 
        while (dp = readdir(dirp)) {
+               struct stat statBuf;
                if (i >= alloc) {
                        alloc = 2 * (alloc + 1);
                        result = (SFEntry *) XtRealloc((char *) result,
@@ -143,8 +144,16 @@ SFgetDir(dir)
                }
                result[i].shown = result[i].real;
                if(SFpathFlag) { // [HGM] only show directories
-                       struct stat statBuf;
                        if (stat(str, &statBuf) || SFstatChar(&statBuf) != '/') continue;
+               } else if(SFfilterBuffer[0]) { // [HGM] filter on extension
+                   char *p = SFfilterBuffer, match, *q;
+                   match = !(stat(str, &statBuf) || SFstatChar(&statBuf) != '/');
+                   do {
+                       if(q = strchr(p, ' ')) *q = 0;
+                       if(strstr(str, p)) match++;
+                       if(q) *q = ' ';
+                   } while(q && (p = q+1));
+                   if(!match) continue;
                }
                i++;
        }