2 * reactos/lib/gdi32/misc/eng.c
16 EngAcquireSemaphore ( IN HSEMAPHORE hsem
)
18 RtlEnterCriticalSection((PRTL_CRITICAL_SECTION
)hsem
);
26 copy_my_glyphset( FD_GLYPHSET
*dst_glyphset
, FD_GLYPHSET
* src_glyphset
, ULONG Size
)
28 BOOL retValue
= FALSE
;
30 memcpy(src_glyphset
, dst_glyphset
, Size
);
31 if (src_glyphset
->cRuns
== 0)
45 EngComputeGlyphSet(INT nCodePage
,INT nFirstChar
,INT cChars
)
47 FD_GLYPHSET
* ntfd_glyphset
;
48 FD_GLYPHSET
* myfd_glyphset
= NULL
;
50 ntfd_glyphset
= NtGdiEngComputeGlyphSet(nCodePage
,nFirstChar
,cChars
);
54 if (ntfd_glyphset
->cjThis
)
56 myfd_glyphset
= GlobalAlloc(0,ntfd_glyphset
->cjThis
);
59 if (copy_my_glyphset(myfd_glyphset
,ntfd_glyphset
,ntfd_glyphset
->cjThis
) == FALSE
)
61 GlobalFree(myfd_glyphset
);
75 EngCreateSemaphore ( VOID
)
77 PRTL_CRITICAL_SECTION CritSect
= RtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_CRITICAL_SECTION
));
83 RtlInitializeCriticalSection( CritSect
);
84 return (HSEMAPHORE
)CritSect
;
92 EngDeleteSemaphore ( IN HSEMAPHORE hsem
)
96 RtlDeleteCriticalSection( (PRTL_CRITICAL_SECTION
) hsem
);
97 RtlFreeHeap( GetProcessHeap(), 0, hsem
);
105 EngFindResource(HANDLE h
,
115 HRSrc
= FindResourceW((HMODULE
)h
, MAKEINTRESOURCEW(iName
), MAKEINTRESOURCEW(iType
));
118 Size
= SizeofResource((HMODULE
)h
, HRSrc
);
121 Hg
= LoadResource((HMODULE
)h
, HRSrc
);
124 Lock
= LockResource( Hg
);
137 EngFreeModule(HANDLE h
)
147 EngGetCurrentCodePage( OUT PUSHORT OemCodePage
,
148 OUT PUSHORT AnsiCodePage
)
150 *OemCodePage
= GetOEMCP();
151 *AnsiCodePage
= GetACP();
159 EngGetDriverName(HDEV hdev
)
161 // DHPDEV from NtGdiGetDhpdev must be from print driver.
162 PUMPDEV pPDev
= (PUMPDEV
)NtGdiGetDhpdev(hdev
);
164 if (!pPDev
) return NULL
;
166 if (pPDev
->Sig
!= PDEV_UMPD_ID
)
168 pPDev
= (PUMPDEV
)pPDev
->Sig
;
170 return pPDev
->pdi5Info
->pDriverPath
;
177 EngGetPrinterDataFileName(HDEV hdev
)
179 PUMPDEV pPDev
= (PUMPDEV
)NtGdiGetDhpdev(hdev
);
181 if (!pPDev
) return NULL
;
183 if (pPDev
->Sig
!= PDEV_UMPD_ID
)
185 pPDev
= (PUMPDEV
)pPDev
->Sig
;
187 return pPDev
->pdi5Info
->pDataFile
;
194 EngLoadModule(LPWSTR pwsz
)
196 return LoadLibraryExW ( pwsz
, NULL
, LOAD_LIBRARY_AS_DATAFILE
);
203 EngMultiByteToWideChar(UINT CodePage
,
204 LPWSTR WideCharString
,
205 INT BytesInWideCharString
,
206 LPSTR MultiByteString
,
207 INT BytesInMultiByteString
)
209 return MultiByteToWideChar(CodePage
,0,MultiByteString
,BytesInMultiByteString
,WideCharString
,BytesInWideCharString
/ sizeof(WCHAR
));
216 EngQueryLocalTime(PENG_TIME_FIELDS etf
)
218 SYSTEMTIME SystemTime
;
219 GetLocalTime( &SystemTime
);
220 etf
->usYear
= SystemTime
.wYear
;
221 etf
->usMonth
= SystemTime
.wMonth
;
222 etf
->usWeekday
= SystemTime
.wDayOfWeek
;
223 etf
->usDay
= SystemTime
.wDay
;
224 etf
->usHour
= SystemTime
.wHour
;
225 etf
->usMinute
= SystemTime
.wMinute
;
226 etf
->usSecond
= SystemTime
.wSecond
;
227 etf
->usMilliseconds
= SystemTime
.wMilliseconds
;
235 EngReleaseSemaphore ( IN HSEMAPHORE hsem
)
237 RtlLeaveCriticalSection( (PRTL_CRITICAL_SECTION
) hsem
);
248 EngWideCharToMultiByte( UINT CodePage
,
249 LPWSTR WideCharString
,
250 INT BytesInWideCharString
,
251 LPSTR MultiByteString
,
252 INT BytesInMultiByteString
)
254 return WideCharToMultiByte(CodePage
, 0, WideCharString
, (BytesInWideCharString
/sizeof(WCHAR
)),
255 MultiByteString
, BytesInMultiByteString
, NULL
, NULL
);