/*
     File:       Quickdraw.h
 
     Contains:   Interface to Quickdraw Graphics
 
     Version:    Technology: Mac OS 9
                 Release:    QuickTime 6.0.2
 
     Copyright:  (c) 1985-2001 by Apple Computer, Inc., all rights reserved
 
     Bugs?:      For bug reports, consult the following page on
                 the World Wide Web:
 
                     http://developer.apple.com/bugreporter/
 
*/
#ifndef __QUICKDRAW__
#define __QUICKDRAW__

#ifndef __COMPONENTS__
#include "Components.h"
#endif

#ifndef __MACTYPES__
#include "MacTypes.h"
#endif

#ifndef __MIXEDMODE__
#include "MixedMode.h"
#endif

#ifndef __QUICKDRAWTEXT__
#include "QuickdrawText.h"
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
    #pragma pack(2)
#endif

enum {
    invalColReq                 = -1                            /*invalid color table request*/
};

enum {
                                                                /* transfer modes */
    srcCopy                     = 0,                            /*the 16 transfer modes*/
    srcOr                       = 1,
    srcXor                      = 2,
    srcBic                      = 3,
    notSrcCopy                  = 4,
    notSrcOr                    = 5,
    notSrcXor                   = 6,
    notSrcBic                   = 7,
    patCopy                     = 8,
    patOr                       = 9,
    patXor                      = 10,
    patBic                      = 11,
    notPatCopy                  = 12,
    notPatOr                    = 13,
    notPatXor                   = 14,
    notPatBic                   = 15,                           /* Special Text Transfer Mode */
    grayishTextOr               = 49,
    hilitetransfermode          = 50,
    hilite                      = 50,                           /* Arithmetic transfer modes */
    blend                       = 32,
    addPin                      = 33,
    addOver                     = 34,
    subPin                      = 35,
    addMax                      = 37,
    adMax                       = 37,
    subOver                     = 38,
    adMin                       = 39,
    ditherCopy                  = 64,                           /* Transparent mode constant */
    transparent                 = 36
};

enum {
    italicBit                   = 1,
    ulineBit                    = 2,
    outlineBit                  = 3,
    shadowBit                   = 4,
    condenseBit                 = 5,
    extendBit                   = 6
};

enum {
                                                                /* QuickDraw color separation constants */
    normalBit                   = 0,                            /*normal screen mapping*/
    inverseBit                  = 1,                            /*inverse screen mapping*/
    redBit                      = 4,                            /*RGB additive mapping*/
    greenBit                    = 3,
    blueBit                     = 2,
    cyanBit                     = 8,                            /*CMYBk subtractive mapping*/
    magentaBit                  = 7,
    yellowBit                   = 6,
    blackBit                    = 5
};

enum {
    blackColor                  = 33,                           /*colors expressed in these mappings*/
    whiteColor                  = 30,
    redColor                    = 205,
    greenColor                  = 341,
    blueColor                   = 409,
    cyanColor                   = 273,
    magentaColor                = 137,
    yellowColor                 = 69
};

enum {
    picLParen                   = 0,                            /*standard picture comments*/
    picRParen                   = 1,
    clutType                    = 0,                            /*0 if lookup table*/
    fixedType                   = 1,                            /*1 if fixed table*/
    directType                  = 2,                            /*2 if direct values*/
    gdDevType                   = 0                             /*0 = monochrome 1 = color*/
};

enum {
    interlacedDevice            = 2,                            /* 1 if single pixel lines look bad */
    roundedDevice               = 5,                            /* 1 if device has been "rounded" into the GrayRgn */
    hasAuxMenuBar               = 6,                            /* 1 if device has an aux menu bar on it */
    burstDevice                 = 7,
    ext32Device                 = 8,
    ramInit                     = 10,                           /*1 if initialized from 'scrn' resource*/
    mainScreen                  = 11,                           /* 1 if main screen */
    allInit                     = 12,                           /* 1 if all devices initialized */
    screenDevice                = 13,                           /*1 if screen device [not used]*/
    noDriver                    = 14,                           /* 1 if no driver for this GDevice */
    screenActive                = 15,                           /*1 if in use*/
    hiliteBit                   = 7,                            /*flag bit in HiliteMode (lowMem flag)*/
    pHiliteBit                  = 0,                            /*flag bit in HiliteMode used with BitClr procedure*/
    defQDColors                 = 127,                          /*resource ID of clut for default QDColors*/
                                                                /* pixel type */
    RGBDirect                   = 16,                           /* 16 & 32 bits/pixel pixelType value */
                                                                /* pmVersion values */
    baseAddr32                  = 4                             /*pixmap base address is 32-bit address*/
};


enum {
    sysPatListID                = 0,
    iBeamCursor                 = 1,
    crossCursor                 = 2,
    plusCursor                  = 3,
    watchCursor                 = 4
};

enum {
    kQDGrafVerbFrame            = 0,
    kQDGrafVerbPaint            = 1,
    kQDGrafVerbErase            = 2,
    kQDGrafVerbInvert           = 3,
    kQDGrafVerbFill             = 4
};

#if OLDROUTINENAMES
enum {
    frame                       = kQDGrafVerbFrame,
    paint                       = kQDGrafVerbPaint,
    erase                       = kQDGrafVerbErase,
    invert                      = kQDGrafVerbInvert,
    fill                        = kQDGrafVerbFill
};

#endif  /* OLDROUTINENAMES */

typedef SInt8                           GrafVerb;
enum {
    chunky                      = 0,
    chunkyPlanar                = 1,
    planar                      = 2
};

typedef SInt8                           PixelType;
typedef short                           Bits16[16];

/***************   IMPORTANT NOTE REGARDING Pattern  **************************************
   Patterns were originally defined as:
   
        C:          typedef unsigned char Pattern[8];
        Pascal:     Pattern = PACKED ARRAY [0..7] OF 0..255;
        
   The old array definition of Pattern would cause 68000 based CPU's to crash in certain circum-
   stances. The new struct definition is safe, but may require source code changes to compile.
    
*********************************************************************************************/

struct Pattern {
    UInt8                           pat[8];
};
typedef struct Pattern                  Pattern;
/*
 ConstPatternParam is no longer needed.  It was first created when Pattern was an array.
 Now that Pattern is a struct, it is more straight forward to just add the "const" qualifier
 on the parameter type (e.g. "const Pattern * pat" instead of "ConstPatternParam pat").
*/

typedef const Pattern *                 ConstPatternParam;
typedef Pattern *                       PatPtr;
typedef PatPtr *                        PatHandle;
typedef SignedByte                      QDByte;
typedef QDByte *                        QDPtr;
typedef QDPtr *                         QDHandle;
typedef short                           QDErr;
enum {
    singleDevicesBit            = 0,
    dontMatchSeedsBit           = 1,
    allDevicesBit               = 2
};

enum {
    singleDevices               = 1 << singleDevicesBit,
    dontMatchSeeds              = 1 << dontMatchSeedsBit,
    allDevices                  = 1 << allDevicesBit
};

typedef unsigned long                   DeviceLoopFlags;
/*
    PrinterStatusOpcode.  For communication with downloading and printing services.
*/
typedef SInt32                          PrinterStatusOpcode;
enum {
    kPrinterFontStatus          = 0,
    kPrinterScalingStatus       = 1
};


struct PrinterFontStatus {
    SInt32                          oResult;
    SInt16                          iFondID;
    Style                           iStyle;
};
typedef struct PrinterFontStatus        PrinterFontStatus;

struct PrinterScalingStatus {
    Point                           oScalingFactors;
};
typedef struct PrinterScalingStatus     PrinterScalingStatus;

struct BitMap {
    Ptr                             baseAddr;
    short                           rowBytes;
    Rect                            bounds;
};
typedef struct BitMap                   BitMap;
typedef BitMap *                        BitMapPtr;
typedef BitMapPtr *                     BitMapHandle;

struct Cursor {
    Bits16                          data;
    Bits16                          mask;
    Point                           hotSpot;
};
typedef struct Cursor                   Cursor;

typedef Cursor *                        CursPtr;
typedef CursPtr *                       CursHandle;

struct PenState {
    Point                           pnLoc;
    Point                           pnSize;
    short                           pnMode;
    Pattern                         pnPat;
};
typedef struct PenState                 PenState;
#if !OPAQUE_TOOLBOX_STRUCTS

struct MacRegion {
    unsigned short                  rgnSize;                    /*size in bytes*/
    Rect                            rgnBBox;                    /*enclosing rectangle*/
};
typedef struct MacRegion                MacRegion;
/*
    The type name "Region" has a name space collision on Win32.
    Use MacRegion to be cross-platfrom safe.
*/
#if TARGET_OS_MAC

typedef MacRegion                       Region;
#endif  /* TARGET_OS_MAC */

typedef MacRegion *                     RgnPtr;
typedef RgnPtr *                        RgnHandle;
#else
typedef struct OpaqueRgnHandle*         RgnHandle;
#endif  /* !OPAQUE_TOOLBOX_STRUCTS */


struct Picture {
    short                           picSize;
    Rect                            picFrame;
};
typedef struct Picture                  Picture;

typedef Picture *                       PicPtr;
typedef PicPtr *                        PicHandle;

struct MacPolygon {
    short                           polySize;
    Rect                            polyBBox;
    Point                           polyPoints[1];
};
typedef struct MacPolygon               MacPolygon;
/*
    The type name "Polygon" has a name space collision on Win32.
    Use MacPolygon to be cross-platfrom safe.
*/
#if TARGET_OS_MAC

typedef MacPolygon                      Polygon;
#endif  /* TARGET_OS_MAC */

typedef MacPolygon *                    PolyPtr;
typedef PolyPtr *                       PolyHandle;
typedef CALLBACK_API( void , QDTextProcPtr )(short byteCount, Ptr textBuf, Point numer, Point denom);
typedef CALLBACK_API( void , QDLineProcPtr )(Point newPt);
typedef CALLBACK_API( void , QDRectProcPtr )(GrafVerb verb, Rect *r);
typedef CALLBACK_API( void , QDRRectProcPtr )(GrafVerb verb, Rect *r, short ovalWidth, short ovalHeight);
typedef CALLBACK_API( void , QDOvalProcPtr )(GrafVerb verb, Rect *r);
typedef CALLBACK_API( void , QDArcProcPtr )(GrafVerb verb, Rect *r, short startAngle, short arcAngle);
typedef CALLBACK_API( void , QDPolyProcPtr )(GrafVerb verb, PolyHandle poly);
typedef CALLBACK_API( void , QDRgnProcPtr )(GrafVerb verb, RgnHandle rgn);
typedef CALLBACK_API( void , QDBitsProcPtr )(BitMap *srcBits, Rect *srcRect, Rect *dstRect, short mode, RgnHandle maskRgn);
typedef CALLBACK_API( void , QDCommentProcPtr )(short kind, short dataSize, Handle dataHandle);
typedef CALLBACK_API( short , QDTxMeasProcPtr )(short byteCount, Ptr textAddr, Point *numer, Point *denom, FontInfo *info);
typedef CALLBACK_API( void , QDGetPicProcPtr )(Ptr dataPtr, short byteCount);
typedef CALLBACK_API( void , QDPutPicProcPtr )(Ptr dataPtr, short byteCount);
typedef CALLBACK_API( void , QDOpcodeProcPtr )(Rect *fromRect, Rect *toRect, short opcode, short version);
typedef CALLBACK_API_C( OSStatus , QDStdGlyphsProcPtr )(void *dataStream, ByteCount size);
typedef CALLBACK_API( void , QDJShieldCursorProcPtr )(short left, short top, short right, short bottom);
typedef STACK_UPP_TYPE(QDTextProcPtr)                           QDTextUPP;
typedef STACK_UPP_TYPE(QDLineProcPtr)                           QDLineUPP;
typedef STACK_UPP_TYPE(QDRectProcPtr)                           QDRectUPP;
typedef STACK_UPP_TYPE(QDRRectProcPtr)                          QDRRectUPP;
typedef STACK_UPP_TYPE(QDOvalProcPtr)                           QDOvalUPP;
typedef STACK_UPP_TYPE(QDArcProcPtr)                            QDArcUPP;
typedef STACK_UPP_TYPE(QDPolyProcPtr)                           QDPolyUPP;
typedef STACK_UPP_TYPE(QDRgnProcPtr)                            QDRgnUPP;
typedef STACK_UPP_TYPE(QDBitsProcPtr)                           QDBitsUPP;
typedef STACK_UPP_TYPE(QDCommentProcPtr)                        QDCommentUPP;
typedef STACK_UPP_TYPE(QDTxMeasProcPtr)                         QDTxMeasUPP;
typedef STACK_UPP_TYPE(QDGetPicProcPtr)                         QDGetPicUPP;
typedef STACK_UPP_TYPE(QDPutPicProcPtr)                         QDPutPicUPP;
typedef STACK_UPP_TYPE(QDOpcodeProcPtr)                         QDOpcodeUPP;
typedef STACK_UPP_TYPE(QDStdGlyphsProcPtr)                      QDStdGlyphsUPP;
typedef STACK_UPP_TYPE(QDJShieldCursorProcPtr)                  QDJShieldCursorUPP;

