Mac OS uses the data structures listed in this section to communicate with graphics drivers. The interface file Video.h contains the latest information about these structures.
 
struct VPBlock{
    long    vpBaseOffset;   /*always 0 for Slot Mgr independent drivers*/
    short   vpRowBytes;     /*width of each row of video memory*/
    Rect    pBounds;        /*Bounds Rect for the video display*/
    short   vpVersion;      /*Pixel Map version number*/
    short   vpPackType;
    long    vpPackSize;
    long    vpHRes;         /*horizres of the device (pixels per inch)*/
    long    vpVRes;         /*vertres of the device (pixels per inch)*/
    short   vpPixelType;    /*defines the pixel type*/
    short   vpPixelSize;    /*number of bits in pixel*/
    short   vpCmpCount;     /*number of components in pixel*/
    short   vpCmpSize;      /*number of bits per component*/
    long    vpPlaneBytes;   /*offset from one plane to the next*/
};
In PCI-based graphics drivers, the vpBaseOffset is always 0. The base address of video RAM for the current page, is the BaseAddress value returned by the GetCurrentMode routine.
 
struct VDEntryRecord{
    Ptr     csTable;        /*pointer to color table entry*/
};
 
struct VDGrayRecord{
    Boolean     csMode;     /*same as GDDevType value (0=color,1=mono)*/
    SInt8       filler;
};
 
struct VDSetEntryRecord{
    ColorSpec   *csTable;   /*pointer to an array of color specs*/
    short       csStart;    /*which spec in array to start with, or-1*/
    short       csCount;    /*number of colors pecentries to set*/
};
 
struct VDGammaRecord{
    Ptr         csGTable;   /*pointer to gamma table*/
};
 
struct VDSwitchInfoRec{
    UInt16      csMode;         /*relative bit depth*/
    UInt32      csData;         /*display mode ID*/
    UInt16      csPage;         /*page to switch in*/
    Ptr         csBaseAddr;     /*base address of page (return value)*/
    UInt32      csReserved;     /*reserved (set to 0)*/
};
 
struct VDTimingInfoRec{
    UInt32      csTimingMode;       /*timing mode (alaInitGDevice)*/
    UInt32      csTimingReserved;   /*reserved*/
    UInt32      csTimingFormat;     /*what format is the timing info*/
    UInt32      csTimingData;       /*data supplied by driver*/
    UInt32      csTimingFlags;      /*information*/
};
 
struct VDDisplayConnectInfoRec{
    UInt16      csDisplayType;          /*type of display connected*/
    UInt8       csConnectTaggedType;    /*typeoftagging*/
    UInt8       csConnectTaggedData;    /*taggingdata*/
    UInt32      csConnectFlags;         /*info about the connection*/
    UInt32      csDisplayComponent;     /*display component if card has direct */
                                        /* connection todisplay (future)*/
    UInt32      csConnectReserved;      /*reserved*/
};
 
struct VDPageInfo{
    short       csMode;
    long        csData;
    short       csPage;
    Ptr         csBaseAddr;
};
 
struct VDResolutionInfoRec {
    DisplayModeID       csPreviousDisplayModeID;    /* ID of the previous resolution */
                                                    /* in a chain */
    DisplayModeID       csDisplayModeID;            /* ID of the next resolution */
    unsigned long       csHorizontalPixels;         /* # of pixels in a horizontal */
                                                    /* line at the max depth */
    unsigned long       csVerticalLines;            /* # of lines in a screen at the */
                                                    /* max depth */
    Fixed               csRefreshRate;              /* vertical refresh rate, Hz */
    DepthMode           csMaxDepthMode;             /* 0x80-based max bit depth */
    unsigned long       csResolutionFlags;          /* flag bits */
    unsigned long       csReserved;                 /* reserved */
};
 
typedef struct VDResolutionInfoRec VDResolutionInfoRec;
 
/* csResolutionFlags bit flags for VDResolutionInfoRec*/
enum {
    kResolutionHasMultipleDepthSizes = 0
        /* this mode has different csHorizontalPixels, csVerticalLines at */
        /* different depths (usually slightly larger at lower depths) */
};
 
