home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
1st Canadian Shareware Disc
/
1st_Canadian_Shareware_Disc_1991.ISO
/
graphics
/
giftif
/
cnvhuf.h
next >
Wrap
C/C++ Source or Header
|
1989-11-22
|
7KB
|
197 lines
/*----------------------------------------------------------------------*/
/* Copyright (c) 1988-1989 */
/* by CompuServe Inc., Tucson, AZ. All Rights Reserved */
/* CNVHUF.H can be copied and distributed freely for any */
/* non-commercial purposes. CNVHUF.H can only be incorporated */
/* into commercial software with the permission of CompuServe Inc. */
/*----------------------------------------------------------------------*/
/* Header file CNVHUF.H */
/* Global type definitions for Group 3 FAX work and TIF files */
#define WHITE (0)
#define BLACK (1)
#define LONGEST_LINE (2432) /* Longest line we expect */
#define LONGEST_RLE (1266) /* Most run lengths for longest_line */
#define FAX_line_width (1728) /* Longest line expected from FAX */
#define FAX_page_length (4000)
#define FAX_min_line (24) /* Minimum bits per line (20m sec rule) */
typedef int
colors; /* The two modes are these */
/* Structures in a TIF file as used by GAMMAfax */
typedef struct
ifd_tag_record /* Format of tag field(s) */
{
int
IFD_tag, /* TIF tag describing rest of element */
IFD_type; /* Type of data referred to by IFD_tag */
long int
IFD_length; /* Length of data referred to */
union
{
short int
short_pair[2]; /* 4 bytes are used for either 2 shorts */
long int
long_one; /* Or one long value */
long int
offset; /* Or pointer to later in the file */
} params;
} IFD_tag_body;
typedef struct
ifd_header_record /* Format of Image File Directory */
{
short int
IFD_ele_cnt;
IFD_tag_body
IFD_tag_element[20]; /* IFD_ele_cnt number of these */
char
IFD_ptr_params[100]; /* Room for params after directory */
} IFD_header;
typedef struct
tif_file_header_record /* Format of TIF header */
{
char
TIF_sign[4]; /* Signature */
long int
IFD_offset; /* Offset to first IFD */
} TIF_header;
/* Standard TAG_tag's (TT's) and contents: */
/* The following their data in line: */
#define TT_width (256) /* Image width follows */
#define TT_width_type (3) /* uses short integers */
#define TT_width_cnt (1L) /* uses only one parameter */
#define TT_length (257) /* Image length */
#define TT_length_type (3) /* uses short integers */
#define TT_length_cnt (1L) /* uses only one parameter */
#define TT_PixBits (258) /* Bits per pixel */
#define TT_PixBits_type (3) /* uses short integers */
#define TT_PixBits_cnt (1L) /* uses only one parameter */
#define TT_PixBits_par (1) /* Standard value for B/W */
#define TT_Cmprs (259) /* Compression method */
#define TT_Cmprs_type (3) /* uses short integers */
#define TT_Cmprs_cnt (1L) /* uses only one parameter */
#define TT_Cmprs_par (3) /* Standard value for Group3 */
#define TT_Revrs (262) /* Color reversal */
#define TT_Revrs_type (3) /* uses short integers */
#define TT_Revrs_cnt (1L) /* uses only one parameter */
#define TT_Revrs_par (0) /* Standard value for black on white */
#define TT_MSBend (266) /* True if MSB is last */
#define TT_MSBend_type (3) /* uses short integers */
#define TT_MSBend_cnt (1L) /* uses only one parameter */
#define TT_MSBend_par (1) /* Standard value for FAX */
#define TT_Orient (274) /* True if top left is (0,0) */
#define TT_Orient_type (3) /* uses short integers */
#define TT_Orient_cnt (1L) /* uses only one parameter */
#define TT_Orient_par (1) /* Standard value for FAX */
#define TT_Samps (277) /* Number of samples per pixel */
#define TT_Samps_type (3) /* uses short integers */
#define TT_Samps_cnt (1L) /* uses only one parameter */
#define TT_Samps_par (1) /* Standard value for FAX */
#define TT_Grp3Opt (292) /* Encoding scheme within group III */
#define TT_Grp3Opt_type (4) /* Uses long integers */
#define TT_Grp3Opt_cnt (1L) /* uses only one parameter */
#define TT_Grp3Opt_par (0) /* Standard value for Huffman */
#define TT_Resol (296) /* Resolution unit (none, inch, cm ) */
#define TT_Resol_type (3) /* uses short integers */
#define TT_Resol_cnt (1L) /* uses only one parameter */
#define TT_Resol_par (2) /* Standard value for FAX density */
#define TT_PagNum (297) /* This page, Total pages */
#define TT_PagNum_type (3) /* uses short integers */
#define TT_PagNum_cnt (2L) /* uses two parameters */
#define TT_PagNum_par1 (1) /* Standard values for first page */
#define TT_PagNum_par2 (1) /* of only one page */
/* The following use pointers to their data: */
/* The pointers are integer byte numbers that the data starts
on in the file */
#define TT_Title (270) /* Title generated by FAX */
#define TT_Title_type (2) /* Uses text */
#define TT_Image (273) /* Image generated by FAX */
#define TT_Image_type (3) /* Integers */
#define TT_X_dense (282) /* X_dense generated by FAX */
#define TT_X_dense_cnt (1L) /* Only one parameter */
#define TT_X_dense_type (5) /* Rational fraction */
#define TT_X_dense_par1 (204) /* 204 dots per */
#define TT_X_dense_par2 (1) /* 1 inch */
#define TT_Y_dense (283) /* Y_dense generated by FAX */
#define TT_Y_dense_cnt (1L) /* Only one parameter */
#define TT_Y_dense_type (5) /* Rational fraction */
#define TT_Y_dense_par1 (196) /* 196 dots per */
#define TT_Y_dense_par2 (1) /* 1 inch */
/* Other fields: */
#define TIF_sign_par "II*\000" /* Text at beginning of TIF file */
#define TIF_msc_1 ((8,0)) /* Additional data there */
typedef int
INTER_ARR1[LONGEST_RLE]; /* Highest number of runs in a line */
typedef struct
rle_line_record
{
int
line_length, /* Total pixels on line */
rle_count, /* Total run-lengths here */
rle_pointer; /* Current entry in rle_list */
colors
rle_color; /* Color of current run */
int
rle_start_column, /* Starting column of rle_pointer */
current_column; /* Current pixel position */
INTER_ARR1
rle_list;
} rle_line;
typedef int
node_label; /* Used for last 4 bits of code */
typedef struct
huffman_node_record { /* There is one record per 8 bit possibility */
unsigned char bits_consumed; /* Significant bits in this entry */
int run_length; /* (if over 8 insert 0 here */
} huffman_node;
typedef huffman_node
table_1st_bits[256][2],
table_end_bits[16];
typedef struct
huffman_code_record { /* There is one record for each array entry */
unsigned char
code_bits; /* Length of following code */
short int
code_value; /* The code itself */
} huffman_code;
typedef char
file_name_string[(20)+1];
/* Declare globals */
extern int
scan_lines;