struct QDProcs {
    QDTextUPP                       textProc;
    QDLineUPP                       lineProc;
    QDRectUPP                       rectProc;
    QDRRectUPP                      rRectProc;
    QDOvalUPP                       ovalProc;
    QDArcUPP                        arcProc;
    QDPolyUPP                       polyProc;
    QDRgnUPP                        rgnProc;
    QDBitsUPP                       bitsProc;
    QDCommentUPP                    commentProc;
    QDTxMeasUPP                     txMeasProc;
    QDGetPicUPP                     getPicProc;
    QDPutPicUPP                     putPicProc;
};
typedef struct QDProcs                  QDProcs;
typedef QDProcs *                       QDProcsPtr;
#if OPAQUE_UPP_TYPES
    EXTERN_API(QDTextUPP)
    NewQDTextUPP                   (QDTextProcPtr           userRoutine);

    EXTERN_API(QDLineUPP)
    NewQDLineUPP                   (QDLineProcPtr           userRoutine);

    EXTERN_API(QDRectUPP)
    NewQDRectUPP                   (QDRectProcPtr           userRoutine);

    EXTERN_API(QDRRectUPP)
    NewQDRRectUPP                  (QDRRectProcPtr          userRoutine);

    EXTERN_API(QDOvalUPP)
    NewQDOvalUPP                   (QDOvalProcPtr           userRoutine);

    EXTERN_API(QDArcUPP)
    NewQDArcUPP                    (QDArcProcPtr            userRoutine);

    EXTERN_API(QDPolyUPP)
    NewQDPolyUPP                   (QDPolyProcPtr           userRoutine);

    EXTERN_API(QDRgnUPP)
    NewQDRgnUPP                    (QDRgnProcPtr            userRoutine);

    EXTERN_API(QDBitsUPP)
    NewQDBitsUPP                   (QDBitsProcPtr           userRoutine);

    EXTERN_API(QDCommentUPP)
    NewQDCommentUPP                (QDCommentProcPtr        userRoutine);

    EXTERN_API(QDTxMeasUPP)
    NewQDTxMeasUPP                 (QDTxMeasProcPtr         userRoutine);

    EXTERN_API(QDGetPicUPP)
    NewQDGetPicUPP                 (QDGetPicProcPtr         userRoutine);

    EXTERN_API(QDPutPicUPP)
    NewQDPutPicUPP                 (QDPutPicProcPtr         userRoutine);

    EXTERN_API(QDOpcodeUPP)
    NewQDOpcodeUPP                 (QDOpcodeProcPtr         userRoutine);

    EXTERN_API(QDStdGlyphsUPP)
    NewQDStdGlyphsUPP              (QDStdGlyphsProcPtr      userRoutine);

    EXTERN_API(QDJShieldCursorUPP)
    NewQDJShieldCursorUPP          (QDJShieldCursorProcPtr  userRoutine);

    EXTERN_API(void)
    DisposeQDTextUPP               (QDTextUPP               userUPP);

    EXTERN_API(void)
    DisposeQDLineUPP               (QDLineUPP               userUPP);

    EXTERN_API(void)
    DisposeQDRectUPP               (QDRectUPP               userUPP);

    EXTERN_API(void)
    DisposeQDRRectUPP              (QDRRectUPP              userUPP);

    EXTERN_API(void)
    DisposeQDOvalUPP               (QDOvalUPP               userUPP);

    EXTERN_API(void)
    DisposeQDArcUPP                (QDArcUPP                userUPP);

    EXTERN_API(void)
    DisposeQDPolyUPP               (QDPolyUPP               userUPP);

    EXTERN_API(void)
    DisposeQDRgnUPP                (QDRgnUPP                userUPP);

    EXTERN_API(void)
    DisposeQDBitsUPP               (QDBitsUPP               userUPP);

    EXTERN_API(void)
    DisposeQDCommentUPP            (QDCommentUPP            userUPP);

    EXTERN_API(void)
    DisposeQDTxMeasUPP             (QDTxMeasUPP             userUPP);

    EXTERN_API(void)
    DisposeQDGetPicUPP             (QDGetPicUPP             userUPP);

    EXTERN_API(void)
    DisposeQDPutPicUPP             (QDPutPicUPP             userUPP);

    EXTERN_API(void)
    DisposeQDOpcodeUPP             (QDOpcodeUPP             userUPP);

    EXTERN_API(void)
    DisposeQDStdGlyphsUPP          (QDStdGlyphsUPP          userUPP);

    EXTERN_API(void)
    DisposeQDJShieldCursorUPP      (QDJShieldCursorUPP      userUPP);

    EXTERN_API(void)
    InvokeQDTextUPP                (short                   byteCount,
                                    Ptr                     textBuf,
                                    Point                   numer,
                                    Point                   denom,
                                    QDTextUPP               userUPP);

    EXTERN_API(void)
    InvokeQDLineUPP                (Point                   newPt,
                                    QDLineUPP               userUPP);

    EXTERN_API(void)
    InvokeQDRectUPP                (GrafVerb                verb,
                                    Rect *                  r,
                                    QDRectUPP               userUPP);

    EXTERN_API(void)
    InvokeQDRRectUPP               (GrafVerb                verb,
                                    Rect *                  r,
                                    short                   ovalWidth,
                                    short                   ovalHeight,
                                    QDRRectUPP              userUPP);

    EXTERN_API(void)
    InvokeQDOvalUPP                (GrafVerb                verb,
                                    Rect *                  r,
                                    QDOvalUPP               userUPP);

    EXTERN_API(void)
    InvokeQDArcUPP                 (GrafVerb                verb,
                                    Rect *                  r,
                                    short                   startAngle,
                                    short                   arcAngle,
                                    QDArcUPP                userUPP);

    EXTERN_API(void)
    InvokeQDPolyUPP                (GrafVerb                verb,
                                    PolyHandle              poly,
                                    QDPolyUPP               userUPP);

    EXTERN_API(void)
    InvokeQDRgnUPP                 (GrafVerb                verb,
                                    RgnHandle               rgn,
                                    QDRgnUPP                userUPP);

    EXTERN_API(void)
    InvokeQDBitsUPP                (BitMap *                srcBits,
                                    Rect *                  srcRect,
                                    Rect *                  dstRect,
                                    short                   mode,
                                    RgnHandle               maskRgn,
                                    QDBitsUPP               userUPP);

    EXTERN_API(void)
    InvokeQDCommentUPP             (short                   kind,
                                    short                   dataSize,
                                    Handle                  dataHandle,
                                    QDCommentUPP            userUPP);

    EXTERN_API(short)
    InvokeQDTxMeasUPP              (short                   byteCount,
                                    Ptr                     textAddr,
                                    Point *                 numer,
                                    Point *                 denom,
                                    FontInfo *              info,
                                    QDTxMeasUPP             userUPP);

    EXTERN_API(void)
    InvokeQDGetPicUPP              (Ptr                     dataPtr,
                                    short                   byteCount,
                                    QDGetPicUPP             userUPP);

    EXTERN_API(void)
    InvokeQDPutPicUPP              (Ptr                     dataPtr,
                                    short                   byteCount,
                                    QDPutPicUPP             userUPP);

    EXTERN_API(void)
    InvokeQDOpcodeUPP              (Rect *                  fromRect,
                                    Rect *                  toRect,
                                    short                   opcode,
                                    short                   version,
                                    QDOpcodeUPP             userUPP);

    EXTERN_API(OSStatus)
    InvokeQDStdGlyphsUPP           (void *                  dataStream,
                                    ByteCount               size,
                                    QDStdGlyphsUPP          userUPP);

    EXTERN_API(void)
    InvokeQDJShieldCursorUPP       (short                   left,
                                    short                   top,
                                    short                   right,
                                    short                   bottom,
                                    QDJShieldCursorUPP      userUPP);

#else
    enum { uppQDTextProcInfo = 0x00003F80 };                        /* pascal no_return_value Func(2_bytes, 4_bytes, 4_bytes, 4_bytes) */
    enum { uppQDLineProcInfo = 0x000000C0 };                        /* pascal no_return_value Func(4_bytes) */
    enum { uppQDRectProcInfo = 0x00000340 };                        /* pascal no_return_value Func(1_byte, 4_bytes) */
    enum { uppQDRRectProcInfo = 0x00002B40 };                       /* pascal no_return_value Func(1_byte, 4_bytes, 2_bytes, 2_bytes) */
    enum { uppQDOvalProcInfo = 0x00000340 };                        /* pascal no_return_value Func(1_byte, 4_bytes) */
    enum { uppQDArcProcInfo = 0x00002B40 };                         /* pascal no_return_value Func(1_byte, 4_bytes, 2_bytes, 2_bytes) */
    enum { uppQDPolyProcInfo = 0x00000340 };                        /* pascal no_return_value Func(1_byte, 4_bytes) */
    enum { uppQDRgnProcInfo = 0x00000340 };                         /* pascal no_return_value Func(1_byte, 4_bytes) */
    enum { uppQDBitsProcInfo = 0x0000EFC0 };                        /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes, 2_bytes, 4_bytes) */
    enum { uppQDCommentProcInfo = 0x00000E80 };                     /* pascal no_return_value Func(2_bytes, 2_bytes, 4_bytes) */
    enum { uppQDTxMeasProcInfo = 0x0000FFA0 };                      /* pascal 2_bytes Func(2_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
    enum { uppQDGetPicProcInfo = 0x000002C0 };                      /* pascal no_return_value Func(4_bytes, 2_bytes) */
    enum { uppQDPutPicProcInfo = 0x000002C0 };                      /* pascal no_return_value Func(4_bytes, 2_bytes) */
    enum { uppQDOpcodeProcInfo = 0x00002BC0 };                      /* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes, 2_bytes) */
    enum { uppQDStdGlyphsProcInfo = 0x000003F1 };                   /* 4_bytes Func(4_bytes, 4_bytes) */
    enum { uppQDJShieldCursorProcInfo = 0x00002A80 };               /* pascal no_return_value Func(2_bytes, 2_bytes, 2_bytes, 2_bytes) */
    #define NewQDTextUPP(userRoutine)                               (QDTextUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDTextProcInfo, GetCurrentArchitecture())
    #define NewQDLineUPP(userRoutine)                               (QDLineUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDLineProcInfo, GetCurrentArchitecture())
    #define NewQDRectUPP(userRoutine)                               (QDRectUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDRectProcInfo, GetCurrentArchitecture())
    #define NewQDRRectUPP(userRoutine)                              (QDRRectUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDRRectProcInfo, GetCurrentArchitecture())
    #define NewQDOvalUPP(userRoutine)                               (QDOvalUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDOvalProcInfo, GetCurrentArchitecture())
    #define NewQDArcUPP(userRoutine)                                (QDArcUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDArcProcInfo, GetCurrentArchitecture())
    #define NewQDPolyUPP(userRoutine)                               (QDPolyUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDPolyProcInfo, GetCurrentArchitecture())
    #define NewQDRgnUPP(userRoutine)                                (QDRgnUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDRgnProcInfo, GetCurrentArchitecture())
    #define NewQDBitsUPP(userRoutine)                               (QDBitsUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDBitsProcInfo, GetCurrentArchitecture())
    #define NewQDCommentUPP(userRoutine)                            (QDCommentUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDCommentProcInfo, GetCurrentArchitecture())
    #define NewQDTxMeasUPP(userRoutine)                             (QDTxMeasUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDTxMeasProcInfo, GetCurrentArchitecture())
    #define NewQDGetPicUPP(userRoutine)                             (QDGetPicUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDGetPicProcInfo, GetCurrentArchitecture())
    #define NewQDPutPicUPP(userRoutine)                             (QDPutPicUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDPutPicProcInfo, GetCurrentArchitecture())
    #define NewQDOpcodeUPP(userRoutine)                             (QDOpcodeUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDOpcodeProcInfo, GetCurrentArchitecture())
    #define NewQDStdGlyphsUPP(userRoutine)                          (QDStdGlyphsUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDStdGlyphsProcInfo, GetCurrentArchitecture())
    #define NewQDJShieldCursorUPP(userRoutine)                      (QDJShieldCursorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDJShieldCursorProcInfo, GetCurrentArchitecture())
    #define DisposeQDTextUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDLineUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDRectUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDRRectUPP(userUPP)                              DisposeRoutineDescriptor(userUPP)
    #define DisposeQDOvalUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDArcUPP(userUPP)                                DisposeRoutineDescriptor(userUPP)
    #define DisposeQDPolyUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDRgnUPP(userUPP)                                DisposeRoutineDescriptor(userUPP)
    #define DisposeQDBitsUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDCommentUPP(userUPP)                            DisposeRoutineDescriptor(userUPP)
    #define DisposeQDTxMeasUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
    #define DisposeQDGetPicUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
    #define DisposeQDPutPicUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
    #define DisposeQDOpcodeUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
    #define DisposeQDStdGlyphsUPP(userUPP)                          DisposeRoutineDescriptor(userUPP)
    #define DisposeQDJShieldCursorUPP(userUPP)                      DisposeRoutineDescriptor(userUPP)
    #define InvokeQDTextUPP(byteCount, textBuf, numer, denom, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppQDTextProcInfo, (byteCount), (textBuf), (numer), (denom))
    #define InvokeQDLineUPP(newPt, userUPP)                         CALL_ONE_PARAMETER_UPP((userUPP), uppQDLineProcInfo, (newPt))
    #define InvokeQDRectUPP(verb, r, userUPP)                       CALL_TWO_PARAMETER_UPP((userUPP), uppQDRectProcInfo, (verb), (r))
    #define InvokeQDRRectUPP(verb, r, ovalWidth, ovalHeight, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppQDRRectProcInfo, (verb), (r), (ovalWidth), (ovalHeight))
    #define InvokeQDOvalUPP(verb, r, userUPP)                       CALL_TWO_PARAMETER_UPP((userUPP), uppQDOvalProcInfo, (verb), (r))
    #define InvokeQDArcUPP(verb, r, startAngle, arcAngle, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppQDArcProcInfo, (verb), (r), (startAngle), (arcAngle))
    #define InvokeQDPolyUPP(verb, poly, userUPP)                    CALL_TWO_PARAMETER_UPP((userUPP), uppQDPolyProcInfo, (verb), (poly))
    #define InvokeQDRgnUPP(verb, rgn, userUPP)                      CALL_TWO_PARAMETER_UPP((userUPP), uppQDRgnProcInfo, (verb), (rgn))
    #define InvokeQDBitsUPP(srcBits, srcRect, dstRect, mode, maskRgn, userUPP)  CALL_FIVE_PARAMETER_UPP((userUPP), uppQDBitsProcInfo, (srcBits), (srcRect), (dstRect), (mode), (maskRgn))
    #define InvokeQDCommentUPP(kind, dataSize, dataHandle, userUPP)  CALL_THREE_PARAMETER_UPP((userUPP), uppQDCommentProcInfo, (kind), (dataSize), (dataHandle))
    #define InvokeQDTxMeasUPP(byteCount, textAddr, numer, denom, info, userUPP)  (short)CALL_FIVE_PARAMETER_UPP((userUPP), uppQDTxMeasProcInfo, (byteCount), (textAddr), (numer), (denom), (info))
    #define InvokeQDGetPicUPP(dataPtr, byteCount, userUPP)          CALL_TWO_PARAMETER_UPP((userUPP), uppQDGetPicProcInfo, (dataPtr), (byteCount))
    #define InvokeQDPutPicUPP(dataPtr, byteCount, userUPP)          CALL_TWO_PARAMETER_UPP((userUPP), uppQDPutPicProcInfo, (dataPtr), (byteCount))
    #define InvokeQDOpcodeUPP(fromRect, toRect, opcode, version, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppQDOpcodeProcInfo, (fromRect), (toRect), (opcode), (version))
    #define InvokeQDStdGlyphsUPP(dataStream, size, userUPP)         (OSStatus)CALL_TWO_PARAMETER_UPP((userUPP), uppQDStdGlyphsProcInfo, (dataStream), (size))
    #define InvokeQDJShieldCursorUPP(left, top, right, bottom, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppQDJShieldCursorProcInfo, (left), (top), (right), (bottom))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewQDTextProc(userRoutine)                              NewQDTextUPP(userRoutine)
