// EXCHANGE.C

// функция exchange выполняет диалог с удаленным модемом
// символы, принимаемые через COM-порт от модема отображаются
// на экране; символы, набираемые на клавиатуре передаются
// модему также через COM-порт

#include <conio.h>

void        exchange( unsigned com_adr );
void        disp( char, char );
int         com_out( unsigned, char );


void exchange( unsigned com_adr ) {
	int flag = 1;

	while(flag) {

		char ch_in;
		unsigned char key;
		unsigned i,j;

		// если пользователь нажал на клавиатуру, получаем код
		// нажатого символа и передаем его модему

		if( kbhit() ) {
			key =  getch();

			// по нажатию клавиши "ESC" выходим из данной функции

			if( key == 27 ) {
				flag = 0;
				break;
			}

			// если пользователь нажал Enter, передаем
			// символ перевода строки и возврата каретки

			if( key == '\r' ) {

				// посылаем символ в COM-порт
				com_out( com_adr, 0xd );

				// отображаем символ на экране
				disp(0xd,7);

				// посылаем символ в COM-порт
				com_out( com_adr, 0xa );

				// отображаем символ на экране
				disp(0xa,7);
			}

			else {

				// отображаем символ на экране
				disp( key, // код символа
						15   // его атрибут (интенсивно белый символ
							  // на черном фоне )
					 );

				// посылаем символ в COM-порт
				com_out( com_adr, key );
			}
		}

		// если получены данные от модема, отображаем их на экране

		if( from_modem( com_adr, &ch_in ) == 0 )
			disp( ch_in,  // код символа
					2       // его атрибут (зеленый символ
							  // на черном фоне )
				 );
	}
}

