Ассемблер и программирование для IBM PC



         

ГЛАВА 17. Дисковая память III: Расширенные функции DOS - часть 7


------------------------------------------------------------ ------------------------------------------------------------

Ассемблер для IBM PC. Глава 17. 7

Рис.17.3. Чтение ASCII-файла.

Программа выполняет в основном те же функции, что и DOS TYPE, т.е. выводит на экран каждую запись до символов "возврат каретки" и "конец строки" (CR/LE). Прокрутка содержимого экрана (скроллинг) вызывает некоторые проблемы. Если в программе не будет предусмотрено специальной проверки на конец экрана, то вывод новых строк будет осуществляться поврех старых и при короткой длине старые символы будут оставаться справа от новой строки. Для правильной прокрутки необходимо подсчитывать строки и контролировать достижение конца экрана. Так как строки ASCII-файла имеют переменную длину, то следует определять конец каждой строки прежде, чем выводить ее на экран. Рассматриваемая программа считывает полный сектор данных в область SECTOR. Процедура G10XFER передает данные побайтно из области SECTOR в область DISAREA, откуда они будут выдаваться на экран. При обнаружении символа "конец строки", процедура выводит на экран содержимое DISAREA, включая "конец строки". (Экран дисплея принимает также символы табуляции (шест.09) и автоматически устанавливает курсор в следующую справа позицию кратную 8). В программе необходимо проверять конец сектора (для считывания следующего) и конец области вывода. Для стандартных ASCII-файлов, таких как ASM-файлы, каждая строка имеет относительно короткую длину и гарантировано заверша ется парой символов CR/LF. Нетекстовые файлы, такие как EXE или OBJ, не имеют строк и поэтому рассматриваемая про грамма должна проверять достижение конца области DISAREA во избежание разрушения. Хотя программа предназначена для вывода на экран только ASCII-файлов, она имеет проверку для страховки от всяких неожиданных несимвольных файлов. Процедура G10XFER выполняет следующее: 1. Инициализирует адрес области SECTOR. 2. Инициализирует адрес области DISAREA. 3. При достижении конца области SECTOR считывает следующий сектор. В случае конца файла, завершает работу программы, иначе инициализирует адрес области SECTOR. 4. При достижении конца области DISAREA вставляет символы CR/LF, выводит строку на экран и инициализирует адрес DISAREA. 5. Переписывает символ из области SECTOR в область DISAREA. 6. По символу "конец файла" (шест.1A) завершает работу про граммы. 7. По символу "конец строки" (шест.OA) выводит на экран строку и переходит на п.2, по другим символам идет на п.3.




Содержание  Назад  Вперед