Release 951212
[wine/dcerpc.git] / toolkit / libres.c
blobae23b415d90351fe736b30e01100a324538cacd7
1 /*
2 * WINElib-Resources
4 * Copied and modified heavily from loader/resource.c
5 */
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include "libres.h"
11 typedef struct RLE
13 struct resource** Resources; /* NULL-terminated array of pointers */
14 struct RLE* next;
15 } ResListE;
17 static ResListE* ResourceList=NULL;
19 void LIBRES_RegisterResources(struct resource** Res)
21 ResListE** Curr;
22 ResListE* n;
23 for(Curr=&ResourceList; *Curr; Curr=&((*Curr)->next)) { }
24 n=xmalloc(sizeof(ResListE));
25 if(n)
27 n->Resources=Res;
28 n->next=NULL;
29 *Curr=n;
31 else
32 fprintf(stderr,"LIBRES_RegisterResources(): Out of memory.\n");
35 /**********************************************************************
36 * LIBRES_FindResource
38 HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCSTR name, LPCSTR type )
40 int nameid=0,typeid;
41 ResListE* ResBlock;
42 struct resource** Res;
44 if(HIWORD(name))
46 if(*name=='#')
48 nameid=atoi(name+1);
49 name=NULL;
52 else
54 nameid=LOWORD(name);
55 name=NULL;
57 if(HIWORD(type))
59 if(*type=='#')
60 typeid=atoi(type+1);
61 else
63 WINELIB_UNIMP("LIBRES_FindResource(*,*,type=string)");
64 return 0;
67 else
68 typeid=LOWORD(type);
70 for(ResBlock=ResourceList; ResBlock; ResBlock=ResBlock->next)
71 for(Res=ResBlock->Resources; *Res; Res++)
72 if(name)
74 if((*Res)->type==typeid && !strcmp((*Res)->name,name))
75 return (HRSRC)*Res;
77 else
78 if((*Res)->type==typeid && (*Res)->id==nameid)
79 return (HRSRC)*Res;
80 return 0;
84 /**********************************************************************
85 * LIBRES_LoadResource
87 HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc )
89 return (HGLOBAL)(((struct resource*)hRsrc)->bytes);
93 /**********************************************************************
94 * LIBRES_LockResource
96 LPVOID LIBRES_LockResource( HGLOBAL handle )
98 return handle;
102 /**********************************************************************
103 * LIBRES_FreeResource
105 BOOL LIBRES_FreeResource( HGLOBAL handle )
107 WINELIB_UNIMP("LIBRES_FreeResource()");
108 return 0; /* Obsolete in Win32 */
112 /**********************************************************************
113 * LIBRES_AccessResource
115 INT LIBRES_AccessResource( HINSTANCE hModule, HRSRC hRsrc )
117 WINELIB_UNIMP("LIBRES_AccessResource()");
118 return -1; /* Obsolete in Win32 */
122 /**********************************************************************
123 * LIBRES_SizeofResource
125 DWORD LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc )
127 return (DWORD)(((struct resource*)hRsrc)->size);
131 /**********************************************************************
132 * LIBRES_AllocResource
134 HGLOBAL LIBRES_AllocResource( HINSTANCE hModule, HRSRC hRsrc, DWORD size )
136 WINELIB_UNIMP("LIBRES_AllocResource()");
137 return 0; /* Obsolete in Win32 */