Главная » Ассемблер, Железо » Набор команд Epson для печати в растровом режиме

0

В отличие от группы команд ESC/P, ставших международным стандартом, набор команд для печати в растровом режиме используется только принтерами Epson. Общая тенденция компьютерной отрасли к полному отказу от текстового режима и переходу на растровую печать коснулась и всех младших моделей струйных принтеров Epson: они не поддерживают текстовый режим и печать битовых образов.

Прежде всего следует отметить, что в растровом режиме доступны для использования некоторые команды общего назначения из набора ESC/P:

•           инициализация,

•           установка абсолютной позиции по горизонтали,

•           перевод строки,

•           перевод формата,

•           возврат каретки.

Команда перевода строки <LF> перемещает курсор по оси X к левому краю поля печати, а значение координаты по оси Y увеличивает на заданную величину разделительного интервала. Если координата по оси Y выходит за пределы поля печати, то текущая страница извлекается из принтера, загружается следующая страница, а значение координаты по Y устанавливается в соответствии с верхней границей поля печати.

По команде перевода формата <FF> распечатывается содержимое буфера печати, буфер освобождается, после чего производится извлечение текущей страницы и загрузка новой. Для новой страницы координаты X и Y устанавливаются в соответствии с заданным положением левого верхнего угла области печати.

Команда возврата каретки <CR> перемещает курсор к левому краю поля печати.

Набор растровых команд Epson [45,48-50] развивается по мере совершенствования струйных принтеров и появления новых технологий печати, но в этом наборе имеется некоторое подмножество универсальных команд, которые поддерживаются всеми или почти всеми находящимися в данный момент в эксплуатации моделями струйных принтеров Epson. Ниже мы будем рассматривать только универсальные команды, которые перечислены в табл. 7.7. Параметры команд, передаваемые в двоичном коде, будем обозначать прописными латинскими буквами (если параметр является 16-разряд- ным числом, то буквой L помечен младший байт, буквой Н — старший байт).

Таблица 7.7. Команды растрового режима печати Epson

Назввние команды

Esc-последоввтвльность

Переключить принтер в графический режим

