Ejemplo n.º 1
0
//************************************************************************
BOOL CDib::LoadFromResource(HINSTANCE hInstance, LPCSTR szResource, BOOL fDecodeRLE)
//************************************************************************
{
	HRSRC hDibRes;
	HGLOBAL hDib;
	LPTR lpDib;
	LPBITMAPINFO lpbmInfo; 
	DWORD dwBits;

	if ( !(hDibRes = FindResource(hInstance, szResource, RT_BITMAP)) )
		return(FALSE);
	if (! (hDib = LoadResource(hInstance, hDibRes)) )
		return(FALSE);
	lpDib = (LPTR)LockResource(hDib);
	if (!lpDib)
		return(FALSE);
	lpbmInfo = (LPBITMAPINFO)lpDib;
	m_bmiHeader = lpbmInfo->bmiHeader;
	FixHeader();
	hmemcpy(m_rgbQuad, lpbmInfo->bmiColors, GetNumColors() * sizeof(RGBQUAD));
	lpDib += m_bmiHeader.biSize + (GetNumColors() * sizeof(RGBQUAD));

	// Can we get enough memory to hold the DIB bits
	if ( (m_lp = AllocX( dwBits = GetSizeImage(), GMEM_ZEROINIT )) != NULL )
		hmemcpy(m_lp, lpDib, dwBits);
	UnlockResource(hDib);
	FreeResource(hDib);

	return(CheckDecodeRLE(fDecodeRLE));
}
Ejemplo n.º 2
0
//************************************************************************
CDib::CDib(PDIB pdib, LPTR lp, BOOL fCopyBits)
//************************************************************************
{
	m_bmiHeader = *pdib->GetInfoHeader();
	hmemcpy( m_rgbQuad, pdib->GetColors(), sizeof(m_rgbQuad));
	m_lp = lp;
	if (fCopyBits)
		hmemcpy(m_lp, pdib->GetPtr(), pdib->GetSizeImage());
	m_iRefCount = 0;
	AddRef();
}
Ejemplo n.º 3
0
//************************************************************************
void CDib::SwapLines( int y1, int y2, int iCount )
//************************************************************************
{
HPTR lpLineB, lpSwap1, lpSwap2;
int iHeight = abs( GetHeight() );
int iWidth = GetWidthBytes();

if ( m_bmiHeader.biCompression != BI_RGB )
	return;

if ( !(lpSwap1 = GetXY( 0, y1 )) )
	return;

if ( !(lpSwap2 = GetXY( 0, y2 )) )
	return;

if ( !(lpLineB = Alloc( iWidth )) )
	return;

if ( y1 < 0 )
	y1 = -y1;
if ( y1 >= iHeight )
	y1 = iHeight-1;

if ( y2 < 0 )
	y2 = -y2;
if ( y2 >= iHeight )
	y2 = iHeight-1;

if ( iCount < 0 )
	iCount = -iCount;
if ( y1 + iCount > iHeight )
	iCount = iHeight - y1;
if ( y2 + iCount > iHeight )
	iCount = iHeight - y2;

int iDelta = ( GetHeight() < 0 ? iWidth : -iWidth ); // if its an upside down DIB...
while ( --iCount >= 0 )
	{
	hmemcpy( lpLineB, lpSwap2, iWidth );
	hmemcpy( lpSwap2, lpSwap1, iWidth );
	hmemcpy( lpSwap1, lpLineB, iWidth );
	lpSwap1 += iDelta;
	lpSwap2 += iDelta;
	}

FreeUp( lpLineB );
}
Ejemplo n.º 4
0
//************************************************************************
void CDib::CopyColorTable( PDIB pdibSrc )
//************************************************************************
{
	m_bmiHeader.biClrUsed		= pdibSrc->m_bmiHeader.biClrUsed;
	m_bmiHeader.biClrImportant	= pdibSrc->m_bmiHeader.biClrImportant;
	hmemcpy( m_rgbQuad, pdibSrc->GetColors(), sizeof(m_rgbQuad));
}
Ejemplo n.º 5
0
long	UPSF::xxxx_To_UFon(
	HGLOBAL&	hUniv,
	long&			univSize,
	long			natv,
	void*			natvPtr,
	long			natvLen)

	{
	univSize = natvLen;
	if(!(hUniv = GlobalReAlloc(hUniv, univSize, MEMFLAGS)))
		return AUPSF_MEMORYERROR;

	long*	univPtr = (long*)GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

	long	retValue = AUPSF_NOERROR;

	if(natv==AUPSF_NATV_FONT)
		{
		// just store the font name--each platform will convert on import
		// the attributes will be stored separately
		hmemcpy(univPtr, natvPtr, natvLen);
		}
	else
		retValue = AUPSF_CANTCONVERT;

	GlobalUnlock(hUniv);
	return retValue;
	}
