static char rcsver[] = "$Id: dir.c,v 2.1 1999/02/10 04:00:50 gorelick Exp $";
 
/**
 ** $Source: /tes/src/vanilla/RCS/dir.c,v $
 **
 ** $Log: dir.c,v $
 ** Revision 2.1  1999/02/10 04:00:50  gorelick
 ** *** empty log message ***
 **
 ** Revision 2.0  1998/12/22 22:47:04  gorelick
 ** release version
 **
 ** Revision 2.0  1998/12/18 01:26:03  gorelick
 ** release version
 **
 ** Revision 1.3  1998/12/18 01:04:48  gorelick
 ** *** empty log message ***
 **
 ** Revision 1.2  1998/11/12 22:58:55  gorelick
 ** first release version
 **
 **/

#include <dirent.h>
#include <string.h>
#include "tools.h"

#define qsortptr int (*)(const void *, const void *)

int mystrcmp(const char **a, const char **b);

/**
 ** Given a directory and table prefix, load the name of all the files
 **/

LIST *
LoadFilenames(char *path, char *prefix)
{
    DIR *d;
    LIST *list;
    struct dirent *d_ent;
    char buf[256];
	int i;

    if ((d = opendir(path)) == NULL)
        return (NULL);

    list = new_list();
    while ((d_ent = readdir(d)) != NULL) {
        if (IsDataFile(d_ent->d_name, prefix)) {
            /**
            ** Store the filename
            **/
            sprintf(buf, "%s/%s", path, d_ent->d_name);
            list_add(list, strdup(buf));
        }
    }
    closedir(d);

    SortFiles(list);
    return(list);
}

IsDataFile(char *test, char *type)
{
    char *p;
    if (!strncasecmp(test, type, strlen(type))) {
        p = strrchr(test, '.');
        if (p && (!strcasecmp(p, ".DAT") || !strcasecmp(p, ".TAB")))
            return (1);
    }
    return (0);
}

int
mystrcmp(const char **a, const char **b)
{
	return(strcmp(*a, *b));
}

SortFiles(LIST *list)
{
	int i;

    if (list->number > 1)
        qsort(list->ptr, list->number, sizeof(char *), (qsortptr)mystrcmp);
}