Приведем исходный текст программы PRINTFL, которая распечатывает содержимое файла с использованием функции 0 прерывания INT 17h (листинг 7.1).
Листинг 7.1. Файл printfl\printfl.с
// =====================================================
// Печать на принтере с помощью функций BIOS
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =====================================================
#include <dos.h>
#include <stdio.h>
#include <conio.h>
union REGS rg;
int printchar(int chr);
int error(char chr, int status);
int main(int argc, char *argv[])
{
FILE *srcfile;
// Открываем файл, заданный первым параметром
// в командной строке.
// Если при запуске программы оператор забыл
// указать имя файла, выводим напоминающее сообщение
if( (srcfile = fopen( argv[1], "rb" )) == NULL )
{
printf("\nЗадайте имя файла в качестве параметра");
return (-1);
}
// Читаем файл по одному символу, полученный из файла
// символ выводим на принтер при помощи функции printchar
for(;;)
{
printchar(fgetc(srcfile));
if(feof(srcfile))
break;
}
// Закрываем файл
fclose(srcfile);
return 0;
}
// ------------------------------------
// Эта функция выводит один символ
// на первый принтер (LPT1)
// ------------------------------------
int printchar(int chr)
{
int status;
// Повторяем в цикле выдачу символа на принтер
// до тех пор, пока он не будет выведен без
// ошибок, либо пока оператор не отменит
// распечатку файла
for(;;)
{
// Дублируем распечатываемый символ на экране
putch(chr);
// Вызываем функцию 00h прерывания INT 17h -
// распечатка символа на принтере.
// В регистре DX задаем номер принтера LPT1 - это 0
rg.h.ah = 0;
rg.h.al = chr;