Version 0.49.10si, sisoft\\trg edition
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- qcc теперь умеет выполнять различные команды. Жмите `F1' в qcc, всё узнаете.
  Еще рекомендую прочитать пункт о qcc в README, для большего понимания.
- Сделано вырезание ненужной информации из лог-части экрана qcc. Сами экраны
  теперь переключаются более корректно, без глюков.
- qcc теперь корректно закрывается по сигналам sighup/sigterm/sigint, либо
  при завершении работы демона (по `qctl -q').
- qcc теперь парсит командную строку. делайте `qcc -h' для получения помощи.
- и вообще: qcc переделан почти полностью, и изменения сюда писать не буду!
- Чат. В конфиг добавлены переменные `chatlog', протокол `C' в `protorder',
  `chatlognetmail', 'chattoemail', `runonchat' и `chathallostr'.
- Ручной skip и suspend принимаемых файлов.
- Теперь, если наш или ремотный мылер скипает/рефузит файл, а следующий файл
  tic, то он тоже скипается/рефузится. Включается переменной `autoticskip'.
- Убран показ размера в мегабайтах, по причине неинформативности.
- Добавлена переменная `modemnodial <string>', в которую заносится ответ
  модема, после получения которого все узлы ставятся в холд на `holdonnodial'
  минут. Это что-б модем не ломился часто, когда разговариваешь по телефону.
- Добавлены переменные `fails_hold_div' и `fails_hold_time'. Вообщем, если
  число неудачных попыток без остатка делится на `fails_hold_div', то узел
  ставится в холд на `fails_hold_time' минут.
- Сделана перекодировка русских имён файлов. Включается добавлением ключей
  в маппинг. новые ключи: `k' - конвертирует имя из cp866 в koi8-r, и `c' -
  конвертирует из koi8-r в cp866. Вообщем смотрите qico.conf.sample, там
  много нового и интересного. ;)
- Сделана обработка escape-последовательностей в EMSI - теперь корректно
  понимаются русские буквы и псевдографика (коды>=128) во всех полях EMSI.
- Сделана перекодировка koi8-r<>cp866 везде, где это необходимо. При желании
  отключается, установкой `remoterecode' в `no' (влияет на маппинг тоже!).
- Добавлена переменная `emsifreqtime' - время файловых запросов для EMSI.
  Если не определена, то используется `freqtime' или "Never", если фреков нет.
- Добавлена переменная `ignorenrq'. Если включена, то файловые запросы (.req
  файл) будет посылаться, даже если ремота не поддерживает фреки (NRQ в EMSI).
- Добавлена переменная `qstoutbound'. Если определена, то вся иерархия с
  .qst файлами будет создаваться не в основном аутбаунде, а в этом каталоге.
- Добавлена поддержка файловых запросов в S.R.I.F. формате (fsc-0086).
- При создании пула или файл-реквеста с узла снимается флаг Imm, если был.
- Теперь, если `realmincps off', то значит `mincpsin' и `mincpsout' указаны
  в процентах от скорости коннекта: mincps=connectspeed/1000*mincps.
- Новый параметр `autosuspend' - автоматически задерживать при приеме файлы,
  подходящие под маску (можно указать несколько).
- Новый параметр `alwaysoverwrite' - всегда перезаписывать при приеме файлы,
  подходящие под маску (можно указать несколько).
- Если реальное имя ремотного мылера не совпадает с указанным в EMSI, то
  выводятся оба названия (только на гидре). Так-же появилась некоторая
  "намагниченность" собственного названия. ;)
- Если переменная окружения CALLER_ID не определена, или определена, но
  содержит менее 4х знаков или строку "none", то она игнорируется.
- Новый параметр `hstimeout' - задаёт максимальное время, для осуществления
  emsi-handshake.
- Новый ключ к qico: `-f' - запуск после падения демона (вместо ipcs и ipcrm)
- Добавлена переменная `longrescan' - по дефолту всегда использовалось
  по возможности "быстрое" пересканирование очереди. т.е. если время изменения
  lo'шки не изменилось, то размер самих файлов не перепроверялся. Теперь,
  если определена эта переменная, то каждое указанное пересканирование
  будет "долгим" (полным). Если указать 1, то все ресканы будут долгими.
- Добавлена переменная `runonemsi' - указывает на программу, которая
  запускается сразу после установки EMSI-сессии. после команды добавляется
  адрес ремоты в качестве аргумента. Завершение работы программы не ожидается.
- bugfix: не удаляем каталог основного аутбаунда после сессии.
- bugfix: теперь не "зависает" при переводе системного времени назад.
- bugfix: невозможно было сконнектиться двумя киками на zmodem и dirzap.
- bugfix: теперь .pkt, с отчётом о файловых запросах, отдаётся в конце сессии
          и создаётся более корректно.
- bugfix: корректно работаем с переходом на летнее время (daylight saving).
- bugfix: теперь адекватно реагируем на несовпадение/отсутствие паролей.
- bugfix: убиваем недокаченные *.pkt
- Косметика.

