FAR Group
С выходом в свет FAR manager версии 1.70 произошли некоторые
изменения в части инициализации плагина (что ни в коем случае не скажется на
работоспособности ранее написанных плагинов), хотя старый метод
инициализации также остался работоспособным. После добавления в
PluginStartupInfo
указателя на структуру FSF, содержащей
указатели на стандартные функции FAR, стало возможным уменьшить размер
плагинов за счёт использования функций, находящихся в теле Far.exe.
Использование новой экспортной функции GetMinFarVersion позволяет
осуществлять контроль за версией FAR со стороны плагина. Теперь
немного примеров.
Для начала корректно напишем функцию SetStartupInfo:
char PluginRootKey[80];
static struct PluginStartupInfo Info;
static struct FarStandardFunctions FSF;
void WINAPI SetStartupInfo(struct PluginStartupInfo *PSInfo)
{
if(PSInfo->StructSize >= sizeof(struct PluginStartupInfo))
{
Info=*PSInfo;
FSF=*PSInfo.FSF;
Info.FSF=&FSF;
...
}
else
memcpy(&Info,PSInfo,PSInfo->StructSize);
}
Начиная с FAR 1.70 нужна функция GetMinFarVersion, при этом FAR сам проследит за запуском плагина.
int WINAPI GetMinFarVersion(void)
{
return FARMANAGERVERSION;
}
Естественно, что пуская плагин в 1.65 (и ниже) FAR не отреагирует на GetMinFarVersion - про эту функцию он просто не знает. Поэтому...
Следующий шаг - GetPluginInfo (или OpenPlugin). Если предполагается, что плагин будет работать только с планируемой версией FAR Manager (и выше), то достаточно выдать об этом сообщение и вывалить, если версия меньше планируемой - сравнить размер структуры PluginStartupInfo с полем PluginStartupInfo.StructSize:
void WINAPI GetPluginInfo(struct PluginInfo *Info)
{
if(Info.StructSize < sizeof(struct PluginStartupInfo))
{
// Выводим сообщение: "Этот плагин требует FAR Manager версии N.NN и выше!"
return;
}
.
.
.
}
Добавив подобную проверку в GetPluginInfo мы добиваемся того, что плагин вообще нигде не появляется. Если эту проверку делать в OpenPlugin, то он (плагин) болтаться будет в менюшках без надобности...
Маленькое замечание - надо обязательно упомянуть в сообщении имя плагина и, желательно, путь к нему, а то юзер будет гадать, какой это там плагин не будет работать ;). Прикольное, кстати, суходоевский чеккер сообщение выводит - "зарегистрируй плагин, парень", а какой плагин, остается только гадать...
02.11.2000