
				TIFF256
			   Graphics Library
			      Extensions

			  For C Programmers

			      Version 1.0
			      July 6, 1992


		      Copyright Spyro Gumas, 1992.
			   All Rights Reserved



					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

1.0 Introduction                                        3
      1.1 Some TIFF Insight                             3
2.0 The TIFF256 Extensions Environment                  4
      2.1 Using The TIFF256 Extensions                  4
      2.2 Support of TIFF 5.0                           4
      2.3 Global Graphics Parameters                    7
3.0 TIFF256 Extensions Functionality                    8
      3.1 Function Descriptions                         8
	    3.1.1 tf_open_file                          8
	    3.1.2 tf_close_file                         8
	    3.1.3 tf_get_file_info                      9
	    3.1.4 tf_skip_ifd                           9
	    3.1.5 tf_set_defaults                       10
	    3.1.6 tf_read_ifd                           11
	    3.1.7 tf_display_image                      12
	    3.1.8 tf_set_prime_colors                   12
      3.2 Handling The Color Look Up Table              13
4.0 Nitty Gritties                                      14
      4.1 Registration Information                      14
      4.2 Software License                              14
      4.3 Disclaimer                                    14
      4.4 Technical Support                             15
5.0 Coming Attractions                                  16
6.0 Appendix                                            17
      6.1 TIFF.H Include File                           17

				
				
				
				
				
				
				
				
				Page: 2
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

1.0 Introduction

      The TIFF256 Extensions is a library of C routines which enhance 
the VSA256 Graphics Library to provide a C programmer with the tools 
necessary to display Tagged Image File Format (TIFF) images using a 
video adapter running with the VESA BIOS Extensions, Version 2.0.  
Support is provided for both Microsoft C and Borland C products.  The 
name "TIFF256" reflects the fact that this library supports the 256 
color video modes defined within the VESA standard.
      The distribution of the TIFF256 Extensions consists of the 8 files 
listed below.  These files are archived in the self extracting file 
TIF256.EXE.  To extract, just type TIF256 in the directory that you want 
the files extracted to.  When distributing the TIFF256 Extensions, 
distribute TIF256.EXE instead of the individual files.

TIF_DEMO.C        Demonstration program (Source Code).
TIF_DEMO.EXE      Demonstration program (Executable).
TIF_DATA.EXE      TIFF file analysis program (Executable).
TIFFMSL.LIB       TIFF256 Extensions, Large Memory Model (Microsoft C).
TIFFBCL.LIB       TIFF256 Extensions, Large Memory Model (Borland C).
TIFF.H            Include file required in your program.
TIFF256.TXT       This text document.
ORDER.TXT         A text file order form for upgrades and registration.

1.1 Some TIFF Insight

      A TIFF file can contain one or more images.  Each of these images 
is stored in the file as an "Image File Directory" (an IFD).  Each IFD 
consists of numerous fields or "tags".  Each tag defines a particular 
aspect of the image (ie. color model, width, length, resolution, etc.).  
With the TIFF256 Extensions, a programmer can find out how many IFDs are 
contained within a TIFF file, jump to the desired IFD, read all of the 
tags within the IFD, and display the IFD's image. 

				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 3
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

2.0 The TIFF256 Extensions Environment

2.1 Using The TIFF256 Extensions

      The TIFF256 Extensions work with any (any?) IBM PC, XT, AT or  
compatible computer equipped with an SVGA video adapter card capable of 
256 colors.  A math coprocessor chip is not required, however if it 
exists, this library will take advantage of it.  The TIFF256 Extensions 
are distributed as a Large Memory Model library for either Microsoft C 
or Borland C.  If other memory models are required, contact me.
      The TIFF256 Extensions are used in conjunction with the VSA256 
Graphics Library Version 1.1 (Version 1.0 Won't Work, Find V1.1 in same 
place you got TIFF256 Extensions).  The following discussion assumes 
that you are adding TIFF capability to an existing program which already 
uses the VSA256 Graphics Library.  To use the TIFF256 Extensions, add 
the file TIFF.H to your C compiler's default directory for INCLUDE 
files, add the statement:

#include<tiff.h>;

to your program, and add the file TIFFBCL.LIB or TIFFMSL.LIB to the list 
of files that your program is linked with.

2.2 Support of TIFF 5.0

      For the programmer familiar with the TIFF 5.0 Technical 
