22 ноября 2019 года    
Пятница | 20:09    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Всё о компьютерах / Форматы файлов

Описание формата PCX и некоторых утилит PC PAINTBRUSH.



                          - 1 -

   ОПИСАНИЕ ФОРМАТА PCX И НЕКОТОРЫХ УТИЛИТ PC PAINTBRUSH

  Перевод с английского языка и форматирование выполнены
    сотрудником Института прикладной математики АН СССР
                       А.Самотохиным

От переводчика
--------------
     Исходный документ был получен мною из JVDialuge 1st BBS
10.09.1991,  переведен  на  русский  язык  и отформатирован.
Некоторые  части  документа,  не  относящиеся  к технической
информации при переводе были опущены.  Там, где я считал это
необходимым, я снабдил перевод своими комментариями.


                          - 2 -

     Техническое  описание  включает  информацию о следующих
программах:

Publisher's Paintbrush~
PC Paintbrush~ Plus
PC Paintbrush
FRIEZE Graphics~


ZSoft Corporation
450 Franklin Rd. Suite 100
Marietta, GA  30067
(404) 428-0008
Copyright 1988 ZSoft Corporation

                          - 3 -

                        СОДЕРЖАНИЕ

Введение.......................................... 4
Формат файла изображения (.PCX)................... 5
Декодирование файлов в формате .PCX............... 7
Описание информации о палитре..................... 8
Формат матричного шрифта PC Paintbrush............ 9
Примеры программ на C.............................10
Техническая информация об утилите FRIEZE..........12
Спецификация FRIEZE для версий ранее 7.00.........12
Вызов функций FRIEZE для версий ранее 7.00........13
Коды ошибок FRIEZE для версий ранее 7.00..........14
Спецификация FRIEZE для версий начиная с 7.00.....14
Вызов функций FRIEZE для версий начиная с 7.00....15
Коды ошибок FRIEZE для версий начиная с 7.00......17
.PCX Programmer's Toolkit.........................18

                          - 4 -

                         Введение

    Цель  создания  данного  буклета  состоит  в  том, чтобы
помочь пользователям и разработчикам программ разобраться  в
технических аспектах  формата .PCX  и использования  утилиты
FRIEZE. Все  комментарии, вопросы  и предложения  по буклету
направляйте по адресу:

ZSoft Corporation
Technical Support Department
ATTN: Technical Reference Manual
450 Franklin Rd. Suite 100
Marietta, GA  30067

                          - 5 -

              Формат файла изображений (.PCX)

    Информация данного раздела  будет полезна для  вас, если
вы  хотите  написать  программу  для  чтения  или записи PCX
файлов. Если  вы хотите  написать программу  для изображений
строго  определенного  формата,  вы  должны быть в состоянии
создать нечто такое, что  будет работать вдвое быстрее,  чем
"Load from..." в  PC Paintbrush. Файлы  изображений, которые
используются в продуктах семейства PC Paintbrush и FRIEZE (с
расширениями .PCX) начинаются  с заголовка длиной  128 байт.
Обычно вы можете игнорировать этот заголовок, если все  ваши
изображения будут  иметь одинаковое  разрешение. Если  же вы
хотите обрабатывать  изображения с  различным разрешением  и
разным   количеством   цветов,    вам   следует    корректно
интерпретировать информацию, находящуюся в данном заголовке.
Оставшаяся   часть   файла   с   изображением   состоит   из
закодированных   графических    данных.   При    кодировании
используется простой алгоритм, основанный на методе  длинных
серий. Мы оставляем за собой право изменять этот алгоритм  с
целью повышения эффективности упаковки данных. Если в  файле
запоминается  несколько   цветовых  слоев,   каждая   строка
изображения запоминается по  цветовым слоям (в  общем случае
красному-R, зеленому-G, синему-B и слою интенсивности-I)  по
схеме, приведенной ниже:

Строка изображения 0:
    RRR...
    GGG...
    BBB...
    III...
Строка изображения 1:
    RRR...
    GGG...
    BBB...
    III...
(и т.д.)

Замечание переводчика
---------------------
     Здесь   в   исходном   документе   имеет   место  явная
