/*  DISTINCT.H     Copyright (C)   DUL-Soft      13/04/93

    Удаление дублирующих записей в базе данных.
*/


/*  Текущая статистика.  */

typedef struct
{
   char * base_name ;
   int    pack ;
   long   reccount ;
   long   count ;
   long   cur_record ;
   long   write_record ;
   long   not_unique ;
}  DISTINCT ;

/* Где :
   base_name    - имя обрабатываемой базы данных.
   pack         - флаг, указывающий паковать ли базу в про-
		  цессе обработки.
   reccount     - общее число записей в базе.
   count        - число обработаных записей.
   cur_record   - номер текущей обрабатываемой записи.
   write_record - текущее число  записей  в  результирующей
		  базе. Этот параметр полезен,  когда задан
		  режим пакования.
   not_unique   - число дублирующих записей.
*/


/*  Функции выдачи статистики.  */

typedef struct
{
   void  ( * first   ) ( DISTINCT * ) ;
   void  ( * current ) ( DISTINCT * ) ;
   void  ( * last    ) ( DISTINCT * ) ;
}  STATISTICS ;

/* Где :
   first   - выдать  первую  статистику.  Можно использовать
	     для инициализации.
   current - выдать текущую статистику.
   last    - выдать последнюю статистику. Можно использовать
	     как деструктор.
*/


/*  Функции, вызываемые внутри функции distinct_base.  */

typedef struct
{
   int        ( * stop ) ( DISTINCT * ) ;
   STATISTICS statistics ;
}  DISTINCT_FUNCTIONS ;

/* Где :
   stop       - приостановить  процесс  исполнения  функции
		distinct_base.
      Коды возврата :
	  < 0 - завершить исполнение.
	 >= 0 - продолжить исполнение с точки останова.
   statistics - выдавать  статистику по процессу исполнения
		функции  distinct_base.
*/


#define PACK      1
#define NO_PACK   0


/*  Функция удаления дублирующих записей в базе данных.  */

int distinct_base ( char * base_name, int pack,
		    DISTINCT_FUNCTIONS * df     ) ;

/* Параметры :
   base_name - имя обрабатываемой базы данных.
   pack      - флаг, указывающий паковать ли базу в процес-
	       се обработки.
   df        - указатель на функции,  вызываемые при испол-
	       нении функции  distinct_base.

   Коды возврата :
	   1 - обработка прошла успешно.
	  -1 - ошибка при работе с базой данных.
	  -2 - недостаточно памяти для исполнения.
	  -3 - выполнение функции прервано по функии stop.

   Предупреждение !  Функция использует до 1650 байт стека.
*/


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