Memorandum, the following list indicate which and to what degree the 
defined tags are supported by the TIFF256 Extensions.  The tags 
supported provide functionality with most images.  When in doubt, run 
the provided TIF_DATA program to determine the characteristics of a 
given TIFF file.

				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 4
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

TAGS SUPPORTED:

Basic Tags -
	    BitsPerSample = 8,8,8 (for RGB or True Color Images)
	    BitsPerSample <= 8 (for Bilevel, Grayscale, or Palette 
	    images)
	    ColorMap
	    Compression = none
	    ImageLength
	    ImageWidth
	    NewSubFileType
	    PhotometricInterpretation = Bilevel and Grayscale
	    PhotometricInterpretation = RGB (True Color)
	    PhotometricInterpretation = Palette Color
	    PlanarConfiguration = 1
	    ResolutionUnit
	    RowsPerStrip
	    SamplesPerPixel
	    StripByteCounts
	    StripOffsets
	    XResolution
	    YResolution

TAGS NOT SUPPORTED (Maybe Next Revision):

Basic Tags -
	    BitsPerSample != 8,8,8 (for RGB or True Color Images)
	    BitsPerSample > 8 (for Bilevel, Grayscale, or Palette 
	    images)
	    ColorResponseCurves
	    Compression = CCITT Group 3 1-Dimensional Modified Huffman 
	    RLE
	    Compression = LZW Compression
	    Compression = PackBits Compression
	    GrayResponseCurve
	    GrayResponseUnit
	    PhotometricInterpretation = Transparency Mask
	    PlanarConfiguration = 2
	    Predictor

				
				
				
				
				
				
				
				
				
				
				Page: 5
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

TAGS NOT SUPPORTED (continued):

Informational Tags -
	    Artist
	    DateTime
	    HostComputer
	    ImageDescription
	    Make
	    Model
	    Software

Facsimile Tags -
	    Group3Options
	    Group4Options

Document Storage and Retrieval Tags -
	    DocumentName
	    PageName
	    PageNumber
	    XPosition
	    YPosition

Obsolete Tags -
	    CellLength
	    CellWidth
	    FillOrder
	    FreeByteCounts
	    FreeOffsets
	    MaxSampleValue
	    MinSampleValue
	    SubFileType
	    Orientation
	    Thresholding


				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 6
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

2.3 Global Graphics Parameters

      The file TIFF.H is used as an include file during program 
development.  This file includes all of the extension's function 
prototypes and it defines the global parameters that describe the TIFF 
File and individual IFDs.  The global graphics parameters are 
initialized by the tf_get_file_info() and tf_read_ifd() functions and 
are described below:

TF_Num_Ifd:             Unsigned, the number of IFDs in the TIFF file.
TF_ImageWidth:          Unsigned long, the image width in pixels.
TF_ImageLength:         Unsigned long, the image length in pixels.
TF_BitsPerSample[3]:    Unsigned, the number of bits per sample.  For
			Bilevel, grayscale, or Palette Color, pixel size 
			= TF_BitsPerSample[0].  For True Color, pixel 
			Red Component = TF_BitsPerSample[0], pixel Green 
			component = TF_BitsPerSample[1], pixel Blue 
			component = TF_BitsPerSample[2].
TF_ResolutionUnit:      Unsigned, 1 = Not specified, 2 = Inch, 3 = 
			Centimeter.
TF_SamplesPerPixel:     Unsigned, the number of samples per pixel.
TF_PhotometricInterpretation:Unsigned, 1 = Bilevel or Grayscale, 2 = RGB 
			(True Color) image, 3 = Palette Color Image.
TF_XResolution_int:     Unsigned long, the integral number of pixels in 
			the x dimension per TF_Resolution Unit
TF_XResolution_frac:    Unsigned long, the fractional number of pixels 
			in the x dimension per TF_Resolution Unit
TF_YResolution_int:     Unsigned long, the integral number of pixels in 
			the y dimension per TF_Resolution Unit
TF_YResolution_frac:    Unsigned long, the fractional number of pixels 
			in the y dimension per TF_Resolution Unit