#define NewQDLineProc(userRoutine)                              NewQDLineUPP(userRoutine)
#define NewQDRectProc(userRoutine)                              NewQDRectUPP(userRoutine)
#define NewQDRRectProc(userRoutine)                             NewQDRRectUPP(userRoutine)
#define NewQDOvalProc(userRoutine)                              NewQDOvalUPP(userRoutine)
#define NewQDArcProc(userRoutine)                               NewQDArcUPP(userRoutine)
#define NewQDPolyProc(userRoutine)                              NewQDPolyUPP(userRoutine)
#define NewQDRgnProc(userRoutine)                               NewQDRgnUPP(userRoutine)
#define NewQDBitsProc(userRoutine)                              NewQDBitsUPP(userRoutine)
#define NewQDCommentProc(userRoutine)                           NewQDCommentUPP(userRoutine)
#define NewQDTxMeasProc(userRoutine)                            NewQDTxMeasUPP(userRoutine)
#define NewQDGetPicProc(userRoutine)                            NewQDGetPicUPP(userRoutine)
#define NewQDPutPicProc(userRoutine)                            NewQDPutPicUPP(userRoutine)
#define NewQDOpcodeProc(userRoutine)                            NewQDOpcodeUPP(userRoutine)
#define NewQDStdGlyphsProc(userRoutine)                         NewQDStdGlyphsUPP(userRoutine)
#define NewQDJShieldCursorProc(userRoutine)                     NewQDJShieldCursorUPP(userRoutine)
#define CallQDTextProc(userRoutine, byteCount, textBuf, numer, denom) InvokeQDTextUPP(byteCount, textBuf, numer, denom, userRoutine)
#define CallQDLineProc(userRoutine, newPt)                      InvokeQDLineUPP(newPt, userRoutine)
#define CallQDRectProc(userRoutine, verb, r)                    InvokeQDRectUPP(verb, r, userRoutine)
#define CallQDRRectProc(userRoutine, verb, r, ovalWidth, ovalHeight) InvokeQDRRectUPP(verb, r, ovalWidth, ovalHeight, userRoutine)
#define CallQDOvalProc(userRoutine, verb, r)                    InvokeQDOvalUPP(verb, r, userRoutine)
#define CallQDArcProc(userRoutine, verb, r, startAngle, arcAngle) InvokeQDArcUPP(verb, r, startAngle, arcAngle, userRoutine)
#define CallQDPolyProc(userRoutine, verb, poly)                 InvokeQDPolyUPP(verb, poly, userRoutine)
#define CallQDRgnProc(userRoutine, verb, rgn)                   InvokeQDRgnUPP(verb, rgn, userRoutine)
#define CallQDBitsProc(userRoutine, srcBits, srcRect, dstRect, mode, maskRgn) InvokeQDBitsUPP(srcBits, srcRect, dstRect, mode, maskRgn, userRoutine)
#define CallQDCommentProc(userRoutine, kind, dataSize, dataHandle) InvokeQDCommentUPP(kind, dataSize, dataHandle, userRoutine)
#define CallQDTxMeasProc(userRoutine, byteCount, textAddr, numer, denom, info) InvokeQDTxMeasUPP(byteCount, textAddr, numer, denom, info, userRoutine)
#define CallQDGetPicProc(userRoutine, dataPtr, byteCount)       InvokeQDGetPicUPP(dataPtr, byteCount, userRoutine)
#define CallQDPutPicProc(userRoutine, dataPtr, byteCount)       InvokeQDPutPicUPP(dataPtr, byteCount, userRoutine)
#define CallQDOpcodeProc(userRoutine, fromRect, toRect, opcode, version) InvokeQDOpcodeUPP(fromRect, toRect, opcode, version, userRoutine)
#define CallQDStdGlyphsProc(userRoutine, dataStream, size)      InvokeQDStdGlyphsUPP(dataStream, size, userRoutine)
#define CallQDJShieldCursorProc(userRoutine, left, top, right, bottom) InvokeQDJShieldCursorUPP(left, top, right, bottom, userRoutine)
#if !OPAQUE_TOOLBOX_STRUCTS

struct GrafPort {
    short                           device;
    BitMap                          portBits;
    Rect                            portRect;
    RgnHandle                       visRgn;
    RgnHandle                       clipRgn;
    Pattern                         bkPat;
    Pattern                         fillPat;
    Point                           pnLoc;
    Point                           pnSize;
    short                           pnMode;
    Pattern                         pnPat;
    short                           pnVis;
    short                           txFont;
    StyleField                      txFace;                     /*StyleField occupies 16-bits, but only first 8-bits are used*/
    UInt8                           txFlags;                    /* QuickTime uses second 8 bits of StyleField for txFlags */
    short                           txMode;
    short                           txSize;
    Fixed                           spExtra;
    long                            fgColor;
    long                            bkColor;
    short                           colrBit;
    short                           patStretch;
    Handle                          picSave;
    Handle                          rgnSave;
    Handle                          polySave;
    QDProcsPtr                      grafProcs;
};
typedef struct GrafPort                 GrafPort;

typedef GrafPort *                      GrafPtr;
/*
 *  This set of definitions "belongs" in Windows.
 *  But, there is a circularity in the headers where Windows includes Controls and
 *  Controls includes Windows. To break the circle, the information
 *  needed by Controls is moved from Windows to Quickdraw.
 */
typedef GrafPtr                         WindowPtr;
typedef WindowPtr                       DialogPtr;
#else
typedef struct OpaqueWindowPtr*         WindowPtr;
typedef struct OpaqueDialogPtr*         DialogPtr;
typedef struct OpaqueGrafPtr*           GrafPtr;
#endif  /* !OPAQUE_TOOLBOX_STRUCTS */

typedef WindowPtr                       WindowRef;
/* DragConstraint constants to pass to DragGray,DragTheRgn, or ConstrainedDragRgn*/
typedef UInt16                          DragConstraint;
enum {
    kNoConstraint               = 0,
    kVerticalConstraint         = 1,
    kHorizontalConstraint       = 2
};


typedef CALLBACK_API( void , DragGrayRgnProcPtr )(void );
/*
 *  Here ends the list of things that "belong" in Windows.
 */



struct RGBColor {
    unsigned short                  red;                        /*magnitude of red component*/
    unsigned short                  green;                      /*magnitude of green component*/
    unsigned short                  blue;                       /*magnitude of blue component*/
};
typedef struct RGBColor                 RGBColor;
typedef RGBColor *                      RGBColorPtr;
typedef RGBColorPtr *                   RGBColorHdl;
typedef CALLBACK_API( Boolean , ColorSearchProcPtr )(RGBColor *rgb, long *position);
typedef CALLBACK_API( Boolean , ColorComplementProcPtr )(RGBColor *rgb);
typedef STACK_UPP_TYPE(DragGrayRgnProcPtr)                      DragGrayRgnUPP;
typedef STACK_UPP_TYPE(ColorSearchProcPtr)                      ColorSearchUPP;
typedef STACK_UPP_TYPE(ColorComplementProcPtr)                  ColorComplementUPP;
#if OPAQUE_UPP_TYPES
    EXTERN_API(DragGrayRgnUPP)
    NewDragGrayRgnUPP              (DragGrayRgnProcPtr      userRoutine);

    EXTERN_API(ColorSearchUPP)
    NewColorSearchUPP              (ColorSearchProcPtr      userRoutine);

    EXTERN_API(ColorComplementUPP)
    NewColorComplementUPP          (ColorComplementProcPtr  userRoutine);

    EXTERN_API(void)
    DisposeDragGrayRgnUPP          (DragGrayRgnUPP          userUPP);

    EXTERN_API(void)
    DisposeColorSearchUPP          (ColorSearchUPP          userUPP);

    EXTERN_API(void)
    DisposeColorComplementUPP      (ColorComplementUPP      userUPP);

    EXTERN_API(void)
    InvokeDragGrayRgnUPP           (DragGrayRgnUPP          userUPP);

    EXTERN_API(Boolean)
    InvokeColorSearchUPP           (RGBColor *              rgb,
                                    long *                  position,
                                    ColorSearchUPP          userUPP);

    EXTERN_API(Boolean)
    InvokeColorComplementUPP       (RGBColor *              rgb,
                                    ColorComplementUPP      userUPP);

#else
    enum { uppDragGrayRgnProcInfo = 0x00000000 };                   /* pascal no_return_value Func() */
    enum { uppColorSearchProcInfo = 0x000003D0 };                   /* pascal 1_byte Func(4_bytes, 4_bytes) */
    enum { uppColorComplementProcInfo = 0x000000D0 };               /* pascal 1_byte Func(4_bytes) */
    #define NewDragGrayRgnUPP(userRoutine)                          (DragGrayRgnUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDragGrayRgnProcInfo, GetCurrentArchitecture())
    #define NewColorSearchUPP(userRoutine)                          (ColorSearchUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppColorSearchProcInfo, GetCurrentArchitecture())
    #define NewColorComplementUPP(userRoutine)                      (ColorComplementUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppColorComplementProcInfo, GetCurrentArchitecture())
    #define DisposeDragGrayRgnUPP(userUPP)                          DisposeRoutineDescriptor(userUPP)
    #define DisposeColorSearchUPP(userUPP)                          DisposeRoutineDescriptor(userUPP)
    #define DisposeColorComplementUPP(userUPP)                      DisposeRoutineDescriptor(userUPP)
    #define InvokeDragGrayRgnUPP(userUPP)                           CALL_ZERO_PARAMETER_UPP((userUPP), uppDragGrayRgnProcInfo)
    #define InvokeColorSearchUPP(rgb, position, userUPP)            (Boolean)CALL_TWO_PARAMETER_UPP((userUPP), uppColorSearchProcInfo, (rgb), (position))
    #define InvokeColorComplementUPP(rgb, userUPP)                  (Boolean)CALL_ONE_PARAMETER_UPP((userUPP), uppColorComplementProcInfo, (rgb))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewDragGrayRgnProc(userRoutine)                         NewDragGrayRgnUPP(userRoutine)
#define NewColorSearchProc(userRoutine)                         NewColorSearchUPP(userRoutine)
#define NewColorComplementProc(userRoutine)                     NewColorComplementUPP(userRoutine)
#define CallDragGrayRgnProc(userRoutine)                        InvokeDragGrayRgnUPP(userRoutine)
#define CallColorSearchProc(userRoutine, rgb, position)         InvokeColorSearchUPP(rgb, position, userRoutine)
#define CallColorComplementProc(userRoutine, rgb)               InvokeColorComplementUPP(rgb, userRoutine)

struct ColorSpec {
    short                           value;                      /*index or other value*/
    RGBColor                        rgb;                        /*true color*/
};
typedef struct ColorSpec                ColorSpec;
typedef ColorSpec *                     ColorSpecPtr;

typedef ColorSpec                       CSpecArray[1];

struct ColorTable {
    long                            ctSeed;                     /*unique identifier for table*/
    short                           ctFlags;                    /*high bit: 0 = PixMap; 1 = device*/
    short                           ctSize;                     /*number of entries in CTTable*/
    CSpecArray                      ctTable;                    /*array [0..0] of ColorSpec*/
};
typedef struct ColorTable               ColorTable;

typedef ColorTable *                    CTabPtr;
typedef CTabPtr *                       CTabHandle;

struct xColorSpec {
    short                           value;                      /*index or other value*/
    RGBColor                        rgb;                        /*true color*/
    short                           xalpha;
};
typedef struct xColorSpec               xColorSpec;
typedef xColorSpec *                    xColorSpecPtr;

typedef xColorSpec                      xCSpecArray[1];

struct MatchRec {
    unsigned short                  red;
    unsigned short                  green;
    unsigned short                  blue;
    long                            matchData;
};
typedef struct MatchRec                 MatchRec;
/*
    QuickTime 3.0 makes PixMap data structure available on non-Mac OS's.
    In order to implement PixMap in these alternate environments, the PixMap
    had to be extended. The pmReserved field was changed to pmExt which is
    a Handle to extra info.  The planeBytes field was changed to pixelFormat.
    
    In OS X, Quickdraw also uses the new PixMap data structure.
*/
#ifndef OLDPIXMAPSTRUCT
#if TARGET_OS_MAC && TARGET_API_MAC_OS8
#define OLDPIXMAPSTRUCT 1
#else
#define OLDPIXMAPSTRUCT 0
#endif  /* TARGET_OS_MAC && TARGET_API_MAC_OS8 */

#endif  /* !defined(OLDPIXMAPSTRUCT) */


#if OLDPIXMAPSTRUCT
   #define GETPIXMAPPIXELFORMAT(pm)        ( (pm)->pixelSize )
#else
  #define GETPIXMAPPIXELFORMAT(pm)        ( ((pm)->pixelFormat != 0) ? (pm)->pixelFormat : (pm)->pixelSize )