Ejemplo n.º 6
0
///////////////////////////////////////////////
// Copy your memory to another memory location
///////////////////////////////////////////////
VOIDPTR HFMemCopy(VOIDPTR pDest, VOIDPTR pSrc, DWORD dwNBytes)
{
  //// A Windows 3.1 specific call... ////
  hmemcpy(pDest, pSrc, (LONG) dwNBytes);

  /////////////////////////////////////////////////
  // Here's how one might code the above function:
  /////////////////////////////////////////////////
  /*
  DWORD   dwBytesLeft;
  BYTEPTR pTempSrc    = (BYTEPTR) pSrc;
  BYTEPTR pTempDest   = (BYTEPTR) pDest;


  if (dwNBytes != 0)
  {
    //// Decrement for zero-based indexing ////
    dwNBytes--;

    while (dwNBytes > 0)
    {
      pTempDest[dwNBytes] = pTempSrc[dwNBytes];
      dwNBytes--;
    }

    //// Pick up the last byte ////
    pTempDest[0] = pTempSrc[0];
  }
  */

  return ((VOIDPTR) pDest);
}
Ejemplo n.º 7
0
BOOL QSQL_DEF::InitVarsDialog	/* ---- Init Variables Dialog ----------- */
( HWND                  hDlg,           // window handle
  OBJECTID              qsqlObj         // qsql object
)
/* Inits Variables group box. */
{ MemBlock		mb;		// memblock class
  WORD                  varCount;       // number of VARs
  Var                   huge *varPtr;   // VAR pointer
  int			extNameLen;		// extended name length
  char			extName[EXTNAMESIZE];	// extended name

  long			typeIdx;	// type index
  TYPEID		type;		// type
  char			name[MXVARSIZE];// name

  WORD			i;              // counter

	AUtlCenterDialog(hDlg, 0);
  SetWindowLong(hDlg, DWL_USER, (DWORD) qsqlObj);	// saves object id
  varCount = (WORD) (AObjGetDataSize(qsqlObj, QSQLVARS) / sizeof(Var));
  varPtr = (Var *) mb.GetPointer(qsqlObj, QSQLVARS);

  /* ---- inits variable ---- */
  for (i = 0; i < varCount; i++, varPtr++)
  { if (varPtr->obj && !AObjCheckType(varPtr->obj, 0))
      varPtr->obj = 0;

    extNameLen = (int) hstrlen(varPtr->name);
    hmemcpy(extName, varPtr->name, extNameLen);
    if (varPtr->obj)
    { lstrcpy(&extName[extNameLen], ": <");
      ATypeGetName(varPtr->type, &extName[extNameLen + 3], sizeof(name));
      lstrcat(&extName[extNameLen], ">");
    } // if
    else
      lstrcpy(&extName[extNameLen], ": <(None)>");
    SendDlgItemMessage(hDlg, IDL_VARS, LB_INSERTSTRING, i, (DWORD) extName);
    SendDlgItemMessage(hDlg, IDL_VARS, LB_SETITEMDATA,
                       i, (DWORD) varPtr->obj);
  } // for
  /* inserts an empty mask */
  SendDlgItemMessage(hDlg, IDL_VARS, LB_INSERTSTRING, i, (DWORD) "");
  SendDlgItemMessage(hDlg, IDL_VARS, LB_SETITEMDATA, i, 0);

  /* ---- inits type ---- */ 
  i = SendDlgItemMessage(hDlg, IDC_TYPE, CB_INSERTSTRING,
                         -1, (DWORD) "(None)");
  SendDlgItemMessage(hDlg, IDC_TYPE, CB_SETITEMDATA, i, 0);
  typeIdx = AOBJ_GETFIRSTKEY;
  while ((type = ATypeGetNext(&typeIdx)) != 0)
    if (type == OTYPE_TEXT || type == OTYPE_NUMBER ||
	type == OTYPE_DATE || type == OTYPE_TIME)
    { ATypeGetName(type, name, sizeof(name));
      i = SendDlgItemMessage(hDlg, IDC_TYPE, CB_INSERTSTRING,
                             -1, (DWORD) name);
      SendDlgItemMessage(hDlg, IDC_TYPE, CB_SETITEMDATA, i, (DWORD) type);
    } // if
  return TRUE;
} // InitVars
Ejemplo n.º 8
0
void
_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
{
  if (c > 0xFFFF)
    hmemcpy((void _huge*) d, (void _huge*) s, c);
  else
    (void) memcpy(d, s, (size_t) c);
}
Ejemplo n.º 9
0
//************************************************************************
BOOL CDib::Create( PDIB pdib )
//************************************************************************
{
	DWORD dwSizeImage;

	dwSizeImage = pdib->GetSizeImage();
	if ( !(m_lp = AllocX( dwSizeImage + 1024, GMEM_ZEROINIT )) )
	{
		return FALSE;
	}
	
	m_bmiHeader = *pdib->GetInfoHeader();
	hmemcpy( m_rgbQuad, pdib->GetColors(), sizeof(m_rgbQuad));
	hmemcpy(m_lp, pdib->GetPtr(), pdib->GetSizeImage());
	
	return TRUE;
}
Ejemplo n.º 10
0
//************************************************************************
CDib::CDib(LPBITMAPINFOHEADER lpbmiHeader, LPRGBQUAD lpColors, LPTR lp)
//************************************************************************
{
	m_bmiHeader = *lpbmiHeader;
	hmemcpy( m_rgbQuad, lpColors, sizeof(m_rgbQuad));
	m_lp = lp;
	m_iRefCount = 0;
	AddRef();
}
Ejemplo n.º 11
0
BOOL CDib::DibFlip()
{
	UINT cLine = GetHeight();
	UINT cFlip = cLine / 2;
	long cbLine = GetWidthBytes();
	UINT i;
	HPTR lpTop, lpBottom, lpTemp;
	static BYTE temp[640];
	
	if (cLine >= 2) 
	{
		if (cbLine > 640)
		{
			if ((lpTemp = (HPTR)GlobalAllocPtr(GHND, cbLine)) == NULL)	
				return FALSE;
		}
		else
		{
			lpTemp = &temp[0];
		}
	
		lpTop = GetPtr();
		lpBottom = lpTop + (cLine - 1) * cbLine;
		for (i = 0 ; i < cFlip ; i++)
		{
			if (lpBottom < lpTop)
				return FALSE;
			hmemcpy(lpTemp, lpTop, cbLine);
			hmemcpy(lpTop, lpBottom, cbLine);
			hmemcpy(lpBottom, lpTemp, cbLine);
	
			lpTop += cbLine;
			lpBottom -= cbLine;
		}
		
		if (lpTemp != &temp[0])
			GlobalFreePtr(lpTemp);
	}
	m_bmiHeader.biHeight = -m_bmiHeader.biHeight;
	return TRUE;
}
Ejemplo n.º 12
0
void TABLE::tPaste()

  {
  if(TABLE_ATTRIBUTES::AutoFill())
    return;

  BOOL  available = IsClipboardFormatAvailable(CF_TEXT);
  if(!available)
    return;

  DestroyAllEditControls();

  OpenClipboard(hParentWnd);
  HGLOBAL hClipboard = GetClipboardData(CF_TEXT);
  if(!hClipboard)
    {
    CloseClipboard();
    return;
    }

  HGLOBAL hCopy = GlobalAlloc(GHND, GlobalSize(hClipboard));
  if(!hCopy)
    {
    CloseClipboard();
    return;
    }

  char* copy = (char*)GlobalLock(hCopy);
  char* clip = (char*)GlobalLock(hClipboard);
  hmemcpy(copy, clip, GlobalSize(hClipboard));
  GlobalUnlock(hClipboard);
  CloseClipboard();

  RUNTIMEINFO*  rtime = (RUNTIMEINFO*)AObjGetRuntimeInfo(theObject);
  ROW*          row = rtime->GetRow();
  long          first = row->FirstSelection();
  char*         token = (char*)myStrtok((char huge*)copy);
  while(token)
    {
    row->AddRow(first, token, TABLE_ATTRIBUTES::NumColumns(), FALSE);
    token = (char*)myStrtok(NULL);
    first++;
    }
  GlobalUnlock(hCopy);
  GlobalFree(hCopy);

  row->DeleteSelectedRows();
  PostObjectChanged(CHANGED_NUMROWS);
  }