TF_Black:         Unsigned, index into CLUT for color nearest to Black.
TF_Red:           Unsigned, index into CLUT for color nearest to Red.
TF_Orange:        Unsigned, index into CLUT for color nearest to Orange.
TF_Yellow:        Unsigned, index into CLUT for color nearest to Yellow.
TF_Green:         Unsigned, index into CLUT for color nearest to Green.
TF_Aqua:          Unsigned, index into CLUT for color nearest to Aqua.
TF_Blue:          Unsigned, index into CLUT for color nearest to Blue.
TF_Violet:        Unsigned, index into CLUT for color nearest to Violet.
TF_White:         Unsigned, index into CLUT for color nearest to White.


				
				
				
				
				
				
				
				
				Page: 7
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.0 TIFF256 Extensions Functionality

      This section describes the operation of the TIFF256 Extensions.  
To use the functions in this library, compile your program using the 
large memory model and link your program with the appropriate librarys 
listed below depending on the compiler being used.

      Microsoft C or Quick C       -      VSA256MS.LIB and TIFFMSL.LIB
      Borland C++ or Turbo C       -      VSA256BC.LIB and TIFFBCL.LIB

3.1 Function Descriptions

      In the following sections each function is listed along with a 
definition of its inputs and return values.  A description is provided 
followed by any relevant comments.

3.1.1 tf_open_file(filename)

Inputs:       char far filename[];

Returns:      int fail_flag;

Description:      This routine opens the TIFF file specified by the 
	character string 'filename[]' for use by the TIFF256 
	Extensions.  Only one file can be opened at a time.  The file 
	is opened as 'Read Only'.  If the file is successfully opened, 
	this routine returns a '0'.  Otherwise, it returns a '-1'.  
	This routine must be called before calling tf_get_file_info().

Comments:      


3.1.2 tf_close_file()

Inputs:       Nothing

Returns:      Nothing

Description:      This routine closes the currently open TIFF file.  
	This routine must be called before opening a new TIFF file with 
	tf_open_file().  This routine should be called before exiting 
	your program.

Comments:      


				
				
				
				
				Page: 8
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.1.3 tf_get_file_info()

Inputs:       Nothing

Returns:      int fail_flag;

Description:      This routine verifies that the selected file is a TIFF 
	format file.  Then it initializes the TIFF256 environment for 
	this file.  The global parameter 'TF_Num_Ifd' is set to the 
	number of Image File Directories (IFDs) existing within the 
	file.    An IFD is one 'picture', and multiple IFDs can exist 
	within one TIFF file.  The TIFF file pointer is set to point to 
	the first IFD in the file.  This routine is typically called 
	after tf_open_file().  If an error occurs, this routine returns 
	a 1, otherwise it returns a 0.

Comments:      


3.1.4 tf_skip_ifd(count)

Inputs:       unsigned count;

Returns:      int reached_end;

Description:      This routine moves the TIFF file pointer ahead 'count' 
	IFDs. Typically, this routine is called after 
	tf_get_file_info() to index the TIFF file pointer to the 
	desired IFD.  For example, if tf_get_file_info() sets 
	TF_Num_Ifd to 5, calling this routine immediately after 
	tf_get_file_info() with 'count' = 3, will cause the TIFF file 
	pointer to skip over the first 3 IFDs and point to the 4th IFD.  
	If 'count' equals or exceeds the number of remaining IFDs, this 
	routine returns a 1, and the TIFF file pointer is set to point 
	to the last IFD.  Otherwise it returns a 0.

Comments:      


				
				
				
				
				
				
				
				
				
				
				
				Page: 9
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.1.5 tf_set_defaults()

Inputs:       Nothing

Returns:      Nothing

Description:      This routine sets the default values for all of the 
	global parameters which are modified by TIFF 'Tags'.  TIFF 
	files may not include data for all of the parameters used by 
	the TIFF256 environment, and therefore the defaults should be 
	set.  This routine should be called at the beginning of each 
	new IFD, prior to calling tf_read_ifd().  The default values 
	are listed below:

			TF_ImageWidth                   =      0
			TF_ImageLength                  =      0
			TF_BitsPerSample[0]             =      1
			TF_BitsPerSample[1]             =      1
			TF_BitsPerSample[2]             =      1
			TF_ResolutionUnit               =      2
			TF_SamplesPerPixel              =      1
			TF_PhotometricInterpretation    =      1
			TF_XResolution_int              =      300
			TF_XResolution_frac             =      1
			TF_YResolution_int              =      300
			TF_YResolution_frac             =      1


Comments:      


				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 10
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.1.6 tf_read_ifd()

Inputs:       Nothing

Returns:      int fail_flag;

