366 lines
9.8 KiB
C
366 lines
9.8 KiB
C
/******************************Module*Header*******************************\
|
|
* Module Name: ftmap.c
|
|
*
|
|
* map tests
|
|
*
|
|
* Created: 26-May-1991 13:07:35
|
|
* Author: Patrick Haluptzok patrickh
|
|
*
|
|
* Copyright (c) 1990 Microsoft Corporation
|
|
\**************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
extern BYTE abColorLines[];
|
|
extern BYTE abBitCat[];
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vBug787
|
|
*
|
|
* History:
|
|
* 19-Jul-1991 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
typedef struct _BITMAPINFOPAT2
|
|
{
|
|
BITMAPINFOHEADER bmiHeader;
|
|
RGBQUAD bmiColors[2];
|
|
} BITMAPINFOPAT2;
|
|
|
|
BITMAPINFOPAT2 bmiPat12 =
|
|
{
|
|
{
|
|
sizeof(BITMAPINFOHEADER),
|
|
8,
|
|
8,
|
|
1,
|
|
1,
|
|
BI_RGB,
|
|
32,
|
|
0,
|
|
0,
|
|
2,
|
|
2
|
|
},
|
|
|
|
{ // B G R
|
|
{ 0, 0, 0, 0 }, // 1
|
|
{ 0xFF,0xFF,0xFF,0 }, // 2
|
|
}
|
|
};
|
|
|
|
VOID vBug787(HDC hdcScreen)
|
|
{
|
|
DWORD White[] = { 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa };
|
|
HBITMAP hbmMono, hbmbrush, hbm4;
|
|
HBRUSH hbrMono;
|
|
HDC hdcMono, hdc4;
|
|
|
|
hdc4 = CreateCompatibleDC(hdcScreen);
|
|
hdcMono = CreateCompatibleDC(hdcScreen);
|
|
|
|
hbmbrush = CreateBitmap(8, 8, 1, 1, (LPBYTE) White);
|
|
hbmMono = CreateBitmap(100, 100, 1, 1, (LPBYTE) NULL);
|
|
hbm4 = CreateBitmap(100, 100, 1, 4, NULL);
|
|
hbrMono = CreatePatternBrush(hbmbrush);
|
|
DeleteObject(hbmbrush);
|
|
|
|
SelectObject(hdcMono, hbmMono);
|
|
SelectObject(hdcMono, hbrMono);
|
|
SelectObject(hdc4, hbm4);
|
|
|
|
SetTextColor(hdcMono, 0x00000000L);
|
|
SetBkMode(hdcMono, OPAQUE);
|
|
SetBkColor(hdcMono, 0x00FFFFFFL);
|
|
|
|
PatBlt(hdcMono, 0, 0, 100, 100, WHITENESS);
|
|
TextOut(hdcMono, 0, 0, "ABCDEFGHIJKLMNOPQRSTUVXYZ", 26);
|
|
TextOut(hdcMono, 0, 50, "ABCDEFGHIJKLMNOPQRSTUVXYZ", 26);
|
|
PatBlt(hdcMono, 0, 0, 100, 100, 0x00fa0089);
|
|
|
|
SetTextColor(hdc4, 0x00000000L);
|
|
SetBkColor(hdc4, 0x00FFFFFFL);
|
|
|
|
// Doing it to a bitmap.
|
|
|
|
SelectObject(hdc4, GetStockObject(BLACK_BRUSH));
|
|
PatBlt(hdc4, 0, 0, 100, 100, WHITENESS);
|
|
BitBlt(hdc4, 0, 0, 100, 100, hdcMono, 0, 0, 0xE20746);
|
|
BitBlt(hdcScreen, 0, 0, 100, 100, hdc4, 0, 0, SRCCOPY);
|
|
PatBlt(hdc4, 0, 0, 100, 100, WHITENESS);
|
|
BitBlt(hdc4, 0, 0, 100, 100, hdcMono, 0, 0, 0xB8074A);
|
|
BitBlt(hdcScreen, 100, 0, 100, 100, hdc4, 0, 0, SRCCOPY);
|
|
|
|
SelectObject(hdc4, GetStockObject(WHITE_BRUSH));
|
|
PatBlt(hdc4, 0, 0, 100, 100, BLACKNESS);
|
|
BitBlt(hdc4, 0, 0, 100, 100, hdcMono, 0, 0, 0xE20746);
|
|
BitBlt(hdcScreen, 0, 100, 100, 100, hdc4, 0, 0, SRCCOPY);
|
|
PatBlt(hdc4, 0, 0, 100, 100, BLACKNESS);
|
|
BitBlt(hdc4, 0, 0, 100, 100, hdcMono, 0, 0, 0xB8074A);
|
|
BitBlt(hdcScreen, 100, 100, 100, 100, hdc4, 0, 0, SRCCOPY);
|
|
|
|
// Doing it to the VGA. !!! VGA bug demo
|
|
|
|
SelectObject(hdcScreen, GetStockObject(BLACK_BRUSH));
|
|
PatBlt(hdcScreen, 200, 0, 100, 100, WHITENESS);
|
|
BitBlt(hdcScreen, 200, 0, 100, 100, hdcMono, 0, 0, 0xE20746);
|
|
PatBlt(hdcScreen, 300, 0, 100, 100, WHITENESS);
|
|
BitBlt(hdcScreen, 300, 0, 100, 100, hdcMono, 0, 0, 0xB8074A);
|
|
|
|
SelectObject(hdcScreen, GetStockObject(WHITE_BRUSH));
|
|
PatBlt(hdcScreen, 200, 100, 100, 100, BLACKNESS);
|
|
BitBlt(hdcScreen, 200, 100, 100, 100, hdcMono, 0, 0, 0xE20746);
|
|
PatBlt(hdcScreen, 300, 100, 100, 100, BLACKNESS);
|
|
BitBlt(hdcScreen, 300, 100, 100, 100, hdcMono, 0, 0, 0xB8074A);
|
|
|
|
DeleteDC(hdc4);
|
|
DeleteDC(hdcMono);
|
|
DeleteObject(hbm4);
|
|
DeleteObject(hbmMono);
|
|
DeleteObject(hbrMono);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vBuginSetPixel
|
|
*
|
|
* SetPixel supposably fails, we will see.
|
|
*
|
|
* History:
|
|
* 16-Aug-1991 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vBuginSetPixel(void)
|
|
{
|
|
HDC hDC;
|
|
DWORD dwTemp;
|
|
|
|
hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
|
|
|
|
if (hDC == (HDC) 0)
|
|
{
|
|
DbgPrint("CreateDC failed in vBuginSetPixel\n");
|
|
return;
|
|
}
|
|
|
|
dwTemp = SetPixel(hDC, 1, 1, RGB(0, 0, 255));
|
|
|
|
if (dwTemp == 0xFFFFFFFF)
|
|
{
|
|
DbgPrint("1SetPixel failed in vBuginSetPixel %lx %lu\n", dwTemp, dwTemp);
|
|
}
|
|
|
|
dwTemp = SetPixel(hDC, 0, 0, RGB(0, 0, 255));
|
|
|
|
if (dwTemp == 0xFFFFFFFF)
|
|
{
|
|
DbgPrint("2SetPixel failed in vBuginSetPixel %lx %lu\n", dwTemp, dwTemp);
|
|
}
|
|
|
|
dwTemp = SetPixel(hDC, 639, 0, RGB(0, 0, 255));
|
|
|
|
if (dwTemp == 0xFFFFFFFF)
|
|
{
|
|
DbgPrint("3SetPixel failed in vBuginSetPixel %lx %lu\n", dwTemp, dwTemp);
|
|
}
|
|
|
|
DeleteDC(hDC);
|
|
}
|
|
|
|
/******************************Public*Routine******************************\
|
|
* vTestMapping
|
|
*
|
|
* Test graying of stuff.
|
|
*
|
|
* History:
|
|
* 26-Jul-1991 -by- Patrick Haluptzok patrickh
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
VOID vTestMapping(HWND hwnd, HDC hdc, RECT* prcl)
|
|
{
|
|
vBuginSetPixel();
|
|
vBug787(hdc);
|
|
hwnd;
|
|
prcl;
|
|
}
|
|
|
|
#if 0
|
|
/*-----------------------------------------
|
|
MYDRAW2.C -- Create and Display a Bitmap
|
|
-----------------------------------------*/
|
|
|
|
#define NCOLOURS 16
|
|
#define PATTERNWIDTH 256
|
|
#define PATTERNHEIGHT 16
|
|
#define BITSPERPIXEL 4
|
|
#define PIXELSPERBYTE 2
|
|
#define PIXELSPERCOLOURBAND 16
|
|
#define BYTESPERLINE 128
|
|
|
|
static HPALETTE PASCAL NewPalette(void);
|
|
static PBITMAPINFO PASCAL NewBitmapInfo(HWND hwnd, int wUsage);
|
|
static void PASCAL FreeBitmapInfo(PBITMAPINFO);
|
|
|
|
long TestPalette (HWND hwnd, WORD message, LONG wParam, LONG lParam)
|
|
{
|
|
PBITMAPINFO pDibInfo;
|
|
HPALETTE hPal;
|
|
BYTE Pattern[PATTERNHEIGHT * PATTERNWIDTH / PIXELSPERBYTE];
|
|
BYTE pix_val,
|
|
pattern_val;
|
|
HDC hdc;
|
|
PAINTSTRUCT ps;
|
|
int pindex,
|
|
line,
|
|
pos,
|
|
pixel,
|
|
pix_pos,
|
|
bitmap_type = DIB_PAL_COLORS;
|
|
|
|
pindex = 0;
|
|
for (line = 0; line < PATTERNHEIGHT; line++)
|
|
{
|
|
pix_pos = 0;
|
|
for (pos = 0; pos < 128; pos++)
|
|
{
|
|
pattern_val = 0;
|
|
for (pixel = 0; pixel < 2; pixel++)
|
|
{
|
|
pix_val = (BYTE) (pix_pos++ / 16);
|
|
pattern_val = (BYTE)(pattern_val<<4) + pix_val;
|
|
}
|
|
Pattern[pindex++] = pattern_val;
|
|
}
|
|
}
|
|
|
|
hPal = NewPalette();
|
|
pDibInfo = NewBitmapInfo(hwnd, bitmap_type);
|
|
return 0;
|
|
|
|
case WM_PAINT:
|
|
hdc = BeginPaint(hwnd, &ps);
|
|
SetDIBitsToDevice(hdc, 0, 0, PATTERNWIDTH, PATTERNHEIGHT, 0, 0,
|
|
0, PATTERNHEIGHT, (LPSTR) Pattern, pDibInfo,
|
|
bitmap_type);
|
|
EndPaint(hwnd, &ps);
|
|
return 0;
|
|
|
|
case WM_QUERYNEWPALETTE:
|
|
hdc = GetDC(hwnd);
|
|
SelectPalette(hdc, hPal, 0);
|
|
RealizePalette(hdc);
|
|
ReleaseDC(hwnd, hdc);
|
|
return TRUE;
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
FreeBitmapInfo(pDibInfo);
|
|
PostQuitMessage(0);
|
|
return 0;
|
|
}
|
|
return DefWindowProc(hwnd, message, wParam, lParam);
|
|
}
|
|
|
|
static HPALETTE PASCAL NewPalette(void)
|
|
{
|
|
WORD i;
|
|
LOGPALETTE *pPal;
|
|
HPALETTE hPal = 0;
|
|
|
|
pPal = (LOGPALETTE *) LocalAlloc(LPTR, sizeof(LOGPALETTE) +
|
|
NCOLOURS * sizeof(PALETTEENTRY));
|
|
if (pPal == (LOGPALETTE *) NULL)
|
|
return (HPALETTE) 0;
|
|
|
|
pPal->palNumEntries = NCOLOURS;
|
|
pPal->palVersion = 0x300;
|
|
|
|
for (i = 0; i < NCOLOURS; i++)
|
|
{
|
|
pPal->palPalEntry[i].peRed = (BYTE)i;
|
|
pPal->palPalEntry[i].peGreen = 0;
|
|
pPal->palPalEntry[i].peBlue = 0;
|
|
pPal->palPalEntry[i].peFlags = PC_EXPLICIT;
|
|
|
|
if(i == 8)
|
|
{
|
|
pPal->palPalEntry[i].peRed = 255;
|
|
pPal->palPalEntry[i].peGreen = 255;
|
|
pPal->palPalEntry[i].peBlue = 255;
|
|
pPal->palPalEntry[i].peFlags = 0;
|
|
}
|
|
|
|
}
|
|
hPal = CreatePalette(pPal);
|
|
LocalFree((HANDLE)pPal);
|
|
return hPal;
|
|
}
|
|
|
|
static PBITMAPINFO PASCAL NewBitmapInfo(HWND hwnd, int wUsage)
|
|
{
|
|
PBITMAPINFO pDibInfo;
|
|
int infoSize,
|
|
colSize;
|
|
WORD i;
|
|
|
|
switch (wUsage)
|
|
{
|
|
case DIB_RGB_COLORS:
|
|
colSize = NCOLOURS * sizeof(RGBQUAD);
|
|
break;
|
|
case DIB_PAL_COLORS:
|
|
colSize = NCOLOURS * sizeof(WORD);
|
|
break;
|
|
case DIB_PAL_INDICES:
|
|
colSize = 0;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
infoSize = sizeof(BITMAPINFOHEADER) + colSize;
|
|
pDibInfo = (PBITMAPINFO) malloc(infoSize);
|
|
if (pDibInfo == (PBITMAPINFO) NULL)
|
|
{
|
|
return(0);
|
|
}
|
|
pDibInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
|
pDibInfo->bmiHeader.biWidth = PATTERNWIDTH;
|
|
pDibInfo->bmiHeader.biHeight = PATTERNHEIGHT;
|
|
pDibInfo->bmiHeader.biPlanes = 1;
|
|
pDibInfo->bmiHeader.biBitCount = BITSPERPIXEL;
|
|
pDibInfo->bmiHeader.biCompression = 0;
|
|
pDibInfo->bmiHeader.biSizeImage = 0;
|
|
pDibInfo->bmiHeader.biXPelsPerMeter = 0;
|
|
pDibInfo->bmiHeader.biYPelsPerMeter = 0;
|
|
pDibInfo->bmiHeader.biClrUsed = 0;
|
|
pDibInfo->bmiHeader.biClrImportant = 0;
|
|
|
|
switch (wUsage)
|
|
{
|
|
case DIB_RGB_COLORS:
|
|
pDibInfo->bmiColors[0].rgbRed = 0xff;
|
|
pDibInfo->bmiColors[0].rgbGreen = 0;
|
|
pDibInfo->bmiColors[0].rgbBlue = 0;
|
|
pDibInfo->bmiColors[1].rgbRed = 0;
|
|
pDibInfo->bmiColors[1].rgbGreen = 0xff;
|
|
pDibInfo->bmiColors[1].rgbBlue = 0;
|
|
break;
|
|
case DIB_PAL_COLORS:
|
|
for (i = 0; i < NCOLOURS; i++)
|
|
((WORD *) pDibInfo->bmiColors)[i] = i;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return pDibInfo;
|
|
}
|
|
|
|
static void PASCAL FreeBitmapInfo(PBITMAPINFO pDibInfo)
|
|
{
|
|
LocalFree((HANDLE) pDibInfo);
|
|
}
|
|
#endif
|