update for HEAD-2003050101
[reactos.git] / lib / kernel32 / misc / res.c
1 /* $Id$
2  *
3  * COPYRIGHT: See COPYING in the top level directory
4  * PROJECT  : ReactOS user mode libraries
5  * MODULE   : kernel32.dll
6  * FILE     : reactos/lib/kernel32/misc/res.c
7  * AUTHOR   : ???
8  */
9
10 #include <k32.h>
11
12 #define NDEBUG
13 #include <kernel32/kernel32.h>
14
15
16 HRSRC
17 STDCALL
18 FindResourceA (
19         HINSTANCE       hModule,
20         LPCSTR          lpName,
21         LPCSTR          lpType
22         )
23 {
24         return FindResourceExA (hModule, lpType, lpName, 0);
25 }
26
27 HRSRC
28 STDCALL
29 FindResourceExA(
30         HINSTANCE       hModule,
31         LPCSTR          lpType,
32         LPCSTR          lpName,
33         WORD            wLanguage
34         )
35 {
36         UNICODE_STRING TypeU;
37         UNICODE_STRING NameU;
38         ANSI_STRING Type;
39         ANSI_STRING Name;
40         HRSRC Res;
41
42         RtlInitUnicodeString (&NameU,
43                               NULL);
44         RtlInitUnicodeString (&TypeU,
45                               NULL);
46
47         if (HIWORD(lpName) != 0)
48         {
49                 RtlInitAnsiString (&Name,
50                                    (LPSTR)lpName);
51                 RtlAnsiStringToUnicodeString (&NameU,
52                                               &Name,
53                                               TRUE);
54         }
55         else
56                 NameU.Buffer = (PWSTR)lpName;
57
58         if (HIWORD(lpType) != 0)
59         {
60                 RtlInitAnsiString (&Type,
61                                    (LPSTR)lpType);
62                 RtlAnsiStringToUnicodeString (&TypeU,
63                                               &Type,
64                                               TRUE);
65         }
66         else
67                 TypeU.Buffer = (PWSTR)lpType;
68
69         Res = FindResourceExW (hModule,
70                                TypeU.Buffer,
71                                NameU.Buffer,
72                                wLanguage);
73
74         if (HIWORD(lpName) != 0)
75                 RtlFreeUnicodeString (&NameU);
76
77         if (HIWORD(lpType) != 0)
78                 RtlFreeUnicodeString (&TypeU);
79
80         return Res;
81 }
82
83 HRSRC
84 STDCALL
85 FindResourceW (
86         HINSTANCE       hModule,
87         LPCWSTR         lpName,
88         LPCWSTR         lpType
89         )
90 {
91         return FindResourceExW (hModule, lpType, lpName, 0);
92 }
93
94 HRSRC
95 STDCALL
96 FindResourceExW (
97         HINSTANCE       hModule,
98         LPCWSTR         lpType,
99         LPCWSTR         lpName,
100         WORD            wLanguage
101         )
102 {
103         PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry = NULL;
104         LDR_RESOURCE_INFO ResourceInfo;
105         NTSTATUS Status;
106
107         if ( hModule == NULL )
108                 hModule = GetModuleHandle(NULL);
109
110         if ( !IS_INTRESOURCE(lpName) && lpName[0] == L'#' ) {
111                 lpName = MAKEINTRESOURCEW(wcstoul(lpName + 1, NULL, 10));
112         }
113         if ( !IS_INTRESOURCE(lpType) && lpType[0] == L'#' ) {
114                 lpType = MAKEINTRESOURCEW(wcstoul(lpType + 1, NULL, 10));
115         }
116
117         ResourceInfo.Type = (ULONG)lpType;
118         ResourceInfo.Name = (ULONG)lpName;
119         ResourceInfo.Language = (ULONG)wLanguage;
120
121         Status = LdrFindResource_U (hModule,
122                                     &ResourceInfo,
123                                     RESOURCE_DATA_LEVEL,
124                                     &ResourceDataEntry);
125         if (!NT_SUCCESS(Status))
126         {
127                 SetLastErrorByStatus (Status);
128                 return NULL;
129         }
130
131         return ResourceDataEntry;
132 }
133
134 HGLOBAL
135 STDCALL
136 LoadResource (
137         HINSTANCE       hModule,
138         HRSRC           hResInfo
139         )
140 {
141         NTSTATUS Status;
142         PVOID Data;
143
144    if (hModule == NULL)
145    {
146      hModule = GetModuleHandle(NULL);
147    }
148
149         Status = LdrAccessResource (hModule, hResInfo, &Data, NULL);
150         if (!NT_SUCCESS(Status))
151         {
152                 SetLastErrorByStatus (Status);
153                 return NULL;
154         }
155
156         return Data;
157 }
158
159 DWORD
160 STDCALL
161 SizeofResource (
162         HINSTANCE       hModule,
163         HRSRC           hResInfo
164         )
165 {
166         return ((PIMAGE_RESOURCE_DATA_ENTRY)hResInfo)->Size;
167 }
168
169 WINBOOL
170 STDCALL
171 FreeResource (
172         HGLOBAL hResData
173         )
174 {
175         return TRUE;
176 }
177
178 LPVOID
179 STDCALL
180 LockResource (
181         HGLOBAL hResData
182         )
183 {
184         return hResData;
185 }
186
187 HANDLE
188 STDCALL
189 BeginUpdateResourceW (
190         LPCWSTR pFileName,
191         WINBOOL bDeleteExistingResources
192         )
193 {
194         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
195         return FALSE;
196 }
197
198
199 HANDLE
200 STDCALL
201 BeginUpdateResourceA (
202         LPCSTR  pFileName,
203         WINBOOL bDeleteExistingResources
204         )
205 {
206         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
207         return FALSE;
208 }
209
210 WINBOOL
211 STDCALL
212 EndUpdateResourceW (
213         HANDLE  hUpdate,
214         WINBOOL fDiscard
215         )
216 {
217         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
218         return FALSE;
219 }
220
221
222 WINBOOL
223 STDCALL
224 EndUpdateResourceA (
225         HANDLE  hUpdate,
226         WINBOOL fDiscard
227         )
228 {
229         return EndUpdateResourceW(
230                         hUpdate,
231                         fDiscard
232                         );
233 }
234
235 WINBOOL
236 STDCALL
237 EnumResourceLanguagesW (
238         HINSTANCE       hModule,
239         LPCWSTR         lpType,
240         LPCWSTR         lpName,
241         ENUMRESLANGPROC lpEnumFunc,
242         LONG            lParam
243         )
244 {
245         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
246         return FALSE;
247 }
248
249
250 WINBOOL
251 STDCALL
252 EnumResourceLanguagesA (
253         HINSTANCE       hModule,
254         LPCSTR          lpType,
255         LPCSTR          lpName,
256         ENUMRESLANGPROC lpEnumFunc,
257         LONG            lParam
258         )
259 {
260         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
261         return FALSE;
262 }
263
264
265 WINBOOL
266 STDCALL
267 EnumResourceNamesW (
268         HINSTANCE       hModule,
269         LPCWSTR         lpType,
270         ENUMRESNAMEPROC lpEnumFunc,
271         LONG            lParam
272         )
273 {
274         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
275         return FALSE;
276 }
277
278
279 WINBOOL
280 STDCALL
281 EnumResourceNamesA (
282         HINSTANCE       hModule,
283         LPCSTR          lpType,
284         ENUMRESNAMEPROC lpEnumFunc,
285         LONG            lParam
286         )
287 {
288         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
289         return FALSE;
290 }
291
292
293 WINBOOL
294 STDCALL
295 EnumResourceTypesW (
296         HINSTANCE       hModule,
297         ENUMRESTYPEPROC lpEnumFunc,
298         LONG            lParam
299         )
300 {
301         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
302         return FALSE;
303 }
304
305
306
307 WINBOOL
308 STDCALL
309 EnumResourceTypesA (
310         HINSTANCE       hModule,
311         ENUMRESTYPEPROC lpEnumFunc,
312         LONG            lParam
313         )
314 {
315         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
316         return FALSE;
317 }
318
319 WINBOOL
320 STDCALL
321 UpdateResourceA (
322         HANDLE  hUpdate,
323         LPCSTR  lpType,
324         LPCSTR  lpName,
325         WORD    wLanguage,
326         LPVOID  lpData,
327         DWORD   cbData
328         )
329 {
330         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
331         return FALSE;
332 }
333
334
335 WINBOOL
336 STDCALL
337 UpdateResourceW (
338         HANDLE  hUpdate,
339         LPCWSTR lpType,
340         LPCWSTR lpName,
341         WORD    wLanguage,
342         LPVOID  lpData,
343         DWORD   cbData
344         )
345 {
346         SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
347         return FALSE;
348 }
349
350
351 /* EOF */