Description:      This routine reads the data from the IFD currently 
	pointed to by the TIFF file pointer.  The TIFF file pointer 
	must be pointing to a valid IFD prior to calling this routine 
	(This routine is typically called after tf_open_file() or 
	tf_skip_ifd() which initialize the pointer).  After reading the 
	data from the current IFD, the TIFF file pointer is set to 
	point to the next IFD.  If the TIFF file pointer points to the 
	last IFD in the TIFF file and this routine is executed, the IFD 
	is read, and then the TIFF file pointer is set with a null 
	value.  After calling this routine, tf_display_image can be 
	called to display the IFD's image.  If an error occurs, or this 
	routine is called with the TIFF file pointer set to a null 
	value, fail_flag is returned set to '1', otherwise it is 
	returned set to '0'.  The following global parameters are set 
	by this routine:

			TF_ImageWidth
			TF_ImageLength
			TF_BitsPerSample[3]
			TF_ResolutionUnit
			TF_SamplesPerPixel
			TF_PhotometricInterpretation
			TF_XResolution_int
			TF_XResolution_frac
			TF_YResolution_int
			TF_YResolution_frac
			TF_Black
			TF_Red
			TF_Orange
			TF_Yellow
			TF_Green
			TF_Aqua
			TF_Blue
			TF_Violet
			TF_White

Comments:      


				
				
				
				
				
				Page: 11
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.1.7 tf_display_image(x0,y0)

Inputs:       Unsigned x0;
	      Unsigned y0;

Returns:      Nothing

Description:      This routine displays the image that is defined in the 
	IFD read by the most recent call to tf_read_ifd().  The image 
	is drawn with its top left corner at screen coordinates 
	'x0,y0'.  The Color Look Up Table (CLUT) is not modified until 
	this routine is executed.  When executed, this routine prepares 
	the CLUT as defined by the IFD being displayed.  Before calling 
	this routine, 'tf_read_ifd()' must be called to initialize all 
	of the required parameters.

Comments:      This routine may be called more than once per 
	'tf_read_ifd()' call.  Please DO NOT call this routine if 
	'tf_read_ifd()' returns an error (return value = 1).


3.1.8 tf_set_prime_colors()

Inputs:       Nothing

Returns:      Nothing

Description:      This routine updates the prime color global 
	parameters: TF_Black, TF_Red, TF_Orange, TF_Yellow, TF_Green, 
	TF_Aqua, TF_Blue, TF_Violet, and TF_White.  It does this by 
	scanning the CLUT and loading each parameter with the CLUT 
	index for the brightest color nearest to the color specified by 
	the parameter name.  This routine should be called following 
	any operation which modifies the CLUT (such as tf_display_image).
	      The prime color global parameters are provided in an 
	attempt to give the user access to a standard set of colors 
	(for use with text, borders, etc.) regardless of CLUT 
	operations.  However, the color must exist in the CLUT for this 
	routine to find it.

Comments:      

				
				
				
				
				
				
				
				
				Page: 12
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

3.2 Handling The Color Look Up Table

      The TIFF256 Extensions supports Bilevel and 8 bit or less 
Grayscale (TF_PhotometricInterpretation = 1), 24 bit True Color 
(TF_PhotometricInterpretation = 2) and 8 bit or less Palette Color 
(TF_PhotometricInterpretation = 3) image types.  Since this library is 
specifically designed for 256 entry Color Look Up Tables (CLUTs), for 
True Color images, the Red, Green, and Blue color components are 
compressed to 8 bit pixels consisting of 3 bits Red, 3 bits Green, and 2 
bits Blue, and the CLUT is loaded with a compressed True Color table.  
For Palette color images, the IFD comes with its own values which are 
directly loaded into the CLUT.  Regardless of image type, the CLUT is 
not loaded until tf_display_image is called, even though the IFD may 
have already been read by tf_read_ifd().  This means that the previously 
loaded CLUT (typically from previously displayed IFD) remains in force 
until tf_display_image() is called.


				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 13
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

4.0 Nitty Gritties

4.1 Registration Information

      If you find the TIFF256 Extensions useful, a registration of $20 
would be appreciated.  If you register, you will receive a diskette and 
manual for the next upgrade of the software (see Section 5.0 Coming 
Attractions).

	  Please state the version number of the software you are 
presently using.  Send check or money order to:

			Spyro Gumas
			1668 Shady Brook Drive
			Fullerton, Ca. 92631