некорректность.   Запоминание   по  слоям  проводится,   как
правило,  для  16-цветных  изображений  EGA.   В этом случае
сначала  запоминается  содержимое  строки  из  нулевого слоя
видео памяти, затем из первого и т.д. Нетрудно заметить, что
даже при стандартной палитре EGA, которая устанавливается по
умолчанию BIOS'ом, нулевой слой видео памяти содержит  СИНЮЮ
компоненту цвета, а не  красную. Если же палитра  отлична от
стандартной,  то  говорить  о  том,  что  слои  видео памяти
соотносятся с компонентами цвета вообще затруднительно.

Метод кодирования состоит в следующем:
ДЛЯ каждого байта X, прочитанного из файла
    ЕСЛИ оба старших бита X равны 1, то
        <повторитель> = 6 младшим битам X
        <данные> = следующему байту за X
    ИНАЧЕ
        <повторитель> = 1
        <данные> = X

                          - 6 -

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

Замечание переводчика
---------------------
     Под  насыщением  алгоритма  авторы  документа  по  всей
видимости понимают ситуацию, когда размер получаемого  файла
оказывается  больше,  чем  объем  требуемой видео памяти для
представления записанного изображения. Нужно отметить, что с
этой  точки  зрения  формат  PCX,  безусловно,  не лучший. В
частности, такое насыщение достаточно часто имеет место  для
цветных  реалистичных  изображений,  особенно,  если  при их
создании применялись методы полутонирования.

                   Формат заголовка PCX

Смещен. Обозначение  Длина Описание/комментарий
 0      Manufacturer   1   Постоянный флаг 10 = ZSoft .PCX
 1      Version        1   Информация о версии:
                              0 = Версия 2.5
                              2 = Версия 2.8
                                  с информацией о палитре
                              3 = Версия 2.8 без информации
                                  о палитре
                              5 = Версия 3.0
 2      Encoding       1   1 = .PCX кодирование длинными
                               сериями
 3      Bits per pixel 1   Число бит на пиксел в слое
 4      Window         8   Размеры изображения
                           (Xmin, Ymin) - (Xmax, Ymax)
                           в пикселах включительно
12      HRes           2   Горизонтальное разрешение
                           создающего устройства
14      VRes           2   Вертикальное разрешение
                           создающего устройства
16      Colormap      48   Набор цветовой палитры (см. далее
                           текст)
64      Reserved       1
65      NPlanes        1   Число цветовых слоев
66      Bytes per Line 2   Число байт на строку в цветовом
                           слое (для PCX-файлов всегда
                           должно быть четным)
68      Palette Info   2   Как интерпретировать палитру:
                              1 = цветная/черно-белая,
                              2 = градации серого
70      Filler        58   Заполняется нулями до конца
                           заголовка

Все переменные длины 2 являются целыми.

Замечание переводчика
---------------------
    Во  избежание  недоразумений:   в  поле  Window   после-
довательно   располагаются    4   целых    числа,    которые
соответствуют  угловым  координатам  изображения Xmin, Ymin,
Xmax, Ymax. Как правило, Xmin и Ymin = 0.

                          - 7 -

            Декодирование файлов в формате PCX

    Сначала определите размер изображения, вычислив
      [XSIZE = Xmax - Xmin + 1] и
      [YSIZE = Ymax - Ymin + 1].
Затем  вычислите,  сколько  байтов  требуется для сохранения
одной несжатой строки развертки изображения:
      TotalBytes = NPlanes * BytesPerLine
Отметим,  что  поскольку  всегда  используется  целое  число
байтов, возможно существование неиспользуемых данных в конце
каждой  строки  развертки.  TotalBytes  показывает   сколько
памяти должно быть доступно для декодирования каждой  строки
развертки, включая неиспользуемую информацию на правом конце
каждой строки.

     Теперь  вы  можете  начать  декодирование первой строки
развертки - прочитайте первый байт данных из файла. Если два
старших бита  этого байта  равны 1,  оставшиеся шесть  битов
показывают сколько раз  следует повторить СЛЕДУЮЩИЙ  байт из
файла. Если это не так, то этот байт сам является данными  с
повторителем равным  1. Продолжайте  декодирование до  конца
строки, ведя подсчет  количества байтов, переданных  в буфер
вывода.  В  конце  каждой   строки  развертки  имеет   место
остановка  алгоритма  кодирования,  но  ее не существует при
переходе от одного слоя к другому. Когда строка сформирована
полностью,  в  конце  каждого  слоя  внутри  строки возможно
наличие  лишних   данных.  Для   нахождения  этого   остатка
используйте  значения  XSIZE  и  YSIZE. Если данные являются
многослойными, то BytesPerLine показывает, где заканчивается
каждый слой внутри строки развертки.

      Продолжайте  декодирование  оставшихся  строк. В файле
