# Сервисы

Сервисы - это специальные коммуникационные программы, которые запускаются из почтовой системы, когда от удаленной системы вместо пакета инициирования сеанса связи FTN приходит специальная строка.

Пользователь, соединяясь обычной терминальной программой со станцией, оснащенной системой Аргус, может воспользоваться сервисом, введя с клавиатуры специальную последовательность. Самой распространенной последовательностью для входа в BBS-сервисы являются два идущих подряд символа Escape. Так как символ Escape не являются печатными, вместо него в поле Enter используется символ косой черты (back slash).

Поле Door and parameters содержит путь к исполнимому файлу сервиса и специальные параметры.

Символ '?' перед командой/именем файла в строке Door and Paramenters сообщает о том, что процесс должен быть запущен в скрытом режиме, '!' - в нормальном режиме, а ‹??› - в DETACHED_MODE (без использования консоли). В отличие от ‹?›, флаг ‹??› можно использовать только для Win32-консольных приложений. Попытка запуска DETACHED Win3.1 или DOS-приложения вызовет ошибку. По умолчанию процессы запускаются в минимизированном окне.

Процессы могут быть запущены с определенным уровнем приоритета:

    <
| запустить с низким приоритетом (IDLE_PRIORITY_CLASS)
    +
| запустить с высоким приоритетом (HIGH_PRIORITY_CLASS)
    *
| запустить с критическим приоритетом (REALTIME_PRIORITY_CLASS)
    >
| '>' - вместо запуска приложения установить файл-флаг с именем, следующим за '>'.

По умолчанию процессы запускаются с нормальным приоритетом (NORMAL_PRIORITY_CLASS).

После соединения, в момент ожидания входа пользователя, Аргус может высвечивать заставку-приглашение для пользователей терминальных программ. Заставка устанавливается в окне настройки EMSI-данных.

## Специальные параметры

Командная строка сервиса может содержать специальные параметры, которые перед запуском сервиса транслируются в соответствующие значения. Каждый параметр начинается с символа `%`. Все параметры регистрозависимы, то есть `%c` не может быть использован вместо `%C`.

Вот как транслируется строка параметров "Door and parameters" в строку запуска, при скорости DTE 57600, DCE 21600, номере линии - 2 и port handle - 64:

Door and parameters | `d:\max\maxn.exe -s%b -b%B -n%n -p%h`
Translated execution string | `d:\max\maxn.exe -s57600 -b21600 -n2 -p64`

Вне зависимости от того, указан какой-либо параметр или нет, система Аргус создает для запускаемого сервиса блок переменных окружения, в котором передаются все значения специальных параметров.

| Environment | Description | Dialup value | TCP/IP value
    %B
    ARGUS_DCE
| Скорость соединения | DCE (modem to modem) | Значение берется из “подразумеваемой скорости соединения”
    %b
    ARGUS_DTE
| Скорость порта | DTE (computer to modem) | такое же, как и `%B`
    %e
    ARGUS_CONNECT
| Строка CONNECT (пробелы заменены на подчеркивания) | такая, как вернул модем, например "`16800/ARQ/HST`” | формируется TCP/IP Daemon›ом на основе адреса и порта соединения, например: "`To 194.213.233.33 #24554`”
    %E
    ARGUS_CONTROL
| Транслированный код коррекции ошибок | "`MNP`", если в строке CONNECT присутствует MNP, ARQ или REL, иначе пустая строка | Всегда "`TCP/IP`"
    %L
    ARGUS_NAME
| Имя линии почтовой системы (пробелы заменены на подчеркивания) | берется из названия линии, указанного в диалоге dialup/lines/line | "TCP/IP" плюс порядковый номер TCP/IP соединения, например: "`TCP/IP 3`"
    %n
    ARGUS_LINE
| Номер линии почтовой системы | Порядковый номер в списке dialup/lines, например "`1`" для первой линии | порядковый номер TCP/IP соединения, например "`2`" для линии "`TCP/IP 2`"
    %h
    ARGUS_HANDLE
| Communication resource handle | COM port Win32 handle | WinSock2 overlapped socket handle
    %C
    ARGUS_NUMBER
| Номер порта | Номер COM-порта, например "`1`" для COM1 или "`4`" для COM4 | Номер TCP/IP-порт, например: 24554 для BinkP.
    %p
    ARGUS_INDEX
| Индекс порта | Номер порта, считаемый с нуля, например "`0`" для COM1 или "`3`" для COM4 | такой же, как и `%C`

Если внешнее приложение является полноценной Win32-программой, оно может унаследовать Win32-handle открытого коммуникационного порта (или соединенного Winsock2 overlapped socked), и использовать этот порт (или socket) для передачи данных.

## Специальный параметр %Z

Параметр `%Z` всегда транслируется в пустую строку - он предназначен для того, чтобы сообщить системе Аргус о необходимости закрыть порт перед запуском внешнего приложения. После завершения работы приложения Аргус снова откроет порт. Параметр `Z%` предназначен для приложений Windows 3.1 и DOS, которые не в состоянии оперировать с портом, открытым в режиме Win32. Поэтому Windows 3.1 и DOS-приложения должны открывать и инициализировать порт самостоятельно.

Параметр `%Z` следует использовать с большой осторожностью. При закрытии порта, драйвер Windows сбрасывает все контрольные сигналы UART (см. Контроль потока данных), в том числе DTR, который в большинстве модемов применяется для инициализации. Поэтому, для передачи COM-порта DOS- и Windows 3.1-приложениям, необходимо настроить модем так, чтобы он не воспринимал изменение сигнала DTR как сброс.

Специальные параметры используются также в строке External Fax Receiver диалога конфигурации модемов для запуска внешних программ по приему факсов.

См. также Конфигурация внешних приложений.

## Пример

Последовательность действий для установки системы Аргус с Proboard BBS под Windows NT (при некоторых изменениях подходят для Windows 95), модем USR Sportster 28800 with Fax (пример предоставил Sean Rima):

1. Добавьте драйвер FOSSIL в \winnt\system32\config.nt, например `device=c:\dos\bnu.sys /p=01`

2. Argus / Config / Dialup / Modems, выберите Ваш модем и добавьте к строке инициализации `AT&C1&D0`.

3. Добавьте к Argus / Advanced / Externals / Doors строку “Enter = `pp`” и “Door and Paramenters = `c:\pb\proboard.exe %Z -b%B -p%C`”