# Плагин CHMDir (WCX/WDX) для Total Commander

Switch to English

Версия 0.41-alpha (x86 и x64). Используйте на свой страх и риск. Если вы обновляете плагин, стоит посмотреть раздел История версий.

ВНИМАНИЕ: В ВЕРСИИ x64 НЕ РАБОТАЕТ УПАКОВКА, УДАЛЕНИЕ и Т.Д. — TC ПАДАЕТ!
Автор использует 32-битную систему и не имеет достаточно времени отладить 64-битный вариант плагина.

Тестировался с Total Commander 7.x (32 бит) под WinXP (rus), 8.0 (64 бит) под Win7 (x64). Необходимо WinNT 3.5 или Win95 или новее.

Хотелось бы, чтобы программа была полезной, однако, НИКАКИХ ГАРАНТИЙ, ПОДДЕРЖКИ и всё такое...

Соображения по поводу плагина можно высказать автору.

CHMlib, CHMtools и библиотека сжатия LZX Copyright 2001 Matthew T. Russotto — http://www.speakeasy.org/~russotto/.

В CHMDir использована информация с сайта Paul Wise aka pabs — http://pabs.zip.to и немного кода из Info-ZIP (файл `match.c`).

- О плагине
- Файлы в архиве
- Установка плагина
  - Как архиваторного (WCX)
  - Как информационного (WDX)
- CHMDir.ini — настройки
- CHMView.exe
- wtedit.exe и wtdump.exe
- UnCHMw.exe
- Новые версии
- Компиляция
- Автор
- История версий

## О плагине

CHMDir добавляет в Total Commander поддержку файлов формата ITSS/CHM (компилированный HTML), позволяя распаковывать и искать файлы в архиве, а также упаковывать и удалять файлы.

Плагин позволяет распаковывать файлы HtmlHelp 2 (`.Hx?`).

Кроме того, он может работать и как информационный плагин, предоставляя информацию о заголовке окна справки, компиляторе и времени компиляции.

Наличие Internet Explorer`а в системе не требуется.

> NB: Плагин не может создавать полноценные CHM-ы с содержанием, индексом и т.д., но его достаточно для того, чтобы сделать CHM из скачанного сайта, если среди упаковываемых файлов есть хотя бы один файл с расширением .htm или .html. Для примера можно перепаковать этот архив в CHM. Для создания полноценного файла справки HtmlHelp можно использовать HTML Help Workshop или htm2chm.

Если файлы пакуются в новый архив, и в корне будущего архива нет файла '#SYSTEM', то он будет создан. В качестве главной страницы будет взят первый встретившийся файл из '`default_topics`' (см. CHMDir.ini), а, если такового нет, то первый встретившийся файл с расширением '.htm' или '.html'. Если в списке на добавление нет файла содержания (.hhc), то он тоже будет создан с именем 'stub.hhc'. В этом файле будут перечислены все .htm*, .php-файлы с подкаталогами в том порядке, в каком они перечислены в списке на добавление. Т.е. их порядок с содержании зависит от сортировки, принятой в TC.

Для сохранения структуры файла перед перепаковкой он должен быть распакован с включенной опцией 'Показывать файлы CHM' (CHMDir.ini или диалог настроек), чтобы сохранить файлы типа '#SYSTEM' (в нем указана такая информация как заголовок окна справки, имя файла содержания и проч.).

## Файлы в архиве

File_Id.diz |  | краткое описание пакета
index_en.htm |  | описание пакета на английском
index_ru.htm |  | то же, что и выше, на русском (вы это читаете)
chmdir.css |  | Таблица стилей для `index_*.htm`
pluginst.inf |  | INF-файл для автоматической установки плагина
CHMDir.wcx |  | собственно плагин
sample.ini |  | примерный INI-файл плагина
chmdir.lng |  | языковой файл для информационного плагина
CHMView.exe |  | программа для просмотра файлов CHM без `hh.exe`
UnCHMw.exe |  | консольная версия распаковщика
wtdump.exe |  | консольная программа для вывода свойств окна HtmlHelp
wtedit.exe |  | программа для редактирования свойств окна HtmlHelp
descript.ion |  | описания файлов

## Установка плагина как WCX

1. Распаковать файл `chmdir.wcx` в каталог по желанию.
2. В TC выбрать Конфигурация/Настройка... и открыть страницу Плагины
3. Нажать Настройка архиваторных плагинов (.WCX)
4. Добавить расширение '`chm`'
5. Нажать Обзор...и найти распакованный `chmdir.wcx`
6. Нажать OK
7. Шаги с 4-го по 6-ой повторить для расширения `.hxs`
8. При необходимости создать в каталоге с плагином файл CHMDir.ini или скопировать из `sample.ini`.

> NB: Иконка файлов и действие по умолчанию (по нажатию <Enter>) не изменятся. Для входа в архив нужно использовать сочетание <Ctrl-PgDn>. При желании входить в архив при помощи клавиши <Enter> и показывать у файла иконку архива нужно сделать следующее:
> 1. В главном меню выбрать Конфигурация/Настройка... и открыть страницу Архиваторы, в которой нажать кнопку Настройка архиваторных плагинов.
> 2. В выпадающем списке 'Файлы с расширением' выбрать 'chm'.
> 3. В поле 'Открывать с помощью программы:' заменить число NNN перед запятой на MMM, где MMM=NNN-256.

> или

> 1. Закрыть Total Commander
> 2. Открыть INI-файл Total Commander`а (обычно `<каталог_windows>\WINCMD.INI`) в текстовом редакторе.
> 3. В секции `[PackerPlugins]` изменить NNN в строке, похожей на '`chm=NNN,C:\wincmd\chmdir.wcx`' на MMM, где MMM=NNN-256.

> Для просмотра CHM-файла можно использовать:

> - команду `hh <chm-file>`,
> - сочетание <Ctrl-Enter> для вставки имени файла в командную строку, а затем <Enter> для запуска ассоциированной программы (hh.exe),
> - правый клик на имени файла и действие по умолчанию (выделено полужирным шрифтом).

## Установка плагина как WDX

1. Выбрать Конфигурация/Настройка
2. Выбрать страничку `Плагины` и в группе Информационные плагины нажать Настройка.
3. В диалоговом окне 'Информационные плагины' нажать кнопку Добавить и в поле 'Имя файла' ввести '`*.wcx`'.
4. Найти распакованный CHMDir.wcx и нажать 'Открыть'.

## CHMDir.ini

При загрузке плагин считывает настройки из файла `CHMDir.ini`, стандартного ini-файла Windows, который должен находиться в одном с плагином каталоге (или каталоге, который указывает при загрузке TC).

Описание см. в файле sample.ini.

Чтобы изменения вступили в силу, нужно либо перезапустить TC, либо выгрузить все плагины и зайти в другой CHM (TC помнит список файлов последнего архива).

NB: Чтобы плагин использовал `CHMDir.ini` в своём каталоге, нужно добавить в INI-файл в секцию `[CHMDir]` строку `ini_in_plugdir=1`.

## Известные ошибки и ограничения

- Плагин использует для распаковки CHMTools, которые работают только с версией 3 CHM. (Правда, я других и не встречал пока).
- Плагин использует оперативную память для хранения списка файлов в CHM. Поэтому, если имеется файл, в котором упакованы 1000 файлов со средней длиной имени 100 байт, то для распаковки нужно дополнительно иметь порядка 0,5 Мб доступной оперативной памяти.
- Плагин не разрабатывался, и не будет работать с файлами >= 2 Gb.

## CHMView.exe

Программа предназначена для просмотра CHM-файлов без участия hh.exe. В качестве параметра ей нужно передать имя файла CHM. CHMView распакует этот файл во временный каталог и попытается запустить зарегистрированный просмотрщик HTML.

## wtedit.exe и wtdump.exe

wtdump.exe выводит свойства окна HtmlHelp (или свойства по умолчанию для текущего каталога) и примерный HHP-файл (файл проекта HtmlHelp), который можно использовать для создания такого файла справки.