возможно  наличие  лишних  строк  с  округлением на 8 или 16
строк.

Замечание переводчика
---------------------
     Как следует  из приведенного  описания, в  конце каждой
строки  развертки   предусматривается  остановка   алгоритма
кодирования, т.е предполагается, что каждая строка развертки
кодируется  независимо.  Однако  мое  знакомство с файлами в
формате PCX показывает, что это не всегда так (файлы в  этом
формате пишет не  только ZSoft Corpration  !). Поэтому я  бы
советовал  пользователям  не  рассчитывать  на то, что такая
остановка обязательно будет иметь место. Конец каждой строки
лучше  все-таки  фиксировать  по  заполнении ее буфера. Это,
безусловно,  чуть  усложнит   программу  декодирования,   но
сделает  ее  более   гибкой.  (Кстати  говоря,   графический
редактор  PC  Paintbrush   прекрасно  понимает  PCX   файлы,
записанные  без  остановки  алгоритма  кодирования  в  конце
каждой строки, хотя при порождении собственных файлов  такую
остановку делает).

                          - 8 -

               Описание информации о палитре

Информация о 16-цветной палитре (EGA/VGA)

    Информация  о  палитре  запоминается  в  одном  из  двух
различных форматов. В стандартном формате RGB (IBM EGA,  IBM
VGA) данные запоминаются в 16 тройках. Каждая тройка состоит
из 3 байтов со значениями красного (Red), зеленого (Green) и
синего (Blue) цветов. Значения могут находиться в  диапазоне
0-255,  и  поэтому  необходима  их  интерпретация  в  формат
используемого оборудования. Например, на IBM EGA  существуют
4 возможных уровня RGB для каждого цвета. Поскольку 256/4  =
64, то ниже приведен список соответствия цветовых значений и
уровней:

Значение Уровень
  0-63      0
 64-127     1
128-192     2
193-254     3

Информация о 256-цветной палитре VGA

    В настоящее время  ZSoft добавил возможность  хранения в
файле  изображения  PCX  палитры,  превышающей  16   цветов.
256-цветная палитра  форматируется и  интерпретируется точно
также, как 16-цветная, естественно, за исключением того, что
она  длиннее.  Палитра  (число  цветов  x  3  байта   длины)
добавляется  в  конец  PCX  файла  и  ей предшествует байт с
десятичным значением  12. Для  определения палитры  VGA BIOS
вам достаточно разделить прочитанные значения цветов на 4.

Для доступа к 256-цветной палитре следует:
1. Прочитать  в заголовке  поле Version.  Если оно  равно 5,
   палитра должна быть.
2. Прочитать  конец  файла  и  отсчитать  назад  769   байт.
   Найденное  вами   значение  должно   равняться  12,   что
   указывает на присутствие 256-цветной палитры.

Замечание переводчика
---------------------
     Два замечания по поводу 256-цветной палитры.
     Во-первых, между пунктами 1 и 2 приведенной  инструкции
я добавил бы следующий: "Прочитать в заголовке поле Bits per
pixel. Если оно равно 8, 256-цветная палитра должна  быть.".
Смысл очевиден.
     Во-вторых, в настоящее  время довольно широкое  распро-
странение получил пакет  программ .PCX Programmer's  Toolkit
фирмы Genus Microprogramming. В этом пакете (по крайней мере
в известных мне версиях) принят способ хранения  256-цветной
палитры несколько  отличный от  того, что  был описан  выше.
Отличие  состоит  в  том,  что  палитре  предшествует байт с
десятичным  значением  10  (вместо  12), а значения цветовых
компонент  занимают  младшие  6  битов  в  каждом  из байтов
цветовой тройки (т.е. изменяются от 0 до 63, как это принято
в VGA BIOS).

                          - 9 -

Информация о цветовой палитре CGA

    Для  стандартной  платы  IBM   CGA  битовый  набор   для
