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

286 lines
6.0 KiB

/* Test program for rasdd.dll; based on maze program */
#include <windows.h>
#include <string.h>
#include <stdio.h>
typedef struct {
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} MYBITMAPFILEHEADER;
void GoBitblt( HDC , PSZ);
extern void DbgBreakPoint();
extern void DbgPrint( PSZ, ... );
extern void exit( int );
int _CRTAPI1
main( argc, argv )
int argc;
char **argv;
{
HDC hdc;
BOOL bDisplay=FALSE;
if (argc < 3) {
printf("Usage %s PrinterName file.bmp\n", argv[0]);
return 1;
}
if (!_stricmp(argv[1], "DISPLAY")) {
hdc = CreateDC("DISPLAY", "", "", NULL);
bDisplay=TRUE;
} else
hdc = CreateDC( "", argv[1], "", NULL);
if( hdc == (HDC)0 )
{
DbgPrint( "CreateDC FAILS\n" );
return 1;
}
if (!bDisplay)
Escape( hdc, STARTDOC, 20, "Your Name goes here", NULL );
GoBitblt( hdc , argv[2]);
if (!bDisplay) {
Escape(hdc, NEWFRAME, NULL, NULL, NULL);
Escape(hdc, ENDDOC, NULL, NULL, NULL);
}
DeleteDC(hdc);
return 0;
}
void
GoBitblt( hdc , pszFileName)
HDC hdc;
LPSTR pszFileName;
{
/*
* Allocate storage, read in a bitmap and call the rendering code.
* Free the storage and return when done.
*/
DWORD dwSilly; /* For ReadFile */
HBITMAP hbm; /* Handle to bitmap created from file data */
HDC hdcMem; /* Compatible, for stuffing around with */
HANDLE hfBM; /* Bitmap file handle */
MYBITMAPFILEHEADER Mybfh; /* File header */
BITMAPINFOHEADER bih;
BITMAPCOREHEADER bch;
PBITMAPINFO pBitmapInfo;
LPBYTE pMem;
WORD Type;
DWORD cbBytes;
DWORD cRGBs;
RGBTRIPLE *pRGBTriple;
DWORD i;
hfBM = CreateFile( pszFileName, GENERIC_READ, FILE_SHARE_READ,
0, OPEN_EXISTING, 0, 0 );
if( hfBM == (HANDLE)-1 )
{
DbgPrint( "CreatFile() fails in GoRender()\n" );
return;
}
if( !ReadFile( hfBM, &Type, sizeof( Type ), &dwSilly, NULL ) ||
dwSilly != sizeof( Type ) )
{
DbgPrint( "Read of bitmap file header fails in GoRender()\n" );
CloseHandle( hfBM );
return;
}
if( Type != 0x4d42)
{
DbgPrint( "Bitmap format not acceptable in GoRender\n" );
CloseHandle( hfBM );
return;
}
if( !ReadFile( hfBM, &Mybfh, sizeof( Mybfh ), &dwSilly, NULL ) ||
dwSilly != sizeof( Mybfh ) )
{
DbgPrint( "Read of bitmap file header fails in GoRender()\n" );
CloseHandle( hfBM );
return;
}
if( !ReadFile( hfBM, &bch, sizeof( bch ), &dwSilly, NULL ) ||
dwSilly != sizeof( bch ) )
{
DbgPrint( "Read of bitmap file header fails in GoRender()\n" );
CloseHandle( hfBM );
return;
}
switch (bch.bcBitCount) {
case 1:
cRGBs=2;
break;
case 2:
cRGBs=4;
break;
case 4:
cRGBs=16;
break;
case 8:
cRGBs=256;
}
if( (pRGBTriple = GlobalAlloc( GMEM_ZEROINIT, cRGBs*sizeof(RGBTRIPLE) )) == NULL )
{
DbgPrint( "GlobalAlloc() fails in GoRender()\n" );
CloseHandle( hfBM );
return;
}
if( !ReadFile( hfBM, pRGBTriple, cRGBs*sizeof(RGBTRIPLE), &dwSilly, NULL ) ||
dwSilly != cRGBs*sizeof(RGBTRIPLE) )
{
DbgPrint( "Read of bitmap file header fails in GoRender()\n" );
GlobalFree(pRGBTriple);
CloseHandle( hfBM );
return;
}
if( (pBitmapInfo = GlobalAlloc( GMEM_ZEROINIT, sizeof(BITMAPINFOHEADER)+
cRGBs*sizeof(RGBQUAD) )) == NULL )
{
DbgPrint( "GlobalAlloc() fails in GoRender()\n" );
GlobalFree(pRGBTriple);
CloseHandle( hfBM );
return;
}
pBitmapInfo->bmiHeader.biSize = sizeof(bih);
pBitmapInfo->bmiHeader.biWidth = bch.bcWidth;
pBitmapInfo->bmiHeader.biHeight = bch.bcHeight;
pBitmapInfo->bmiHeader.biPlanes = bch.bcPlanes;
pBitmapInfo->bmiHeader.biBitCount = bch.bcBitCount;
pBitmapInfo->bmiHeader.biCompression = BI_RGB;
pBitmapInfo->bmiHeader.biSizeImage = 0;
pBitmapInfo->bmiHeader.biXPelsPerMeter = 0;
pBitmapInfo->bmiHeader.biYPelsPerMeter = 0;
pBitmapInfo->bmiHeader.biClrUsed = 0;
pBitmapInfo->bmiHeader.biClrImportant = 0;
for (i=0; i<cRGBs; i++) {
pBitmapInfo->bmiColors[i].rgbBlue = (pRGBTriple+i)->rgbtBlue;
pBitmapInfo->bmiColors[i].rgbGreen = (pRGBTriple+i)->rgbtGreen;
pBitmapInfo->bmiColors[i].rgbRed = (pRGBTriple+i)->rgbtRed;
}
cbBytes = (((bch.bcBitCount * bch.bcWidth) + 31) & ~31 ) >> 3;
cbBytes*= bch.bcHeight;
if( (pMem = GlobalAlloc( GMEM_ZEROINIT, cbBytes )) == NULL )
{
DbgPrint( "GlobalAlloc() fails in GoRender()\n" );
GlobalFree(pBitmapInfo);
GlobalFree(pRGBTriple);
CloseHandle( hfBM );
return;
}
if( !ReadFile( hfBM, pMem, cbBytes, &dwSilly, NULL ) ||
dwSilly != cbBytes )
{
DbgPrint( "Read of bitmap file header fails in GoRender()\n" );
GlobalFree(pBitmapInfo);
GlobalFree(pRGBTriple);
GlobalFree( pMem );
CloseHandle( hfBM );
return;
}
hbm = CreateDIBitmap(hdc, &pBitmapInfo->bmiHeader, CBM_INIT, pMem,
pBitmapInfo, DIB_RGB_COLORS);
if( hbm == 0 )
{
DbgPrint( "Bitmap creation fails\n" );
GlobalFree(pBitmapInfo);
GlobalFree(pRGBTriple);
GlobalFree( pMem );
return;
}
GlobalFree(pBitmapInfo);
GlobalFree(pRGBTriple);
GlobalFree(pMem);
hdcMem = CreateCompatibleDC( hdc );
if( hdcMem == 0 )
{
DbgPrint( "CreateCompatibleDC fails\n" );
return;
}
SelectObject( hdcMem, hbm );
#ifdef LATER
DbgPrint( "\nCalling BitBlt().....\n" );
if( !BitBlt( hdc, 1200, 1500, pBitmapInfo->bmiHeader.biWidth,
pBitmapInfo->bmiHeader.biHeight, hdcMem, 0, 0, SRCCOPY ) )
{
DbgPrint( "BitBlt fails\n" );
}
#endif
DbgPrint( "\nCalling StretchBlt().....\n" );
if( !StretchBlt( hdc, 0, 0,
GetDeviceCaps(hdc, HORZRES),
GetDeviceCaps(hdc, VERTRES),
hdcMem, 0, 0,
pBitmapInfo->bmiHeader.biWidth,
pBitmapInfo->bmiHeader.biHeight,
SRCCOPY ) )
{
DbgPrint( "StretchBlt fails\n" );
}
CloseHandle( hfBM ); /* No longer need these things */
DeleteDC( hdcMem );
DeleteObject( hbm );
return;
}