,sS$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$Ss,
$$$$'                    qico, an ftn compatible mailer                    `$$$$
$$$.                         * version 0.49.10si *                         ,$$$$
`?S$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$S?'

Features:
~~~~~~~~
 * Протоколы EMSI, ZModem, ZedZap, Hydra (Std, 8k, 16k), Janus.
 * Поддержка 4D Binkley-Style, Amiga-style outbound, FileBoxes, LongNameBoxes.
 * "Морда" - программа, позволяющая управлять работой мейлера (ncurses based).
 * Режим демона для исходящих звонков.
 * Асинхронная работа менеджера очереди и сессий(как входящих, так и исходящих).
 * Встроенный быстрый компилятор нодлистов c маленькими индексами.
 * Встроенная утилита для работы с аутбаундом, более удобная, т.к. следит за
   состоянием bsy-файлов.
 * Подстановки (substs) с поддержкой hidden-линий.
 * Проверка файл-флагов запрета исходящих звонков на портах.
 * Встроенная "гляделка" нодлиста.
 * Динамическая конфигурация - возможность изменять большинство параметров
   конфига во время работы в зависимости от различных условий.
 * Возможность ограничения времени на сессию.
 * Поддержка WaZOO- и SRIF-совместимых фрекпроцессоров.
 * Поддержка всевозможных преобразований локальных и посылаемых путей и имен
   файлов (поддержка досовских аутбаундов и т.д.).
 * Возможность ограничения минимальной скорости коннекта.
 * Возможность пропуска/задерживания входящих файлов.
 * Чат.
 
Building & Installation
~~~~~~~~~~~~~~~~~~~~~~~
   Проверено на рабочесть под:
     - Linux 2.2.11-4bc i586 (glibc-2.1, ncurses-4.2)
     - FreeBSD 2.2.6-4.x
       (Note: для сборки на 2.2.x-3.x qcc должна стоять ncurses из портов!)

   На других OS не пробовал, но очень хочу узнать, что получится ;)
   На архитектурах, отличных от х86 пока не работает ввиду зависимости в 
   некоторых местах от порядка байт. Как только в мой телнет попадет живой 
   big-endian, сделаю поддержку ;) 

   $ configure --help
   $ configure [нужные опции]
   $ make
   $ make install или make install-strip
   
   Положить конфиг в нужное место, подправить его под свои нужды.
  
Using
~~~~~
 * Для исходящих достаточно запускать qico -d из какого-нибудь startup-скрипта,
   а poll'ы генерить по cron'у.
 * Для входящих (в случае mgetty) необходимо вписать следующую строчку в
   login.config (mgetty должен быть собран с -DFIDO):
       /FIDO/  $USER $USER $BINDIR/qico -a @
   где $USER и $BINDIR значения соответствующих переменных из CONFIG.
 * Можно еще прописать в inetd.conf для ответа по tcp/ip ifcico.
 * qcc. Все кнопки регистрозависимы, краткую справку можно получить, нажав F1. 
   Там всё очень кратко/малопонятно, поэтому постараюсь объяснить тут.
   Если в хелпе написана одна кнопка, то надо жать именно её. В командах
   смены статуса кнопка в нижнем регистре сбрасывает соответствующий флаг,
   а кнопка в верхнем регистре (с шифтом) - устанавливает. В командах, где
   указано по две кнопки (т.е. одна, но в разных регистрах), при нажатии кнопки
   в нижнем регистре спрашивается адрес, для которого нужно выполнить действие,
   а при нажатии кнопки в верхнем регистре (с шифтом), в качестве адреса
   используется текущий адрес (тот, что под курсором).
   В поле адреса допускается краткая форма записи. Например, если текущий адрес
   2:5050/125, то при вводе '33' получим адрес 2:5050/33, а при вводе '.12'
   получим 2:5050/125.12. Поэкспериментируйте сами, разберётесь. ;)
   Так-же редактор строки ввода запоминает 48 последних набранных строк,
   прокручивание осуществляется клавишами `вверх' и `вниз', `pgdn` - очистка.
   В окнах с коннектами можно листать последние 256 строчек лога клавишами
   up\down\pgup\pgdn\home\end\ins\del. Последние две прокручивают по 2 строки.
   В главном окне лог не листается. В чатовом окне, надеюсь, всё и так понятно.

