Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

325 lines
11 KiB

/*************************************************************
* Copyright (c) 1992, Xerox Corporation. All rights reserved.
* Copyright protection claimed includes all forms and matters
* of copyrightable material and information now allowed by
* statutory or judicial law or hereafter granted, including
* without limitation, material generated from the software
* programs which are displayed on the screen such as icons,
* screen display looks, etc.
*************************************************************/
#ifndef _SHRPIXR_PRV_INCLUDED_
#define _SHRPIXR_PRV_INCLUDED_
#ifndef _TYPES_PUB_INCLUDED
#include "types.pub"
#endif
IP_RCSINFO(shrpixr_prv_RCSInfo, "$RCSfile: shrpixr.prv,v $; $Revision: 1.0 $");
/* $Date: 12 Jun 1996 05:47:58 $ */
/* make prototypes usable from C++ */
#ifdef __cplusplus
extern "C" {
#endif
/********************************************************************
* ip_clearRightFrame()
* Input:
* sPtr = pointer to dest image (inside frame)
* sW = the width in pixels of the image (not including frame)
* sH = the height of the image (not including frame)
* sBpl = bytes/line (includes frame)
* depth = number of bits/pixel. Used to find rightmost
* image bit.
*
* On return:
* Zeros have been put into the right frame of the image.
*
* Return code:
* ia_successful successful completion
* ia_invalidParm depth had illegal value
*
********************************************************************/
Int32 CDECL
ip_clearRightFrame(
UInt8Ptr sPtr,
Int32 sW,
Int32 sH,
Int32 sBpl,
Int32 depth);
/* This assembly routine is called from inside clearRightFrame to do the
* real work in the accelerated version of the code.
*
* This routine clears the first 32 bit word of the right frame independent
* of the depth of the image. We clear lines in groups of 8, assuming that
* there's some frame at the bottom so it doesn't matter if we clear
* a few lines too many. This routine is often called from fastDilate, which
* calls it for each group of 128 lines. Since 128 is a multiple of 8,
* there are normally no extra operations.
*/
/********************************************************************
* ip_clearRightFrameBlock()
* Input:
* sPtr = pointer to uppermost word to be cleared
* sBpl = bytes/line (includes frame)
* sH = exact height of the block being cleared
* imageMask = used to preserved image bits in rightmost word
* frameMask = used to detect bits in frame portion of
* rightmost word. Yes, imageMask = ~frameMask
* but parameters are cheap, right?
*
* On return:
* Zeros have been put into the frame portion of the rightmost
* word of the image.
*
* Return code:
* 0 always
*
********************************************************************/
Int32 CDECL
ip_clearRightFrameBlock(
UInt8Ptr sPtr,
Int32 sBpl,
Int32 sH,
UInt32 imageMask,
UInt32 frameMask);
/**************************************************************************
* ip_combine3ToDIBLine()
* pDIBImage: pointer to current line in DIB.
* rS pointer to current line in source image
* (red component)
* gS pointer to current line in source image
* (green component)
* bS pointer to current line in source image
* (blue component)
* width number of pixels in source image
*
* This routine combines one pixel from each of the source images to
* produce one pixel in the destination DIB image. This is used
* when the RGB components of a color image have been spread into 3
* PIXRS and must be combined into a DIB.
**************************************************************************/
void CDECL
ip_combine3ToDIBLine(
UInt8 __far *pDIBImage,
UInt8Ptr rS,
UInt8Ptr gS,
UInt8Ptr bS,
UInt32 width);
/**************************************************************************
* ip_combineDIBTo3Line()
* pDIBImage: pointer to current line in DIB.
* rS pointer to current line in source image
* (red component)
* gS pointer to current line in source image
* (green component)
* bS pointer to current line in source image
* (blue component)
* width number of pixels in source image
*
* This routine combines one pixel from each of the source images to
* produce one pixel in the destination DIB image. This is used
* when the RGB components of a color image have been spread into 3
* PIXRS and must be combined into a DIB.
**************************************************************************/
void CDECL
ip_combineDIBTo3Line(
UInt8 __far *pDIBImage,
UInt8Ptr rS,
UInt8Ptr gS,
UInt8Ptr bS,
UInt32 width);
/**************************************************************************
* ip_copyLine()
* This routine copies the words in an image line
* from source to dest.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_copyLine(UInt32Ptr pS,
UInt32Ptr pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_getByteSwapProc()
* invertWords: Boolean: equals cTrue when the words should
* be inverted.
* direction: when equal to cDIBToPixr, data will be moved to the
* ipshared-style image. When set to cPixrToDIB, data
* will be moved to a Microsoft DIB. When set to
* cPixrToPixr, both the source and dest pointers
* will be near pointers. Otherwise, the DIB pointer
* is assumed to be a __far pointer.
* pSwapToFarProc: Pointer to pointer to procecure that takes a near
* source pointer and a far dest pointer.
* pSwapFromFarProc: Pointer to pointer to procedure that takes a
* far source pointer and a near dest pointer.
* pSwapNearProc: Pointer to pointer to procedure that takes near
* source and dest pointers.
*
* The routine sets the appropriate function pointer to point to the
* function used to swap bytes on this platform. We need three procedure
* pointers because the () notation doesn't work on C/C++ compilers.
**************************************************************************/
#ifndef SWAP_STUFF_DEFINED
#define SWAP_STUFF_DEFINED
typedef void CDECL (*GraySwapToFarProc)(UInt32 *pSource,
UInt32 __far *pDest,
Int32 wordsPerLine);
typedef void CDECL (*GraySwapFromFarProc)(UInt32 __far *pSource,
UInt32 *pDest,
Int32 wordsPerLine);
typedef void CDECL (*GraySwapNearProc)(UInt32 *pSource,
UInt32 *pDest,
Int32 wordsPerLine);
typedef void CDECL (*ColorSwapProc)(UInt8 __far *pDIBImage,
UInt8 *pRed,
UInt8 *pGreen,
UInt8 *pBlue,
UInt32 width);
#endif
void CDECL
ip_getByteSwapProc(UInt32 invertWords,
UInt32 direction,
GraySwapToFarProc *pSwapToFarProc,
GraySwapFromFarProc *pSwapFromFarProc,
GraySwapNearProc *pSwapNearProc);
/**************************************************************************
* ip_invertLine()
* This routine inverts the words in an image line while
* transferring them from source to dest.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_invertLine(UInt32Ptr pS,
UInt32Ptr pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesFromFar()
* This routine swaps the bytes in all words in a single
* line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesFromFar(
UInt32 __far *pS,
UInt32Ptr pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesToFar()
* This routine swaps the bytes in all words in a single
* line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesToFar(
UInt32Ptr pS,
UInt32 __far *pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesNear()
* This routine swaps the bytes in all words in a single
* line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesNear(
UInt32Ptr pS,
UInt32 *pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesInvertedFromFar()
* This routine swaps and inverts the bytes in all words
* in a single line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesInvertedFromFar(
UInt32 __far *pS,
UInt32Ptr pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesInvertedToFar()
* This routine swaps the bytes in all words in a single
* line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesInvertedToFar(
UInt32Ptr pS,
UInt32 __far *pD,
Int32 wordsPerLine);
/**************************************************************************
* ip_swapLineBytesInvertedNear()
* This routine swaps the bytes in all words in a single
* line of an image.
*
* pS: Pointer to left end of source image line.
* pD: Pointer to left end of dest image line.
* wordsPerLine: Number of 32-bit words in the image line.
*
**************************************************************************/
void CDECL
ip_swapLineBytesInvertedNear(
register UInt32 *pS,
register UInt32 *pD,
Int32 wordsPerLine);
#ifdef __cplusplus
}
#endif
#endif /* _SHRPIXR_PRV_INCLUDED_ */