2963 lines
91 KiB
C
2963 lines
91 KiB
C
/****************************************************************************
|
||
LIBMAIN.C
|
||
|
||
(c) Copyright 1994 Wang Laboratories, Inc.
|
||
|
||
OPEN/image Product 3.7.0
|
||
|
||
*****************************************************************************
|
||
|
||
$Log: S:\products\msprods\oiwh\display\libmain.c_v $
|
||
*
|
||
* Rev 1.73 24 Apr 1996 14:38:48 BEG06016
|
||
* Added horizontal differencing.
|
||
*
|
||
* Rev 1.75 24 Apr 1996 14:27:32 BEG06016
|
||
* Added horizontal differencing.
|
||
*
|
||
* Rev 1.74 23 Apr 1996 10:43:48 BEG06016
|
||
* Added undo scope.
|
||
*
|
||
* Rev 1.73 23 Apr 1996 08:50:08 BEG06016
|
||
* Changed nndo to undo.
|
||
*
|
||
* Rev 1.72 22 Apr 1996 07:18:02 BEG06016
|
||
* Cleaned up error checking.
|
||
*
|
||
* Rev 1.71 19 Apr 1996 13:41:40 RC
|
||
* Rearranged ifdef of in_prog_channel_safari so that apis return nstatus
|
||
*
|
||
* Rev 1.70 18 Apr 1996 10:05:02 RC
|
||
* Added cornerstone ifdef
|
||
*
|
||
* Rev 1.69 18 Apr 1996 09:45:56 BEG06016
|
||
* Moced all "IN_PROG" code from new files into libmain.c and convert.c
|
||
* to allow makefiles to work.
|
||
*
|
||
* Rev 1.68 17 Apr 1996 13:37:56 RC
|
||
* Replaced cornerstone ifdef with in_prog_channel_safari
|
||
*
|
||
* Rev 1.67 16 Apr 1996 15:51:52 BEG06016
|
||
* Added #ifdef IN_PROG_CHANNEL_SAFARI.
|
||
*
|
||
* Rev 1.66 11 Apr 1996 15:13:00 BEG06016
|
||
* Optimized named block access some.
|
||
*
|
||
* Rev 1.65 05 Mar 1996 15:50:24 RC
|
||
* Added print palettes
|
||
*
|
||
* Rev 1.64 05 Mar 1996 07:52:22 BEG06016
|
||
* Overrode Rudy's checkin of libmain.c.
|
||
* Added color and gamma correction.
|
||
* Fixed access violations when freeing pattern brush bitmaps.
|
||
* This is not complete but will allow unlocking of most files.
|
||
*
|
||
* Rev 1.62 01 Mar 1996 11:46:06 RC
|
||
* Changed createpatterndibbrush to createpatternbrush to get it to work
|
||
* on win32s. Also enabled hi memory allocation per Brian
|
||
*
|
||
****************************************************************************/
|
||
|
||
#define DEFINE_GLOBAL_VAR
|
||
#include "privdisp.h"
|
||
#ifdef TIMESTAMP
|
||
#include "monit.h"
|
||
#endif
|
||
|
||
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: DllMain
|
||
|
||
PURPOSE: Part of DLL initialization.
|
||
|
||
INPUT: hInstance - The instance handle of this DLL.
|
||
|
||
*****************************************************************************/
|
||
|
||
BOOL WINAPI DllMain(DWORD hInstance, DWORD dwReason, DWORD dwReserved){
|
||
|
||
int nStatus = 0;
|
||
|
||
|
||
Start();
|
||
switch (dwReason){
|
||
case DLL_PROCESS_ATTACH:
|
||
hInst = (HANDLE) hInstance;
|
||
CheckError2( IntSeqfileInit());
|
||
break;
|
||
|
||
case DLL_PROCESS_DETACH:
|
||
CheckError2( ProcessDetach(hInstance, dwReserved));
|
||
break;
|
||
|
||
case DLL_THREAD_ATTACH:
|
||
break;
|
||
|
||
case DLL_THREAD_DETACH:
|
||
break;
|
||
}
|
||
|
||
|
||
Exit:
|
||
End();
|
||
if (nStatus){
|
||
return (0);
|
||
}else{
|
||
return (1);
|
||
}
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: LockMutex
|
||
|
||
PURPOSE: Locks the mutex.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI LockMutex(void){
|
||
|
||
int nStatus = 0;
|
||
//DWORD dwThreadId = 0;
|
||
|
||
// nCriticalMutex++;
|
||
// dwThreadId = GetCurrentThreadId();
|
||
if ((WaitForSingleObject(hCriticalMutex, INFINITE)) == WAIT_FAILED){
|
||
nStatus = Error(DISPLAY_MUTEX_FAILURE);
|
||
goto Exit;
|
||
}
|
||
|
||
Exit:
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UnlockMutex
|
||
|
||
PURPOSE: Unlocks the mutex.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI UnlockMutex(void){
|
||
|
||
int nStatus = 0;
|
||
|
||
// nCriticalMutex--;
|
||
if (!ReleaseMutex(hCriticalMutex)){
|
||
nStatus = Error(DISPLAY_MUTEX_FAILURE);
|
||
goto Exit;
|
||
}
|
||
|
||
Exit:
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: IntSeqfileInit
|
||
|
||
PURPOSE: Perform any initialization steps.
|
||
This is an internal api only. (Do not expose it.)
|
||
SeqfileInit is the public wrapper for it.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI IntSeqfileInit(void){
|
||
|
||
int nStatus = 0;
|
||
|
||
int nLoop;
|
||
#ifdef junk
|
||
DWORD dwCreateError;
|
||
#endif
|
||
SECURITY_ATTRIBUTES SecurityAttributes;
|
||
HANDLE hAttachCriticalMutex;
|
||
BOOL bFreeAttachCriticalMutex = FALSE;
|
||
SYSTEM_INFO SystemInfo;
|
||
|
||
|
||
// We now initialize the tables in privdisp.h.
|
||
#ifdef old
|
||
int nMask;
|
||
int nBit;
|
||
int nLoop;
|
||
#endif
|
||
|
||
|
||
// If already inited, then return
|
||
if (hCriticalMutex){
|
||
goto Exit;
|
||
}
|
||
|
||
// Create/open the critical mutex and lock out others from modifying anything.
|
||
if (!(hAttachCriticalMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, "OIDIS400 Process Attach Critical Mutex"))){
|
||
SecurityAttributes.nLength = sizeof(SecurityAttributes);
|
||
SecurityAttributes.lpSecurityDescriptor = NULL;
|
||
SecurityAttributes.bInheritHandle = TRUE;
|
||
if (!(hAttachCriticalMutex = CreateMutex(&SecurityAttributes, FALSE, "OIDIS400 Process Attach Critical Mutex"))){
|
||
nStatus = Error(DISPLAY_MUTEX_FAILURE);
|
||
goto Exit;
|
||
}
|
||
}
|
||
bFreeAttachCriticalMutex = TRUE;
|
||
if ((WaitForSingleObject(hAttachCriticalMutex, INFINITE)) == WAIT_FAILED){
|
||
nStatus = Error(DISPLAY_MUTEX_FAILURE);
|
||
goto Exit;
|
||
}
|
||
|
||
// If inited while wait for the mutex, then return
|
||
if (hCriticalMutex){
|
||
goto Exit;
|
||
}
|
||
|
||
|
||
// Init everything.
|
||
|
||
// Create/open the critical mutex and lock out others from modifying anything.
|
||
// We can't lock this mutex in Attach.
|
||
if (!(hCriticalMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, "OIDIS400 Critical Mutex"))){
|
||
SecurityAttributes.nLength = sizeof(SecurityAttributes);
|
||
SecurityAttributes.lpSecurityDescriptor = NULL;
|
||
SecurityAttributes.bInheritHandle = TRUE;
|
||
if (!(hCriticalMutex = CreateMutex(&SecurityAttributes, FALSE, "OIDIS400 Critical Mutex"))){
|
||
nStatus = Error(DISPLAY_MUTEX_FAILURE);
|
||
goto Exit;
|
||
}
|
||
}
|
||
|
||
// Allocate sub-segment memory.
|
||
#ifdef junk
|
||
if (!(hSubSegMemory = CreateFileMapping((HANDLE) 0xffffffff, NULL,
|
||
PAGE_READWRITE | SEC_RESERVE,
|
||
0, MAX_SIZE_OF_MEMORY, "OIDIS400 Memory Map"))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
dwCreateError = GetLastError();
|
||
if (!(pSubSegMemory = MapViewOfFile(hSubSegMemory, FILE_MAP_ALL_ACCESS, 0, 0,
|
||
MEMORY_MAP_ADDRESS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (dwCreateError != ERROR_ALREADY_EXISTS){
|
||
#endif
|
||
if (!(pSubSegMemory = VirtualAlloc(NULL, MAX_SIZE_OF_MEMORY, MEM_RESERVE, PAGE_READWRITE))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
// GetSystemInfo(&SystemInfo);
|
||
SystemInfo.dwPageSize = 65536;
|
||
// Initialize memory here.
|
||
if (!(VirtualAlloc(pSubSegMemory, SystemInfo.dwPageSize, MEM_COMMIT, PAGE_READWRITE))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
memset(pSubSegMemory, 0, SystemInfo.dwPageSize);
|
||
pSubSegMemory->nCommittedLo = SystemInfo.dwPageSize;
|
||
pSubSegMemory->nNumberOfMemoryBlocksLo = 1024;
|
||
pSubSegMemory->pBlockLo = (PSUB_SEG_MEMORY_BLOCK) (((PSTR) pSubSegMemory) + sizeof(SUB_SEG_MEMORY));
|
||
pSubSegMemory->pBlockLo[0].bUsed = TRUE;
|
||
pSubSegMemory->pBlockLo[0].nSize = pSubSegMemory->nNumberOfMemoryBlocksLo * sizeof(SUB_SEG_MEMORY_BLOCK);
|
||
pSubSegMemory->pBlockLo[0].pAddress = (PSTR) pSubSegMemory->pBlockLo;
|
||
pSubSegMemory->pBlockLo[1].bUsed = FALSE;
|
||
pSubSegMemory->pBlockLo[1].nSize = SystemInfo.dwPageSize - sizeof(SUB_SEG_MEMORY)
|
||
- pSubSegMemory->pBlockLo[0].nSize;
|
||
pSubSegMemory->pBlockLo[1].pAddress = ((PSTR) pSubSegMemory->pBlockLo) + pSubSegMemory->pBlockLo[0].nSize;
|
||
|
||
//#ifdef junk
|
||
if (!(VirtualAlloc(((PSTR) pSubSegMemory) + LO_MEMORY_AMOUNT, SystemInfo.dwPageSize, MEM_COMMIT, PAGE_READWRITE))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
memset(((PSTR) pSubSegMemory) + LO_MEMORY_AMOUNT, 0, SystemInfo.dwPageSize);
|
||
pSubSegMemory->nNumberOfMemoryBlocksHi = (SystemInfo.dwPageSize - sizeof(SUB_SEG_MEMORY))
|
||
/ sizeof(SUB_SEG_MEMORY_BLOCK);
|
||
pSubSegMemory->pBlockHi = (PSUB_SEG_MEMORY_BLOCK)
|
||
(((PSTR) pSubSegMemory) + sizeof(SUB_SEG_MEMORY) + LO_MEMORY_AMOUNT);
|
||
pSubSegMemory->pBlockHi[0].bUsed = TRUE;
|
||
pSubSegMemory->pBlockHi[0].nSize = SystemInfo.dwPageSize;
|
||
pSubSegMemory->pBlockHi[0].pAddress = ((PSTR) pSubSegMemory) + LO_MEMORY_AMOUNT;
|
||
//#endif
|
||
|
||
pSubSegMemory->nMemBlockSize = SystemInfo.dwPageSize;
|
||
pSubSegMemory->nHalfMemBlockSize = SystemInfo.dwPageSize / 2;
|
||
pSubSegMemory->nInitDone = 0x000defed;
|
||
#ifdef junk
|
||
}else{
|
||
pSubSegMemory->nStart = 0;
|
||
if (pSubSegMemory->nInitDone != 0x000defed){
|
||
nStatus = Error(DISPLAY_DATACORRUPTED);
|
||
goto Exit;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
hHourGlass = LoadCursor(NULL, IDC_WAIT);
|
||
hLtGrayBrush = GetStockObject(LTGRAY_BRUSH);
|
||
|
||
BitMapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||
BitMapInfo.bmiHeader.biPlanes = 1;
|
||
BitMapInfo.bmiHeader.biCompression = BI_RGB;
|
||
BitMapInfo.bmiHeader.biSizeImage = 0;
|
||
BitMapInfo.bmiHeader.biXPelsPerMeter = 0;
|
||
BitMapInfo.bmiHeader.biYPelsPerMeter = 0;
|
||
BitMapInfo.bmiHeader.biClrUsed = 0;
|
||
BitMapInfo.bmiHeader.biClrImportant = 0;
|
||
// fill in color index
|
||
for(nLoop = 0; nLoop < 256; nLoop++){
|
||
BitMapInfo.bmiColors[nLoop] = nLoop;
|
||
}
|
||
|
||
MakePalette();
|
||
|
||
CheckError2( InitPatternBrushes());
|
||
|
||
|
||
|
||
// We now initialize the tables in privdisp.h.
|
||
#ifdef old
|
||
// Initialize RGB to grayscale conversion tables.
|
||
for (nLoop = 0; nLoop < 256; nLoop++){
|
||
cRedToGray8Table[nLoop] = (uchar)( nLoop * 299 / 1000);
|
||
cGreenToGray8Table[nLoop] = (uchar)( nLoop * 587 / 1000);
|
||
cBlueToGray8Table[nLoop] = (uchar)( nLoop * 114 / 1000);
|
||
}
|
||
|
||
// Initialize CountTheZeros and CountTheOnes conversion tables.
|
||
for (nLoop = 0; nLoop < 256; nLoop++){
|
||
nCountTheZerosTable[nLoop] = 0;
|
||
if (!(nLoop & 0x80)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x40)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x20)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x10)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x08)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x04)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x02)) nCountTheZerosTable[nLoop]++;
|
||
if (!(nLoop & 0x01)) nCountTheZerosTable[nLoop]++;
|
||
nCountTheOnesTable[nLoop] = 8 - nCountTheZerosTable[nLoop];
|
||
}
|
||
|
||
// Initialize the table for adding both gray4 pixels in a byte together.
|
||
for (nLoop = 0; nLoop < 256; nLoop++){
|
||
cGray4AddTable[nLoop] = (nLoop >> 4) + (nLoop & 0x0f);
|
||
}
|
||
|
||
// Produce Gray4 decimation translation tables.
|
||
for (nLoop = 0; nLoop < 256; nLoop++){
|
||
c4BPPTo0Table[nLoop] = ((nLoop << 4) | nLoop) & 0xf0;
|
||
c4BPPTo1Table[nLoop] = c4BPPTo0Table[nLoop] >> 4;
|
||
}
|
||
|
||
// Produce BW decimation translation tables.
|
||
for (nLoop = 0; nLoop < 256; nLoop++){
|
||
cBWDecimateDn20[nLoop] = (nLoop & 0x80) | ((nLoop & 0x20) << 1)
|
||
| ((nLoop & 0x08) << 2) | ((nLoop & 0x02) << 3);
|
||
cBWDecimateDn21[nLoop] = cBWDecimateDn20[nLoop] >> 4;
|
||
cBWDecimateDn40[nLoop] = (nLoop & 0x80) | ((nLoop & 0x08) << 3);
|
||
cBWDecimateDn41[nLoop] = cBWDecimateDn40[nLoop] >> 2;
|
||
cBWDecimateDn42[nLoop] = cBWDecimateDn40[nLoop] >> 4;
|
||
cBWDecimateDn43[nLoop] = cBWDecimateDn40[nLoop] >> 6;
|
||
cBWDecimateUp20[nLoop] = (nLoop & 0x80) | ((nLoop & 0x80) >> 1)
|
||
| ((nLoop & 0x40) >> 1) | ((nLoop & 0x40) >> 2)
|
||
| ((nLoop & 0x20) >> 2) | ((nLoop & 0x20) >> 3)
|
||
| ((nLoop & 0x10) >> 3) | ((nLoop & 0x10) >> 4);
|
||
cBWDecimateUp21[nLoop] = ((nLoop & 0x08) << 4) | ((nLoop & 0x08) << 3)
|
||
| ((nLoop & 0x04) << 3) | ((nLoop & 0x04) << 2)
|
||
| ((nLoop & 0x02) << 2) | ((nLoop & 0x02) << 1)
|
||
| ((nLoop & 0x01) << 1) | ((nLoop & 0x01));
|
||
cBWDecimateUp40[nLoop] = (nLoop & 0x80) | ((nLoop & 0x80) >> 1)
|
||
| ((nLoop & 0x80) >> 2) | ((nLoop & 0x80) >> 3)
|
||
| ((nLoop & 0x40) >> 3) | ((nLoop & 0x40) >> 4)
|
||
| ((nLoop & 0x40) >> 5) | ((nLoop & 0x40) >> 6);
|
||
cBWDecimateUp41[nLoop] = ((nLoop & 0x20) << 2) | ((nLoop & 0x20) << 1)
|
||
| ((nLoop & 0x20)) | ((nLoop & 0x20) >> 1)
|
||
| ((nLoop & 0x10) >> 1) | ((nLoop & 0x10) >> 2)
|
||
| ((nLoop & 0x10) >> 3) | ((nLoop & 0x10) >> 4);
|
||
cBWDecimateUp42[nLoop] = ((nLoop & 0x08) << 4) | ((nLoop & 0x08) << 3)
|
||
| ((nLoop & 0x08) << 2) | ((nLoop & 0x08) << 1)
|
||
| ((nLoop & 0x04) << 1) | ((nLoop & 0x04))
|
||
| ((nLoop & 0x04) >> 1) | ((nLoop & 0x04) >> 2);
|
||
cBWDecimateUp43[nLoop] = ((nLoop & 0x02) << 6) | ((nLoop & 0x02) << 5)
|
||
| ((nLoop & 0x02) << 4) | ((nLoop & 0x02) << 3)
|
||
| ((nLoop & 0x01) << 3) | ((nLoop & 0x01) << 2)
|
||
| ((nLoop & 0x01) << 1) | ((nLoop & 0x01));
|
||
}
|
||
#endif
|
||
|
||
|
||
// Links.
|
||
GetPrivateProfileString("boot", "display.drv", "", Buff1, 128,
|
||
"system.ini");
|
||
if (!strcmp(Buff1, "r200.drv")){
|
||
DTIPresent = TRUE;
|
||
}else{
|
||
DTIPresent = FALSE;
|
||
}
|
||
|
||
/* if (!_stricmp(Buff1, "ia.drv")){
|
||
hIADLL = (HANDLE) 1;
|
||
}
|
||
*/
|
||
|
||
nWangAnnotatedImageFormat = RegisterClipboardFormat(szWangAnnotatedImageFormat);
|
||
nWangAnnotationFormat = RegisterClipboardFormat(szWangAnnotationFormat);
|
||
|
||
LoadLogger();
|
||
|
||
|
||
Exit:
|
||
if (bFreeAttachCriticalMutex){
|
||
ReleaseMutex(hAttachCriticalMutex);
|
||
CloseHandle(hAttachCriticalMutex);
|
||
}
|
||
return nStatus;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: ProcessDetach
|
||
|
||
PURPOSE: Perform any deinitialization steps.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI ProcessDetach(DWORD hInstance, DWORD dwReserved){
|
||
|
||
int nStatus = 0;
|
||
int nLoop;
|
||
|
||
|
||
if (hCriticalMutex){
|
||
LockMutex();
|
||
DeleteObject(hGray8Pal);
|
||
hGray8Pal = 0;
|
||
DeleteObject(hGray7Pal);
|
||
hGray7Pal = 0;
|
||
DeleteObject(hCommonPal);
|
||
hCommonPal = 0;
|
||
DeleteObject(hGray8PalPrint);
|
||
hGray8PalPrint = 0;
|
||
DeleteObject(hGray7PalPrint);
|
||
hGray7PalPrint = 0;
|
||
DeleteObject(hCommonPalPrint);
|
||
hCommonPalPrint = 0;
|
||
|
||
for (nLoop = 0; nLoop < 17; nLoop++){
|
||
DeleteObject(hPatternBrush[nLoop]);
|
||
}
|
||
|
||
#ifdef junk
|
||
UnmapViewOfFile(pSubSegMemory);
|
||
CloseHandle(hSubSegMemory);
|
||
#endif
|
||
UnlockMutex();
|
||
CloseHandle(hCriticalMutex);
|
||
}
|
||
|
||
|
||
return nStatus;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: SeqfileInit
|
||
|
||
PURPOSE: Perform any initialization steps.
|
||
|
||
INPUT: hWnd - Window handle.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI SeqfileInit(HWND hWnd){
|
||
|
||
Start();
|
||
End();
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: SeqfileDeInit
|
||
|
||
PURPOSE: Perform any deinitialization steps.
|
||
|
||
INPUT: hWnd - Window handle.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI SeqfileDeInit(HWND hWnd){
|
||
|
||
int nStatus = 0;
|
||
|
||
|
||
Start();
|
||
CheckError2( LockMutex());
|
||
|
||
// Delete all image in the cache.
|
||
if (pSubSegMemory->ppCachedAnoImage){
|
||
while(pSubSegMemory->ppCachedAnoImage[0]){
|
||
pSubSegMemory->ppCachedAnoImage[0]->nLockCount = 0;
|
||
CacheClearAno(&pSubSegMemory->ppCachedAnoImage[0]);
|
||
}
|
||
}
|
||
if (pSubSegMemory->ppCachedImage){
|
||
while(pSubSegMemory->ppCachedImage[0]){
|
||
pSubSegMemory->ppCachedImage[0]->nLockCount = 0;
|
||
CacheClear(&pSubSegMemory->ppCachedImage[0]);
|
||
}
|
||
}
|
||
pSubSegMemory->nMaxAnoCachedEntries = 0;
|
||
FreeMemory((PPSTR) &pSubSegMemory->ppCachedAnoImage);
|
||
pSubSegMemory->nMaxCachedEntries = 0;
|
||
FreeMemory((PPSTR) &pSubSegMemory->ppCachedImage);
|
||
|
||
// Because property lists have to remain behind, so does subsegment memory.
|
||
|
||
|
||
Exit:
|
||
UnlockMutex();
|
||
End();
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: SeqfileDeReg
|
||
|
||
PURPOSE: Perform any cleanup during IMGDeRegWndw.
|
||
|
||
INPUT: hWnd - Window handle.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI SeqfileDeReg(HWND hWnd){
|
||
|
||
int nStatus = 0;
|
||
PWINDOW pWindow;
|
||
|
||
int nWindowIndex;
|
||
PMARK pMark;
|
||
int nNamedBlockIndex;
|
||
BOOL bStartNewTimer=FALSE;
|
||
int nLoop;
|
||
|
||
|
||
Start();
|
||
|
||
// Prevent Multiprocessing in this code.
|
||
CheckError2( LockMutex());
|
||
|
||
// Make sure that this window is not associated to any other windows.
|
||
IMGUnassociateWindow(hWnd, OI_UNASSOC_AS_SOURCE);
|
||
IMGUnassociateWindow(hWnd, OI_UNASSOC_AS_ASSOC);
|
||
|
||
if (hTimerWnd == hWnd && bTimerRunning){
|
||
CacheStopTimer(hWnd);
|
||
hTimerWnd = 0;
|
||
bStartNewTimer = TRUE;
|
||
}
|
||
// make sure all the data for the image has been read before closing
|
||
// the window displaying it
|
||
for (nLoop = 0; nLoop < pSubSegMemory->nMaxAnoCachedEntries; nLoop++){
|
||
if(pSubSegMemory->ppCachedAnoImage[nLoop]){
|
||
if (pSubSegMemory->ppCachedAnoImage[nLoop]->pBaseImage->hWnd == hWnd){
|
||
CheckError2( ValidateCache (hWnd, pSubSegMemory->ppCachedAnoImage[nLoop]));
|
||
}
|
||
}
|
||
}
|
||
for (nLoop = 0; nLoop < pSubSegMemory->nMaxCachedEntries; nLoop++){
|
||
if(pSubSegMemory->ppCachedImage[nLoop]){
|
||
if (pSubSegMemory->ppCachedImage[nLoop]->hWnd == hWnd && !pSubSegMemory->ppCachedImage[nLoop]->bCacheValid){
|
||
CheckError2( CacheRead (hWnd, pSubSegMemory->ppCachedImage[nLoop],
|
||
pSubSegMemory->ppCachedImage[nLoop]->nHeight));
|
||
}
|
||
}
|
||
}
|
||
|
||
for (nLoop = 0; nLoop < pSubSegMemory->nMaxCachedEntries; nLoop++){
|
||
if(pSubSegMemory->ppCachedImage[nLoop]){
|
||
if (pSubSegMemory->ppCachedImage[nLoop]->hWnd
|
||
&& pSubSegMemory->ppCachedImage[nLoop]->hWnd != hWnd
|
||
&& !hTimerWnd){
|
||
hTimerWnd = pSubSegMemory->ppCachedImage[nLoop]->hWnd;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (hTimerWnd && bStartNewTimer){
|
||
CacheStartTimer(hTimerWnd);
|
||
}
|
||
IMGCloseDisplay(hWnd);
|
||
|
||
for (nWindowIndex = 0; nWindowIndex < MAX_WINDOWS; nWindowIndex++){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].hWnd == hWnd){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].pWindow){
|
||
pWindow = pSubSegMemory->WindowTable[nWindowIndex].pWindow;
|
||
// Free the User mark.
|
||
pMark = pWindow->pUserMark;
|
||
if (pMark->ppNamedBlock){
|
||
for (nNamedBlockIndex = 0; nNamedBlockIndex < pMark->nNamedBlocks; nNamedBlockIndex++){
|
||
CheckError2( FreeMemory(&pMark->ppNamedBlock[nNamedBlockIndex]->pBlock));
|
||
CheckError2( FreeMemory((PPSTR) &pMark->ppNamedBlock[nNamedBlockIndex]));
|
||
}
|
||
CheckError2( FreeMemory((PPSTR) &pMark->ppNamedBlock));
|
||
}
|
||
CheckError2( FreeMemory(&pMark->pOiAnoDat));
|
||
CheckError2( FreeMemory(&pMark->pOiGroup));
|
||
CheckError2( FreeMemory(&pMark->pOiSelect));
|
||
CheckError2( FreeMemory(&pMark->pOiIndex));
|
||
CheckError2( FreeMemory((PPSTR) &pMark));
|
||
CheckError2( FreeImgBuf(&pWindow->pDisplay->pDisplay));
|
||
CheckError2( FreeMemory((PPSTR) &pWindow->pDisplay));
|
||
CheckError2( FreeMemory((PPSTR) &pWindow));
|
||
pSubSegMemory->WindowTable[nWindowIndex].pWindow = 0;
|
||
}
|
||
|
||
// Condense the list if possible.
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].pProperties){
|
||
for (; nWindowIndex < MAX_WINDOWS - 1; nWindowIndex++){
|
||
memcpy(&pSubSegMemory->WindowTable[nWindowIndex], &pSubSegMemory->WindowTable[nWindowIndex + 1]
|
||
, sizeof(WINDOW_TABLE_ENTRY));
|
||
memset(&pSubSegMemory->WindowTable[nWindowIndex + 1], 0, sizeof(WINDOW_TABLE_ENTRY));
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
Exit:
|
||
UnlockMutex();
|
||
End();
|
||
return nStatus;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: InitPatternBrushes
|
||
|
||
PURPOSE: Initializes the pattern brushes nsed for putting colors
|
||
onto a B + W hDC.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI InitPatternBrushes(void){
|
||
|
||
int nStatus = 0;
|
||
|
||
HANDLE hBitmapInfo = 0;
|
||
PBYTE pDibImageData;
|
||
BITMAPINFO *pBitmapInfo = 0;
|
||
HBITMAP hBitmap ;
|
||
|
||
// Make the pattern brushes for rendering.
|
||
if (!(hBitmapInfo = GlobalAlloc(GMEM_ZEROINIT | GMEM_DDESHARE,
|
||
sizeof(BITMAPINFO) + 8 + 32))){ // 8 = 2 palettes, 32 = 8 lines.
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (!(pBitmapInfo = GlobalLock(hBitmapInfo))){
|
||
nStatus = Error(DISPLAY_CANTLOCK);
|
||
goto Exit;
|
||
}
|
||
|
||
pBitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||
pBitmapInfo->bmiHeader.biWidth = 8;
|
||
pBitmapInfo->bmiHeader.biHeight = 8;
|
||
pBitmapInfo->bmiHeader.biPlanes = 1;
|
||
pBitmapInfo->bmiHeader.biBitCount = 1;
|
||
pBitmapInfo->bmiHeader.biCompression = BI_RGB;
|
||
pBitmapInfo->bmiHeader.biSizeImage = 32;
|
||
pBitmapInfo->bmiHeader.biXPelsPerMeter = 0;
|
||
pBitmapInfo->bmiHeader.biYPelsPerMeter = 0;
|
||
pBitmapInfo->bmiHeader.biClrUsed = 2;
|
||
pBitmapInfo->bmiHeader.biClrImportant = 2;
|
||
|
||
pBitmapInfo->bmiColors[0].rgbBlue = 0;
|
||
pBitmapInfo->bmiColors[0].rgbGreen = 0;
|
||
pBitmapInfo->bmiColors[0].rgbRed = 0;
|
||
pBitmapInfo->bmiColors[0].rgbReserved = 0;
|
||
pBitmapInfo->bmiColors[1].rgbBlue = 0xff;
|
||
pBitmapInfo->bmiColors[1].rgbGreen = 0xff;
|
||
pBitmapInfo->bmiColors[1].rgbRed = 0xff;
|
||
pBitmapInfo->bmiColors[1].rgbReserved = 0;
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x00; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[0] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x80; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x08; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x80; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x08; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[1] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x88; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x88; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[2] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x88; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x20; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x44; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x02; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x88; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x20; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x44; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x02; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[3] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x88; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x11; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x44; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x88; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x11; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x44; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[4] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xa8; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x45; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xa8; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x45; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[5] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xa2; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x49; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x94; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x2a; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xa2; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x49; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x94; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x2a; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[6] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xaa; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x15; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x51; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x15; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x51; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[7] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xaa; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[8] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xea; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xae; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xea; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xae; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[9] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x5d; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xb6; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x6b; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xd5; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x5d; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xb6; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x6b; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xd5; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[10] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x55; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[11] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[12] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdf; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xfd; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdf; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xfd; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[13] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[14] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x7f; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xf7; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x7f; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xf7; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[15] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xff; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
hBitmap = CreateBitmap (pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
|
||
pBitmapInfo->bmiHeader.biPlanes, pBitmapInfo->bmiHeader.biBitCount,
|
||
(LPBYTE)pBitmapInfo + sizeof (BITMAPINFOHEADER) + 8) ;
|
||
if (!(hPatternBrush[16] = CreatePatternBrush(hBitmap))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
if (hBitmap) {
|
||
DeleteObject(hBitmap);
|
||
}
|
||
|
||
#ifdef NewBrushes
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x08; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x40; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x02; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x20; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x00; // Line 7.
|
||
|
||
if (!(hPatternBrush[1] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x08; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x80; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x02; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x20; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x01; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x10; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x04; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x40; // Line 7.
|
||
|
||
if (!(hPatternBrush[2] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x08; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x21; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x80; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x24; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x02; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x48; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x10; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x82; // Line 7.
|
||
|
||
if (!(hPatternBrush[3] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x44; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x11; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x88; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x44; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x11; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x88; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x22; // Line 7.
|
||
|
||
if (!(hPatternBrush[4] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xa8; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x45; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xa8; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x45; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x12; // Line 7.
|
||
|
||
if (!(hPatternBrush[5] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xa2; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x49; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x94; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x2a; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xa2; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x49; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x94; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x2a; // Line 7.
|
||
|
||
if (!(hPatternBrush[6] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xaa; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x15; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x51; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x15; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x51; // Line 7.
|
||
|
||
if (!(hPatternBrush[7] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xaa; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xaa; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 7.
|
||
|
||
if (!(hPatternBrush[8] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xea; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xae; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xea; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xae; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 7.
|
||
|
||
if (!(hPatternBrush[9] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x5d; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xb6; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x6b; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xd5; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x5d; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xb6; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x6b; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xd5; // Line 7.
|
||
|
||
if (!(hPatternBrush[10] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x55; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x55; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 7.
|
||
|
||
if (!(hPatternBrush[11] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xee; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 7.
|
||
|
||
if (!(hPatternBrush[12] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdf; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xfd; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdf; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xbb; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xfd; // Line 7.
|
||
|
||
if (!(hPatternBrush[13] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x77; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x77; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xdd; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
if (!(hPatternBrush[14] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0x7f; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xf7; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0x7f; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xf7; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
if (!(hPatternBrush[15] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
|
||
pDibImageData = (PBYTE) &pBitmapInfo->bmiColors[2];
|
||
*pDibImageData = 0xff; // Line 0.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 1.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 2.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 3.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 4.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 5.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 6.
|
||
pDibImageData += 4;
|
||
*pDibImageData = 0xff; // Line 7.
|
||
|
||
if (!(hPatternBrush[16] = CreateDIBPatternBrush(hBitmapInfo, DIB_RGB_COLORS))){
|
||
nStatus = Error(DISPLAY_CANTALLOC);
|
||
goto Exit;
|
||
}
|
||
#endif
|
||
|
||
|
||
Exit:
|
||
if (hBitmapInfo){
|
||
if (pBitmapInfo){
|
||
GlobalUnlock(pBitmapInfo);
|
||
}
|
||
GlobalFree(hBitmapInfo);
|
||
}
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
Function: IMGSetProp
|
||
|
||
Description: Sets a property for a window.
|
||
|
||
Return: TRUE = Success.
|
||
|
||
****************************************************************************/
|
||
|
||
BOOL WINAPI IMGSetProp(HWND hWnd, PCSTR pName, HANDLE hData){
|
||
|
||
int nStatus = 0;
|
||
|
||
char szName[64];
|
||
int nLength;
|
||
PPROPERTIES pProps;
|
||
int nLoop;
|
||
int nWindowIndex;
|
||
BOOL bDone;
|
||
DWORD dwProcessId;
|
||
|
||
|
||
bDone = FALSE;
|
||
if (!(HIWORD(pName))){
|
||
GetAtomName((ATOM)LOWORD(pName), szName, 64);
|
||
}else{
|
||
strcpy(szName, pName);
|
||
}
|
||
nLength = strlen(szName);
|
||
if (!nLength || nLength > 62){
|
||
nStatus = Error(-1);
|
||
goto Exit;
|
||
}
|
||
dwProcessId = GetCurrentProcessId();
|
||
|
||
pProps = NULL;
|
||
for (nWindowIndex = 0; nWindowIndex < MAX_WINDOWS; nWindowIndex++){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].hWnd == hWnd
|
||
&& pSubSegMemory->WindowTable[nWindowIndex].dwProcessId == dwProcessId){
|
||
if (pProps = pSubSegMemory->WindowTable[nWindowIndex].pProperties){
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
pSubSegMemory->WindowTable[nWindowIndex].hWnd = hWnd;
|
||
pSubSegMemory->WindowTable[nWindowIndex].dwProcessId = dwProcessId;
|
||
break;
|
||
}
|
||
}
|
||
if (!pProps){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].hWnd != hWnd
|
||
|| pSubSegMemory->WindowTable[nWindowIndex].dwProcessId != dwProcessId){
|
||
nStatus = Error(-1);
|
||
goto Exit;
|
||
}
|
||
pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties = 10;
|
||
CheckError2( AllocateMemory(pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties
|
||
* sizeof(PROPERTIES), (PPSTR) &pProps, ZERO_INIT));
|
||
pSubSegMemory->WindowTable[nWindowIndex].pProperties = pProps;
|
||
}
|
||
|
||
for (nLoop = 0; 1; nLoop++){
|
||
if (nLoop == pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties - 1){
|
||
CheckError2( ReAllocateMemory((pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties
|
||
+ 10) * sizeof(PROPERTIES), (PPSTR) &pProps, ZERO_INIT));
|
||
pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties += 10;
|
||
pSubSegMemory->WindowTable[nWindowIndex].pProperties = pProps;
|
||
}
|
||
if (pProps[nLoop].szName[0]){
|
||
if (_stricmp(pProps[nLoop].szName, szName)){
|
||
continue;
|
||
}
|
||
pProps[nLoop].hProp = hData;
|
||
}
|
||
// NULL name means new property.
|
||
strcpy(pProps[nLoop].szName, szName);
|
||
pProps[nLoop].hProp = hData;
|
||
break;
|
||
}
|
||
|
||
|
||
Exit:
|
||
if (nStatus){
|
||
return FALSE;
|
||
}else{
|
||
return TRUE;
|
||
}
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
Function: IMGGetProp
|
||
|
||
Description: Gets a property for a window.
|
||
|
||
Return: hData that was stored by INGSetProp.
|
||
|
||
****************************************************************************/
|
||
|
||
HANDLE WINAPI IMGGetProp(HWND hWnd, PCSTR pName){
|
||
|
||
int nStatus = 0;
|
||
|
||
char szName[64];
|
||
int nLength;
|
||
PPROPERTIES pProps = 0;
|
||
int nLoop;
|
||
HANDLE hData = 0;
|
||
int nWindowIndex;
|
||
BOOL bFound = FALSE;
|
||
DWORD dwProcessId;
|
||
|
||
|
||
if (!IsWindow(hWnd)){
|
||
nStatus = Error(DISPLAY_WHANDLEINVALID);
|
||
goto Exit;
|
||
}
|
||
if (!(HIWORD(pName))){
|
||
GetAtomName((ATOM)LOWORD(pName), szName, 64);
|
||
}else{
|
||
strcpy(szName, pName);
|
||
}
|
||
nLength = strlen(szName);
|
||
if (!nLength || nLength > 62){
|
||
nStatus = Error(-1);
|
||
goto Exit;
|
||
}
|
||
dwProcessId = GetCurrentProcessId();
|
||
|
||
pProps = NULL;
|
||
for (nWindowIndex = 0; nWindowIndex < MAX_WINDOWS; nWindowIndex++){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].hWnd == hWnd
|
||
&& pSubSegMemory->WindowTable[nWindowIndex].dwProcessId == dwProcessId){
|
||
pProps = pSubSegMemory->WindowTable[nWindowIndex].pProperties;
|
||
break;
|
||
}
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
break;
|
||
}
|
||
}
|
||
if (!pProps){
|
||
nStatus = Error2(-1);
|
||
goto Exit;
|
||
}
|
||
|
||
for (nLoop = 0; nLoop < pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties; nLoop++){
|
||
if (pProps[nLoop].szName[0]){
|
||
if (_stricmp(pProps[nLoop].szName, szName)){
|
||
continue;
|
||
}
|
||
hData = pProps[nLoop].hProp;
|
||
bFound = TRUE;
|
||
break;
|
||
}
|
||
// NULL name means it's not here.
|
||
break;
|
||
}
|
||
if (!bFound){
|
||
nStatus = Error2(-1);
|
||
goto Exit;
|
||
}
|
||
|
||
|
||
Exit:
|
||
return hData;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
Function: IMGRemoveProp
|
||
|
||
Description: Removes the property from a window.
|
||
|
||
Return: hData that was stored by IMGSetProp.
|
||
|
||
****************************************************************************/
|
||
|
||
HANDLE WINAPI IMGRemoveProp(HWND hWnd, PCSTR pName){
|
||
|
||
int nStatus = 0;
|
||
|
||
char szName[64];
|
||
int nLength;
|
||
PPROPERTIES pProps;
|
||
int nLoop;
|
||
HANDLE hData = 0;
|
||
int nWindowIndex;
|
||
|
||
|
||
if (!(HIWORD(pName))){
|
||
GetAtomName((ATOM)LOWORD(pName), szName, 64);
|
||
}else{
|
||
strcpy(szName, pName);
|
||
}
|
||
nLength = strlen(szName);
|
||
if (!nLength || nLength > 62){
|
||
nStatus = Error(-1);
|
||
goto Exit;
|
||
}
|
||
|
||
|
||
pProps = NULL;
|
||
for (nWindowIndex = 0; nWindowIndex < MAX_WINDOWS, pSubSegMemory->WindowTable[nWindowIndex].hWnd; nWindowIndex++){
|
||
if (pSubSegMemory->WindowTable[nWindowIndex].hWnd == hWnd){
|
||
pProps = pSubSegMemory->WindowTable[nWindowIndex].pProperties;
|
||
break;
|
||
}
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
break;
|
||
}
|
||
}
|
||
if (!pProps){
|
||
nStatus = Error2(-1);
|
||
goto Exit;
|
||
}
|
||
|
||
for (nLoop = 0; nLoop < pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties; nLoop++){
|
||
if (pProps[nLoop].szName[0]){
|
||
if (_stricmp(pProps[nLoop].szName, szName)){
|
||
continue;
|
||
}
|
||
hData = pProps[nLoop].hProp;
|
||
// Condense the list.
|
||
for (; nLoop < MAX_PROPERTIES - 1; nLoop++){
|
||
strcpy(pProps[nLoop].szName, pProps[nLoop + 1].szName);
|
||
pProps[nLoop].hProp = pProps[nLoop + 1].hProp;
|
||
pProps[nLoop + 1].szName[0] = 0;
|
||
pProps[nLoop + 1].hProp = 0;
|
||
if (!pProps[nLoop].szName[0]){
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
// NULL name means property not found.
|
||
break;
|
||
}
|
||
|
||
// If the list is empty, then delete it and condense the window list.
|
||
if (!nLoop){
|
||
FreeMemory((PPSTR) &pProps);
|
||
pSubSegMemory->WindowTable[nWindowIndex].nMaxProperties = 0;
|
||
pSubSegMemory->WindowTable[nWindowIndex].pProperties = 0;
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].pWindow){
|
||
for (; nWindowIndex < MAX_WINDOWS - 1; nWindowIndex++){
|
||
memcpy(&pSubSegMemory->WindowTable[nWindowIndex], &pSubSegMemory->WindowTable[nWindowIndex + 1]
|
||
, sizeof(WINDOW_TABLE_ENTRY));
|
||
memset(&pSubSegMemory->WindowTable[nWindowIndex + 1], 0, sizeof(WINDOW_TABLE_ENTRY));
|
||
if (!pSubSegMemory->WindowTable[nWindowIndex].hWnd){
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
Exit:
|
||
return hData;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
Function: BusyOn
|
||
|
||
Description: Let the nser know the application is busy by changing
|
||
the mouse cursor to an hourglass.
|
||
|
||
Inputs: None
|
||
|
||
****************************************************************************/
|
||
|
||
void WINAPI BusyOn(void){
|
||
|
||
if (!nCursorCount++){
|
||
hOldCursor = SetCursor(hHourGlass);
|
||
ShowCursor(TRUE);
|
||
}
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
Function: BusyOff
|
||
|
||
Description: Terminate the "busy" period by returning the cursor
|
||
to its previous state. ie. remove the hourglass.
|
||
|
||
Inputs: None.
|
||
|
||
****************************************************************************/
|
||
void WINAPI BusyOff(void){
|
||
|
||
if (!nCursorCount){
|
||
// Fatal error. Code is out of sync.
|
||
// You can get here if window handle is passed in as NULL.
|
||
Error(DISPLAY_DATACORRUPTED);
|
||
}else{
|
||
if (!--nCursorCount){
|
||
SetCursor(hOldCursor);
|
||
ShowCursor(FALSE);
|
||
}
|
||
}
|
||
}
|
||
//
|
||
/***************************************************************************
|
||
|
||
FUNCTION: CreateAnyImgBuf
|
||
|
||
PURPOSE: Creates an image buffer of specified kind.
|
||
|
||
INPUT: pImg - a pointer to the IMG structure for the image buffer.
|
||
nWidth - The width of the buffer.
|
||
nHeight - The height of the buffer.
|
||
nDType - The image type of the buffer to create.
|
||
|
||
*****************************************************************************/
|
||
int WINAPI CreateAnyImgBuf(PPIMG ppImg, int nWidth, int nHeight, int nDType){
|
||
|
||
int nStatus = 0;
|
||
|
||
int nBlockSize;
|
||
PIMG pImg = 0;
|
||
int nBytesPerLine;
|
||
|
||
|
||
switch (nDType){
|
||
case ITYPE_BI_LEVEL:
|
||
nBytesPerLine = (nWidth + 7) >> 3;
|
||
break;
|
||
|
||
case ITYPE_GRAY4:
|
||
case ITYPE_PAL4:
|
||
nBytesPerLine = (nWidth + 1) >> 1;
|
||
break;
|
||
|
||
case ITYPE_GRAY7:
|
||
case ITYPE_GRAY8:
|
||
case ITYPE_COMPAL8:
|
||
case ITYPE_CUSPAL8:
|
||
nBytesPerLine = nWidth;
|
||
break;
|
||
|
||
case ITYPE_RGB16:
|
||
case ITYPE_RGB24:
|
||
case ITYPE_BGR24:
|
||
nBytesPerLine = nWidth * 3;
|
||
break;
|
||
|
||
default:
|
||
nStatus = Error(DISPLAY_DATACORRUPTED);
|
||
goto Exit;
|
||
}
|
||
|
||
nBlockSize = sizeof(IMG) + (nHeight * nBytesPerLine) + 1;
|
||
|
||
CheckError2( AllocateMemory(nBlockSize, (PPSTR) &pImg, NO_INIT));
|
||
pImg->nWidth = nWidth;
|
||
pImg->nHeight = nHeight;
|
||
pImg->nType = nDType;
|
||
pImg->nBytesPerLine = nBytesPerLine;
|
||
*ppImg = pImg;
|
||
pImg = 0;
|
||
|
||
|
||
Exit:
|
||
FreeImgBuf(&pImg);
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/***************************************************************************
|
||
|
||
FUNCTION: FreeImgBuf
|
||
|
||
PURPOSE: Frees (deletes) an Image buffer.
|
||
|
||
INPUT: pImg - a pointer to the IMG structure for the image buffer.
|
||
|
||
*****************************************************************************/
|
||
int WINAPI FreeImgBuf(PPIMG ppImg){
|
||
|
||
int nStatus = 0;
|
||
|
||
if (!*ppImg){
|
||
goto Exit;
|
||
}
|
||
CheckError2( FreeMemory((PPSTR) ppImg));
|
||
|
||
Exit:
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/***************************************************************************
|
||
|
||
FUNCTION: SwapImage
|
||
|
||
PURPOSE: Swaps 2 image buffers.
|
||
|
||
INPUT: pImage1 - A pointer to image #1.
|
||
pImage2 - A pointer to image #2.
|
||
|
||
*****************************************************************************/
|
||
void WINAPI SwapImage(PPIMG ppImage1, PPIMG ppImage2){
|
||
|
||
PIMG pImg;
|
||
|
||
pImg = *ppImage1;
|
||
*ppImage1 = *ppImage2;
|
||
*ppImage2 = pImg;
|
||
|
||
return;
|
||
}
|
||
//
|
||
/***************************************************************************
|
||
|
||
FUNCTION: MoveImage
|
||
|
||
PURPOSE: Moves 1 image buffer to another.
|
||
|
||
INPUT: pImage1 - A pointer to the source image buffer.
|
||
pImage2 - A pointer to the destination image buffer.
|
||
|
||
*****************************************************************************/
|
||
void WINAPI MoveImage(PPIMG ppImage1, PPIMG ppImage2){
|
||
|
||
*ppImage2 = *ppImage1;
|
||
*ppImage1 = 0;
|
||
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: GetBuffer
|
||
|
||
PURPOSE: Gets a buffer for a specific part of the image.
|
||
This buffer can then be written to by the caller directly
|
||
without requiring double buffering.
|
||
|
||
INPUT: nLine - The starting line number of the buffer.
|
||
ppAddress - The address where the address of the buffer
|
||
is to be put.
|
||
pnLines - The address of a variable containing the number
|
||
of lines that can be put in the buffer.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI GetBuffer(HWND hWnd, int nLine, uchar **ppAddress, UINT *puLines){
|
||
|
||
int nStatus;
|
||
PIMAGE pImage;
|
||
PANO_IMAGE pAnoImage;
|
||
|
||
|
||
CheckError2( Init(hWnd, 0, &pAnoImage, FALSE, TRUE));
|
||
pImage = pAnoImage->pBaseImage;
|
||
|
||
*ppAddress = (PBYTE) &pImage->pImg->bImageData[0] + ((nLine) * pImage->pImg->nBytesPerLine);
|
||
|
||
pImage->nLinesRead = min(pImage->nHeight, max(pImage->nLinesRead, (nLine + (int) *puLines)));
|
||
|
||
pAnoImage->lrInvalidDisplayRect.left = 0;
|
||
pAnoImage->lrInvalidDisplayRect.right = pImage->nWidth;
|
||
|
||
if ((pAnoImage->lrInvalidDisplayRect.bottom - pAnoImage->lrInvalidDisplayRect.top) == 0){
|
||
pAnoImage->lrInvalidDisplayRect.top = nLine;
|
||
pAnoImage->lrInvalidDisplayRect.bottom = nLine + *puLines;
|
||
}else{
|
||
pAnoImage->lrInvalidDisplayRect.top =
|
||
min(pAnoImage->lrInvalidDisplayRect.top, nLine);
|
||
pAnoImage->lrInvalidDisplayRect.bottom =
|
||
max(pAnoImage->lrInvalidDisplayRect.bottom,
|
||
nLine + (int) *puLines);
|
||
}
|
||
|
||
if ((nLine + (int)*puLines) > pImage->nHeight){
|
||
*puLines = (UINT) pImage->nHeight - nLine;
|
||
}
|
||
|
||
|
||
Exit:
|
||
if (nStatus){
|
||
ppAddress = 0;
|
||
*puLines = 0;
|
||
}
|
||
DeInit(FALSE, TRUE);
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: IMGConvertRect
|
||
|
||
PURPOSE: Converts a rectangle from 1 coordinate system to another.
|
||
|
||
INPUT: pRect - The rectangle to be converted.
|
||
nType - The type of conversion to be done.
|
||
values = CONV_WINDOW_TO_FULLSIZE etc.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI IMGConvertRect(HWND hWnd, LPLRECT plRect, int nConversionType){
|
||
|
||
int nStatus;
|
||
PWINDOW pWindow;
|
||
|
||
|
||
|
||
CheckError2( Init(hWnd, &pWindow, 0, FALSE, TRUE));
|
||
CheckError2( ConvertRect(pWindow, plRect, nConversionType));
|
||
|
||
|
||
Exit:
|
||
DeInit(FALSE, TRUE);
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: ConvertRect
|
||
|
||
PURPOSE: Converts a rectangle from 1 coordinate system to another.
|
||
|
||
INPUT: pImage - A pointer to the image structure.
|
||
pRect - The rectangle to be converted.
|
||
nType - The type of conversion to be done.
|
||
values = CONV_WINDOW_TO_FULLSIZE etc.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI ConvertRect(PWINDOW pWindow, LPLRECT plRect, int nConversionType){
|
||
|
||
int nStatus = 0;
|
||
PDISPLAY pDisplay;
|
||
PANO_IMAGE pAnoImage;
|
||
PIMAGE pImage;
|
||
|
||
int nHScale;
|
||
int nVScale;
|
||
|
||
|
||
nHScale = nVScale = pWindow->nScale;
|
||
|
||
if (pDisplay = pWindow->pDisplay){
|
||
if (pAnoImage = pDisplay->pAnoImage){
|
||
if (pImage = pAnoImage->pBaseImage){
|
||
CheckError2( TranslateScale(nHScale, pImage->nHRes, pImage->nVRes, &nHScale, &nVScale));
|
||
}
|
||
}
|
||
}
|
||
|
||
CheckError2( ConvertRect2(plRect, nConversionType,
|
||
nHScale, nVScale, pWindow->lHOffset, pWindow->lVOffset));
|
||
|
||
|
||
Exit:
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: ConvertRect2
|
||
|
||
PURPOSE: Converts a rectangle from 1 coordinate system to another.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI ConvertRect2(LPLRECT plRect, int nConversionType,
|
||
int nHScale, int nVScale, long lHOffset, long lVOffset){
|
||
|
||
int nStatus = 0;
|
||
|
||
|
||
if (nHScale < 20 || nVScale < 20){
|
||
nStatus = Error(DISPLAY_INVALID_OPTIONS);
|
||
goto Exit;
|
||
}
|
||
|
||
switch (nConversionType){
|
||
case CONV_WINDOW_TO_FULLSIZE:
|
||
case CONV_WINDOW_TO_SCALED:
|
||
plRect->left += lHOffset;
|
||
plRect->right += lHOffset;
|
||
plRect->top += lVOffset;
|
||
plRect->bottom += lVOffset;
|
||
|
||
if (nConversionType == CONV_WINDOW_TO_SCALED){
|
||
break;
|
||
}
|
||
// Else fall through to scaled to fullsize.
|
||
|
||
case CONV_SCALED_TO_FULLSIZE:
|
||
plRect->left = (plRect->left * SCALE_DENOMINATOR) / nHScale;
|
||
if ((plRect->right * 1000) % nHScale){
|
||
plRect->right = ((plRect->right * SCALE_DENOMINATOR) / nHScale) + 1;
|
||
}else{
|
||
plRect->right = (plRect->right * SCALE_DENOMINATOR) / nHScale;
|
||
}
|
||
|
||
plRect->top = (plRect->top * SCALE_DENOMINATOR) / nVScale;
|
||
if (((plRect->bottom * 1000000) / nVScale) % 1000){
|
||
plRect->bottom = ((plRect->bottom * SCALE_DENOMINATOR) / nVScale) + 1;
|
||
}else{
|
||
plRect->bottom = (plRect->bottom * SCALE_DENOMINATOR) / nVScale;
|
||
}
|
||
break;
|
||
|
||
case CONV_FULLSIZE_TO_WINDOW:
|
||
case CONV_FULLSIZE_TO_SCALED:
|
||
plRect->left = (plRect->left * nHScale) / SCALE_DENOMINATOR;
|
||
if ((plRect->right * nHScale) % 1000){
|
||
plRect->right = ((plRect->right * nHScale) / SCALE_DENOMINATOR) + 1;
|
||
}else{
|
||
plRect->right = (plRect->right * nHScale) / SCALE_DENOMINATOR;
|
||
}
|
||
|
||
plRect->top = (plRect->top * nVScale) / SCALE_DENOMINATOR;
|
||
if ((plRect->bottom * nVScale) % 1000){
|
||
plRect->bottom = ((plRect->bottom * nVScale) / SCALE_DENOMINATOR) + 1;
|
||
}else{
|
||
plRect->bottom = (plRect->bottom * nVScale) / SCALE_DENOMINATOR;
|
||
}
|
||
|
||
if (nConversionType == CONV_FULLSIZE_TO_SCALED){
|
||
break;
|
||
}
|
||
// Else fall through to scaled to window
|
||
|
||
case CONV_SCALED_TO_WINDOW:
|
||
plRect->left -= lHOffset;
|
||
plRect->right -= lHOffset;
|
||
plRect->top -= lVOffset;
|
||
plRect->bottom -= lVOffset;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
|
||
Exit:
|
||
return(nStatus);
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: lmax
|
||
|
||
PURPOSE: Returns the highest value nsing longs.
|
||
|
||
INPUT: lA - The first number.
|
||
lB - The second number.
|
||
|
||
*****************************************************************************/
|
||
|
||
long WINAPI lmax(long lA, long lB){
|
||
|
||
if (lA >= lB){
|
||
return lA;
|
||
}else{
|
||
return lB;
|
||
}
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: GetSelectBox
|
||
|
||
PURPOSE: Gets selection box.
|
||
|
||
*****************************************************************************/
|
||
void WINAPI GetSelectBox(PANO_IMAGE pAnoImage, LPLRECT plRect){
|
||
|
||
plRect->left = min(pAnoImage->lrSelectBox.left, pAnoImage->lrSelectBox.right);
|
||
plRect->right = max(pAnoImage->lrSelectBox.left, pAnoImage->lrSelectBox.right);
|
||
plRect->top = min(pAnoImage->lrSelectBox.top, pAnoImage->lrSelectBox.bottom);
|
||
plRect->bottom = max(pAnoImage->lrSelectBox.top, pAnoImage->lrSelectBox.bottom);
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: Error
|
||
|
||
PURPOSE: Allows Codeview trap on most errors being reported.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI Error(int nStatus){
|
||
|
||
return (Error2(nStatus));
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: Error2
|
||
|
||
PURPOSE: Allows Codeview trap on all errors being reported.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI Error2(int nStatus){
|
||
|
||
return nStatus;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: Start
|
||
|
||
PURPOSE: Allows Codeview trap on any API entry.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI Start(void){
|
||
|
||
if (!nStartCount++){
|
||
#ifdef _DEBUG
|
||
TimerStart;
|
||
#endif
|
||
if (!nDontCallStartFirst){
|
||
StartFirst();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: StartFirst
|
||
|
||
PURPOSE: Provides for easy debugging of printer code.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI StartFirst(void){
|
||
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: End
|
||
|
||
PURPOSE: Provides for easy debugging of code.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI End(void){
|
||
|
||
nStartCount--;
|
||
if (!nStartCount){
|
||
Timer(0);
|
||
}
|
||
return;
|
||
}
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: ResetDisplayParms
|
||
|
||
PURPOSE: Resets the display parameters to their default settings.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI ResetDisplayParms(HWND hWnd, PWINDOW pWindow){
|
||
|
||
int nStatus = 0;
|
||
|
||
IMG_TYPE_INT nScaleAlgorithm;
|
||
PANO_IMAGE pAnoImage = 0;
|
||
PIMAGE pImage;
|
||
PMARK pMark;
|
||
int nMarkIndex;
|
||
int nScale;
|
||
|
||
|
||
|
||
if (pWindow->pDisplay){
|
||
if (pAnoImage = pWindow->pDisplay->pAnoImage){
|
||
for (nMarkIndex = 0; nMarkIndex < pAnoImage->Annotations.nMarks; nMarkIndex++){
|
||
pMark = pAnoImage->Annotations.ppMarks[nMarkIndex];
|
||
if ((pMark->Attributes.dwPermissions & ACL_MUST_INITIALLY_SHOW_MARK)){
|
||
pMark->Attributes.bVisible = TRUE;
|
||
}else{
|
||
if ((pMark->Attributes.dwPermissions & ACL_MUST_INITIALLY_HIDE_MARK)){
|
||
pMark->Attributes.bVisible = FALSE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
pWindow->nDisplayPalette = 0;
|
||
|
||
memset(&nScaleAlgorithm, 0, sizeof(IMG_TYPE_UINT));
|
||
pWindow->nScaleAlgorithm = nScaleAlgorithm;
|
||
|
||
nScale = pWindow->nWndDefScale;
|
||
if (pAnoImage){
|
||
pImage = pAnoImage->pBaseImage;
|
||
if (pImage->bFileScaleValid){
|
||
if ((pImage->nFileScaleFlags & 0x01)){
|
||
nScale = SD_FIT_WINDOW;
|
||
}else if ((pImage->nFileScaleFlags & 0x02)){
|
||
nScale = SD_FIT_VERTICAL;
|
||
}else{
|
||
nScale = pImage->nFileScale;
|
||
}
|
||
}
|
||
}
|
||
|
||
IMGSetParmsCgbw(hWnd, PARM_SCALE, &nScale, PARM_IMAGE);
|
||
|
||
pWindow->lHOffset = 0;
|
||
pWindow->lVOffset = 0;
|
||
|
||
// Setting these to 101 forces a redraw of them at the correct setting.
|
||
pWindow->nCurrentHThumb = 101;
|
||
pWindow->nCurrentVThumb = 101;
|
||
if (!(pWindow->dwFlags & OI_NOSCROLL)){
|
||
pWindow->bScrollBarsEnabled = TRUE;
|
||
}else{
|
||
pWindow->bScrollBarsEnabled = FALSE;
|
||
}
|
||
|
||
// IMGDisableScrollBar(hWnd);
|
||
// SetScrollRange(hWnd, SB_HORZ, 0, 0, FALSE);
|
||
// SetScrollRange(hWnd, SB_VERT, 0, 0, FALSE);
|
||
//
|
||
// if (!(pWindow->dwFlags & OI_NOSCROLL)){
|
||
// IMGEnableScrollBar(hWnd);
|
||
// }
|
||
|
||
// If it is fit-to-xx, then redo the scale after the scroll bars
|
||
// have been drawn.
|
||
if (nScale == SD_FIT_HORIZONTAL || nScale == SD_FIT_VERTICAL
|
||
|| nScale == SD_FIT_WINDOW){
|
||
DrawScrollBars(hWnd, pWindow);
|
||
IMGSetParmsCgbw(hWnd, PARM_SCALE, &nScale, 0);
|
||
}
|
||
|
||
|
||
pWindow->bRepaintClientRect = TRUE;
|
||
|
||
|
||
//Exit:
|
||
return nStatus;
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: GetEntireClientRect
|
||
|
||
PURPOSE: Get the client rect including the area that would be
|
||
available if no scroll bars were drawn.
|
||
|
||
INPUT: hWnd - Identifies the image window.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI GetEntireClientRect(HWND hWnd, PWINDOW pWindow, PRECT pRect){
|
||
|
||
GetClientRect(hWnd, pRect);
|
||
if (!(pRect->right - pRect->left) || !(pRect->bottom - pRect->top)){
|
||
return 0;
|
||
}
|
||
if (pWindow->bHScrollBarDrawn){
|
||
pRect->bottom += (GetSystemMetrics(SM_CYHSCROLL) - 1);
|
||
}
|
||
if (pWindow->bVScrollBarDrawn){
|
||
pRect->right += (GetSystemMetrics(SM_CXVSCROLL) - 1);
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: GetEnabledClientRect
|
||
|
||
PURPOSE: Get the client rect including the area that would be
|
||
available if scroll bars were drawn as flagged.
|
||
|
||
INPUT: hWnd - Identifies the image window.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI GetEnabledClientRect(HWND hWnd, PWINDOW pWindow, PRECT pRect){
|
||
|
||
GetClientRect(hWnd, pRect);
|
||
if (!(pRect->right - pRect->left) || !(pRect->bottom - pRect->top)
|
||
|| !pWindow->bScrollBarsEnabled){
|
||
return 0;
|
||
}
|
||
if (pWindow->bHScrollBarDrawn && !pWindow->bHScrollBarEnabled){
|
||
pRect->bottom += (GetSystemMetrics(SM_CYHSCROLL) - 1);
|
||
}else if (!pWindow->bHScrollBarDrawn && pWindow->bHScrollBarEnabled){
|
||
pRect->bottom -= (GetSystemMetrics(SM_CYHSCROLL) + 1);
|
||
}
|
||
|
||
if (pWindow->bVScrollBarDrawn && !pWindow->bVScrollBarEnabled){
|
||
pRect->right += (GetSystemMetrics(SM_CXVSCROLL) - 1);
|
||
}else if (!pWindow->bVScrollBarDrawn && pWindow->bVScrollBarEnabled){
|
||
pRect->right -= (GetSystemMetrics(SM_CXVSCROLL) + 1);
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: IMGGetVersion
|
||
|
||
PURPOSE: Gets the version number of the IDK.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI IMGGetVersion(PSTR pszModule, PSTR pszVersion,
|
||
int nSize, int nFlags){
|
||
|
||
int nStatus = 0;
|
||
|
||
char szVersion[20];
|
||
int nIndex;
|
||
int nIndexlp;
|
||
BOOL bLeading;
|
||
PSTR BegPtr = NULL;
|
||
PSTR NewPtr;
|
||
|
||
if (!pszModule || !pszVersion){
|
||
nStatus = Error(DISPLAY_NULLPOINTERINVALID);
|
||
goto Exit;
|
||
}
|
||
if ((nFlags & OI_VERSION_NO_LEADING_ZEROS)
|
||
&& (nFlags & OI_VERSION_NO_DOTS)){
|
||
nStatus = Error(DISPLAY_INVALID_OPTIONS);
|
||
goto Exit;
|
||
}
|
||
|
||
if (!strcmp(pszModule, "runtime")){
|
||
strcpy(szVersion, RUNTIME_VERSION);
|
||
}else{
|
||
nStatus = Error(DISPLAY_INVALID_OPTIONS);
|
||
goto Exit;
|
||
}
|
||
|
||
if (nSize <= 1){
|
||
nStatus = Error(DISPLAY_INVALID_OPTIONS);
|
||
goto Exit;
|
||
}
|
||
|
||
memset(pszVersion, 0, nSize); // Zero init destination memory.
|
||
|
||
nIndex = 0;
|
||
nIndexlp = 0;
|
||
bLeading = TRUE;
|
||
|
||
for (; szVersion[nIndex] && nIndexlp < (nSize - 1); nIndex++){
|
||
if (szVersion[nIndex] == '.'){
|
||
if (!(nFlags & OI_VERSION_NO_DOTS)){
|
||
if (bLeading){
|
||
pszVersion[nIndexlp++] = '0';
|
||
}
|
||
pszVersion[nIndexlp++] = szVersion[nIndex];
|
||
}
|
||
bLeading = TRUE;
|
||
}else{
|
||
if (szVersion[nIndex] != '0' || !bLeading
|
||
|| !(nFlags & OI_VERSION_NO_LEADING_ZEROS)){
|
||
pszVersion[nIndexlp++] = szVersion[nIndex];
|
||
}
|
||
bLeading = FALSE;
|
||
}
|
||
}
|
||
// Delete trailing dots and zeros that we added.
|
||
NewPtr = pszVersion;
|
||
do{
|
||
if (NewPtr = strchr(NewPtr, '.')){
|
||
BegPtr = NewPtr;
|
||
while(NewPtr && (*NewPtr == '.' || *NewPtr == '0'))
|
||
NewPtr = CharNext(NewPtr);
|
||
if(*NewPtr)
|
||
BegPtr = NULL;
|
||
}
|
||
}while(NewPtr && *NewPtr);
|
||
|
||
if(BegPtr) *BegPtr = 0;
|
||
|
||
Exit:
|
||
return nStatus;
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: JustifyLRect
|
||
|
||
PURPOSE: Make left and top the smaller of the 2 numbers.
|
||
|
||
*****************************************************************************/
|
||
|
||
VOID WINAPI JustifyLRect(LPLRECT plrRect){
|
||
|
||
long lTemp;
|
||
|
||
if (plrRect->left > plrRect->right){
|
||
lTemp = plrRect->left;
|
||
plrRect->left = plrRect->right;
|
||
plrRect->right = lTemp;
|
||
}
|
||
if (plrRect->top > plrRect->bottom){
|
||
lTemp = plrRect->top;
|
||
plrRect->top = plrRect->bottom;
|
||
plrRect->bottom = lTemp;
|
||
}
|
||
return;
|
||
}
|
||
|
||
|
||
/************************************************************************
|
||
timestmp, when called, puts out the following information to monitapp
|
||
about the calling routine:
|
||
|
||
PSTR pDescription - information string
|
||
PSTR pFunctionName - function name
|
||
PSTR pFileName, int line_number - file name and line number of call
|
||
PSTR pErr1, int Err1 - err1 descriptor and err1 value
|
||
PSTR pErr2, int Err2 - err2 descriptor and err2 value
|
||
|
||
pDescription can be any informative string (< 1000 chars) the nser wishes
|
||
pErr1 and pErr2 can be nsed to output any error string (< 1000 chars)
|
||
the nser wishes
|
||
if pErr1 == NULL, Err1 will not be output
|
||
if pErr2 == NULL, Err2 will not be output
|
||
*************************************************************************/
|
||
#ifdef TIMESTAMP
|
||
void WINAPI timestmp(PSTR pDescription, PSTR pFunctionName,
|
||
PSTR pFileName, int line_number, PSTR pErr1,
|
||
int Err1, PSTR pErr2, int Err2){
|
||
|
||
char tempstring[1002];
|
||
monit1("\n");
|
||
monittime();
|
||
if (pFileName)
|
||
monit1("Source file line number and name - %5d : %s\n",line_number,(PSTR) pFileName);
|
||
if (pFunctionName){
|
||
strcpy(tempstring, pFunctionName);
|
||
monit1("Function Name - %s\n", (PSTR)tempstring);
|
||
}
|
||
if (pDescription){
|
||
strcpy(tempstring, pDescription);
|
||
monit1("Additional Information - %s\n", (PSTR)tempstring);
|
||
}
|
||
if (pErr1){
|
||
strcpy(tempstring, pErr1);
|
||
monit1(strcat(tempstring, (PSTR)" - 0x %4x\n"), Err1);
|
||
}
|
||
if (pErr2){
|
||
strcpy(tempstring, pErr2);
|
||
monit1(strcat(tempstring, (PSTR)" - 0x %4x\n"), Err2);
|
||
}
|
||
|
||
}
|
||
#endif
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: SetSeqfileWnd
|
||
|
||
PURPOSE: Set hWnd to hWnd passed in
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI SetSeqfileWnd(HWND hWnd){
|
||
hWnd = hWnd;
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: TimerClearAll
|
||
|
||
PURPOSE: Clears all timer variables.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI TimerClearAll(void){
|
||
|
||
int nLoop;
|
||
|
||
for (nLoop = 0; nLoop < 20; nLoop++){
|
||
lTimer[nLoop] = 0;
|
||
}
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: TimerGetAll
|
||
|
||
PURPOSE: Gets all timer variables.
|
||
|
||
*****************************************************************************/
|
||
|
||
void WINAPI TimerGetAll(PLONG plTimer){
|
||
|
||
int nLoop;
|
||
|
||
for (nLoop = 0; nLoop < 20; nLoop++){
|
||
*(plTimer++) = lTimer[nLoop];
|
||
}
|
||
}
|
||
//
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: Test
|
||
|
||
PURPOSE: Runs a test of something for the test app.
|
||
Tests are added to this routine as needed.
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI Test(HWND hWnd, int nTestNumber){
|
||
|
||
int nStatus;
|
||
PWINDOW pWindow;
|
||
PANO_IMAGE pAnoImage;
|
||
PIMAGE pImage;
|
||
PIMAGE pFormImage;
|
||
PMARK pMark;
|
||
|
||
PBYTE pCompressedBuffer;
|
||
int nCompressedBufferSize;
|
||
int nCompressionType;
|
||
int nTimerLoop;
|
||
int nFlags;
|
||
|
||
|
||
CheckError2( Init(hWnd, &pWindow, &pAnoImage, TRUE, TRUE));
|
||
pImage = pAnoImage->pBaseImage;
|
||
pFormImage = pAnoImage->pDisplayFormImage;
|
||
|
||
CheckError2( ValidateCache(hWnd, pAnoImage));
|
||
|
||
// Check for operation in progress.
|
||
if (pAnoImage->Annotations.ppMarks){
|
||
pMark = pAnoImage->Annotations.ppMarks[pAnoImage->Annotations.nMarks];
|
||
if (pMark){
|
||
OiOpEndOperation(hWnd);
|
||
pMark = pAnoImage->Annotations.ppMarks[pAnoImage->Annotations.nMarks];
|
||
if (pMark){
|
||
OiOpEndOperation(hWnd);
|
||
}
|
||
}
|
||
}
|
||
|
||
nTimerLoop = 1;
|
||
// nTimerLoop = 10;
|
||
// nTimerLoop = 100;
|
||
|
||
for (; nTimerLoop; nTimerLoop--){
|
||
|
||
switch (nTestNumber){
|
||
case 0:
|
||
nCompressionType = FIO_0D; // FIO_0D, FIO_1D, FIO_2D, FIO_PACKED, FIO_LZW
|
||
nFlags = 0x00;
|
||
CheckError2( CompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, &pCompressedBuffer,
|
||
&nCompressedBufferSize, nCompressionType, nFlags));
|
||
CheckError2( DecompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, pCompressedBuffer,
|
||
nCompressedBufferSize, nCompressionType, nFlags));
|
||
if (!VirtualFree(pCompressedBuffer, 0, MEM_RELEASE)){
|
||
goto Exit;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
nCompressionType = FIO_1D; // FIO_0D, FIO_1D, FIO_2D, FIO_PACKED, FIO_LZW
|
||
nFlags = 0x31;
|
||
CheckError2( CompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, &pCompressedBuffer,
|
||
&nCompressedBufferSize, nCompressionType, nFlags));
|
||
CheckError2( DecompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, pCompressedBuffer,
|
||
nCompressedBufferSize, nCompressionType, nFlags));
|
||
if (!VirtualFree(pCompressedBuffer, 0, MEM_RELEASE)){
|
||
goto Exit;
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
nCompressionType = FIO_2D; // FIO_0D, FIO_1D, FIO_2D, FIO_PACKED, FIO_LZW
|
||
nFlags = 0x00;
|
||
CheckError2( CompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, &pCompressedBuffer,
|
||
&nCompressedBufferSize, nCompressionType, nFlags));
|
||
CheckError2( DecompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, pCompressedBuffer,
|
||
nCompressedBufferSize, nCompressionType, nFlags));
|
||
if (!VirtualFree(pCompressedBuffer, 0, MEM_RELEASE)){
|
||
goto Exit;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
nCompressionType = FIO_PACKED; // FIO_0D, FIO_1D, FIO_2D, FIO_PACKED, FIO_LZW
|
||
nFlags = 0x00;
|
||
CheckError2( CompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, &pCompressedBuffer,
|
||
&nCompressedBufferSize, nCompressionType, nFlags));
|
||
CheckError2( DecompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, pCompressedBuffer,
|
||
nCompressedBufferSize, nCompressionType, nFlags));
|
||
if (!VirtualFree(pCompressedBuffer, 0, MEM_RELEASE)){
|
||
goto Exit;
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
nCompressionType = FIO_LZW; // FIO_0D, FIO_1D, FIO_2D, FIO_PACKED, FIO_LZW
|
||
nFlags = 0x00;
|
||
CheckError2( CompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, &pCompressedBuffer,
|
||
&nCompressedBufferSize, nCompressionType, nFlags));
|
||
CheckError2( DecompressImage(pImage->nWidth, pImage->pImg->nBytesPerLine,
|
||
pImage->nHeight, &pImage->pImg->bImageData[0], pImage->pImg->nType, pCompressedBuffer,
|
||
nCompressedBufferSize, nCompressionType, nFlags));
|
||
if (!VirtualFree(pCompressedBuffer, 0, MEM_RELEASE)){
|
||
goto Exit;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
pWindow->bRepaintClientRect = TRUE;
|
||
pWindow->pDisplay->lrScDisplayRect.right = 0;
|
||
CheckError2( IMGRepaintDisplay(hWnd, (PRECT) -1));
|
||
|
||
|
||
Exit:
|
||
DeInit(TRUE, TRUE);
|
||
return(nStatus);
|
||
}
|
||
#ifdef new
|
||
/*****************************************************************************
|
||
|
||
FUNCTION: IMGThumbnailSetScale
|
||
|
||
PURPOSE:
|
||
|
||
*****************************************************************************/
|
||
|
||
int WINAPI IMGThumbnailSetScale (HWND hWnd){
|
||
|
||
int nStatus;
|
||
PWINDOW pWindow;
|
||
|
||
|
||
CheckError2( Init(hWnd, &pWindow, NULL, FALSE, TRUE));
|
||
pWindow->dwFlags |= OI_THUMBNAIL_SCALE;
|
||
|
||
Exit:
|
||
DeInit(FALSE, TRUE);
|
||
return(nStatus);
|
||
}
|
||
#endif
|
||
//
|
||
/****************************************************************************
|
||
|
||
FUNCTION: OiUndoEndOperation
|
||
|
||
PURPOSE: This routine sets np the undo info to go to the next nser level undo.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI OiUndoEndOperation(HWND hWnd, int nFlags){
|
||
|
||
int nStatus=0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: OiUndo
|
||
|
||
PURPOSE: This routine undoes an operation.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI OiUndo(HWND hWnd, int nFlags){
|
||
|
||
int nStatus=0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: OiRedo
|
||
|
||
PURPOSE: This routine redoes an operation.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI OiRedo(HWND hWnd, int nFlags){
|
||
|
||
int nStatus=0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: StartUndoSave
|
||
|
||
PURPOSE: This routine sets np to save undo info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI StartUndoSave(PANO_IMAGE pAnoImage){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoAllocate
|
||
|
||
PURPOSE: This routine allocates memory for undo info if possible.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoAllocate(PANO_IMAGE pAnoImage, int nSize, PPSTR ppBlock){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoSavelpWindow
|
||
|
||
PURPOSE: This routine saves the pwindow info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoSavelpWindow(PANO_IMAGE pAnoImage, PWINDOW pWindow){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoSavelpBaseImage
|
||
|
||
PURPOSE: This routine saves the pBaseImage info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoSavelpBaseImage(PANO_IMAGE pAnoImage){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoSavelpAnnotations
|
||
|
||
PURPOSE: This routine saves the pAnnotations info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoSavelpAnnotations(PANO_IMAGE pAnoImage){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoSaveSelectionState
|
||
|
||
PURPOSE: This routine saves the Selection State info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoSaveSelectionState(PANO_IMAGE pAnoImage){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: UndoSavelpAnoImage
|
||
|
||
PURPOSE: This routine saves the pAnoImage info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI UndoSavelpAnoImage(PANO_IMAGE pAnoImage){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: DeleteUndoInfo
|
||
|
||
PURPOSE: This routine deletes the indexed undo info,
|
||
condenses the undo info list,
|
||
and decrements the current undo index if it was greater than the one deleted.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI DeleteUndoInfo(PANO_IMAGE pAnoImage, int nUndoIndex){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|
||
/****************************************************************************
|
||
|
||
FUNCTION: SwapUndoWithCurrent
|
||
|
||
PURPOSE: This routine swaps the undo info with the current info.
|
||
|
||
****************************************************************************/
|
||
|
||
int WINAPI SwapUndoWithCurrent(PANO_IMAGE pAnoImage, PWINDOW pWindow){
|
||
|
||
int nStatus = 0;
|
||
return(nStatus);
|
||
}
|