Notes:
~~~~~
 # Поддерживается _только_ 4D BSO, т.к. 5D имхо и нафиг не нужен - только
   глюки плодить. При ftn-style софте потери совсем незаметно, а для гейта,
   если хочется f56.n34.z12.othernet.org, а не f56.n34.z12.fidonet.org, то
   можно юзать domtrans. И потом, не забывайте про сим- и хардлинки ;)
  
 # .REQ является поводом для звонка и аналогичен паре .REQ+.FLO для ifcico.

 # Структура .QST:
 <N попытки> <флаги> <время окончания холда> <время окончания undial>

 # Все временные промежутки могут быть указаны как в формате d.hh:mm-d.hh:mm 
   (дни и/или минуты могут быть опущены), тогда они воспринимаются как 
   локальное время, так и в формате Txy, тогда они считаются относительно UTC.
   Вместо 00:00-23:59 можно просто написать CM, вместо 0:00-0:00 - Never
   Можно написать несколько промежутков через запятую.
   В условиях также можно использовать промежутки в формате ifcico (иногда 
   это удобнее).

 # Чтобы описать хиддены, просто пропишите несколько subst'ов для одного адреса.
   Нодлистовая линия в этом случае игнорируется, так что ее надо тоже прописать
   как subst.

 # Если у вас совсем нет никаких листов и они и не нужны, все равно придется 
   прописать хотя бы один (хоть и несуществующий) лист и создать пустой 
   индекс, запустив 'qico -n'.
   
 # Если нужно перечитать конфиги, не делайте "killall -HUP qico", т.к. это
   загасит все открытые сессии ;) Правильнее делать qctl -R.
   Это также относится и к "killall qico"/"qctl -q". 
 SP: открытые сессии не гасятся, но управление ими стаёт невозможным.
   а вообще, можно просто нажать `R' в qcc, конфиги нормально перечитаются.
 
 # Вся информация, которая используется для проверки условий в конфиге
   до emsi берется из нодлиста и subst'ов, а после - из полученного emsi.

 # В качестве фрекпроцессора можно взять мой же ifextrp-pk (лежит там же,
   где и qico) или оригинальный ifextrp by Serge Oskin.
 SP: а теперь появилась возможность использовать SRIF-совместимые 
   фрекпроцессоры, которые обычно более функциональны.

 # "History" сделана для быстрой и легкой генерации статистики (должно хватать
   одного awk). Формат следующий (одна строка - одна сессия):
   <line>,<time>,<length>,[P][L]{I|O}{1|0},<address>,<sent_bytes>,<recd_bytes>
   где <line> - терминал или tcpip для tcp/ip-сессий
       <time> и <length> - в секундах (unix time)
       P - protected, L - listed, 
       I/O - inbound/outbound, 
       1/0 - succesful/failed

 # FileBox'ы сделаны по аналогии с ifcico - файлы из них отдаются в самом конце,
   poll'а не вызывают, после успешной передачи удаляются. Обрабатываются
   только обычные файлы и симлинки. LongNameBox'ы - тоже самое, только
   просматривается каталог с именем вида '$longboxpath/zone.net.node.point'.

 # Прочитайте внимательно верхушку конфига насчет условий! Эта штука позволяет
   разделить логи/инбаунды/аутбаунды/прятать или добавлять разные aka
   для разных линий и/или в зависимости от времени, удаленного адреса, телефона
   CID'а и т.д. Короче, на каждую комбинацию условий у вас фактически будет
   отдельный конфиг.

 # Догадываюсь, что описание опции mapout в конфиге более чем туманно, так что
   попробую объяснить по русски ;) Итак, преобразования имен делятся на два
   типа - преобразование локальных имен, которые будут открываться для
   пересылки и имен, под которыми файлы получит удаленная сторона.
   Преобразования, заданные большими буквами + mappath влияют только на
   локальное имя, их надо подогнать так, чтобы файлы прописанные в лошках
   мейлер мог открыть, а остальные преобразования можно уже настроить так, как
   вам хочется, чтобы ремота получала файлы.


Authors
~~~~~~~
Pavel Kurnosoff, 2:5030/736.25, pqr@yasp.com, icq 45906870 (up to 0.45pl3.1)
Lev Serebryakov, 2:5030/661.0, lev@serebryakov.spb.ru, icq 3670018
Stepan Pologov, 2:5050/125, sisoft@udm.net

