#include <stdlib.h>
#include <stdio.h>
#include <dos.h>

void main(int argc, char *argv[]) ;
void print_info(struct find_t *find);
char *time_conv(unsigned time, char *char_buf);
char *date_conv(unsigned date, char *char_buf);

void main(int argc, char *argv[]) {

	 struct find_t find;

// Находим первый файл, удовлетворяющий критериям поиска.
// В качестве критерия используем образец, полученный
// из командной строки. Для поиска используем файлы с любыми
// атрибутами.

	 if(!_dos_findfirst(argv[1], 0xffff, &find)) {

		  printf("\n"
			 "\nИмя файла    Аттр. Дата        Время     Размер"
			 "\n------------ ----- ----------  --------  ------");

// Выводим информацию о первом найленном файле на экран

		  print_info(&find);
	 }
	 else {
		  printf("Задайте образец для поиска файлов !");
		  exit(-1);
	 }

// Выводим информацию об остальных найденных файлах

	 while(!_dos_findnext(&find)) print_info( &find );

	 exit(0);
}

// Функция для вывода информации о найденных файлах

void print_info(struct find_t *pfind) {

	 char timebuf[10], datebuf[12];

// Преобразуем формат даты и времени последнего изменения файла

	 date_conv(pfind->wr_date, datebuf);
	 time_conv(pfind->wr_time, timebuf);

// Выводим содержимое дескриптора файла

		printf("\n%-12s",pfind->name);
		printf(" %02X    %8s  %8s %8ld ",
			pfind->attrib,
			datebuf,
			timebuf,
			pfind->size);
}

// Функция преобразования формата времени

char *time_conv(unsigned t, char *buf) {

	 int h, m;

	 h = (t >> 11) & 0x1f, m = (t >> 5) & 0x3f;
	 sprintf(buf, "%2.2d:%02.2d:%02.2d", h % 12, m, (t & 0x1f) * 2);
	 return buf;
}

// Функция преобразования формата даты

char *date_conv(unsigned d, char *buf) {

	 sprintf(buf, "%2.2d.%02.2d.%04.2d",
				 d & 0x1f,(d >> 5) & 0x0f, (d >> 9) + 1980);
	 return buf;
}