<ESC> ‘(‘ "G" 1 0 1

Установить размер единицы перемещения

<ESC> ‘(‘ "U" 1 0 m

Включить/выключить однонаправленный

<ESC> ‘U’ n

режим печати

 

Выбрать монохромный/цветной режим

<ESC> ‘(‘ ‘K’ 1 00 n

печати

 

Выбрать размер точки

<ESC> ‘(‘ ‘e’ 2 0 0 d

Задать длину листа

<ESC>'("C’2 0mLmH

Задать формат страницы

<ESC>'(‘ ‘c’4 0tLtH bLbH

Установить абсолютную позицию печати

<ESC>'("V’2 0mLmH

по вертикали

 

Выбрать цвет печати

<ESC> ‘г’ n

Установить новую позицию печати

<ESC> ‘V nLnH

по горизонтали относительно текущей

 

Печать растровой графики

<ESC> ‘.’ с v h m nL nH d1 …dk

Установить новую позицию печати

<ESC>'("v’2 0mLmH

по вертикали относительно текущей

 

В руководствах для программистов фирма Epson рекомендует придерживаться определенного порядка выполнения операция при использовании растрового режима печати. В соответствии с рекомендациями Epson процесс печати делится на следующие этапы:

•      этап 1 — инициализация,

•      этап 2 — выбор способа печати,

•      этап 3 — выбор формата страницы;

•      этап 4 — передача изображения;

•           этап 5 — переход на новую страницу;

•           этап 6 — завершение печати.

Этапы 1 и 2 выполняются однократно: в результате выполнения этих этапов задаются параметры печати, относящиеся ко всему документу.

Этап инициализации предполагает выполнение группы из трех команд в следующем порядке:

1.         команда инициализации;

2.         команда переключения в графический режим;

3.         команда установки размера единицы перемещения. Команда инициализации, как уже было указано выше, имеет следующий формат:

<Esc>.

Команда переключения в графический режим переводит принтер в режим обработки графических команд. Она имеет следующий формат:

<Esc>, "С, ‘G\ 1. 0. 1

Команда установки размера единицы перемещения задает величину шага перемещения печатающей головки: <Esc>, ‘(‘. ‘U’, 1. 0. m

После выполнения команды величина шага будет составлять т/3600 дюйма. Параметр ш может принимать одно из следующих значений: 5,10,20,30,40,50,60.

ВНИМАНИЕ

После Инициализации принтера величина шага перемещения в растровом режиме по умолчанию составляет 1/360 дюйма.

Команда установки размера единицы перемещения не является обязательной, и ее можно опустить, если заданное по умолчанию значение шага перемещения подходит для используемого режима печати.

Этап выбора способа печати предполагает выполнение группы из трех команд в следующем порядке:

1.         команда включения и отключения однонаправленного режима;

2.         команда выбора режима печати;

3.         команда выбора размера точки.

Команда включения и отключения однонаправленного режима позволяет программисту выбирать между качественной и черновой

печатью. Однонаправленный режим позволяет получить более качественное изображение при печати фотографий, чертежей и рисунков за счет снижения (вдвое) скорости печати. Двунаправленный режим применяется для быстрой черновой печати; кроме того, если высота шрифта меньше высоты линейки сопел печатающей головки, в двунаправленном режиме можно добиться качественной печати текста.

Команда включения и отключения однонаправленного режима печати имеет следующий формат:

<Esc>, ‘U’. п

Значения параметра п:

•     0 — установить двунаправленный режим печати;

•      1 — установить однонаправленный режим печати.

Если используется черновой (двунаправленный) режим печати, команду включения и отключения однонаправленного режима можно опустить.

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

<Esc>, ‘С. ‘К’. 1, 0. 0. п

Параметр п задает режим печати:

•     0 — режим, принятый по умолчанию (для цветных принтеров — цветной);

•      1 — монохромный (черно-белый) режим;

•     2 — цветной режим.

Команда выбора размера точки позволяет выбрать размер точки изображения (размер чернильной капли). Формат команды следующий: <Esc>, ‘С. ‘е’. 2, 0, 0, d

Допустимые значения параметра d различны для разных моделей принтеров: общим является только значение 0, соответствующее размеру точки, принятому по умолчанию. Программист может либо опустить данную команду, либо найти нужное значение d в документации на конкретную группу моделей принтеров. Этап выбора формата страницы предполагает выполнение группы из двух команд в следующем порядке:

1)   команда установки длины листа;

2)    команда установки формата страницы.

Команда установки длины листа задает длину листа бумаги в единицах перемещения. Формат этой команды следующий: <Esc>, ‘(‘. ‘С’. 2, 0, mL, шН

Через mL и тН в данном случае обозначены младший и старший байты слова, задающего длину листа в единицах перемещения. По умолчанию задана длина листа 22 дюйма.

Команда установки формата страницы задает расстояние (в единицах перемещения) верхней и нижней границ области печати от верхней кромки листа. Команда имеет следующий формат: <Esc>. ‘(‘. ‘с’, 4, 0, tL, tH, bL, ЬН

Через tL и tH обозначены младший и старший байты слова, задающего расстояние до верхней границы области печати, через bL и ЬН — младший и старший байты слова, задающего расстояние до нижней границы. По умолчанию верхняя граница расположена на расстоянии 1 /3 дюйма от верхней кромки листа, а нижняя — на расстоянии 22 дюйма (совпадает с нижней кромкой).

При использовании бумаги формата А4 этап выбора формата страницы можно опустить.

Этап передачи изображения начинается с установки положения изображения относительно верхней границы области печати. Эта операция может выполняться при помощи команды установки абсолютного положения по вертикали.

Команда установки абсолютного положения по вертикали определяет положение начальной строки изображения относительно верхней границы области печати. Эта команда имеет следующий формат: <Esc>, ‘(‘, ‘V, 2, 0, mL. mH

Параметр m в данной команде задает абсолютную координату по Y в единицах перемещения.

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

<Esc>. ‘г’, п

Параметр п в данной команде содержит код цвета, который может принимать одно из следующих значений:

•     0 — черный,

•      1 — пурпурный,

•     2 — бирюзовый,

•     4 — желтый.

По умолчанию (после инициализации) значение п равно нулю, что соответствует черному цвету. Следовательно, при выполнении печати монохромного черно-белого изображения команду установки цвета можно не использовать.

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

•     команда установки абсолютной позиции по горизонтали;

•     команда относительного перемещения по горизонтали;

•     команда возврата каретки.

Команда установки абсолютной позиции по горизонтали, как было указано выше, имеет следующий формат: <Esc>, ‘$’, nL, nH

Параметр п в данной команде задает абсолютную координату по X в единицах перемещения.

Команда относительного перемещения по горизонтали смещает положение области печати на заданное значение единиц перемещения от текущей точки. Команда имеет следующий формат: <Esc>. ‘V. nL, nH

Параметр п в данной команде представляет собой 16-разрядное двоичное число со знаком, которое задает смещение по оси X относительно текущей позиции печати (в единицах перемещения). Команда возврата каретки перемещает позицию печати в начало строки (к левой границе области печати).

Передача растровых данных для одного цветового компонента строки или группы строк изображения выполняется по команде печати растровой графики, которая имеет следующий формат: <Esc>, ‘.’. с ,v, h. m, nL, nH. dj..^

Команда передачи растровых данных имеет параметры:

•     с — признак сжатия графических данных (0 — сжатие не используется, 1 — используется сжатие по алгоритму RLE);

•     v — код разрешения по вертикали (задает разрешение v/3600 точек/дюйм);

•     h — код разрешения по горизонтали (задает разрешение h/3600 точек/дюйм);

•     ш — количество передаваемых растровых линий;

•     п — количество точек в одной строке изображения;

•     dj dk — байты данных.

С помощью этой команды можно передавать не только одну строку,

но и группу из m растровых строк для одной цветовой плоскости.

Структура такой полосы, состоящей из нескольких строк, показана

на рис. 7.9.

Рис. 7.9. Структура полосы изображения, которую выводит команда передачи растровых данных

Для разных принтеров являются допустимыми различные комбинации параметров v, h и ш. Большинство моделей для параметра ш допускает использование значений 1, 8 и 24 (значение 1 является предпочтительным), а для величин v и h — комбинации v = 10, h = 10 (разрешение 360×360).

Исключением из этого правила является принтеры С20Х-С40Х, которые могут печатать только с разрешением 120×360 точек/ дюйм. В монохромном режиме они допускает комбинацию параметров v = 30, h = 10, m = 48 (за одну операцию передается 48 линий растра), а в цветном режиме — комбинацию v = 30, h = 10, ш = 15 (за одну операцию передается 15 строк цветовой плоскости).

Количество байтов в одной строке изображения равняется округленному вверх (до ближайшего целого) частному от деления количества точек в строке на 8. Соответственно, общее количество передаваемых командой байтов данных вычисляется по формуле k = nxintUn + 7) /8).

Переход на следующую строку растра осуществляется при помощи команды относительного перемещения по вертикали, которая имеет следующий формат: <Esc>. ‘(‘. ‘V, 2. 0. mL. mH

Параметр m в данной команде представляет собой 16-разрядное двоичное число со знаком, которое задает смещение по оси Y относительно текущей позиции печати (в единицах перемещения). Команда относительного перемещения по вертикали применяется также при переходе к следующему по порядку изображению, если на одной странице имеется несколько изображений. Таким образом, передача одной строки изображения представляет собой цикл по цветовым компонентам, внутри которого выполняется следующая последовательность команд:

1.   установить код цвета для передаваемой компоненты;

2.   переместить курсор по горизонтали в начало растровой строки;

3.   передать данные цветовой компоненты.

Процесс передачи изображения заключается в последовательном выполнении двух операций для каждой передаваемой строки:

1.   передать все цветовые компоненты строки;

2.   перейти на следующую строку при помощи команды относительного перемещения по вертикали.

Если передача растровых данных ведется построчно, для перехода на следующую строку растра нужно использовать относительное смещение (положительное) на одну единицу перемещения. Если передача растровых данных ведется полосами из нескольких строк, для перехода на следующую строку растра нужно использовать смещение на m единиц, где m — количество растровых строк в полосе.

В листинге 7.6 приведена программа EpsonStyl us_BW, демонстрирующая печать черно-белого изображения набора символов шрифта 8×16 в растровом режиме. Программа использует универсачьные процедуры ввода-вывода из главы 1 «Работа с клавиатурой», процедуры захвата шрифта и рисования его изображения в режиме

VGA 320×200 из листинга 7.4, а также процедуры вывода команд и данных на принтер из листинга 7.1.

Листинг 7.6. Тест для струйных принтеров EPSON Stylus: печать в черно-белом растровом режиме

IDEAL

Р386

LOCALS

MODEL MEDIUM

; Подключить файл мнемонических обозначений

; кодов управляющих клавиш и цветовых кодов

Include "1istl_03.inc"

; Подключить файл макросов

Include "1istl_04.inc"

SEGMENT sseg para stack ‘STACK’

DB 400h DUP(?)

ENDS

DATASEG

; Номер печатаемой строки изображения PrintingString DW ?

; Номер печатаемого байта PrintingByte DW ?

; Текстовые сообщения Txtl

DB LIGHTCYAN.0,19

DB "ПЕЧАТЬ КОДОВОЙ ТАБЛИЦЫ РУССКОГО ШРИФТА DOS",0

DB LIGHTCYAN.2.23

DB "НА СТРУЙНОМ ПРИНТЕРЕ EPSON STYLUS",О

DB LIGHTGREEN.12,11

DB "Включите принтер, вставьте "

DB "бумагу, установите режим ON-LINE",О

DB LIGHTGREEN.14.17

DB "(будет произведен переход в графический режим)",О

DB YELLOW,24,14,"Нажмите любую клавишу и "

DB "ждите завершения печати",О Txt2

DB LIGHTGREEN,12,2В,"Печать шрифта завершена",О

DB YELLOW,24.29."Нажмите любую клавишу",О

; КОМАНДЫ ДЛЯ ПРИНТЕРА

; Инициализировать принтер Prnlnitialization

DB 2. lBh,

; Установить графический режим SelectGraphicsMode

DB б, lBh,'(‘,’G’,1,0.1

; Выбор монохромного режима MonochromeSelection

DB 7, lBh. ‘С. ‘K’,1.0,0,1 : Выбор разрешения 360×360

SetResolutionDB 9, lBh,’ С,’D’,4,0.14,1,1.1

: Печать растровойграфики (320 точек в строке)

PrintRasterDataDB 8. lBh.1,0.10,10.1.64.1

; Перевод строки

SetRel VertPosi ti onDB 7. lBh, ‘С. V .2,0,1,0 ENDS

CODESEG

• ^^?^jkA^iMfitit^jkiiitit’jMfititit’A’A Л A A A AMA

;* Основной модуль программы *

PROC EpsonStylusBW

mov AX.DGROUP

mov DS.AX

mov [CS:MainDataSeg],AX

; Считать шрифт из видеопамяти

cal1 GrabRusFont

; Установить текстовый режии и очистить экран

mov АХ.З int 10h

: Скрыть курсор – убрать за нижнюю границу экрана

mov [ScreenString],25

mov [ScreenColumn],0 call SetCursorPosition : Вывести текстовые сообщения на экран MShowColorText 5,Txtl cal1 GetChar

; Установить видеорежим VGA 320×200, 256 цветов

mov AX,13h int lOh

; Отобразить шрифт

cal1 ShowRusFont : Инициализировать принтер

mov SI,offset Prnlnitialization cal1 OutCommandTotPTl

; Включить графический режим печати

mov SI.offset SelectGraphicsMode cal1 OutCommandToLPTl

; Выбрать монохронный режим

mov SI,offset MonochromeSelection cal1 OutCommandToLPTl

; Выбрать разрешение 360×360

mov SI,offset SetResolution cal 1 OutCommandToLPTl

; Настроить пару регистров ES:DI на видеопамять

mov AX.OAOOOh

mov ES.AX

xor DI.DI юбнулить DI

; Сбросить счетчик строк растра

Листинг 7.6(продолжение)

mov [PrintingString],0

; ОСНОВНОЙ ЦИКЛ (ПО ПЕЧАТАЕМЫМ СТРОКАМ) : Печать осуществляется в инверсной форне (светлые точки : экрана при печати отображаются черными и наоборот). : Вывод изображения на принтер выполняется по строкаи

; растра, слева направо, сверху вниз.

@@Р0:

; Задать длину строки 40 байт (320/8)

mov SI,offset PrintRasterData cal1 OutCommandToLPTl : Сбросить счетчик байтов

mov [PrintingByte],0 : Цикл по печатаемый байтам

@@Р1:

mov СХ.8 ;счетчик точек в байте

xor AL.AL ;обнулить байт

; Цикл по печатаемый точкам

@@Р2: shl AL,1 .сдвинуть разряды влево cmp [byte ptr ES:DI],0 ;цвет точки?

je

@@РЗ пропустить черную точку or AL.1 ;"поставить" точку

@@РЗ:

; Перейти на следующую точку

inc DI loop

@@Р2

: Вывести байт на принтер call OutCharToLPTl

; Перейти к следующему байту

inc [PrintingByte] cmp [PrintingByte],40 jl 0PP1 : Перейти на следующую строку растра принтера

mov , SI,offset SetRelVertPosition cal1 OutCommandToLPTl

; Послать на принтер команду возврата каретки

mov AL.ODh call OutCharToLPTl

; Перейти на следующую строку экранного изображения

inc [PrintingString] cmp [PrintingString],160

ji mo

; Послать на принтер коды завершения страницы

mov AL.OCh ;перевод формата call OutCharToLPTl

; Инициализировать принтер

mov SI,offset Prnlnitialization call OutCommandToLPTl

; Переустановить текстовый режим

mov ax,3

int 10h

; Скрыть курсор – убрать за нижнюю границу экрана

call SetCursorPosition

; Вывести сообщение о завершении печати MShowColorString Txtl MShowColorText 2,Txt2 cal1 GetChar

@@End:

; Переустановить текстовый режии

mov ах.З int lOh

; Выход в DOS

mov AH,4Ch int 21h ENDP EpsonStylus_BW ENDS

; Подключить процедуры вывода данных на экран

Include "listl_02.inc"

; Подключить процедуры вывода синвола и посылки

; конанды на принтер

Include "list7_01.inc"

; Подключить процедуры для захвата русского шрифта и

; отображения его в режиие 320×200

Include "list7_04.inc"

END

После распечатки результатов работы тестового примера из листинга 7.6 вы увидите на листе бумаги множество символов очень маленького размера: шрифт 8×16 является слишком мелким для печати с разрешением 360×360 точек/дюйм. Для качественной печати текста при таком высоком разрешении размер матрицы символа должен быть в несколько раз больше, а для черновой печати можно обойтись простым масштабированием шрифта.

Листинг 7.7 содержит процедуру CreateRasterlmage, формирующую растровое изображение текстовой строки. Процедура использует шрифт 8×16, но растягивает символы в четыре раза только по горизонтали: масштабирование по вертикали будет выполняться в программе печати текста путем четырехкратного повторения каждой строки при выводе текста на печать.

Листинг 7.7. Подпрограмма, создающая монохромное

растровое изображение заданной текстовой строки

DATASEG

; Буфер для сохранения нонохронного растрового

; изображения строки текста

Rowlmage

DB 4096 DUP(?) :256 байт, 16 строк

22-231

Листинг 7.7 (продолжение) ENDS

CDDESEG

• ikAAM’A А А А’А А А"А А А’А’А А А А А1 А АгА AAA А’АА A A A A’AiIrA А1 А А А ЛАЛ^лк^ААЛА

;* СФОРМИРОВАТЬ РАСТРОВОЕ ИЗОБРАЖЕНИЕ ТЕКСТОВОЙ СТРОКИ * ;* Передаваемые параметры:*

;* DS.-SI – указатель на строку, ограниченную нулем. *

PROC CreateRasterlmage near pusha

push ES eld

: Очистить буфер строки

mov AX.DS ‘

mov ES.AX

mov DI,offset Rowlmage

mov CX,4096/2

xor AX,AX

rep stosw

: ЦИКЛ ВЫВОДА СИМВОЛОВ

mov DI,offset Rowlmage

mov CX.64 ;ограничитель длины строки

@@NextChar:

: Загрузить код символа lodsb

and AL.AL -.конец строки? jz

@@Exit push DI push SI

; Вычислить начальную позицию наски синвола

mov SI.offset FontBxl6 xor AH.AH

shl AX.4 .-смещение символа от начала шрифта

add SI. АХ : Цикл по строкам растра

mov DH.16

@@NextMaskByte: lodsb

: Цикл по точкаи растра

mov DL.4

@@NextBite:

: По горизонтали растягиваем символы в 4 раза

; Нечетные биты соответствуют старшей тетраде test AL.BOh jz

@@NoDl

or [byte ptr ES:DI],0F0h : Четные биты соответствуют младшей тетраде @eNoDl: test AL.40h jz

@@NoD2

or [byte ptr ES:DI].0Fh

@@NoD2: rol AL,2 проверить следующую пару битов

inc DI dec DL jnz

@@NextBite

add DI,256-4 ;перейти на следующую строку dec DH

jnz

@@NextMaskByte pop SI pop DI

add DI,4 loop

@@NextChar Pffixit: pop ES popa ret

ENDP CreateRasterlmage

Листинг 7.8 содержит программу Pn ntCol orText, которая выполняет печать группы текстовых строк различного цвета. Для формирования растрового изображения текстовой строки программа использует процедуру CreateRasterlmage из листинга 7.7. Вывод одного цветового компонента строки выполняется процедурой Out_Col or_Component, которая вызывается из процедуры печати изображения текстовой строки Out_Text_Strmg. Процедура Out_Text_Stn ng обращается к процедуре Out_Col or_Component для передачи одной и той же группы данных в каждую из используемых (для формирования заданного цвета строки) цветовых плоскостей, а неиспользуемые плоскости пропускаются. Каждую строку изображения, созданного процедурой CreateRasterlmage, процедура Out_Text_Stnng дублирует по вертикали четыре раза.

Листинг 7.8. Тест для струйных принтеров EPSON Stylus: печать цветного текста в растровом режиме

IDEAL

Р386

LOCALS

MODEL MEDIUM

; Подключить файл мненонических обозначений

; кодов управляющих клавиш и цветовых кодов

Include "listl_03.inc"

; Подключить файл накросов

Include "listl_04.inc"

SEGMENT sseg para stack ‘STACK1

DB 400h DUP(?)

Листинг 7.8(продолжение) ENDS

DATASEG

; Текстовые сообщения Txtl

DB LIGHTCYAN.0.19

DB "ПЕЧАТЬ ЦВЕТНОГО ТЕКСТА В РАСТРОВОМ РЕЖИМЕ",0

DB LIGHTCYAN,2,23

DB "НА СТРУЙНОМ ПРИНТЕРЕ EPSON STYLUS",О

DB LIGHTGREEN,12,11

DB "Включите принтер, вставьте "

DB "бунагу, установите режин ON-LINE",О

DB YELLOW,24,14,"Нажните любую клавишу и "

DB "ждите завершения печати",О

; КОМАНДЫ ДЛЯ ПРИНТЕРА

; Инициализировать принтер Prnlnitialization DB2. lBh.’P’

; Установить графический режин SelectGraphicsMode

DB 6, lBh,'(VG’,1,0,1

; Выбор цветного режина ColorSelection

DB 7. lBh.'(‘.’KM.0,0.0

; Выбор разрешения 360×360

SetResolution

DB 9, lBh,’ C.’D’,4,0,14,1.1,1 : Выбор цвета для печати SelectBlackDB 3, lBh.’r’.O

SelectMagenta

DB 3, lBh.’r’,1 SelectCyanDB 3, lBh.’r’.2

SelectYellowDB 3. lBh.’r".4

; Печать растровой графики (2048 точек в строке) PrintRasterData

DB В. lBh.’.1,0,10.10,1,0,8 : Перевод строки

SetRel VertPosi ti on

DB 7. lBh,’ Г, V ,2,0,1,0

; Текст для печати на принтере

CyanRow

DB "Голубая строка",0

MagentaRow

DB "Пурпурная строка",0

YellowRow

DB "Желтая строка",0

RedRow

DB "Красная строка",0

GreenRow

DB "Зеленая строка",0

BlueRow

DB "Синяя строка".О

BlackRow

DB "Черная строка",0

; Код цвета строки в форнате CMY

; (бит 0 • Magenta, 1 – Cyan, бит 2 • Yellow)

TextStringColor

DB ?

ENDS

CODESEG

* Основной нодуль програнны *

PROC PrintColorText

mov AX,DGROUP

mov DS.AX

mov [CS:MainDataSeg],AX

; Считать шрифт из видеопамяти

cal1 GrabRusFont : Установить текстовый режим и очистить экран

mov АХ.3 int 10h

; Скрыть курсор – убрать за нижнюю границу экрана

mov [ScreenStri ng].25

mov [ScreenColumn].0 call SetCursorPosition

; Вывести текстовые сообщения на экран MShowColorText 4,Txtl call GetChar : Инициализировать принтер

mov SI.offset Prnlnitialization cal1 OutCommandToLPTl

; Включить графический режим печати

mov SI,offset SelectGraphicsMode cal 1 OutCommandToLPTl

; Выбрать цветной режим

mov SI, of fset ColorSelection call OutCommandToLPTl : Выбрать разрешение 360×360

mov SI,offset SetResolution call OutCommandToLPTl

; Вывести пурпурную строку на принтер

mov [TextStringColor],001b

mov SI,offset MagentaRow call OutTextString : Вывести голубую строку

mov [TextStringColor],010b

mov SI,offset CyanRow call OutTextString

; Вывести желтую строку на принтер

mov [TextStringColor],100b

mov SI,offset YellowRow cal 1 OutTextStri ng

; Вывести красную строку на принтер

mov [TextStringColor],101b

mov SI.offset RedRow cal1 Out_Text_Stri ng

; Вывести зеленую строку на принтер

mov [TextStringColor],110b

mov SI.offset GreenRow call OutTextString

; Вывести синюю строку на принтер

Листинг 7.8(продолжение)

mov[TextStringColor],011b

movSI,offset BlueRow

callOutTextString

; Вывести черную строку

mov[TextStringColor],111b

movSI,offset BlackRow

callOut_Text_String

; Послать на принтер коды завершения страницы

mov AL.OCh ;перевод форната call OutCharToLPTl

; Инициализировать принтер

mov SI,offset Prnlnitialization cal1 OutCommandToLPTl

; Переустановить текстовый режин

mov ах.З int lOh

; Выход в DOS

mov AH,4Ch int 21h ENDP PnntCol orText

;*ОТПЕЧАТАТЬ ЦВЕТНУЮ ТЕКСТОВУЮ СТРОКУ*

;* Передаваемые параметры:*

;* TextStringColor – код цвета строки в формате CMY; * ;* DS:SI – указатель на строку, ограниченную нулей. *

PROC Out_Text_String near pusha

: Сформировать строку

call CreateRasterlmage : ОСНОВНОЙ ЦИКЛ (ПО СТРОКАМ ИЗОБРАЖЕНИЯ)

mov ВХ.О P@NextRasterRow:

; Продублировать строку четыре раза

mov Dl_,4

@@DuplicateString:

test [TextStringColor],lb jz

@@NoMagenta

mov SI,offset SelectMagenta call OutCommandToLPTl call OutCol or_Component

@@NoMagenta:

test [TextStringColor],10b jz ЙЭДоСузп

mov SI.offset SelectCyan call OutCommandToLPTl call Out_Col orComponent

@@NoCyan:

test [TextStringColor],100b jz

@@NoYel1ow

mov SI,offset SelectYellow cal1 OutCommandToLPTl call 0ut_Co1or_Component

@@NoYellow:

; Перейти на следующую строку растра принтера

mov SI,offset SetRelVertPosition cal1 OutCommandToLPTl dec DL

jnz

@@Dupli cateStri ng

; Перейти на следующую строку изображения

inc ВХ cmp ВХ.16 jb

@@NextRasterRow popa ret

ENDP Out_Text_String

;* ВЫВЕСТИ ОДНУ ЦВЕТОВУЮ КОМПОНЕНТУ СТРОКИ РАСТРА * ;* Передаваемые параметры:*

;* ВХ • ноиер печатаемой сторки изображения. *

• АчАА’ At Ait A AAA А A A^AA ‘A A A А AAA А A A ?’A A A A A A AAA А^МгАгАгАг A A A A’Ai’c A A A

PROC Out_Color_Component near pusha

: Задать длину строки

mov SI,offset PrintRasterData caTl OutCommandToLPTl

; Настроить SI на печатаемую строку

mov SI.offset Rowlmage rol BX.8

add SI.BX

; Вывести строку

mov CX.256 PPPrintNextByte: lodsb

call OutCharToLPTl loop

@@PrintNextByte

; Послать на принтер команду возврата каретки

mov AL.ODh call OutCharToLPTl popa ret

ENDP Dut_Color_Component ENDS

; Подключить процедуры вывода данных на экран

Include "listl_02.inc"

Листинг 7.8 (продолжение)

; Подключить процедуры вывода символа и посылки

; коианды на принтер

Include "list7_01.inc"

; Подключить процедуры для захвата русского шрифта и

; отображения его в режиие 320×200

Include "list7_04.inc"

; Подключить процедуру, формирующую монохромное

; растровое изображение заданной текстовой строки

Include "list7J)7.inc"

END

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии