/*   DIRECTORY.H    Copyright (C)   DUL-Soft     17/04/93

     Обработка файлов каталога.
*/


#include <dir.h>


#define  MAX_FILE_NAME_LEN   130


/*  Файл каталога для обработки.  */

typedef struct
{
   char   name [ MAX_FILE_NAME_LEN ] ;
   struct ffblk file ;
}  DIRECTORY_FILE ;

/* Где :
   name - полное имя файла.
   file - атрибуты файла.
*/


/*  Режим обработки.  */

typedef struct
{
   int    root ;
   int    attrib ;
   char * mask ;
   int    ( * function ) ( DIRECTORY_FILE * ) ;
}  DIRECTORY_MODE ;

/* Где :
   root     - если  этот  флаг установлен,  то каталог будет
	      обрабатываться со всеми своими подкаталогами.

   attrib   - атрибут файла.
   mask     - маска файла.
      attrib, mask задают ограничения на список обрабатыва-
      емых файлов.

   function - обработать один файл каталога.
      Во время обработки содержимое массива  name  можно ме-
      нять, как вам будет угодно.
      Клды возврата :
	< 0 - прервать обработку каталога.
       >= 0 - обработка файла прошла успешно.
*/


#define CURRENT_DIRECTORY   ( char * )  0
#define DEFAULT_MASK        "*.*"


/*  Интерфейс класса.  */

int  d1_process ( DIRECTORY_MODE * d, char * name ) ;
void d1_name ( char * dir, char * file_name ) ;

/*          Назначение функций.

   d1_process - обработать каталог.
      Параметры :
	 d    - режим обработки каталога.     Если маска не
		задана, то по умолчанию  d -> mask = "*.*".
	 name - имя обрабатываемого каталога.   Если name =
		NULL, то будет обрабатываться текуший ката-
		лог.
      Коды возврата :
	   -3 - неверные входные параметры.
	   -2 - недостаточно памяти для обработки.
	    0 - обработка прошла успешно.
		Если по функции  function обработка будет
		прервана, то код возврата = коду возврата
		function.

      Замечание 1 Попытки обработать каталог,   имя которого
		  превышает 115 символов, будут пресекаться.
		  Никакой ошибки при этом выдаваться  не бу-
		  дет.
      Замечание 2 Функция является нереентерабельной.

   d1_name - выделить из полного имени файла имя каталога.
      Параметры :
      dir       - имя каталога.
      file_name - имя файла.

      Замечание ! Адреса операндов могут совпадать.
*/


/*  Реализация функций класса находится в файле DIR_.C  */