#endif


#if TARGET_OS_MAC && !TARGET_RT_LITTLE_ENDIAN
    #define NON_MAC_PIXEL_FORMATS   0
#else
    #define NON_MAC_PIXEL_FORMATS   1
#endif

/* pixel formats*/
enum {
    k1MonochromePixelFormat     = 0x00000001,                   /* 1 bit indexed*/
    k2IndexedPixelFormat        = 0x00000002,                   /* 2 bit indexed*/
    k4IndexedPixelFormat        = 0x00000004,                   /* 4 bit indexed*/
    k8IndexedPixelFormat        = 0x00000008,                   /* 8 bit indexed*/
    k16BE555PixelFormat         = 0x00000010,                   /* 16 bit BE rgb 555 (Mac)*/
    k24RGBPixelFormat           = 0x00000018,                   /* 24 bit rgb */
    k32ARGBPixelFormat          = 0x00000020,                   /* 32 bit argb    (Mac)*/
    k1IndexedGrayPixelFormat    = 0x00000021,                   /* 1 bit indexed gray*/
    k2IndexedGrayPixelFormat    = 0x00000022,                   /* 2 bit indexed gray*/
    k4IndexedGrayPixelFormat    = 0x00000024,                   /* 4 bit indexed gray*/
    k8IndexedGrayPixelFormat    = 0x00000028                    /* 8 bit indexed gray*/
};


/* values for PixMap.pixelFormat*/
enum {
    k16LE555PixelFormat         = FOUR_CHAR_CODE('L555'),       /* 16 bit LE rgb 555 (PC)*/
    k16LE5551PixelFormat        = FOUR_CHAR_CODE('5551'),       /* 16 bit LE rgb 5551*/
    k16BE565PixelFormat         = FOUR_CHAR_CODE('B565'),       /* 16 bit BE rgb 565*/
    k16LE565PixelFormat         = FOUR_CHAR_CODE('L565'),       /* 16 bit LE rgb 565*/
    k24BGRPixelFormat           = FOUR_CHAR_CODE('24BG'),       /* 24 bit bgr */
    k32BGRAPixelFormat          = FOUR_CHAR_CODE('BGRA'),       /* 32 bit bgra    (Matrox)*/
    k32ABGRPixelFormat          = FOUR_CHAR_CODE('ABGR'),       /* 32 bit abgr    */
    k32RGBAPixelFormat          = FOUR_CHAR_CODE('RGBA'),       /* 32 bit rgba    */
    kYUVSPixelFormat            = FOUR_CHAR_CODE('yuvs'),       /* YUV 4:2:2 byte ordering 16-unsigned = 'YUY2'*/
    kYUVUPixelFormat            = FOUR_CHAR_CODE('yuvu'),       /* YUV 4:2:2 byte ordering 16-signed*/
    kYVU9PixelFormat            = FOUR_CHAR_CODE('YVU9'),       /* YVU9 Planar    9*/
    kYUV411PixelFormat          = FOUR_CHAR_CODE('Y411'),       /* YUV 4:1:1 Interleaved  16*/
    kYVYU422PixelFormat         = FOUR_CHAR_CODE('YVYU'),       /* YVYU 4:2:2 byte ordering   16*/
    kUYVY422PixelFormat         = FOUR_CHAR_CODE('UYVY'),       /* UYVY 4:2:2 byte ordering   16*/
    kYUV211PixelFormat          = FOUR_CHAR_CODE('Y211'),       /* YUV 2:1:1 Packed   8*/
    k2vuyPixelFormat            = FOUR_CHAR_CODE('2vuy')        /* UYVY 4:2:2 byte ordering   16*/
};

#if !OLDPIXMAPSTRUCT

struct PixMapExtension {
    long                            extSize;                    /*size of struct, duh!*/
    unsigned long                   pmBits;                     /*pixmap attributes bitfield*/
    void *                          pmGD;                       /*this is a GDHandle*/
    long                            pmSeed;
    Fixed                           gammaLevel;                 /*pixmap gammalevel*/
    Fixed                           requestedGammaLevel;
    unsigned long                   reserved2;
    long                            longRowBytes;               /*used when rowBytes > 16382*/
    unsigned long                   signature;
    Handle                          baseAddrHandle;
};
typedef struct PixMapExtension          PixMapExtension;

typedef PixMapExtension *               PixMapExtPtr;
typedef PixMapExtPtr *                  PixMapExtHandle;
#endif  /* !OLDPIXMAPSTRUCT */


struct PixMap {
    Ptr                             baseAddr;                   /*pointer to pixels*/
    short                           rowBytes;                   /*offset to next line*/
    Rect                            bounds;                     /*encloses bitmap*/
    short                           pmVersion;                  /*pixMap version number*/
    short                           packType;                   /*defines packing format*/
    long                            packSize;                   /*length of pixel data*/
    Fixed                           hRes;                       /*horiz. resolution (ppi)*/
    Fixed                           vRes;                       /*vert. resolution (ppi)*/
    short                           pixelType;                  /*defines pixel type*/
    short                           pixelSize;                  /*# bits in pixel*/
    short                           cmpCount;                   /*# components in pixel*/
    short                           cmpSize;                    /*# bits per component*/
#if OLDPIXMAPSTRUCT
    long                            planeBytes;                 /*offset to next plane*/
    CTabHandle                      pmTable;                    /*color map for this pixMap*/
    long                            pmReserved;
#else
  OSType                          pixelFormat;                /*fourCharCode representation*/
    CTabHandle                      pmTable;                    /*color map for this pixMap*/
  PixMapExtHandle                 pmExt;                      /*Handle to pixMap extension*/
#endif
};
typedef struct PixMap                   PixMap;
typedef PixMap *                        PixMapPtr;
typedef PixMapPtr *                     PixMapHandle;

struct PixPat {
    short                           patType;                    /*type of pattern*/
    PixMapHandle                    patMap;                     /*the pattern's pixMap*/
    Handle                          patData;                    /*pixmap's data*/
    Handle                          patXData;                   /*expanded Pattern data*/
    short                           patXValid;                  /*flags whether expanded Pattern valid*/
    Handle                          patXMap;                    /*Handle to expanded Pattern data*/
    Pattern                         pat1Data;                   /*old-Style pattern/RGB color*/
};
typedef struct PixPat                   PixPat;
typedef PixPat *                        PixPatPtr;
typedef PixPatPtr *                     PixPatHandle;

struct CCrsr {
    short                           crsrType;                   /*type of cursor*/
    PixMapHandle                    crsrMap;                    /*the cursor's pixmap*/
    Handle                          crsrData;                   /*cursor's data*/
    Handle                          crsrXData;                  /*expanded cursor data*/
    short                           crsrXValid;                 /*depth of expanded data (0 if none)*/
    Handle                          crsrXHandle;                /*future use*/
    Bits16                          crsr1Data;                  /*one-bit cursor*/
    Bits16                          crsrMask;                   /*cursor's mask*/
    Point                           crsrHotSpot;                /*cursor's hotspot*/
    long                            crsrXTable;                 /*private*/
    long                            crsrID;                     /*private*/
};
typedef struct CCrsr                    CCrsr;
typedef CCrsr *                         CCrsrPtr;
typedef CCrsrPtr *                      CCrsrHandle;

struct GammaTbl {
    short                           gVersion;                   /*gamma version number*/
    short                           gType;                      /*gamma data type*/
    short                           gFormulaSize;               /*Formula data size*/
    short                           gChanCnt;                   /*number of channels of data*/
    short                           gDataCnt;                   /*number of values/channel*/
    short                           gDataWidth;                 /*bits/corrected value (data packed to next larger byte size)*/
    short                           gFormulaData[1];            /*data for formulas followed by gamma values*/
};
typedef struct GammaTbl                 GammaTbl;
typedef GammaTbl *                      GammaTblPtr;
typedef GammaTblPtr *                   GammaTblHandle;

struct ITab {
    long                            iTabSeed;                   /*copy of CTSeed from source CTable*/
    short                           iTabRes;                    /*bits/channel resolution of iTable*/
    Byte                            iTTable[1];                 /*byte colortable index values*/
};
typedef struct ITab                     ITab;
typedef ITab *                          ITabPtr;
typedef ITabPtr *                       ITabHandle;

struct SProcRec {
    Handle                          nxtSrch;                    /*SProcHndl Handle to next SProcRec*/
    ColorSearchUPP                  srchProc;                   /*search procedure proc ptr*/
};
typedef struct SProcRec                 SProcRec;

typedef SProcRec *                      SProcPtr;
typedef SProcPtr *                      SProcHndl;

struct CProcRec {
    Handle                          nxtComp;                    /*CProcHndl Handle to next CProcRec*/
    ColorComplementUPP              compProc;                   /*complement procedure proc ptr*/
};
typedef struct CProcRec                 CProcRec;

typedef CProcRec *                      CProcPtr;
typedef CProcPtr *                      CProcHndl;
/*
    QuickTime 3.0 makes GDevice data structure available on non-Mac OS's.
    In order to implement GDevice in these alternate environments, the GDevice
    had to be extended. The gdReserved field was changed to gdExt which is
    a Handle to extra info.  
*/
#ifndef OLDGDEVICESTRUCT
#if TARGET_OS_MAC && TARGET_API_MAC_OS8
#define OLDGDEVICESTRUCT 1
#else
#define OLDGDEVICESTRUCT 0
#endif  /* TARGET_OS_MAC && TARGET_API_MAC_OS8 */

#endif  /* !defined(OLDGDEVICESTRUCT) */

typedef struct GDevice                  GDevice;
typedef GDevice *                       GDPtr;
typedef GDPtr *                         GDHandle;

struct GDevice {
    short                           gdRefNum;                   /*driver's unit number*/
    short                           gdID;                       /*client ID for search procs*/
    short                           gdType;                     /*fixed/CLUT/direct*/
    ITabHandle                      gdITable;                   /*Handle to inverse lookup table*/
    short                           gdResPref;                  /*preferred resolution of GDITable*/
    SProcHndl                       gdSearchProc;               /*search proc list head*/
    CProcHndl                       gdCompProc;                 /*complement proc list*/
    short                           gdFlags;                    /*grafDevice flags word*/
    PixMapHandle                    gdPMap;                     /*describing pixMap*/
    long                            gdRefCon;                   /*reference value*/
    GDHandle                        gdNextGD;                   /*GDHandle Handle of next gDevice*/
    Rect                            gdRect;                     /* device's bounds in global coordinates*/
    long                            gdMode;                     /*device's current mode*/
    short                           gdCCBytes;                  /*depth of expanded cursor data*/
    short                           gdCCDepth;                  /*depth of expanded cursor data*/
    Handle                          gdCCXData;                  /*Handle to cursor's expanded data*/
    Handle                          gdCCXMask;                  /*Handle to cursor's expanded mask*/
#if OLDGDEVICESTRUCT
    long                            gdReserved;                 /*future use. MUST BE 0*/
#else
  Handle                          gdExt;                      /*QuickTime 3.0 private info*/
#endif
};


struct GrafVars {
    RGBColor                        rgbOpColor;                 /*color for addPin  subPin and average*/
    RGBColor                        rgbHiliteColor;             /*color for hiliting*/
    Handle                          pmFgColor;                  /*palette Handle for foreground color*/
    short                           pmFgIndex;                  /*index value for foreground*/
    Handle                          pmBkColor;                  /*palette Handle for background color*/
    short                           pmBkIndex;                  /*index value for background*/
    short                           pmFlags;                    /*flags for Palette Manager*/
};
typedef struct GrafVars                 GrafVars;

typedef GrafVars *                      GVarPtr;
typedef GVarPtr *                       GVarHandle;

#if OPAQUE_TOOLBOX_STRUCTS
typedef GrafPtr                         CGrafPtr;
#else
typedef struct CGrafPort                CGrafPort;
typedef CGrafPort *                     CGrafPtr;
#endif  /* OPAQUE_TOOLBOX_STRUCTS */

typedef CALLBACK_API_C( OSStatus , QDPrinterStatusProcPtr )(PrinterStatusOpcode opcode, CGrafPtr currentPort, void *printerStatus);
typedef STACK_UPP_TYPE(QDPrinterStatusProcPtr)                  QDPrinterStatusUPP;


struct CQDProcs {
    QDTextUPP                       textProc;
    QDLineUPP                       lineProc;
    QDRectUPP                       rectProc;
    QDRRectUPP                      rRectProc;
    QDOvalUPP                       ovalProc;
    QDArcUPP                        arcProc;
    QDPolyUPP                       polyProc;
    QDRgnUPP                        rgnProc;
    QDBitsUPP                       bitsProc;
    QDCommentUPP                    commentProc;
    QDTxMeasUPP                     txMeasProc;
    QDGetPicUPP                     getPicProc;
    QDPutPicUPP                     putPicProc;
    QDOpcodeUPP                     opcodeProc;
    UniversalProcPtr                newProc1;                   /* this is the StdPix bottleneck -- see ImageCompression.h */
    QDStdGlyphsUPP                  glyphsProc;                 /* was newProc2; now used in Unicode text drawing */
    QDPrinterStatusUPP              printerStatusProc;          /* was newProc3;  now used to communicate status between Printing code and System imaging code */
    UniversalProcPtr                newProc4;
    UniversalProcPtr                newProc5;
    UniversalProcPtr                newProc6;
};
typedef struct CQDProcs                 CQDProcs;
typedef CQDProcs *                      CQDProcsPtr;
#if !OPAQUE_TOOLBOX_STRUCTS

