Added Drag*32 functions.

diff --git a/misc/shell.c b/misc/shell.c
index 81cf3c7..9659d69 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -65,82 +65,191 @@
 static UINT16	uMsgShellActivate = 0;
 
 /*************************************************************************
- *				DragAcceptFiles		[SHELL.9]
+ *				DragAcceptFiles32		[SHELL32.54]
  */
-void WINAPI DragAcceptFiles(HWND16 hWnd, BOOL16 b)
-{ WND* wnd = WIN_FindWndPtr(hWnd);
-
-    if( wnd )
-	wnd->dwExStyle = b? wnd->dwExStyle | WS_EX_ACCEPTFILES
-			  : wnd->dwExStyle & ~WS_EX_ACCEPTFILES;
+void WINAPI DragAcceptFiles32(HWND32 hWnd, BOOL32 b)
+{
+  WND* wnd = WIN_FindWndPtr(hWnd);
+  
+  if( wnd )
+    wnd->dwExStyle = b? wnd->dwExStyle | WS_EX_ACCEPTFILES
+                      : wnd->dwExStyle & ~WS_EX_ACCEPTFILES;
 }
 
+/*************************************************************************
+ *				DragAcceptFiles16		[SHELL.9]
+ */
+void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)
+{
+  DragAcceptFiles32(hWnd, b);
+}
 
 /*************************************************************************
- *				DragQueryFile		[SHELL.11]
+ *				SHELL_DragQueryFile	[internal]
+ * 
  */
