Графические устройства

         

А 1 Подпрограмма ввода спецификации и открытия файла



Пример А.1. Подпрограмма ввода спецификации и открытия файла

GetSpec : push Cur win сохранение исходного значения Cur win
mov ax, Inflinw ax = номер окна информационной строки
mov Cur win, ax Cur win = ax
call Savinfo сохранение исходного фона
jmp short outstr переход на выборку первого символа
BUtl: call outsgn вывод на экран очередного символа
outstr: lodsb al = код очередного символа (al = ds : si)
or al, al конец выводимого текста ?
jne outl -> нет, переход на метку outl
call Inline ввод строки теста с клавиатуры
call Delinfo удаление информационной строки с экра на
pop Cur win восстановление исходного значения Cur win
call setwin восстановление исходного окна
mov al, Linbuf al = первый байт строки
or al, al спецификация введена?


jnz OpenFr -> нет, пустая строка
xor ah, ah очистка регистра ah
ret возврат из подпрограммы
OpenFr: lea dx, Linbuf dx = адрес начала спецификации файла
mov ax, SDOOh al = 0, ah = 3D — код функции
int 21h обращение к DOS для открытия файла
ret возврат из подпрограммы

Первые 13 команд подпрограммы повторяют текст примера 5.29. В этой части на экран выводится подсказка оператору, а в буфер Linbuf записываются вводимые с клавиатуры символы. После нажатия оператором на клавишу <Enter> в Linbuf записывается пустой байт, ввод прекращается, подсказка и ответ оператора удаляются с экрана, а на их месте восстанавливается исходное изображение.

Дополнительные действия начинаются с анализа содержимого первого байта буфера Linbuf. Если он пуст, то просто очищается регистр ах и происходит возврат из подпрограммы. Это предусмотрено на тот случай, если оператор раздумает вводить спецификацию и просто нажмет клавишу <Enter>.

Если первый байт Linbuf не пустой, то предполагается, что оператор ввел спецификацию. В таком случае в регистр dx загружается адрес Linbuf, в регистр ах записываются код функции 3Dh и признак открытия файла для чтения (оо). После этого происходит обращение к DOS через прерывание int 2ih и возврат из подпрограммы.
Если файл успешно открыт, то после возврата из подпрограммы С-разряд очищен, а содержимое ах отлично от нуля, его надо сохранить в переменной handle и можно читать заголовок файла.



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