#include "sysp.h"

// объявления функций
void com_out( unsigned, char );
void to_modem( unsigned, char* );

/**
*.Name         to_modem
*
*.Title        Передает модему строку, оканчивающуюся нулем.
*
*.Descr        Эта функция передает модему строку, оканчивающуюся нулем.
*
*.Proto        void to_modem( unsigned base_address, char *out_str );
*
*.Params       unsigned base_address - базовый адрес асинхронного адаптера,
*              на котором находится модем;
*
*              char *out_str - массив символов, передаваемый модему,
*              заканчивается нулем
*
*.Return       не используется
*
*.Sample       to_modem.c
**/

void to_modem( unsigned base_address, char *out_str ) {

	int i;

	// последовательно передаем модему каждый символ из строки

	for( i = 0; out_str[i] != '\0'; i++ )
		com_out( base_address, out_str[i] );

	// заканчиваем передачу строки и посылаем модему код
	// перевода коретки, вызывающий исполнение введенной команды

	com_out( base_address, 13 );
}


/**
*.Name         com_out
*
*.Title        Передает модему один символ.
*
*.Descr        Эта функция передает один символ.
*
*.Proto        void com_out( unsigned base_address, char out_char )( unsigned base_address, char out_char );
*
*.Params       unsigned base_address - базовый адрес асинхронного адаптера,
*              на котором находится модем;
*
*              char out_char - символ, передаваемый модему,
*
*.Return       не используется
*
*.Sample       to_modem.c
**/

void com_out( unsigned base_address, char out_char ) {

	unsigned char LCR, next;

	// ожидаем пока освободится регистр передатчика
	// и можно будет передать следующий байт

	for( next = 0; next == 0; )
		next = 0x20 & inp( base_address + 5 );

	// записываем передаваемый байт в регистр данных
	// для последующей его передачи модему

	outp( base_address, out_char );
}
