1 #ifndef __MULTIARC_HPP__
2 #define __MULTIARC_HPP__
12 #include <KeyFileHelper.h>
13 #include <PathParts.h>
14 #include <farplug-mb.h>
15 using namespace oldfar
;
18 #define INI_LOCATION (InMyConfig("plugins/multiarc/config.ini"))
19 #define INI_SECTION ("Settings")
21 #define OLD_DIALOG_STYLE 1
22 #define _ARC_UNDER_CURSOR_
29 #define RETEXEC_ARCNOTFOUND 0x40000
33 // #define MAX_COMMAND_LENGTH 32768
34 #define MA_MAX_SIZE_COMMAND_NAME 512
36 #define SUPER_PUPER_ZERO (0)
38 #define USER_DATA_MAGIC 0xfeedf00d
43 CMD_EXTRACTWITHOUTPATH
,
60 typedef DWORD(WINAPI
*PLUGINLOADFORMATMODULE
)(const char *ModuleName
);
61 typedef BOOL(WINAPI
*PLUGINISARCHIVE
)(const char *Name
, const unsigned char *Data
, int DataSize
);
62 typedef BOOL(WINAPI
*PLUGINOPENARCHIVE
)(const char *Name
, int *Type
, bool Silent
);
63 typedef int(WINAPI
*PLUGINGETARCITEM
)(struct ArcItemInfo
*Info
);
64 typedef BOOL(WINAPI
*PLUGINCLOSEARCHIVE
)(struct ArcInfo
*Info
);
65 typedef BOOL(WINAPI
*PLUGINGETFORMATNAME
)(int Type
, std::string
&FormatName
, std::string
&DefaultExt
);
66 typedef BOOL(WINAPI
*PLUGINGETDEFAULTCOMMANDS
)(int Type
, int Command
, std::string
&Dest
);
67 typedef void(WINAPI
*PLUGINSETFARINFO
)(const struct PluginStartupInfo
*plg
);
68 typedef DWORD(WINAPI
*PLUGINGETSFXPOS
)(void);
73 struct PluginStartupInfo Info
;
74 struct FarStandardFunctions FSF
;
76 PLUGINLOADFORMATMODULE pLoadFormatModule
;
77 PLUGINISARCHIVE pIsArchive
;
78 PLUGINOPENARCHIVE pOpenArchive
;
79 PLUGINGETARCITEM pGetArcItem
;
80 PLUGINCLOSEARCHIVE pCloseArchive
;
81 PLUGINGETFORMATNAME pGetFormatName
;
82 PLUGINGETDEFAULTCOMMANDS pGetDefaultCommands
;
83 PLUGINSETFARINFO pSetFarInfo
;
84 PLUGINGETSFXPOS pGetSFXPos
;
87 typedef PathNode
<ArcItemAttributes
> ArcItemNode
;
92 std::vector
<PluginItem
> PluginsData
;
95 AddPluginItem(PLUGINISARCHIVE pIsArchive
, PLUGINOPENARCHIVE pOpenArchive
, PLUGINGETARCITEM pGetArcItem
,
96 PLUGINLOADFORMATMODULE pLoadFormatModule
= NULL
, PLUGINCLOSEARCHIVE pCloseArchive
= NULL
,
97 PLUGINGETFORMATNAME pGetFormatName
= NULL
, PLUGINGETDEFAULTCOMMANDS pGetDefaultCommands
= NULL
,
98 PLUGINSETFARINFO pSetFarInfo
= NULL
, PLUGINGETSFXPOS pGetSFXPos
= NULL
);
101 ArcPlugins(const char *ModuleName
);
105 int IsArchive(const char *Name
, const unsigned char *Data
, int DataSize
);
107 IsArchive(int ArcPluginNumber
, const char *Name
, const unsigned char *Data
, int DataSize
, DWORD
*SFXSize
);
108 BOOL
OpenArchive(int PluginNumber
, const char *Name
, int *Type
, bool Silent
);
109 int GetArcItem(int PluginNumber
, struct ArcItemInfo
*Info
);
110 void CloseArchive(int PluginNumber
, struct ArcInfo
*Info
);
111 BOOL
GetFormatName(int PluginNumber
, int Type
, std::string
&FormatName
, std::string
&DefaultExt
);
112 BOOL
GetDefaultCommands(int PluginNumber
, int Type
, int Command
, std::string
&Dest
);
113 int FmtCount() { return (int)PluginsData
.size(); }
114 static int WINAPI
LoadFmtModules(const WIN32_FIND_DATA
*FData
, const char *FullName
, ArcPlugins
*plugins
);
115 static int __cdecl
CompareFmtModules(const void *elem1
, const void *elem2
);
124 size_t ArcDataCount
= 0;
125 struct stat ArcStat
{};
128 int LastTestState
, LastWithoutPathsState
;
129 struct ArcItemInfo ItemsInfo
;
130 struct ArcInfo CurArcInfo
;
138 std::string PanelTitle
;
139 std::string FormatName
;
141 struct InfoPanelLine InfoLines
[15];
142 struct KeyBarTitles KeyBar
;
144 char *DescrFiles
[32];
145 char DescrFilesString
[256];
148 void SetInfoLineSZ(size_t Index
, int TextID
, const char *Data
);
149 void SetInfoLine(size_t Index
, int TextID
, const std::string
&Data
);
150 void SetInfoLine(size_t Index
, int TextID
, int DataID
);
152 std::string
GetGroupName(PluginPanelItem
*Items
, int Count
); //$ AA 29.11.2001
153 BOOL
GetCursorName(std::string
&ArcName
, std::string
&ArcFormat
, std::string
&ArcExt
, PanelInfo
*pi
); //$ AA 29.11.2001
154 BOOL
GetFormatName(std::string
&FormatName
, std::string
&DefExt
); //$ AA 25.11.2001
155 BOOL
GetFormatName(std::string
&FormatName
);
156 std::string
GetCommandFormat(int Command
);
158 bool FarLangChanged();
159 bool EnsureFindDataUpToDate(int OpMode
);
160 int ReadArchive(const char *Name
, int OpMode
);
163 PluginClass(int ArcPluginNumber
);
167 int PreReadArchive(const char *Name
);
168 int GetFindData(PluginPanelItem
**pPanelItem
, int *pItemsNumber
, int OpMode
);
169 void FreeFindData(PluginPanelItem
*PanelItem
, int ItemsNumber
);
170 int SetDirectory(const char *Dir
, int OpMode
);
171 void GetOpenPluginInfo(struct OpenPluginInfo
*Info
);
172 int DeleteFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int OpMode
);
173 int ProcessHostFile(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int OpMode
);
174 int GetFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int Move
, char *DestPath
, int OpMode
);
175 int PutFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int Move
, int OpMode
);
176 int ProcessKey(int Key
, unsigned int ControlState
);
177 static bool SelectFormat(std::string
&ArcFormat
, int AddOnly
= FALSE
);
178 static bool FormatToPlugin(const std::string
&Format
, int &PluginNumber
, int &PluginType
);
179 static LONG_PTR WINAPI
PutDlgProc(HANDLE hDlg
, int Msg
, int Param1
, LONG_PTR Param2
);
186 struct PluginPanelItem
*PanelItem
;
190 std::string RealArcDir
;
191 std::string Password
;
192 std::string AllFilesMask
;
193 std::string TempPath
;
194 std::string NextFileName
;
196 int PrevFileNameNumber
;
197 std::string PrefixFileName
;
198 std::string ListFileName
;
199 unsigned int ExecCode
;
200 unsigned int MaxAllowedExitCode
;
201 int Silent
; // $ 07.02.2002 AA
204 std::string CommentFileName
; //$ AA 25.11.2001
207 bool ProcessCommand(std::string FormatString
, int CommandType
, int IgnoreErrors
, const char *pcListFileName
= nullptr);
208 void DeleteBraces(std::string
&Command
);
209 int ReplaceVar(std::string
&Command
);
210 int MakeListFile(int QuoteName
, int UseSlash
, int FolderName
, int NameOnly
, int PathOnly
, int FolderMask
, const char *LocalAllFilesMask
);
213 ArcCommand(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, const std::string
&FormatString
,
214 const std::string
&ArcName
, const std::string
&ArcDir
, const std::string
&Password
, const std::string
&AllFilesMask
,
215 int IgnoreErrors
, int CommandType
, int Silent
, const char *RealArcDir
, int DefaultCodepage
);
216 ~ArcCommand(); //$ AA 25.11.2001
219 int GetExecCode() { return (ExecCode
); };
222 struct InitDialogItem
225 unsigned char X1
, Y1
, X2
, Y2
;
229 unsigned char DefaultButton
;
234 разное для ожидания процесса, чтобы убить лист-файл */
237 char ListFileName
[260];
241 /* tran 13.09.2000 $ */
245 unsigned ExactArcName
: 1;
246 unsigned AutoResetExactArcName
: 1;
247 unsigned GroupName
: 1;
248 unsigned ArcUnderCursor
: 1;
249 unsigned MenuWrapMode
: 2;
250 unsigned PutDialogStyle
: 1;
253 operator int32_t() { return *((int32_t *)this); }
254 MAAdvFlags
&operator=(int32_t Flags
)
256 *((int32_t *)this) = Flags
;
265 std::string DescriptionNames
;
266 int ReadDescriptions
;
267 int UpdateDescriptions
;
269 запуск процесса в фоне */
273 /* tran 13.09.2000 $ */
274 int OldUserBackground
; // $ 02.07.2002 AY
275 int UseLastHistory
; // $ 18.05.2001 SVS
276 int AllowChangeDir
; // $ 05.08.2001 SVS
277 // int DeleteExtFile; // $ 12.07.2001 SVS
278 // int AddExtArchive; // $ 16.07.2001 SVS
279 // BOOL AutoResetExactArcName; // $ 2?.11.2001 AA
280 // BOOL ExactArcName; // $ 30.11.2001 AA
281 MAAdvFlags AdvFlags
; //$ 06.03.2002 AA
282 char CommandPrefix1
[50]; //$ 23.01.2003 AY
288 extern struct FarStandardFunctions FSF
;
289 extern struct Options Opt
;
290 extern struct PluginStartupInfo Info
;
291 extern class ArcPlugins
*ArcPlugin
;
292 extern const char *CmdNames
[];
294 extern DWORD PriorityProcessCode
[];
300 std::string
MakeFullName(const char *name
);
302 bool ConfigGeneral();
303 bool ConfigCommands(const std::string
&ArcFormat
, int IDFocus
= 2, bool FastAccess
= false, int PluginNumber
= 0, int PluginType
= 0);
305 const char *GetMsg(int MsgId
);
306 int Execute(HANDLE hPlugin
, const std::string
&CmdStr
,
307 int HideOutput
, int Silent
, int NeedSudo
, int ShowTitle
, const char *ListFileName
= 0);
308 size_t FindExt(const std::string
&Name
);
309 bool AddExt(std::string
&Name
, const std::string
&Ext
); //$ AA 28.11.2001
310 bool DelExt(std::string
&Name
, const std::string
&Ext
);
311 std::string
FormatMessagePath(const char *path
, bool extract_name
, int truncate
= 0);
312 std::string
GetDialogControlText(HANDLE hDlg
, int id
);
313 void SetDialogControlText(HANDLE hDlg
, int id
, const char *str
);
314 void SetDialogControlText(HANDLE hDlg
, int id
, const std::string
&str
);
315 // void StartThreadForKillListFile(PROCESS_INFORMATION *pi,char *list);
316 char *QuoteText(char *Str
);
317 void InitDialogItems(const struct InitDialogItem
*Init
, struct FarDialogItem
*Item
, int ItemsNumber
);
318 std::string
NumberWithCommas(unsigned long long Number
);
319 int MA_ToPercent(long N1
, long N2
);
320 int MA_ToPercent(int64_t N1
, int64_t N2
);
321 int IsCaseMixed(const char *Str
);
323 int LocalStrnicmp(const char *Str1
, const char *Str2
, int Length
);
324 int __isspace(int Chr
);
325 int FindExecuteFile(char *OriginalName
, char *DestName
, int SizeDest
);
326 char *GetCommaWord(char *Src
, char *Word
, char Separator
);
327 BOOL
GoToFile(const char *Target
, BOOL AllowChangeDir
);
328 BOOL
FileExists(const char *Name
);
330 void NormalizePath(const char *SrcName
, char *DestName
);
331 std::string
&ExpandEnv(std::string
&str
);
332 std::string
&NormalizePath(std::string
&path
);
334 int WINAPI
GetPassword(std::string
&Password
, const char *FileName
);
335 void WINAPI
UnixTimeToFileTime(DWORD UnixTime
, FILETIME
*FileTime
);
340 #define I64(x) x##i64
343 #endif // __MULTIARC_HPP__