Strings in PIX.TXT


                         INSET PIX FILE SPECIFICATION
Introduction
This document containts a description of InSet PIX files for use with
the Inset technology products such as InSet and HiJaak.
The Inset PIX files were designed with the following considerations in
mind:
o Ability to access compressed portions of images in a random
manner
o Open design for adding new information without obsoleting old
files
o Device independence
Currently PIX files primarily contain either bit mapped image data or
alpha-numeric screens with attribute information. However, since the
file structure is open, new data types may be added to the file at a
later time without changing the basic file structure.
In the PIX File Structure section, the actual structure of the PIX
file is laid out. Later sections provide more detail in the areas of
data compression, data structures, and definitions.
PIX File Structure
PIX files can be described as an indexed database of data items. Data
items may contain any information pertaining to the image. Data
items currently found in PIX files include:
o Image information (size, type, origin, colors etc.)
o Printing options such as clipping, size, rotation, etc.
o Color Pallete information
o Image tiles (compressed sections of the image)
o Information on how the image is sectioned into tiles
The size and location of each of these data items is contained in a
table in the beginning of each PIX file. To find a particular item,
the index table is scanned for a matching Item ID to obtain the item
location and size.
The structure of the PIX file header and index table as well as the
Item IDs and data structures are provided in the following sections.
Pix File Header
At the begining of the PIX file are two words. The first word
contains the revision level of the PIX file which is currently 3. The
second word contains the number of Item Records in the index table.
Following this brief header is the index table containing an array of
item record structures. These structures are defined in C as:
struct Item_Rec {
unsigned app_id; /* Application Id # */
unsigned app_len; /* Length of application data
*/
long app_loc; /* Location in file of
app data */
};
To obtain a data item, you search through this array of records for a
matching app_id structure which then contains the location and length
of the item. Empty item records contain an app_id=-1.
Image Information
The application ID for the image structure is 0. This data item
contains information on the overall image size, type, and origin of
the image. The structure (in C) of this data item is:
struct mode_data {
unsigned char hmode;
unsigned char htype;
unsigned char cfore;
unsigned char cback;
unsigned char tattr;
unsigned char tcpr;
unsigned char trows;
unsigned char thfnts;
unsigned char tlfnts;
unsigned char tcpf;
unsigned int tfsize[4];
unsigned int gcols;
unsigned int grows;
unsigned char gfore;
unsigned char prepal;
unsigned char lodpal;
unsigned char lintens;
unsigned char lred;
unsigned char lgreen;
unsigned char lblue;
unsigned char pages;
unsigned char haspect;
unsigned char vaspect;
};
Following is a description of each member of this structure:
hmode
Hardware specific mode. 0 if not specifically related to a
specific hardware mode of a board.
htype
Hardware type. Bit 0=0 if alphanumeric and Bit 0=1 if bit map
graphics. Board types are ORed into this byte. Board types
include:
8=CGA
16=Hercules
24=EGA
cfore
Text foreground color bits (ignore if graphics) 4 for CGA
tattr
Text background color bits (ignore if graphics) 3 for CGA
tcpr
Text characters per row (ignore if graphics)
trows
Text rows (ignore if graphics)
thfnts
Text hardware fonts (not used)
tlfnts
Text loadable fonts (not used)
tcpf
Text characters per font (Not used).
tfsize
Font size (not used).
gcols
Graphics columns
grows
Graphics rows
gfore
Graphics foreground color bits
prepal
Number of preset pallettes (default to 0)
lodpal
Number of loadable pallettes
lintens
Number of pallette bits for intesity
lred
Number of pallette bits for red
lgreen
Number of pallette bits for green
lblue
Number of pallette bits for blue
pages
Number of possible pages (not used)
haspect
Horizontal component of aspect ratio (number of horizontal
pixels to fit in a square)
vaspect
Vertical component of aspect ratio (number of vertical pixels
to fit in a square)
A sample image structure for 600 rows by 800 columns single bit plane
image might be initialized as follows:
struct mode_data {
unsigned char hmode=0;
unsigned char htype=1;
unsigned char cfore=0;
unsigned char cback=0;
unsigned char tattr=0;
unsigned char tcpr=80;
unsigned char trows=25;
unsigned char thfnts=0;
unsigned char tlfnts=0;
unsigned char tcpf=0;
unsigned int tfsize[4]=0;
unsigned int gcols=800;
unsigned int grows=600;
unsigned char gfore=1;
unsigned char prepal=0;
unsigned char lodpal=0;
unsigned char lintens=1;
unsigned char lred=0;
unsigned char lgreen=0;
unsigned char lblue=0;
unsigned char pages=0;
unsigned char haspect=1;

unsigned char vaspect=1;
};
Printing Options
The application ID for InSet Printing options is 11 Hexidecimal. The
C structure containing these items follows:
struct prt_options {
int
pitch,
scol,
ecol,
srow,
erow,
p_wid,
siz,
rotat,
do_sw;
res_1,
res_2,
pcolor,
row_dp,
col_dp,
flags;
char ink_tab[16];
};
pitch
Printer Pitch divided by 10 (e.g. 100 = 10 pitch) (not
required, set to 100)
scol
Start column clip boundary
ecol
End column clip boundary
srow
Start row clip boundary
erow
End row clip boundary
p_wid
Printer width (not required, set to 0)
size
Size (not used, set to 0)
rotat
Rotation (0=Horizontal, -1=Left, 1=Right)
do_sw
Option Bits ORed. Applicable bits to set include:
Double Pass |= 2
Letter Quality |= 4
Border On |= 10 (Hex)
res_1
res_2
Internal Use (don't use, set to 0)
pcolor
Low order byte indicates whether the image setting are
intended for color printer (True=1, False=0)
High order byte is a selects which dither pattern type to use
( 0=Old, 1=Gray, 2=Contrast).
row_dp
Height of image in Decipoints (1/720 inches)
col_dp
Width of image in Decipoints (1/720 inches)
flags
Modify flags
Size option bits:
#define INDATA_USE_COL 0x1
#define INDATA_USE_INCH 0x2
#define INDATA_USE_DP 0x3
Modify/Ink Selection:
#define INDATA_INK_INV 0x8
#define INDATA_INK_BW 0x10
#define INDATA_INK_TAB 0x18
#define INDATA_VDISK 0x20
#define INDATA_VSIZE 0x40
#define INDATA_DYNAMIC 0x80
ink_tab
16 byte table mapping screen colors to printer colors/gray
patterns (see the MODIFY/INKS section of the InSet manual for
more information on ink tables). If you want to select your
own Ink table mapping the flags variable must have a 0x18
or'ed in. Preset InSet Ink tables are set as follows:
Color Number 0 1 2 3 4 5 6 7 8 9 A B C D E F
_____________________________________________________
Standard F 1 2 3 4 5 6 7 8 9 A B C D E 0
Invert 0 1 2 3 4 5 6 7 8 9 A B C D E F
B&W F 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0
Pallette Data
Application ID=1 contains display pallette information. Pallette
information is stored in an array of pallette structures of the
following form:
struct pallette {
char intens, red, green, blue;
};
The number of significant pallette items in the array is determined by
the number of available colors (gfore in the image data structure) in
the image. The significant bits are determined by the lintens lred
lgreen, and lblue items in the modedata structure.
Tile Information
Information as to how the image is broken down into tiles is contained
in the data item with ID=2. This structure follows:
struct Tile_Data {
unsigned page_rows;
unsigned page_cols;
unsigned stp_rows;
unsigned stp_cols;
};
page_rows
Number of rows within each tile.
page_cols
Number of columns in each tile (must be divisible by
8)
stp_rows
Number of horizontal tile strips within the image
stp_cols
Number of vertical tile strips
Each tile is limited to a maximum of 4096 bytes of uncompressed data.
The actual tiles are numbered starting with the upper left row as tile
0 and incremented from left to right as illustrated below.
---------------
| 0 | 1 | 2 | 3 |
|---------------
| 4 | 5 | 6 | 7 |
|---------------|
| 8 | 9 | A | B |
---------------
The ID of a tile is the tile number ORed with a Hex 8000. For
example, the lower right tile can be found by finding the record with
ID=800B (Hex).
Images may be broken down into a checker board sections or Horizontal
strips. However, if the image is broken into horizontal strips
processing the image as rotated by InSet will be slowed.
Pixel Tiles
Each individual Pixel tile ID is determined by ORing in Hex 8000 with
the tile number as described in the preceding tile information
section.
The image is organized into bitplanes with 8 Pixels per byte with the
most significant bit containing the left-most pixel. For multiple bit
plane images, all scan lines for a plane are written out before the
scan lines in the next plane.
If the actual column boundary of the tile exceeds the column bounds of
the image it is padded with blank bytes to fill out the tile. If the
actual row bound of the tile exceeds the image, the extra rows are not
present.
When the tile is store on disk it is in compressed format using a
vertical compression technique. The first scan line of each tile is
written out with no modification. Then before the following scan
lines there are compression bytes which indicate which bytes in the
scan line are differrent than the preceding line. Each bit in the
compression byte indicates whether a particular byte in that scan has
changed (1 if changed, 0 if not). Then following the compression
bytes, only the modified scan bytes are written to the file.
For example, if we had a tile that was 8 colomns wide and the first
scan line was all blank and there was a dot at the beginning and end
of the second scan line it would be written to disk as follows:
00 00 00 00 00 00 00 00 <- First Scan Line
81 80 01 <- Changed Bytes
^
|
Compression Byte
In multiple bit plane images, the first scan is uncompressed and
following lines compressed in the same manner.
Character Tiles
Alpha/Numeric images can be generally described as a two plane image
with the first plane containing the alphanumeric character data and
the second containing the attribute information. Alphanumeric
characters are presumed to correspond the the IBM extended ASCII
character set with attribute information corresponding to the IBM CGA
standard.
The character and text planes compressed in the same manner as image
bit planes with one caveat. The text scan line lenght is twice what
it should be (i.e. 160 bytes go out uncompressed for an 80 column
screen).