2020-09-30 17:12:29 +02:00

469 lines
15 KiB
C

/*
* $Header: S:\oiwh\display\iaext.h_v 1.1 12 Jun 1995 14:17:46 RC $
* $Log: S:\oiwh\display\iaext.h_v $
*
* Rev 1.1 12 Jun 1995 14:17:46 RC
* Win95 version
*- |
*- | Rev 2.4 13 Dec 1994 19:03:20 YUNSEN
*- | add nFunctions: HWEXACTSCALING and DRIVERSKIPWHITE
*- |
*- | Rev 2.3 09 Aug 1994 14:00:52 Jack
*- | Add escape order # for 24-8bits and a structure for the ESP
*- |
*- | Rev 2.2 07 Jun 1994 15:58:00 ANDY
*- | Changed IADATE_LEN to 12 for new date string format.
*- |
*- | Rev 2.1 13 May 1994 18:01:14 YUNSEN
*- | Accurate Scaling: New nFunction
*- |
*- | Rev 2.0 01 Feb 1994 16:58:54 JOEY
*- | Initial revision.
*
* Copyright (C) 1994 by Cornerstone Imaging, Inc.
*
* Revision 1.8 1993/10/21 16:02:15 erik
* added ESCAPEOUT, moved prototypes to winiaext.h
*
* Revision 1.7 1993/10/20 21:53:15 erik
* renamed ROMINFO to EXTROMINFO
*
* Revision 1.6 1993/10/20 21:47:18 erik
* added IAPRESENTMAGIC & GETIAINFOSTRUCT
*
* Revision 1.5 1993/10/12 17:16:42 erik
* added IA_BITS_BYTALIGN
*
* Revision 1.4 1993/10/12 16:26:54 erik
* synched up with NT driver version of iaext.h
*
* Revision 1.3 1993/10/12 00:43:02 erik
* added SIAImageTD() and RealizeIAPalette() and got rid of tabs
*
* Revision 1.2 1993/04/29 21:42:01 kevin
* added lots of stuff for Windows NT and extended control panel functions
*
* Revision 1.1 1992/10/22 20:41:39 van
* Initial revision
*
*/
//=========================================================================
// W A R N I N G
//
// This IAEXT.h header lives as GUINAN:\rcs\ia\winsdk\ext\include\iaext.h.
// It is shared by:
// NT toolkit
// Windows toolkit
// NT Driver
// Windows Driver
// To check out a read-only copy for compiling:
// co g:\rcs\ia\winsdk\ext\include\iaext.h@
//
//=========================================================================
/*
* define escape number for ImageAccel imaging extensions.
*
* NOTE: this number is pending assignment from Microsoft.
* 8192 = 0x2000
*/
#define IAEXTENSION 8192
#define IAPRESENTMAGIC 0x8349b2da
/*
* define escape macros for ImageAccel imaging extensions.
*/
#ifndef WIN32
// NOTE.EG for not WIN32, the driver in \devnt\include\iaext.h
// has these two defined to IA16Escape(), but I think Escape() is correct
#define ESCAPE(hDC, nEsc, nSize, lpVoid) \
Escape(hDC, nEsc, nSize, lpVoid, NULL)
#define ESCAPEOUT(hDC, nEsc, nSize, lpVoid, nSizeOut, lpOut) \
Escape(hDC, nEsc, nSize, lpVoid, lpOut)
#define DRAWESCAPE(hDC, nEsc, nSize, lpVoid) \
Escape(hDC, nEsc, nSize, lpVoid, NULL)
#else
#define ESCAPE(hDC, nEsc, nSize, lpVoid) \
ExtEscape(hDC, nEsc, nSize, lpVoid, 0, NULL)
#define ESCAPEOUT(hDC, nEsc, nSize, lpVoid, nSizeOut, lpOut) \
ExtEscape(hDC, nEsc, nSize, lpVoid, nSizeOut, lpOut)
#define DRAWESCAPE(hDC, nEsc, nSize, lpVoid) \
DrawEscape(hDC, nEsc, nSize, lpVoid)
#endif
/*
* define ImageAccel images extension numbers
*/
#define QUERYIASUPPORT 0 // QueryIASupport()
#define SCALEIADATATODEVICE 1 // ScaleIaDataToDevice()
#define VIEWPORT_ZOOMIN 2 // Supports ViewPort Zoom
#define VIEWPORT_ZOOMOUT 3 // Supports ViewPort Zoom
#define VIEWPORT_RESTORE 4 // Supports ViewPort Zoom
#define VIEWPORT_LOCK_UNLOCK 5 // Supports ViewPort Zoom
#define OVERSCANENABLE 6 // Toggles Overscan
#define SCALEIAIMAGETODEVICE32 7 // ScaleIaDataToDevice()
#define CURSOR_COLOR 8 // cursor color
#define GRAY_MAP 9 // gray color map
#define DUALMONITOR_ENABLE 10 // enable dual monitor
#define IADRV_INFOSTRING 11 // IA driver information string
#define SYSPAL_OPTION 12 // system palette option
#define QUERYVIEWPORT 13 // returns the VIEWPORTINFO of the viewport
#define SCALEIAIMAGETODEVICE 14 // ScaleIAImageToDevice()
#define GETIAINFO 15 // request driver to return ROM header
#define QUERYACCURATESCALING 16 // whether exact scaling is supported
#define HWEXACTSCALING 17 // exact scaling is supported in HW
#define DRIVERSKIPWHITE 18 // s-t-g driver can clear dest. windows
#define SUPPORT_24BITS 19 // whether 24-to-8 dithering is supported
#define SET_DITHER_PARM 19 // set dithering parameters
#define TKT_DRV_FUNC 20 // driver extension for toolkit
#define IAEXTLASTFUNCTION 21 // Highest number function
/*
* define ImageAccel extension parameter definitions
*/
#define IA_ROTATE_0 0 // rotate image 0 degrees
#define IA_ROTATE_90 1 // rotate image 90 degrees
#define IA_ROTATE_180 2 // rotate image 180 degrees
#define IA_ROTATE_270 3 // rotate image 270 degrees
#define IA_COMPRESSION 0x0003 // compression type:
#define IA_BITS 0x0000 // one bit per pixel bitmap
#define IA_RUNLENGTHS 0x0001 // 8 bit run lengths
#define IA_RUNENDS 0x0002 // 16 bit run ends
#define IA_BITS_BYTALIGN 0x0004 // 1bpp bitmap - byte align
#define IA_DECIMATE 0x8000 // decimate vertical output
#define IA_CLEARWIN 0x4000 // clear window in DLL
#define IA_DRV_SKIPWHITE 0x2000 // clear window in driver
#define IA_NIBBLE 0x4000 // accelerate 8 bit displays
#define IA_RASTEROP 0x0F00 // ROP (0 is mapped to ROPEQS)
#define IA_ONLY_BAND 0x0003 /* only band (first and last) */
#define IA_FIRST_BAND 0x0001 /* first band of image */
#define IA_NEXT_BAND 0x0000 /* next band of image */
#define IA_LAST_BAND 0x0002 /* last band of image */
/*
* define ImageAccel extension error codes definitions
*/
#define IAEXT_NOT_IMAGEACCEL FALSE // not an ImageAccel display
#define IAEXT_OK TRUE // operation successful
#define IAEXT_BAD_PARAM -128 // invalid parameter (general)
#define IAEXT_BAD_COORDINATES -129 // invalid coordinates
#define IAEXT_BAD_SCALE_RATIO -130 // invalid scale ratio
#define IAEXT_BAD_RUN_DATA -131 // bad run length/end data
#define IAEXT_BAD_HDC -132 // invalid hDC
#define IAEXT_BAD_GLOBAL_ALLOC -133 // global memory allocation err
#define IAEXT_BAD_COMPRESSION -134 // invalid compression type
/*
* define ImageAccel extension parameter for OverScan
*/
#define OVERSCAN_ON 0x0002 // OverScan bit set in DISP_CTRL
#define OVERSCAN_OFF 0x0000 // OverScan bit reset in DISP_CTRL
/*
* define ImageAccel extension descriptors
*
* NOTE: The first entry in all of the structures must be:
*
* WORD nExtension;
*
* This describes the contents of the rest of the structure.
*/
typedef struct
{
WORD nExtension;
} IAEXTENSIONSTRUCT, FAR *LPIAEXTENSIONSTRUCT;
typedef struct
{
WORD nExtension;
WORD nFunction;
} QUERYIASUPPORTSTRUCT, FAR *LPQUERYIASUPPORTSTRUCT;
// SCALEIADATATODEVICESTRUCT, SCALEIADATATODEVICESTRUCT16, and
// SCALEIADATATODEVICESTRUCT32 must have identical members, except
// for ..16 and ..32 forcing the handles to be 16-bit and
// 32-bit respectively.
typedef struct
{
WORD nExtension;
HWND hWnd;
HDC hDC;
WORD DestX;
WORD DestY;
WORD nWidth;
WORD nHeight;
WORD SrcX;
WORD nStartScan;
WORD nNumScans;
LPWORD lpIAData;
WORD nImageWidth;
WORD nNVScale;
WORD nMVScale;
WORD nNHScale;
WORD nMHScale;
WORD nRotate;
LPBYTE lpTransforms;
WORD nCompression;
WORD wSkipDestX ;
WORD wSkipDestY ;
} SCALEIADATATODEVICESTRUCT, FAR *LPSCALEIADATATODEVICESTRUCT;
typedef struct
{
WORD nExtension;
WORD hWnd;
WORD hDC;
WORD DestX;
WORD DestY;
WORD nWidth;
WORD nHeight;
WORD SrcX;
WORD nStartScan;
WORD nNumScans;
LPWORD lpIAData;
WORD nImageWidth;
WORD nNVScale;
WORD nMVScale;
WORD nNHScale;
WORD nMHScale;
WORD nRotate;
LPBYTE lpTransforms;
WORD nCompression;
WORD wSkipDestX ;
WORD wSkipDestY ;
} SCALEIADATATODEVICESTRUCT16, FAR *LPSCALEIADATATODEVICESTRUCT16;
typedef struct
{
WORD nExtension;
DWORD hWnd;
DWORD hDC;
WORD DestX;
WORD DestY;
WORD nWidth;
WORD nHeight;
WORD SrcX;
WORD nStartScan;
WORD nNumScans;
LPWORD lpIAData;
WORD nImageWidth;
WORD nNVScale;
WORD nMVScale;
WORD nNHScale;
WORD nMHScale;
WORD nRotate;
LPBYTE lpTransforms;
WORD nCompression;
WORD wSkipDestX ;
WORD wSkipDestY ;
} SCALEIADATATODEVICESTRUCT32, FAR *LPSCALEIADATATODEVICESTRUCT32;
/*
* This typedef is used in the hotkey application
*/
typedef struct tagESCTODRVR
{
WORD Extension;
WORD Param1;
} ESCTODRVR, FAR *LPESCTODRVR;
typedef struct tagRETNFROMDRVR
{
BOOL UpdateIAINI;
BYTE RestoreViewPort;
} RETNFROMDRVR, FAR *LPRETNFROMDRVR;
/*
* ImageAccel driver string length equate
*/
#define IAVER_LEN 5
#define IABLD_LEN 3
#define IADATE_LEN 12
#define IAMONTYPE_LEN 3
#define IABOARDNAME_LEN 64
typedef struct tagIADRVINFO
{
char IAVersion[IAVER_LEN];
char IABuild[IABLD_LEN];
char IADate[IADATE_LEN];
char IAMonType[IAMONTYPE_LEN];
LPSTR lpBoardName;
} IADRVINFO, FAR *LPIADRVINFO;
#ifdef WIN32
typedef struct tagVIEWPORTINFO {
RECTL rclViewport; // Current Viewport
UINT minGraphMode; // Lowest number viewport mode for this desktop
UINT maxGraphMode; // Highest number viewports supported
UINT currentGraphMode; // Current Viewport code
// minGraphMode <= currentGraphMode <= maxGraphMode
UINT restoreGraphMode; // Resolution code when zoom-restore is pushed
BOOL bPanLock; // Lock mouse cursor into viewport?
} VIEWPORTINFO, FAR *LPVIEWPORTINFO;
#endif
// =========================================================================
// the GetIAInfo() API entry point fills .RomInfo with an
// image of the ImageAccel BIOS ROM header
//
// oemCode:
// bit 15 -- OEM_DISABLE_PIXTRAN
// bit 14 -- resv'd
// bit 13 -- resv'd
// bit 12 -- resv'd
// bit 11 -- resv'd
// bit 10 -- resv'd
// bit 9 -- resv'd
// bit 8 -- resv'd
// bit 7 -- resv'd
// bit 6 -- resv'd
// bit 5 -- resv'd
// bit 4 -- resv'd
// bit 3 -- resv'd
// bit 2 -- resv'd
// bit 1 -- resv'd
// bit 0 -- resv'd
// =========================================================================
#define OEM_DISABLE_PIXTRAN 0x
// NOTE: EXTROMINFO must match ROMINFO
typedef struct {
DWORD boardID;
WORD boardRev;
BYTE monitorCodeMask;
BYTE reserved1;
WORD tableVersion;
BYTE signature[10]; // 'ImageAccel'
WORD busType;
WORD paletteType;
WORD maxPlanes;
WORD horzSize; // Horizontal size in pixels (default)
WORD vertSize; // Vertical size in pixels (default)
BYTE name[64]; // name of controller board
WORD oemCode;
BYTE reserved2[32];
} EXTROMINFO, FAR * LPEXTROMINFO;
typedef struct tagGETIAINFO {
int nExtension ;
EXTROMINFO RomInfo ;
} GETIAINFOSTRUCT, FAR *LPGETIAINFOSTRUCT ;
// =========================================================================
typedef struct tagDITHERING
{
WORD nExtension;
BOOL b24BitsOn;
BOOL bPartialImage;
int xDstStart;
int yDstStart;
} DITHERING, FAR * LPDITHERING;
// *************************************************************
// congregrational driver function for toolkit
// *************************************************************
typedef struct {
WORD nExtension; // = TKT_DRV_FUNC
WORD nFunction;
} TKTDRVPARM, FAR * LPTKTDRVPARM;
#define EXT_GET_INFO 0x40 // if TKT_DRV_FUNC is supported
#define EXT_GET_GRAYMAP 0x41 // if TKT_DRV_FUNC is supported
#define EXT_SET_GRAYMAP 0x42 // if bGrayMap is programmable
#define EXT_SET_BEHAVIOR 0x43 // if bScaleToGray != 0
typedef struct {
WORD nExtension; // = TKT_DRV_FUNC
WORD nFunction; // = EXT_GET_INFO
char bDriverType; // 16bits/others, IA1/IA2
char bDriverEnv; // WIN31/WINNT/WIN95/OS2
char bBusType; // ISA, MCA, PCI
char bPixType; // 8 or 24
char bPixPlanes; // 4, 5? or 8
char cExactScaling; // ends/lens/bits
char bGrayMap; // programmable/fixed, # of grays
char bDithering; // # of dithering colors
WORD nScaleToGray; // stg driver behavior
WORD nReserved; // padding
} EXTINFO, FAR * LPEXTINFO;
// defs for bDriverType:
#define EXT_DRV_IA1 0
#define EXT_DRV_IA2 1
// defs for bDriverEnv:
#define EXT_DRV_32BITS 0x80 // 32-bits driver
#define EXT_DRV_31 0x00
#define EXT_DRV_NT 0x10
#define EXT_DRV_95 0x20
#define EXT_DRV_OS2 0x30
#define EXT_DRV_WARP 0x40
// defs for bPixType:
#define EXT_PIX_FIXPAL 0x80
#define EXT_PIX_BPP_MASK 0x7F
// defs for bBusType:
#define EXT_BUS_UNKNOWN 0x80 // unknown bus
#define EXT_BUS_ISA 0
#define EXT_BUS_MCA 1
#define EXT_BUS_PCI 2
// defs for bExactScaling:
#define EXT_EXACT_SCALING 0x80 // exact scaling is supported
#define EXT_EXACT_LENS 1 // run-length
#define EXT_EXACT_ENDS 2 // run-ends
#define EXT_EXACT_BITS 4 // 1-bpp bitmap
#define EXT_EXACT_BITS2 8 // byte-aligned 1-bpp bitmap
#define EXT_EXACT_ALL 15 // all format
// defs for bGrayMap:
#define EXT_GRAY_EDIT 0x80 // gray indice map is programmable
#define EXT_GRAY_MASK 0x7F
// defs for nScaleToGray:
#define EXT_STG_SKIPWHITE 1 // stg driver skip white behavior
#define EXT_STG_BANDING 2 // stg driver banding behavior
#define EXT_STG_GETCLIP 4 // stg driver clipping behavior
typedef struct {
WORD nExtension; // = TKT_DRV_FUNC
WORD nFunction; // = EXT_GET_GRAYMAP or EXT_SET_GRAYMAP
BYTE bGrayMap[16];
} EXTGRAYMAP, FAR * LPEXTGRAYMAP;
typedef struct {
WORD nExtension; // = TKT_DRV_FUNC
WORD nFunction; // = EXT_SET_BEHAVIOR
WORD nScaleToGray;
} EXTBEHAVIOR, FAR * LPEXTBEHAVIOR;