4.2 Software License

TIFF256 Extensions, Version 1.0
Copyright Spyro Gumas, 1992.  All Rights Reserved.

You are free to copy and distribute the TIFF256 Extensions if:

1)      It is used strictly for non-commercial purposes.
2)      No fee is charged for use, copying or distribution.
3)      It is not modified in any way.

      Clubs and user groups may charge a nominal fee not to exceed ($10) 
for expenses and handling while distributing the TIFF256 Extensions.

      Site licenses and commercial licenses for the TIFF256 Extensions 
are available.  Consult the file ORDER.TXT for more information, or 
contact me for more information.

4.3 Disclaimer

      This software is provided "as is".  All warranties relating to 
this software are disclaimed, whether expressed or implied, including 
without limitation any implied warranties of merchantability or fitness 
for a particular purpose.  Neither the author nor an agent of the author 
will be liable for any special, incidental, consequential, indirect or 
similar damages due to loss of data or any other reason, even if the 
author or an agent of the author has been advised of the possibility of 
such damages.  In no event shall the author's or an agent of the 
author's liability for any damages ever exceed the price paid for the 
license to use software, regardless of the form of the claim.  The 
person using the software bears all risk as to the quality and 
performance of the software.


				Page: 14
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

4.4 Technical Support

      If you have any questions or comments about the TIFF256 
Extensions, please write me at:

			Spyro Gumas
			1668 Shady Brook Drive
			Fullerton, Ca. 92631


				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 15
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

5.0 Coming Attractions

      This stuff is shareware.  In an attempt to actually make make money 
with shareware, I have to have something that you want (I'm an optimist).  
To this end, I offer TIFF256 Extensions Version 2.0.
      Version 2.0 of the TIFF256 Extensions incorporates TIFF FILE WRITING 
capabilities so that you can generate a TIFF file of any image you generate 
or modify using the VSA256 Graphics Library.   Version 2.0 also supports 
some additional TIFF Tags while preserving compatibility with the previous 
version.  With the $20 registration fee, you will automatically receive this 
upgrade.  Some of the Version 2.0 new TIFF features are:

TIFF File Writing Capability

Basic Tags -
	ColorResponseCurves
	GrayResponseCurve
	GrayResponseUnit
	PlanarConfiguration = 2

Informational Tags -
	Artist
	DateTime
	HostComputer
	ImageDescription
	Make
	Model
	Software

Document Storage and Retrieval Tags -
	DocumentName
	PageName
	PageNumber
	XPosition
	YPosition

				
				
				
				
				
				
				
				
				
				
				
				
				
				
				Page: 16
					
TIFF256 Graphics Library Extensions                      July 6, 1992
Version 1.0

6.0 Appendix

6.1 TIFF.H Include File

/*................................. TIFF.H ................ 5-30-92 ........*/
/* This file declares the TIFFLB library functions and global parameters    */
/* used throughout the graphics routines.                                   */
/*                                                                          */
/*            Copyright Spyro Gumas, 1992.  All Rights Reserved.            */
/*..........................................................................*/


/*..........................................................................*/
/*                          Function Prototypes                             */
/*..........................................................................*/
int  _far _cdecl tf_open_file(char _far *);
void _far _cdecl tf_close_file(void);
int  _far _cdecl tf_get_file_info(void);
int  _far _cdecl tf_skip_ifd(unsigned);
void _far _cdecl tf_set_defaults(void);
int  _far _cdecl tf_read_ifd(void);
void _far _cdecl tf_display_image(unsigned,unsigned);
void _far _cdecl tf_set_prime_colors(void);

/*..........................................................................*/
/*                          Parameter Declarations                          */
/*..........................................................................*/

unsigned long TF_ImageWidth, TF_ImageLength;
unsigned TF_BitsPerSample[3],TF_Num_Ifd;
unsigned TF_ResolutionUnit,TF_SamplesPerPixel;
unsigned TF_PhotometricInterpretation;
unsigned long TF_XResolution_int,TF_XResolution_frac;
unsigned long TF_YResolution_int,TF_YResolution_frac;
unsigned TF_Black,TF_Red,TF_Orange,TF_Yellow,TF_Green;
unsigned TF_Aqua,TF_Blue,TF_Violet,TF_White;


				
				
				
				
				
				
				
				
				
				
				
				
				Page: 17



