Copyright (C) 1994, Digital Equipment Corp.
by Stephen Harrison
UNSAFE MODULEhack to patch the buggy return values on Chicago; IMPORT WinBase; FROM Word IMPORT Shift, Or, Extract; FROM WinDef IMPORT BYTE, COLORREF, WORD, HRGN, BOOL; FROM Ctypes IMPORT int; PROCEDURE WinGDI RGB (r, g, b: BYTE): COLORREF = BEGIN RETURN Or(r, Or(Shift(g, 8), Shift(b, 16))); END RGB; PROCEDUREPALETTERGB (r, g, b: BYTE): COLORREF = BEGIN RETURN Or(16_02000000, RGB(r, g, b)); END PALETTERGB; PROCEDUREPALETTEINDEX (i: WORD): COLORREF = BEGIN RETURN Or(16_01000000, i); END PALETTEINDEX; PROCEDUREGetRValue (rgb: COLORREF): BYTE = BEGIN RETURN Extract(rgb, 0, 8); END GetRValue; PROCEDUREGetGValue (rgb: COLORREF): BYTE = BEGIN RETURN Extract(rgb, 8, 8); END GetGValue; PROCEDUREGetBValue (rgb: COLORREF): BYTE = BEGIN RETURN Extract(rgb, 16, 8); END GetBValue;
PROCEDURESetRectRgn (a1: HRGN; a2: int; a3: int; a4: int; a5: int): BOOL = VAR b := raw_SetRectRgn (a1, a2, a3, a4, a5); BEGIN IF is_chicago THEN b := ORD (b # 0); END; RETURN b; END SetRectRgn; VAR os_version : WinBase.OSVERSIONINFO; is_chicago : BOOLEAN; BEGIN os_version.dwOSVersionInfoSize := BYTESIZE (os_version); VAR b := WinBase.GetVersionEx (ADR (os_version)); BEGIN <*ASSERT b # 0*> END; is_chicago := (os_version.dwPlatformId = WinBase.VER_PLATFORM_WIN32_WINDOWS); END WinGDI.