Fix integer based resource id assumption.
Add support for string based type ids.

diff --git a/loader/libres.c b/loader/libres.c
index 68db7dc..c4ec51e 100644
--- a/loader/libres.c
+++ b/loader/libres.c
@@ -37,56 +37,56 @@
 /**********************************************************************
  *	    LIBRES_FindResource
  */
+typedef int (*CmpFunc_t)(LPCWSTR a, LPCWSTR b, int c);
+
+int CompareOrdinal(LPCWSTR ordinal, LPCWSTR resstr, int resid)
+{
+    return !resstr && (resid == LOWORD(ordinal));
+} 
+	
+int CompareName(LPCWSTR name, LPCWSTR resstr, int resid)
+{
+    return resstr && !CRTDLL__wcsnicmp(resstr+1, name, *(resstr));
+}
+
 HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
 {
-  int nameid=0,typeid;
+  LPCWSTR nameid = name, typeid = type;
   ResListE* ResBlock;
   const wrc_resource32_t* const * Res;
+  CmpFunc_t EqualNames = CompareOrdinal;
+  CmpFunc_t EqualTypes = CompareOrdinal;
 
   if(HIWORD(name))
   {
     if(*name=='#')
     {
         LPSTR nameA = HEAP_strdupWtoA( GetProcessHeap(), 0, name );
-        nameid = atoi(nameA+1);
+        nameid = (LPCWSTR) atoi(nameA+1);
         HeapFree( GetProcessHeap(), 0, nameA );
-        name=NULL;
     }
-  }
   else
-  {
-    nameid=LOWORD(name);
-    name=NULL;
+	EqualNames = CompareName;
   }
+
   if(HIWORD(type))
   {
     if(*type=='#')
     {
         LPSTR typeA = HEAP_strdupWtoA( GetProcessHeap(), 0, type );
-        typeid=atoi(typeA+1);
+        typeid= (LPCWSTR) atoi(typeA+1);
         HeapFree( GetProcessHeap(), 0, typeA );
     }
     else
-    {
-      TRACE("(*,*,type=string): Returning 0\n");
-      return 0;
-    }
+	EqualTypes = CompareName;
   }
-  else
-    typeid=LOWORD(type);
   
-  /* FIXME: types can be strings */
   for(ResBlock=ResourceList; ResBlock; ResBlock=ResBlock->next)
     for(Res=ResBlock->Resources; *Res; Res++)
-      if(name)
-      {
-	if((*Res)->restype==typeid &&
-           !CRTDLL__wcsnicmp((LPCWSTR)((*Res)->resname+1), name, *((*Res)->resname)))
+	if (EqualNames(nameid, (*Res)->resname, (*Res)->resid) && 
+		EqualTypes(typeid, (*Res)->restypename, (*Res)->restype))
 	  return (HRSRC)*Res;
-      }
-      else
-	if((*Res)->restype==typeid && (*Res)->resid==nameid)
-	  return (HRSRC)*Res;
+
   return 0;
 }