Ejemplo n.º 13
0
void crypto777_encrypt(HUFF *dest,HUFF *src,int32_t len,struct crypto777_user *sender,uint32_t timestamp)
{
    bits256 hash; bits384 xorpad; int32_t i; uint64_t *ptr = (uint64_t *)src->buf;
    hseek(dest,len << 3,SEEK_SET), hrewind(dest), hseek(src,len << 3,SEEK_SET), hrewind(src);
    calc_sha256cat(hash.bytes,(uint8_t *)&sender->nxt64bits,sizeof(sender->nxt64bits),(uint8_t *)&timestamp,sizeof(timestamp));
    SaM_Initialize(&sender->XORpad);
    SaM_Absorb(&sender->XORpad,hash.bytes,sizeof(hash.bytes),sender->shared_SaM.bytes,sizeof(sender->shared_SaM));
    while ( len >= sizeof(xorpad) )
    {
        SaM_emit(&sender->XORpad);
        for (i=0; i<6; i++)
            xorpad.ulongs[i] = (sender->XORpad.bits.ulongs[i] ^ ptr[i]);//, printf("%llx ",(long long)xorpad.ulongs[i]);
        ptr += 6;
        hmemcpy(0,xorpad.bytes,dest,sizeof(xorpad)), len -= sizeof(xorpad);
    }
    if ( len > 0 )
    {
        SaM_emit(&sender->XORpad);
        for (i=0; i<len; i++)
            xorpad.bytes[i] = (sender->XORpad.bits.bytes[i] ^ ((uint8_t *)ptr)[i]);//, printf("%2x ",xorpad.bytes[i]);
        hmemcpy(0,xorpad.bytes,dest,len), len -= sizeof(xorpad);
    }
    //printf(" dest %llu\n",(long long)sender->nxt64bits);
}
Ejemplo n.º 14
0
//
// Clone DataObject only for MOVE/COPY operation
//
HRESULT CDS_IDLData_Clone(LPDATAOBJECT pdtobjIn, UINT acf[], UINT ccf, LPDATAOBJECT *ppdtobjOut)
{
    HRESULT hres = CDS_IDLData_CreateInstance(NULL, ppdtobjOut, NULL);

    if (SUCCEEDED(hres))
    {
        UINT i;
        FORMATETC fmte = { 0, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
        for (i=0 ; i<ccf ; i++)
        {
            HRESULT hresT;
            STGMEDIUM medium;
            fmte.cfFormat = acf[i];
            hresT = pdtobjIn->lpVtbl->GetData(pdtobjIn, &fmte, &medium);
            if (SUCCEEDED(hresT))
            {
                HGLOBAL hmem;
                if (medium.pUnkForRelease)
                {
                    // We need to clone the hGlobal.
                    UINT cbMem = GlobalSize(medium.hGlobal);
                    hmem = GlobalAlloc(GPTR, cbMem);
                    if (hmem)
                    {
                        hmemcpy((LPVOID)hmem, GlobalLock(medium.hGlobal), cbMem);
                        GlobalUnlock(medium.hGlobal);
                    }
                    SHReleaseStgMedium(&medium);
                }
                else
                {
                    // We don't need to clone the hGlobal.
                    hmem = medium.hGlobal;
                }

                if (hmem)
                    DataObj_SetGlobal(*ppdtobjOut, acf[i], hmem);
            }
        }
    }

    return hres;
}
Ejemplo n.º 15
0
long	UPSF::xxxx_To_xxxx(
	HGLOBAL&	hUniv,
	long&			univSize,
	void*			natvPtr,
	long			natvLen)

	{
	univSize = natvLen;
	if((hUniv = GlobalReAlloc(hUniv, natvLen, MEMFLAGS))==NULL)
		return AUPSF_MEMORYERROR;

	void*	univPtr = GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

	hmemcpy(univPtr, natvPtr, natvLen);
	GlobalUnlock(hUniv);
	return AUPSF_NOERROR;
	}
Ejemplo n.º 16
0
Handle DupHandle(Handle oldhand)
{
	LPSTR		newptr, oldptr;
	Handle	newhand;
	size_t		size;

	oldptr = *oldhand;		// ptr to actual data

	size = WSizeBuffer(oldptr);

	newhand = NewHandle(Convert_size_t_to_int(size));
	newptr = *newhand;

#ifdef WIN32
	memcpy(newptr, oldptr, size);
#else
	hmemcpy(newptr, oldptr, size);
#endif
	return newhand;
}
Ejemplo n.º 17
0
long	UPSF::BitmapInfo_To_UBit(
	HGLOBAL&	hUniv,
	long&			univSize,
	void*			natvPtr,
	long			natvLen)

	{
	// this windows bitmap format is the UPSF bitmap format
  univSize = natvLen;
	if(!(hUniv = GlobalReAlloc(hUniv, univSize, MEMFLAGS)))
		return AUPSF_MEMORYERROR;

	void*	univPtr = GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

	hmemcpy(univPtr, natvPtr, natvLen);

	GlobalUnlock(hUniv);
  return AUPSF_NOERROR;
	}
Ejemplo n.º 18
0
long	UPSF::DWord_To_UNum(
	HGLOBAL&	hUniv,
	long&			univSize,
	DWORD			dword)

	{
	char	szBuffer[80];

	sprintf(szBuffer, "%lu", dword);
	univSize = strlen(szBuffer);

	if(!(hUniv = GlobalReAlloc(hUniv, univSize, MEMFLAGS)))
		return AUPSF_MEMORYERROR;

	void*	univPtr = GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

	hmemcpy(univPtr, szBuffer, univSize);
	GlobalUnlock(hUniv);
	return AUPSF_NOERROR;
	}
Ejemplo n.º 19
0
long	UPSF::LDouble_To_UNum(
	HGLOBAL&		hUniv,
	long&				univSize,
	long double	LDouble)

	{
	char	szBuffer[80];

	sprintf(szBuffer, "%.20Lg", LDouble);
	univSize = strlen(szBuffer);

	if(!(hUniv = GlobalReAlloc(hUniv, univSize, MEMFLAGS)))
		return AUPSF_MEMORYERROR;

	void*	univPtr = GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

	hmemcpy(univPtr, szBuffer, univSize);
  GlobalUnlock(hUniv);
	return AUPSF_NOERROR;
	}
Ejemplo n.º 20
0
LPVOID DSDataObj_SaveToMemory(IDataObject *pdtobj, UINT cntFmt, UINT fmts[], BOOL fShared)
{
    MEM_CRAP *pmem = NULL;      // assume error
    UINT cbDataSize = 0;
    UINT iNumFormats = 0;
    UINT i;

    if (!ISIDLDATA(pdtobj))
        return NULL;

    for (i = 0; i < cntFmt; i++)
    {
        STGMEDIUM medium;
        FORMATETC fmte = {fmts[i], NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};

        if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium)))
        {
            cbDataSize += GlobalSize(medium.hGlobal);
            iNumFormats++;
            SHReleaseStgMedium(&medium);
        }
    }

    if (cbDataSize)
    {
        UINT cbTotal = SIZEOF(MEM_CRAP) +
                       (iNumFormats * SIZEOF(UINT) * 2) + // cfFormat, cbFormat
                       cbDataSize;

        pmem = fShared ? Alloc(cbTotal) : GlobalAlloc(GPTR, cbTotal);
        if (pmem)
        {
            UNALIGNED UINT *pdata = (UNALIGNED UINT *)((LPBYTE)pmem + SIZEOF(MEM_CRAP));

            pmem->iNumFormats = iNumFormats;
            // ultra cool HACK....
            pmem->offVtbl = (ULONG)pdtobj->lpVtbl - (ULONG)&c_CDS_IDLDataVtbl;

            for (i = 0; i < cntFmt; i++)
            {
                STGMEDIUM medium;
                FORMATETC fmte = {fmts[i], NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};

                if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium)))
                {
                    UINT cbData = GlobalSize(medium.hGlobal);
                    *pdata++ = fmts[i];
                    *pdata++ = cbData;
                    hmemcpy(pdata, (LPVOID)medium.hGlobal, cbData);

                    pdata = (UNALIGNED UINT *)((LPBYTE)pdata + cbData);

                    SHReleaseStgMedium(&medium);

                    Assert(((UINT)pdata - (UINT)pmem) <= cbTotal);
                }
            }
        }
    }
    return pmem;
}
Ejemplo n.º 21
0
BOOL ClipboardCopy(void)
{	HGLOBAL	  hMem;
	char huge *pMem;
	LONG	  lSize;
	BOOL	  WideCharConvert = FALSE;
	UINT	  Codepage = 0;

	/*prepare resources...*/
	if (!SelectCount) {
		Error(209);
		return (FALSE);
	}
	if (!OpenClipboard(hwndMain)) {
		ErrorBox(MB_ICONEXCLAMATION, 302);
		return (FALSE);
	}
	lSize = SelectCount + sizeof(BinaryPart);
	if (!(GetVersion() & 0x80000000U))
		if (UtfEncoding || CharSet == CS_OEM || AnsiCodePage != CP_ACP) {
			/*copy as wide chars...*/
			Codepage = CharSet == CS_OEM ? OemCodePage : AnsiCodePage;
			if (UtfEncoding != 16)
				lSize <<= 1;
			WideCharConvert = TRUE;
		}
	hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, lSize);
	if (!hMem) {
		CloseClipboard();
		ErrorBox(MB_ICONEXCLAMATION, 304);
		return (FALSE);
	}
	pMem = GlobalLock(hMem);
	if (pMem == NULL) {
		CloseClipboard();
		GlobalFree(hMem);
		ErrorBox(MB_ICONEXCLAMATION, 305);
		return (FALSE);
	}

	/*copy into memory...*/
	{	POSITION Pos;
		ULONG    Bytes = SelectCount;
		UINT     i;
		BOOL	 NullbyteFound = FALSE;

		Pos = SelectStart;
		if (UtfEncoding && WideCharConvert) {
			POSITION EndPos = Pos;
			WCHAR	 *pw = (WCHAR *)pMem;

			Advance(&EndPos, Bytes);
			//if (CountBytes(&Pos) != 0 || (i = CharAndAdvance(&Pos)) == C_BOM)
			i = CharAndAdvance(&Pos);
			for (;;) {
				if (ComparePos(&Pos, &EndPos) > 0)
					break;
				if (i == C_EOF) break;
				if (i == C_CRLF) {
					if ((char *)pw + 6 > pMem + lSize)
						break;
					*pw++ = '\r';
					i = '\n';
				}
				if ((char *)pw + 4 > pMem + lSize)
					break;
				*pw++ = i;
				i = CharAndAdvance(&Pos);
			}
			*pw = '\0';
		} else while (Bytes) {
			LPSTR p, pNull;

			CharAt(&Pos);	/*normalize position and enforce page load*/
			i = Pos.p->Fill - Pos.i;
			if (i > Bytes) i = (UINT)Bytes;
			p = Pos.p->PageBuf + Pos.i;
			if (!NullbyteFound && (pNull = _fmemchr(p, '\0', i)) != NULL) {
				if (ErrorBox(MB_ICONINFORMATION|MB_OKCANCEL, 328) == IDCANCEL) {
					CloseClipboard();
					GlobalUnlock(hMem);
					GlobalFree(hMem);
					return (FALSE);
				}
				NullbyteFound = TRUE;
				i = pNull - p + 1;
				if (CharSet == CS_EBCDIC) EbcdicConvert(pMem, p, i);
				else if (WideCharConvert) {
					MultiByteToWideChar(Codepage, 0, p, i, (WCHAR*)pMem, i);
					pMem += i;
				} else hmemcpy(pMem, p, i);
				pMem  += i;
				Bytes -= --i;
				Pos.i += i;
				i = wsprintf(BinaryPart, BinaryFormat, Bytes);
				if (WideCharConvert) {
					MultiByteToWideChar(Codepage, 0, BinaryPart, i,
													 (WCHAR*)pMem, i);
					pMem += i;
				} else hmemcpy(pMem, BinaryPart, i);
				pMem += i;
				continue;
			}
			if (CharSet == CS_EBCDIC)
				EbcdicConvert(pMem, Pos.p->PageBuf + Pos.i, i);
			else if (WideCharConvert) {
				MultiByteToWideChar(Codepage, 0, Pos.p->PageBuf + Pos.i, i,
												 (WCHAR*)pMem, i);
				if (CharSet == CS_OEM) {
					extern WCHAR const MapLowOemToUtf16[33];
					PWSTR			   pw = (WCHAR*)pMem;
					INT				   j;

					for (j=i; j>0; --j) {
						if (*pw < ' ') {
							switch (*pw) {
							case '\0':
							case '\t':
							case '\n':
							case '\r':	break;
							default:	*pw = MapLowOemToUtf16[*pw];
							}
						}
						++pw;
					}
				}
				pMem += i;
			} else hmemcpy(pMem, Pos.p->PageBuf + Pos.i, i);
			pMem  += i;
			Bytes -= i;
			Pos.i += i;
		}
	}

	/*unlock...*/
	GlobalUnlock(hMem);

	/*clear previous clipboard contents...*/
	if (!EmptyClipboard()) {
		CloseClipboard();
		GlobalFree(hMem);
		ErrorBox(MB_ICONEXCLAMATION, 303);
		return (FALSE);
	}

	/*finally, publish...*/
	SetClipboardData(WideCharConvert ? CF_UNICODETEXT
									 : CharSet == CS_OEM ? CF_OEMTEXT
														 : CF_TEXT, hMem);
	CloseClipboard();
	CheckClipboard();
	return (TRUE);
}
Ejemplo n.º 22
0
// Note we only support 8bpp DIBs here, and..
// there is no regard for color table matching between the DIBs
//************************************************************************
void CDib::DibBlt(PDIB pdibDst, int dstLeft, int dstTop, int dstWidth, int dstHeight,
				  int srcLeft, int srcTop, int srcWidth, int srcHeight,
				  BOOL bTransparent, LPRGBTRIPLE lpRGB, LPTR lpLut, HPALETTE hPal )