struct CGrafPort {
    short                           device;
    PixMapHandle                    portPixMap;                 /*port's pixel map*/
    short                           portVersion;                /*high 2 bits always set*/
    Handle                          grafVars;                   /*Handle to more fields*/
    short                           chExtra;                    /*character extra*/
    short                           pnLocHFrac;                 /*pen fraction*/
    Rect                            portRect;
    RgnHandle                       visRgn;
    RgnHandle                       clipRgn;
    PixPatHandle                    bkPixPat;                   /*background pattern*/
    RGBColor                        rgbFgColor;                 /*RGB components of fg*/
    RGBColor                        rgbBkColor;                 /*RGB components of bk*/
    Point                           pnLoc;
    Point                           pnSize;
    short                           pnMode;
    PixPatHandle                    pnPixPat;                   /*pen's pattern*/
    PixPatHandle                    fillPixPat;                 /*fill pattern*/
    short                           pnVis;
    short                           txFont;
    StyleField                      txFace;                     /*StyleField occupies 16-bits, but only first 8-bits are used*/
    UInt8                           txFlags;                    /* QuickTime uses second 8 bits of StyleField for txFlags */
    short                           txMode;
    short                           txSize;
    Fixed                           spExtra;
    long                            fgColor;
    long                            bkColor;
    short                           colrBit;
    short                           patStretch;
    Handle                          picSave;
    Handle                          rgnSave;
    Handle                          polySave;
    CQDProcsPtr                     grafProcs;
};

#endif  /* !OPAQUE_TOOLBOX_STRUCTS */

#if OPAQUE_TOOLBOX_STRUCTS

typedef WindowPtr                       CWindowPtr;
#else
typedef CGrafPtr                        CWindowPtr;
#endif  /* OPAQUE_TOOLBOX_STRUCTS */


struct ReqListRec {
    short                           reqLSize;                   /*request list size*/
    short                           reqLData[1];                /*request list data*/
};
typedef struct ReqListRec               ReqListRec;

struct OpenCPicParams {
    Rect                            srcRect;
    Fixed                           hRes;
    Fixed                           vRes;
    short                           version;
    short                           reserved1;
    long                            reserved2;
};
typedef struct OpenCPicParams           OpenCPicParams;
enum {
    kCursorImageMajorVersion    = 0x0001,
    kCursorImageMinorVersion    = 0x0000
};


struct CursorImageRec {
    UInt16                          majorVersion;
    UInt16                          minorVersion;
    PixMapHandle                    cursorPixMap;
    BitMapHandle                    cursorBitMask;
};
typedef struct CursorImageRec           CursorImageRec;

typedef CursorImageRec *                CursorImagePtr;
typedef CALLBACK_API( void , DeviceLoopDrawingProcPtr )(short depth, short deviceFlags, GDHandle targetDevice, long userData);
typedef STACK_UPP_TYPE(DeviceLoopDrawingProcPtr)                DeviceLoopDrawingUPP;
#if OPAQUE_UPP_TYPES
#if CALL_NOT_IN_CARBON
    EXTERN_API(QDPrinterStatusUPP)
    NewQDPrinterStatusUPP          (QDPrinterStatusProcPtr  userRoutine);

#endif  /* CALL_NOT_IN_CARBON */

    EXTERN_API(DeviceLoopDrawingUPP)
    NewDeviceLoopDrawingUPP        (DeviceLoopDrawingProcPtr userRoutine);

#if CALL_NOT_IN_CARBON
    EXTERN_API(void)
    DisposeQDPrinterStatusUPP      (QDPrinterStatusUPP      userUPP);

#endif  /* CALL_NOT_IN_CARBON */

    EXTERN_API(void)
    DisposeDeviceLoopDrawingUPP    (DeviceLoopDrawingUPP    userUPP);

#if CALL_NOT_IN_CARBON
    EXTERN_API(OSStatus)
    InvokeQDPrinterStatusUPP       (PrinterStatusOpcode     opcode,
                                    CGrafPtr                currentPort,
                                    void *                  printerStatus,
                                    QDPrinterStatusUPP      userUPP);

#endif  /* CALL_NOT_IN_CARBON */

    EXTERN_API(void)
    InvokeDeviceLoopDrawingUPP     (short                   depth,
                                    short                   deviceFlags,
                                    GDHandle                targetDevice,
                                    long                    userData,
                                    DeviceLoopDrawingUPP    userUPP);

#else
    enum { uppQDPrinterStatusProcInfo = 0x00000FF1 };               /* 4_bytes Func(4_bytes, 4_bytes, 4_bytes) */
    enum { uppDeviceLoopDrawingProcInfo = 0x00003E80 };             /* pascal no_return_value Func(2_bytes, 2_bytes, 4_bytes, 4_bytes) */
    #define NewQDPrinterStatusUPP(userRoutine)                      (QDPrinterStatusUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDPrinterStatusProcInfo, GetCurrentArchitecture())
    #define NewDeviceLoopDrawingUPP(userRoutine)                    (DeviceLoopDrawingUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeviceLoopDrawingProcInfo, GetCurrentArchitecture())
    #define DisposeQDPrinterStatusUPP(userUPP)                      DisposeRoutineDescriptor(userUPP)
    #define DisposeDeviceLoopDrawingUPP(userUPP)                    DisposeRoutineDescriptor(userUPP)
    #define InvokeQDPrinterStatusUPP(opcode, currentPort, printerStatus, userUPP)  (OSStatus)CALL_THREE_PARAMETER_UPP((userUPP), uppQDPrinterStatusProcInfo, (opcode), (currentPort), (printerStatus))
    #define InvokeDeviceLoopDrawingUPP(depth, deviceFlags, targetDevice, userData, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppDeviceLoopDrawingProcInfo, (depth), (deviceFlags), (targetDevice), (userData))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewQDPrinterStatusProc(userRoutine)                     NewQDPrinterStatusUPP(userRoutine)
#define NewDeviceLoopDrawingProc(userRoutine)                   NewDeviceLoopDrawingUPP(userRoutine)
#define CallQDPrinterStatusProc(userRoutine, opcode, currentPort, printerStatus) InvokeQDPrinterStatusUPP(opcode, currentPort, printerStatus, userRoutine)
#define CallDeviceLoopDrawingProc(userRoutine, depth, deviceFlags, targetDevice, userData) InvokeDeviceLoopDrawingUPP(depth, deviceFlags, targetDevice, userData, userRoutine)
#if !OPAQUE_TOOLBOX_STRUCTS
/* In Carbon, use the QDGlobals accessors such as GetQDGlobalsThePort() */

struct QDGlobals {
    char                            privates[76];
    long                            randSeed;
    BitMap                          screenBits;
    Cursor                          arrow;
    Pattern                         dkGray;
    Pattern                         ltGray;
    Pattern                         gray;
    Pattern                         black;
    Pattern                         white;
    GrafPtr                         thePort;
};
typedef struct QDGlobals                QDGlobals;
typedef QDGlobals *                     QDGlobalsPtr;
typedef QDGlobalsPtr *                  QDGlobalsHdl;
extern QDGlobals qd;

#endif  /* !OPAQUE_TOOLBOX_STRUCTS */

#if CALL_NOT_IN_CARBON
EXTERN_API( void )
InitGraf                        (void *                 globalPtr)                          ONEWORDINLINE(0xA86E);

EXTERN_API( void )
OpenPort                        (GrafPtr                port)                               ONEWORDINLINE(0xA86F);

EXTERN_API( void )
InitPort                        (GrafPtr                port)                               ONEWORDINLINE(0xA86D);

EXTERN_API( void )
ClosePort                       (GrafPtr                port)                               ONEWORDINLINE(0xA87D);

/*
   These are Carbon only routines. They do nothing at all on
   Mac OS 8, but work flawlessly on Mac OS X.
*/
#endif  /* CALL_NOT_IN_CARBON */

EXTERN_API( OSErr )
LockPortBits                    (GrafPtr                port);

EXTERN_API( OSErr )
UnlockPortBits                  (GrafPtr                port);

/* Break a region up into rectangles.*/

enum {
    kQDParseRegionFromTop       = (1 << 0),
    kQDParseRegionFromBottom    = (1 << 1),
    kQDParseRegionFromLeft      = (1 << 2),
    kQDParseRegionFromRight     = (1 << 3),
    kQDParseRegionFromTopLeft   = kQDParseRegionFromTop | kQDParseRegionFromLeft,
    kQDParseRegionFromBottomRight = kQDParseRegionFromBottom | kQDParseRegionFromRight
};


typedef SInt32                          QDRegionParseDirection;
enum {
    kQDRegionToRectsMsgInit     = 1,
    kQDRegionToRectsMsgParse    = 2,
    kQDRegionToRectsMsgTerminate = 3
};

typedef CALLBACK_API_C( OSStatus , RegionToRectsProcPtr )(UInt16 message, RgnHandle rgn, const Rect *rect, void *refCon);
typedef STACK_UPP_TYPE(RegionToRectsProcPtr)                    RegionToRectsUPP;
#if OPAQUE_UPP_TYPES
    EXTERN_API(RegionToRectsUPP)
    NewRegionToRectsUPP            (RegionToRectsProcPtr    userRoutine);

    EXTERN_API(void)
    DisposeRegionToRectsUPP        (RegionToRectsUPP        userUPP);

    EXTERN_API(OSStatus)
    InvokeRegionToRectsUPP         (UInt16                  message,
                                    RgnHandle               rgn,
                                    const Rect *            rect,
                                    void *                  refCon,
                                    RegionToRectsUPP        userUPP);

#else
    enum { uppRegionToRectsProcInfo = 0x00003FB1 };                 /* 4_bytes Func(2_bytes, 4_bytes, 4_bytes, 4_bytes) */
    #define NewRegionToRectsUPP(userRoutine)                        (RegionToRectsUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppRegionToRectsProcInfo, GetCurrentArchitecture())
    #define DisposeRegionToRectsUPP(userUPP)                        DisposeRoutineDescriptor(userUPP)
    #define InvokeRegionToRectsUPP(message, rgn, rect, refCon, userUPP)  (OSStatus)CALL_FOUR_PARAMETER_UPP((userUPP), uppRegionToRectsProcInfo, (message), (rgn), (rect), (refCon))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewRegionToRectsProc(userRoutine)                       NewRegionToRectsUPP(userRoutine)
#define CallRegionToRectsProc(userRoutine, message, rgn, rect, refCon) InvokeRegionToRectsUPP(message, rgn, rect, refCon, userRoutine)
EXTERN_API_C( OSStatus )
QDRegionToRects                 (RgnHandle              rgn,
                                 QDRegionParseDirection  dir,
                                 RegionToRectsUPP       proc,
                                 void *                 userData);

#if !TARGET_OS_MAC || TARGET_API_MAC_OSX
#if CALL_NOT_IN_CARBON
EXTERN_API( OSErr )
UpdatePort                      (GrafPtr                port);

EXTERN_API( void *)
GetPortNativeWindow             (GrafPtr                macPort);

EXTERN_API( GrafPtr )
GetNativeWindowPort             (void *                 nativeWindow);

EXTERN_API( void *)
MacRegionToNativeRegion         (RgnHandle              macRegion);

EXTERN_API( RgnHandle )
NativeRegionToMacRegion         (void *                 nativeRegion);

#endif  /* CALL_NOT_IN_CARBON */

#endif  /* !TARGET_OS_MAC || TARGET_API_MAC_OSX */

#if TARGET_OS_WIN32
#if CALL_NOT_IN_CARBON
EXTERN_API( void *)
GetPortHWND                     (GrafPtr                port);

EXTERN_API( GrafPtr )
GetHWNDPort                     (void *                 theHWND);

#define GetPortHWND(port)  (HWND)GetPortNativeWindow(port)
#define GetHWNDPort(theHWND) GetNativeWindowPort(theHWND)
EXTERN_API( void *)
GetPortHDC                      (GrafPtr                port);

EXTERN_API( void *)
GetPortHBITMAP                  (GrafPtr                port);

EXTERN_API( void *)
GetPortHPALETTE                 (GrafPtr                port);

EXTERN_API( void *)
GetPortHFONT                    (GrafPtr                port);

EXTERN_API( void *)
GetDIBFromPICT                  (PicHandle              hPict);

EXTERN_API( PicHandle )
GetPICTFromDIB                  (void *                 h);

#endif  /* CALL_NOT_IN_CARBON */

#endif  /* TARGET_OS_WIN32 */

#if TARGET_OS_MAC
    #define MacSetPort SetPort
#endif
EXTERN_API( void )
MacSetPort                      (GrafPtr                port)                               ONEWORDINLINE(0xA873);

EXTERN_API( void )
GetPort                         (GrafPtr *              port)                               ONEWORDINLINE(0xA874);

EXTERN_API( void )
GrafDevice                      (short                  device)                             ONEWORDINLINE(0xA872);

EXTERN_API( void )
SetPortBits                     (const BitMap *         bm)                                 ONEWORDINLINE(0xA875);

EXTERN_API( void )
PortSize                        (short                  width,
                                 short                  height)                             ONEWORDINLINE(0xA876);

EXTERN_API( void )
MovePortTo                      (short                  leftGlobal,
                                 short                  topGlobal)                          ONEWORDINLINE(0xA877);

EXTERN_API( void )
SetOrigin                       (short                  h,
                                 short                  v)                                  ONEWORDINLINE(0xA878);

EXTERN_API( void )
SetClip                         (RgnHandle              rgn)                                ONEWORDINLINE(0xA879);

EXTERN_API( void )
GetClip                         (RgnHandle              rgn)                                ONEWORDINLINE(0xA87A);

EXTERN_API( void )
ClipRect                        (const Rect *           r)                                  ONEWORDINLINE(0xA87B);

EXTERN_API( void )
BackPat                         (const Pattern *        pat)                                ONEWORDINLINE(0xA87C);

EXTERN_API( void )
InitCursor                      (void)                                                      ONEWORDINLINE(0xA850);

#if TARGET_OS_MAC
    #define MacSetCursor SetCursor
#endif
EXTERN_API( void )
MacSetCursor                    (const Cursor *         crsr)                               ONEWORDINLINE(0xA851);

EXTERN_API( void )
HideCursor                      (void)                                                      ONEWORDINLINE(0xA852);

#if TARGET_OS_MAC
    #define MacShowCursor ShowCursor
#endif
EXTERN_API( void )
MacShowCursor                   (void)                                                      ONEWORDINLINE(0xA853);

EXTERN_API( void )
ObscureCursor                   (void)                                                      ONEWORDINLINE(0xA856);

EXTERN_API( void )
HidePen                         (void)                                                      ONEWORDINLINE(0xA896);

