#include <stdio.h>
#include <string.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>

int main( int argc, char *argv[] )
{
	DIR *din;
	char dir_name[100];
	struct dirent *entry;
	struct stat buf;
	char file_name[100];
	char full_path[100];

	strcpy( dir_name, "." );

	if( argc == 2 )
		strcpy( dir_name, argv[1] );
	else if( argc != 1 )
	{
		printf( "Error: Too many arguments supplied\n" );
		return 1;
	}

	if( !( din = opendir( dir_name ) ) )
	{
		printf( "Error: %s is NOT a directory\n", dir_name );
		return 1;
	}	

	do
		if( entry = readdir( din ) )
		{
			strcpy( file_name, entry->d_name );
			strcpy( full_path, dir_name );
			strcat( full_path, "/" );
			strcat( full_path, file_name );
			stat( full_path, &buf );
			if( !( file_name[0] == '.' || S_ISDIR( buf.st_mode ) ) && !( access( full_path, X_OK ) ) )
				printf( "%s\t\t%s", file_name, ctime( &buf.st_mtime ) );
		}
	while( entry );
        closedir( din );
	return 0;
}