Version 0.49.10
~~~~~~~~~~~~~~~
- Произведен переход на autotools (autoconf-2.53, automake-1.5)
- Добавлена переменная useproctitle [yes|no]. По умолчанию: yes
  Данная переменная управляет выводом команды `ps'. В случае если стоит "no" то выводиться
  путь к qico иначе - как и раньше, статус программы.
- Добавлен флаг "translatesubst yes|no", по умолчанию "no". Если указан, то
  номера телефонов в подстановках транслируются как и нодлистовые (в качестве
  телефонов необходимо прописывать полный номер 7-095-123-4567).
- Debug Log работы с модемом. (by Pavel Levshin)
- Команда сбора статистики работы модема. (by Pavel Levshin)
- Нодлисты при поиске по маске (nodelist.999) ищутся без учета регистра.
- функция basename взята из FreeBSD libc
- change: расшифровка конфиг-файла теперь ведется в логи. (Не удобно, когда надо 
  Enter нажимать)
- bugfix: В случае если у пользователя нет возможности читать файл, файл в очередь отправки
  не добавляется. В случае если у пользователя нет возможности писать в файл - файл нельзя 
  удалить после отправки. Если указанный путь не regular файл (каталог, сокет, пайп и тп),
  то он также не попадает в очередь отправки.
- bugfix: Исправлена работа чтения конфигурационного файла, для изменения
  номеров (флаг "phonetr") в зависимости от имени порта.
- bugfix: Исправлена работа с ASO при работе с нодой номер которой длиннее 4 цифр.
- bugfix: Исправлена работа с модемом (не дёргалась DTR, запрещалась
  работа с tty после sighup даже после tty_local, что-то ещё... не помню)
  (by Pavel Levshin)
- bugfix: Поправлен configure в районе определения возможностей syslog'а.
- bugfix: В qico.conf.sample закрыто условие tcp/ip
- bugfix: Поправлена затычка для ломанных basename(). Предыдущий вариант
  ошибался при простом имени (без '/'), из-за чего возникали серьезные проблемы.
- bugfix: Если стояло `needalllisted yes', то статус узла определялся
  неправильно.
- bugfix: исправлена ошибка обработки нодлиста в случае если попадаются Down
  станции.

Version 0.49.9
~~~~~~~~~~~~~~
- Так как Hydra8K и Hydra16K могут легко заблокироваться, если в ядре
  недостаточно большие буфера у драйвера последовательного порта, то они
  теперь запрещены по умолчанию. Для разрешения надо configure сказать
  `--enable-hydra8k', после чего обозначения протоколов `8' и `6' станут
  доступны.
- Новая буква для loglevels: R. Означает file Requests.
- Проведен дополнительный аудит кода, выявлено еще несколько потенциальных
  переполнений буфера и race conditions.
- Удалены все реальные адреса и телефоны из qico.conf.sample.
- Новое слово в конфиге: needalllisted (yes|no). по-умолчанию -- `no'.
  Если стоит `no', то, что бы партнер получил флаг `listed' достаточно
  одного найденного адреса в списке предъявленных.
  Если стоит `yes', то для получения `listed' необходимо, что бы все адреса
  были найдены в нодлистах.
  Раньше проверялся только первый адрес.
- Теперь строчка modemhangup посылается в модем не только после исходящих,
  но и после входящих сессий.