EXTERN_API( void )
ShowPen                         (void)                                                      ONEWORDINLINE(0xA897);

EXTERN_API( void )
GetPen                          (Point *                pt)                                 ONEWORDINLINE(0xA89A);

EXTERN_API( void )
GetPenState                     (PenState *             pnState)                            ONEWORDINLINE(0xA898);

EXTERN_API( void )
SetPenState                     (const PenState *       pnState)                            ONEWORDINLINE(0xA899);

EXTERN_API( void )
PenSize                         (short                  width,
                                 short                  height)                             ONEWORDINLINE(0xA89B);

EXTERN_API( void )
PenMode                         (short                  mode)                               ONEWORDINLINE(0xA89C);

EXTERN_API( void )
PenPat                          (const Pattern *        pat)                                ONEWORDINLINE(0xA89D);

EXTERN_API( void )
PenNormal                       (void)                                                      ONEWORDINLINE(0xA89E);

EXTERN_API( void )
MoveTo                          (short                  h,
                                 short                  v)                                  ONEWORDINLINE(0xA893);

EXTERN_API( void )
Move                            (short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA894);

#if TARGET_OS_MAC
    #define MacLineTo LineTo
#endif
EXTERN_API( void )
MacLineTo                       (short                  h,
                                 short                  v)                                  ONEWORDINLINE(0xA891);

EXTERN_API( void )
Line                            (short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA892);

EXTERN_API( void )
ForeColor                       (long                   color)                              ONEWORDINLINE(0xA862);

EXTERN_API( void )
BackColor                       (long                   color)                              ONEWORDINLINE(0xA863);

EXTERN_API( void )
ColorBit                        (short                  whichBit)                           ONEWORDINLINE(0xA864);

#if TARGET_OS_MAC
    #define MacSetRect SetRect
#endif
EXTERN_API( void )
MacSetRect                      (Rect *                 r,
                                 short                  left,
                                 short                  top,
                                 short                  right,
                                 short                  bottom)                             ONEWORDINLINE(0xA8A7);

#if TARGET_OS_MAC
    #define MacOffsetRect OffsetRect
#endif
EXTERN_API( void )
MacOffsetRect                   (Rect *                 r,
                                 short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA8A8);

#if TARGET_OS_MAC
    #define MacInsetRect InsetRect
#endif
EXTERN_API( void )
MacInsetRect                    (Rect *                 r,
                                 short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA8A9);

EXTERN_API( Boolean )
SectRect                        (const Rect *           src1,
                                 const Rect *           src2,
                                 Rect *                 dstRect)                            ONEWORDINLINE(0xA8AA);

#if TARGET_OS_MAC
    #define MacUnionRect UnionRect
#endif
EXTERN_API( void )
MacUnionRect                    (const Rect *           src1,
                                 const Rect *           src2,
                                 Rect *                 dstRect)                            ONEWORDINLINE(0xA8AB);

#if TARGET_OS_MAC
    #define MacEqualRect EqualRect
#endif
EXTERN_API( Boolean )
MacEqualRect                    (const Rect *           rect1,
                                 const Rect *           rect2)                              ONEWORDINLINE(0xA8A6);

EXTERN_API( Boolean )
EmptyRect                       (const Rect *           r)                                  ONEWORDINLINE(0xA8AE);

#if TARGET_OS_MAC
    #define MacFrameRect FrameRect
#endif
EXTERN_API( void )
MacFrameRect                    (const Rect *           r)                                  ONEWORDINLINE(0xA8A1);

EXTERN_API( void )
PaintRect                       (const Rect *           r)                                  ONEWORDINLINE(0xA8A2);

EXTERN_API( void )
EraseRect                       (const Rect *           r)                                  ONEWORDINLINE(0xA8A3);

#if TARGET_OS_MAC
    #define MacInvertRect InvertRect
#endif
EXTERN_API( void )
MacInvertRect                   (const Rect *           r)                                  ONEWORDINLINE(0xA8A4);

#if TARGET_OS_MAC
    #define MacFillRect FillRect
#endif
EXTERN_API( void )
MacFillRect                     (const Rect *           r,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8A5);

EXTERN_API( void )
FrameOval                       (const Rect *           r)                                  ONEWORDINLINE(0xA8B7);

EXTERN_API( void )
PaintOval                       (const Rect *           r)                                  ONEWORDINLINE(0xA8B8);

EXTERN_API( void )
EraseOval                       (const Rect *           r)                                  ONEWORDINLINE(0xA8B9);

EXTERN_API( void )
InvertOval                      (const Rect *           r)                                  ONEWORDINLINE(0xA8BA);

EXTERN_API( void )
FillOval                        (const Rect *           r,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8BB);

EXTERN_API( void )
FrameRoundRect                  (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight)                         ONEWORDINLINE(0xA8B0);

EXTERN_API( void )
PaintRoundRect                  (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight)                         ONEWORDINLINE(0xA8B1);

EXTERN_API( void )
EraseRoundRect                  (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight)                         ONEWORDINLINE(0xA8B2);

EXTERN_API( void )
InvertRoundRect                 (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight)                         ONEWORDINLINE(0xA8B3);

EXTERN_API( void )
FillRoundRect                   (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8B4);

EXTERN_API( void )
FrameArc                        (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle)                           ONEWORDINLINE(0xA8BE);

EXTERN_API( void )
PaintArc                        (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle)                           ONEWORDINLINE(0xA8BF);

EXTERN_API( void )
EraseArc                        (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle)                           ONEWORDINLINE(0xA8C0);

EXTERN_API( void )
InvertArc                       (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle)                           ONEWORDINLINE(0xA8C1);

EXTERN_API( void )
FillArc                         (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8C2);

EXTERN_API( RgnHandle )
NewRgn                          (void)                                                      ONEWORDINLINE(0xA8D8);

EXTERN_API( void )
OpenRgn                         (void)                                                      ONEWORDINLINE(0xA8DA);

EXTERN_API( void )
CloseRgn                        (RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8DB);

EXTERN_API( OSErr )
BitMapToRegion                  (RgnHandle              region,
                                 const BitMap *         bMap)                               ONEWORDINLINE(0xA8D7);

EXTERN_API( void )
DisposeRgn                      (RgnHandle              rgn)                                ONEWORDINLINE(0xA8D9);

#if TARGET_OS_MAC
    #define MacCopyRgn CopyRgn
#endif
EXTERN_API( void )
MacCopyRgn                      (RgnHandle              srcRgn,
                                 RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8DC);

EXTERN_API( void )
SetEmptyRgn                     (RgnHandle              rgn)                                ONEWORDINLINE(0xA8DD);

#if TARGET_OS_MAC
    #define MacSetRectRgn SetRectRgn
#endif
EXTERN_API( void )
MacSetRectRgn                   (RgnHandle              rgn,
                                 short                  left,
                                 short                  top,
                                 short                  right,
                                 short                  bottom)                             ONEWORDINLINE(0xA8DE);

EXTERN_API( void )
RectRgn                         (RgnHandle              rgn,
                                 const Rect *           r)                                  ONEWORDINLINE(0xA8DF);

#if TARGET_OS_MAC
    #define MacOffsetRgn OffsetRgn
#endif
EXTERN_API( void )
MacOffsetRgn                    (RgnHandle              rgn,
                                 short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA8E0);

EXTERN_API( void )
InsetRgn                        (RgnHandle              rgn,
                                 short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA8E1);

EXTERN_API( void )
SectRgn                         (RgnHandle              srcRgnA,
                                 RgnHandle              srcRgnB,
                                 RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8E4);

#if TARGET_OS_MAC
    #define MacUnionRgn UnionRgn
#endif
EXTERN_API( void )
MacUnionRgn                     (RgnHandle              srcRgnA,
                                 RgnHandle              srcRgnB,
                                 RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8E5);

EXTERN_API( void )
DiffRgn                         (RgnHandle              srcRgnA,
                                 RgnHandle              srcRgnB,
                                 RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8E6);

#if TARGET_OS_MAC
    #define MacXorRgn XorRgn
#endif
EXTERN_API( void )
MacXorRgn                       (RgnHandle              srcRgnA,
                                 RgnHandle              srcRgnB,
                                 RgnHandle              dstRgn)                             ONEWORDINLINE(0xA8E7);

EXTERN_API( Boolean )
RectInRgn                       (const Rect *           r,
                                 RgnHandle              rgn)                                ONEWORDINLINE(0xA8E9);

#if TARGET_OS_MAC
    #define MacEqualRgn EqualRgn
#endif
EXTERN_API( Boolean )
MacEqualRgn                     (RgnHandle              rgnA,
                                 RgnHandle              rgnB)                               ONEWORDINLINE(0xA8E3);

EXTERN_API( Boolean )
EmptyRgn                        (RgnHandle              rgn)                                ONEWORDINLINE(0xA8E2);

#if TARGET_OS_MAC
    #define MacFrameRgn FrameRgn
#endif
EXTERN_API( void )
MacFrameRgn                     (RgnHandle              rgn)                                ONEWORDINLINE(0xA8D2);

#if TARGET_OS_MAC
    #define MacPaintRgn PaintRgn
#endif
EXTERN_API( void )
MacPaintRgn                     (RgnHandle              rgn)                                ONEWORDINLINE(0xA8D3);

EXTERN_API( void )
EraseRgn                        (RgnHandle              rgn)                                ONEWORDINLINE(0xA8D4);

#if TARGET_OS_MAC
    #define MacInvertRgn InvertRgn
#endif
EXTERN_API( void )
MacInvertRgn                    (RgnHandle              rgn)                                ONEWORDINLINE(0xA8D5);

#if TARGET_OS_MAC
    #define MacFillRgn FillRgn
#endif
EXTERN_API( void )
MacFillRgn                      (RgnHandle              rgn,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8D6);

EXTERN_API( void )
ScrollRect                      (const Rect *           r,
                                 short                  dh,
                                 short                  dv,
                                 RgnHandle              updateRgn)                          ONEWORDINLINE(0xA8EF);

EXTERN_API( void )
CopyBits                        (const BitMap *         srcBits,
                                 const BitMap *         dstBits,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect,
                                 short                  mode,
                                 RgnHandle              maskRgn) /* can be NULL */          ONEWORDINLINE(0xA8EC);

EXTERN_API( void )
SeedFill                        (const void *           srcPtr,
                                 void *                 dstPtr,
                                 short                  srcRow,
                                 short                  dstRow,
                                 short                  height,
                                 short                  words,
                                 short                  seedH,
                                 short                  seedV)                              ONEWORDINLINE(0xA839);

EXTERN_API( void )
CalcMask                        (const void *           srcPtr,
                                 void *                 dstPtr,
                                 short                  srcRow,
                                 short                  dstRow,
                                 short                  height,
                                 short                  words)                              ONEWORDINLINE(0xA838);

EXTERN_API( void )
CopyMask                        (const BitMap *         srcBits,
                                 const BitMap *         maskBits,
                                 const BitMap *         dstBits,
                                 const Rect *           srcRect,
                                 const Rect *           maskRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA817);

EXTERN_API( PicHandle )
OpenPicture                     (const Rect *           picFrame)                           ONEWORDINLINE(0xA8F3);

EXTERN_API( void )
PicComment                      (short                  kind,
                                 short                  dataSize,
                                 Handle                 dataHandle)                         ONEWORDINLINE(0xA8F2);

EXTERN_API( void )
ClosePicture                    (void)                                                      ONEWORDINLINE(0xA8F4);

EXTERN_API( void )
DrawPicture                     (PicHandle              myPicture,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8F6);

EXTERN_API( void )
KillPicture                     (PicHandle              myPicture)                          ONEWORDINLINE(0xA8F5);

EXTERN_API( PolyHandle )
OpenPoly                        (void)                                                      ONEWORDINLINE(0xA8CB);

EXTERN_API( void )
ClosePoly                       (void)                                                      ONEWORDINLINE(0xA8CC);

EXTERN_API( void )
KillPoly                        (PolyHandle             poly)                               ONEWORDINLINE(0xA8CD);

EXTERN_API( void )
OffsetPoly                      (PolyHandle             poly,
                                 short                  dh,
                                 short                  dv)                                 ONEWORDINLINE(0xA8CE);

EXTERN_API( void )
FramePoly                       (PolyHandle             poly)                               ONEWORDINLINE(0xA8C6);

EXTERN_API( void )
PaintPoly                       (PolyHandle             poly)                               ONEWORDINLINE(0xA8C7);

EXTERN_API( void )
ErasePoly                       (PolyHandle             poly)                               ONEWORDINLINE(0xA8C8);

EXTERN_API( void )
InvertPoly                      (PolyHandle             poly)                               ONEWORDINLINE(0xA8C9);

EXTERN_API( void )
FillPoly                        (PolyHandle             poly,
                                 const Pattern *        pat)                                ONEWORDINLINE(0xA8CA);

EXTERN_API( void )
SetPt                           (Point *                pt,
                                 short                  h,
                                 short                  v)                                  ONEWORDINLINE(0xA880);

EXTERN_API( void )
LocalToGlobal                   (Point *                pt)                                 ONEWORDINLINE(0xA870);

EXTERN_API( void )
GlobalToLocal                   (Point *                pt)                                 ONEWORDINLINE(0xA871);

EXTERN_API( short )
Random                          (void)                                                      ONEWORDINLINE(0xA861);

EXTERN_API( void )
StuffHex                        (void *                 thingPtr,
                                 ConstStr255Param       s)                                  ONEWORDINLINE(0xA866);

#if TARGET_OS_MAC
    #define MacGetPixel GetPixel
#endif
EXTERN_API( Boolean )
MacGetPixel                     (short                  h,
                                 short                  v)                                  ONEWORDINLINE(0xA865);

EXTERN_API( void )
ScalePt                         (Point *                pt,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8F8);

EXTERN_API( void )
MapPt                           (Point *                pt,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8F9);

EXTERN_API( void )
MapRect                         (Rect *                 r,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8FA);

EXTERN_API( void )
MapRgn                          (RgnHandle              rgn,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8FB);

