
 Plugin Development Kit version 0.01
 ===================================

 Плагины - это дополнительные подключаемые модули, который расширяют возможности
 программы ARiD. Вы можете написать плагин для анализа определенного архивного
 формата или для чего-нибудь другого, на что хватит фантазии.

 Вся плагинная система реализована в Win32 GUI версии ARiD, консольная версия не
 поддерживает плагины.

 Плагин для ARiD представляет собой Win32 DLL, которая должна экспортировать
 две функции:

   char *pname(void);
   void pmain(plug_interface *pi);

 Первая вызывается при загрузке плагина и должна возвращать его имя, которое
 будет отображаться в меню плагинов. Вторая функция - основная, она вызывается
 при выборе пользователем соответствующего пункта меню. В ней плагин должен
 делать всю работу. Обе функции следуют C конвенции передачи параметров.

 Функции `pmain' передается указатель на структуру `plug_interface', из которой
 плагин может получать дополнительную информацию:

   typedef struct {
       unsigned char arid_version;
       unsigned char plug_version;
       char *fname;
       HWND hwnd;
       int (*processfile)(char *fname, arinfo *info, unsigned int opt);
   } plug_interface;

 Первые два байта содержат версию соответственно ARiD'а и плагинной системы.
 Версии определяется порядковым номером выпуска, таким образом, к примеру для
 версии 0.10 значение байта будет 10 (0x0a). Всегда настоятельно рекомендуется
 проверять версию `plug_version' с минимально необходимой для вашего плагина.

 Поле `fname' - указатель на имя файла, которое стоит в `ARID_IDC_FILENAME'.
 Если оно не указано, то `fname' указывает на ноль.

 Поле `hwnd' - хэндл основного диалога ARiD. Вы можете обращаться к элементам
 диалога, используя их ID:

   #define ARID_IDC_FILENAME 1007   // поле с именем файла
   #define ARID_IDC_TYPE 1008       // поле с типом архива
   #define ARID_IDC_EXTENSION 1009  // поле с правильным расширением архива
   #define ARID_IDC_COPYRIGHT 1010  // поле с копирайтом архива

 Я гарантирую, что в последующих версиях ARiD эти ID не изменятся.

 Поле `processfile' - указатель на одноименную функцию, которая определяет тип
 архива, sfx-архива или инсталлятора. В C конвенции.

 Аргумент `fname' - указатель на имя файла для сканирования. `info' - указатель
 на структуру `arinfo':

   typedef struct {
       char *name;       // тип архива
       char *extension;  // правильное расширение
       char *copyright;  // копирайт
   } arinfo;

 Последний аргумент `opt' - опции, которые задаются установкой нужных битов:

   #define ARID_OP_NONE 0x00      // нет опций
   #define ARID_OP_FORCESFX 0x01  // принудительно сканировать как sfx-архив

 Функция возвращает одно из следущих значений:

   #define ARID_ERROR_SUCCESS 0   // все ok, информация о файле - в `info'
   #define ARID_ERROR_FILEOPEN 1  // не могу открыть файл

 Внимание: выравнивание всех структур равно 1, т.е. его нет. Будьте внимательны
 при работе с компиляторами, которые любят выравнивать струкатуры по кратным
 адресам. Рекомендую брать хидеры из pdk/include, там все настроено.

 В будущих версиях возможно добавление новых полей в структуру `plug_interface',
 но они будут добавляться в конец, а так как в плагин передается лишь указатель
 на структуру, то совместимость с предыдущими версиями будет сохранятся.

 Плагины ищутся ARiD'ом в директории plugins/, причем не рукурсивно. Таким
 образом, плагины следует устанавливать в корень этого каталога, а документацию
 и все остальное - в подкаталоги. Кроме того, в файле plugins/ignore.lst можно
 указать имена файлов тех плагинов, которые вы не хотите загружать. Разделять их
 нужно символом новой строки, допускаются однострочные комментарии, начинающиеся
 с символа хэша `#'. Вы можете отключить сразу все плагины, сняв флажок с `Load
 Plugins' в ARiD GUI. Для принятия изменений требуется перезапуск программы, так
 как плагины загружаются только при запуске программы, а выгружаются только при
 выходе из нее.

 Если вы написали плагин, то пришлите его мне на мыло, пожалуйста.

 --
 Вячеслав Патьков <patkov-mail@mail.ru>
 http://patkov-site.narod.ru/
