2025-04-27 07:49:33 -04:00

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