Аппаратное обеспечение IBM PC



         

Средства MS-DOS для работы с принтером


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

На входе: AH = 05h;

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

На выходе: AH = слово состояния принтера (см. ниже).

Команда MS-DOS MODE может переназначить стандартное устройство печати LPT1 на асинхронный последовательный порт:

MODE LPT1:=COM1

Мы подготовили еще одну программу распечатки содержимого файла, но уже при помощи прерывания MS-DOS:

#include <dos.h> #include <stdio.h>

union REGS rg;

int main(int argc, char *argv[]) {

FILE *srcfile;

// Открываем файл, заданный первым параметром // в командной строке. // Если при запуске программы оператор забыл // указать имя файла, выводим напоминающее сообщение.

if( (srcfile = fopen( argv[1], "rb" )) == NULL ) { printf("\nЗадайте имя файла в качестве параметра"); exit(-1); }

// Читаем файл по одному символу, полученный из файла // символ выводим на принтер при помощи функции printchar().

for(;;) { printchar(fgetc(srcfile)); if(feof(srcfile)) break; }

// Закрываем файл.

fclose(srcfile);

}

// ------------------------------------ // Эта функция выводит один символ // на стандартный принтер (LPT1) // ------------------------------------

int printchar(int chr) {

// Дублируем распечатываемый символ на экране

putch(chr);

// Вызываем функцию 5 прерывания INT 21h - // распечатка символа на принтере.

rg.h.ah = 5; rg.h.dl = chr;

int86(0x21, &rg, &rg);

}

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

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

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




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