- Новое слово в конфиге: alwayskillfiles (yes|no). по-умолчанию -- `no'.
  Если выставить в `yes', то файлы, прописанные в LO'шках как обнуляемые
  после отсылки (`#' в начале строки) будут удаляться, как если бы строка
  начиналась с `^'.
- Новое слово в конфиге: rootdir. Если оно задано, то первое, что делает
  демон или отвечающая копия -- это chdir в этот каталог.
  Результат не проверяется.
- Умеем собиратся с Electric Fence (libefence, отладчик памяти). Это
  определяется перед компиляцией ключом к configure `--enable-efence'.
- собирается и запускается на NetBSD/i386 1.5
- basename() проверяется на глючность (в некоторых системах
  basename() возвращает указатель на последний символ '/', а не
  на символ после него).
- Добавлена реализация strcspn() для систем, где оно отсутствует.
- Проверено, что собираемся на FreeBSD 2.1.0 (gcc 2.6.3).
  (Thnx to Alex Semenyaka <alexs@snark.rinet.ru>).
- Теперь параметр конфига defperm влияет не только на файлы в инбаунде,
  но и на файлы, создаваемые в аутбаунде (*.?lo) при полах и аттачах.
  Причем, только при создании таких файлов (права на существующие файлы,
  в которые производиться запись, не меняются).
- Теперь при компиляции gcc (а кто-то компилирует чем-то другим?) все проверки
  на loglevels происходят в месте вызова, что экономит один вызов функции
  на каждое отключенное через loglevels отладочное сообщение (но несколько
  раздувает код, конечно).
- Новая буква в loglevels: Y. Это разбор и проверка условий в конфиге.
- Собираемся на системах без EIDRM в <errno.h>. На таких системах определяем
  EIDRM в EINVAL (может быть неверно). Так же, проверяем errno на EINVAL в тех
  же случаях, что и на EIDRM.
- Собираемся на системах без getsid(). На таких системах всегда считаем себя
  лидером сессии.
- Теперь во всех строках команд для модемов понимаются символы '^' и 'v'.
  Поднять и опустить DTR соответственно.
  Таким образом, в командах для модемов понимаются спец-символы:
   | -- ^M, он же <Enter>, он же '\r'
   ~ -- Пауза в 1 секунду.
   ' -- Пауза в 0.2 секунды.
   ^ -- Установка DTR.
   v -- Сброс DTR.
- Теперь индекс нодлистов сортируется и из него удаляются одинаковые узлы
  из разных листов. Приоритет имеют нодлисты, указанные в конфиге первыми,
  то есть локальный сегмент лучше указывать раньше мирового нодлиста.
  Поиск по нодлисту теперь бинарный.
  ВНИМАНИЕ! Перекомпилируйте нодлисты!
  (Thnx to Yuriy Kaminskiy, 2:5020/517.21).
- Новая переменная в конфиге: holdonsuccess. Определяет на сколько минут
  задерживать прозвонку на узел после успешной сессии. 0 -- не задерживать
  вообще (старое поведение). По-умолчанию -- 0.
  Если есть повод задержать файлы и/или файловые запросы, то задержка
  происходит на максимум из waithrq и holdonsuccess.
  Работает как на входящих, так и на выходящих сессиях, но на входящих не
  учитывает флаги задержки файлов и/или файловых запросов (так как на входящих
  и исходящих эти флаги могут различаться).
- Теперь configure проверяет параметры для всех своих аргументов.
- bugfix: Закрываем pkt-файл с отчетом о файловом запросе перед отсылкой.
  Очень часто не-закрытие файла приводило к пустому пакету.
- bugfix: Не портим окружение (environment) при установке названия процесса.
  Такая порча могла приводить к искажению вывода времени в логе и другим
  странным эффектам.
- bugfix: Работает immonflavors. И как никто не заметил, что оно вообще не
  работало?
- bugfix: При неопределенной скорости коннекта не падаем при выводе в лог
  ожидаемого времени передачи файла.
- bugfix: Поправлена грубая ошибка при работе с Txy-флагом. Эта ошибка могла
  приводить к звонкам на станции не вовремя на некоторых системах.
  (Thnx to Artem Afanasiev, 2:5030/1600).
- bugfix: Поправлены отладочные сообщения для Y.
- bugfix: Работает условие listed в конфиге для большего числа параметров --
  флаг выставляется до посылки EMSI_DAT на входящих сессиях.
- bugfix: При loglevel C>0 теперь действительно дампится конфиг, а не только
  сабсты.
- bugfix: Теперь условие date в конфиге должно работать правильно в случае
  диапазона дней.
- bugfix: Теперь файлы вида NN.NN.NN.NN.some (где NN -- числа) в каталоге
  для файлбоксов (longfileboxes) не пытаются рассматриваться как файл-боксы,
  и вообще не обращается внимание ни на что, кроме каталогов и символических
  ссылок (так что, появление таких файлов не будет приводить к переполнению
  мастер-лога сообщениями о невозможности открыть каталог).
  (Thnx to Maxi Rovnich, 2:5030/872.0).
- bugfix: configure проверяет, можно ли одновременно включать <syslog.h>
  и <sys/syslog.h>. На некоторых системах двойное включение приводило 
  к ошибке компиляции и, в результате, не находились facilitynames и
  prioritynames.
- bugfix: В qcc поправлен разбор пакета о посылке файлов. Может быть поможет...
  (Thnx to Sir Raorn <raorn@binec.ru>).
- bugfix: Пароль в пакете с ответом на файловый реквест дополняется нулями,
  а не пробелами. Так же, исправлена возможная ошибка при использовании паролей
  длиннее 8 символов.
- bugfix: На не-интел процессорах делаем правильный заголовок пакета с отчетом 
  о файловом запросе.
- bugfix: В mail-only время не пытаемся звонить, если на узел нет нетмейла.
- bugfix: Поиск ioctl(TIOCSCTTY) опять поправлен.
- bugfix: Теперь ASO точно работает -- глупая опечатка поправлена.

Version 0.49.8
~~~~~~~~~~~~~~
- старый ZModem удален из дистрибутива. Теперь всегда используется новый
  ZModem.
- bugfix: ASO был сломан из-за параноидальных правок. Теперь ASO должен
  работать.
- bugfix: configure будет находить ioctl(TIOCSCTTY) на большем количестве
  систем.
- bugfix: `qctl -xX' не падает в корку без адреса.

Version 0.49.7
~~~~~~~~~~~~~~
- Теперь при сортировке списка файлов перед отправкой пакеты с нетмейлом
  переносятся наверх списка, только если они получены из *.?ut-файлов или
  файлбоксов.
  Пакеты, приаттаченные из *.?lo рассматриваются как обычные файлы. Таким
  образом, нетмейл будет уходить первым, а вот пакеты с аттачами -- в том
  порядке, в котором они были записаны в *.?lo, то есть после своих файлов.
- Демон теперь открывает /dev/null вместо stdin, stdout и stderr.
- Теперь на BSD-like системах звонящий процесс имеет контрольный терминал
  (собственно, тот порт, на котором происходит звонок).  
- Переписана вся работа с CRC. Благодаря этому работаем на Alpha и, надеюсь,
  на всех остальных 64-битных процессорах.
  (Thnx to Pavel Gubin pg@ie.tusur.ru за доступ на Alpha).
- Теперь при указании в logfile $facility для syslog, можно указать так же
  и приоритет через двоеточие. По-умолчанию, как и раньше, используется
  LOG_INFO.
- Новый ZModem теперь выбирается по-умолчанию. Для выбора старого ZModem'а
  надо запускать ./configure --without-new-zmodem.
  В следующем релизе старого ZModem'а не будет вообще.
- qico проверяет все выделения памяти и падает по abort()'у, если не удалось
  выделить память. Так же не оставлено функций, которые работают со строками
  и не проверяют размер буфера (sprintf(), strcat(), strcpy(), strncat(),
  strncpy()).
  На платформах, где нет vsnprintf(), остался vsprintf(), потому что
  адекватной замены пока не найдено.
- Новый флавор (flavor) в аутбаунде: REQ. В callonflavors и immonflavors
  обозначается буквой `R'. Таким образом, теперь вам решать -- звонить на 
  одинокий файл-реквест или нет.
  Только не забывайте, что при наличии пола мейлер будет звонить даже
  если ничего кроме пола и файл-реквеста нет, а файл-реквесты задержаны
  и время задержки еще не вышло (так как полл добавит флавор с каким он был
  создан).
  По-умолчанию флавор R в callonflavors присутствует, будьте внимательны.
  (Patch from Yuriy Kaminskiy 2:5020/517.21)
- Новое слово в конфиге; loglevels. Если qico была собрана с поддержкой
  отладочной печати, то через эту переменную можно регулировать, по каким
  подсистемам и в каком количестве выводить в лог отладочную информацию.
  Формат -- смотрите в конфиге.
- Новый параметр у configure `--disable-debug'. Теперь по-умолчанию qico
  собирается с поддержкой отладочной печати (debug logging), и количество
  выводимой отладочной информации регулируется через конфиг.
  Если вы полностью уверены, что вам не потребуется писать багрепорт, то вы
  можете собрать qico без отладочной печати, для чего необходимо запустить
  configure с этим параметром.
- Теперь, если freqtime не задан, в EMSI пишется `Never', иначе старые
  T-Mail'ы (2603 и раньше -- точно) падали или не могли провести EMSI-сессию.
- Можно указать номер линии (subst'а), на который звонить, при звонке через
  `qico -cX': `qico -cX <address> <line>'. Линии нумеруются с единицы.
  Если номер линии опущен, то будем звонить на первую, подходящую по времени
  работы.
- Теперь значение по-умолчанию для пути к конфигу (если не указан параметр
  --with-config для configure) ${prefix}/etc/qico.conf, а не /etc/ftn/qico.conf
- bugfix: Теперь демон не падает по qctl -K <address>, если он раньше падал
  на некоторых системах (в частности, на моей домашней) этот баг не
  проявлялся.
  (Thnx to Nick Procopets <nick@hill.kiev.ua>)
- bugfix: Поправлен skip на Janus'е от T-Mail'а (когда присылают позицию
  конца файла)
- bugfix: Новый ZModem при выборе именно ZModem'а на приеме не говорит о
  8Kb-блоке (косметика, реально -- не важно, так как размер блока задает
  посылающая сторона).
- bugfix: Поправлена работа mincps*. Теперь сессия не будет рваться из-за того,
  что больше нечего передавать или принимать. Так же поправлен подсчет CPS
  на пересылаемых не с начала файлах на новом ZModem'е.
- bugfix: Теперь не пропускаем звонок на узел, если у него несколько линий,
  и сейчас работают не все.
- bugfix: Чуть-чуть оптимизирована EMSI на исходящих (возможно, это решит
  проблему с некоторыми cisco).
- bugfix: Иногда теряли первый EMSI_DAT при ответе.
  (Thnx to Alexander Belkin 2:5030/2120.0).
- bugfix: Демон не падает, если его просят прислать (`qctl -o') пустую очередь.
- bugfix: Работают холды после сессий с флагами H*.
  (Patch from Sir Raorn <raorn@binec.ru>).
- bugfix: В новом ZModem'е поправлены skip и refuse на начале файла.
  И как этого раньше никто не заметил?!
- bugfix: Перебор subst'ов теперь начинается с первого и идет от первого к
  последнему, а не в обратном порядке.
- bugfix: Теперь при звонке через `qico -cN' будет выбран первый подходящий
  по времени subst (если их несколько).
- bugfix: Пакеты с именами типа 0000fffa6.tut не будут приводить к появлению в
  очереди странных адресов.
- bugfix: qctl не валится, если забыть параметр у -f.

Version 0.49.6
~~~~~~~~~~~~~~
- Новый параметр у qctl: `qctl -o' показывает состояние очереди демона.
- bugfix: Кардинально увеличена скорость приема у нового ZModem'а. Теперь
  модемный CPS не будет ограничен слабым процессором.
- bugfix: Удаляем пустые *.?lo даже после Mail-Only сессии, избегая дятла
  в ZMH и подобное ему время.
- bugfix: Если в конце EMSI_DAT нет перевода строки (что характерно для
  EMSI_DAT от The Brake! с неправильно написанным хуком), то все равно
  пакет распознается по длине.
  Таким образом, проблемы коннекта с The Brake! должны быть решены.
- bugfix: Аккуратней пропускаем ZFIN'ы, оставшиеся от предыдущего батча,
  при инициализации приема на новом ZModem'е.
- bugfix: Не посылаем лишних ZFIN при завершении принимающего батча в новом
  ZModem'е. На это болезненно реагировал Kitten Mail.
- bugfix: RH1 посылаем только если в ProtOrder есть какая-нибудь Hydra.
- bugfix: Посылаем два EMSI_ACK в ответ на EMSI_DAT, как и положено по
  стандарту.

Version 0.49.5
~~~~~~~~~~~~~~
- Более строго смотрим на то, можно ли докачивать файл, или надо начинать
  его заново.
- Новое слово в конфиге: estimatedtime (yes|no). По-умолчанию `no'.
  Если установлено в `yes', то перед началом приема и передачи файла
  в лог пишется строка с именем файла, его размером и предполагаемым временем
  приема/передачи. При этом, для передачи не учитывается то, что удаленная
  сторона может захотеть принимать файл не с начала.
  Предполагаемое время передачи вычисляется на основании cps предыдущего файла,
  если он передавался больше двух секунд, или на основании цифры коннекта.
- qcc при изменении размеров окна xterm'а изменяет размер своего экрана.
  Это работает только на ncurses с версией > 4.2 (не работает со стандартными
  ncurses из FreeBSD 3.x, например).
- При использовании нового ZModem'а появляется поддержка протокола DirZap.
  Буква в строке PortOrder `D'. При использовании старого ZModem'а `D'
  просто игнорируется.
  Для странных файлов, состоящих из сплошных управляющих символов
  производительность возрастает в два раза. Для архивов (где все символы
  равновероятны) производительность вырастает приблизительно на 2%.
- Новое слово в конфиге: standardemsi (yes|no). По-умолчанию `yes'.
  Теперь **EMSI_INQC816 посылается два раза за каждую попытку на исходящих
  звонках, если `standardemsi yes'. 
  Это соответствует стандарту и должно помочь избежать проблем с глупыми
  cisco, которые хотят видеть и login и password. Но некоторые мейлеры не
  понимают такого (в нарушение стандарта). Если есть проблемы на исходящих -- 
  ставьте эту переменную для проблемных линков в `no'.
- Makefile переписан таким образом, что бы при необходимости обновлять скрипт
  configure и config.h.in, а так же перезапускать генерацию всех необходимых
  для компиляции файлов (Makefile, config.h, src/Makefile, src/ver.c) при
  изменениях шаблонов.
  Все это сделано для того, что бы люди, апгрейдящиеся через cvs или патчи не
  забывали, что все эти файлы не хранятся в репозитории и не патчатся.
- bugfix: В новом ZModem'е теперь не будет паузы на входящих, если у ремоты
  для нас ничего нет.
- bugfix: В новом ZModem'е правильно показывается размер принимаемого файла.
  Теоретически, из-за этого же бага раньше могла не работать докачка
  (практически она работала во всех моих экспериментах).
- bugfix: Значение по-умолчанию для ProtOrder'а приведено в порядок (JHZ1)
- bugfix: FREQ'и на Janus'е теперь отдаются.

Version 0.49.4
~~~~~~~~~~~~~~
- При использовании нового ZModem'а можно задавать размер окна на прием и на
  передачу: слова конфига zrxwin и ztxwin. Если принимающая сторона запросила
  окно меньшее, чем стоит в конфиге (но не нулевое), используется размер окна
  передачи из конфига. Иначе -- запрошенное.
  Окно приема передается посылающей стороне, но не все мейлеры используют
  это значение.
  Значения по-умолчанию -- 0 (потоковый режим).
  На очень плохих линиях ненулевое окно сильно помогает. Не стоит ставить окно
  меньше, чем 8Kb (8192) на ZedZap'е.
- На Hydra можно включить окна приема и передачи: слова конфига hrxwin и
  htxwin. Это должны поддерживать все мейлеры, вообще поддерживающие Hydra.
  Значения по-умолчанию -- 0 (потоковый режим).
- Новый, написанный полностью с нуля ZModem.
  Новый ZModem выбирается при конфигурации параметром configure
  --with-new-zmodem.
  ZModem испытан на совместимость на очень плохой линии с большими задержками
  с T-Mail, FH-Mail, SF-Mail, Argus, KittenMail, XMail/32, Bink/+, Xenia Mail,
  DVMail и на хорошей линии с GPMail и bforce.
  Поддерживается защита от двойного скипа/suspend'а.
  Поддерживаются как потоковый режим, так и режим скользящего окна и режим с
  буферизацией (этот режим включается только если принимающая сторона не
  умеет FullDuplex, я таких не видел).
- Умеем делать локи через open(...,O_CREAT|O_EXCL). Это не будет работать
  на NFS, но будет работать на VFAT.
  Способ создания локов выбирается перед компиляцией параметром configure
  --with-lock-style=(open|link). Если параметр не указан, то используется
  старый метод (link).
- Должны собиратся на Linux'е, и вообще, все общеупотребимые h-файлы 
  собраны в одном месте (headers.h).
- Умеем собираться на системах, где нет struct tm.tm_gmtoff (SlackWare 4).
- Теперь в master-log пишем не только ``calls delayed ...'', но и новый
  статус узла.
- bugfix: Теперь по ``qico -cX <Address>'' умеем звонить на узлы, прописанные
  только в subst.  
- bugfix: Теперь при удлинении телефонов из-за трансляции не будет портится
  память (Thnx. to Sergey Korshunoff).
- bugfix: После звонка по ``qico -cX <Address>'' могли написать в лог
  ``Can't call to <Address>''.
- bugfix: Пофиксили Janus, что бы FH-Mail мог нам посылать больше одного
  файла.
- bugfix: Для вывода года используется "%y" , а не "%g" (что более стандартно)
- bugfix: Теперь в отчете о FREQ'е пишется те же progname, version и osname,
  что и в EMSI (то есть, используются значения из конфига, если они есть).
- bugfix: Теперь при неудачном создании лок-файла временный файл удаляется.
  (при lock-style=link)
- bugfix: Janus мог терять файлы при некоторых достаточно экзотических обрывах
  связи.
- bugfix: Теперь qcc правильно показывает статус (когда вообще показывает)
  (Patch from Sir Raorn <raorn@binec.ru>).

Version 0.49.3
~~~~~~~~~~~~~~
- ВНИМАНИЕ! Формат статусных файлов изменился. Пожалуйста, удалите 
  *.qst из аутбаунда!
- Теперь можно указать flavor пола в `qctl -p' и можно не указывать flavor
  аттача в `qctl -s'. Если flavor не указан, то берется из конфига.
- Новая переменная в конфиге: pollflavor, задает flavor, с которым создаются
  поллы при обрыве связи и пропускании flavor'а в командной строке qctl
  при аттаче и полле.
- Новая переменная в конфиге: callonflavors, регулирует, в каком случае
  начинать прозвонку.
- Новая переменная в конфиге: immonflavors, регулирует, в каком случае
  не проверять время работы ноды.
- Умеем аттачить файлы со статусом Imm.
- bugfix: Изменен способ ожидания сообщений от управляющих программ: теперь
  демон не виснет при переводе времени вперед.
- bugfix: Теперь работает clearundial (Thnx to Alexey Froloff, 2:5020/2115.3)
- bugfix: Теперь FREQ на Janus работает и в том случае, если у удаленной
  стороны ничего для нас нет.
- bugfix: Теперь Janus-сессия не рвется, если файл для передачи не может быть
  открыт.
- bugfix: Теперь понимаем .ilo и .iut (Imm)
- bugfix: Теперь видим в нодлисте ноды, которые прямо под Zone (Zone:Zone/node)
  и видим ZC как Zone:Zone/0.
- bugifx: Если в нодлисте ошибки (например, строки были ``завернуты''
  редактором), то ругаемся на stderr и не падаем в core.
- bugfix: Теперь работает refuse на Hydra. Раньше воспринимался как skip.
- bugfix: Теперь тип файла определяется точнее, some.SAmple не будет считаться
  эхомейлом, а some.PKType -- нетмейлом.
- bugfix: В Makefile снова подставляется @CONFIG@, в прошлый раз слишком
  упростил configure.in
- bugifx: Закрываем принимаемый файл при обрыве связи на Janus, и,
  соответственно, пишем в лог строчку об этом.

Version 0.49.2
~~~~~~~~~~~~~~
- Новая возможность: dialdelta, случайное изменение dialdelay
  (Patch from Sir Raorn <raorn@binec.ru>)
- Новый параметр у configure: --with-shell=XXX, /bin/sh по умолчанию
- Новый параметр у configure: --with-tcp-speed=XXX, 115200 по умолчанию.
- Новый параметр у configure: --with-default-speed=XXX, 9600 по умолчанию.
- bugifx: Часть `:speed' в описании порта теперь действительно optional
- bugfix: С AMIGA4D теперь собираемся.
- bugifx: Учитываются subst'ы при звонке по `-c'
- bugifx: Исправлен баг в Hydra по рецепту Игоря Ванина и GPMail'а
- bugifx: Hydra поправлена до стандарта (знаменитый баг в Ленцовских
  исходниках)
- bugfix: В протоколе Janus теперь максимальный размер блока 2K (что правильно)
- bugfix: --enable-aso теперь работает

Version 0.49.1
~~~~~~~~~~~~~~
- Добавлен параметр mincpsdelay: сколько секунд пропускать, прежде чем
  реагировать на mincps{in|out}
- qctl теперь может создавать несколько поллов за один раз
  (by Michael Kulinich)
- ...и киллов тоже (оно само получилось ;)
- bugfix: stuff/ftn: qctl -Q -> qctl -q
- bugfix: поправлено поведение CallerID, Date в `if'
- bugfix: qico ставился в $sbindir, а ipc-ключ прописывался как для
  $bindir

Version 0.49.0
~~~~~~~~~~~~~~
- при подключении морды отсылается очередь/инфа из emsi.
- новый ключик -K у qctl - прибить все req'и, ?lo-шки, файлы из них,
  которые k/s и файлбоксы.
- добавлен spec. дурацкий, конечно, но вдруг кому надо? ;)
- местами улучшен алгоритм обмена между мордой и мылером, теперь
  гоняем меньше ненужной информации.
- сделан autoconf, так что вместо CONFIG теперь смотрите configure --help
- теперь действия типа фреков, поллов и т.д. выполняются внешним
  рулем - программкой qctl (скоро ее функциональность будет скопирована
  еще и в qcc)
- соответственно, теперь суицидность самого qico, да и вообще всех бинарей
  объявляется неправильной ;)
- все межпроцессное взаимодействие переведено на SysV ipc,
  соотв. QIPC_SOCKET вынесен нафиг.
- pidfile теперь не обязателен, т.к. контроль за количеством копий
  тоже переложен на ipc
  (NB: если qico или qcc сдохнет и забудет убрать очередь сообщений,
       то это надо сделать руками с помощью ipcs(8) и ipcrm(8), иначе
       вы не сможете их снова запустить)
- Появились опции у `-c', по-умолчанию теперь обращаем внимание на время
  работы ноды и параметр cancall. Выходим с exit code 33, если нет портов,
  на которых можно звонить сейчас, пишем в stderr о недопустимости звонка
  в это время. Надо задать опцию `N' (`-cN') если такое поведение устраивает,
  или добавить `A' и/или `I' для подавления проверки cancall и времени работы
- сделан janus (поддержка фреков и crc32 есть) - буква J в protorder.
- полностью переделан алгоритм подсчета "мгновенного" cps. Теперь он
  не зависит от протокола и уже не совсем мгновенный, а считается по формуле:
       ( всего_приняли_байтов_текущего_файла / время_на_это_потраченное )
  но зато, по идее, теперь не должно быть неясных прыжков на гидре и пр.
- предыдущее изменение позволило сделать mincpsin/mincpsout
- сделано автоматическое снятие undialable - переменная clearundial.
- Опция LOCK_DIR перенесена из Makefile'а в конфиг (`lockdir') 
- DONT_RM_DIRS убрано нафиг. На BSO каталоги прибиваются всегда, на
  ASO даже пустой аутбаунд не трогаем.
- Добавлена опция в конфиг aftermail cmd выполняет cmd только после
  успешного принятия файлов (Thnx to Konstantin Petrenko)
- bugfix: Пишем строку `Calling...' в лог при начале звонка по `-c'.
- bugfix: Параметр `-c' теперь работает.

Version 0.48.0
~~~~~~~~~~~~~~
- Появилось понятие STABLE и CURRENT. 0.48.0 -- Первый STABLE
- Добавлен параметр `-c' (force call) из мертвой версии 0.45.4
- bugfix: две точки в имени файла

Version 0.46.2
~~~~~~~~~~~~~~
- Теперь конфиг копируется при инсталляции, а не переносится
- Теперь конфиг ставится как qico.conf.sample
- Максимальная строка log-файла увеличена в 16 раз.
  Теперь не будем падать при E_DEBUG и длинных EMSI_DAT (надеюсь,
  этого хватит!)
- Теперь по-умолчанию собираемся без отладочной информации
- bugfix: Поправлен завис в ZModem'е, возникающий при посылке, если 
  потерян SIGHUP
- bugfix: Теперь собирается с E_DEBUG (Наконец!)
- bugfix: Конвертация имени файла в формат 8.3 (DOS) теперь не трогает
  большее количество спец. символов.

Version 0.46.1
~~~~~~~~~~~~~~
- Теперь имя файла при конфликте имен в inbound'е изменяется аккуратно -
  допускаются только алфавитно-цифровые символы, может изменятся не только
  последняя буква имени, в крайнем случае файл оставляется в inbount/tmp
- Вывод компилятора нодлиста теперь идет в stdout вместо stderr
- При конвертации длинных имен (LNC) tar.gz меняется на tgz, tar.bz2 на tb2
  (Max Levenkov)
- bugfix: Убраны возможные баги при конверсии длинных имен (Max Levenkov)
- bugfix: Мелкая бага при приеме байтов (Thnx. to Denis Shaposhnikov)
- bugfix: при ответе по IP теперь пишем в лог IP-адрес удаленной стороны,
  а не свой 
- bugfix: Теперь собирается с E_DEBUG
- bugfix: Поправлен баг в stuff/ftn (из эхи ifmail)

Version 0.46.0
~~~~~~~~~~~~~~
- Теперь Lev Serebryakov не отмечается в Changes как (LS)
- FREE_BSD=1 перенесено в CONFIG
- Все положено на CVS
- Изменен порядок нумерации версий
- Лицензия поменяна с жесткой GPL2 на свободную BSD-Like
- Новые адреса в README

Version 0.45pl3.1ls3
~~~~~~~~~~~~~~~~~~~~
- (LS) bugfix: Теперь не звоним на PVT-узлы и более строго проверяем телефон
       (не просто две цифры, а только символы, могущие появится в номере:
        0-9,'*','#','T','P','R','W',',','.','-')
       (Благодарности Denis Shaposhnikov)
- (LS) bugifx: emsi_init() поправлена _против_ стандарта, но так, что бы ее
       понимала CISCO.
- (LS) bugfix: Убрано -DFREE_BSD=1 в Makefile, оставшееся там по ошибке.

Version 0.45pl3.1ls2
~~~~~~~~~~~~~~~~~~~~
- (LS) free() заменена на параноидальную sfree()
- (LS) bugfix: убран завис в emsi_init(), теперь таймаут 60 секунд или
       10 попыток (что наступит раньше). В FSC тут тайматуов не предусмотрено.

Version 0.45pl3.1ls1
~~~~~~~~~~~~~~~~~~~~
- (LS) Новые буквы для mapin/mapout (смотри qico.conf).
- (LS) Новое условие в конфиге -- file <fullpath>.
- (LS) bugfix: вызов aftersession с правильными параметрами
- (LS) bugfix: подсчет размеров файлов в файлбоксах

Version 0.45pl3
~~~~~~~~~~~~~~~
- (ED) скипалка по удалению файла
- (ED) если кончилось место, то прерываем прием файла правильно
- еще генераторы статистики by Andrey Lomov
- bugfix: несколько мелких исправлений по мотивам fido7.ifmail
- bugfix: если нодлист имеет время, отличное от времени, записанного в
  индексе, то не коримся а пишем ошибку.
  Warning! формат индекса изменился, обязательно запустите qico -n!!!

Version 0.45pl2
~~~~~~~~~~~~~~~
- добавлен генератор статистики by Dmitriy Filichev: stuff/qico.stat
- (DS) в конфиге можно задавать progname, osname и version для EMSI
- (DS) патчи, касающиеся ] и } в emsi
- (ED) bugfix: pl1 и freebsd
- bugfix: починен itime