определения палитры более сложен. Используется только первый
байт тройки.  Первая тройка  содержит только  первый байт  с
осмысленным значением, который  определяет цвет фона.  Чтобы
определить   цвет   фона,   нужно   значение   этого   байта
(беззнаковое) разделить на  16. В результате  будет получено
значение в диапазоне 0-15,  которое и определяет цвет  фона.
Вторая тройка содержит  осмысленное значение первого  байта,
которое  определяет  значение  палитры  для  трех оставшихся
цветов.   PC  Paintbrush  поддерживает  для  этих  цветов  8
возможных палитр CGA, и, поскольку значение байта может быть
от  0  до  255,  его  следует  разделить  на  32 (см. схему,
приведенную ниже).

Taблица цветов для CGA
Байт #16 в заголовке
    Цвет фона определяется 4 старшими битами.
Байт #19 в заголовке
    Используются  только   3  старших   бита,  остальные   5
    игнорируются. Первые три бита обозначаются как C, P,  I.
    Их интерпретация:
       C: разрешение color burst - 0 = color; 1 = monochrome
       P: палитра - 0 = желтая; 1 = белая
       I: яркость - 0 = малая; 1 = повышенная.

Замечание переводчика
---------------------
    Как видите, исходный документ умалчивает о том, в  каких
случаях информацию в заголовке файла следует трактовать  как
палитру CGA.  Не  исключено, что ветвление следует  вести по
полю Version заголовка.

          Формат матричного шрифта PC Paintbrush

    Матричный символьный шрифт запоминается в очень  простом
формате. Формат этих символов следующий:

Заголовок (2 байта)
    ширина шрифта  db 0a0h + ширина символов (в точках)
    высота шрифта  db высота символов (в точках)
Ширина символов (256 байтов)
    ширина символов db 256 dup(ширина каждого символа + 1)
Изображения символов
    (остаток файла)

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

     Байты организованы  как N  цепочек, где  каждая цепочка
соответствует одной строке символа.

     Например, каждый символ в шрифте размером 5x7 требует 7
байтов. Шрифт  размера 9x14  использует 28  байтов на символ
(два байта  на строку  по 14  наборов). Допускается создание
шрифтов любого  размера, при  условии, что  размер файла  не
превышает 10K.

                          - 10 -

                   Примеры программ на C

     Приведенный ниже набор  программ на C  предназначен для
чтения из PCX файла.

/* Данная процедура читает из файла один блок закодированных
данных  из  файла  и  запоминает  повторитель   count и байт
данных data. Результат:
    0 = данные прочитаны
    EOF = данных нет (вышли за пределы файла) */
encget(pbyt, pcnt, fid)
int *pbyt;     /* сюда писать байт данных */
int *pcnt;     /* сюда писать повторитель */
FILE *fid;     /* ссылка на файл изображения */
{
    int i;

    *pcnt = 1;
    if(EOF == (i = getc(fid))) return(EOF);

    if(0xc0 == (0xc0 & i)) {
       *pcnt = 0x3f&i;
       if(EOF == (i=getc(fid))) return(EOF);
    }

    *pbyt = i;

    return(0);
}

/* Это фрагмент  программы, использующей encget.  Она читает
файл  целиком   и  запоминает   результат  декодирования   в
(большом) буфере,  на который  ссылается переменная  "bufr".
"fp" - это ссылка на файл с изображением */

while (EOF != encget(&chr, &cnt, fp))
  for (i = 0; i < cnt; i++, *bufr++ = chr)

                          - 11 -


    Приведенный ниже набор программ предназначен для  записи
в .PCX файл.

 /*  Эта   программа  кодирует   содержимое  одной    строки
изображения и записывает его в файл */

