sys7.1-doc-wip/QuickDraw/PictUtilities/puPrivate.h
2019-07-27 22:37:48 +08:00

190 lines
6.3 KiB
C

/*
File: puPrivate.h
Contains: This is the main header file for the picture utilities package.
Written by: Dave Good. Some ideas stolen from Konstantin Othmer and Bruce Leak. Prototyped by Cris Rys.
Copyright: © 1990 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<9> 9/25/90 DDG Saved a few bytes by changing the IsColorPort and IsPixMap
macros to cast everything to short before the “and” operation.
<8> 9/21/90 DDG Made changes from code review. Pulled out all the public stuff
into the public interface file (“PictUtil.h”).
<7> 8/5/90 DDG Fixed the prototype of the RecordColors routine. Added two
fields for checking to see if we are reading data past the end
of a picture.
<6> 8/3/90 DDG Renumbered the verbs and added a prototype for the
CalcExactTable routine.
<5> 8/2/90 DDG Added a field for custom color procs and added a prototype for
the custom RecordColors routine.
<4> 7/31/90 DDG Replaced the workingCTPtr field by a buffer field
(colorTableBuffer) and a color table entries count
(colorTableEntries).
<3> 7/30/90 DDG Added fields to support colorizing and exact histograms.
<2> 7/29/90 DDG Fixed header.
<1> 7/29/90 DDG First checked in using new structure.
To Do:
*/
/*----------------------------------------------------------------------------------------------------------*/
/*
| Includes
*/
#include <types.h>
#include <memory.h>
#include <quickdraw.h>
#include <palettes.h>
#include <pictutil.h>
#include <errors.h>
/*----------------------------------------------------------------------------------------------------------*/
/*
| Defines
*/
#define allVerbMask ( (short) 0x001F )
#define IsColorPort(x) ( ((unsigned short)(x) & (unsigned short)0xC000) != 0 )
#define IsPixMap(x) ( ((unsigned short)(x) & (unsigned short)0x8000) != 0 )
#define CURRENT_VERSION 0
#define HistogramTableSize (32768 * 2)
#define maximumExactColors 256
#define bufferFixedType 1
#define bufferFixedLastingType 2
#define bufferVariableType 3
/*----------------------------------------------------------------------------------------------------------*/
/*
| Functions
*/
extern pascal OSErr __GetPictInfo( PicHandle, PictInfo *, short, short, short, short );
extern pascal OSErr __GetPixMapInfo( PixMapHandle, PictInfo *, short, short, short, short );
extern pascal OSErr __NewPictInfo( PictInfoID *, short, short, short, short );
extern pascal OSErr __RecordPixMapInfo( PictInfoID, PixMapHandle );
extern pascal OSErr __RecordPictInfo( PictInfoID, PicHandle );
extern pascal OSErr __RetrievePictInfo( PictInfoID, PictInfo *, short );
extern pascal OSErr __DisposPictInfo( PictInfoID );
/*----------------------------------------------------------------------------------------------------------*/
/*
| Internal Structures
*/
/*
| This is the definition for the external function that is called to read in data
| for the picture. The APPLICATION provides this function.
*/
typedef pascal void( *GetPicDataProcPtr )( Ptr, short );
typedef struct Buffer {
unsigned char *ptr;
unsigned long size;
unsigned long ref;
} Buffer;
typedef struct InternalPictInfo {
PictInfo ext;
PictInfoID thePictInfoID; // for identifications/verification purposes
short verb;
short colorPickMethod;
short colorsRequested;
Buffer spoolBuffer;
Buffer lineBuffer;
Buffer bandBuffer;
unsigned char *spoolPtr; // a pointer to the current offset in the spool buffer
unsigned char *spoolMax; // the ending pointer for the spool buffer (start + size)
PicHandle spoolPictHandle; // handle to the picture (for spooling purposes)
unsigned long spoolPictOffset; // offset into the picture (for spooling purposes)
unsigned long spoolPictLength; // length of the picture handle
OSErr spoolPictError; // error that occurred in the spooling routines
GetPicDataProcPtr spoolProc; // the APPLICATION procedure that reads the picture into the buffer
short colorBankType; // if this is true then the color bank is a 555 histogram
Buffer colorBankBuffer;
short colorBankIndex; // this is only used for custom colors.
Buffer colorTableBuffer; // this contains the pre-colorized, fleshed out color table for index stuff
short colorTableEntries; // number of entries in the color table buffer
long *indexCachePtr;
RGBColor foreColor;
RGBColor backColor;
short colorizing;
long pickProcData;
} InternalPictInfo, *InternalPictInfoPtr, **InternalPictInfoHandle;
/*----------------------------------------------------------------------------------------------------------*/
/*
| Internal Funtions
*/
unsigned char GetPictByte( InternalPictInfoPtr );
unsigned short GetPictWord( InternalPictInfoPtr );
unsigned long GetPictLong( InternalPictInfoPtr );
void GetPictData( InternalPictInfoPtr, unsigned char *, unsigned long );
void SkipPictData( InternalPictInfoPtr, unsigned long );
void SkipPictByte( InternalPictInfoPtr );
void SkipPictWord( InternalPictInfoPtr );
void SkipPictLong( InternalPictInfoPtr );
void AddPadBytes( unsigned char *, unsigned char *, unsigned long );
void MergeRGBData( unsigned char *, unsigned char *, unsigned short, Boolean );
void UnpackWords( unsigned char *, unsigned char **, unsigned short );
void ClearMemoryBytes( char *, unsigned long );
void NewEmptyBuffer( Buffer * );
OSErr NewBuffer( Buffer *, unsigned long, short );
OSErr NewBufferClear( Buffer *, unsigned long, short );
OSErr SetBufferSize( Buffer *, unsigned long, short );
OSErr SetBufferSizeClear( Buffer *, unsigned long, short );
OSErr KillBuffer( Buffer * );
OSErr RecordPixMapGuts( InternalPictInfoPtr, PixMapHandle );
void RecordPixels( InternalPictInfoPtr, short, short, short, long, short );
void RecordRGBColor( InternalPictInfoPtr, RGBColor * );
void CalcExactTable( short, short, ColorSpec *, ColorSpec * );
InternalPictInfoPtr DerefPictInfoID( PictInfoID, char * );
pascal OSErr InitPickMethod( short, long *, short *, short );
pascal OSErr RecordColors( long, RGBColor *, long, long *, short );
pascal OSErr CalcColorTable( long, short, char *, ColorSpec *, short );
pascal OSErr KillPickMethod( long, short );
/*----------------------------------------------------------------------------------------------------------*/