Version 0.45pl1
~~~~~~~~~~~~~~~~~
- bugfix: поправлена ересь by Eugene Don из-за которой не звонили вообще
          (2ED: давай ты будешь у меня спрашивать по сорцам если не 
	  понял, ok? ;)
- bugfix: наложены патчи от Denis Shaposhnikov

Version 0.45
~~~~~~~~~~~~
- info: моя нода сейчас по некоторым причинам в дауне, поэтому возможностей
        для тестирования стало немного меньше - в основном, это кидание
	файликами по ip на одной машине + забирание почты с босса и фреки, 
	так что глюков скорее всего станет больше... :(
- info: соотв. по тем же причинам изменились мой адрес (2:5030/736.25) и
	адрес для фреков - 2:5030/529 ;)
- bugfix: в качестве ремотного показывалось локальное время
- bugfix: не работал флаг inb и в хистори все сессии были исходящими
- bugfix: в историю и в total неправильно писался размер недопринятых файлов
          (они считались принятыми целиком)
- bugfix: если каталог %inbound%/tmp был не создан, то создать его не могли
          с ошибкой "уже существует"	  
- bugfix: на гидре починены: докачка; если файл отложили, а не пропустили 
          (эти понятия различны), то его не удаляем; ремоте говорим число
	  файлов; теперь, как и надо, говорим ремоте два имени файла - одно
	  досовское, другое длинное (соотв. убран глюк с приемом BadWazoo на 
	  ifcico);если какой-то файл не удавалось найти при отправке, то 
	  гидра повисала; теперь гидра вроде-бы стала более двухсторонней
	  (по крайней мере по ip это так, не знаю, что будет в реальности)