//************************************************************************
{
HPTR pSrc, pDst;
int iScanS, iScanD, iOverrun;

if ( !pdibDst )
	return;
if ( GetBitCount() != 8 )
	return;
if ( pdibDst->GetBitCount() != 8 )
	return;

// Check the coordinate bounds, to avoid an out of range pointer
if ( srcLeft < 0 )	{ dstLeft -= srcLeft; srcWidth	+= srcLeft; dstWidth  += srcLeft; srcLeft = 0; }
if ( srcTop	 < 0 )	{ dstTop  -= srcTop;  srcHeight += srcTop;	dstHeight += srcTop;  srcTop  = 0; }
if ( dstLeft < 0 )	{ srcLeft -= dstLeft; srcWidth	+= dstLeft; dstWidth  += dstLeft; dstLeft = 0; }
if ( dstTop	 < 0 )	{ srcTop  -= dstTop;  srcHeight += dstTop;	dstHeight += dstTop;  dstTop  = 0; }

if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0 )
	return;

if ( srcLeft - GetWidth()	   >= 0 )	return;
if ( srcTop	 - abs(GetHeight()) >= 0 )	return;
if ( dstLeft - pdibDst->GetWidth()		   >= 0 )	return;
if ( dstTop	 - abs(pdibDst->GetHeight()) >= 0 ) return;

if ( (iOverrun = srcLeft + srcWidth	 - GetWidth())		> 0 )	{ srcWidth	-= iOverrun; dstWidth  -= iOverrun; }
if ( (iOverrun = srcTop	 + srcHeight - abs(GetHeight())) > 0 )	{ srcHeight -= iOverrun; dstHeight -= iOverrun; }
if ( (iOverrun = dstLeft + dstWidth	 - pdibDst->GetWidth())		> 0 )	{ dstWidth	-= iOverrun; srcWidth  -= iOverrun; }
if ( (iOverrun = dstTop	 + dstHeight - abs(pdibDst->GetHeight())) > 0 ) { dstHeight -= iOverrun; srcHeight -= iOverrun; }

if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0 )
	return;

// Get pointers to the start points in the source and destination
if ( !(pSrc = GetXY( srcLeft, srcTop )) )
	return;
if ( !(pDst = pdibDst->GetXY( dstLeft, dstTop )) )
	return;

// Get the scan line widths of each DIB.
iScanS = GetWidthBytes();
iScanD = pdibDst->GetWidthBytes();

// Upside down DIBs have to move backwards
if ( GetHeight() > 0 )
	 iScanS = -iScanS;
if ( pdibDst->GetHeight() > 0 )
	 iScanD = -iScanD;

if ( !bTransparent )
	{ // Copy the lines.
	while ( --srcHeight >= 0 )
		{
		hmemcpy( pDst, pSrc, srcWidth );
		pSrc += iScanS;
		pDst += iScanD;
		}
	}
else
if (lpRGB)
	{ // Copy lines with transparency mask
	WORD src, dst, wMini;
	BYTE dstPixel, srcColor, red, green, blue;
	int iSinc, iDinc, iCount;
						 
	LPRGBQUAD pTable = GetColors();
	if (lpLut)
		{
		wMini = RGB3toMiniRGB(lpRGB->rgbtRed, lpRGB->rgbtGreen, lpRGB->rgbtBlue);
		srcColor = lpLut[wMini];				
		}
	else
	if (hPal)
		{
		srcColor = (BYTE)GetNearestPaletteIndex( hPal, RGB(lpRGB->rgbtRed, lpRGB->rgbtGreen, lpRGB->rgbtBlue) );
		}
	else
		srcColor = 0;

	iSinc = iScanS - srcWidth; // Source increment value
	iDinc = iScanD - srcWidth; // Destination increment value
	while ( --srcHeight >= 0 )
		{
		iCount = srcWidth;	  // Number of pixels to scan.
		while ( --iCount >= 0 )
			{
			src = (WORD)(*pSrc++);
			// Copy pixel only if it isn't transparent.
			if (src == 0)
				pDst++;
			else
			if (src == 255)
				*pDst++ = srcColor;
			else
				{
				if (src > 127)
					++src;
				dst = 256-src;
				dstPixel = *pDst;
				red = (BYTE)((((WORD)lpRGB->rgbtRed * src) + ((WORD)pTable[dstPixel].rgbRed * dst)) >> 8);
				green = (BYTE)((((WORD)lpRGB->rgbtGreen * src) + ((WORD)pTable[dstPixel].rgbGreen * dst)) >> 8);
				blue = (BYTE)((((WORD)lpRGB->rgbtBlue * src) + ((WORD)pTable[dstPixel].rgbBlue * dst)) >> 8);
				if (lpLut)
					{
					wMini = RGB3toMiniRGB(red, green, blue);
					*pDst++ = lpLut[wMini];					
					}
				else
				if (hPal)
					{
					*pDst++ = (BYTE)GetNearestPaletteIndex( hPal, RGB(red, green, blue) );
					}
				else
					{
					pDst++;
					}
				}
			}

		pSrc += iSinc;
		pDst += iDinc;
		}
	}
