# История изменений новых версий T-Hist и сопутствующих утилит

#### Используемые термины

- Под термином `старые версии` понимается версия `T-Hist` `0.30.alpha7`, выпущенная в 2003 году, и более ранние версии утилиты.

- Под термином `параметр` понимается параметр в конфигурационном файле.

- Под терминами `группа`, `группа адресов` понимается адрес, заданный в параметре `Addr` с использованием хотя бы одного макроса `#`.
Адреса, заданные с использованием символов подстановки `*`, но не содержащие макросов `#`, группами не являются.

- Термины `бинарный лог` и `файл истории` эквивалентны.

## [1.1.0] - 2026-08-27

### Добавлено

- На гистограммах уровень загрузки больше 0%, но меньше 3% теперь отображается с помощью символа `_`.
Раньше из-за отсутствия подходящего символа псевдографики такой уровень загрузки либо отображался избыточно большим - как уровень 3-10%, либо не отображался вообще.

- Создано краткое руководство "Как использовать T-Hist для генерации статистики неподдерживаемых мейлеров" (файл `ADD-NEW-MAILER-ru.md`).

### Исправлено

- Полностью исправлена ошибка, когда в таблицу сессий попадали сессии с адресами, не заданными параметрами `Addr`, причём всегда отмеченные как оборванные.
В версии `1.0.3` эта ошибка была исправлена частично: только для явно исключаемых адресов. Теперь в таблице сессий присутствуют только те адреса, которые соответствуют параметрам `Addr`.

- Исправлена ошибка, из-за которой игнорировался параметр `ProtectSummary Yes`, и не выводилась суммарная информация о парольных и непарольных сессиях
(для тех мейлеров, которые записывают признак парольной сессии в бинарный лог).

- Исправлена ошибка, когда при обрезании бинарного лога (если задан параметр `CutHistory`) сохраняемые сессии длительностью 0 секунд записывались с длительностью 1 секунда.

- Восстановлена поддержка мейлеров The Brake!, BinkleyTerm-XE, InternetRex, FrontDoor, сломавшаяся в версиях `1.0.0` &ndash; `1.0.4`.
(Вряд ли кто-то сейчас использует эти мейлеры, но у меня от них сохранились старые бинарные логи, на которых можно проверить работу программы.)

### Изменено

- Порядок задания адресов с помощью параметров `Addr` теперь не важен. Независимо от того, в каком порядке заданы адреса и группы адресов, при генерации статистики они будут
отсортированы от менее общих к более общим. При этом исключаемые адреса и группы адресов будут размещены в начале списка, попутно удаляя все адреса, совпадающие с исключаемой группой.
Повторные задания одних и тех же адресов будут игнорироваться. Подробнее правила сортировки адресов рассмотрены в файле `README-ru.md`.

- Изменён алгоритм просмотра адресов, заданных параметрами `Addr`, при генерации статистики. Раньше просмотр списка адресов завершался после первого совпадения адреса сессии
с одним из адресов `Addr`. Теперь если адрес сессии не задан как исключаемый из статистики, просмотр будет продолжаться до конца списка. Такой алгоритм позволяет учесть сессии
с отдельно заданным адресом также и в статистике по группам, к которым принадлежит адрес. Подробнее новый алгоритм просмотра адресов при генерации статистики рассмотрен в файле `README-ru.md`.

- После таблицы со статистикой по линкам теперь выводится суммарная информация о траффике, количестве сессий и их длительности.
Это точная копия информации, выводимой после графика и гистограмм загрузки, а также выводимой утилитой `LnkStat` в конце своей статистики.

- Небольшое изменение формата вывода таблицы сессий, связанное с отображением отметок парольных сессий (для тех мейлеров, которые записывают признак парольной сессии в бинарный лог).

- Утилита `DmpHist` теперь игнорирует параметр `TimeShift` и выводит время начала сессий в точности так, как оно записано в бинарном логе, без каких-либо корректировок.

## [1.0.4] - 2026-08-21

### Изменено

- Изменение ширины некоторых столбцов таблицы со статистикой по линкам.

- Утилита `DmpHist` теперь выводит в конце таблицы более подробную расшифровку битов статуса сессий.

## [1.0.3] - 2026-08-18

### Исправлено

- Исправлена обработка исключаемых из статистики адресов (например, `Addr !2:5020/1132.0`).
Раньше сессии с таким адресами ошибочно отображались в таблице сессий, причём всегда отмеченные как оборванные. Теперь такие адреса исключены из всех видов статистики.