- bugfix: zmodem: если ремота пропускала последний файл при исходящей, то
          вторая фаза wazoo-сессии обламывалась; размер принятого файла
	  в логе был меньше действительного; теперь тоже различаем понятия
	  "пропустить" и "отложить"
- bugfix: логи нельзя было разделить для входящих и исходящих линий
- bugfix: не работало условие connect (зато работало conect ;)
- bugfix: траффик из файлбоксов не добавлялся в emsi
- теперь если мы пропускаем какой-то файл, то об этом тоже пишется в лог
- nl_langinfo() заменено на портируемую strftime()
- новый параметр autoskip - автоматически пропускать при приеме файлы, 
  подходящие под маску (можно указать несколько)
- полноценная поддержка флага FNC (приведение имен к виду 8.3 для досовских 
  мылеров), можно включить принудительно (mapout/mapin f)
- внимание! другой формат вызова в режиме ответа! теперь для mgetty надо писать
  'qico -a @'!!!
- новый параметр aftersession: имя программы, запускаемой после сессии.
- новый параметр emsilog - имя файла, в который будут скидываться полученные 
  emsi_dat пакеты
- новый параметр pidfile - теперь имя pid-файла задается не при компиляции, а
  в конфиге
- из protorder убрана буква R, т.к. RH1 - это все-таки не протокол, а опция.
  RH1 теперь используется во всех вариациях гидры, если удаленная сторона тоже
  поддерживает это расширение.
