/*
======================================================================
copy.c

Ernie Wright  15 Apr 05
MSVC 4.0

Copy a Windows DIB onto the clipboard.  The DIB can be 8-bit, with a
full 256-color palette, or 24-bit.
====================================================================== */

#include <windows.h>


int copyBitmap( HWND hwnd, BITMAPINFOHEADER *dib, unsigned char *bits,
   int rowbytes )
{
   static int busy = 0;
   HGLOBAL hmem;
   BYTE *p;
   int size;

   if ( busy ) return 0;
   busy = 1;

   size = sizeof( BITMAPINFOHEADER ) + ( dib->biBitCount == 8 ) * 1024;
   if ( hmem = GlobalAlloc( GMEM_MOVEABLE, size + rowbytes * dib->biHeight )) {
      if ( p = GlobalLock( hmem )) {
         memcpy( p, dib, size );
         memcpy( p + size, bits, rowbytes * dib->biHeight );
         GlobalUnlock( hmem );
         if ( OpenClipboard( hwnd )) {
            EmptyClipboard();
            SetClipboardData( CF_DIB, hmem );
            CloseClipboard();
            busy = 0;
            return 1;
         }
      }
      GlobalFree( hmem );
   }
   busy = 0;
   return 0;
}