struct VDVideoParametersInfoRec{
DisplayModeID  csDisplayModeID;  /*ID of the target resolution*/
DepthMode      csDepthMode;     /*resolution's relative bit depth*/
VPBlockPtr     csVPBlockPtr;    /*pointer to video parameter block*/
UInt32         csPageCount;     /*number of pages supported by the
                resolution*/
VideoDeviceType csDeviceType;    /*direct, fixed,orCLUT*/
UInt32         csReserved;       /*reserved*/
};
 
struct VDFlagRecord{
SInt8csMode;                 /*interrupts enabled or disabled*/
SInt8filler;                 /*reserved*/
};
 
struct VDGetGammaListRec{
GammaTableID  csPreviousGammaTableID;  /*ID of previous gamma table*/
GammaTableID  csGammaTableID;         /*ID of gamma table following
                                       csPreviousDisplayModeID*/
UInt32        csGammaTableSize;      /*size of gamma table in bytes*/
char          csGammaTableName[32];  /*gamma table name (C string)*/
};
 
struct VDRetrieveGammaRec{
GammaTableID  csGammaTableID;    /*ID of gamma table to retrieve*/
GammaTbl     *csGammaTablePtr;   /*location to copy desired gamma to*/
};
 
struct VDSupportsHardwareCursorRec{
Boolean    csSupportsHardwareCursor;  /*true if HW ursor supported*/
SInt8      filler;
};
 
struct VDSetHardwareCursorRec{
void   *csCursorRef;
};
 
struct VDDrawHardwareCursorRec{
SInt32   csCursorX;
SInt32   csCursorY;
SInt32   csCursorVisible;
};
 
struct VDSyncInfoRec{
UInt8   csMode;
UInt8   csFlags;
};
 
struct VDConvolutionInfoRec{
DisplayModeID csDisplayModeID;/*ID of resolution we want info on*/
DepthMode     csDepthMode;/*Relative bit depth*/
UInt32   csPage;
UInt32   csFlags;
UInt32   csReserved;
};
 
struct VDPowerStateRec {
    unsigned long       powerState;
    unsigned long       powerFlags;
    unsigned long       powerReserved1;
    unsigned long       powerReserved2;
};
 
typedef UInt32   DisplayModeID;
typedef UInt32   VideoDeviceType;
typedef UInt32   GammaTableID;
 
/*  Power Mode constants for VDPowerStateRec.powerState.*/
    kAVPowerOff,
    kAVPowerStandby,
    kAVPowerSuspend,
    kAVPowerOn
};
 
enum {
/*  Power Mode constants for VDPowerStateRec.powerFlags.*/
    kPowerStateNeedsRefreshBit= 0,
    kPowerStateNeedsRefreshMask= (1L << 0)
};
 
/*bit definitions for the get/set sync call*/
enum{
kDisableHorizontalSyncBit=0,
kDisableVerticalSyncBit    =1,
kDisableCompositeSyncBit=2,
kEnableSyncOnBlue    =3,
kEnableSyncOnGreen    =4,
kEnableSyncOnRed    =5,
kNoSeparateSyncControlBit=6,
kHorizontalSyncMask    =0x01,
kVerticalSyncMask    =0x02,
kCompositeSyncMask    =0x04,
kDPMSSyncMask    =0x7,
kSyncOnBlueMask        =0x08,
kSyncOnGreenMask    =0x10,
kSyncOnRedMask        =0x20,
kSyncOnMask     =0x38
};
 
/*Bit definitions for the get/set convolution call*/
enum{
kConvolved=0,
kLiveVideoPassThru=1,
kConvolvedMask    =0x01,
kLiveVideoPassThruMask=0x02
};
 