- новые протоколы: hydra-8k ('8' в protorder), hydra-16k ('6') - это расширения
  гидры, позволяющие использовать блоки до 8 и 16Kb соответственно.
  эти расширения также поддерживаются в мейлерах: Xenolink/Amiga, Zeus/Amiga,
  GMS/Amiga, Ravel/Macintosh (thanx to Cyril Moorzin, 2:5030/700 for info).
  рекомендуется включать только на скоростях от 14400 и 28800 bps соотв.
- для совместимости заменено:
     faddr_t -> ftnaddr_t
     F_xxx -> FOP_xxx
- теперь qcc показывает размер файлов и почты, выделяет узлы, на которые можно
  звонить. 
- файлы из файлбоксов теперь приравнены к файлам в .hlo, поэтому соответственно
  отображаются в qcc.
- в zmh, если нет нетмейла, то на систему не звоним.
- если ремота не показала в EMSI {TRAF}, но сказала {MOH#} то выводим в лог это
  значение. соответственно заработало предсказание траффика с sf-mail.
- bugfix: нерабочесть конструкций типа if port ... cancall ... 
- bugfix: баг с обработкой nodial (если находился порт с выставленным флагом,
  то остальные порты даже не просматривались)
- изменено значение флага wait - теперь ждем не только по hrq, если нет ничего
  кроме фреков, но и по hxt, если нет ничего кроме аркмейла и по hat в любом
  случае ;) название параметра waithrq я менять не стал.
  [!] Внимание! формат .qst файлов изменился, так что перед запуском надо
  вытереть все старые файлы из аутбаунда
