* PROGRAMMER: Alex Ionescu (alex@relsoft.net)
*/
-#define GDI_BATCH_LIMIT 20
/* DATA **********************************************************************/
extern PGDI_TABLE_ENTRY GdiHandleTable;
+extern PGDI_SHARED_HANDLE_TABLE GdiSharedHandleTable;
extern HANDLE hProcessHeap;
extern HANDLE CurrentProcessId;
extern DWORD GDI_BatchLimit;
+extern PDEVCAPS GdiDevCaps;
+extern BOOL gbLpk; // Global bool LanguagePack
+extern HANDLE ghSpooler;
+extern RTL_CRITICAL_SECTION semLocal;
typedef INT
(CALLBACK* EMFPLAYPROC)(
#define METAFILE_MEMORY 1
#define METAFILE_DISK 2
-/* TYPES *********************************************************************/
+#define SAPCALLBACKDELAY 244
-// Based on wmfapi.h and Wine. This is the DC_ATTR for a MetaDC file.
-typedef struct tagMETAFILEDC {
- PVOID pvMetaBuffer;
- HANDLE hFile;
- DWORD Size;
- PMETAHEADER mf;
- UINT handles_size, cur_handles;
- HGDIOBJ *handles;
+/* MACRO ********************************************************************/
+
+#define ROP_USES_SOURCE(Rop) (((Rop) << 2 ^ Rop) & 0xCC0000)
- // more DC object stuff.
- HGDIOBJ Pen;
- HGDIOBJ Brush;
- HGDIOBJ Palette;
- HGDIOBJ Font;
- // Add more later.
+/* TYPES *********************************************************************/
+
+// Based on wmfapi.h and Wine.
+typedef struct tagMETAFILEDC
+{
+ PVOID pvMetaBuffer;
+ HANDLE hFile;
+ DWORD Size;
+ DWORD dwWritten;
+ METAHEADER mh;
+ WORD reserved;
+ HLOCAL MFObjList;
+ HPEN hPen;
+ HBRUSH hBrush;
+ HDC hDc;
+ HGDIOBJ hMetaDc;
+ HPALETTE hPalette;
+ HFONT hFont;
+ HBITMAP hBitmap;
+ HRGN hRegion;
+ HGDIOBJ hMetafile;
+ HGDIOBJ hMemDc;
+ HPEN hExtPen;
+ HGDIOBJ hEnhMetaDc;
+ HGDIOBJ hEnhMetaFile;
+ HCOLORSPACE hColorSpace;
+ WCHAR Filename[MAX_PATH+2];
} METAFILEDC,*PMETAFILEDC;
+// Metafile Entry handle
+typedef struct tagMF_ENTRY
+{
+ LIST_ENTRY List;
+ HGDIOBJ hmDC; // Handle return from NtGdiCreateClientObj.
+ PMETAFILEDC pmfDC;
+} MF_ENTRY, *PMF_ENTRY;
-typedef struct tagENHMETAFILE {
+typedef struct tagENHMETAFILE
+{
PVOID pvMetaBuffer;
HANDLE hFile; /* Handle for disk based MetaFile */
DWORD Size;
INT planes;
} ENHMETAFILE,*PENHMETAFILE;
+
+#define PDEV_UMPD_ID 0xFEDCBA98
+// UMPDEV flags
+#define UMPDEV_NO_ESCAPE 0x0002
+#define UMPDEV_SUPPORT_ESCAPE 0x0004
+typedef struct _UMPDEV
+{
+ DWORD Sig; // Init with PDEV_UMPD_ID
+ struct _UMPDEV *pumpdNext;
+ PDRIVER_INFO_5W pdi5Info;
+ HMODULE hModule;
+ DWORD dwFlags;
+ DWORD dwDriverAttributes;
+ DWORD dwConfigVersion; // Number of times the configuration
+ // file for this driver has been upgraded
+ // or downgraded since the last spooler restart.
+ DWORD dwDriverCount; // After init should be 2
+ DWORD WOW64_UMPDev;
+ DWORD WOW64_hMod;
+ DWORD Unknown;
+ PVOID apfn[INDEX_LAST]; // Print Driver pfn
+} UMPDEV, *PUMPDEV;
+
+#define LOCALFONT_COUNT 10
+typedef struct _LOCALFONT
+{
+ FONT_ATTR lfa[LOCALFONT_COUNT];
+} LOCALFONT, *PLOCALFONT;
+
+// sdk/winspool.h
+typedef BOOL (WINAPI *ABORTPRINTER) (HANDLE);
+typedef BOOL (WINAPI *CLOSEPRINTER) (HANDLE);
+typedef BOOL (WINAPI *CLOSESPOOLFILEHANDLE) (HANDLE, HANDLE); // W2k8
+typedef HANDLE (WINAPI *COMMITSPOOLDATA) (HANDLE,HANDLE,DWORD); // W2k8
+typedef LONG (WINAPI *DOCUMENTPROPERTIESW) (HWND,HANDLE,LPWSTR,PDEVMODEW,PDEVMODEW,DWORD);
+typedef BOOL (WINAPI *ENDDOCPRINTER) (HANDLE);
+typedef BOOL (WINAPI *ENDPAGEPRINTER) (HANDLE);
+typedef BOOL (WINAPI *GETPRINTERW) (HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+typedef BOOL (WINAPI *GETPRINTERDRIVERW) (HANDLE,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
+typedef HANDLE (WINAPI *GETSPOOLFILEHANDLE) (HANDLE); // W2k8
+typedef BOOL (WINAPI *ISVALIDDEVMODEW) (PDEVMODEW,size_t);
+typedef BOOL (WINAPI *OPENPRINTERW) (LPWSTR,PHANDLE,LPPRINTER_DEFAULTSW);
+typedef BOOL (WINAPI *READPRINTER) (HANDLE,PVOID,DWORD,PDWORD);
+typedef BOOL (WINAPI *RESETPRINTERW) (HANDLE,LPPRINTER_DEFAULTSW);
+typedef LPWSTR (WINAPI *STARTDOCDLGW) (HANDLE,DOCINFOW *);
+typedef DWORD (WINAPI *STARTDOCPRINTERW) (HANDLE,DWORD,PBYTE);
+typedef BOOL (WINAPI *STARTPAGEPRINTER) (HANDLE);
+// ddk/winsplp.h
+typedef BOOL (WINAPI *SEEKPRINTER) (HANDLE,LARGE_INTEGER,PLARGE_INTEGER,DWORD,BOOL);
+typedef BOOL (WINAPI *SPLREADPRINTER) (HANDLE,LPBYTE *,DWORD);
+// Same as ddk/winsplp.h DriverUnloadComplete?
+typedef BOOL (WINAPI *SPLDRIVERUNLOADCOMPLETE) (LPWSTR);
+// Driver support:
+// DrvDocumentEvent api/winddiui.h not W2k8 DocumentEventAW
+typedef INT (WINAPI *DOCUMENTEVENT) (HANDLE,HDC,INT,ULONG,PVOID,ULONG,PVOID);
+// DrvQueryColorProfile
+typedef BOOL (WINAPI *QUERYCOLORPROFILE) (HANDLE,PDEVMODEW,ULONG,VOID*,ULONG,FLONG);
+// Unknown:
+typedef DWORD (WINAPI *QUERYSPOOLMODE) (HANDLE,DWORD,DWORD);
+typedef DWORD (WINAPI *QUERYREMOTEFONTS) (DWORD,DWORD,DWORD);
+
+extern CLOSEPRINTER fpClosePrinter;
+extern OPENPRINTERW fpOpenPrinterW;
+
/* FUNCTIONS *****************************************************************/
PVOID
VOID
HEAP_free(LPVOID memory);
-BOOL
+VOID
FASTCALL
-TextMetricW2A(
- TEXTMETRICA *tma,
- TEXTMETRICW *tmw
+FONT_TextMetricWToA(
+ const TEXTMETRICW *ptmW,
+ LPTEXTMETRICA ptmA
);
-BOOL
+VOID
FASTCALL
NewTextMetricW2A(
NEWTEXTMETRICA *tma,
NEWTEXTMETRICW *tmw
);
-BOOL
+VOID
FASTCALL
NewTextMetricExW2A(
NEWTEXTMETRICEXA *tma,
NEWTEXTMETRICEXW *tmw
);
+BOOL
+FASTCALL
+DeleteRegion( HRGN );
+
BOOL
GdiIsHandleValid(HGDIOBJ hGdiObj);
BOOL
GdiGetHandleUserData(
HGDIOBJ hGdiObj,
+ DWORD ObjectType,
PVOID *UserData
);
PLDC
+FASTCALL
GdiGetLDC(HDC hDC);
HGDIOBJ
-STDCALL
+WINAPI
GdiFixUpHandle(HGDIOBJ hGO);
BOOL
NTAPI
GdiConvertToDevmodeW(DEVMODEA *dm);
+DWORD
+WINAPI
+GetAndSetDCDWord( HDC, INT, DWORD, DWORD, DWORD, DWORD );
+
+DWORD
+WINAPI
+GetDCDWord( HDC, INT, DWORD);
+
+HGDIOBJ
+WINAPI
+GetDCObject( HDC, INT);
+
VOID
NTAPI
LogFontA2W(
CONST LOGFONTW *pW
);
+VOID
+WINAPI
+EnumLogFontExW2A(
+ LPENUMLOGFONTEXA fontA,
+ CONST ENUMLOGFONTEXW *fontW );
+
/* FIXME: Put in some public header */
UINT
WINAPI
UserRealizePalette(HDC hDC);
-/* EOF */
+int
+WINAPI
+GdiAddFontResourceW(LPCWSTR lpszFilename,FLONG fl,DESIGNVECTOR *pdv);
+
+VOID
+WINAPI
+GdiSetLastError( DWORD dwErrCode );
+
+DWORD WINAPI GdiGetCodePage(HDC);
+UINT FASTCALL DIB_BitmapBitsSize( PBITMAPINFO );
+int
+WINAPI
+GdiGetBitmapBitsSize(BITMAPINFO *lpbmi);
+
+VOID GdiSAPCallback(PLDC pldc);
+HGDIOBJ FASTCALL hGetPEBHandle(HANDLECACHETYPE,COLORREF);
+
+int FASTCALL DocumentEventEx(PVOID,HANDLE,HDC,int,ULONG,PVOID,ULONG,PVOID);
+BOOL FASTCALL EndPagePrinterEx(PVOID,HANDLE);
+BOOL FASTCALL LoadTheSpoolerDrv(VOID);
+
+/* EOF */