else
	{ // Copy lines with transparency.
Ejemplo n.º 23
0
BOOL RleFile_Init(RLEFILE *prle, LPVOID pFile, HANDLE hRes, DWORD dwFileLen)
{
    UNALIGNED DWORD PTR *pdw;
    UNALIGNED DWORD PTR *pdwEnd;
    DWORD dwRiff;
    DWORD dwType;
    DWORD dwLength;
    int stream;

    if (prle->pFile == pFile)
        return TRUE;

    RleFile_Close(prle);
    prle->pFile = pFile;
    prle->hRes = hRes;

    if (prle->pFile == NULL)
        return FALSE;

    //
    //  now that the file is in memory walk the memory image filling in
    //  interesting stuff.
    //
    pdw = (UNALIGNED DWORD PTR *)prle->pFile;
    dwRiff = *pdw++;
    dwLength = *pdw++;
    dwType = *pdw++;

    if ((dwFileLen > 0) && (dwLength > dwFileLen)) {
        // File is physically shorter than the length written in its header.
        // Can't handle it.
        goto exit;
    }

    if (dwRiff != mmioFOURCC('R', 'I', 'F', 'F'))
        goto exit;      // not even a RIFF file

    if (dwType != formtypeAVI)
        goto exit;      // not a AVI file

    pdwEnd = (DWORD PTR *)((BYTE PTR *)pdw + dwLength-4);
    stream = 0;

    while (pdw < pdwEnd)
    {
        dwType = *pdw++;
        dwLength = *pdw++;

        switch (dwType)
        {
            case mmioFOURCC('L', 'I', 'S', 'T'):
                dwType = *pdw++;
                dwLength -= 4;

                switch (dwType)
                {
                    case listtypeAVIMOVIE:
                        prle->pMovie = (LPVOID)pdw;
                        break;

                    case listtypeSTREAMHEADER:
                    case listtypeAVIHEADER:
                        dwLength = 0;           // decend
                        break;

                    default:
                        break;                  // ignore
                }
                break;

            case ckidAVIMAINHDR:
                prle->pMainHeader = (MainAVIHeader PTR *)pdw;

                prle->NumFrames = (int)prle->pMainHeader->dwTotalFrames;
                prle->Width     = (int)prle->pMainHeader->dwWidth;
                prle->Height    = (int)prle->pMainHeader->dwHeight;
                prle->Rate      = (int)(prle->pMainHeader->dwMicroSecPerFrame/1000);

                if (prle->pMainHeader->dwInitialFrames != 0)
                    goto exit;

                if (prle->pMainHeader->dwStreams > 2)
                    goto exit;

                break;

            case ckidSTREAMHEADER:
                stream++;

                if (prle->pStream != NULL)
                    break;

                if (((AVIStreamHeader PTR *)pdw)->fccType != streamtypeVIDEO)
                    break;

                prle->iStream = stream-1;
                prle->pStream = (AVIStreamHeader PTR*)pdw;

                if (prle->pStream->dwFlags & AVISF_VIDEO_PALCHANGES)
                    goto exit;
                break;

            case ckidSTREAMFORMAT:
                if (prle->pFormat != NULL)
                    break;

                if (prle->pStream == NULL)
                    break;

                prle->pFormat = (LPBITMAPINFOHEADER)pdw;

                if (prle->pFormat->biSize != sizeof(BITMAPINFOHEADER))
                    goto exit;

                if (prle->pFormat->biCompression != 0 &&
                    prle->pFormat->biCompression != BI_RLE8)
                    goto exit;

                if (prle->pFormat->biWidth != prle->Width)
                    goto exit;

                if (prle->pFormat->biHeight != prle->Height)
                    goto exit;

                hmemcpy(&prle->bi, prle->pFormat, dwLength);
                prle->bi.biSizeImage = 0;
                prle->FullSizeImage = ((prle->bi.biWidth * prle->bi.biBitCount + 31) & ~31)/8 * prle->bi.biHeight;
                break;

            case ckidAVINEWINDEX:
                prle->pIndex = (AVIINDEXENTRY PTR *)pdw;
                break;
        }

        pdw = (DWORD PTR *)((BYTE PTR *)pdw + ((dwLength+1)&~1));
    }

    //
    //  if the file has nothing in it we care about get out, note
    //  we dont need a index, we do need some data though.
    //
    if (prle->NumFrames == 0 ||
        prle->pMainHeader == NULL ||
        prle->pStream == NULL ||
        prle->pFormat == NULL ||
        prle->pMovie == NULL )
    {
        goto exit;
    }

    //
    //  if we cared about a palette we would create it here.
    //

    //
    //  file open'ed ok seek to the first frame.
    //
    prle->iFrame = -42;
    RleFile_Seek(prle, 0);
    return TRUE;

exit:
    RleFile_Close(prle);
    return FALSE;
}
Ejemplo n.º 24
0
/* -------------------------------------------------------------------- */
void slidemsgTab(int howmany)
{
    hmemcpy(&msgTab[howmany], &msgTab[0],(long)
      ((long)( (long)cfg.nmessages - (long)howmany) * (long)(sizeof(*msgTab)) )
    );
}
Ejemplo n.º 25
0
BOOL EnterDeleteForUndo(PPOSITION Pos, ULONG Length, WORD Flags)
	/*Flags: 1=enter as selected, reselect after undo
	 *		 2=remove last undo information, cannot be undone later
	 */
{	LPBYTE   NewBuf = NULL;
	HGLOBAL  NewMem = 0;
	POSITION p;
	ULONG	 Inx;
	ULONG	 ByteCount = CountBytes(Pos);
	ULONG	 OldSize;
	LPUNDO	 Reallocated = NULL;

	if (Flags & 2) {
		if (!LastUndo->Inserted) return (FALSE);
		--LastUndo->Inserted;
		return (TRUE);
	}
	CheckForUndoneToRelease(TRUE);
	EnableUndo();
	if (!LastUndo ||
		(LastUndo->Pos != (ULONG)-1
		 && (LastUndo->Pos != ByteCount - LastUndo->Inserted
			 || (int)(Flags & 1) != ((LastUndo->Flags & UD_SELECT) != 0)
			 || !(LastUndo->Flags & UD_GLOBALMEM
				  && LastUndo->DelFill+Length > 64000))))
		if (!NewUndo()) return (FALSE);
	if (LastUndo->Pos == (ULONG)-1) LastUndo->Pos = ByteCount;
	if (!LastUndo->DelFill) {
		OldSize = 0;
		if (Length > 64000) {
			LastUndo->Flags |= UD_GLOBALMEM;
			NewMem = GlobalAlloc(GMEM_MOVEABLE, Length);
			if (NewMem) NewBuf = GlobalLock(NewMem);
		} else {
			assert(!(LastUndo->Flags & UD_GLOBALMEM));
			LastUndo->Flags &= ~UD_GLOBALMEM;
			Reallocated = (LPUNDO)_frealloc(LastUndo,
											(size_t)(sizeof(UNDO)+Length));
			if (Reallocated == NULL) return (FALSE);
			NewBuf = (LPBYTE)Reallocated + sizeof(UNDO);
		}
	} else {
		if (LastUndo->Flags & UD_GLOBALMEM) {
			OldSize = GlobalSize(LastUndo->DelMem);
			if (LastUndo->DelFill + Length > OldSize) {
				NewMem = GlobalReAlloc(LastUndo->DelMem,
									   LastUndo->DelFill + Length,
									   GMEM_MOVEABLE);
			} else NewMem = LastUndo->DelMem;
			if (NewMem) NewBuf = GlobalLock(NewMem);
		} else {
			Reallocated = (LPUNDO)_frealloc(LastUndo,
											(size_t)(sizeof(UNDO) + Length
														  + LastUndo->DelFill));
			if (Reallocated == NULL) return (FALSE);
			NewBuf = (LPBYTE)Reallocated + sizeof(UNDO);
			OldSize = 0;
		}
	}
	UndoMemUsed -= OldSize;
	if (NewBuf == NULL) {
		if (NewMem) GlobalFree(NewMem);
		return (FALSE);
	}
	if (Reallocated!=NULL && Reallocated!=LastUndo) {
		/*correct any references to this object...*/
		if (NextSequenceUndo == LastUndo) NextSequenceUndo = Reallocated;
		if (Reallocated->Prev != NULL) Reallocated->Prev->Next = Reallocated;
		if (FirstUndo == LastUndo) FirstUndo = Reallocated;
		LastUndo = Reallocated;
	}
	Inx = LastUndo->DelFill;
	if (NewMem) {
		UndoMemUsed += GlobalSize(NewMem);
		LastUndo->DelMem = NewMem;
	} else UndoMemUsed += Length;
	LastUndo->DelFill += Length;
	if (Flags & 1) LastUndo->Flags |= UD_SELECT;
	p = *Pos;
	while (Length) {
		UINT n, c = CharAt(&p);

		if (c == C_EOF) {
			/*should not occur!...*/
			assert(c != C_EOF);		/*!?*/
			LastUndo->DelFill -= Length;
			break;
		}
		if (Length > p.p->Fill - p.i) n = p.p->Fill - p.i;
		else n = (UINT)Length;
		assert(p.p->PageBuf);
		assert(n > 0);
		assert(n <= PAGESIZE);
		assert(p.i+n <= PAGESIZE);
		hmemcpy(NewBuf + Inx, p.p->PageBuf + p.i, n);
		Inx += n;
		p.i += n;
		Length -= n;
	}
	if (NewMem) GlobalUnlock(NewMem);
	return (TRUE);
}
Ejemplo n.º 26
0
BOOL CWindowsMetaFile::GetMetaFile(HINSTANCE hInstance, LPCSTR pszResource, LPCSTR pszType, ALDUS_WMF_HEADER* pAldusHeader, METAHEADER* pHeader, HMETAFILE* phMetaFile)
{
	BOOL fSuccess = FALSE;
	
	ASSERT(hInstance != NULL);
	ASSERT(pszResource != NULL);
	ASSERT(pszType != NULL);
								
	HRSRC hrResource;
	
	hrResource = FindResource(hInstance, pszResource, pszType);
	
	if (hrResource != NULL)
	{
		HGLOBAL hResource;
		
		hResource = LoadResource(hInstance, hrResource);
		
		if (hResource != NULL)
		{
			LPBYTE pResource;

#ifdef WIN32
			DWORD dwGlobalSize = 0;
#else
			DWORD dwGlobalSize = GlobalSize(hResource);
#endif

			pResource = (LPBYTE)LockResource(hResource);

			if (pResource != NULL)
			{
				ASSERT((dwGlobalSize == 0) || (dwGlobalSize >= sizeof(ALDUS_WMF_HEADER)+sizeof(METAHEADER)));
				if ((dwGlobalSize == 0) || (dwGlobalSize >= sizeof(ALDUS_WMF_HEADER)+sizeof(METAHEADER)))
				{
					// Save the Aldus header if the user has requested it.
					
					if (pAldusHeader != NULL)
					{
						*pAldusHeader = *((ALDUS_WMF_HEADER*)pResource);
					}
						
					// Validate the Aldus header.
					
					if (((ALDUS_WMF_HEADER*)pResource)->key == ALDUS_WMF_KEY)
					{
						// Save the metafile header if the user has requested it.
						
						if (pHeader != NULL)
						{
							*pHeader = *((METAHEADER*)(pResource+sizeof(ALDUS_WMF_HEADER)));
						}
						
						// Get the size from the metafile header.
						
						DWORD dwSize = ((METAHEADER*)(pResource+sizeof(ALDUS_WMF_HEADER)))->mtSize*2;
						
						if (dwGlobalSize != 0 && dwGlobalSize < sizeof(ALDUS_WMF_HEADER)+dwSize)
						{
							// This can be cause by the WMF files where mtSize includes the
							// size of the Aldus header. Attempt to adjust for this by
							// decreasing mtSize.
							
							dwSize -= sizeof(ALDUS_WMF_HEADER);
						}
						
						if (dwSize != 0)
						{
							ASSERT((dwGlobalSize == 0) || (dwGlobalSize >= sizeof(ALDUS_WMF_HEADER)+dwSize));
							if ((dwGlobalSize == 0) || (dwGlobalSize >= sizeof(ALDUS_WMF_HEADER)+dwSize))
							{
								// If the user wants a metafile handle, continue.
								// Otherwise, return TRUE.
								
								fSuccess = phMetaFile == NULL;
								
								if (!fSuccess)
								{
									*phMetaFile = NULL;
									
									// Allocate the memory to hold the metafile data.
									
									HGLOBAL hMetaFileData;
									
									hMetaFileData = GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE, dwSize);
									
									if (hMetaFileData != NULL)
									{
										LPVOID pMetaFileData;
										
										pMetaFileData = GlobalLock(hMetaFileData);
										
										if (pMetaFileData != NULL)
										{
											// Copy the meta file data from the resource into the new memory block.
											// We have now read the data, make a metafile from it.
	
#ifdef WIN32
											memcpy(pMetaFileData, (LPVOID)(pResource+sizeof(ALDUS_WMF_HEADER)), dwSize);
											*phMetaFile = ::SetMetaFileBitsEx(dwSize, (LPBYTE)pMetaFileData);
											GlobalUnlock(hMetaFileData);
											pMetaFileData = NULL;
#else
											hmemcpy(pMetaFileData, (LPVOID)(pResource+sizeof(ALDUS_WMF_HEADER)), dwSize);
											*phMetaFile = ::SetMetaFileBits(hMetaFileData);
										
											if (*phMetaFile == NULL)
											{
												GlobalUnlock(hMetaFileData);
												pMetaFileData = NULL;
											}
#endif

											fSuccess = *phMetaFile != NULL;
										}
									
#ifdef WIN32
										GlobalFree(hMetaFileData);
										hMetaFileData = NULL;
#else
										if (*phMetaFile == NULL)
										{
											GlobalFree(hMetaFileData);
											hMetaFileData = NULL;
										}
#endif
									}
								}
							}
						}
					}
				}
				
				GlobalUnlock(hResource);
				pResource = NULL;
			}
			
			FreeResource(hResource);
			hResource = NULL;
		}
	}
	
	return fSuccess;
}
Ejemplo n.º 27
0
ERRORCODE MemoryDevice::read(LPVOID ptr, ST_DEV_IO_SIZE size, ST_DEV_IO_SIZE *size_read /*=NULL*/)
{
	if (m_Position < 0 || m_Position >= m_Length)
	{
		if (size_read != NULL)
		{
			*size_read = 0;
			return ERRORCODE_None;
		}
	/* Can't read from here. */
		return ERRORCODE_Read;
	}

	ST_DEV_POSITION Size = (ST_DEV_POSITION)size;

	if (m_Position + Size > m_Length)
	{
		if (size_read == NULL)
		{
		// Just not enough data to even try.
			return ERRORCODE_Read;
		}
		Size = m_Length - m_Position;
	}

	int nBlocks = m_Pieces.count();
	ST_DEV_IO_SIZE AmountRead = 0;			// How much we actually have read.

/*
// Prep to search for blocks.
// If we do any block "remembering", we can do it here to start further on.
*/

	int nBlock = 0;
	MEMORY_DEVICE_PIECE* pPiece = NULL;

/*
// Find the block the data starts in.
*/

	for (; nBlock < nBlocks; nBlock++)
	{
		pPiece = (MEMORY_DEVICE_PIECE*)m_Pieces.get_element(nBlock);

		if (pPiece->m_Start + pPiece->m_lSize > m_Position)
		{
			break;
		}
	}

	if (nBlock == nBlocks)
	{
		return ERRORCODE_IntError;
	}

/*
// Do the reading thing now.
*/

	LPBYTE pDest = (LPBYTE)ptr;

	while (Size != 0)
	{
		// Compute how far into this block we need to start reading.
		ST_DEV_POSITION Offset = m_Position - pPiece->m_Start;
		// Compute how much data is left in the block.
		ST_DEV_POSITION ReadSize = pPiece->m_lSize - Offset;
		if (ReadSize > Size)
		{
			ReadSize = Size;
		}

#ifdef WIN32
		BYTE* pData = (BYTE*)pPiece->m_pData;
#else
		BYTE huge* pData = (BYTE huge*)pPiece->m_pData;
#endif

		// Offset to data.
		pData += Offset;

		// Do the copy.
#ifdef WIN32
		memcpy(pDest, pData, ReadSize);
#else
		hmemcpy(pDest, pData, ReadSize);
#endif

		// Advance the destination pointer.
		pDest += (int)ReadSize;

		// Update the copy variables.
		m_Position += ReadSize;
		AmountRead += (ST_DEV_IO_SIZE)ReadSize;
		if ((Size -= ReadSize) == 0)
		{
			break;
		}

		// Advance to the next block. This 'if' is a sanity check only.
		if (++nBlock == nBlocks)
		{
			return ERRORCODE_IntError;
		}
		pPiece++;
	}

/* Report how much we read if that is desired. */

	if (size_read != NULL)
	{
		*size_read = AmountRead;
	}

/* No errors to report. */

	return ERRORCODE_None;
}
Ejemplo n.º 28
0
/******************************************************************************
 *  void OnNewWindow(HWND hwnd)
 * 
 *  Window/New Window menu item selected
 *
 *  parameters:
 *      hwnd - window handle of active child window or NULL if none active
 ******************************************************************************/
