Справочник программиста на персональном компьютере фирмы IBM. Принтер
Страница 15. Вывод текстовых или графических данных на принтер


     6.3.1 Вывод текстовых или графических данных на принтер.


   Процессор может заниматься  только  посылкой данных на принтер
или  он  может печатать в фоновом режиме, за  счет  использования
прерывания принтера. Возможна и  третья альтернатива, когда прог-
рамма  посылает символы на принтер через определенные  интервалы,
что можно рассматривать как "псевдопрерывание". Этот метод не так
тесно  координируется с работой принтера, как настоящее  прерыва-
ние, но во всяком случае работа принтера не критична ко времени.
   Независимо от того как выводятся данные, каждый раз на принтер
посылается только 1 байт данных. Языки высокого уровня предостав-
ляют функции, которые вроде бы выводят сразу целые строки, однако
на  самом деле эти функции разбивают строки на отдельные символы.
Обычно языки высокого  уровня  посылают  на  принтер пару возврат
каретки/перевод строки в конце каждой строки.  С другой  стороны,
программы на ассемблере  должны  сами  добавлять  эту пару кодов.
Из-за этого приходится немного больше программировать, но  взамен
Вы получаете намного большую  гибкость, особенно в отношении про-
верки ошибок.

   Высокий уровень.


   Для  посылки данных на принтер Бейсик предоставляет  операторы
LPRINT и PRINT#. LPRINT  не  требует  никакой  подготовки, но для
вывода оператором PRINT# Вы должны предварительно открыть принтер
в точности так же как и файл, с помощью  оператора OPEN "LPT1" AS
#1  или  OPEN "LPT3" AS #2.  Оператор LPRINT всегда адресуется  к
LPT1, в то время как PRINT# может адресоваться к любому принтеру.
   Пара возврат каретки/перевод строки  автоматически добавляется
в  конце  любого оператора LPRINT или PRINT#, если только  он  не
завершается точкой с запятой.   Для  избежания ненужных переводов
строки  не  забывайте завершать посылки любых  управляющих  кодов
точкой с запятой.  То же самое надо делать, если Вы хотите, чтобы
строки текста печатались подряд, прилегающие одна к другой. Одна-
ко имейте ввиду, что многие  принтеры не начинают печатать до тех
пор, пока они не получат данные для целой строки. Это определяет-
ся либо символом возврат  каретки, либо тем, что число переданных
символов достигло 80-ти (или другого числа). Не забывайте послать
завершающий  код  возврата  каретки,  чтобы  вытолкнуть последнюю
порцию символов из буфера принтера.
   Принтер  автоматически переходит на слдеующую строку по дости-
жению конца строки.  По умолчанию размер строки принтера равен 80
символам,  но у широких принтеров это значение может быть больше.
Строки, выводимые в  режимах  плотной  печати  или печати двойной
ширины, также меняют длину строки.  Для изменения номера столбца,
по достижении которого  головка  принтера  перейдет  на следующую
строку,  можно установить ширину принтера командой WIDTH "LPT1",n
- где n требуемый номер  столбца.  Когда печатается строка, длина
которой  больше или равна ширине принтера, то печатающая  головка
переходит на следующую строку,  что эквивалентно выполнению кодов
возврат каретки/перевод строки. Это означает, что в случае, когда
длина строки в точности равна  ширине  принтера, то будет сделано
два  перевода  строки, если эта строка завершается,  как  обычно,
парой возврат каретки/перевод строки.
   При графической печати принтер обычно  устанавливают на беско-
нечную  ширину.  Чтобы сделать это, надо подать команду установки
ширины, равной 255, WIDTH  "LPT1",255.  Если Вы забудете включить
эту  команду, то при выводе длинных последовательностей графичес-
ких данных Бейсик будет  вставлять  пару  возврат каретки/перевод
строки  после  каждых 80 байтов данных.  Эти  добавочные  символы
будут включаться в  общее  число  байтов  данных  для графической
печати,  поэтому  конец передаваемых данных будет просто  опущен.
   Один оператор LPRINT может содержать несколько  элементов дан-
ных в различных видах.  Информация может содержаться в самом опе-
раторе,  как  например в LPRINT "The rain in Spain", или  на  нее
можно ссылаться по имени  переменной, как в случае X$ = "The rain
in  Spain":  LPRINT X$.  Специальные символы могут включаться  за
счет использования функции  CHR$.   Управляющие коды обычно посы-
лаются  именно этим способом, например, LPRINT CHR$(10)  посылает
на принтер управляющий код перевода  строки.  Чаще всего CHR$ ис-
пользуется при посылке кодов ASCII, которые нельзя ввести с  кла-
виатуры. Любые из перечисленных типов данных могут быть объедине-
ны  в одном операторе.  Если Вы хотите, чтобы различные  элементы

данных печатались подряд, то разделяйте их точкой с запятой; если
же Вы разделите их запятыми, то следующий элемент будет выводить-
ся со следующей позиции табуляции.  Это говорит о том, что опера-
тор  LPRINT форматирует печать в точности так же, как это  делает
оператор PRINT при выводе на экран. Вот несколько примеров:

100 LPRINT S$;" and ";Y$     'комбинация трех строк
110 LPRINT X, Y, Z           'вывод трех чисел
120 LPRINT "The total is "; X  'комбинация строки и числа
130 LPRINT "The ";CHR$(27);CHR$(45);CHR$(1);"real";
            CHR$(27);CHR$(45);CHR$(0);" thing."
            'подчеркивание среднего слова

   Оператор PRINT# может  использовать  те  же типы данных, что и
оператор LPRINT, и он также позволяет включать несколько  элемен-
тов данных в один оператор  и  смешивать  различные  типы данных.
Точки  с запятой и запятые действуют в нем  аналогичным  образом.
Вот примеры, эквивалентные вышеприведенным:

100 OPEN "LPT1:" AS #2
110 PRINT #2,S$;" and ";Y$
120 PRINT #2,X, Y, Z
130 PRINT #2,"The total is "; X
140 PRINT #2,"The ";CHR$(27);CHR$(45);CHR$(1);"real";
            CHR$(27);CHR$(45);CHR$(0);" thing."


 
« Предыдущая статья   Следующая статья »