OpenFilePlugin

FAR вызывает функцию OpenFilePlugin для открытия плагина, эмулирующего файловую систему на базе переданного этой функции файла (например, архива).
HANDLE WINAPI OpenFilePlugin(
  char *Name,
  const unsigned char *Data,
  int DataSize
);

Параметры

Name
Указывает на имя файла. Этот указатель действителен только до возврата, т.е. если плагин будет обрабатывать этот файл, он должен скопировать это имя во внутреннюю переменную.

Функция OpenFilePlugin также вызывается, когда пользователь собирается создать новый файл (нажали Shift-F1). В этом случае Name равно NULL и другие параметры не определены. Если плагин не поддерживает создание новых файлов, он должен возвратить INVALID_HANDLE_VALUE, иначе он должен вернуть новый экземпляр описателя плагина, который должен быть готов обработать функции GetOpenPluginInfo и PutFiles. Если Name равно NULL, в PutFiles плагин должен запросить Name у пользователя.

Data
Указывает на данные из начала файла. Они могут использоваться для определения типа файла. Плагин не должен их изменять.
DataSize
Размер переданных данных из начала файла. В настоящий момент он может быть от 0 до 128Kb, в зависимости от размера файла, но вы должны быть готовы к любому другому значению.

Возвращаемое значение

Замечания

  1. FAR Manager при нажатии <Enter> на выбранном файле опрашивает все плагины, экспортирующие эту функцию. Плагины просматриваются в алфавитном порядке (по имени DLL-модуля) и кто первый вернул значение, отличное от INVALID_HANDLE_VALUE - тому и отдается управление.
  2. Параметр Name содержит полный путь к файлу.
  3. Количество читаемых байт можно изменить - TechInfo #63:
    [HKEY_CURRENT_USER\Software\Far\System]
    "PluginMaxReadData":REG_DWORD
    Параметр "System/PluginMaxReadData" с типом DWORD позволяет задавать
    максимальный размер читаемых данных из файла в который попытались
    войти из панелей (Enter или Ctrl-PgDn). Считанные данные будут переданы
    плагинам для определения плагина поддерживающего файл этого типа.
    Диапазон от 0x1000 до 0x80000.
    По умолчанию 0x20000.