encLine(inBuff, inLen, fp)
unsigned char *inBuff;  /* указатель на строку данных */
int inLen;              /* длина строки в байтах */
FILE *fp;               /* указатель на запис. файл */
{  /*  возвращает число байтов,  запис. в файл,  или 0, если
      имела место ошибка */

    unsigned char this, last;
    int srcIndex, i;
    register int total;
    register unsigned char runCount; /* макс. значение равно
                                        63 */

    total = 0;
    last = *(inBuff);  runCount = 1;

    for (srcIndex = 1; srcIndex < inLen; srcIndex++) {
       this = *(++inBuff);
       if (this == last) {
          runCount++; /* он кодируется */
          if (runCount == 63) {
             if (!(i=encput(last, runCount, fp))) return(0);
             total += i;
             runCount = 0;
          }
       }
       else {   /* this != last */
          if (runCount) {
             if (!(i=encput(last, runCount, fp))) return(0);
             total += i;
          }
          last = this;
          runCount = 1;
      }
   } /* конец цикла */

   if (runCount) {  /* завершение */
      if (!(i=encput(last, runCount, fp))) return(0);
      return(total + i);
   }

   return(total);

}

/*  программа  для  записи  закодированной  пары байтов (или
одиночного байта, если он не кодируется) в файл */

encput(byt, cnt, fid) /* возвращает число записанных байтов
                         или 0, если имела место ошибка */
unsigned char byt, cnt;
FILE *fid;
{
   if(cnt) {
       if( (cnt==1) && (0xc0 != (0xc0&byt)) ) {
           if(EOF == putc((int)byt, fid))
              return(0); /* ошибка при записи на диск */
           return(1);
       }
       else  {
          if(EOF == putc((int)0xC0 | cnt, fid))
              return(0);  /* ошибка при записи на диск */
          if(EOF == putc((int)byt, fid))
              return(0);  /* ошибка при записи на диск */
          return(2);
       }
   }

   return(0);

}

                          - 12 -

         Техническая информация об утилите FRIEZE

     FRIEZE является резидентной утилитой, которая позволяет
вам перехватывать и сохранять графические изображения других
программ. Вы можете потом переместить это изображение в   PC
Paintbrush для редактирования и улучшения.

     FRIEZE был переписан для использования в PC  Paintbrush
Plus, и  поэтому техническая  документация по  нему коренным
образом  изменилась.  Для  облегчения  понимания технической
информации по FRIEZE, мы  разбили этот раздел на  две части:
один  о  версиях  FRIEZE,  предшествующих  7.00,  и второй о
текущей версии (начиная с 7.00).

     Начиная с  версии FRIEZE  7.10, он  может быть  позднее
удален из памяти  (это возвращает вам  почти 85K DOS  RAM, в
зависимости от вашей конфигурации).   Чтобы сделать это,  вы
можете  выбрать  освобождение  FRIEZE   из  памяти  в   меню
PCINSTAL,  либо   изменить  в   некоторый  момент    рабочую
директорию PC PAINTBRUSH и набрать слово "FRIEZE."


        Спецификация для версий FRIEZE ранее 7.00

Набор опций печати FRIEZE

     FRIEZE может легко адаптироваться к неполным принтерным
кабелям (в которых отсутствует линия статуса, указанная IBM)
и  управляет  как   последовательным,  так  и   параллельным
интерфейсами.  Отметим  также, что FRIEZE  всегда использует
стандартные  вызовы  BIOS'а,  вследствие  чего  неответившие
устройства будут находиться в режиме тайм-аута, однако можно
потребовать, чтобы  случаи типа  отсутствия бумаги  при этом
игнорировались.

Синтаксис команды FRIEZE:
     FRIEZE Xnaarr
     Где:
          X = параллельное   (P)  или   последовательное (S)
              устройство,
          n = номер порта,
          aa  =  две   шестнадцатиричные  цифры  кода,   для
               которого возвращаемые биты вызывают аварийное
               завершение,
          rr  =  две   шестнадцатиричные  цифры  кода,   для
               которого возвращаемые биты вызывают повтор.

Примеры:
FRIEZE P1 - использовать   стандартный набор   параллельного
            вывода,   номер   порта   1,   маска  аварийного
            завершения 28h, и маска повтора 01h

FRIEZE P2 - использовать принтерный порт #2

FRIEZE S1 - использовать последовательный порт #1 и протокол
            Xon/Xoff

FRIEZE P10028 - использовать  принтерный   порт  #1,   маску
                аварийного завершения  00 (ничто  не воспри-
                нимается как ошибка) и маску повтора 28h

                          - 13 -

Интерпретация кодов:
    Коды,  возвращаемые  параллельным  принтером  при вызове
