Жанр: Учеба
Справочник программиста на IBM PC
...n/72
27,74 n/216 n/144 n/216
Независимо от того как изменяются межстрочные интервалы, принтер
всегда контролирует прямые и обратные движения листа, поэтому
пропуски перфорации всегда делаются вовремя.
6.2.3 Управление движением бумаги.
Бумага на принтере передвигается командами перевода строки,
вертикальной табуляции и перевода формата. Установкой переключателей
на принтере определяется будет ли принтер автоматически
переходить на новую страницу при обнаружении перфорации между
страницами. Если перфорация не будет пропускаться, то печать
может завершиться прямо на вернем краю очередной страницы. Пропуск
перфорации оставляет по три пустых строки сверху и снизу
каждой страницы. На самом деле принтер не распознает перфорацию,
вместо этого он считает, что в начальный момент бумага выравнена
на начало страницы и считает число переводов строки. Можно программно
переопределить установку переключателей, посылая на принтер
управляющие коды 27,56, чтобы принтер не делал пропуска перфорации
и 27,57, чтобы делал пропуск перфорации.
Графический принтер использует код, который определяют число
строк, пропускаемых между страницами. Этот код 27,78,n, где n -
число строк от 1 до 127. Например, код 27,78,10 приведет к тому,
что принтер будет пропускать по 10 строк. Если межстрочный интервал
равен 1/6 дюйма, то 11-тидюймовая страница будет содержать 66
строк и после печати каждых 56-ти строк принтер будет делать
пропуск 10-ти строк. Уже Ваша программа должна позаботиться,
чтобы в самом начале прогнать бумагу на 5 строк, с тем чтобы 55
строк текста были центрированы на каждой странице.
Если используется бумага, размер которой отличается от стандартного
11-тидюймового, то можно изменить длину страницы, с тем
чтобы пропуски перфорации происходили в нужном месте и чтобы
перевод формата устанавливал бумагу в правильную позицию. Размер
страницы может устанавливаться либо числом строк на странице,
либо размером в дюймах. Чтобы установить число строк на странице,
пошлите код 27,67,n, где n - число строк. Та же последовательность
используется и для установки длины страницы в дюймах, за
исключением того, что длина страницы записывается в форме 0,n,
где n может быть от 1 до 22 дюймов. Для стандартной страницы надо
послать команду 27,67,0,11.
6.2.4 Управление положением печатающей головки.
Печатаемый текст распределяется по странице частично за счет
движения бумаги [6.2.3], а частично за счет движения печатающей
головки. Головка может быть позиционирована в любое место, но не
путем задания ее координат. Вместо этого указывается ее смещение,
относительно самой левой позиции, которую она может достигать. У
принтера нет датчиков, сообщающих текущее положение головки. Ваша
программа должна отслеживать положение головки, если оно должно
быть известным. При этом хорошей практикокй является начинать
печать с подачи управляющего кода 27,60, который сдвигает головку
в самую левую позицию, не делая перевода строки (то же самое
делает и код возврата каретки).
При печати текста имеется несколько способов передвинуть головку
в нужное положение. Она может сдвигаться вправо подачей
одного или нескольких символво пробела или табуляции и влево
подачей одного или нескольких символов "возврат на шаг" или символа
возврата каретки. Движения осуществляются непрерывно - не
воспринимайте их как соответствующие последовательности на обычной
пишущей машинке. До тех пор, пока Ваша программа знает начальное
положение печатающей головки она может комбинацией переводов
строки, пробелов, табуляций и возвратов на шаг форматировать
Ваш вывод в соответствии с Вашими пожеланиями. Принтеры,
которые умеют выполнять обратный пеервод строки могут использоваться
и как графопостроители.
В графических режимах возможно перемещение головки на малые
доли дюйма. При печати текста Вы можете войти в графический режим,
чтобы добиться разных промежутков между словами. K сожалению,
этот процесс существенно замедляет печать. Смотрите пример в
пункте [6.3.2].
Имеется специальный код, который заставляет головку всегда
возвращаться в крайнюю левую позицию перед печатью очередной
строки, отменяя двунаправленную печать. Хотя это значительно
замедляет печать, однако при этом достигается более точное позиционирование
головки. Это особенно полезно при работе в графическом
режиме. Чтобы включить однонаправленную печать надо послать
код 27,85,1, а чтобы вернуться к двунаправленной печати - код
27,85,0.
6.2.5 Установка позиций табуляции.
В зависимости от принтера могут устанавливаться позиции горизонтальной
и вертикальной табуляции (графический принтер IBM не
имеет вертикальной табуляции). Горизонтальные табуляции определяются,
как смещения от левого края, выраженные в пробелах. В
некоторых случаях допускаются до 112 позиций горизонтальной табуляции.
Аналогично, вертикальные табуляции определяются как смещения
относительно верха страницы, а измеряются они в межстрочных
интервалах. Для большинства принтеров IBM допускается не больше
64-х позиций вертикальных табуляций.
Первые два байта кода для установки горизонтальной табуляции
27,68, а для установки вертикальной табуляции - 27,66. Для обоих
типов табуляций далее идет строка байтов, дающая позиции табуляции
в возрастающем порядке. Эта строка должна завершаться байтом
ASCII 0, который служит ограничителем. Для установки горизонтальной
табуляции в позициях 15, 30 и 60 пошлите на принтер код 27,
68, 15, 30, 60, 0. Для установки вертикальной табуляции в строках
8 и 12 - пошлите код 27, 66, 8, 12, 0. Отметим, что если размер
страницы отличается от стандартных 11-ти дюймов, то он должен
быть установлен перед установкой позиций вертикальной табуляции.
Вертикальная табуляция отменяется кодом 27,67.
Отметим, что большинство принтеров не имеют установки полей
как таковой. Левое поле может создаваться за счет вывода табуляции
или ряда пробелов в начале каждой строки. Для точной установки
полей перейдите в графический режим и выведите ряд байтов
ASCII 0. Правое поле создается просто за счет ограничения длины
строки.
6.2.6 Изменение шрифта печати.
Ширина страницы 8 1/2 дюйма позволяет напечатать в строке до
80-ти обычных символов, если все они имеют одинаковую ширину.
Пропорциональная печать [6.3.3] позволяет поместить в строке еще
несколько символов. С другой стороны, плотная печать позволяет
вывести в строке 132 символа, печать с двойной шириной - 40 символов,
а плотная печать с двойной шириной - 64 символа. Имейте
ввиду, что использование печати с разной шириной в одной строке
приведет к трудностям с форматированием.
Большинство матричных принтеров предоставляют набор режимов
печати специальными шрифтами. Вот перечень стандартных возможностей
предоставляемых графическим принтером IBM:
Плотная печать:
Для включения режима плотной печати надо послать однобайтный
управляющий код 15. Для выключения этого режима - код 18. Стандартная
страница шириной 8 1/2 дюйма позволяет напечатать 132
символа в строке в этом режиме.
Печать с двойной шириной:
Для того, чтобы принтер начал печатать с двойной шириной надо
послать на него управляющий код 14. Режим печати с двойной шириной
необычен тем, что принтер автоматически выключает этот режим,
когда встречает символ возврата каретки или перевода строки.
Поскольку такой вид печати обычно используется для однострочных
заголовков, то это свойство удобно. Чтобы выключить этот режим в
середине строки пошлите код 20.
Выделенная печать:
При выделенной печати каждый символ печатается два раза в
одной и той же позиции. Это делает точки темнее, что создает
эффект выделения. Скорость печати при этом уменьшается вдвое. Для
включения этого режима пошлите код 27,69. Для выключения - 27,70.
Печать за два прохода:
В режиме печати за два прохода бумага сдвигается на 1/216
дюйма перед вторым проходом печатающей головки. При этом получаются
более заполненные буквы, которые к тому же выглядят ярче.
Скорость печати уменьшается вдвое. Этот режим включается управляющим
кодом 27,71, а выключается кодом 27,72.
Печать с подчеркиванием:
Печать с подчеркиванием может выполняться двумя способами.
Графический принтер имеет режим подчеркивания, в котором подчерк
печатается под каждым символом, включая пробелы. Для графического
принтера IBM этот режим включается кодом 27,45,1, а выключается
кодом 27,45,0. Принтеры, не имеющие режима подчеркивания могут
сделать подчерки при втором проходе по той же строке, печатая
символы подчеркивания (ASCII 95) в тех местах, где оно нужно и
пробелы (ASCII 32) во всех остальных позцициях. Второй проход
достигается тем, что после первого прохода подается код возврата
каретки без кода перевода строки. Второй проход не мешает принтеру
правильно подсчитывать строки при вычислении размера страницы.
Печать с верхними и нижними индексами:
На графических принтерах текст с верхними и нижними индексами
сжимается вертикально. Для печати верхнего индекса пошлите управляющий
код 27,83,0, а для печати нижнего - 27,83,1. Можно прямо
переходить от одних индексов к другим. Для выключения печати
индексов, с тем, чтобы принтер оказался на текущей строке пошлите
управляющий код 27,84.
Некоторые режимы не могут использоваться в комбинации с другими.
Если Вы хотите использовать 4 режима одновременно, то проконсультируйтесь
со следующей таблицей. В каждом из шести столбцов
приведена допустимая комбинация.
Комбинация 1 2 3 4 5 6
нормальный Х Х
сжатый Х Х
выделенный Х Х
за два прохода Х Х Х
с индексами Х Х Х
двойной ширины Х Х Х Х Х Х
с подчеркиванием Х Х Х Х Х Х
6.2.7 Сравнение возможностей принтеров IBM.
В следующей таблице сравниваются управляющие коды для принтеров
IBM. Не вся информация относительно кодов точна (обращайтесь
к документации IBM), а в ряде случаев уникальные коды опущены.
Целью настоящей таблицы является показ диапазона возможностей
принтеров и указание тех кодов, которые можно считать стандартнымия.
Отметим, что коды для первых четырех принтеров приведены в
выпуске "Возможности и адаптеры" (Options and Adapters) из серии
технических руководств, а коды для остальных принтеров приведены
в сопровождающих их руководств по эксплуатации.
Код Функция Матричный Графический Цветной Компактный Струйный Ромашка Пропринтер
принтер принтер принтер принтер принтер
Перемещение бумаги:
10 перевод строки Х Х Х Х Х Х Х
11 вертикальная табуляция Х Х Х Х Х Х
12 перевод формата Х Х Х Х Х Х Х
13 возврат каретки Х Х Х Х Х Х Х
27,52 установка начала страницы Х Х Х
27,56 игнорировать отсутствие бумаги Х Х
27,57 отмена игнор. отсутствия бумаги Х Х
27,66 установка вертикальных таб-ций Х Х Х Х Х
27,66 очистка вертикальных таб-ций Х
27,88 установка пропуска перфорации Х Х Х Х Х
27,79 отмена пропуска перфорации Х Х Х Х Х
Перемещение печатающей головки:
8 возврат на шаг Х Х Х Х
9 горизонтальная табуляция Х Х Х Х Х Х Х
27,60 сдвиг головки в левый конец Х Х Х
27,62 установка индекса горизонталь- Х
ного движения
27,68 установка горизонт. таб-ции Х Х Х Х Х Х Х
27,68 очистка горизонт. таб-ции Х
27,77 автоматическое форматирование Х
27,80 вкл./выкл. пропорц. печати Х Х
27,82 восстан. таб-ций по умолчанию Х Х Х Х
27,85 вкл./выкл. однонапр. печати Х Х
27,88 установка левого/правого поля Х Х
27,100 программируемый пробел Х
27,101 программируемый возврат на шаг Х
Межстрочные и межсимвольные интервалы:
27,48 межстрочный интервал 1/8 дюйма Х Х Х Х Х Х
27,48 межстрочный интервал 1/9 дюйма Х
27,48 межстрочный интервал 7/72 дюйма Х Х
27,49 межстрочный интервал 7/72 дюйма Х
27,49 межстрочный интервал 9/96 дюйма Х
27,49 межстрочный интервал 6/72 дюйма Х
27,49 межстрочный интервал 1/9 дюйма Х
27,50 начать программируемый пере- Х Х Х
вод строки по 27,65
27,50 межстрочный интервал 1/6 дюйма Х Х Х Х Х Х Х
27,51 программируемый перевод Х Х
строки (n/216)
27,51 программируемый перевод Х
строки (n/144)
27,53 вкл./выкл. автоматич. пере- Х Х Х Х Х
вода строки
27,65 программируемый перевод Х Х Х Х Х
строки (n/72)
27,67 установка длины страницы Х Х Х Х Х Х Х
27,74 программируемый перевод Х Х
строки (n/216)
27,74 программируемый перевод Х
строки (n/144)
27,93 обратный перевод строки Х
27,104 перевод на пол-строки вперед Х
27,105 перевод на пол-строки назад Х
Управление шрифтами:
11 режим 15 символов на дюйм Х
14 включение режима двойной ширины Х Х Х Х Х Х
15 включение плотной печати Х Х Х Х Х Х
18 выключение плотной печати Х Х Х Х Х
18 режим 10 символов на дюйм Х Х Х
20 выключ. режима двойной ширины Х Х Х Х Х Х
27,45 вкл./выкл. подчеркивания Х Х Х Х Х Х
27,58 режим 12 символов на дюйм Х Х Х
27,69 включение жирной печати Х Х Х Х
27,70 выключение жирной печати Х Х Х Х
27,71 включение печати в 2 прохода Х Х Х Х Х
27,72 выключение печати в 2 прохода Х Х Х Х Х
27,83 включение печати индексов Х Х Х Х Х
27,84 выключение печати индексов Х Х Х Х Х
27,87 вкл./выкл. печати двойной Х Х Х Х Х
с шириной
27,91 включение цветного подчеркив. Х
27,95 вкл./выкл. overscore Х
Установка специальных шрифтов и цветов:
27,54 выбор набора символов 2 Х Х Х Х Х
27,55 выбор набора символов 1 Х Х Х Х Х
27,61 загрузка шрифта Х Х
27,73 изменение качества печати Х Х Х
27,92 печатать управляющие символы Х Х Х
27,94 печатать все символы Х Х Х
27,97 сдвиг ленты в конце страницы Х
27,98 выбор 4-й полосы ленты Х
27,99 выбор 3-й полосы ленты Х
27,109 выбор 2-й полосы ленты Х
27,121 выбор 1-й полосы ленты Х
Графические режимы:
27,75 установка режима 480 точек Х Х
27,75 установка режима 560 точек Х
27,75 установка режима 1108 точек Х
27,76 установка режима 960 точек Х Х
27,76 установка режима 2216 точек Х
27,89 установка режима 960 точек Х Х
с нормальной скоростью
27,89 установка режима 2216 точек Х
27,90 установка режима 1920 точек Х Х
27,90 установка режима 4432 точек Х
27,91 установка разрешения/цвета Х
27,110 установка масштабного коэф-нта Х Х
Другие возможности:
7 звонок Х Х Х Х Х
20 выключ. режима двойной ширины Х Х Х Х Х Х
17 выбор принтера Х Х Х Х Х
19 отмена выбора принтера Х Х Х Х
24 очистка буфера Х Х Х Х Х Х Х
27,81 отмена выбора указанного Х Х
принтера
Раздел 3. Посылка данных на принтер.
Посылка данных на принтер тривиальна в языках высокого уровня,
а для программиста на языке ассемблера имеется ряд функций операционной
системы, которые делают задачу также достаточно простой.
Программирование на низком уровне требует больше работы, но зато
предоставляет больше возможностей. Как правило, процедуры печати
низкого уровня посылают символ на принтер, а затем постоянно
проверяет регистр статуса ввода порта, к которому присоединен
принтер. Следующий символ посылается только тогда, когда принтер
сигнализирует, что он готов (принтер может не печатать символ
сразу, а запасать его в своем буфере, до тех пор пока не будет
получена целая строка символов для печати).
Кроме того, процедуры низкого уровня могут использовать прерывание
принтера или могут имитировать действие этого прерывания. С
помощью специального программирования можно сделать так, что
принтер будет делать прерывание проценссора, когда он готов к
приему следующего символа. Процедура обработки прерывания посылает
следующий символ, после чего процессор может продолжать
заниматься своими делами. Этот метод используется для фоновой
печати (которую называют также спулингом). Поскольку физические
перемещения деталей принтера намного медленнее, чем скорость
электроники компьютера, то вывод символов на принтер занимает
лишь малую долю процессорного времени. Использование прерывания
позволяет использовать это время эффективно.
При посылке данных на принтер требуется сравнительно небольшие
усилия, чтобы добиться ужасно сложного вывода. Все сложные картинки,
которые может выводить принтер, достигаются за счет комбинирования
текстовых и графических данных, а также многочисленных
кодов управления принтером, обсуждавшихся ранее в этой главе.
Комбинируя в одной строке текстовый и графический режимы, можно
добиться выравнивания правого поля и пропорциональной печати.
Кроме того любой графический принтер может создавать специальные
символы произвольного вида, а за счет аккуратного манипулирования
надпечатки и межстрочного интервала могут выводиться любые символы
псевдографики.
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$. Специальные символы могут включа
...Поділитися у соцмережах