Применение обозначений опций termcap для управления терминалом пользователя
Процедура tcout принимает в качестве параметров имя стандартной опции терминала termcap3 и указатель на выходной файл терминала. В ней используется функция getenv для извлечения информации о типе терминала из переменной среды TERM, а затем вызывается процедура tgetstr для поиска необходимой последовательности символов, позволяющей добиться указанного эффекта на экране терминала пользователя. И наконец, в ней вызывается процедура xfputs для вывода результирующей последовательности символов на терминал. /* Файл tcout - процедура tcout */
Вывод блока данных на сервер
Для вывода блока данных на сервер в процедуре telnet вызывается процедура sowrite.
/* Файл sowrite - процедура sowrite */ tinclude tinclude tinclude "tnfsm.h" extern struct fsm trans sostab[]; extern int sostatej extern unsigned char sofsm[][NCHRS];
Процедура sowrite обрабатывает в цикле каждый символ в указанном блоке и вызывает на выполнение конечный автомат sof sm для обработки каждого символа. www.sotmarket.ru - htc legend wtyf
Взаимодействие с клиентским процессом
Как и большинство клиентских программ TELNET, наша реализация предусматривает для пользователя возможность взаимодействия с клиентским процессом. Для этого пользователь вводит на клавиатуре управляющий символ, а затем команду. В табл. 27.1 приведен перечень возможных команд, которые могут следовать за управляющим символом, и указано их назначение. В соответствии с системой обозначений, принятой в протоколе TELNET, запись "X указывает, что символ формируется при удержании клавиши {Ctrl} и одновременном нажатии клавиши {Х}.
Файл telnet.h содержит символические определения для каждого из символов клавиатурных команд. Например, в нем определено, что клавиатурный управляющий символ KCESCAPE соответствует символу {Ctrl+l}, т.е. символу с восьмеричным значением 035.
При обнаружении введенного с клавиатуры управляющего символа клиентская программа переводит конечный автомат вывода в сокет из состояния KSREMOTE в состояние KSLOCAL и интерпретирует следующий символ как команду. Поскольку большинство команд состоят из одного символа, конечный автомат вывода в сокет обычно снова переходит в состояние KSREMOTE и выполняет исполнительную процедуру, связанную с этой командой. Например, если конечный автомат вслед за символом KCDC0N обнаруживает символ ESCAPE, он вызывает процедуру dcon.
Ответ на недопустимые команды. Если пользователь вслед за введенным с клавиатуры управляющим символом вводит нераспознанный символ, конечный автомат вывода в сокет вызывает исполнительную процедуру sonotsup, которая выводит сообщение об ошибке. Файл sonotsup.c содержит следующий код.