общеизвестны:
    20h - отсутствие бумаги,
    10h - выбран,
    08h - ошибка ввода/вывода,
    04h - не используется,
    02h - не используется,
    01h - тайм-аут.

                   Вызов функций FRIEZE

     FRIEZE работает, используя программное прерывание номер
10h (вызов видео прерывания).

     Для  вызова  функции  FRIEZE,  загрузите  значение   75
(десятичное)  на  регистр  AH,  номер  вызываемой функции на
регистр CL и  затем либо загрузите  на AL аргумент  функции,
либо на регистры ES и BX сегмент и смещение того места,  где
располагаются эти аргументы, после чего вызовите  прерывание
10h.

     FRIEZE  возвращает  на  AX  число, которое означает код
ответа: нулевое значение соответствует успешному завершению,
все  другие  -  номер  ошибки.  Значения других регистров не
изменяются.

#  Определение          Аргументы
0  Печать окна          AL = режим:
                           0 - символьный,
                           1 - обычный,
                           2 - sideways
1  Чтение окна          ES:BX - строка
                           (имя читаемого файла)
2  Запись окна          ES:BX - строка
                           (имя записываемого файла)
3  Ширина печати        AL = ширине в 1/4 дюйма
4  Высота печати        AL = высота в 1/4 дюйма
5  Резерв.
6  Уст. левой границы   AL = левое поле в 1/4 дюйма
7  Уст. размера окна    ES:BX - 4 слова в которых записаны
                               угловые координаты окна:
                               Xmin, Ymin, Xmax, Ymax
8  Резерв.
9  Уст. образцов        ES:BX - 16-элементный вектор байтов,
                               содержащий цветовое
                               соответствие между принтером
                               и экраном.
10 Получ. образцов      ES:BX - вектор из 16 байт, описанный
                                выше
11 Уст. режима          AL = номер режима
12 Резерв.
13 Резерв.
14 Резерв.
15 Получ. окна          ES:BX - пространство для 4, опред.
                                текущее окно

                          - 14 -

16 Уст. опций печати    ES:BX - строка символов с опциями
                                печати. Имеет такой же
                                формат, что и команда
                                FRIEZE.
17 Инициализация        ES:BX - массив из 3 слов,
                                содержащий данные из
                                файла CARDS.DAT Диска 1
                                PC Paintbrush (Hres, Vres,
                                и необяз. номер кода)

Все символьные строки  заканчиваются нулевым байтом  (формат
ASCIIZ).

         Коды ошибок FRIEZE для версий ранее 7.00

    Когда FRIEZE вызывается с использованием прерывания 10h,
он возвращает  на регистре  AX код  ошибки. Нулевое значение
этого регистра означает  отсутствие ошибки; ненулевое  - что
имела место ошибка. Значения кодов ошибок объясняются ниже.

0  Нет ошибки
1  Вывод остановлен пользователем с помощью клавиши ESC.
2  Резерв.
3  Ошибка при чтении файла
4  Ошибка при записи файла
5  Файл не найден
6  Неправильный указатель или неудача при создании файла
   (нет картинки или ошибочный режим экрана)
7  Ошибка при закрытии файла
8  Ошибка диска - обычно при открытой шторке дисковода
9  Не используется
10 Неверная команда - при вызове CL имеет значение
   несуществующей функции FRIEZE
11 Не используется
12 Не используется

               Версии FRIEZE, начиная с 7.00

      Новые версии  FRIEZE имеют  другое число  параметров в
командной строке. Новый формат команды FRIEZE:

FRIEZE {PD} {Xnaarr} {flags} {video} {hres} {vres} {vnum}

Где:
{PD} - имя файла драйвера принтера (без расширения .PDV)
{Xnaarr}
  X = S для последовательного принтера
      P для параллельного принтера
  n = номер порта
  aa = две шестнадцатиричные цифры кода, для которого
       возвращаемые биты вызывают аварийное завершение,
  rr = две шестнадцатиричные цифры кода, для которого
       возвращаемые биты вызывают повтор.

                          - 15 -