### Изменено

- Изменён формат вывода таблицы сессий. Теперь время начала сессий указывается с точностью до секунд (раньше была точность до минут).
Время окончания сессий исключено по причине избыточности &ndash; в таблице приведена длительность сессий.

- В таблице сессий теперь отмечаются оборванные сессии мейлера Binkd. Раньше для оборванных сессий Binkd отметка `A` (aborted) после адреса не ставилась.

- Улучшен алгоритм расчёта среднего CPS при задании `AdvancedCPS Yes` в конфигурационном файле.

## [1.0.2] - 2026-08-14

### Исправлено

- Исправлена некорректная обработка параметра `ShowValue` и опции командной строки `-s`.

### Изменено

- Небольшие изменения выводимых в `stderr` диагностических сообщений.

## [1.0.1] - 2026-08-13

### Исправлено

- Восстановлено корректное обрезание бинарных логов (при заданом параметре `CutHistory`).

## [1.0.0] - 2026-08-12

Первая новая версия. Добавлена поддержка Linux. Переход на кодировку UTF-8.

**Внимание!** Эта версия некорректно выполняет обрезание бинарных логов (при заданом параметре `CutHistory`).

### Добавлено

- Добавлена поддержка Linux (x86_64 и i686) и Windows (x86_64 и i686).
Исполняемые файлы для каждой из архитектур Linux компилируются в двух вариантах: с динамическими и со статическими библиотеками.
Варианты со статическими библиотеками дополнительно сжаты упаковщиком исполняемых файлов [UPX 4.2.4](https://upx.github.io) для уменьшения размера.

- Утилитам `LnkStat` и `DmpHist` (но не `T-Hist`) добавлена опция командной строки `-u` для выбора кодировки выводимой информации:

	`-u`, `-u+` &ndash; использовать UTF-8 (по умолчанию)

	`-u-` &ndash; использовать ASCII 7-bit без символов псевдографики

### Изменено

- Все утилиты выводят информацию и создают выходные текстовые файлы в кодировке UTF-8.
Для размещения статистики в русскоязычных эхоконференциях/нетмейле текстовые файлы необходимо преобразовать в кодировку CP866:

	```shell
	iconv -f UTF-8 -t CP866 in.txt -o out.txt
	```

- Для сессий, записанных в бинарный лог с длительностью 0 секунд, задаётся длительность 1 секунда. Это позволяет более корректно строить гистограммы загрузки.

	**Причина изменения**: интервалы времени в бинарных логах записаны с точностью до секунды (форматы бинарных логов разрабатывались во времена dial-up,
когда сессий короче секунды практически не было). Но при использовании Fido-over-IP в сетях с высокой пропуской способностью часто сессии длятся меньше секунды.
Для таких сессий в бинарный лог будет записана длительность 0 секунд. Старые версии не учитывали такие короткие сессии при построении гистограмм загрузки.

	**Исключение**: для утилиты `DmpHist` данное изменение не применяется. Эта утилита продолжает работать по-старому:
выводит сырые данные из бинарных логов без какой-либо корректировки. Для сессий короче секунды утилита выведет длительность 0 секунд, как записано в бинарном логе.

	**Побочный эффект**: заниженная оценка по-умолчанию среднего CPS (Characters per Second - количество символов/байт, передаваемых за одну секунду).
По-умолчанию при подсчёте среднего CPS суммируется длительность всех сессий: и непустых, и пустых. В старых версиях большинство пустых IP-сессий имели длительность 0 секунд
(как записано в бинарном логе) и не увеличивали суммарное время всех сессий. После данного изменения каждая пустая сессия увеличивает расчётное суммарное время как минимум на 1 секунду,
хотя скорее всего сессия была короче. Чем больше пустых сессий обработано, тем сильнее подсчитанная сумма длительностей всех сессий будет превышать реальное суммарное время,
что это приводит к заниженной оценке CPS. Для совместимости со старыми версиями такое поведение по-умолчанию сохранено.
А для более корректного подсчёта среднего CPS при использовании IP-мейлеров укажите в конфигурационном файле:

	`AdvancedCPS Yes`

- Действие параметра `NoDrawZero` распространяется и на гистограммы (ранее этот параметр влиял только на график загрузки).
Теперь общая гистограмма загрузки всегда соответствует "суммированию" всех строк графика загрузки.

### Удалено

- Удалена поддержка DOS и OS/2. 

