226 lines
4.6 KiB
C
226 lines
4.6 KiB
C
|
//
|
||
|
// SaveScreenbits Interceptor
|
||
|
//
|
||
|
|
||
|
#ifndef _H_SSI
|
||
|
#define _H_SSI
|
||
|
|
||
|
|
||
|
//
|
||
|
// CONSTANTS
|
||
|
//
|
||
|
#define ST_FAILED_TO_SAVE 0
|
||
|
#define ST_SAVED_BY_DISPLAY_DRIVER 1
|
||
|
#define ST_SAVED_BY_BMP_SIMULATION 2
|
||
|
|
||
|
|
||
|
//
|
||
|
// Maximum depth of save bitmaps we can handle.
|
||
|
//
|
||
|
#define SSB_MAX_SAVE_LEVEL 6
|
||
|
|
||
|
//
|
||
|
// Define the values that can be passed in the flags field of
|
||
|
// SaveScreenBits.
|
||
|
//
|
||
|
// These should be defined in a Windows header - but they are not. In any
|
||
|
// case they are referred to in generic code, so need to be defined here.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// There are the display driver's SaveBits routine command values, and we
|
||
|
// use them also in our protocol.
|
||
|
//
|
||
|
#define ONBOARD_SAVE 0x0000
|
||
|
#define ONBOARD_RESTORE 0x0001
|
||
|
#define ONBOARD_DISCARD 0x0002
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// MACROS
|
||
|
//
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Macro that makes it easier (more readable) to access the current
|
||
|
// local SSB state.
|
||
|
//
|
||
|
#define CURRENT_LOCAL_SSB_STATE \
|
||
|
g_ssiLocalSSBState.saveState[g_ssiLocalSSBState.saveLevel]
|
||
|
|
||
|
|
||
|
#define ROUNDUP(val, granularity) \
|
||
|
((val+(granularity-1)) / granularity * granularity)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Specific values for OSI escape codes
|
||
|
//
|
||
|
#define SSI_ESC(code) (OSI_SSI_ESC_FIRST + code)
|
||
|
|
||
|
#define SSI_ESC_RESET_LEVEL SSI_ESC(0)
|
||
|
#define SSI_ESC_NEW_CAPABILITIES SSI_ESC(1)
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// TYPES
|
||
|
//
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Local SaveScreenBitmap state structures.
|
||
|
//
|
||
|
typedef struct tagSAVE_STATE
|
||
|
{
|
||
|
int saveType; // ST_xxxx
|
||
|
HBITMAP hbmpSave; // SPB bitmap from USER
|
||
|
BOOL fSavedRemotely;
|
||
|
DWORD remoteSavedPosition;// valid if (fSavedRemotely == TRUE)
|
||
|
DWORD remotePelsRequired; // valid if (fSavedRemotely == TRUE)
|
||
|
RECT rect;
|
||
|
} SAVE_STATE, FAR * LPSAVE_STATE;
|
||
|
|
||
|
typedef struct tagLOCAL_SSB_STATE
|
||
|
{
|
||
|
WORD xGranularity;
|
||
|
WORD yGranularity;
|
||
|
int saveLevel;
|
||
|
SAVE_STATE saveState[SSB_MAX_SAVE_LEVEL];
|
||
|
} LOCAL_SSB_STATE, FAR* LPLOCAL_SSB_STATE;
|
||
|
|
||
|
//
|
||
|
// Remote SaveScreenBitmap structures.
|
||
|
//
|
||
|
typedef struct tagREMOTE_SSB_STATE
|
||
|
{
|
||
|
DWORD pelsSaved;
|
||
|
}
|
||
|
REMOTE_SSB_STATE, FAR* LPREMOTE_SSB_STATE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// SSI_RESET_LEVEL
|
||
|
//
|
||
|
// Resets saved level
|
||
|
//
|
||
|
typedef struct tagSSI_RESET_LEVEL
|
||
|
{
|
||
|
OSI_ESCAPE_HEADER header;
|
||
|
}
|
||
|
SSI_RESET_LEVEL;
|
||
|
typedef SSI_RESET_LEVEL FAR * LPSSI_RESET_LEVEL;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Structure: SSI_NEW_CAPABILITIES
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
// Structure to pass new capabilities down to the display driver from the
|
||
|
// Share Core.
|
||
|
//
|
||
|
//
|
||
|
typedef struct tagSSI_NEW_CAPABILITIES
|
||
|
{
|
||
|
OSI_ESCAPE_HEADER header; // Common header
|
||
|
|
||
|
DWORD sendSaveBitmapSize; // Size of the save screen bitmap
|
||
|
|
||
|
WORD xGranularity; // X granularity for SSB
|
||
|
|
||
|
WORD yGranularity; // Y granularity for SSB
|
||
|
|
||
|
}
|
||
|
SSI_NEW_CAPABILITIES;
|
||
|
typedef SSI_NEW_CAPABILITIES FAR * LPSSI_NEW_CAPABILITIES;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// FUNCTION: SSI_SaveScreenBitmap
|
||
|
//
|
||
|
//
|
||
|
// DESCRIPTION:
|
||
|
//
|
||
|
// The main SaveScreenBitmap function, called by the SaveScreenBitmap
|
||
|
// Interceptor (SSI).
|
||
|
//
|
||
|
// Saves, restores and discards the specified bits using the Display Driver
|
||
|
// and/or our own SaveScreenBitmap simulation.
|
||
|
//
|
||
|
// Sends the SaveScreenBitmap function as an order if possible.
|
||
|
//
|
||
|
//
|
||
|
// PARAMETERS:
|
||
|
//
|
||
|
// lpRect - pointer to the rectangle coords (EXCLUSIVE screen coords).
|
||
|
//
|
||
|
// wCommand - SaveScreenBitmap command (SSB_SAVEBITS, SSB_RESTOREBITS,
|
||
|
// SSB_DISCARDBITS).
|
||
|
//
|
||
|
//
|
||
|
// RETURNS:
|
||
|
//
|
||
|
// TRUE if operation succeeded. FALSE if operation failed.
|
||
|
//
|
||
|
//
|
||
|
BOOL SSI_SaveScreenBitmap(LPRECT lpRect, UINT wCommand);
|
||
|
|
||
|
|
||
|
#ifdef DLL_DISP
|
||
|
//
|
||
|
// FUNCTION: SSI_DDProcessRequest
|
||
|
//
|
||
|
// DESCRIPTION:
|
||
|
//
|
||
|
// Called by the display driver to process an SSI specific request
|
||
|
//
|
||
|
// PARAMETERS: pso - pointer to surface object
|
||
|
// cjIn - (IN) size of request block
|
||
|
// pvIn - (IN) pointer to request block
|
||
|
// cjOut - (IN) size of response block
|
||
|
// pvOut - (OUT) pointer to response block
|
||
|
//
|
||
|
// RETURNS: None
|
||
|
//
|
||
|
//
|
||
|
BOOL SSI_DDProcessRequest(UINT escapeFn, LPOSI_ESCAPE_HEADER pRequest, DWORD cbResult);
|
||
|
|
||
|
BOOL SSI_DDInit(void);
|
||
|
void SSI_DDTerm(void);
|
||
|
|
||
|
#ifdef IS_16
|
||
|
|
||
|
void SSI_DDViewing(BOOL);
|
||
|
|
||
|
void SSISaveBits(HBITMAP, LPRECT);
|
||
|
BOOL SSIRestoreBits(HBITMAP);
|
||
|
BOOL SSIDiscardBits(HBITMAP);
|
||
|
BOOL SSIFindSlotAndDiscardAbove(HBITMAP);
|
||
|
|
||
|
#else
|
||
|
|
||
|
BOOL SSISaveBits(LPRECT lpRect);
|
||
|
BOOL SSIRestoreBits(LPRECT lpRect);
|
||
|
BOOL SSIDiscardBits(LPRECT lpRect);
|
||
|
BOOL SSIFindSlotAndDiscardAbove(LPRECT lpRect);
|
||
|
|
||
|
#endif // IS_16
|
||
|
|
||
|
#endif // DLL_DISP
|
||
|
|
||
|
|
||
|
void SSIResetSaveScreenBitmap(void);
|
||
|
|
||
|
|
||
|
BOOL SSISendSaveBitmapOrder( LPRECT lpRect, UINT wCommand );
|
||
|
|
||
|
void SSISetNewCapabilities(LPSSI_NEW_CAPABILITIES pssiNew);
|
||
|
|
||
|
DWORD SSIRemotePelsRequired(LPRECT lpRect);
|
||
|
|
||
|
|
||
|
#endif // _H_SSI
|