{flags} Шестнадцатиричный код из четырех цифр
   Первая управляет флагом длины
   Вторая управляет флагом ширины
   Третья управляет флагом режима
   Четвертая управляет флагом BIOS'а
    ЗАМЕЧАНИЕ: Флаги  длины ширины  и режима  специфичны для
    драйвера принтера. См. файл PRINTERS.DAT на диске 1  для
    правильного использования. В  общем случае флаг  длины 1
    означает  широкую  каретку,  а  0  - стандартную ширину.
    Нулевые  флаги  длины  и  режима  означают использование
    стандартного набора для принтера.
{video}  Комбинация  видео  драйвера,  в которой первый знак
  отвечает за видео драйвер верхнего уровня, а оставшиеся за
  драйвер нижнего.
  Пример = 1EGA - использовать DRIVE1 и EGA.DEV
{hres} Горизонтальное разрешение нужного графического режима
{vres} Вертикальное разрешение нужного графического режима
{vnum} Аппаратно-зависимый  параметр (обычно  число цветовых
    плоскостей)

Замечание: Последние четыре параметра могут быть получены из
файла CARDS.DAT на диске 1 вашего PC Paintbrush.

Коды возврата параллельного принтера:
 80h - Сигнал занятости (0=занят)
 40h - Acknowledge
 20h - Отсутствие бумаги
 10h - Выбран
 08h - Ошибка ввода/вывода
 04h - Не исп.
 02h - Не исп.
 01h - Тайм-аут


      Вызов функций FRIEZE для версий начиная с 7.00

     FRIEZE работает, используя программное прерывание номер
10h (вызов видео прерывания).

     Для  вызова  функции  FRIEZE,  загрузите  значение   75
(десятичное)  на  регистр  AH,  номер  вызываемой функции на
регистр CL и  затем либо загрузите  на AL аргумент  функции,
либо на регистры ES и BX сегмент и смещение того места,  где
располагаются эти аргументы, после чего вызовите  прерывание
10h.

     FRIEZE  возвращает  на  AX  число, которое означает код
ответа: нулевое значение соответствует успешному завершению,
все  другие  -  номер  ошибки.  Значения других регистров не
изменяются.

                          - 16 -

#  Определение          Аргументы
0  Резерв.
1  Чтение окна          ES:BX - строка
                           (имя читаемого файла)
2  Запись окна          ES:BX - строка
                           (имя записываемого файла)
3  Резерв.
4  Резерв.
5  Резерв.
6  Резерв.
7  Уст. размера окна    ES:BX - 4 слова в которых записаны
                               угловые координаты окна:
                               Xmin, Ymin, Xmax, Ymax
8  Резерв.
9  Уст. образцов        ES:BX - 16-элементный вектор байтов,
                               содержащий цветовое
                               соответствие между принтером
                               и экраном.
10 Получ. образцов      ES:BX - вектор из 16 байт, описанный
                                выше
11 Уст. режима          AL = номер режима
12 Резерв.
13 Резерв.
14 Резерв.
15 Получ. окна          ES:BX - пространство для 4, опред.
                                текущее окно
16 Уст. опций печати    ES:BX - строка символов с опциями
                                печати. Имеет такой же
                                формат, что и команда
                                FRIEZE.
17 Резерв.
18 Резерв.
19 Резерв. FRIEZE
20 Получение версии     AH равен целой части номера версии,
   FRIEZE               а AL - десятичной. Если AH=0, то
                        можно считать, что установлена
                        версия FRIEZE ранее 7.00.
21 Уст. параметров      ES:BX указывает на 8-словную (16
                        байтов) таблицу параметров:
                          TopMargin - верхнее поле,
                          LeftMargin - левое поле,
                          HSize - вертикальный размер,
                          VSize - горизонтальный размер,
                          Quality/Draft Mode - режим,
                          PrintHres - гор. разрешение,
                          PrintVres - верт. разрешение,
                          Reserved - резерв.
                        Поля и размеры задаются в сотых
                        долях дюйма. Параметр режима может
                        принимать след. значение:
                          0 - черновой режим (draft),
                          1 - режим качеств. печати,
                          2 - печатать с разрешение, указ. в
                              Hres и Vres.
                        Разрешение печати задается в DPI
                        (число точек на дюйм). Любой
                        параметр, который следует оставить
                        неизменным, должен равняться -1
                        (0FFFFh). Резервное поле следует
                        заполнить -1.

                          - 17 -

22 Получ. параметров    ES:BX указывает на 8-словную (16
                        байтов) таблицу параметров.
