Глава 6. Принтер.

Раздел 2. Установка спецификаций печати.

6.3.3 Пропорциональная печать.

Вообще говоря, пропорциональная печать требует специального принтера, который хранит в ПЗУ информацию о ширине каждого символа. Цветной принтер IBM имеет режим пропорциональной печати, который включается последовательностью 27,78,1, а выключается 27,78,0. Программа, которая форматирует вывод на такой принтер, должна знать информацию о ширине каждого символа (ее можно найти в документации). Имея эту информацию, она может вычислить сколько слов поместится на одной строке.

Имейте ввиду, что некоторые матричные принтеры автоматически выводят пропорциональный текст в режиме за два прохода. Если слова в строке разделяются добавочными пробелами в графическом режиме, то принтер может переходить ко второму проходу после печати каждого слова, вместо того, чтобы повторить сразу всю строку. Поскольку принтеры относительно медленно меняют направление перемещения печатающей головки, то в этом случае печать текста, выравненного по правому краю, в пропорциональном режиме может занимать очень много времени и оказывается непосильной ношей для принтера. Эта проблема не возникает при однонаправленной пропорциональной печати. Отметим, что цветной принтер IBM может автоматически комбинировать пропорциональную печать с автоматическим выравниванием правого края, что делает специальное программирование ненужным.

Изощренные программисты могут заставить любой графический принтер печатать в пропорциональном режиме. Программа должна иметь в памяти картину битов для каждого символа (см. {6.3.4}). Вместо того, чтобы посылать на принтер код ASCII, который вызывает изображение символа из ПЗУ, используется данная цепочка битов для создания графического изображения строки текста. Затем вся нужная строка данных выводится на принтер в графическом режиме. Этот подход расходует много памяти на хранение графических образов символов, однако он позволяет полностью контролировать выводимое изображение.

Hизкий уровень.

Программа на языке ассемблера должна работать совершенно аналогично приведенному бейсиковскому примеру. Одно из преимуществ ассемблера состоит в том, что для просмотра ширин символов можно использовать инструкцию XLAT. Поместите символ в AL, DS:DX должны указывать на таблицу, после чего можно использовать XLAT. Ширина символа будет возвращена в AL:
;---просмотр ширин символов
LEA SI,DATA_BUFFER ;указываем на буфер данных
LEA BX,WIDTH_TABLE ;указываем на таблицу ширин
MOV AL,[SI] ;получаем байт данных
XLAT WIDTH_TABLE ;теперь его ширина в AL


<~-6.3.2 Выравнивание правого поля.
Содержание
6.3.4 Печать специальных символов.-~>

Сайт управляется системой uCoz