static void OnNewWindow(HWND hwnd)
{                
    char sz[_MAX_PATH + 1];
    MDICREATESTRUCT mcs;
    CHILDINSTANCEDATA PICFAR* pInstance = ChildGetInstanceData(hwnd);
    CHILDINSTANCEDATA PICFAR* pNew;

    if ( pInstance == 0 )
        return; /* Window/New Window should have been grayed */

    pNew = (CHILDINSTANCEDATA PICFAR*)MiscGlobalAllocPtr(
        sizeof(*pNew) + lstrlen(pInstance->pszFilename) + 1, IDS_NEWWINDOWOUTOFMEMORY);
        /* "There was not enough memory to create the new window." */
    if ( pNew == 0 )
        return;
        
    *pNew = *pInstance; /* this has the effect of duplicating the modified state
                            of the window as well as of duplicating the src picparm
                            Duplicating the src picparm this way works only because
                            we don't allocate comments, appfields, etc in the 
                            pegasusquery picparm, so it's self-contained */
    pNew->pszFilename  = (LPSTR)pNew + sizeof(*pNew);
    lstrcpy(pNew->pszFilename, pInstance->pszFilename);                            
    pNew->xWindowOrg   = 0;     /* not scrolled to start out */
    pNew->yWindowOrg   = 0;    
    pNew->bRButtonDown = FALSE;             /* should be FALSE anyway */
    assert(!pInstance->bRButtonDown);
    pNew->bLButtonDown = FALSE;             /* should be FALSE anyway */
    assert(!pInstance->bLButtonDown);
    pNew->bDisableSetScrollRanges = FALSE;  /* should be FALSE anyway */
    assert(!pInstance->bDisableSetScrollRanges);
    pNew->hPalette     = NULL;  /* this window will need its own hpalette */
    pNew->nWaitCursor  = 0;
    assert(pInstance->nWaitCursor == 0);

    /* duplicate the source image */
    pNew->pSrc = MiscGlobalAllocPtr(pNew->dwSrcLen, IDS_NEWWINDOWOUTOFMEMORY);
        /* "There was not enough memory to create the new window." */
    if ( pNew->pSrc == 0 )
        {
        MiscGlobalFreePtr(&pInstance);
        return;
        }
    hmemcpy(pNew->pSrc, pInstance->pSrc, pNew->dwSrcLen);

    /* duplicate the dib unless it's a pointer into the source image */
    if ( pInstance->pDib < pInstance->pSrc ||
         pInstance->pDib >= pInstance->pSrc + pInstance->dwSrcLen )
        {
        pNew->pDib = MiscGlobalAllocPtr(pNew->dwDibLen, IDS_NEWWINDOWOUTOFMEMORY);
            /* "There was not enough memory to create the new window." */
        if ( pNew->pDib == 0 )
            {
            MiscGlobalFreePtr(&pNew->pSrc);
            MiscGlobalFreePtr(&pInstance);
            return;
            }
        hmemcpy(pNew->pDib, pInstance->pDib, pNew->dwDibLen);
        }
    else
        pNew->pDib = pNew->pSrc + ( pInstance->pDib - pInstance->pSrc );

    /* duplicate the dib picparm - through the opcode because there may be comments
        or appfields or overtext or some such which need to be separately allocated,
        and which only the opcode knows enough to allocate
        if not implemented, then old is copied over new above when old instance is
        copied to new instance */
    if ( pNew->pOpenOp->pfnDupPicParm != 0 &&
         !(*pNew->pOpenOp->pfnDupPicParm)(&pInstance->DibPicParm, &pNew->DibPicParm) )
        {
        (*pNew->pOpenOp->pfnCleanup)(pNew->pDib, 0, 0);
        MiscGlobalFreePtr(&pNew->pSrc);
        MiscGlobalFreePtr(&pInstance);
        ErrorMessage(STYLE_ERROR, IDS_NEWWINDOWOUTOFMEMORY);
        /* "There was not enough memory to create the new window." */
        return;
        }

    /* duplicate image options settings */
    if ( !CtrlDataDup(
            (LPCTRLINITDATA)pInstance->pOpenData,
            (LPCTRLINITDATA PICFAR *)&pNew->pOpenData) )
        {
        (*pNew->pOpenOp->pfnCleanup)(pNew->pDib, &pInstance->DibPicParm, 0);
        MiscGlobalFreePtr(&pNew->pSrc);
        MiscGlobalFreePtr(&pInstance);
        ErrorMessage(STYLE_ERROR, IDS_NEWWINDOWOUTOFMEMORY);
        /* "There was not enough memory to create the new window." */
        return;
        }

    /* Create MDI child window */
    GetWindowText(hwnd, sz, sizeof(sz));
    mcs.szClass    = MDICHILD_CLASSNAME;
    mcs.szTitle    = pInstance->pszFilename;
    mcs.hOwner     = hinstThis;
    mcs.x          = CW_USEDEFAULT;
    mcs.y          = CW_USEDEFAULT;
    mcs.cx         = CW_USEDEFAULT;
    mcs.cy         = CW_USEDEFAULT;
    mcs.style      = WS_HSCROLL | WS_VSCROLL;
    mcs.lParam     = (LPARAM)pNew;
    if ( ChildGetActive() != NULL && IsZoomed(ChildGetActive()) )
        mcs.style |= WS_MAXIMIZE;
    // tell the MDI Client to create the child 
    LockWindowUpdate(hwndMDIClient);
    hwnd = FORWARD_WM_MDICREATE(hwndMDIClient, (LPMDICREATESTRUCT)&mcs, SendMessage);
    if ( hwnd == NULL )
        {
        LockWindowUpdate(NULL);
        (*pNew->pOpenOp->pfnCleanup)(pNew->pDib, &pInstance->DibPicParm, pNew->pOpenData);
        MiscGlobalFreePtr(&pNew->pSrc);
        MiscGlobalFreePtr(&pInstance);
        ErrorMessage(STYLE_ERROR, IDS_NEWWINDOWCREATE);
        /* "An unexpected error occurred creating the new window." */
        return;
        }
    ShowWindow(hwnd, SW_HIDE);
    LockWindowUpdate(NULL);
    UpdateWindow(hwndMDIClient);

    /* make sure the window isn't bigger than the image */
    ChildSetWindowSize(hwnd);
}
Ejemplo n.º 29
0
void TABLE::CreateEditControl()

  {
  if(hEdit || TABLE_ATTRIBUTES::AutoFill() || !TABLE_ATTRIBUTES::CanActivate())
    return;

  long  activeRow = TABLE_ATTRIBUTES::ActiveRow();
  if(activeRow<0)
    return;

  if((activeRow<firstRow) || (activeRow>(firstRow+numVisRows-1)))
    return;

  int   activeCol = TABLE_ATTRIBUTES::ActiveColumn();
  if(!COLUMN::CanEdit(activeCol))
    return;

  RUNTIMEINFO*  rtime = (RUNTIMEINFO*)AObjGetRuntimeInfo(theObject);
  ROW*          row = rtime->GetRow();
  if(!row->IsSelected(activeRow))
    return;

  int width = COLUMN::ColumnWidth(activeCol);
  if(width==0)
    return;

  int height = TABLE_ATTRIBUTES::CellHeight();
  if(TABLE_ATTRIBUTES::RowLines())
    height++;
  int cellY = tblRect.top + ((int)(activeRow - firstRow))*height;
  if(TABLE_ATTRIBUTES::ShowTitles())
    {
    cellY += (TABLE_ATTRIBUTES::TitleHeight()+1);
    if(TABLE_ATTRIBUTES::RowLines())
      cellY++;
    }

  if(TABLE_ATTRIBUTES::RowLines())
    height--;

  int cellX = tblRect.left;
  for(int i=0; i<activeCol; i++)
    {
    if((i>=TABLE_ATTRIBUTES::NumFixedColumns()) && (i<firstColumn))
      continue;

    if(COLUMN::ColumnWidth(i)==0)
      {
      if((i==(TABLE_ATTRIBUTES::NumFixedColumns()-1))
          &&
        (cellX!=tblRect.left))
        cellX++;
      continue;
      }

    cellX += COLUMN::ColumnWidth(i);
    if(TABLE_ATTRIBUTES::ColumnLines())
      cellX++;
    if(i==(TABLE_ATTRIBUTES::NumFixedColumns()-1))
      cellX++;
    }

  HDC       hDC = GetDC(hTable);
  HPEN      hPen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_WINDOW));
  LOGBRUSH  lb = {BS_SOLID, GetSysColor(COLOR_WINDOW), 0};
  HPEN      oldPen = (HPEN)SelectObject(hDC, hPen);
  HBRUSH    hBrush = CreateBrushIndirect(&lb);
  HBRUSH    oldBrush = (HBRUSH)SelectObject(hDC, hBrush);
  int       right = cellX+width;
  if(right>tblRect.right)
    right = tblRect.right;

  Rectangle(hDC, cellX, cellY, right, cellY+height);
  SelectObject(hDC, oldPen);
  DeleteObject(hPen);
  SelectObject(hDC, oldBrush);
  DeleteObject(hBrush);
  ReleaseDC(hParentWnd, hDC);

  cellX += COLUMN::CellCharWidth(activeCol);
  width -= 2*COLUMN::CellCharWidth(activeCol);
  if((cellX+width)>tblRect.right)
    width = tblRect.right - cellX;

  int offset = 2*TABLE_ATTRIBUTES::CellLeading()/3 + TABLE_ATTRIBUTES::CellAscent() - COLUMN::CellAscent(activeCol);
  cellY = cellY + offset;
  height = TABLE_ATTRIBUTES::CellHeight() - offset;

  editRow = activeRow;
  editCol = activeCol;

  char huge*  cellPtr = row->GetCell(activeRow, activeCol, FALSE, NULL);
  UINT  length = (UINT)hstrlen(cellPtr) + 1;
  char* cellStr = new char[length];
  hmemcpy(cellStr, cellPtr, length);
  hEdit = CreateWindow("EDIT", cellStr,
            WS_CHILD | ES_AUTOHSCROLL,
            cellX, cellY,
            width, height,
            hTable, (HMENU)3, G.hInstance, NULL);
  delete cellStr;

  // subclass the edit control
  SetProp(hEdit, "loPtr", (HANDLE)LOWORD((DWORD)this));
  SetProp(hEdit, "hiPtr", (HANDLE)HIWORD((DWORD)this));
  SetProp(hEdit, "number", (HANDLE)AObjCheckType(COLUMN::GetObjectID(activeCol), OTYPE_NUMBER));
  oldEditControlProc = (WNDPROC)GetWindowLong(hEdit, GWL_WNDPROC);
  SetWindowLong(hEdit, GWL_WNDPROC, (long)EditControlProc);
  ShowWindow(hEdit, SW_SHOW);

  hEditFont =CreateFontIndirect(COLUMN::CellLogFont(activeCol));
  SendMessage(hEdit, WM_SETFONT, (WPARAM)hEditFont, MAKELPARAM(TRUE, 0));
  SetFocus(hEdit);
  SendMessage(hEdit, EM_SETSEL, (WPARAM)FALSE, MAKELPARAM(0, -1));

  // wipPreventThieves(ParentID, TRUE); SKJ --> need replacement
  AEvtPostSignalAtMark(theObject, SIGNAL_STARTEDITING);
  }