/*csTimingFormat values in VDTimingInfo*/
/*timing info follows DeclROM format*/
enum{
kDeclROMtables='decl'
};
enum{
    timingInvalid             = 0,   /* unknown timing; user must confirm*/
    timingApple_512x384_60hz  = 130, /*  512x384  (60 Hz) Rubik timing*/
    timingApple_560x384_60hz  = 135, /*  560x384  (60 Hz) Rubik-560 timing*/
    timingApple_640x480_67hz  = 140, /*  640x480  (67 Hz) HR timing*/
    timingApple_640x400_67hz  = 145, /*  640x400  (67 Hz) HR-400 timing*/
    timingVESA_640x480_60hz   = 150, /*  640x480  (60 Hz) VGA timing*/
    timingApple_640x870_75hz  = 160, /*  640x870  (75 Hz) FPD timing*/
    timingApple_640x818_75hz  = 165, /*  640x818  (75 Hz) FPD-818 timing*/
    timingApple_832x624_75hz  = 170, /*  832x624  (75 Hz) GoldFish timing*/
    timingVESA_800x600_56hz   = 180, /*  800x600  (56 Hz) SVGA timing*/
    timingVESA_800x600_60hz   = 182, /*  800x600  (60 Hz) SVGA timing*/
    timingVESA_800x600_72hz   = 184, /*  800x600  (72 Hz) SVGA timing*/
    timingVESA_800x600_75hz   = 186, /*  800x600  (75 Hz) SVGA timing*/
    timingVESA_1024x768_60hz  = 190, /* 1024x768  (60 Hz) VESA 1K-60Hz*/
    timingVESA_1024x768_70hz  = 200, /* 1024x768  (70 Hz) VESA 1K-70Hz*/
    timingApple_1024x768_75hz = 210, /* 1024x768  (75 Hz) Apple 19" RGB*/
    timingApple_1152x870_75hz = 220, /* 1152x870  (75 Hz) Apple 21" RGB*/
    timingAppleNTSC_ST        = 230, /*  512x384  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingAppleNTSC_FF        = 232, /*  640x480  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingAppleNTSC_STconv    = 234, /*  512x384  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingAppleNTSC_FFconv    = 236, /*  640x480  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingApplePAL_ST         = 238, /*  640x480  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingApplePAL_FF         = 240, /*  768x576  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingApplePAL_STconv     = 242, /*  640x480  (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingApplePAL_FFconv     = 244, /*  768x576 (60 Hz, interlaced,
                                                     nonconvolved)*/
    timingVESA_1280x960_75hz   = 250, /* 1280x960  (75 Hz)*/
    timingVESA_1280x1024_60hz  = 260, /* 1280x1024 (60 Hz)*/
    timingVESA_1280x1024_75hz  = 262, /* 1280x1024 (75 Hz)*/
    timingVESA_1600x1200_60hz  = 280, /* 1600x1200 (60 Hz) VESA proposed*/
    timingVESA_1600x1200_65hz  = 282, /* 1600x1200 (65 Hz) VESA proposed*/
    timingVESA_1600x1200_70hz  = 284, /* 1600x1200 (70 Hz) VESA proposed*/
    timingVESA_1600x1200_75hz  = 286, /* 1600x1200 (75 Hz) VESA proposed*/
    timingVESA_1600x1200_80hz  = 288  /* 1600x1200 (80 Hz) VESA proposed 
                                          (pixel clock is 216 Mhz dot clock)*/
 
/*csConnectFlags values in VDDisplayConnectInfo*/
enum{
kAllModesValid        =0,
kAllModesSafe    =1,
kReportsTagging    =2,
kHasDirectConnection=3,
kIsMonoDev        =4,
kUncertainConnection=5,
kTaggingInfoNonStandard=6,
kReportsDDCConnection=7,
kHasDDCConnection=8
};
 
/*csDisplayType values in VDDisplayConnectInfo*/
enum{
    kUnknownConnect             =1,
    kPanelConnect               =2,        /*for use with fixed-in-place LCD panels */
    kPanelTFTConnect            =2,        /*alias fork PanelConnect*/
    kFixedModeCRTConnect        =3,        /*for use with fixed-mode
                                                (i.e.verylimitedrange)displays */
    kMultiModeCRT1Connect       =4,        /*320x200maybe,12"maybe, 13"(default), 
                                                16" certain,19"maybe,21"maybe*/
    kMultiModeCRT2Connect       =5,        /*320x200maybe,12"maybe,13"certain,
                                                16" (default),19"certain,21"maybe*/
    kMultiModeCRT3Connect       =6,        /*320x200maybe,12"maybe,13"certain,
                                                16" certain,19"default,21"certain*/
    kMultiModeCRT4Connect       =7,        /*expansiontolargemultimode
                                                (notyetused)*/
    kModelessConnect            =8,        /*expansion to modeless model 
                                                (notyetused)*/
    kFullPageConnect            =9,        /*640x818(to get 8bpp in 512K case) 
                                                and640x870(thesetwoonly)*/
    kVGAConnect                 =10,       /*640x480VGA default-- 
                                                question everything else*/
    kNTSCConnect                =11,       /*NTSCST(default),FF,STconv,FFconv*/
    kPALConnect                 =12,       /*PALST(default),FF,STconv,FFconv*/
    kHRConnect                  =13,       /*640x400 (to get 8bpp in 256K case) 
                                                and640x480(these two only)*/
    kPanelFSTNConnect           =14        /*for use with fixed-in-place LCDFSTN
                                                (aka"Super twist ")panels*/
};
 
/*csTimingFlags values in VDTimingInfoRec*/
enum{
    kModeValid              =0,    /*says that this mode should NOT be trimmed*/
    kModeSafe               =1,    /*this mode does not need confirmation*/
    kModeDefault            =2,    /*default mode for this type connection*/
    kModeShowNow            =3,    /*this mode should always be shown(even
                                        though it may require a confirm)*/
    kModeNotResize          =4,    /*shouldnotbeusedtoresizethedisplay, 
                                    e.g.mode selects different connector on card*/
    kModeRequiresPan        =5     /*has more pixels than are actually displayed*/
};
 
typedef unsigned short DepthMode;
enum{
kDepthMode1=128,
kDepthMode2=129,
kDepthMode3=130,
kDepthMode4=131,
kDepthMode5=132,
kDepthMode6=133
 
typedef unsigned char RawSenseCode;
 
enum{
kRSCZero=0,
kRSCOne=1,
kRSCTwo=2,
kRSCThree=3,
kRSCFour=4,
kRSCFive =5,
kRSCSix=6,
kRSCSeven=7
};
 
typedef unsigned char Extended SenseCode;
enum{
    kESCZero21Inch                  =0x00,        /*21"RGB*/
    kESCOnePortraitMono              =0x14,        /*portraitMonochrome*/
    kESCTwo12Inch                    =0x21,        /*12"RGB*/
    kESCThree21InchRadius            =0x31,        /*21"RGB(Radius)*/
    kESCThree21InchMonoRadius=0x34,                /*21"monochrome(Radius)*/
    kESCThree21InchMono              =0x35,        /*21"monochrome*/
    kESCFourNTSC                     =0x0A,        /*NTSC*/
    kESCFivePortrait                 =0x1E,        /*PortraitRGB*/
    kESCSixMSB1                      =0x03,        /*Multiscanband-1(13"thru16")*/
    kESCSixMSB2                      =0x0B,        /*Multiscanband-2(13"thru19")*/
    kESCSixMSB3                      =0x23,        /*Multiscanband-3(13"thru21")*/
    kESCSixStandard                  =0x2B,        /*13"/14"RGBor12"Monochrome*/
    kESCSevenPAL                     =0x00,        /*PAL*/
    kESCSevenNTSC                    =0x14,        /*NTSC*/
    kESCSevenVGA                     =0x17,        /*VGA*/
    kESCSeven16Inch                  =0x2D,        /*16"RGB(GoldFish)*/
    kESCSevenPALAlternate            =0x30,        /*PAL(alternate)*/
    kESCSeven19Inch                  =0x3A,        /*Third-party19"*/
    kESCSevenNoDisplay               =0x3F         /*Nodisplayconnected*/
};
 
enum {
    kDisplayModeIDCurrent = 0x0,                    // reference the current DisplayModeID
    kDisplayModeIDInvalid = 0xffffffff,             // a bogus DisplayModeID in all cases
    kDisplayModeIDFindFirstResolution = 0xfffffffe,                 // used in
                                                                    // GetNextResolution to
                                                                    // reset iterator
    kDisplayModeIDNoMoreResolutions = 0xfffffffd                    // used in
                                                                    // GetNextResolution to
                                                                    // indicate end of list
}
 
enum {
    kGammaTableIDFindFirst = 0xfffffffe,                // get the first gamma table ID
    kGammaTableIDNoMoreTables = 0xfffffffd,             // used to indicate end of list
    kGammaTableIDSpecific = 0x0    // return the info for the given table ID
}