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