Ejemplo n.º 30
0
long	UPSF::BitmapCore_To_UBit(
	HGLOBAL&	hUniv,
	long&			univSize,
	void*			natvPtr,
	long			natvLen)

	{
	BITMAPCOREHEADER*	bmpCH = (BITMAPCOREHEADER*)natvPtr;
	WORD	bitCount = bmpCH->bcBitCount;

	if(!(bitCount==1 || bitCount==4 || bitCount==8 || bitCount==24))
		return AUPSF_CANTCONVERT;

	long	ColorTableSize;
  long	BitmapSize;
	if(bitCount==24)
		{
		// 24-bit color -- no color table
    ColorTableSize = 0;
		}
	else
		ColorTableSize = pow2(bitCount);

	BitmapSize = natvLen - (long)sizeof(BITMAPCOREHEADER) - ColorTableSize*sizeof(RGBTRIPLE);
	univSize = BitmapSize + ColorTableSize*sizeof(RGBQUAD) + (long)sizeof(BITMAPINFOHEADER);

	if(!(hUniv = GlobalReAlloc(hUniv, univSize, MEMFLAGS)))
		return AUPSF_MEMORYERROR;
	void*	univPtr = GlobalLock(hUniv);
	if(!univPtr)
		return AUPSF_MEMORYERROR;

  // store the bitmap info header
	BITMAPINFOHEADER*	bmpIH = (BITMAPINFOHEADER*)univPtr;
	bmpIH->biSize						= sizeof(BITMAPINFOHEADER);
	bmpIH->biWidth					= bmpCH->bcWidth;
	bmpIH->biHeight					= bmpCH->bcHeight;
	bmpIH->biPlanes					= bmpCH->bcPlanes;
	bmpIH->biBitCount				= bmpCH->bcBitCount;
	bmpIH->biCompression		= BI_RGB;

	bmpIH->biXPelsPerMeter	= 0;
	bmpIH->biYPelsPerMeter	= 0;

	bmpIH->biSizeImage			= 0;
	bmpIH->biClrUsed				= 0;
	bmpIH->biClrImportant		= 0;

  // store the color table
	RGBTRIPLE*	rgbTriple = (RGBTRIPLE*)((BYTE*)natvPtr + sizeof(BITMAPCOREHEADER));
	RGBQUAD*		rgbQuad = (RGBQUAD*)((BYTE*)univPtr + sizeof(BITMAPINFOHEADER));
	for(int i=0; i<ColorTableSize; i++)
		{
		rgbQuad[i].rgbBlue = rgbTriple[i].rgbtBlue;
		rgbQuad[i].rgbGreen = rgbTriple[i].rgbtGreen;
		rgbQuad[i].rgbRed = rgbTriple[i].rgbtRed;
		rgbQuad[i].rgbReserved = 0; 
		}

	// store the bitmap
	void*	UnivBitmapBits = (void*)((BYTE*)univPtr + (size_t)(sizeof(BITMAPINFOHEADER) + ColorTableSize*sizeof(RGBQUAD)));
	void*	NatvBitmapBits = (void*)((BYTE*)natvPtr + (size_t)(sizeof(BITMAPCOREHEADER) + ColorTableSize*sizeof(RGBTRIPLE)));
	hmemcpy(UnivBitmapBits, NatvBitmapBits, BitmapSize);

	GlobalUnlock(hUniv);
	return AUPSF_NOERROR;
	}