5 #include "debugtools.h"
11 #include "shell32_main.h"
12 #include "wine/undocshell.h"
15 DEFAULT_DEBUG_CHANNEL(shell);
17 BOOL SHELL_WarnItemDelete (int nKindOfDialog, LPCSTR szDir)
19 char szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
21 if(nKindOfDialog == ASK_DELETE_FILE)
23 LoadStringA(shell32_hInstance, IDS_DELETEITEM_TEXT, szText,
25 LoadStringA(shell32_hInstance, IDS_DELETEITEM_CAPTION,
26 szCaption, sizeof(szCaption));
28 else if(nKindOfDialog == ASK_DELETE_FOLDER)
30 LoadStringA(shell32_hInstance, IDS_DELETEITEM_TEXT, szText,
32 LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_CAPTION,
33 szCaption, sizeof(szCaption));
35 else if(nKindOfDialog == ASK_DELETE_MULTIPLE_ITEM)
37 LoadStringA(shell32_hInstance, IDS_DELETEMULTIPLE_TEXT, szText,
39 LoadStringA(shell32_hInstance, IDS_DELETEITEM_CAPTION,
40 szCaption, sizeof(szCaption));
43 FIXME("Called without a valid nKindOfDialog specified!\n");
44 LoadStringA(shell32_hInstance, IDS_DELETEITEM_TEXT, szText,
46 LoadStringA(shell32_hInstance, IDS_DELETEITEM_CAPTION,
47 szCaption, sizeof(szCaption));
50 FormatMessageA(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
51 szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)&szDir);
53 return (IDOK == MessageBoxA(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
56 /**************************************************************************
57 * SHELL_DeleteDirectoryA()
62 BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
67 char szTemp[MAX_PATH];
69 strcpy(szTemp, pszDir);
70 PathAddBackslashA(szTemp);
71 strcat(szTemp, "*.*");
73 if (bShowUI && !SHELL_WarnItemDelete(ASK_DELETE_FOLDER, pszDir))
76 if(INVALID_HANDLE_VALUE != (hFind = FindFirstFileA(szTemp, &wfd)))
80 if(strcasecmp(wfd.cFileName, ".") && strcasecmp(wfd.cFileName, ".."))
82 strcpy(szTemp, pszDir);
83 PathAddBackslashA(szTemp);
84 strcat(szTemp, wfd.cFileName);
86 if(FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
87 SHELL_DeleteDirectoryA(szTemp, FALSE);
91 } while(FindNextFileA(hFind, &wfd));
94 ret = RemoveDirectoryA(pszDir);
100 /**************************************************************************
101 * SHELL_DeleteFileA()
104 BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI)
106 if (bShowUI && !SHELL_WarnItemDelete(ASK_DELETE_FILE, pszFile))
109 return DeleteFileA(pszFile);
112 /*************************************************************************
113 * SHCreateDirectory [SHELL32.165]
116 * exported by ordinal
117 * not sure about LPSECURITY_ATTRIBUTES
119 DWORD WINAPI SHCreateDirectory(LPSECURITY_ATTRIBUTES sec,LPCSTR path)
122 TRACE("(%p,%s)\n",sec,path);
123 if ((ret = CreateDirectoryA(path,sec)))
125 SHChangeNotifyA(SHCNE_MKDIR, SHCNF_PATHA, path, NULL);
130 /************************************************************************
131 * Win32DeleteFile [SHELL32.164]
133 * Deletes a file. Also triggers a change notify if one exists.
136 * Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be
137 * ANSI. Is this Unicode on NT?
141 BOOL WINAPI Win32DeleteFile(LPSTR fName)
143 TRACE("%p(%s)\n", fName, fName);
146 SHChangeNotifyA(SHCNE_DELETE, SHCNF_PATHA, fName, NULL);
150 /*************************************************************************
151 * SHFileOperationA [SHELL32.243]
156 DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
158 LPSTR pFrom = (LPSTR)lpFileOp->pFrom;
159 LPSTR pTo = (LPSTR)lpFileOp->pTo;
162 switch(lpFileOp->wFunc) {
164 TRACE("File Copy:\n");
168 TRACE(" From='%s' To='%s'\n", pFrom, pTo);
170 pTempTo = HeapAlloc(GetProcessHeap(), 0, strlen(pTo)+1);
173 strcpy( pTempTo, pTo );
174 PathRemoveFileSpecA(pTempTo);
175 TRACE(" Creating Directory '%s'\n", pTempTo);
176 SHCreateDirectory(NULL,pTempTo);
177 HeapFree(GetProcessHeap(), 0, pTempTo);
179 CopyFileA(pFrom, pTo, FALSE);
181 pFrom += strlen(pFrom) + 1;
182 pTo += strlen(pTo) + 1;
184 TRACE("Setting AnyOpsAborted=FALSE\n");
185 lpFileOp->fAnyOperationsAborted=FALSE;
189 TRACE("File Delete:\n");
192 TRACE(" File='%s'\n", pFrom);
194 pFrom += strlen(pFrom) + 1;
196 TRACE("Setting AnyOpsAborted=FALSE\n");
197 lpFileOp->fAnyOperationsAborted=FALSE;
201 FIXME("Unhandled shell file operation %d\n", lpFileOp->wFunc);
207 /*************************************************************************
208 * SHFileOperationW [SHELL32.244]
213 DWORD WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp)
215 FIXME("(%p):stub.\n", lpFileOp);
219 /*************************************************************************
220 * SHFileOperation [SHELL32.242]
223 DWORD WINAPI SHFileOperationAW(LPVOID lpFileOp)
225 if (SHELL_OsIsUnicode())
226 return SHFileOperationW(lpFileOp);
227 return SHFileOperationA(lpFileOp);
230 /*************************************************************************
231 * SheGetDirW [SHELL32.281]
234 HRESULT WINAPI SheGetDirW(LPWSTR u, LPWSTR v)
235 { FIXME("%p %p stub\n",u,v);
239 /*************************************************************************
240 * SheChangeDirW [SHELL32.274]
243 HRESULT WINAPI SheChangeDirW(LPWSTR u)
244 { FIXME("(%s),stub\n",debugstr_w(u));
248 /*************************************************************************
249 * IsNetDrive [SHELL32.66]
251 BOOL WINAPI IsNetDrive(DWORD drive)
254 strcpy(root, "A:\\");
256 return (GetDriveTypeA(root) == DRIVE_REMOTE);