OSDN Git Service

Cancelボタンを削除し、処理の中断を右上の閉じるボタンで行うよう変更。
[tpi/lychee.git] / src / common / handle / TPIHandle.cpp
1 /*******************************************************************************\r
2   TPI - flexible but useless plug-in framework.\r
3   Copyright (C) 2002-2009 Silky\r
4 \r
5   This library is free software; you can redistribute it and/or modify it under\r
6   the terms of the GNU Lesser General Public License as published by the Free\r
7   Software Foundation; either version 2.1 of the License, or (at your option)\r
8   any later version.\r
9 \r
10   This library is distributed in the hope that it will be useful, but WITHOUT\r
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License\r
13   for more details.\r
14 \r
15   You should have received a copy of the GNU Lesser General Public License along\r
16   with this library; if not, write to the Free Software Foundation, Inc.,\r
17   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
18 \r
19   $Id: TPIHandle.cpp,v 1.5 2009/08/28 12:41:29 sirakaba Exp $\r
20 *******************************************************************************/\r
21 \r
22 //******************************************************************************\r
23 //    Includes\r
24 //******************************************************************************\r
25 \r
26 #define wxUSE_DYNLIB_CLASS 1\r
27 #include "../header/plugin.h"\r
28 #include <wx/dynlib.h>\r
29 #include "TPIHandle.h"\r
30 \r
31 //******************************************************************************\r
32 //    Class (TPIHandle)\r
33 //******************************************************************************\r
34 \r
35 TPIHandle::~TPIHandle(void)\r
36 {\r
37         this->FreeLibrary();\r
38 }\r
39 \r
40 bool TPIHandle::InitLibrary(const wxString & _szLibName, const wxString & _szArcName, wxULongLong _llSubOption)\r
41 {\r
42         this->lib.Load(_szLibName);\r
43         if (! this->lib.IsLoaded())\r
44         {\r
45                 return false;\r
46         }\r
47 \r
48         if (_szArcName.IsEmpty())\r
49         {\r
50                 return true;\r
51         }\r
52 \r
53         if (! this->lib.HasSymbol(wxT("LoadPlugin")))\r
54         {\r
55                 return false;\r
56         }\r
57         void * p = this->lib.GetSymbol(wxT("LoadPlugin"));\r
58         if (! p)\r
59         {\r
60                 return false;\r
61         }\r
62 \r
63         return ((int (__stdcall *)(const wxString &, wxULongLong)) p)(_szArcName, _llSubOption) == TPI_ERROR_SUCCESS;\r
64 }\r
65 \r
66 bool TPIHandle::FreeLibrary(void)\r
67 {\r
68         if (! this->lib.IsLoaded())\r
69         {\r
70                 return false;\r
71         }\r
72 \r
73         if (! this->lib.HasSymbol(wxT("FreePlugin")))\r
74         {\r
75                 return false;\r
76         }\r
77         void * p = this->lib.GetSymbol(wxT("FreePlugin"));\r
78         if (! p)\r
79         {\r
80                 return false;\r
81         }\r
82         ((int (__stdcall *)(void *)) p)(NULL);\r
83 \r
84         this->lib.Unload();\r
85         return true;\r
86 }\r
87 \r
88 int TPIHandle::GetPluginInformation(unsigned int _uInfoId, wxULongLong _llSubOption, void * _pPtr)\r
89 {\r
90         if (! this->lib.HasSymbol(wxT("GetPluginInformation")))\r
91         {\r
92                 return -1;\r
93         }\r
94         void * p = this->lib.GetSymbol(wxT("GetPluginInformation"));\r
95         if (! p)\r
96         {\r
97                 return -1;\r
98         }\r
99 \r
100         return ((int (__stdcall *)(unsigned int, wxULongLong, void *)) p)(_uInfoId, _llSubOption, _pPtr);\r
101 }\r
102 \r
103 int TPIHandle::CheckArchive(const wxString & _szArcName, int * _nFileCount)\r
104 {\r
105         if (! this->lib.HasSymbol(wxT("CheckArchive")))\r
106         {\r
107                 return -1;\r
108         }\r
109         void * p = this->lib.GetSymbol(wxT("CheckArchive"));\r
110         if (! p)\r
111         {\r
112                 return -1;\r
113         }\r
114 \r
115         return ((int (__stdcall *)(const wxString &, int *)) p)(_szArcName, _nFileCount);\r
116 }\r
117 \r
118 int TPIHandle::OpenArchive(const wxString & _szArcName, void * * _hArchive)\r
119 {\r
120         if (! this->lib.HasSymbol(wxT("OpenArchive")))\r
121         {\r
122                 return -1;\r
123         }\r
124         void * p = this->lib.GetSymbol(wxT("OpenArchive"));\r
125         if (! p)\r
126         {\r
127                 return -1;\r
128         }\r
129 \r
130         return ((int (__stdcall *)(const wxString &, void * *)) p)(_szArcName, _hArchive);\r
131 }\r
132 \r
133 int TPIHandle::CloseArchive(void * _hArchive)\r
134 {\r
135         if (! this->lib.HasSymbol(wxT("CloseArchive")))\r
136         {\r
137                 return -1;\r
138         }\r
139         void * p = this->lib.GetSymbol(wxT("CloseArchive"));\r
140         if (! p)\r
141         {\r
142                 return -1;\r
143         }\r
144 \r
145         return ((int (__stdcall *)(void *)) p)(_hArchive);\r
146 }\r
147 \r
148 int TPIHandle::GetFileInformation(void * _hArchive, TPI_FILEINFO * _fiInfo, bool _bFirst)\r
149 {\r
150         if (! this->lib.HasSymbol(wxT("GetFileInformation")) || ! _fiInfo)\r
151         {\r
152                 return -1;\r
153         }\r
154         void * p = this->lib.GetSymbol(wxT("GetFileInformation"));\r
155         if (! p)\r
156         {\r
157                 return -1;\r
158         }\r
159 \r
160         // Initialization.\r
161         _fiInfo->dwAttribute    = 0;\r
162         _fiInfo->dwCRC32        = 0;\r
163         _fiInfo->tmAccess       = 0;\r
164         _fiInfo->tmCreate       = 0;\r
165         _fiInfo->tmModified     = 0;\r
166         _fiInfo->uDanger        = 0;\r
167         _fiInfo->uOSType        = 0;\r
168         _fiInfo->llPackedSize   = 0;\r
169         _fiInfo->llUnpackedSize = 0;\r
170         _fiInfo->szStoredName   = wxEmptyString;\r
171         _fiInfo->szMethod       = wxEmptyString;\r
172         _fiInfo->wCompressRatio = 0;\r
173         _fiInfo->llFileID       = 0;\r
174         _fiInfo->pCustomInfo    = NULL;\r
175 \r
176         return ((int (__stdcall *)(void *, TPI_FILEINFO *, bool)) p)(_hArchive, _fiInfo, _bFirst);\r
177 }\r
178 \r
179 int TPIHandle::GetArchiveInformation(void * _hArchive, TPI_ARCHIVEINFO * _aiInfo)\r
180 {\r
181         if (! this->lib.HasSymbol(wxT("GetArchiveInformation")) || ! _aiInfo)\r
182         {\r
183                 return -1;\r
184         }\r
185         void * p = this->lib.GetSymbol(wxT("GetArchiveInformation"));\r
186         if (! p)\r
187         {\r
188                 return -1;\r
189         }\r
190 \r
191         // Initialization.\r
192         _aiInfo->fSolid                 = false;\r
193         _aiInfo->fMMOptimize    = false;\r
194         _aiInfo->fEncryptData   = false;\r
195         _aiInfo->fEncryptHeader = false;\r
196         _aiInfo->sCompressLevel = 0;\r
197         _aiInfo->sRecoveryRecord= 0;\r
198         _aiInfo->tmAccess       = 0;\r
199         _aiInfo->tmCreate       = 0;\r
200         _aiInfo->tmModified     = 0;\r
201         _aiInfo->nSFXType       = 0;\r
202         _aiInfo->uOSType        = 0;\r
203         _aiInfo->llFileSize     = 0;\r
204         _aiInfo->llPackedSize   = 0;\r
205         _aiInfo->llReadSize     = 0;\r
206         _aiInfo->llUnpackedSize = 0;\r
207         _aiInfo->llSplitSize    = 0;\r
208         _aiInfo->szComment      = wxEmptyString;\r
209         _aiInfo->wCompressRatio = 0;\r
210         _aiInfo->pCustomInfo    = NULL;\r
211 \r
212         return ((int (__stdcall *)(void *, TPI_ARCHIVEINFO *)) p)(_hArchive, _aiInfo);\r
213 }\r
214 \r
215 int TPIHandle::Command(unsigned int _uCommand, TPI_SWITCHES * _swInfo, const wxString & _szArcName, const wxArrayString & _szFiles)\r
216 {\r
217         if (! this->lib.HasSymbol(wxT("Command")))\r
218         {\r
219                 return -1;\r
220         }\r
221         void * p = this->lib.GetSymbol(wxT("Command"));\r
222         if (! p)\r
223         {\r
224                 return -1;\r
225         }\r
226 \r
227         return ((int (__stdcall *)(unsigned int, TPI_SWITCHES *, const wxString &, const wxArrayString &)) p)(_uCommand, _swInfo, _szArcName, _szFiles);\r
228 }\r
229 \r
230 int TPIHandle::SetCallbackProc(TPI_PROC _prProc)\r
231 {\r
232         if (! this->lib.HasSymbol(wxT("SetCallbackProc")))\r
233         {\r
234                 return -1;\r
235         }\r
236         void * p = this->lib.GetSymbol(wxT("SetCallbackProc"));\r
237         if (! p)\r
238         {\r
239                 return -1;\r
240         }\r
241 \r
242         return ((int (__stdcall *)(TPI_PROC)) p)(_prProc);\r
243 }\r