23 Получ. разрешения    ES:BX указывает на 12-словную
                        таблицу (24 байта), где содержатся
                        пары разрешения принтера (6 пар).

ЗАМЕЧАНИЕ:  Все  символьные  строки  заканчиваются   нулевым
байтом (формат ASCIIZ).

       Коды ошибок FRIEZE для версий начиная с 7.00

    Когда FRIEZE вызывается с использованием прерывания 10h,
он возвращает  на регистре  AX код  ошибки. Нулевое значение
этого регистра означает  отсутствие ошибки; ненулевое  - что
имела место ошибка. Значения кодов ошибок объясняются ниже.

0  Нет ошибки
1  Вывод остановлен пользователем с помощью клавиши ESC.
2  Резерв.
3  Ошибка при чтении файла
4  Ошибка при записи файла
5  Файл не найден
6  Неправильный указатель или неудача при создании файла
   (нет картинки или ошибочный режим экрана)
7  Ошибка при закрытии файла
8  Ошибка диска - обычно при открытой шторке дисковода
9  Ошибка принтера - он выключен или отсутствует бумага.
10 Неверная команда - при вызове CL имеет значение
   несуществующей функции FRIEZE
11 Ошибка при создании файла - диск защищен от записи или
   переполнен
12 Неверный видео режим - FRIEZE не может захватить 
   текстовой экран.

                          - 18 -

                 .PCX Programmer's Toolkit

     PCX  Programmer's  Toolkit,   созданный  фирмой   Genus
Microprogramming,    позволяет    разработчикам    создавать
прикладные   программы    с    возможностью    высвечивания,
сохранения,  захвата  и   манипулирования  изображениями   в
формате PCX. Поскольку данный пакет поддерживает большинство
широко  используемых  адаптеров  и  компиляторов,  он  может
использоваться во многих областях. Хотя основным интерфейсом
пакета  является  библиотечный,  к  нему  прилагается  много
утилит для высвечивания  и перехвата экрана,  создания окон,
просмотра заголовка и позиционирования изображений.

     Пакет  также  содержит  35  программ для высвечивания и
записи  изображений  из  буфера  и файлов, установки палитр,
доступа  к заголовкам изображений и много другого.

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

Пакет поддерживает следующие дисплеи:
    Все режимы Hercules и графических адаптеров CGA, EGA,  и
VGA.

Пакет совместим со следующими компиляторами:
   Пакет  содержит  библиотеки,  совместимые  с Microsoft C,
Turbo  C,  QuickC,  Lattice  C,  QuickBasic, Turbo Pascal, и
Clipper. Имеется также quick-библиотека для  интегрированных
компиляторов Microsoft  и unit  для Turbo  Pascal.   Имеются
библиотеки  для  моделей  памяти  Small,  Medium, Large всех
компиляторов, которые поддерживают такие модели.

Совместимое программное обеспечение:
   Пакеты  Paint,   такие  как   ZSoft's  PC   Paintbrush  и
Microsoft  Paintbrush  полностью  совместимы. Поддерживаются
настольные издательства, включая Xerox  Ventura Publisher  и
Aldus PC PageMaker.

Что требуется для пакета:
   Компьютер  IBM  PC/XT/AT  и  совместимый  с  ним на 100%,
дисковод,  IBM   CGA/EGA/VGA  или   Hercules  адаптер   (или
совместимый с ними на 100%) и DOS версии, начиная с 2.0.

Только 89.95$!!!

Заказы направлять по адресу:

ZSoft Corporation
450 Franklin Rd., Suite 100
Marietta, GA.  30057
(404) 428-0008

                          - 19 -


Microsoft, Microsoft  C, QuickC,  QuickBasic, and  Microsoft
Paintbrush являются торговыми знаками Microsoft Corporation.
Turbo  C,  Turbo  Basic,  and  Turbo  Pascal - торговый знак
Borland International.   Clipper -  торговый знак  Nantucket
Software.   Lattice C  - торговый  знак Lattice Corporation.
Hercules  -  торговый  знак  Hercules  Corporation.   Другие
программные пакеты  являются торговыми  знаками производящих
их компаний.

 Описание формата PCX и некоторых утилит PC PAINTBRUSH.
Лента новостей


2006 (c) Copyright Hardline.ru