Программирование игр для Windows. Советы профессионала

       

Чтение символа из буфера


Теперь нам необходимо иметь возможность считывать символ из буфера. Это легко. В принципе, достаточно запомнить новый индекс, указывающий на текущую ячейку буфера, из которой будет прочитан следующий символ. Но что если мы попытаемся прочитать символ и изменить индекс, в то время как основная программа уже исчерпала все входные данные, пришедшие от преры­вания? В этом случае функция просто-напросто будет возвращать символ 0. Листинг 14.2 содержит подходящую программу.

Листинг 14.2. Функция Serial Read.

int Serial_Read()

{

// функция возвращает последний записанный

//в программный буфер символ

int ch;

//ждем завершения функции обработки прерывания

while(serial_lock){}

//проверяем, есть ли символы в буфере

if (ser_end != ser_start)

{

// меняем значение начальной позиции буфера

if (++ser_start > SERIAL_BUFF_SIZE-1) ser_start = 0;

// читаем символ

ch = ser_buffer[ser_start];                                     

// в буфере стало одним символом меньше

if (char_ready > 0) --char_ready;

// возвращаем символ'вызвавшей функции

return(ch) ;

} // конец действий, если буфер не пуст

else

// буфер был пуст - возвращаем 0

return(0);

} // конец функции

Функция serial_read получает следующий доступный символ из буфера и возвращает его. Если в буфере не осталось данных, она возвращает 0.



Содержание раздела