//---------------------------------------------------------------------------
#ifndef commonH
#define commonH
//---------------------------------------------------------------------------
#define MAX_PATH            0xFF   
#define MAX_NAME            0xFF

// в плагинах не используется, нужно в QU, далее такие параметры помечены: (:QU)
#define NO_PLUGIN           0xFF      // (:QU)

// константы поддерживаемых/понимаемых таймфреймов
#define TF_TIKS             1
#define TF_MIN1             2
#define TF_MIN5             3
#define TF_MIN10            4
#define TF_MIN15            5
#define TF_MIN30            6
#define TF_MIN60            7
#define TF_HOUR             8
#define TF_DAY              9
#define TF_WEEK             10
#define TF_MONTH            11
#define TF_HOUR4            12

// константы для плагинов "источников данных"
#define PLG_SRC             101       // идентфикатор возвращаемый при инициализации
#define PLG_SRC_OK          1         // возвращается при удачной инициализации
#define SRC_CHKT            1         // команда: "проверка" тикера
#define SRC_DOWN            2         // команда: загрузка/обновление данных
#define SRC_CONFIG          3         // команда: настройка плагина
#define SRC_TICKERS         4         // команда: "вернуть список тикеров раздела"

// константы для плагинов "форматов данных"
#define PLG_FMT             102       // идентфикатор возвращаемый при инициализации
#define PLG_FMT_OK          1         // возвращается при удачной инициализации
#define FMT_CONFIG          1         // команда: настройка плагина
#define FMT_RENAME          2         // команда: переименовать тикер
#define FMT_DELETE          3         // команда: удалить тикер
#define FMT_PERIOD          4         // команда: получить даты начала и конца исторических данных
#define FMT_TICKERS         5         // команда: получить список тикеров
#define FMT_SER_ADD         6         // команда: добавить(обновить) данные
#define FMT_SER_SET         7         // команда: записать(заместить существующие) данные
#define FMT_SER_GET         8         // команда: получить все существующие данные тикера
#define FMT_SER_GETex       9         // команда: получить все существующие данные тикера (добавлено для возможности редактирования произвольного файла)
#define FMT_SER_SETex       10        // команда: записать(заместить существующие) данные (добавлено для возможности редактирования произвольного файла)
//---------------------------------------------------------------------------

typedef unsigned char  uchar;
typedef unsigned short ushort;
typedef unsigned long  ulong;

#pragma pack(push,1)

// структура описатель списка обновления
typedef struct{
	char*         sGroupName;     // (:QU)
	char*         sDirectory;     // путь размещения данных
	char*         sSource;        // (:QU)
	char*	      sPlatform;      // название раздела в источнике
	char*         sFormat;        // (:QU)

	uchar         uSource;        // (:QU)
	uchar         uPlatform;      // позиция раздела в списке поддерживаемых разделов у источника (что-бы не делать каждый раз поиск по строкам)
	uchar         uTimeFrame;     // таимфрейм
	uchar         uFormat;        // (:QU)

	ulong         uCountStock;    // (:QU)
	uchar         bChecked;       // (:QU)
} SET_GROUP;

// структура описатель тикера
typedef struct{
	char          sTicker[MAX_NAME];
	char          sInfo[MAX_NAME];// доп.информация заполняемая по команде SRC_CHKT и отображаемая в QU
} SET_STOCK;

// серия данных, для обмена с QU
typedef struct{
	int           Count;          // кол-во бар
	double*       pDate;          // дата в формате modified julian day = TDateTime в библиотеке VCL Borland (алгоритм преобразования приведён тексте)
	float*        pfOpen;
	float*        pfHigh;
	float*        pfLow;
	float*        pfClose;
	float*        pfVolume;
	float*        pfOpInt;
} SERIES;

// список тикеров - возвращается из команд SRC_TICKERS, FMT_TICKERS
typedef struct{
	int           Count;
	char**        sName;
} LST_TICKERS;


// структура описатель плагина источника данных, возвращается при начальной инициализации
typedef struct{
	uchar         uType;          // тип = PLG_SRC
	char*         sName;          // имя источника
	uchar         uSecCount;      // кол-во разделов в источнике
	char**        sSections;      // имена разделов
	uchar         uTfCount;       // кол-во таймфреймов доступных в источнике
	uchar*        pTimeFrames;    // таймфреймы
	uchar         bConfig;        // флаг - плагин может настраиваться
	uchar         bTickers;       // флаг - плагин может вернуть список тикеров
} PLG_SRC_INF;

// структура данных передаваемая при командах плагину источнику
typedef struct{
	SET_GROUP*    group;
	SET_STOCK*    stock;
	double        dt1;
	double        dt2;
} PLG_SRC_DATA;


// структура описатель плагина формата данных, возвращается при начальной инициализации
typedef struct{
	uchar         uType;          // тип = PLG_FMT
	char*         sName;          // имя формата
	char*         sFilter;        // фильтр для диалога выбора файла
	uchar         bConfig;        // флаг - плагин может настраиваться
} PLG_FMT_INF;

// структура данных передаваемая при командах плагину формата
typedef struct{
	char          sDir[MAX_PATH];
	char          sName[MAX_NAME];
	double        dt1;
	double        dt2;
	void*         pd;
} PLG_FMT_DATA;


#pragma pack(pop)

//---------------------------------------------------------------------------
#endif
