
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>

typedef struct filet_type
{
    int num;
    char **names;
    char *dir;

} FILET;

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

int readnsort(FILET *fs,char *dir)
{
    DIR *opened;
    struct dirent *file;

    fs->num=0;
    fs->dir=strdup(dir);
    fs->names=NULL;

    opened=opendir(dir);
    if(opened==NULL)
        return(-1);

    do
    {
        file=readdir(opened);
        if(file!=NULL && file->d_type==DT_REG) /* Skip special files */
        {
            fs->names=realloc(fs->names,sizeof(char *)*(fs->num+1));
            if(fs->names==NULL)
                return(-1);
            fs->names[fs->num]=strdup(file->d_name);
            fs->num++;
        }
    }
    while(file!=NULL);

    qsort((void *)fs->names,fs->num,sizeof(char *),cmpfunc);

    closedir(opened);
    return(0);
}

int main(int argc,char *argv[])
{
    FILET fs;
    int n;

    if(argc!=2)
        return(1);

    if(readnsort(&fs,argv[1])==-1)
        return(1);

    printf("files in %s:\n",fs.dir);
    for(n=0;n<fs.num;n++)
        printf("%s\n",fs.names[n]);

    return(0);
}
