
Сделать:
	+ trackers не определяет 3color CYBERDEM.888 файл (только как pt3)
	+ убрать в TASM зависимость от internal_id
	+ TASM и MASM проверка на окончание файла
	  Проверка на окончание файла в прочих (xas, storm, ...)
	- вход в файлы через alt+f7, но не enter
	+ getfiles
	? убрать префикс xx:
	+ anamorphis plug-in
	+ MSPACK без распаковщика
	  TASM стартовый адрес и/или длина = 0 - исключать из обработки
	  Поддержка TASM 2.0
	+ Выдача сообщения если модули не найдены
	  Сохранять в реестре путь к detector'ам
	+ Вложенные папки для detector'ов
	  MASM перекодировка @ACBDEF... -> ЮАВЦДЕФ...
	+ Новые команды в ALASM
	+ ACE LZS CC3 PCD TRUSH
	+ Hrust 2.1 + ace (добавить #ifdef ACE)
	+ Hrust 2.1 + ACE через internal_id передавалась hohdr->file.length вместо file_size
	+ Проверка наличия файла (перезапись) при извлечении
	+ Hrust 2.2 правильная проверка байта флагов
	+ Hrust 2.1 и 2.2 без сжатия
	+ Заголовок файловой панели
	+ Переименовать basic.ini
	- Image detector вместо него xGfx
	+ xGfx
	+ Извлечение файлов с недопустимыми именами "nul" "/\?*"
	+ Извлечение в подкаталоги с сохранением имён
	- В документации описать ошибку переключения панелей
	+ Basic - номера строк страший<=>младший байты
	  qht.dtr и chm.dtr
	+ индивидуальные def файлы для каждого project'а
	  добавить в trackers qview для pt2 и pt3
	+ исправлена ошибка определения длины ASM файлов (HoBeta header)
	  проверка версии FAR >1.70
	+ повторный вызов extract\qview если буфер мал
	+ убрать в ACE, BASIC, HRUST2.1 internal_id, заменив на HoHdr->NoSectors*SectorSize
	  убрать в PCD internal_id
	+ MSPACK исправлена ошибка определения длины файла (если используется LDIR вместо LDDR)
	  Проверить работу с файлами у которых lenght==0
	  TASM и MASM проверка не по длине файла GetFileSize, а по hohdr.length
	  MSPACK проверка кода последнего байта
	| HRUST 2.2 неверная распаковка stored файлов
	+ добавить в dtr.hpp // some crazy stuff to allow linking witout CRT
	  заменить data[2] + 256*data[3] на  *(WORD*)(data+2)
	  version info
	  передавать в detect флаг, который означает, что extract не быдет вызван (для xTRD) чтобы internal_id не заполнялся
	  vq2.$1 (длина в байтах > длины в секторах)
	  настройки -> выключение входа по enter
	  если есть запись в assotiation, то не вызывать extract а передавать hobeta файл
	  в assotiation предусмотреть возможность передавать внешней программе как обработанный, так и исходный файл
	  добавить настройку "Входить по Enter"
	  при вызове extract и qview file_size -= sizeof(HoHdr)
	  при входе в архив в имени файла только 5 букв
	  если сразу несколько модулей опознали файл - вывести список модулей
	  сделать настройку "[x] показывать список модулей", см. пред. пункт
	+ MSPACK исправить смещения в if() для SFX и неSFX
	  придумать команду для Alt+F3 просмотр без конвертирования (только убрать HoHdr)
	+ ALASM в TC плагине "добавлена поддержка директивы RUN", сделать в своём
	  BASIC показывать в заголовке автостарт и размер BASIC

trackers:
	  правильно выдавать размер распакованного буфера
	  по qView показывать версию не только tracker'а но и compiler'а/player'а
		пример:
		файл:              Music.$m
		имя TR DOS:        MUSIC   .C
		размер:            6311 байт
		продолжительность: 1 мин 36 сек
		редактор:          ProTracker
		версия:            3.5
		проигрыватель:     стандартный 3617 (0x0E11) байт
		автор:             <неизвестный>
		название:          <без имени>
	  pt2 добавить проигрыватель PT 3.1 remix by Frunze
	  pt3 универсальный поиск проигрывателей, т.к. их слишком много
	  pt3 поддержка сигнатуры VortexTracker
	  qView выводить строку "имя PC файла и HoBeta файла" как при просмотре exe файлов
	  поддержка
		PT3 формат TurboSound
		SuperSonic comp+ play-(нет примеров)
		STU        comp+ play-(нужна сигнатура)
		ProComp    comp-(нет сигнатуры) play+
		и нестандартного проигрывателя SoundTracker play-(нет сигнатуры)

bugs:
	  невозможно закрыть FAR мышью через [X] если открыт просмотрщик xLook
	+ копирование xLook->xSCL добавляет файлы всегда длиной 0 байт

======================= Assotiation =======================
; %f - файл после обработки
; %F - просто файл без hobeta заголовка
; %h - исходный hobeta файл
[type]
view=viewer.exe %f
edit=editor.exe %f
shell=viewer.exe %f
например
[tracker]
view=ay_emul.exe %f ;передать файл без проигрывателя
[image]
view=scrview.exe %h ;передать hobeta файл

=================== Многопроходный вызов ==================
1. модули должны сообщать о том что они могут обработать уже обработанный файл
   например BASIC.dtr не может обработать файл распакованный hrust'ом
2. модули могут запретить дальнейшие попытки обработки
   например любой ассемблер или tracker
3. передавать исходный hobeta заголовок начиная со второго прохода
   например hrust после распаковки может восстановить исходный hobeta заголовок

==================== Проект нового API ====================

Надо придумать как возвращать enum Action {do_nothing = 0, do_strip_hobeta, do_extract};
для F3, ctrl+q
Например для trackers
по F3 - do_strip_hobeta
по ctrl+q - do_extract


#define BUF_SIZE (65536)
void init   (const char* path);
void cleanup(void);

bool detect   (DetectorResult& result, const char* file_name, const BYTE* data, int file_size);
bool extract  (CallFrom caller, HoHdr hdr, const BYTE* source, DWORD sourceSize, BYTE unpackBuffer[BUF_SIZE], DWORD *noUnpackedBytes, DWORD internal_id);

//при первом вызове extract и qView передаётся буфер 64Кб
//если extract вернёт FALSE и *noUnpackedBytes!=64Кб, то происходит повторный вызов с буфером размером *noUnpackedBytes

struct DetectorResult
{
	int   structSize;//для совместимости с новыми версиями
	DWORD flags;//разные флаги :)
	DWORD internal_id;//если надо передать информацию из detect в extract и qView
	char  format [0x80];//для assotiation и types.ini (если будет поддержка в xTRD) (в xTRD sizeof(format)=128)
	char  title  [50];//заголовок панели просмотра
	char  ext    [5];//расширение для извлечения при входе в файл (вместе с точкой)
	HoHdr hobeta;//для паковщиков, если архив содержит имя файла и его параметры, например как HRUST 1.x и 2.2+
	char  comment[100];//если будет поддержка в xTRD (в xTRD sizeof(comment)=100)
	WORD  noProcessedBytes;//сколько байт планируется обработать (без учёта заголовка HoBeta) (если будет поддержка в MrRipper)
}

//CallFrom
enum
{
  fromViewer      = 0x00000001,//Вызов по F3
  fromQuickViewer = 0x00000002,//Вызов по Ctrl+Q
  fromEditor      = 0x00000003,//Вызов по F4
  fromShell       = 0x00000004,//Вызов по Enter+F5
  fromExport      = 0x00000005//Вызов по xx:<filename> (команда из ком. строки)
}

//flags
enum
{
  //прочие флаги
  CONTAIN_HO_HDR     = 0x00000001, //если содержит огригинальоне имя файла, например HRUST 1.x и 2.2+
  ONLY_DETECT        = 0x00000002 //для xTRD, означает что extract не вызывается и internal_id не нужен
}

//enum Action {do_nothing = 0, do_strip_hobeta, do_extract};
для простых например TASM (текст) достаточно do_strip_hobeta
для картинок нужен заголовок, поэтому do_nothing
для прочих (BASIC, ...) do_extract
Всё это можно заменить копированием src->dest
hdr+body = do_nothing
body = do_strip_hobeta
convert(body) = do_extract
