Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Аппаратное обеспечение персонального компьютера

© Александр Фролов, Григорий Фролов
Том 33, М.: Диалог-МИФИ, 1997, 304 стр.

[Назад] [Содеожание] [Дальше]

Функции MS-DOS для работы с принтером

Операционная система MS-DOS имеет свои срдества, предназначенные для работы с принтером. Это функция 05h прерывания INT 21h и система буферизованной печати.

Функция MS-DOS для вывода на принтер

Для печати символа на стандартном печатающем устройстве PRN вы можете использовать функцию 05h прерывания MS-DOS INT 21h:

Регистры на входе:

AH = 05h;

DL = код ASCII символа для печати

Регистры на выходе:

AH = слово состояния принтера

Ниже мы привели исходный текст функции printchar, которая распечатывает символ, передаваемый ей в качестве параметра, при помощи описанной выше функции MS-DOS:


int printchar(int chr) 
{
  // Дублируем распечатываемый символ на экране
  putch(chr);

  // Вызываем функцию 5 прерывания INT 21h -
  // распечатка символа на принтере.
  rg.h.ah = 5;
  rg.h.dl = chr;
  int86(0x21, &rg, &rg);
}

Функция 05h по умолчанию работает с устройством PRN, однако с помощью команды MODE вы можете переназначить стандартное устройство печати LPT1, например, на асинхронный последовательный адаптер COM1:


MODE LPT1:=COM1

Заметим, что функция 05h прерывания INT 21h не возвращает состояния принтера при ошибке ввода/вывода. Вместо этого вызывается стандартный обработчик критических ошибок MS-DOS, который выводит на экран хорошо знакомое вам сообщение:


Write fault error writing device PRN
Abort, Retry, Ignore, Fail?

Вы можете ответить Retry, нажав клавишу <R>, и тогда MS-DOS выполнит попытку повторить печать символа. Если ответить Abort (нажав клавишу <A>), MS-DOS завершит работу вашей программы.

Если вас не устраивают действия, выполняемые стандартным обработчиком критических ошибок MS-DOS, вы можете составить собственный. О том, как это сделать, можно узнать из 18 и 19 томов «Библиотеки системного программиста», посвященных программированию для MS-DOS.

Система буферизованной печати

Более интересные возможности по управлению процессом печати предоставляет резидентная программа буферизованной печати PRINT.EXE. Напомним, что команда PRINT операционной системы MS-DOS предназначена для выполнения печати в фоновом режиме.

Оказывается, что если запущена программа PRINT, другие программы могут взаимодействовать с ней, управляя процессом печати.

Для связи с системой буферизованной печати можно использовать несколько функций прерывания INT 2Fh, которые мы рассмотрим ниже.

Проверка установки системы буферизованной печати

С помощью этой функции программа может проверить, установлена система печати или нет, а также определить возможность ее установки:

Регистры на входе:

AH = 01h;

AL = 00h

Регистры на выходе:

AH = состояние системы буферизованной печати

Байт состояния системы буферизованной печати описан ниже:

Содержимое регистра AH

Состояние системы буферизованной печати

00h

Не установлена, но ее можно установить командой PRINT

01h

Не установлена и ее установка невозможна

FFh

Установлена

Запуск процесса печати файла

Данная функция запускает процесс фоновой печати.

Регистры на входе:

AH = 01h;

AL = 01h;

DS:DX = адрес структуры, с помощью которой функции передается путь к распечатываемому файлу

Регистры на выходе:

AH = состояние системы буферизованной печати

Формат структуры, адрес которой передается функции в регистровой паре DS:DX, представлен ниже:

Смещение

Длина

Описание

0

1

Уровень запроса, равен 0

1

4

Полный адрес строки в формате ASCIIZ, содержащей путь к файлу

Отмена печати файла

С помощью этой функции вы можете удалить файл из очереди печати.

Регистры на входе:

AH = 01h;

AL = 02h;

DS:DX = адрес строки в формате ASCIIZ, содержащей имя файла, удаляемого из очереди для печати

Регистры на выходе:

AH = состояние системы буферизованной печати

Отмена печати всех файлов

С помощью этой функции вы можете удалить печать всех файлов, которые находятся в очереди печати.

Регистры на входе:

AH = 01h;

AL = 03h

Регистры на выходе:

AH = состояние системы буферизованной печати

Определение состояния и блокировка системы буферизованной печати

С помощью этой функции можно заблокировать систему буферизованной печати, определить ее состояние и получить доступ к списку файлов, находящихся в очереди печати.

Регистры на входе:

AH = 01h;

AL = 04h

Регистры на выходе:

AH = состояние системы буферизованной печати;

FFh – система буферизованной печати установлена;

DS:SI = адрес очереди печати (массив строк в формате ASCIIZ, конец массива отмечен строкой, состоящей из 0;

DX = количество ошибок при попытке напечатать последний символ

Разблокирование системы буферизованной печати

Эта функция может быть использована для разблокирования системы буферизованной печати, заблокированной предыдущей функцией.

Регистры на входе:

AH = 01h;

AL = 05h

Регистры на выходе:

AH = состояние системы буферизованной печати

Коды ошибок

Если после вызова перечисленных выше функций установлен флаг переноса CF, регистр AX содержит код ошибки:

PRIVATE Код

Описание

01h

Неправильный код функции

02h

Файл не найден

03h

Путь не найден

04h

Слишком много открытых файлов

05h

Доступ запрещен

06h

Неправильный идентификатор файла

08h

Переполнение очереди

09h

Занято

0Ch

Слишком длинная строка пути к файлу (больше 64 байт)

0Fh

Диск указан неправильно


[Назад] [Содеожание] [Дальше]