1 /* 2 * reactos/lib/gdi32/misc/eng.c 3 * 4 * GDI32.DLL eng part 5 * 6 * 7 */ 8 9 #include <precomp.h> 10 11 /* 12 * @implemented 13 */ 14 VOID 15 WINAPI 16 EngAcquireSemaphore ( IN HSEMAPHORE hsem ) 17 { 18 RtlEnterCriticalSection((PRTL_CRITICAL_SECTION)hsem); 19 } 20 21 22 /* 23 * @unimplemented 24 */ 25 BOOL 26 copy_my_glyphset( FD_GLYPHSET *dst_glyphset , FD_GLYPHSET * src_glyphset, ULONG Size) 27 { 28 BOOL retValue = FALSE; 29 30 memcpy(src_glyphset, dst_glyphset, Size); 31 if (src_glyphset->cRuns == 0) 32 { 33 retValue = TRUE; 34 } 35 36 /* FIXME copy wrun */ 37 return retValue; 38 } 39 40 /* 41 * @implemented 42 */ 43 FD_GLYPHSET* 44 WINAPI 45 EngComputeGlyphSet(INT nCodePage,INT nFirstChar,INT cChars) 46 { 47 FD_GLYPHSET * ntfd_glyphset; 48 FD_GLYPHSET * myfd_glyphset = NULL; 49 50 ntfd_glyphset = NtGdiEngComputeGlyphSet(nCodePage,nFirstChar,cChars); 51 52 if (ntfd_glyphset) 53 { 54 if (ntfd_glyphset->cjThis) 55 { 56 myfd_glyphset = GlobalAlloc(0,ntfd_glyphset->cjThis); 57 if (myfd_glyphset) 58 { 59 if (copy_my_glyphset(myfd_glyphset,ntfd_glyphset,ntfd_glyphset->cjThis) == FALSE) 60 { 61 GlobalFree(myfd_glyphset); 62 myfd_glyphset = NULL; 63 } 64 } 65 } 66 } 67 return myfd_glyphset; 68 } 69 70 /* 71 * @implemented 72 */ 73 HSEMAPHORE 74 WINAPI 75 EngCreateSemaphore ( VOID ) 76 { 77 PRTL_CRITICAL_SECTION CritSect = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_CRITICAL_SECTION)); 78 if (!CritSect) 79 { 80 return NULL; 81 } 82 83 RtlInitializeCriticalSection( CritSect ); 84 return (HSEMAPHORE)CritSect; 85 } 86 87 /* 88 * @implemented 89 */ 90 VOID 91 WINAPI 92 EngDeleteSemaphore ( IN HSEMAPHORE hsem ) 93 { 94 if (hsem) 95 { 96 RtlDeleteCriticalSection( (PRTL_CRITICAL_SECTION) hsem ); 97 RtlFreeHeap( GetProcessHeap(), 0, hsem ); 98 } 99 } 100 101 /* 102 * @implemented 103 */ 104 PVOID WINAPI 105 EngFindResource(HANDLE h, 106 int iName, 107 int iType, 108 PULONG pulSize) 109 { 110 HRSRC HRSrc; 111 DWORD Size = 0; 112 HGLOBAL Hg; 113 LPVOID Lock = NULL; 114 115 HRSrc = FindResourceW((HMODULE)h, MAKEINTRESOURCEW(iName), MAKEINTRESOURCEW(iType)); 116 if (HRSrc != NULL) 117 { 118 Size = SizeofResource((HMODULE)h, HRSrc); 119 if (Size != 0) 120 { 121 Hg = LoadResource((HMODULE)h, HRSrc); 122 if (Hg != NULL) 123 { 124 Lock = LockResource( Hg ); 125 } 126 } 127 } 128 129 *pulSize = Size; 130 return (PVOID) Lock; 131 } 132 133 /* 134 * @implemented 135 */ 136 VOID WINAPI 137 EngFreeModule(HANDLE h) 138 { 139 FreeLibrary(h); 140 } 141 142 /* 143 * @implemented 144 */ 145 146 VOID WINAPI 147 EngGetCurrentCodePage( OUT PUSHORT OemCodePage, 148 OUT PUSHORT AnsiCodePage) 149 { 150 *OemCodePage = GetOEMCP(); 151 *AnsiCodePage = GetACP(); 152 } 153 154 155 /* 156 * @implemented 157 */ 158 LPWSTR WINAPI 159 EngGetDriverName(HDEV hdev) 160 { 161 // DHPDEV from NtGdiGetDhpdev must be from print driver. 162 PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev); 163 164 if (!pPDev) return NULL; 165 166 if (pPDev->Sig != PDEV_UMPD_ID) 167 { 168 pPDev = (PUMPDEV)pPDev->Sig; 169 } 170 return pPDev->pdi5Info->pDriverPath; 171 } 172 173 /* 174 * @implemented 175 */ 176 LPWSTR WINAPI 177 EngGetPrinterDataFileName(HDEV hdev) 178 { 179 PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev); 180 181 if (!pPDev) return NULL; 182 183 if (pPDev->Sig != PDEV_UMPD_ID) 184 { 185 pPDev = (PUMPDEV)pPDev->Sig; 186 } 187 return pPDev->pdi5Info->pDataFile; 188 } 189 190 /* 191 * @implemented 192 */ 193 HANDLE WINAPI 194 EngLoadModule(LPWSTR pwsz) 195 { 196 return LoadLibraryExW ( pwsz, NULL, LOAD_LIBRARY_AS_DATAFILE); 197 } 198 199 /* 200 * @implemented 201 */ 202 INT WINAPI 203 EngMultiByteToWideChar(UINT CodePage, 204 LPWSTR WideCharString, 205 INT BytesInWideCharString, 206 LPSTR MultiByteString, 207 INT BytesInMultiByteString) 208 { 209 return MultiByteToWideChar(CodePage,0,MultiByteString,BytesInMultiByteString,WideCharString,BytesInWideCharString / sizeof(WCHAR)); 210 } 211 212 /* 213 * @implemented 214 */ 215 VOID WINAPI 216 EngQueryLocalTime(PENG_TIME_FIELDS etf) 217 { 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; 228 } 229 230 /* 231 * @implemented 232 */ 233 VOID 234 WINAPI 235 EngReleaseSemaphore ( IN HSEMAPHORE hsem ) 236 { 237 RtlLeaveCriticalSection( (PRTL_CRITICAL_SECTION) hsem); 238 } 239 240 /* 241 * @implemented 242 */ 243 INT 244 WINAPI 245 EngWideCharToMultiByte( UINT CodePage, 246 LPWSTR WideCharString, 247 INT BytesInWideCharString, 248 LPSTR MultiByteString, 249 INT BytesInMultiByteString) 250 { 251 return WideCharToMultiByte(CodePage, 0, WideCharString, (BytesInWideCharString/sizeof(WCHAR)), 252 MultiByteString, BytesInMultiByteString, NULL, NULL); 253 } 254 255 /* 256 * @unimplemented 257 */ 258 ULONG * 259 WINAPI 260 XLATEOBJ_piVector(XLATEOBJ *XlateObj) 261 { 262 return XlateObj->pulXlate; 263 } 264 265