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




Программа PRINTFL


Приведем исходный текст программы 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;




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