- bugfix: размер файлов и почты на ASO  
- добавлена буфферизация чтения, а на zmodem еще и записи.
- bugfix: исправлен баг с сислогом - все валилось в auth (thanx to Andrey Panov)
- bugfix: обработка трансляции телефона, всегда обрабатывалась только первая. 
- теперь qcc можно собирать и на FreeBSD, добавив ключик -DFREE_BSD.          
  (from PK: имеется ввиду собираемость с ncurses-3, с 4.2 было и будет все ok
  и этот ключ не нужен) 
- bugfix(?): на FreeBSD не удалялся сокет-файл, после выхода qcc.             
- новый символ в строке инициализации ' задержка 1/5с                         


Version 0.44a
~~~~~~~~~~~~~
- bugfix: фуух, теперь EMSI вроде добил окончательно
- чуток причесаны протоколы

Version 0.44
~~~~~~~~~~~~
- bugfix: ошибки вызова фрекпроцессора: если pid был меньше 1000h, генерились
          неправильные имена файлов, не вставлялся адрес системы,
          в качестве фрекрепорта формировались не пакеты, а черт знает что %(
- bugfix: неправильно показывал время работы по qico -f XXX
- bugfix: если в полях EMSI_DAT содержались скобки ([]{}), то данные из них
          неправильно показывались.
- bugfix: дата в логе выводилась как '1 Jan 100'
- bugfix: по clo&cut не звонили
- переменные DEF_ZONE и DEF_NET убраны из CONFIG, теперь эти значения берутся
  из первой переменной address.
- поддержка RINGING (эту фичу я не тестировал, т.к. в моем модеме этого нет!)
- longname fileboxes (переменная longboxpath), имя каталога имеет вид 
  '/path/zone.net.node.point' (.0 для узлов обязателен)
- переменная pinbound убрана за ненадобностью (надо использовать if)
- переделан алгоритм работы с принимаемыми файлами, теперь и для них можно
  задать преобразование имен - параметр mapin
  
Version 0.43
~~~~~~~~~~~~
- bugfix: вернул взад блокирование порта (спрашивается, нафига убирал???) 
- bugfix: amiga-style outbound теперь работает
- bugfix: исправлена ошибка в проверке временных промежутков с Txy (причина 
  выставления HRQ, HXT и т.п. не вовремя) 
- bugfix: исправлена ошибка в обработке фреков на парольных сессиях  
- bugfix: время удаленной стороне теперь предъявляем локальное, а не UTC
- bugfix: регионы и независимые узлы теперь тоже попадают в индекс ;)
- filebox'ы (см. README и пример в конфиге, опция filebox)
- новые опции в конфиге: mapout и mappath. управляет правилами перекодирования 
  имен исходящих файлов и путей. подробное описание см. в конфиге и README.
  (в частности, сделаны замена обратных слэшей на прямые, замена всех
  точек, кроме последней, на '_', приведение к опр. регистру, переименование
  бандлов в формат 8.3, замена начала пути) 
