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

void print_info(struct find_t *find);
char *time_conv(unsigned time, char *char_buf);
char *date_conv(unsigned date, char *char_buf);

#pragma argsused
int 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("Задайте образец для поиска файлов !");
    return(-1);
  }

  // Выводим информацию об остальных найденных файлах
  while(!_dos_findnext(&find)) print_info( &find );
  return(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, 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;
}
