/************************************************************ Created: Saturday, July 27, 1991 at 7:31 PM Video.h C Interface to the Macintosh Libraries Copyright Apple Computer, Inc. 1986-1991 All rights reserved This file is used in these builds: Mac32 BigBang Sys606 Change History (most recent first): <6> 11/5/93 IH Sync with Excelsior. 08-06-93 jmp Added more csDisplayTypes. <4> 6/22/93 IH Change kHasSerialSense to kHasDirectConnect, added some constants, fixed some comments. <3> 6/1/93 IH Add new control and status calls for Display Manager (including some already in Video.a). <2> 4/8/93 IH Add SwitchMode record <12> 7/31/91 JL Updated Copyright. <11> 1/29/91 JL Grouped enums into bunches of 20 for maximum C++ efficiency. <10> 1/27/91 LN Checked in Database generate file from DSG. <9> 11/13/90 JL Fixed up comments. <8> 10/24/90 JL Changed all #defines to anonymous enums. <7> 10/8/90 JAL Cleaned things up to match mpw version. <6> 7/18/90 jmp Added various equasts from CARDS & DRIVERS (2nd Edition) and from Video.a <6> 7/18/90 jmp Added various equates from CARDS & DRIVERS (2nd Edition) and from Video.a. <5> 7/2/90 jmp Cleaned up header inserted by BBS. <4> 7/2/90 jmp Added VDGammaRecord (from CARDS & DRIVERS, 2nd Edition). To Do: ************************************************************/ #ifndef __VIDEO__ #define __VIDEO__ #ifndef __QUICKDRAW__ #include #endif enum { mBaseOffset = 1, /*Id of mBaseOffset.*/ mRowBytes = 2, /*Video sResource parameter Id's */ mBounds = 3, /*Video sResource parameter Id's */ mVersion = 4, /*Video sResource parameter Id's */ mHRes = 5, /*Video sResource parameter Id's */ mVRes = 6, /*Video sResource parameter Id's */ mPixelType = 7, /*Video sResource parameter Id's */ mPixelSize = 8, /*Video sResource parameter Id's */ mCmpCount = 9, /*Video sResource parameter Id's */ mCmpSize = 10, /*Video sResource parameter Id's */ mPlaneBytes = 11, /*Video sResource parameter Id's */ mVertRefRate = 14, /*Video sResource parameter Id's */ mVidParams = 1, /*Video parameter block id.*/ mTable = 2, /*Offset to the table.*/ mPageCnt = 3, /*Number of pages*/ mDevType = 4, /*Device Type*/ oneBitMode = 128, /*Id of OneBitMode Parameter list.*/ twoBitMode = 129, /*Id of TwoBitMode Parameter list.*/ fourBitMode = 130, /*Id of FourBitMode Parameter list.*/ eightBitMode = 131 /*Id of EightBitMode Parameter list.*/ }; enum { sixteenBitMode = 132, /*Id of SixteenBitMode Parameter list.*/ thirtyTwoBitMode = 133, /*Id of ThirtyTwoBitMode Parameter list.*/ firstVidMode = 128, /*The new, better way to do the above. */ secondVidMode = 129, /* QuickDraw only supports six video */ thirdVidMode = 130, /* at this time. */ fourthVidMode = 131, fifthVidMode = 132, sixthVidMode = 133, spGammaDir = 64, spVidNamesDir = 65 }; // csTimingFormat values in VDTimingInfo // // look in the declartion rom for timing info #define kDeclROMtables 'decl' // csConnectFlags values in VDDisplayConnectInfo // enum { kAllModesValid = 0, // All modes not trimmed by primary init are good close enough to try kAllModesSafe = 1, // All modes not trimmed by primary init are know to be safe kReportsTagging = 2, // Can detect tagged displays (to identify smart monitors) kHasDirectConnect = 3 // True implies that driver can talk directly to device (e.g. serial data link via sense lines) }; // csDisplayType values in VDDisplayConnectInfo // enum { kUnknownConnect = 1, // Not sure how weÕll use this, but seems like a good idea. kPanelConnect = 2, // For use with fixed-in-place LCD (TFT, aka ÒActive MatrixÓ) panels. kPanelTFTConnect = 2, // Alias for kPanelConnect (because some ROM have already GMÕd that way). kFixedModeCRTConnect = 3, // For use with fixed-mode (i.e., very limited range) displays. kMultiModeCRT1Connect = 4, // 320x200 maybe, 12" maybe, 13" (default), 16" certain, 19" maybe, 21" maybe kMultiModeCRT2Connect = 5, // 320x200 maybe, 12" maybe, 13" certain, 16" (default), 19" certain, 21" maybe kMultiModeCRT3Connect = 6, // 320x200 maybe, 12" maybe, 13" certain, 16" certain, 19" default, 21" certain kMultiModeCRT4Connect = 7, // Expansion to large multi mode (not yet used) kModelessConnect = 8, // Expansion to modeless model (not yet used) kFullPageConnect = 9, // 640x818 (to get 8bpp in 512K case) and 640x870 (these two only) kVGAConnect = 10, // 640x480 VGA default -- question everything else kNTSCConnect = 11, // NTSC ST (default), FF, STconv, FFconv kPALConnect = 12, // PAL ST (default), FF, STconv, FFconv kHRConnect = 13, // 640x400 (to get 8bpp in 256K case) and 640x480 (these two only) kPanelFSTNConnect = 14 // For use with fixed-in-place LCD FSTN (aka ÒSupertwistÓ) panels. }; // csTimingFlags values in VDTimingInfoRec // also low word is returned by ROM timing tables. // enum { kModeSafe = 0, // This mode does not need confirmation kModeDefault = 1 // This is the default mode for this type of connection }; enum { /* Control Codes */ cscReset = 0, cscKillIO = 1, cscSetMode = 2, cscSetEntries = 3, cscSetGamma = 4, cscGrayPage = 5, cscGrayScreen = 5, cscSetGray = 6, cscSetInterrupt = 7, cscDirectSetEntries = 8, cscSetDefaultMode = 9, cscSwitchMode = 10, cscSetSync = 11 }; enum { /* Status Codes */ cscGetMode = 2, cscGetEntries = 3, cscGetPageCnt = 4, cscGetPages = 4, /* This is what C&D 2 calls it. */ cscGetPageBase = 5, cscGetBaseAddr = 5, /* This is what C&D 2 calls it. */ cscGetGray = 6, cscGetInterrupt = 7, cscGetGamma = 8, cscGetDefaultMode = 9, cscGetCurMode = 10, cscGetSync = 11, cscGetConnection = 12, /* Return information about the connection to the display */ cscGetModeTiming = 13 /* Return timing info for a mode */ }; struct VPBlock { long vpBaseOffset; /*Offset to page zero of video RAM (From minorBaseOS).*/ short vpRowBytes; /*Width of each row of video memory.*/ Rect vpBounds; /*BoundsRect for the video display (gives dimensions).*/ short vpVersion; /*PixelMap version number.*/ short vpPackType; long vpPackSize; long vpHRes; /*Horizontal resolution of the device (pixels per inch).*/ long vpVRes; /*Vertical resolution 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.*/ }; typedef struct VPBlock VPBlock; typedef VPBlock *VPBlockPtr; struct VDEntryRecord { Ptr csTable; /*(long) pointer to color table entry=value, r,g,b:INTEGER*/ }; typedef struct VDEntryRecord VDEntryRecord; typedef VDEntryRecord *VDEntRecPtr; /* Parm block for SetGray control call */ struct VDGrayRecord { Boolean csMode; /*Same as GDDevType value (0=mono, 1=color)*/ }; typedef struct VDGrayRecord VDGrayRecord; typedef VDGrayRecord *VDGrayPtr; /* Parm block for SetEntries control call */ 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 color spec entries to set*/ }; typedef struct VDSetEntryRecord VDSetEntryRecord; typedef VDSetEntryRecord *VDSetEntryPtr; /* Parm block for SetGamma control call */ struct VDGammaRecord { Ptr csGTable; /*pointer to gamma table*/ }; typedef struct VDGammaRecord VDGammaRecord; typedef VDGammaRecord *VDGamRecPtr; struct VDSwitchInfoRec { unsigned short csMode; /*(word) mode depth*/ unsigned long csData; /*(long) functional sResource of mode*/ unsigned short csPage; /*(word) page to switch in*/ Ptr csBaseAddr; /*(long) base address of page (return value)*/ unsigned long csReserved; /*(long) Reserved (set to 0) */ }; typedef struct VDSwitchInfoRec VDSwitchInfoRec; typedef VDSwitchInfoRec *VDSwitchInfoPtr; struct VDTimingInfoRec { unsigned long csTimingMode; // LONGINT - (long) timing mode (a la InitGDevice) unsigned long csTimingReserved; // LONGINT - (long) reserved unsigned long csTimingFormat; // LONGINT - (long) what format is the timing info unsigned long csTimingData; // LONGINT - (long) data supplied by driver unsigned long csTimingFlags; // LONGINT - (long) mode within device }; typedef struct VDTimingInfoRec VDTimingInfoRec; typedef VDTimingInfoRec *VDTimingInfoPtr; struct VDDisplayConnectInfoRec { unsigned short csDisplayType; // INTEGER - (word) Type of display connected unsigned short csConnectTagged; // INTEGER - (word) Display is currently "it" (tagged to identify component) unsigned long csConnectFlags; // LONGINT - (long) tell us about the connection unsigned long csDisplayComponent; // LONGINT - (long) if the card has a direct connection to the display, it returns the display component here (FUTURE) unsigned long csConnectReserved; // LONGINT - (long) reserved }; typedef struct VDDisplayConnectInfoRec VDDisplayConnectInfoRec; typedef VDDisplayConnectInfoRec *VDDisplayConnectInfoPtr; struct VDPageInfo { short csMode; /*(word) mode within device*/ long csData; /*(long) data supplied by driver*/ short csPage; /*(word) page to switch in*/ Ptr csBaseAddr; /*(long) base address of page*/ }; typedef struct VDPageInfo VDPageInfo; typedef VDPageInfo *VDPgInfoPtr; struct VDSizeInfo { short csHSize; /*(word) desired/returned h size*/ short csHPos; /*(word) desired/returned h position*/ short csVSize; /*(word) desired/returned v size*/ short csVPos; /*(word) desired/returned v position*/ }; typedef struct VDSizeInfo VDSizeInfo; typedef VDSizeInfo *VDSzInfoPtr; struct VDSettings { short csParamCnt; /*(word) number of params*/ short csBrightMax; /*(word) max brightness*/ short csBrightDef; /*(word) default brightness*/ short csBrightVal; /*(word) current brightness*/ short csCntrstMax; /*(word) max contrast*/ short csCntrstDef; /*(word) default contrast*/ short csCntrstVal; /*(word) current contrast*/ short csTintMax; /*(word) max tint*/ short csTintDef; /*(word) default tint*/ short csTintVal; /*(word) current tint*/ short csHueMax; /*(word) max hue*/ short csHueDef; /*(word) default hue*/ short csHueVal; /*(word) current hue*/ short csHorizDef; /*(word) default horizontal*/ short csHorizVal; /*(word) current horizontal*/ short csHorizMax; /*(word) max horizontal*/ short csVertDef; /*(word) default vertical*/ short csVertVal; /*(word) current vertical*/ short csVertMax; /*(word) max vertical*/ }; typedef struct VDSettings VDSettings; typedef VDSettings *VDSettingsPtr; #endif