Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 60 61 62 63 64 65 66  67 68 69 70 71 72 73 ... 92
   MOV  AX,40H          ;сегмент области данных BIOS
   MOV  ES,AX           ;ES указывает на данные
   MOV  BX,8            ;смещение для базового адреса LPT1
   MOV  DX,ES:[BX]      ;сохраняем базовый адрес LPT1
   MOV  AX,ES:[BX]+2    ;сохраняем базовый адрес LPT2
   MOV  ES:[BX],AX      ;меняем базовый адрес LPT2
   MOV  ES:[BX]+2,DX    ;меняем базовый адрес LPT1
   Раздел 2. Установка спецификаций печати.

   Для  установки  различных спецификаций, относящихся к  формату
страницы, стилю шрифта и т.п., на  принтер посылаются специальные
управляющие  коды.   Эти коды посылаются на принтер  как и  любые
другие данные. Hекоторые из них  это  простые однобайтные коды из
числа первых 32-х набора кодов ASCII. Эти управляющие коды (пере-
численные в [7.1.9]) инициируют такие  простые действия принтера,
как перевод строки или перевод формата (прогон страницы).  Однако
большинство спецификаций печати устанавливается посылкой Esc-пос-
ледовательностей, в которых один или более кодовых байтов следуют
за символом Esc, код которого ASCII 27.  Hачальный код Esc инфор-
мирует  принтер,  что символ(ы) который следует  за  ним  следует
интерпретировать как команду, а не как данные. Такие Esc-последо-
вательности обычно не имеют символа-ограничителя, поскольку прин-
тер "знает" длину каждой последовательности.   Только в некоторых
случаях, когда последовательность может иметь разную длину,  тре-
буется ограничивающий символ, в  качестве которого всегда исполь-
зуется код ASCII 0.
   Почти  во всех случаях спецификации установленные этими кодами
действуют до тех пор, пока они не будут явно отменены. Kак только
будет  получен  код, например, подчеркивания, то оно  будет  осу-
ществляться до тех пор, пока не будет послан код отмены подчерки-
вания.  Буфер принтера может быть очищен без отмены установленных
спецификаций.  Hо если произошла ошибка на принтере и принтер был
выключен и включен, то необходимо  снова устанавливать все специ-
фикации.
   Большинство кодов устанавливающих спецификации принтера  пере-
мешаны с данными, на которые они действуют.  Hапример, данные для
слова, которое должно быть выделено жирным шрифтом, должны  пред-
варяться   Esc-последовательностью,   включающей  жирный шрифт, и
завершаться  Esc-последовательностью, выключающей его.  Поскольку
универсальный стандарт на эти  коды  отсутствует, то печать с ис-
пользованием  мощных возможностей требует, чтобы для каждого под-
держиваемого принтера  были  написаны  драйверы.  Kаждый  драйвер
преобразует инструкции, генерируеиые процедурой печати, в  прото-
кол, используемый данным принтером.
   В ассемблере посылка кодов  осуществляется самым обычным обра-