wtedit.exe позволяет редактировать свойства окна HtmlHelp для файла, переданного в качестве параметра программы.

Для работы обеих программ необходимо, чтобы файл `CHMDir.wcx` находился в одном с ними каталоге или в каталоге, указанном в переменной окружения '`PATH`'.

Более подробно см. HTML Help Web page или Help for HTML Help из HTML Help Workshop.

## UnCHMw.exe

Эта программа — версия распаковщика с интерфейсом командной строки.

UnCHMw.exe использует настройки из CHMDir.ini.

## Новые версии

См. http://wincmd.ru/plugring/chmdir.html

## Компиляция

Отредактировать `Makefile`, создать каталог 'obj' и запустить 'Nmake.exe'.

## Автор

Олег Бондарь aka Hobo (`hobo-mts at mail pnt ru`). Заменить 'at' на 'собаку', а 'pt' на '.'.

В теме письма должно присутствовать слово '`CHMDir`'.

## История версий

### 0.41-alpha (2012/04/06)

- Плагин линкуется с библиотекой времени исполнения статически и не зависит от msvcrt.dll.
- Добавлена версия x64.НЕ ИСПОЛЬЗУЙТЕ ЕГО ДЛЯ УПАКОВКИ, УДАЛЕНИЯ И Т.Д. (СМ. НАЧАЛО).

### 0.40g (2007/12/10)

- Исправлена ошибка, вызывавшая крах CHMView.exe при конвертировании содержания. Спасибо Atlan Gnozal за помощь.

### 0.40f (2007/11/29)

- Исправлена ошибка, вызывавшая крах при открытии CHM под Win98SE. Спасибо Atlan Gnozal за помощь.

### 0.40e (2007/10/16)

- INI-файл может располагаться в каталоге с плагином.

### 0.40d (2007/10/15)

- Исправлена ошибка при определении `<TITLE>`, вызывавшая крах TC.
- Теперь настройки хранятся в ini-файле по умолчанию как это рекомендовано в "Writing WCX packer plugins", а не в каталоге, где находится сам плагин. Перевод WCX-плагина перенесён в chmdir.lng.

### 0.40c (2006/10/07)

- Небольшие изменения в переводе на немецкий.

### 0.40b (2006/01/05)

- Вызов функции GetLongPathName() заменён на вызов через указатель (динамическое связывание времени исполнения). Прежний способ был причиной ошибки при загрузке wtedit.exe под Win95 и WinNT4.

### 0.40a (2006/01/02)

- Вызов функции GetCPInfoEx() заменён на вызов через указатель (динамическое связывание времени исполнения). Прежний способ был причиной ошибки при загрузке плагина под Win95 и WinNT4.

### 0.40 (2005/12/30)

- Добавлена опция для установки языка создаваемого CHM.
- Добавлено сохранение времени последней модификации файла в архиве.
- В системных файлах в ссылках на содержание и др. файлы обратный слэш заменён на прямой (обратный слэш приводил к некорректному просмотру).

### 0.40 beta 7 (2005/11/22)

- Добавлены свойства окна HtmlHelp.
- CHMView: добавлены диалоги прогресса.
- Добавлены wtdump.exe и wtedit.exe.
- Добавлен UnCHMw.exe.
- Добавлено конвертирование кодовой страницы для тега <TITLE>.
- В информационный плагин добавлено поле кодовой страницы / языка.

### 0.40 beta 6 (2005/06/23)

- Добавлена кнопка добавления имени файла топика по умолчанию.
- В диалоге конфигурации 'Код размера окна LZX' изменено на 'Размер окна LZX'.
- Добавлена упаковка при помощи COM-интерфейса IStorage.
- Добавлена функциональность информационного плагина (WDX).

### 0.40 beta 5:

- Добавлена распаковка файлов .HxS.
- Расширен stub.hhc.
- Добавлен параметр INI-файла title_stub.

### 0.40 beta 4:

- Исправлена досадная ошибка в заголовке файла (размер структуры), которая прокралась в код по недосмотру. Спасибо BootROM`му за содействие.
- Добавлена возможность установки низкого приоритета на время упаковки.

### 0.40 beta 3:

- CHMView не распаковывал CHM-ы с каталогами, в которых находятся только подкаталоги.
- Щелчок на кнопке 'Не сжимать расш.' разрешает или запрещает следующее поле ввода.
- '=.gif' теперь распаковывается как '=.gif', а не как '_.gif'.
- Подправлена сортировка файлов в листинге CHM-а.

### 0.40 beta 2:

- Переписан код записи листинга.
- В INI-файл добавлены параметры упаковки.
- Добавлена сортировка файлов по расширению до упаковки и вычисление размера чанка листинга.
- Добавлена генерация информации HtmlHelp.
- Добавлены параметры INI-файла: calc_chunk_size, its_use_store, default_topics, sort_dir_by_ext.
- Добавлен диалог настройки.
- Добавлен index.htm.

### 0.40 beta 1:

- Код чтения листинга и распаковки полностью переписан — значительно уменьшена потребность в оперативной памяти (особенно для CHM, в которых есть большие файлы), немного увеличилась производительность.
- Добавлено кэширование данных CHM-ов.
- Добавлены функции PackFiles(), DeleteFiles() и ConfigurePacker(). Изменены свойства плагина. GetPackerCaps() теперь возвращает 479. Если плагин раньше использовался, его нужно переконфигурировать (см. выше).

### 0.30a:

- Добавлена функция PackSetDefaultParams() (пока только заглушка и только в качестве комментария — плагин инициализируется во время загрузки при вызове DllMain() — это, конечно, неправильно, но пользователь не знает, какой INI-файл используется, а плагин не может ему этого сообщить: все настройки делаются вручную правкой INI-файла).

### 0.30:

- Добавлена функция CanYouHandleThisFile() для открытия файлов с расширением не .chm. GetPackerCaps() теперь возвращает 452.
- В дистрибутив вновь добавлен CHMView.exe.

### 0.29 beta:

- Добавлен INI-файл.
- Значительно уменьшена потребность в оперативной памяти.
- Убраны make-файлы для Watcom и lcc-Win32.

### 0.28 beta:

- Не показываются в списке файлы, чьи имена начинаются с '#' и '$'.
- Символ '_' используется для замены символов, которые не могут быть отображены в текущей кодовой странице при использовании функции WideCharToMultiByte(). Не тестировалось по причине отсутствия таких файлов.
- Ещё один клюдж для распаковки файлов, созданных htm2chm.

### 0.27 beta:

- Добавлена обработка результата, возвращаемого ProcessDataProc() — работает кнопка отмены.
- Исправлена ошибка, вызывавшая сбой при открытии CHM-ов, содержащих дли-и-инные имена файлов.

### 0.26 beta:

- Добавлено декодирование имён файлов из UTF-8.

### 0.24 beta:

- Добавлена информация о CHMView.
- Время последнего изменения файлов в архиве == времени CHM-файла.
- Добавлена информация о версии.

### 0.23 beta:

- Возврат к одному файлу без дополнительной DLL.
- Исправлена ошибка с освобождением памяти в chmdir.
- ЗАЛАТАНА (надеюсь) — не исправлена — [ошибка] в chmlib Matthew T. Russotto, которая вызвала нарушение при обращении к памяти. См. комментарий со словами `'!!! Hobo'`.
- Добавлен файл READMEru.txt — на русском языке.
- Название архива изменено на wcx_chmdirX.XX.zip. Где X.XX — номер версии.

### 0.22 beta:

- Очередная попытка сделать работу плагина стабильной. chmlib Matthew T. Russotto перенесена в отдельную DLL, которая загружается и выгружается при каждом открытии архива — может, это немного сэкономит память.

  Ничего не получилось. :-(

### 0.21 beta:

- Добавлена функция GetPackerCaps().

### 0.20 beta:

- Первый выход в свет.