EXTERN_API( void )
MapPoly                         (PolyHandle             poly,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            ONEWORDINLINE(0xA8FC);

EXTERN_API( void )
SetStdProcs                     (QDProcs *              procs)                              ONEWORDINLINE(0xA8EA);

EXTERN_API( void )
StdRect                         (GrafVerb               verb,
                                 const Rect *           r)                                  ONEWORDINLINE(0xA8A0);

EXTERN_API( void )
StdRRect                        (GrafVerb               verb,
                                 const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight)                         ONEWORDINLINE(0xA8AF);

EXTERN_API( void )
StdOval                         (GrafVerb               verb,
                                 const Rect *           r)                                  ONEWORDINLINE(0xA8B6);

EXTERN_API( void )
StdArc                          (GrafVerb               verb,
                                 const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle)                           ONEWORDINLINE(0xA8BD);

EXTERN_API( void )
StdPoly                         (GrafVerb               verb,
                                 PolyHandle             poly)                               ONEWORDINLINE(0xA8C5);

EXTERN_API( void )
StdRgn                          (GrafVerb               verb,
                                 RgnHandle              rgn)                                ONEWORDINLINE(0xA8D1);

EXTERN_API( void )
StdBits                         (const BitMap *         srcBits,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect,
                                 short                  mode,
                                 RgnHandle              maskRgn)                            ONEWORDINLINE(0xA8EB);

EXTERN_API( void )
StdComment                      (short                  kind,
                                 short                  dataSize,
                                 Handle                 dataHandle)                         ONEWORDINLINE(0xA8F1);

EXTERN_API( void )
StdGetPic                       (void *                 dataPtr,
                                 short                  byteCount)                          ONEWORDINLINE(0xA8EE);

EXTERN_API( void )
StdPutPic                       (const void *           dataPtr,
                                 short                  byteCount)                          ONEWORDINLINE(0xA8F0);

EXTERN_API( void )
StdOpcode                       (const Rect *           fromRect,
                                 const Rect *           toRect,
                                 UInt16                 opcode,
                                 SInt16                 version)                            ONEWORDINLINE(0xABF8);

EXTERN_API( void )
AddPt                           (Point                  src,
                                 Point *                dst)                                ONEWORDINLINE(0xA87E);

EXTERN_API( Boolean )
EqualPt                         (Point                  pt1,
                                 Point                  pt2)                                ONEWORDINLINE(0xA881);

#if TARGET_OS_MAC
    #define MacPtInRect PtInRect
#endif
EXTERN_API( Boolean )
MacPtInRect                     (Point                  pt,
                                 const Rect *           r)                                  ONEWORDINLINE(0xA8AD);

EXTERN_API( void )
Pt2Rect                         (Point                  pt1,
                                 Point                  pt2,
                                 Rect *                 dstRect)                            ONEWORDINLINE(0xA8AC);

EXTERN_API( void )
PtToAngle                       (const Rect *           r,
                                 Point                  pt,
                                 short *                angle)                              ONEWORDINLINE(0xA8C3);

EXTERN_API( void )
SubPt                           (Point                  src,
                                 Point *                dst)                                ONEWORDINLINE(0xA87F);

EXTERN_API( Boolean )
PtInRgn                         (Point                  pt,
                                 RgnHandle              rgn)                                ONEWORDINLINE(0xA8E8);

EXTERN_API( void )
StdLine                         (Point                  newPt)                              ONEWORDINLINE(0xA890);

#if CALL_NOT_IN_CARBON
EXTERN_API( void )
OpenCPort                       (CGrafPtr               port)                               ONEWORDINLINE(0xAA00);

EXTERN_API( void )
InitCPort                       (CGrafPtr               port)                               ONEWORDINLINE(0xAA01);

EXTERN_API( void )
CloseCPort                      (CGrafPtr               port)                               ONEWORDINLINE(0xAA02);

#endif  /* CALL_NOT_IN_CARBON */

EXTERN_API( PixMapHandle )
NewPixMap                       (void)                                                      ONEWORDINLINE(0xAA03);

EXTERN_API( void )
DisposePixMap                   (PixMapHandle           pm)                                 ONEWORDINLINE(0xAA04);

EXTERN_API( void )
CopyPixMap                      (PixMapHandle           srcPM,
                                 PixMapHandle           dstPM)                              ONEWORDINLINE(0xAA05);

EXTERN_API( PixPatHandle )
NewPixPat                       (void)                                                      ONEWORDINLINE(0xAA07);

EXTERN_API( void )
DisposePixPat                   (PixPatHandle           pp)                                 ONEWORDINLINE(0xAA08);

EXTERN_API( void )
CopyPixPat                      (PixPatHandle           srcPP,
                                 PixPatHandle           dstPP)                              ONEWORDINLINE(0xAA09);

EXTERN_API( void )
PenPixPat                       (PixPatHandle           pp)                                 ONEWORDINLINE(0xAA0A);

EXTERN_API( void )
BackPixPat                      (PixPatHandle           pp)                                 ONEWORDINLINE(0xAA0B);

EXTERN_API( PixPatHandle )
GetPixPat                       (short                  patID)                              ONEWORDINLINE(0xAA0C);

EXTERN_API( void )
MakeRGBPat                      (PixPatHandle           pp,
                                 const RGBColor *       myColor)                            ONEWORDINLINE(0xAA0D);

EXTERN_API( void )
FillCRect                       (const Rect *           r,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA0E);

EXTERN_API( void )
FillCOval                       (const Rect *           r,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA0F);

EXTERN_API( void )
FillCRoundRect                  (const Rect *           r,
                                 short                  ovalWidth,
                                 short                  ovalHeight,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA10);

EXTERN_API( void )
FillCArc                        (const Rect *           r,
                                 short                  startAngle,
                                 short                  arcAngle,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA11);

EXTERN_API( void )
FillCRgn                        (RgnHandle              rgn,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA12);

EXTERN_API( void )
FillCPoly                       (PolyHandle             poly,
                                 PixPatHandle           pp)                                 ONEWORDINLINE(0xAA13);

EXTERN_API( void )
RGBForeColor                    (const RGBColor *       color)                              ONEWORDINLINE(0xAA14);

EXTERN_API( void )
RGBBackColor                    (const RGBColor *       color)                              ONEWORDINLINE(0xAA15);

EXTERN_API( void )
SetCPixel                       (short                  h,
                                 short                  v,
                                 const RGBColor *       cPix)                               ONEWORDINLINE(0xAA16);

EXTERN_API( void )
SetPortPix                      (PixMapHandle           pm)                                 ONEWORDINLINE(0xAA06);

EXTERN_API( void )
GetCPixel                       (short                  h,
                                 short                  v,
                                 RGBColor *             cPix)                               ONEWORDINLINE(0xAA17);

EXTERN_API( void )
GetForeColor                    (RGBColor *             color)                              ONEWORDINLINE(0xAA19);

EXTERN_API( void )
GetBackColor                    (RGBColor *             color)                              ONEWORDINLINE(0xAA1A);

EXTERN_API( void )
SeedCFill                       (const BitMap *         srcBits,
                                 const BitMap *         dstBits,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect,
                                 short                  seedH,
                                 short                  seedV,
                                 ColorSearchUPP         matchProc,
                                 long                   matchData)                          ONEWORDINLINE(0xAA50);

EXTERN_API( void )
CalcCMask                       (const BitMap *         srcBits,
                                 const BitMap *         dstBits,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect,
                                 const RGBColor *       seedRGB,
                                 ColorSearchUPP         matchProc,
                                 long                   matchData)                          ONEWORDINLINE(0xAA4F);

EXTERN_API( PicHandle )
OpenCPicture                    (const OpenCPicParams * newHeader)                          ONEWORDINLINE(0xAA20);

EXTERN_API( void )
OpColor                         (const RGBColor *       color)                              ONEWORDINLINE(0xAA21);

EXTERN_API( void )
HiliteColor                     (const RGBColor *       color)                              ONEWORDINLINE(0xAA22);

EXTERN_API( void )
DisposeCTable                   (CTabHandle             cTable)                             ONEWORDINLINE(0xAA24);

EXTERN_API( CTabHandle )
GetCTable                       (short                  ctID)                               ONEWORDINLINE(0xAA18);

EXTERN_API( CCrsrHandle )
GetCCursor                      (short                  crsrID)                             ONEWORDINLINE(0xAA1B);

EXTERN_API( void )
SetCCursor                      (CCrsrHandle            cCrsr)                              ONEWORDINLINE(0xAA1C);

EXTERN_API( void )
AllocCursor                     (void)                                                      ONEWORDINLINE(0xAA1D);

EXTERN_API( void )
DisposeCCursor                  (CCrsrHandle            cCrsr)                              ONEWORDINLINE(0xAA26);

/* GetCIcon(), PlotCIcon(), and DisposeCIcon() moved to Icons.h*/

EXTERN_API( void )
SetStdCProcs                    (CQDProcs *             procs)                              ONEWORDINLINE(0xAA4E);

EXTERN_API( GDHandle )
GetMaxDevice                    (const Rect *           globalRect)                         ONEWORDINLINE(0xAA27);

EXTERN_API( long )
GetCTSeed                       (void)                                                      ONEWORDINLINE(0xAA28);

EXTERN_API( GDHandle )
GetDeviceList                   (void)                                                      ONEWORDINLINE(0xAA29);

EXTERN_API( GDHandle )
GetMainDevice                   (void)                                                      ONEWORDINLINE(0xAA2A);

EXTERN_API( GDHandle )
GetNextDevice                   (GDHandle               curDevice)                          ONEWORDINLINE(0xAA2B);

EXTERN_API( Boolean )
TestDeviceAttribute             (GDHandle               gdh,
                                 short                  attribute)                          ONEWORDINLINE(0xAA2C);

EXTERN_API( void )
SetDeviceAttribute              (GDHandle               gdh,
                                 short                  attribute,
                                 Boolean                value)                              ONEWORDINLINE(0xAA2D);

EXTERN_API( void )
InitGDevice                     (short                  qdRefNum,
                                 long                   mode,
                                 GDHandle               gdh)                                ONEWORDINLINE(0xAA2E);

EXTERN_API( GDHandle )
NewGDevice                      (short                  refNum,
                                 long                   mode)                               ONEWORDINLINE(0xAA2F);

EXTERN_API( void )
DisposeGDevice                  (GDHandle               gdh)                                ONEWORDINLINE(0xAA30);

EXTERN_API( void )
SetGDevice                      (GDHandle               gd)                                 ONEWORDINLINE(0xAA31);

EXTERN_API( GDHandle )
GetGDevice                      (void)                                                      ONEWORDINLINE(0xAA32);

EXTERN_API( long )
Color2Index                     (const RGBColor *       myColor)                            ONEWORDINLINE(0xAA33);

EXTERN_API( void )
Index2Color                     (long                   index,
                                 RGBColor *             aColor)                             ONEWORDINLINE(0xAA34);

EXTERN_API( void )
InvertColor                     (RGBColor *             myColor)                            ONEWORDINLINE(0xAA35);

EXTERN_API( Boolean )
RealColor                       (const RGBColor *       color)                              ONEWORDINLINE(0xAA36);

EXTERN_API( void )
GetSubTable                     (CTabHandle             myColors,
                                 short                  iTabRes,
                                 CTabHandle             targetTbl)                          ONEWORDINLINE(0xAA37);

EXTERN_API( void )
MakeITable                      (CTabHandle             cTabH,
                                 ITabHandle             iTabH,
                                 short                  res)                                ONEWORDINLINE(0xAA39);

EXTERN_API( void )
AddSearch                       (ColorSearchUPP         searchProc)                         ONEWORDINLINE(0xAA3A);

EXTERN_API( void )
AddComp                         (ColorComplementUPP     compProc)                           ONEWORDINLINE(0xAA3B);

EXTERN_API( void )
DelSearch                       (ColorSearchUPP         searchProc)                         ONEWORDINLINE(0xAA4C);

EXTERN_API( void )
DelComp                         (ColorComplementUPP     compProc)                           ONEWORDINLINE(0xAA4D);

EXTERN_API( void )
SetClientID                     (short                  id)                                 ONEWORDINLINE(0xAA3C);

EXTERN_API( void )
ProtectEntry                    (short                  index,
                                 Boolean                protect)                            ONEWORDINLINE(0xAA3D);

EXTERN_API( void )
ReserveEntry                    (short                  index,
                                 Boolean                reserve)                            ONEWORDINLINE(0xAA3E);

EXTERN_API( void )
SetEntries                      (short                  start,
                                 short                  count,
                                 CSpecArray             aTable)                             ONEWORDINLINE(0xAA3F);

EXTERN_API( void )
SaveEntries                     (CTabHandle             srcTable,
                                 CTabHandle             resultTable,
                                 ReqListRec *           selection)                          ONEWORDINLINE(0xAA49);

EXTERN_API( void )
RestoreEntries                  (CTabHandle             srcTable,
                                 CTabHandle             dstTable,
                                 ReqListRec *           selection)                          ONEWORDINLINE(0xAA4A);

EXTERN_API( short )
QDError                         (void)                                                      ONEWORDINLINE(0xAA40);

EXTERN_API( void )
CopyDeepMask                    (const BitMap *         srcBits,
                                 const BitMap *         maskBits,
                                 const BitMap *         dstBits,
                                 const Rect *           srcRect,
                                 const Rect *           maskRect,
                                 const Rect *           dstRect,
                                 short                  mode,
                                 RgnHandle              maskRgn) /* can be NULL */          ONEWORDINLINE(0xAA51);

EXTERN_API( void )
DeviceLoop                      (RgnHandle              drawingRgn,
                                 DeviceLoopDrawingUPP   drawingProc,
                                 long                   userData,
                                 DeviceLoopFlags        flags)                              ONEWORDINLINE(0xABCA);



                                                                                            #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                            #pragma parameter __A0 GetMaskTable
                                                                                            #endif
EXTERN_API( Ptr )
GetMaskTable                    (void)                                                      ONEWORDINLINE(0xA836);


EXTERN_API( PatHandle )
GetPattern                      (short                  patternID)                          ONEWORDINLINE(0xA9B8);

#if TARGET_OS_MAC
    #define MacGetCursor GetCursor
#endif
EXTERN_API( CursHandle )
MacGetCursor                    (short                  cursorID)                           ONEWORDINLINE(0xA9B9);

EXTERN_API( PicHandle )
GetPicture                      (short                  pictureID)                          ONEWORDINLINE(0xA9BC);

EXTERN_API( long )
DeltaPoint                      (Point                  ptA,
                                 Point                  ptB)                                ONEWORDINLINE(0xA94F);

EXTERN_API( void )
ShieldCursor                    (const Rect *           shieldRect,
                                 Point                  offsetPt)                           ONEWORDINLINE(0xA855);

EXTERN_API( void )
ScreenRes                       (short *                scrnHRes,
                                 short *                scrnVRes)                           SIXWORDINLINE(0x225F, 0x32B8, 0x0102, 0x225F, 0x32B8, 0x0104);

EXTERN_API( void )
GetIndPattern                   (Pattern *              thePat,
                                 short                  patternListID,
                                 short                  index);

#if CALL_NOT_IN_CARBON
EXTERN_API_C( Boolean )
ptinrect                        (const Point *          pt,
                                 const Rect *           r);

EXTERN_API_C( void )
pt2rect                         (const Point *          pt1,
                                 const Point *          pt2,
                                 Rect *                 destRect);

EXTERN_API_C( void )
pttoangle                       (const Rect *           r,
                                 const Point *          pt,
                                 short *                angle);

EXTERN_API_C( Boolean )
ptinrgn                         (const Point *          pt,
                                 RgnHandle              rgn);

EXTERN_API_C( void )
addpt                           (const Point *          src,
                                 Point *                dst);

EXTERN_API_C( void )
subpt                           (const Point *          src,
                                 Point *                dst);

EXTERN_API_C( Boolean )
equalpt                         (const Point *          pt1,
                                 const Point *          pt2);

EXTERN_API_C( void )
stuffhex                        (void *                 thingPtr,
                                 const char *           s);

EXTERN_API_C( void )
stdline                         (const Point *          newPt);

EXTERN_API_C( void )
shieldcursor                    (const Rect *           shieldRect,
                                 Point *                offsetPt);

#endif  /* CALL_NOT_IN_CARBON */

EXTERN_API_C( long )
deltapoint                      (Point *                ptA,
                                 Point *                ptB);

#if OLDROUTINENAMES
#define DisposPixMap(pm) DisposePixMap(pm)
#define DisposPixPat(pp) DisposePixPat(pp)
#define DisposCTable(cTable) DisposeCTable(cTable)
#define DisposCCursor(cCrsr) DisposeCCursor(cCrsr)
#define DisposGDevice(gdh) DisposeGDevice(gdh)
#endif  /* OLDROUTINENAMES */

/*
    From ToolUtils.i
*/
EXTERN_API( void )
PackBits                        (Ptr *                  srcPtr,
                                 Ptr *                  dstPtr,
                                 short                  srcBytes)                           ONEWORDINLINE(0xA8CF);

EXTERN_API( void )
UnpackBits                      (Ptr *                  srcPtr,
                                 Ptr *                  dstPtr,
                                 short                  dstBytes)                           ONEWORDINLINE(0xA8D0);

EXTERN_API( Fixed )
SlopeFromAngle                  (short                  angle)                              ONEWORDINLINE(0xA8BC);

EXTERN_API( short )
AngleFromSlope                  (Fixed                  slope)                              ONEWORDINLINE(0xA8C4);

/* New transfer modes */
enum {
    colorXorXFer                = 52,
    noiseXFer                   = 53,
    customXFer                  = 54
};

/* Custom XFer flags */
enum {
    kXFer1PixelAtATime          = 0x00000001,                   /* 1 pixel passed to custom XFer proc*/
    kXFerConvertPixelToRGB32    = 0x00000002                    /* All color depths converted to 32 bit RGB*/
};


struct CustomXFerRec {
    UInt32                          version;
    void *                          srcPixels;
    void *                          destPixels;
    void *                          resultPixels;
    UInt32                          refCon;
    UInt32                          pixelSize;
    UInt32                          pixelCount;
    Point                           firstPixelHV;
    Rect                            destBounds;
};
typedef struct CustomXFerRec            CustomXFerRec;
typedef CustomXFerRec *                 CustomXFerRecPtr;
typedef CALLBACK_API( void , CustomXFerProcPtr )(CustomXFerRecPtr info);
EXTERN_API( OSErr )
GetPortCustomXFerProc           (CGrafPtr               port,
                                 CustomXFerProcPtr *    proc,
                                 UInt32 *               flags,
                                 UInt32 *               refCon)                             FOURWORDINLINE(0x203C, 0x0010, 0x0019, 0xAB1D);

EXTERN_API( OSErr )
SetPortCustomXFerProc           (CGrafPtr               port,
                                 CustomXFerProcPtr      proc,
                                 UInt32                 flags,
                                 UInt32                 refCon)                             FOURWORDINLINE(0x203C, 0x0010, 0x001A, 0xAB1D);


enum {
    kCursorComponentsVersion    = 0x00010001
};

enum {
    kCursorComponentType        = FOUR_CHAR_CODE('curs')
};

/* Cursor Component capabilities flags */
enum {
    cursorDoesAnimate           = 1L << 0,
    cursorDoesHardware          = 1L << 1,
    cursorDoesUnreadableScreenBits = 1L << 2
};

/* Cursor Component output mode flags */
enum {
    kRenderCursorInHardware     = 1L << 0,
    kRenderCursorInSoftware     = 1L << 1
};

/* Cursor Component Info */

struct CursorInfo {
    long                            version;                    /* use kCursorComponentsVersion */
    long                            capabilities;
    long                            animateDuration;            /* approximate time between animate tickles */
    Rect                            bounds;
    Point                           hotspot;
    long                            reserved;                   /* must set to zero */

};
typedef struct CursorInfo               CursorInfo;
/* Cursor Component Selectors */
enum {
    kCursorComponentInit        = 0x0001,
    kCursorComponentGetInfo     = 0x0002,
    kCursorComponentSetOutputMode = 0x0003,
    kCursorComponentSetData     = 0x0004,
    kCursorComponentReconfigure = 0x0005,
    kCursorComponentDraw        = 0x0006,
    kCursorComponentErase       = 0x0007,
    kCursorComponentMove        = 0x0008,
    kCursorComponentAnimate     = 0x0009,
    kCursorComponentLastReserved = 0x0050
};

EXTERN_API( OSErr )
OpenCursorComponent             (Component              c,
                                 ComponentInstance *    ci)                                 FOURWORDINLINE(0x203C, 0x0008, 0x000B, 0xABE0);

EXTERN_API( OSErr )
CloseCursorComponent            (ComponentInstance      ci)                                 FOURWORDINLINE(0x203C, 0x0004, 0x000C, 0xABE0);

EXTERN_API( OSErr )
SetCursorComponent              (ComponentInstance      ci)                                 FOURWORDINLINE(0x203C, 0x0004, 0x000D, 0xABE0);

EXTERN_API( OSErr )
CursorComponentChanged          (ComponentInstance      ci)                                 FOURWORDINLINE(0x203C, 0x0004, 0x000E, 0xABE0);

EXTERN_API( OSErr )
CursorComponentSetData          (ComponentInstance      ci,
                                 long                   data)                               FOURWORDINLINE(0x203C, 0x0008, 0x000F, 0xABE0);


#if ACCESSOR_CALLS_ARE_FUNCTIONS
/* GrafPort */
/* Getters */
EXTERN_API( PixMapHandle )
GetPortPixMap                   (CGrafPtr               port);

EXTERN_API( Rect *)
GetPortBounds                   (CGrafPtr               port,
                                 Rect *                 rect);

EXTERN_API( RGBColor *)
GetPortForeColor                (CGrafPtr               port,
                                 RGBColor *             foreColor);

EXTERN_API( RGBColor *)
GetPortBackColor                (CGrafPtr               port,
                                 RGBColor *             backColor);

EXTERN_API( RGBColor *)
GetPortOpColor                  (CGrafPtr               port,
                                 RGBColor *             opColor);

EXTERN_API( RGBColor *)
GetPortHiliteColor              (CGrafPtr               port,
                                 RGBColor *             hiliteColor);

EXTERN_API( CQDProcsPtr )
GetPortGrafProcs                (CGrafPtr               port);

EXTERN_API( short )
GetPortTextFont                 (CGrafPtr               port);

EXTERN_API( Style )
GetPortTextFace                 (CGrafPtr               port);

EXTERN_API( short )
GetPortTextMode                 (CGrafPtr               port);

EXTERN_API( short )
GetPortTextSize                 (CGrafPtr               port);

EXTERN_API( short )
GetPortChExtra                  (CGrafPtr               port);

EXTERN_API( short )
GetPortFracHPenLocation         (CGrafPtr               port);

EXTERN_API( Fixed )
GetPortSpExtra                  (CGrafPtr               port);

EXTERN_API( short )
GetPortPenVisibility            (CGrafPtr               port);

EXTERN_API( RgnHandle )
GetPortVisibleRegion            (CGrafPtr               port,
                                 RgnHandle              visRgn);

EXTERN_API( RgnHandle )
GetPortClipRegion               (CGrafPtr               port,
                                 RgnHandle              clipRgn);

EXTERN_API( PixPatHandle )
GetPortBackPixPat               (CGrafPtr               port,
                                 PixPatHandle           backPattern);

EXTERN_API( PixPatHandle )
GetPortPenPixPat                (CGrafPtr               port,
                                 PixPatHandle           penPattern);

EXTERN_API( PixPatHandle )
GetPortFillPixPat               (CGrafPtr               port,
                                 PixPatHandle           fillPattern);

EXTERN_API( Point *)
GetPortPenSize                  (CGrafPtr               port,
                                 Point *                penSize);

EXTERN_API( SInt32 )
GetPortPenMode                  (CGrafPtr               port);

EXTERN_API( Point *)
GetPortPenLocation              (CGrafPtr               port,
                                 Point *                penLocation);

EXTERN_API( Boolean )
IsPortRegionBeingDefined        (CGrafPtr               port);

EXTERN_API( Boolean )
IsPortPictureBeingDefined       (CGrafPtr               port);

EXTERN_API( Boolean )
IsPortOffscreen                 (CGrafPtr               port);

/* Setters */
EXTERN_API( void )
SetPortBounds                   (CGrafPtr               port,
                                 const Rect *           rect);

EXTERN_API( void )
SetPortOpColor                  (CGrafPtr               port,
                                 const RGBColor *       opColor);

EXTERN_API( void )
SetPortGrafProcs                (CGrafPtr               port,
                                 CQDProcs *             procs);

EXTERN_API( void )
SetPortVisibleRegion            (CGrafPtr               port,
                                 RgnHandle              visRgn);

EXTERN_API( void )
SetPortClipRegion               (CGrafPtr               port,
                                 RgnHandle              clipRgn);

EXTERN_API( void )
SetPortPenPixPat                (CGrafPtr               port,
                                 PixPatHandle           penPattern);

EXTERN_API( void )
SetPortBackPixPat               (CGrafPtr               port,
                                 PixPatHandle           backPattern);

EXTERN_API( void )
SetPortPenSize                  (CGrafPtr               port,
                                 Point                  penSize);

EXTERN_API( void )
SetPortPenMode                  (CGrafPtr               port,
                                 SInt32                 penMode);

EXTERN_API( void )
SetPortFracHPenLocation         (CGrafPtr               port,
                                 short                  pnLocHFrac);

/* PixMap */
EXTERN_API( Rect *)
GetPixBounds                    (PixMapHandle           pixMap,
                                 Rect *                 bounds);

EXTERN_API( short )
GetPixDepth                     (PixMapHandle           pixMap);

/* QDGlobals */
/* Getters */
EXTERN_API( long )
GetQDGlobalsRandomSeed          (void);

EXTERN_API( BitMap *)
GetQDGlobalsScreenBits          (BitMap *               screenBits);

EXTERN_API( Cursor *)
GetQDGlobalsArrow               (Cursor *               arrow);

EXTERN_API( Pattern *)
GetQDGlobalsDarkGray            (Pattern *              dkGray);

EXTERN_API( Pattern *)
GetQDGlobalsLightGray           (Pattern *              ltGray);

EXTERN_API( Pattern *)
GetQDGlobalsGray                (Pattern *              gray);

EXTERN_API( Pattern *)
GetQDGlobalsBlack               (Pattern *              black);

EXTERN_API( Pattern *)
GetQDGlobalsWhite               (Pattern *              white);

EXTERN_API( CGrafPtr )
GetQDGlobalsThePort             (void);

/* Setters */
EXTERN_API( void )
SetQDGlobalsRandomSeed          (long                   randomSeed);

EXTERN_API( void )
SetQDGlobalsArrow               (const Cursor *         arrow);

/* Regions */
EXTERN_API( Rect *)
GetRegionBounds                 (RgnHandle              region,
                                 Rect *                 bounds);

EXTERN_API( Boolean )
IsRegionRectangular             (RgnHandle              region);

/* Utilities */
/* To prevent upward dependencies, GetPortWindow is defined in Window Manager interface: */
/*      pascal WindowPtr        GetPortWindow(CGrafPtr port); */
/* NewPtr/OpenCPort doesn't work with opaque structures */
EXTERN_API( CGrafPtr )
CreateNewPort                   (void);

EXTERN_API( void )
DisposePort                     (CGrafPtr               port);

#endif  /* ACCESSOR_CALLS_ARE_FUNCTIONS */

/*
   Routines available on Mac OS X to flush buffered window ports...
   These calls do nothing on Mac OS 8/9. QDIsPortBuffered will always return false there.
*/

EXTERN_API( Boolean )
QDIsPortBuffered                (CGrafPtr               port);

EXTERN_API( Boolean )
QDIsPortBufferDirty             (CGrafPtr               port);

EXTERN_API( void )
QDFlushPortBuffer               (CGrafPtr               port,
                                 RgnHandle              region);












#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __QUICKDRAW__ */