-UINT16 WINAPI DragQueryFile(HDROP16 hDrop, WORD wFile, LPSTR lpszFile,
+static UINT32 SHELL_DragQueryFile(LPSTR lpDrop, LPWSTR lpwDrop, UINT32 lFile, 
+				  LPSTR lpszFile, LPWSTR lpszwFile, UINT32 lLength)
+{
+    UINT32 i;
+
+    i = 0;
+    if (lpDrop) {
+    while (i++ < lFile) {
+	while (*lpDrop++); /* skip filename */
+	if (!*lpDrop) 
+	  return (lFile == 0xFFFFFFFF) ? i : 0;  
+      }
+    }
+    if (lpwDrop) {
+      while (i++ < lFile) {
+	while (*lpwDrop++); /* skip filename */
+	if (!*lpwDrop) 
+	  return (lFile == 0xFFFFFFFF) ? i : 0;  
+      }
+    }
+    
+    if (lpDrop)  i = lstrlen32A(lpDrop);
+    if (lpwDrop) i = lstrlen32W(lpwDrop);
+    i++;
+    if (!lpszFile && !lpszwFile) {
+      return i;   /* needed buffer size */
+    }
+    i = (lLength > i) ? i : lLength;
+    if (lpszFile) {
+      if (lpDrop) lstrcpyn32A (lpszFile,  lpDrop,  i);
+      else        lstrcpynWtoA(lpszFile,  lpwDrop, i);
+    } else {
+      if (lpDrop) lstrcpynAtoW(lpszwFile, lpDrop,  i);
+      else        lstrcpyn32W (lpszwFile, lpwDrop, i);
+    }
+    return i;
+}
+
+/*************************************************************************
+ *				DragQueryFile32A	[SHELL32.81] [shell32.82]
+ */
+UINT32 WINAPI DragQueryFile32A(HDROP32 hDrop, UINT32 lFile, LPSTR lpszFile,
+			      UINT32 lLength)
+{ /* hDrop is a global memory block allocated with GMEM_SHARE 
+     * with DROPFILESTRUCT as a header and filenames following
+     * it, zero length filename is in the end */       
+    
+    LPDROPFILESTRUCT32 lpDropFileStruct;
+    LPSTR lpCurrent;
+    UINT32 i;
+    
+    TRACE(shell,"(%08x, %x, %p, %u)\n",	hDrop,lFile,lpszFile,lLength);
+    
+    lpDropFileStruct = (LPDROPFILESTRUCT32) GlobalLock32(hDrop); 
+    if(!lpDropFileStruct)
+      return 0;
+
+    lpCurrent = (LPSTR) lpDropFileStruct + lpDropFileStruct->lSize;
+    i = SHELL_DragQueryFile(lpCurrent, NULL, lFile, lpszFile, NULL, lLength);
+    GlobalUnlock32(hDrop);
+    return i;
+}
+
+/*************************************************************************
+ *				DragQueryFile32W	[shell32.133]
+ */
+UINT32 WINAPI DragQueryFile32W(HDROP32 hDrop, UINT32 lFile, LPWSTR lpszwFile,
+			      UINT32 lLength)
+{
+    LPDROPFILESTRUCT32 lpDropFileStruct;
+    LPWSTR lpwCurrent;
+    UINT32 i;
+    
+    TRACE(shell,"(%08x, %x, %p, %u)\n",	hDrop,lFile,lpszwFile,lLength);
+    
+    lpDropFileStruct = (LPDROPFILESTRUCT32) GlobalLock32(hDrop); 
+    if(!lpDropFileStruct)
+      return 0;
+
+    lpwCurrent = (LPWSTR) lpDropFileStruct + lpDropFileStruct->lSize;
+    i = SHELL_DragQueryFile(NULL, lpwCurrent, lFile, NULL, lpszwFile,lLength);
+    GlobalUnlock32(hDrop);
+    return i;
+}
+/*************************************************************************
+ *				DragQueryFile16		[SHELL.11]
+ */
+UINT16 WINAPI DragQueryFile16(HDROP16 hDrop, WORD wFile, LPSTR lpszFile,
                             WORD wLength)
 { /* hDrop is a global memory block allocated with GMEM_SHARE 
      * with DROPFILESTRUCT as a header and filenames following
      * it, zero length filename is in the end */       
     
-    LPDROPFILESTRUCT lpDropFileStruct;
+    LPDROPFILESTRUCT16 lpDropFileStruct;
     LPSTR lpCurrent;
     WORD  i;
     
-  TRACE(shell,"(%04x, %i, %p, %u)\n",
-		hDrop,wFile,lpszFile,wLength);
+    TRACE(shell,"(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength);
     
-    lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock16(hDrop); 
-  if(!lpDropFileStruct)
-    return 0;
-
+    lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop); 
+    if(!lpDropFileStruct)
+      return 0;
+    
     lpCurrent = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize;
-    
-    i = 0;
-    while (i++ < wFile)
-  { while (*lpCurrent++);  /* skip filename */
-	if (!*lpCurrent) 
-	    return (wFile == 0xFFFF) ? i : 0;  
-    }
-    
-    i = strlen(lpCurrent); 
-  if (!lpszFile)
-    return i+1;   /* needed buffer size */
-    
-    i = (wLength > i) ? i : wLength-1;
-    strncpy(lpszFile, lpCurrent, i);
-    lpszFile[i] = '\0';
 
+    i = (WORD)SHELL_DragQueryFile(lpCurrent, NULL, wFile==0xffff?0xffffffff:wFile,
+				  lpszFile, NULL, wLength);
     GlobalUnlock16(hDrop);
     return i;
 }
 
 
+
 /*************************************************************************
- *				DragFinish		[SHELL.12]
+ *				DragFinish32		[SHELL32.80]
  */
-void WINAPI DragFinish(HDROP16 h)
+void WINAPI DragFinish32(HDROP32 h)
+{ TRACE(shell,"\n");
+    GlobalFree32((HGLOBAL32)h);
+}
+
+/*************************************************************************
+ *				DragFinish16		[SHELL.12]
+ */
+void WINAPI DragFinish16(HDROP16 h)
 { TRACE(shell,"\n");
     GlobalFree16((HGLOBAL16)h);
 }
 
 
 /*************************************************************************
- *				DragQueryPoint		[SHELL.13]
+ *				DragQueryPoint32		[SHELL32.135]
  */
-BOOL16 WINAPI DragQueryPoint(HDROP16 hDrop, POINT16 *p)
-{ LPDROPFILESTRUCT lpDropFileStruct;  
-    BOOL16           bRet;
+BOOL32 WINAPI DragQueryPoint32(HDROP32 hDrop, POINT32 *p)
+{
+  LPDROPFILESTRUCT32 lpDropFileStruct;  
+  BOOL32             bRet;
   TRACE(shell,"\n");
-    lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock16(hDrop);
+  lpDropFileStruct = (LPDROPFILESTRUCT32) GlobalLock32(hDrop);
+  
+  memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT32));
+  bRet = lpDropFileStruct->fInNonClientArea;
+  
+  GlobalUnlock32(hDrop);
+  return bRet;
+}
 
-    memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT16));
-    bRet = lpDropFileStruct->fInNonClientArea;
-
-    GlobalUnlock16(hDrop);
-    return bRet;
+/*************************************************************************
+ *				DragQueryPoint16		[SHELL.13]
+ */
+BOOL16 WINAPI DragQueryPoint16(HDROP16 hDrop, POINT16 *p)
+{
+  LPDROPFILESTRUCT16 lpDropFileStruct;  
+  BOOL16           bRet;
+  TRACE(shell,"\n");
+  lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);
+  
+  memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT16));
+  bRet = lpDropFileStruct->fInNonClientArea;
+  
+  GlobalUnlock16(hDrop);
+  return bRet;
 }
 
 /*************************************************************************