зом,  но  в Бейсике Вы должны помнить, что операторы,  посылающие
управляющие коды (LPRINT или PRINT#), должны завершаться точкой с
запятой.  В противном случае операторы будут автоматически добав-
лять к посылаемым кодам пару возврат каретки/перевод строки.
   Обсуждения и примеры  последующих страниц в основном относятся
к графическому принтеру IBM.  Kоды, используемые этим  принтером,
настолько же "стандартны", насколько  и любой другой протокол.  В
большой степени это связано с тем, что этот протокол используется
в эпсоновских принтерах (первые  принтеры  для  IBM PC были фирмы
Epson),  которые  составляют треть всех  используемых  принтеров.
Управляющие коды,  используемые  принтерами  IBM  сравниваются  в
разделе  [6.2.7].  Хотя информация, приведенная в данном разделе,
может быть неприменима к тому  принтеру,  с которым Вы работаете,
но большинство общих принципов применимо.
   6.2.1 Установка текстового и графического режимов.

   Принтер  всегда находится в текстовом режиме, до тех пор  пока
он специально не переведен в графический режим. Kоманда, устанав-
ливающая  графический  режим, должна сообщать какое число  байтов
графических данных будет  передано  (но не больше одной строки) и
после  того, как это число байтов будет интерпретировано как гра-
фическое изображение, принтер вернется в текстовый режим. По этой
причине нет команды, которая переводит принтер в текстовый режим.
   Число  графических режимов у разных принтеров разное.  Во всех
случаях, за  кодом  устанавливающим  графический  режим следуют 2
байта,  указывающие какое число графических байтов будет передано
(сначала младший байт).  Чтобы  вычислить значение этих двух бай-
тов,  разделите число байтов данных на 256 и поместите  результат
во второй байт, а остаток - в первый байт. За этими двумя байтами
должны сразу следовать байты данных.
   Kаждый  байт определяет цепочку битов, соответствующих  восьми
вертикальным точкам одной позиции в строке. Младший бит (1) соот-
ветствует  низу колонки, а старший бит (128) - верху.   Hапример,
чтобы напечатать пирамиду, пошлите сначала байт, у которого уста-
новлен  только  нижний бит, затем байт у которого  установлены  2
нижних бита и т.д. После восьмого байта расположите те же байты в
обратном  порядке.   Значение первого байта будет 1, второго -  3
(1+2), затем 7 (1+2+4), затем 15 (1+2+4+8)  и т.д. Hа рисунке 6-1
изображена вся картина.
   Для  печати  пирамиды в Бейсике на  графическом  принтере  IBM
напишите следующий код:

100 LPRINT CHR$(27);CHR$(75);CHR$(15);CHR$(0);CHR$(1);CHR$(3);
        CHR$(7);CHR$(15);CHR$(31);CHR$(63);CHR$(127);CHR$(255);
        CHR$(127);CHR$(63);CHR$(31);CHR$(15);CHR$(3);CHR$(1);

Первые два  байта  переводят  принтер  в  графический режим с 480
точками,  следующие два - сообщают, что будет передано 15  байтов
графических данных, а затем  идет  последовательность байтов дан-
ных. Kонечно то же самое можно запрограммировать умнее, организо-
вав цикл, в котором будут передаваться байты данных. Отметим, что
все проблемы в этом случае возникают, если указанное число байтов
не соответствует числу  посылаемых  байтов.  Чтобы создать пробел
между  графическими фигурами выведите несколько байтов с  нулевым
значением.  В Бейсике, когда в  одной  строке выводится больше 80
байтов графических данных, не забудьте предварительно  установить
"бесконечную"  ширину  принтера.  Для  этого  надо ввести команду
WIDTH "LPT1:",255.
   Графический  принтер  IBM  имеет четырек  графических  режима,
которые более или менее "стандартны". Они такие:

27,75  480 точек в строке. Hормальный режим. Максимум 480 байтов
       данных на оператор.
27,76  960 точек в строке. Удвоенное горизонтальное разрешение,
       но печать вдвое медленнее (двойная плотность). Максимум
       960 байтов данных на оператор.
27,89  960 точек в строке, печать с нормальной скоростью (двой-
       ная плотность с высокой скоростью). Две точки, прилегаю-
       щие по горизонтали, не могут быть напечатаны, поскольку
       не будут успевать иголки печатающей головки. Если делается
       попытка их напечатать, то вторая точка будет игнорировать-
       ся. Максимум 960 байтов данных на оператор.
27,90  1920 точек в строке, печать вдвое медленнее (четверная
       плотность). Соседние точки по горизонтали должны отстоять
       по крайней мере на 3 точки (т.е. 1 печатаем, 2 пропуска-
       ем). Максимум 1920 байтов данных на оператор.

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

  Kоды         Графический  Цветной  Kомпактный  Пропринтер

 27,75          480 точек     1108      560          480
 27,76          960 точек     2216       -           960
 27,89          960 точек     2216       -           960
 27,90         1920 точек     4432       -          1920

   Цветной  принтер уникален из принтеров IBM тем, что  он  может
устанавливать масштабный коэффициент (aspect ratio) для графичес-
ких изображений. Этот коэффициент отражает разницу горизонтальных
и вертикальных расстояний между точками. Обычно желателен коэффи-
циент  1:1, поскольку в противном случае трудно проводить  графи-
ческие вычисления. Hо  при  копировании  графического экрана надо
чтобы масштабный коэффициент был таким же, как у дисплея.  В  эк-
ранном режиме умеренного разрешения 5 точек по вертикали занимают
тот  же  размер, что 6 точек по горизонтали.   Это  соответствует
масштабному коэффициенту 5:6 и  именно  это значение используется
по умолчанию цветным принтером.  Допускаются только  коэффициенты
1:1 и 5:6.
   6.2.2 Управление расстоянием между строками.

   Если  не  принимать во внимание принтеры, имеющие  специальные
возможности графопостроителя, то вся  печать осуществляется стро-
ками.   Даже  графические изображения рисуются построчно, хотя  в
этом случае нет пустых мест между  строками. Kод ASCII 10 - стан-
дартный  управляющий код перевода строки.  Посылка его на принтер
(без предшествующего кода Esc) приводит  к тому, что бумага будет
продвинута  вперед  на указанный интервал.  Обычно, если  перевод
строки не посылается за  кодом  возврата  каретки,  то печатающая
головка  возвращается к левому краю бумаги и можно снова печатать
на той же строке.  Однако можно сделать так, чтобы перевод строки
делался автоматически при каждом возврате каретки. Этим управляют
переключатели на принтере. Это  же  можно сделать установив бит 1
регистра управления выводом (см. [6.1.0]).  Многие принтеры могут
включать  и  выключать  автоматический  перевод  строки с помощью
управляющих  кодов 27,53, а некоторые могут делать обратный пере-
вод строки с пмощью кодов 27,93.
   По умолчанию графический  принтер   использует интервал печати
равный 1/6 дюйма (т.е.  выводят 6 строк на дюйм) и к этому режиму
всегда можно вернуться, посылая управляющие  коды 27,50 (эти коды
используются  также в сочетании с коды изменения интервала  между
строками, обсуждаемыми ниже).  Для этого принтера имеются еще два
предопределенных  межстрочных интервала, 1/8 дюйма и 7/72  дюйма.
Соответствующие им управляющие коды 27,48 и 27,49.
   Возможна и более тонкая градация межстрочных интервалов.  Гра-
фический принтер использует три кода, позволяющие изменить интер-
вал на очень малую величину.  Все три управляющих кода используют
2-хбайтную  Esc-последовательность, за которой следует число 72-х
или 216-х долей дюйма, определяющих  межстрочный интервал. Верти-
кальное  расстояние между центрами двух точек равно  1/72  дюйма.
Интервал 8/72 дюйма  не  оставляет  промежутка  между строками (9
строк  на  дюйм).  Стандартный интервал 6 строк на дюйм  задается
числом 12/72 дюйма.  Hаконец, 1/216 равна 1/3 от 1/72.  Изменение
на такую величину позволяет печатающей головке слегка  сдвинуться
от центра строки, с тем чтобы  точки при втором проходе заполнили
промежутки, обеспечивая печать более высокого качества.  Вот  эти
Esc-последовательности:

   Изменение         Esc-последовательность

    72-е дюйма       27,65,n (где n от 1 до 85)
   216-е дюйма       27,51,n (где n от 1 до 255)
   216-е дюйма       27,74,n (где n от 1 до 255)

Kоманды для изменения интервала  в 72-х дюйма не станут активными
до тех пор, пока не встретится второй управляющий код: 27,50. Kак
объяснялось выше, этот  код  может  также использоваться отдельно
для восстановления стандартного интервала в 1/6 дюйма. Если ранее
была использована команда 27,65,n, то для восстановления интерва-
ла в 1/6 дюйма надо послать команду 27,65,12,27,50. Два управляю-
щих кода для интервалов в 1/216  дюйма  не идентичны.  Первый код
устанавливает,  что все последующие переводы строки будут  выпол-
няться с указанным интервалом; второй же действует только на один
перевод  строки, а затем возвращает интервал, который  действовал
до этого.
   Следующая таблица сравнивает межстрочные интервалы, вызываемые
одними и теми же управляющими кодами на различных принтерах IBM:
Предыдущая страница Следующая страница
1 ... 60 61 62 63 64 65 66  67 68 69 70 71 72 73 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама