Плагин для разных версий FAR Manager.

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, то он (плагин) болтаться будет в менюшках без надобности...

Маленькое замечание - надо обязательно упомянуть в сообщении имя плагина и, желательно, путь к нему, а то юзер будет гадать, какой это там плагин не будет работать ;). Прикольное, кстати, суходоевский чеккер сообщение выводит - "зарегистрируй плагин, парень", а какой плагин, остается только гадать...

дополнения от Eugene Yavorsky

 
02.11.2000
наверх