1*f6dc9357SAndroid Build Coastguard Worker // Far.cpp
2*f6dc9357SAndroid Build Coastguard Worker // Test Align for updating !!!!!!!!!!!!!!!!!!
3*f6dc9357SAndroid Build Coastguard Worker
4*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
5*f6dc9357SAndroid Build Coastguard Worker
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyWindows.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyInitGuid.h"
8*f6dc9357SAndroid Build Coastguard Worker
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
10*f6dc9357SAndroid Build Coastguard Worker
11*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileDir.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/NtCheck.h"
13*f6dc9357SAndroid Build Coastguard Worker
14*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/FileStreams.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker #include "Messages.h"
17*f6dc9357SAndroid Build Coastguard Worker #include "Plugin.h"
18*f6dc9357SAndroid Build Coastguard Worker #include "ProgressBox.h"
19*f6dc9357SAndroid Build Coastguard Worker
20*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
21*f6dc9357SAndroid Build Coastguard Worker using namespace NFile;
22*f6dc9357SAndroid Build Coastguard Worker using namespace NDir;
23*f6dc9357SAndroid Build Coastguard Worker using namespace NFar;
24*f6dc9357SAndroid Build Coastguard Worker
25*f6dc9357SAndroid Build Coastguard Worker static const DWORD kShowProgressTime_ms = 100;
26*f6dc9357SAndroid Build Coastguard Worker
27*f6dc9357SAndroid Build Coastguard Worker static const char * const kCommandPrefix = "7-zip";
28*f6dc9357SAndroid Build Coastguard Worker static const char * const kRegisrtryMainKeyName = NULL; // ""
29*f6dc9357SAndroid Build Coastguard Worker static LPCTSTR const kRegisrtryValueNameEnabled = TEXT("UsedByDefault3");
30*f6dc9357SAndroid Build Coastguard Worker static const char * const kHelpTopicConfig = "Config";
31*f6dc9357SAndroid Build Coastguard Worker static bool kPluginEnabledDefault = true;
32*f6dc9357SAndroid Build Coastguard Worker
33*f6dc9357SAndroid Build Coastguard Worker extern
34*f6dc9357SAndroid Build Coastguard Worker HINSTANCE g_hInstance;
35*f6dc9357SAndroid Build Coastguard Worker HINSTANCE g_hInstance;
36*f6dc9357SAndroid Build Coastguard Worker
37*f6dc9357SAndroid Build Coastguard Worker namespace NFar {
38*f6dc9357SAndroid Build Coastguard Worker
39*f6dc9357SAndroid Build Coastguard Worker extern
40*f6dc9357SAndroid Build Coastguard Worker const char *g_PluginName_for_Error;
41*f6dc9357SAndroid Build Coastguard Worker const char *g_PluginName_for_Error = "7-Zip";
42*f6dc9357SAndroid Build Coastguard Worker
43*f6dc9357SAndroid Build Coastguard Worker }
44*f6dc9357SAndroid Build Coastguard Worker
45*f6dc9357SAndroid Build Coastguard Worker #if defined(_UNICODE) && !defined(_WIN64) && !defined(UNDER_CE)
46*f6dc9357SAndroid Build Coastguard Worker #define NT_CHECK_FAIL_ACTION return FALSE;
47*f6dc9357SAndroid Build Coastguard Worker #endif
48*f6dc9357SAndroid Build Coastguard Worker
49*f6dc9357SAndroid Build Coastguard Worker BOOL WINAPI DllMain(
50*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
51*f6dc9357SAndroid Build Coastguard Worker HANDLE
52*f6dc9357SAndroid Build Coastguard Worker #else
53*f6dc9357SAndroid Build Coastguard Worker HINSTANCE
54*f6dc9357SAndroid Build Coastguard Worker #endif
55*f6dc9357SAndroid Build Coastguard Worker hInstance, DWORD dwReason, LPVOID);
DllMain(HANDLE hInstance,DWORD dwReason,LPVOID)56*f6dc9357SAndroid Build Coastguard Worker BOOL WINAPI DllMain(
57*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
58*f6dc9357SAndroid Build Coastguard Worker HANDLE
59*f6dc9357SAndroid Build Coastguard Worker #else
60*f6dc9357SAndroid Build Coastguard Worker HINSTANCE
61*f6dc9357SAndroid Build Coastguard Worker #endif
62*f6dc9357SAndroid Build Coastguard Worker hInstance, DWORD dwReason, LPVOID)
63*f6dc9357SAndroid Build Coastguard Worker {
64*f6dc9357SAndroid Build Coastguard Worker if (dwReason == DLL_PROCESS_ATTACH)
65*f6dc9357SAndroid Build Coastguard Worker {
66*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("7-Zip FAR DLL_PROCESS_ATTACH");
67*f6dc9357SAndroid Build Coastguard Worker g_hInstance = (HINSTANCE)hInstance;
68*f6dc9357SAndroid Build Coastguard Worker NT_CHECK
69*f6dc9357SAndroid Build Coastguard Worker }
70*f6dc9357SAndroid Build Coastguard Worker if (dwReason == DLL_PROCESS_DETACH)
71*f6dc9357SAndroid Build Coastguard Worker {
72*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("7-Zip FAR DLL_PROCESS_DETACH");
73*f6dc9357SAndroid Build Coastguard Worker }
74*f6dc9357SAndroid Build Coastguard Worker return TRUE;
75*f6dc9357SAndroid Build Coastguard Worker }
76*f6dc9357SAndroid Build Coastguard Worker
77*f6dc9357SAndroid Build Coastguard Worker static struct COptions
78*f6dc9357SAndroid Build Coastguard Worker {
79*f6dc9357SAndroid Build Coastguard Worker bool Enabled;
80*f6dc9357SAndroid Build Coastguard Worker } g_Options;
81*f6dc9357SAndroid Build Coastguard Worker
82*f6dc9357SAndroid Build Coastguard Worker static const char * const kPliginNameForRegistry = "7-ZIP";
83*f6dc9357SAndroid Build Coastguard Worker
ExitFAR()84*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI ExitFAR()
85*f6dc9357SAndroid Build Coastguard Worker {
86*f6dc9357SAndroid Build Coastguard Worker /* WIN32:
87*f6dc9357SAndroid Build Coastguard Worker it's not allowed to call FreeLibrary() from FreeLibrary().
88*f6dc9357SAndroid Build Coastguard Worker So we try to free all DLLs before destructors */
89*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("-- ExitFAR --- START");
90*f6dc9357SAndroid Build Coastguard Worker
91*f6dc9357SAndroid Build Coastguard Worker FreeGlobalCodecs();
92*f6dc9357SAndroid Build Coastguard Worker
93*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("-- ExitFAR --- END");
94*f6dc9357SAndroid Build Coastguard Worker }
95*f6dc9357SAndroid Build Coastguard Worker
SetStartupInfo(const PluginStartupInfo * info)96*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI SetStartupInfo(const PluginStartupInfo *info)
97*f6dc9357SAndroid Build Coastguard Worker {
98*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
99*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.Init(*info, kPliginNameForRegistry);
100*f6dc9357SAndroid Build Coastguard Worker g_Options.Enabled = g_StartupInfo.QueryRegKeyValue(
101*f6dc9357SAndroid Build Coastguard Worker HKEY_CURRENT_USER, kRegisrtryMainKeyName,
102*f6dc9357SAndroid Build Coastguard Worker kRegisrtryValueNameEnabled, kPluginEnabledDefault);
103*f6dc9357SAndroid Build Coastguard Worker
104*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("SetStartupInfo");
105*f6dc9357SAndroid Build Coastguard Worker // LoadGlobalCodecs();
106*f6dc9357SAndroid Build Coastguard Worker
107*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END1("SetStartupInfo")
108*f6dc9357SAndroid Build Coastguard Worker }
109*f6dc9357SAndroid Build Coastguard Worker
110*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_3(
111*f6dc9357SAndroid Build Coastguard Worker COpenArchiveCallback
112*f6dc9357SAndroid Build Coastguard Worker , IArchiveOpenCallback
113*f6dc9357SAndroid Build Coastguard Worker , IProgress
114*f6dc9357SAndroid Build Coastguard Worker , ICryptoGetTextPassword
115*f6dc9357SAndroid Build Coastguard Worker )
116*f6dc9357SAndroid Build Coastguard Worker // DWORD m_StartTickValue;
117*f6dc9357SAndroid Build Coastguard Worker bool m_MessageBoxIsShown;
118*f6dc9357SAndroid Build Coastguard Worker
119*f6dc9357SAndroid Build Coastguard Worker bool _numFilesTotalDefined;
120*f6dc9357SAndroid Build Coastguard Worker bool _numBytesTotalDefined;
121*f6dc9357SAndroid Build Coastguard Worker public:
122*f6dc9357SAndroid Build Coastguard Worker bool PasswordIsDefined;
123*f6dc9357SAndroid Build Coastguard Worker UString Password;
124*f6dc9357SAndroid Build Coastguard Worker
125*f6dc9357SAndroid Build Coastguard Worker private:
126*f6dc9357SAndroid Build Coastguard Worker CProgressBox _progressBox;
127*f6dc9357SAndroid Build Coastguard Worker public:
128*f6dc9357SAndroid Build Coastguard Worker
129*f6dc9357SAndroid Build Coastguard Worker COpenArchiveCallback()
130*f6dc9357SAndroid Build Coastguard Worker {}
131*f6dc9357SAndroid Build Coastguard Worker
132*f6dc9357SAndroid Build Coastguard Worker void Init()
133*f6dc9357SAndroid Build Coastguard Worker {
134*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = false;
135*f6dc9357SAndroid Build Coastguard Worker
136*f6dc9357SAndroid Build Coastguard Worker _numFilesTotalDefined = false;
137*f6dc9357SAndroid Build Coastguard Worker _numBytesTotalDefined = false;
138*f6dc9357SAndroid Build Coastguard Worker
139*f6dc9357SAndroid Build Coastguard Worker m_MessageBoxIsShown = false;
140*f6dc9357SAndroid Build Coastguard Worker
141*f6dc9357SAndroid Build Coastguard Worker _progressBox.Init(
142*f6dc9357SAndroid Build Coastguard Worker // g_StartupInfo.GetMsgString(NMessageID::kWaitTitle),
143*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.GetMsgString(NMessageID::kReading));
144*f6dc9357SAndroid Build Coastguard Worker }
145*f6dc9357SAndroid Build Coastguard Worker void ShowMessage();
146*f6dc9357SAndroid Build Coastguard Worker };
147*f6dc9357SAndroid Build Coastguard Worker
148*f6dc9357SAndroid Build Coastguard Worker static HRESULT CheckBreak2()
149*f6dc9357SAndroid Build Coastguard Worker {
150*f6dc9357SAndroid Build Coastguard Worker return WasEscPressed() ? E_ABORT : S_OK;
151*f6dc9357SAndroid Build Coastguard Worker }
152*f6dc9357SAndroid Build Coastguard Worker
153*f6dc9357SAndroid Build Coastguard Worker void COpenArchiveCallback::ShowMessage()
154*f6dc9357SAndroid Build Coastguard Worker {
155*f6dc9357SAndroid Build Coastguard Worker if (!m_MessageBoxIsShown)
156*f6dc9357SAndroid Build Coastguard Worker {
157*f6dc9357SAndroid Build Coastguard Worker DWORD currentTime = GetTickCount();
158*f6dc9357SAndroid Build Coastguard Worker if (currentTime - _progressBox.StartTick < kShowProgressTime_ms)
159*f6dc9357SAndroid Build Coastguard Worker return;
160*f6dc9357SAndroid Build Coastguard Worker m_MessageBoxIsShown = true;
161*f6dc9357SAndroid Build Coastguard Worker }
162*f6dc9357SAndroid Build Coastguard Worker
163*f6dc9357SAndroid Build Coastguard Worker _progressBox.UseBytesForPercents = !_numFilesTotalDefined;
164*f6dc9357SAndroid Build Coastguard Worker _progressBox.Print();
165*f6dc9357SAndroid Build Coastguard Worker }
166*f6dc9357SAndroid Build Coastguard Worker
167*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(COpenArchiveCallback::SetTotal(const UInt64 *numFiles, const UInt64 *numBytes))
168*f6dc9357SAndroid Build Coastguard Worker {
169*f6dc9357SAndroid Build Coastguard Worker _numFilesTotalDefined = (numFiles != NULL);
170*f6dc9357SAndroid Build Coastguard Worker if (_numFilesTotalDefined)
171*f6dc9357SAndroid Build Coastguard Worker _progressBox.FilesTotal = *numFiles;
172*f6dc9357SAndroid Build Coastguard Worker
173*f6dc9357SAndroid Build Coastguard Worker _numBytesTotalDefined = (numBytes != NULL);
174*f6dc9357SAndroid Build Coastguard Worker if (_numBytesTotalDefined)
175*f6dc9357SAndroid Build Coastguard Worker _progressBox.Total = *numBytes;
176*f6dc9357SAndroid Build Coastguard Worker
177*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
178*f6dc9357SAndroid Build Coastguard Worker }
179*f6dc9357SAndroid Build Coastguard Worker
180*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(COpenArchiveCallback::SetCompleted(const UInt64 *numFiles, const UInt64 *numBytes))
181*f6dc9357SAndroid Build Coastguard Worker {
182*f6dc9357SAndroid Build Coastguard Worker if (numFiles)
183*f6dc9357SAndroid Build Coastguard Worker _progressBox.Files = *numFiles;
184*f6dc9357SAndroid Build Coastguard Worker
185*f6dc9357SAndroid Build Coastguard Worker if (numBytes)
186*f6dc9357SAndroid Build Coastguard Worker _progressBox.Completed = *numBytes;
187*f6dc9357SAndroid Build Coastguard Worker
188*f6dc9357SAndroid Build Coastguard Worker ShowMessage();
189*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
190*f6dc9357SAndroid Build Coastguard Worker }
191*f6dc9357SAndroid Build Coastguard Worker
192*f6dc9357SAndroid Build Coastguard Worker
193*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(COpenArchiveCallback::SetTotal(const UInt64 /* total */))
194*f6dc9357SAndroid Build Coastguard Worker {
195*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
196*f6dc9357SAndroid Build Coastguard Worker }
197*f6dc9357SAndroid Build Coastguard Worker
198*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(COpenArchiveCallback::SetCompleted(const UInt64 * /* completed */))
199*f6dc9357SAndroid Build Coastguard Worker {
200*f6dc9357SAndroid Build Coastguard Worker ShowMessage();
201*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
202*f6dc9357SAndroid Build Coastguard Worker }
203*f6dc9357SAndroid Build Coastguard Worker
204*f6dc9357SAndroid Build Coastguard Worker HRESULT GetPassword(UString &password);
205*f6dc9357SAndroid Build Coastguard Worker HRESULT GetPassword(UString &password)
206*f6dc9357SAndroid Build Coastguard Worker {
207*f6dc9357SAndroid Build Coastguard Worker if (WasEscPressed())
208*f6dc9357SAndroid Build Coastguard Worker return E_ABORT;
209*f6dc9357SAndroid Build Coastguard Worker password.Empty();
210*f6dc9357SAndroid Build Coastguard Worker CInitDialogItem initItems[]=
211*f6dc9357SAndroid Build Coastguard Worker {
212*f6dc9357SAndroid Build Coastguard Worker { DI_DOUBLEBOX, 3, 1, 72, 4, false, false, 0, false, NMessageID::kGetPasswordTitle, NULL, NULL },
213*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 5, 2, 0, 0, false, false, DIF_SHOWAMPERSAND, false, NMessageID::kEnterPasswordForFile, NULL, NULL },
214*f6dc9357SAndroid Build Coastguard Worker { DI_PSWEDIT, 5, 3, 70, 3, true, false, 0, true, -1, "", NULL }
215*f6dc9357SAndroid Build Coastguard Worker };
216*f6dc9357SAndroid Build Coastguard Worker
217*f6dc9357SAndroid Build Coastguard Worker const int kNumItems = Z7_ARRAY_SIZE(initItems);
218*f6dc9357SAndroid Build Coastguard Worker FarDialogItem dialogItems[kNumItems];
219*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.InitDialogItems(initItems, dialogItems, kNumItems);
220*f6dc9357SAndroid Build Coastguard Worker
221*f6dc9357SAndroid Build Coastguard Worker // sprintf(DialogItems[1].Data,GetMsg(MGetPasswordForFile),FileName);
222*f6dc9357SAndroid Build Coastguard Worker if (g_StartupInfo.ShowDialog(76, 6, NULL, dialogItems, kNumItems) < 0)
223*f6dc9357SAndroid Build Coastguard Worker return E_ABORT;
224*f6dc9357SAndroid Build Coastguard Worker
225*f6dc9357SAndroid Build Coastguard Worker password = MultiByteToUnicodeString(dialogItems[2].Data, CP_OEMCP);
226*f6dc9357SAndroid Build Coastguard Worker return S_OK;
227*f6dc9357SAndroid Build Coastguard Worker }
228*f6dc9357SAndroid Build Coastguard Worker
229*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(COpenArchiveCallback::CryptoGetTextPassword(BSTR *password))
230*f6dc9357SAndroid Build Coastguard Worker {
231*f6dc9357SAndroid Build Coastguard Worker if (!PasswordIsDefined)
232*f6dc9357SAndroid Build Coastguard Worker {
233*f6dc9357SAndroid Build Coastguard Worker RINOK(GetPassword(Password))
234*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = true;
235*f6dc9357SAndroid Build Coastguard Worker }
236*f6dc9357SAndroid Build Coastguard Worker return StringToBstr(Password, password);
237*f6dc9357SAndroid Build Coastguard Worker }
238*f6dc9357SAndroid Build Coastguard Worker
239*f6dc9357SAndroid Build Coastguard Worker /*
240*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenArchive(const CSysString &fileName,
241*f6dc9357SAndroid Build Coastguard Worker IInFolderArchive **archiveHandlerResult,
242*f6dc9357SAndroid Build Coastguard Worker CArchiverInfo &archiverInfoResult,
243*f6dc9357SAndroid Build Coastguard Worker UString &defaultName,
244*f6dc9357SAndroid Build Coastguard Worker IArchiveOpenCallback *openArchiveCallback)
245*f6dc9357SAndroid Build Coastguard Worker {
246*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenArchive(const CSysString &fileName,
247*f6dc9357SAndroid Build Coastguard Worker IInArchive **archive,
248*f6dc9357SAndroid Build Coastguard Worker CArchiverInfo &archiverInfoResult,
249*f6dc9357SAndroid Build Coastguard Worker IArchiveOpenCallback *openArchiveCallback);
250*f6dc9357SAndroid Build Coastguard Worker }
251*f6dc9357SAndroid Build Coastguard Worker */
252*f6dc9357SAndroid Build Coastguard Worker
253*f6dc9357SAndroid Build Coastguard Worker static HANDLE MyOpenFilePluginW(const wchar_t *name, bool isAbortCodeSupported)
254*f6dc9357SAndroid Build Coastguard Worker {
255*f6dc9357SAndroid Build Coastguard Worker FString normalizedName = us2fs(name);
256*f6dc9357SAndroid Build Coastguard Worker normalizedName.Trim();
257*f6dc9357SAndroid Build Coastguard Worker FString fullName;
258*f6dc9357SAndroid Build Coastguard Worker MyGetFullPathName(normalizedName, fullName);
259*f6dc9357SAndroid Build Coastguard Worker NFind::CFileInfo fileInfo;
260*f6dc9357SAndroid Build Coastguard Worker if (!fileInfo.Find(fullName))
261*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
262*f6dc9357SAndroid Build Coastguard Worker if (fileInfo.IsDir())
263*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
264*f6dc9357SAndroid Build Coastguard Worker
265*f6dc9357SAndroid Build Coastguard Worker
266*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IInFolderArchive> archiveHandler;
267*f6dc9357SAndroid Build Coastguard Worker
268*f6dc9357SAndroid Build Coastguard Worker // CArchiverInfo archiverInfoResult;
269*f6dc9357SAndroid Build Coastguard Worker // ::OutputDebugStringA("before OpenArchive\n");
270*f6dc9357SAndroid Build Coastguard Worker
271*f6dc9357SAndroid Build Coastguard Worker CScreenRestorer screenRestorer;
272*f6dc9357SAndroid Build Coastguard Worker {
273*f6dc9357SAndroid Build Coastguard Worker screenRestorer.Save();
274*f6dc9357SAndroid Build Coastguard Worker }
275*f6dc9357SAndroid Build Coastguard Worker
276*f6dc9357SAndroid Build Coastguard Worker COpenArchiveCallback *openArchiveCallbackSpec = new COpenArchiveCallback;
277*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IArchiveOpenCallback> uiCallback = openArchiveCallbackSpec;
278*f6dc9357SAndroid Build Coastguard Worker
279*f6dc9357SAndroid Build Coastguard Worker /* COpenCallbackImp object will exist after Open stage for multivolume archioves */
280*f6dc9357SAndroid Build Coastguard Worker COpenCallbackImp *impSpec = new COpenCallbackImp;
281*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IArchiveOpenCallback> impCallback = impSpec;
282*f6dc9357SAndroid Build Coastguard Worker impSpec->ReOpenCallback = openArchiveCallbackSpec; // we set pointer without reference counter
283*f6dc9357SAndroid Build Coastguard Worker
284*f6dc9357SAndroid Build Coastguard Worker // if ((opMode & OPM_SILENT) == 0 && (opMode & OPM_FIND ) == 0)
285*f6dc9357SAndroid Build Coastguard Worker openArchiveCallbackSpec->Init();
286*f6dc9357SAndroid Build Coastguard Worker {
287*f6dc9357SAndroid Build Coastguard Worker FString dirPrefix, fileName;
288*f6dc9357SAndroid Build Coastguard Worker GetFullPathAndSplit(fullName, dirPrefix, fileName);
289*f6dc9357SAndroid Build Coastguard Worker impSpec->Init2(dirPrefix, fileName);
290*f6dc9357SAndroid Build Coastguard Worker }
291*f6dc9357SAndroid Build Coastguard Worker
292*f6dc9357SAndroid Build Coastguard Worker // ::OutputDebugStringA("before OpenArchive\n");
293*f6dc9357SAndroid Build Coastguard Worker
294*f6dc9357SAndroid Build Coastguard Worker CAgent *agent = new CAgent;
295*f6dc9357SAndroid Build Coastguard Worker archiveHandler = agent;
296*f6dc9357SAndroid Build Coastguard Worker CMyComBSTR archiveType;
297*f6dc9357SAndroid Build Coastguard Worker HRESULT result = archiveHandler->Open(NULL,
298*f6dc9357SAndroid Build Coastguard Worker GetUnicodeString(fullName, CP_OEMCP), UString(), &archiveType, impCallback);
299*f6dc9357SAndroid Build Coastguard Worker /*
300*f6dc9357SAndroid Build Coastguard Worker HRESULT result = ::OpenArchive(fullName, &archiveHandler,
301*f6dc9357SAndroid Build Coastguard Worker archiverInfoResult, defaultName, openArchiveCallback);
302*f6dc9357SAndroid Build Coastguard Worker */
303*f6dc9357SAndroid Build Coastguard Worker if (result == E_ABORT)
304*f6dc9357SAndroid Build Coastguard Worker {
305*f6dc9357SAndroid Build Coastguard Worker // fixed 18.06:
306*f6dc9357SAndroid Build Coastguard Worker // OpenFilePlugin() is allowed to return (HANDLE)-2 as abort code
307*f6dc9357SAndroid Build Coastguard Worker // OpenPlugin() is not allowed to return (HANDLE)-2.
308*f6dc9357SAndroid Build Coastguard Worker return isAbortCodeSupported ? (HANDLE)-2 : INVALID_HANDLE_VALUE;
309*f6dc9357SAndroid Build Coastguard Worker }
310*f6dc9357SAndroid Build Coastguard Worker
311*f6dc9357SAndroid Build Coastguard Worker UString errorMessage = agent->GetErrorMessage();
312*f6dc9357SAndroid Build Coastguard Worker if (!errorMessage.IsEmpty())
313*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.ShowErrorMessage(UnicodeStringToMultiByte(errorMessage, CP_OEMCP));
314*f6dc9357SAndroid Build Coastguard Worker
315*f6dc9357SAndroid Build Coastguard Worker if (result != S_OK)
316*f6dc9357SAndroid Build Coastguard Worker {
317*f6dc9357SAndroid Build Coastguard Worker if (result == S_FALSE)
318*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
319*f6dc9357SAndroid Build Coastguard Worker ShowSysErrorMessage(result);
320*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
321*f6dc9357SAndroid Build Coastguard Worker }
322*f6dc9357SAndroid Build Coastguard Worker
323*f6dc9357SAndroid Build Coastguard Worker // ::OutputDebugStringA("after OpenArchive\n");
324*f6dc9357SAndroid Build Coastguard Worker
325*f6dc9357SAndroid Build Coastguard Worker CPlugin *plugin = new CPlugin(
326*f6dc9357SAndroid Build Coastguard Worker fullName,
327*f6dc9357SAndroid Build Coastguard Worker // defaultName,
328*f6dc9357SAndroid Build Coastguard Worker agent,
329*f6dc9357SAndroid Build Coastguard Worker (const wchar_t *)archiveType
330*f6dc9357SAndroid Build Coastguard Worker );
331*f6dc9357SAndroid Build Coastguard Worker
332*f6dc9357SAndroid Build Coastguard Worker plugin->PasswordIsDefined = openArchiveCallbackSpec->PasswordIsDefined;
333*f6dc9357SAndroid Build Coastguard Worker plugin->Password = openArchiveCallbackSpec->Password;
334*f6dc9357SAndroid Build Coastguard Worker
335*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("--- OpenFilePlugin ---- END");
336*f6dc9357SAndroid Build Coastguard Worker return (HANDLE)(plugin);
337*f6dc9357SAndroid Build Coastguard Worker }
338*f6dc9357SAndroid Build Coastguard Worker
339*f6dc9357SAndroid Build Coastguard Worker static HANDLE MyOpenFilePlugin(const char *name, bool isAbortCodeSupported)
340*f6dc9357SAndroid Build Coastguard Worker {
341*f6dc9357SAndroid Build Coastguard Worker UINT codePage =
342*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
343*f6dc9357SAndroid Build Coastguard Worker CP_OEMCP;
344*f6dc9357SAndroid Build Coastguard Worker #else
345*f6dc9357SAndroid Build Coastguard Worker ::AreFileApisANSI() ? CP_ACP : CP_OEMCP;
346*f6dc9357SAndroid Build Coastguard Worker #endif
347*f6dc9357SAndroid Build Coastguard Worker return MyOpenFilePluginW(GetUnicodeString(name, codePage), isAbortCodeSupported);
348*f6dc9357SAndroid Build Coastguard Worker }
349*f6dc9357SAndroid Build Coastguard Worker
350*f6dc9357SAndroid Build Coastguard Worker EXTERN_C HANDLE WINAPI OpenFilePlugin(char *name, const Byte * /* data */, int /* dataSize */)
351*f6dc9357SAndroid Build Coastguard Worker {
352*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
353*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("--- OpenFilePlugin");
354*f6dc9357SAndroid Build Coastguard Worker if (name == NULL || (!g_Options.Enabled))
355*f6dc9357SAndroid Build Coastguard Worker {
356*f6dc9357SAndroid Build Coastguard Worker // if (!Opt.ProcessShiftF1)
357*f6dc9357SAndroid Build Coastguard Worker return(INVALID_HANDLE_VALUE);
358*f6dc9357SAndroid Build Coastguard Worker }
359*f6dc9357SAndroid Build Coastguard Worker return MyOpenFilePlugin(name, true); // isAbortCodeSupported
360*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("OpenFilePlugin", INVALID_HANDLE_VALUE)
361*f6dc9357SAndroid Build Coastguard Worker }
362*f6dc9357SAndroid Build Coastguard Worker
363*f6dc9357SAndroid Build Coastguard Worker /*
364*f6dc9357SAndroid Build Coastguard Worker EXTERN_C HANDLE WINAPI OpenFilePluginW(const wchar_t *name,const Byte *Data,int DataSize,int OpMode)
365*f6dc9357SAndroid Build Coastguard Worker {
366*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
367*f6dc9357SAndroid Build Coastguard Worker if (name == NULL || (!g_Options.Enabled))
368*f6dc9357SAndroid Build Coastguard Worker {
369*f6dc9357SAndroid Build Coastguard Worker // if (!Opt.ProcessShiftF1)
370*f6dc9357SAndroid Build Coastguard Worker return(INVALID_HANDLE_VALUE);
371*f6dc9357SAndroid Build Coastguard Worker }
372*f6dc9357SAndroid Build Coastguard Worker return MyOpenFilePluginW(name);
373*f6dc9357SAndroid Build Coastguard Worker ::OutputDebugStringA("OpenFilePluginW\n");
374*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("OpenFilePluginW", INVALID_HANDLE_VALUE);
375*f6dc9357SAndroid Build Coastguard Worker }
376*f6dc9357SAndroid Build Coastguard Worker */
377*f6dc9357SAndroid Build Coastguard Worker
378*f6dc9357SAndroid Build Coastguard Worker EXTERN_C HANDLE WINAPI OpenPlugin(int openFrom, INT_PTR item)
379*f6dc9357SAndroid Build Coastguard Worker {
380*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
381*f6dc9357SAndroid Build Coastguard Worker
382*f6dc9357SAndroid Build Coastguard Worker if (openFrom == OPEN_COMMANDLINE)
383*f6dc9357SAndroid Build Coastguard Worker {
384*f6dc9357SAndroid Build Coastguard Worker AString fileName ((const char *)item);
385*f6dc9357SAndroid Build Coastguard Worker if (fileName.IsEmpty())
386*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
387*f6dc9357SAndroid Build Coastguard Worker if (fileName.Len() >= 2
388*f6dc9357SAndroid Build Coastguard Worker && fileName[0] == '\"'
389*f6dc9357SAndroid Build Coastguard Worker && fileName.Back() == '\"')
390*f6dc9357SAndroid Build Coastguard Worker {
391*f6dc9357SAndroid Build Coastguard Worker fileName.DeleteBack();
392*f6dc9357SAndroid Build Coastguard Worker fileName.DeleteFrontal(1);
393*f6dc9357SAndroid Build Coastguard Worker }
394*f6dc9357SAndroid Build Coastguard Worker return MyOpenFilePlugin(fileName, false); // isAbortCodeSupported
395*f6dc9357SAndroid Build Coastguard Worker }
396*f6dc9357SAndroid Build Coastguard Worker
397*f6dc9357SAndroid Build Coastguard Worker if (openFrom == OPEN_PLUGINSMENU)
398*f6dc9357SAndroid Build Coastguard Worker {
399*f6dc9357SAndroid Build Coastguard Worker switch (item)
400*f6dc9357SAndroid Build Coastguard Worker {
401*f6dc9357SAndroid Build Coastguard Worker case 0:
402*f6dc9357SAndroid Build Coastguard Worker {
403*f6dc9357SAndroid Build Coastguard Worker PluginPanelItem pluginPanelItem;
404*f6dc9357SAndroid Build Coastguard Worker if (!g_StartupInfo.ControlGetActivePanelCurrentItemInfo(pluginPanelItem))
405*f6dc9357SAndroid Build Coastguard Worker throw 142134;
406*f6dc9357SAndroid Build Coastguard Worker return MyOpenFilePlugin(pluginPanelItem.FindData.cFileName, false); // isAbortCodeSupported
407*f6dc9357SAndroid Build Coastguard Worker }
408*f6dc9357SAndroid Build Coastguard Worker
409*f6dc9357SAndroid Build Coastguard Worker case 1:
410*f6dc9357SAndroid Build Coastguard Worker {
411*f6dc9357SAndroid Build Coastguard Worker CObjectVector<PluginPanelItem> pluginPanelItem;
412*f6dc9357SAndroid Build Coastguard Worker if (!g_StartupInfo.ControlGetActivePanelSelectedOrCurrentItems(pluginPanelItem))
413*f6dc9357SAndroid Build Coastguard Worker throw 142134;
414*f6dc9357SAndroid Build Coastguard Worker HRESULT res = CompressFiles(pluginPanelItem);
415*f6dc9357SAndroid Build Coastguard Worker if (res != S_OK && res != E_ABORT)
416*f6dc9357SAndroid Build Coastguard Worker {
417*f6dc9357SAndroid Build Coastguard Worker ShowSysErrorMessage(res);
418*f6dc9357SAndroid Build Coastguard Worker }
419*f6dc9357SAndroid Build Coastguard Worker // if (res == S_OK)
420*f6dc9357SAndroid Build Coastguard Worker {
421*f6dc9357SAndroid Build Coastguard Worker /* int t = */ g_StartupInfo.ControlClearPanelSelection();
422*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.ControlRequestActivePanel(FCTL_UPDATEPANEL, NULL);
423*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.ControlRequestActivePanel(FCTL_REDRAWPANEL, NULL);
424*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.ControlRequestActivePanel(FCTL_UPDATEANOTHERPANEL, NULL);
425*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.ControlRequestActivePanel(FCTL_REDRAWANOTHERPANEL, NULL);
426*f6dc9357SAndroid Build Coastguard Worker }
427*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
428*f6dc9357SAndroid Build Coastguard Worker }
429*f6dc9357SAndroid Build Coastguard Worker
430*f6dc9357SAndroid Build Coastguard Worker default:
431*f6dc9357SAndroid Build Coastguard Worker throw 4282215;
432*f6dc9357SAndroid Build Coastguard Worker }
433*f6dc9357SAndroid Build Coastguard Worker }
434*f6dc9357SAndroid Build Coastguard Worker
435*f6dc9357SAndroid Build Coastguard Worker return INVALID_HANDLE_VALUE;
436*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("OpenPlugin", INVALID_HANDLE_VALUE)
437*f6dc9357SAndroid Build Coastguard Worker }
438*f6dc9357SAndroid Build Coastguard Worker
439*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI ClosePlugin(HANDLE plugin)
440*f6dc9357SAndroid Build Coastguard Worker {
441*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("-- ClosePlugin --- START");
442*f6dc9357SAndroid Build Coastguard Worker // MY_TRY_BEGIN
443*f6dc9357SAndroid Build Coastguard Worker delete (CPlugin *)plugin;
444*f6dc9357SAndroid Build Coastguard Worker // OutputDebugStringA("-- ClosePlugin --- END");
445*f6dc9357SAndroid Build Coastguard Worker // MY_TRY_END1("ClosePlugin");
446*f6dc9357SAndroid Build Coastguard Worker }
447*f6dc9357SAndroid Build Coastguard Worker
448*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI GetFindData(HANDLE plugin, struct PluginPanelItem **panelItems, int *itemsNumber, int opMode)
449*f6dc9357SAndroid Build Coastguard Worker {
450*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
451*f6dc9357SAndroid Build Coastguard Worker return(((CPlugin *)plugin)->GetFindData(panelItems, itemsNumber, opMode));
452*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("GetFindData", FALSE)
453*f6dc9357SAndroid Build Coastguard Worker }
454*f6dc9357SAndroid Build Coastguard Worker
455*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI FreeFindData(HANDLE plugin, struct PluginPanelItem *panelItems, int itemsNumber)
456*f6dc9357SAndroid Build Coastguard Worker {
457*f6dc9357SAndroid Build Coastguard Worker // MY_TRY_BEGIN
458*f6dc9357SAndroid Build Coastguard Worker ((CPlugin *)plugin)->FreeFindData(panelItems, itemsNumber);
459*f6dc9357SAndroid Build Coastguard Worker // MY_TRY_END1("FreeFindData");
460*f6dc9357SAndroid Build Coastguard Worker }
461*f6dc9357SAndroid Build Coastguard Worker
462*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI GetFiles(HANDLE plugin, struct PluginPanelItem *panelItems,
463*f6dc9357SAndroid Build Coastguard Worker int itemsNumber, int move, char *destPath, int opMode)
464*f6dc9357SAndroid Build Coastguard Worker {
465*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
466*f6dc9357SAndroid Build Coastguard Worker return(((CPlugin *)plugin)->GetFiles(panelItems, (unsigned)itemsNumber, move, destPath, opMode));
467*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("GetFiles", NFileOperationReturnCode::kError)
468*f6dc9357SAndroid Build Coastguard Worker }
469*f6dc9357SAndroid Build Coastguard Worker
470*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI SetDirectory(HANDLE plugin, const char *dir, int opMode)
471*f6dc9357SAndroid Build Coastguard Worker {
472*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
473*f6dc9357SAndroid Build Coastguard Worker return(((CPlugin *)plugin)->SetDirectory(dir, opMode));
474*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("SetDirectory", FALSE)
475*f6dc9357SAndroid Build Coastguard Worker }
476*f6dc9357SAndroid Build Coastguard Worker
477*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI GetPluginInfo(struct PluginInfo *info)
478*f6dc9357SAndroid Build Coastguard Worker {
479*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
480*f6dc9357SAndroid Build Coastguard Worker
481*f6dc9357SAndroid Build Coastguard Worker info->StructSize = sizeof(*info);
482*f6dc9357SAndroid Build Coastguard Worker info->Flags = 0;
483*f6dc9357SAndroid Build Coastguard Worker info->DiskMenuStrings = NULL;
484*f6dc9357SAndroid Build Coastguard Worker info->DiskMenuNumbers = NULL;
485*f6dc9357SAndroid Build Coastguard Worker info->DiskMenuStringsNumber = 0;
486*f6dc9357SAndroid Build Coastguard Worker static char *pluginMenuStrings[2];
487*f6dc9357SAndroid Build Coastguard Worker pluginMenuStrings[0] = const_cast<char *>(g_StartupInfo.GetMsgString(NMessageID::kOpenArchiveMenuString));
488*f6dc9357SAndroid Build Coastguard Worker pluginMenuStrings[1] = const_cast<char *>(g_StartupInfo.GetMsgString(NMessageID::kCreateArchiveMenuString));
489*f6dc9357SAndroid Build Coastguard Worker info->PluginMenuStrings = (char **)pluginMenuStrings;
490*f6dc9357SAndroid Build Coastguard Worker info->PluginMenuStringsNumber = 2;
491*f6dc9357SAndroid Build Coastguard Worker static char *pluginCfgStrings[1];
492*f6dc9357SAndroid Build Coastguard Worker pluginCfgStrings[0] = const_cast<char *>(g_StartupInfo.GetMsgString(NMessageID::kOpenArchiveMenuString));
493*f6dc9357SAndroid Build Coastguard Worker info->PluginConfigStrings = (char **)pluginCfgStrings;
494*f6dc9357SAndroid Build Coastguard Worker info->PluginConfigStringsNumber = Z7_ARRAY_SIZE(pluginCfgStrings);
495*f6dc9357SAndroid Build Coastguard Worker info->CommandPrefix = const_cast<char *>(kCommandPrefix);
496*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END1("GetPluginInfo")
497*f6dc9357SAndroid Build Coastguard Worker }
498*f6dc9357SAndroid Build Coastguard Worker
499*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI Configure(int /* itemNumber */)
500*f6dc9357SAndroid Build Coastguard Worker {
501*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
502*f6dc9357SAndroid Build Coastguard Worker
503*f6dc9357SAndroid Build Coastguard Worker const int kEnabledCheckBoxIndex = 1;
504*f6dc9357SAndroid Build Coastguard Worker
505*f6dc9357SAndroid Build Coastguard Worker const int kYSize = 7;
506*f6dc9357SAndroid Build Coastguard Worker
507*f6dc9357SAndroid Build Coastguard Worker struct CInitDialogItem initItems[]=
508*f6dc9357SAndroid Build Coastguard Worker {
509*f6dc9357SAndroid Build Coastguard Worker { DI_DOUBLEBOX, 3, 1, 72, kYSize - 2, false, false, 0, false, NMessageID::kConfigTitle, NULL, NULL },
510*f6dc9357SAndroid Build Coastguard Worker { DI_CHECKBOX, 5, 2, 0, 0, true, g_Options.Enabled, 0, false, NMessageID::kConfigPluginEnabled, NULL, NULL },
511*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 5, 3, 0, 0, false, false, DIF_BOXCOLOR | DIF_SEPARATOR, false, -1, "", NULL },
512*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, true, NMessageID::kOk, NULL, NULL },
513*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kCancel, NULL, NULL },
514*f6dc9357SAndroid Build Coastguard Worker };
515*f6dc9357SAndroid Build Coastguard Worker
516*f6dc9357SAndroid Build Coastguard Worker const int kNumDialogItems = Z7_ARRAY_SIZE(initItems);
517*f6dc9357SAndroid Build Coastguard Worker const int kOkButtonIndex = kNumDialogItems - 2;
518*f6dc9357SAndroid Build Coastguard Worker
519*f6dc9357SAndroid Build Coastguard Worker FarDialogItem dialogItems[kNumDialogItems];
520*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.InitDialogItems(initItems, dialogItems, kNumDialogItems);
521*f6dc9357SAndroid Build Coastguard Worker
522*f6dc9357SAndroid Build Coastguard Worker int askCode = g_StartupInfo.ShowDialog(76, kYSize,
523*f6dc9357SAndroid Build Coastguard Worker kHelpTopicConfig, dialogItems, kNumDialogItems);
524*f6dc9357SAndroid Build Coastguard Worker
525*f6dc9357SAndroid Build Coastguard Worker if (askCode != kOkButtonIndex)
526*f6dc9357SAndroid Build Coastguard Worker return (FALSE);
527*f6dc9357SAndroid Build Coastguard Worker
528*f6dc9357SAndroid Build Coastguard Worker g_Options.Enabled = BOOLToBool(dialogItems[kEnabledCheckBoxIndex].Selected);
529*f6dc9357SAndroid Build Coastguard Worker
530*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.SetRegKeyValue(HKEY_CURRENT_USER, kRegisrtryMainKeyName,
531*f6dc9357SAndroid Build Coastguard Worker kRegisrtryValueNameEnabled, g_Options.Enabled);
532*f6dc9357SAndroid Build Coastguard Worker return(TRUE);
533*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("Configure", FALSE)
534*f6dc9357SAndroid Build Coastguard Worker }
535*f6dc9357SAndroid Build Coastguard Worker
536*f6dc9357SAndroid Build Coastguard Worker EXTERN_C void WINAPI GetOpenPluginInfo(HANDLE plugin,struct OpenPluginInfo *info)
537*f6dc9357SAndroid Build Coastguard Worker {
538*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
539*f6dc9357SAndroid Build Coastguard Worker ((CPlugin *)plugin)->GetOpenPluginInfo(info);
540*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END1("GetOpenPluginInfo")
541*f6dc9357SAndroid Build Coastguard Worker }
542*f6dc9357SAndroid Build Coastguard Worker
543*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI PutFiles(HANDLE plugin, struct PluginPanelItem *panelItems, int itemsNumber, int move, int opMode)
544*f6dc9357SAndroid Build Coastguard Worker {
545*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
546*f6dc9357SAndroid Build Coastguard Worker return (((CPlugin *)plugin)->PutFiles(panelItems, (unsigned)itemsNumber, move, opMode));
547*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("PutFiles", NFileOperationReturnCode::kError)
548*f6dc9357SAndroid Build Coastguard Worker }
549*f6dc9357SAndroid Build Coastguard Worker
550*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI DeleteFiles(HANDLE plugin, PluginPanelItem *panelItems, int itemsNumber, int opMode)
551*f6dc9357SAndroid Build Coastguard Worker {
552*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
553*f6dc9357SAndroid Build Coastguard Worker return (((CPlugin *)plugin)->DeleteFiles(panelItems, (unsigned)itemsNumber, opMode));
554*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("DeleteFiles", FALSE)
555*f6dc9357SAndroid Build Coastguard Worker }
556*f6dc9357SAndroid Build Coastguard Worker
557*f6dc9357SAndroid Build Coastguard Worker EXTERN_C int WINAPI ProcessKey(HANDLE plugin, int key, unsigned controlState)
558*f6dc9357SAndroid Build Coastguard Worker {
559*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
560*f6dc9357SAndroid Build Coastguard Worker /* FIXME: after folder creation with F7, it doesn't reload new file list
561*f6dc9357SAndroid Build Coastguard Worker We need some to reload it */
562*f6dc9357SAndroid Build Coastguard Worker return (((CPlugin *)plugin)->ProcessKey(key, controlState));
563*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("ProcessKey", FALSE)
564*f6dc9357SAndroid Build Coastguard Worker }
565*f6dc9357SAndroid Build Coastguard Worker
566*f6dc9357SAndroid Build Coastguard Worker /*
567*f6dc9357SAndroid Build Coastguard Worker struct MakeDirectoryInfo
568*f6dc9357SAndroid Build Coastguard Worker {
569*f6dc9357SAndroid Build Coastguard Worker size_t StructSize;
570*f6dc9357SAndroid Build Coastguard Worker HANDLE hPanel;
571*f6dc9357SAndroid Build Coastguard Worker const wchar_t *Name;
572*f6dc9357SAndroid Build Coastguard Worker OPERATION_MODES OpMode;
573*f6dc9357SAndroid Build Coastguard Worker void* Instance;
574*f6dc9357SAndroid Build Coastguard Worker };
575*f6dc9357SAndroid Build Coastguard Worker
576*f6dc9357SAndroid Build Coastguard Worker typedef INT_PTR MY_intptr_t;
577*f6dc9357SAndroid Build Coastguard Worker
578*f6dc9357SAndroid Build Coastguard Worker MY_intptr_t WINAPI MakeDirectoryW(struct MakeDirectoryInfo *Info)
579*f6dc9357SAndroid Build Coastguard Worker {
580*f6dc9357SAndroid Build Coastguard Worker MY_TRY_BEGIN
581*f6dc9357SAndroid Build Coastguard Worker if (Info->StructSize < sizeof(MakeDirectoryInfo))
582*f6dc9357SAndroid Build Coastguard Worker {
583*f6dc9357SAndroid Build Coastguard Worker return 0;
584*f6dc9357SAndroid Build Coastguard Worker }
585*f6dc9357SAndroid Build Coastguard Worker return 0;
586*f6dc9357SAndroid Build Coastguard Worker MY_TRY_END2("MakeDirectoryW", FALSE);
587*f6dc9357SAndroid Build Coastguard Worker }
588*f6dc9357SAndroid Build Coastguard Worker */
589