- новые опция minspeed задает минимальную скорость 
  
Version 0.42
~~~~~~~~~~~~
- теперь, если ремота предъявила несколько одинаковых адресов, то дубли
  игнорируются (позвонил мне один раз такой кадр ;)
- новое условие 'cid' - проверка переменной среды $CALLER_ID, в которую mgetty
  пишет определенный номер (если модем это поддерживает). также содержимое
  этой переменной пишется в лог (для поддержки курьеровских IDSDL на mgetty 
  надо наложить патч Алексея Гречанинова - http://scorpus.cjb.net).
- добавлена переменная modemreset - последовательность команд для сброса
  модема. если указана, то выполняется перед набором номера.
- теперь строчек modemhangup может быть несколько, или вообще не быть.
  в первом случае команды выполняются последовательно, после каждой команды
  ожидается ответ.
- сделана поддержка syslog (для этого вместо имени файла лога надо писать
  $<facility>, например log $local3)
- теперь переменная log тоже может быть в условиях, а суффикс в виде имени 
  порта НЕ добавляется. лог демона задается отдельно в переменной masterlog
- badpmsg убрано, т.к. избыточно и негибко (надо использовать if bad ... )
- во временные промежутки добавлено новое ключевое слово "never", которое
  является полной противоположностью "CM" (на всякий случай)
- добавлена новая опция конфига "zmh". смысл, я думаю, понятен ;)  
- изменилась логика отзвонки на узлы, теперь:
  1. если есть subst, то звоним четко по нему.
  2. если узел - нода с флагом Hold или Down, то не звоним
  3. если есть телефон и Txy или CM - звоним в указанное время
  4. если узел - нода, есть телефон, но нет ни Txy, ни CM - звоним в ZMH
- cancall теперь проверяется после выбора порта, адреса и т.д., короче
  реагирует на условия.
- bugfix: условия-флаги теперь работают (епс, надо ж было такой бред написать... ;)
- bugfix: если получили NRQ/HRQ, .req просто убивался 
- новый способ задания нодлистов в конфиге - для автоматического выбора 
  наибольшего цифрового расширения надо писать 'nodelist filename.999'. сделано
  для того, чтобы можно было использовать листы с фиксированными расширениями.
- на свои aka теперь на всякий случай не звоним ;)

Version 0.41
~~~~~~~~~~~~
- чуток подправлен модемный код
- исправлена ошибка, из-за которой падали на фреках
- добавлены опции в конфиг: badpmsg, freqfrom, freqsubj 
- простейший внешний фрекпроцессор на bash, аналог встроенного в ifcico
- history

Version 0.40
~~~~~~~~~~~~
- динамическое конфигурирование
- подсчет траффика и время на линии за сессию 
  (еще глючит из-за старого бага)
- мелкие багфиксы и косметические изменения в emsi
- перечитка конфигов по SIGHUP
- ограничение времени на сессию
- поддержка ifextrp-совместимых фрекпроцессоров
