diff --git a/ClipCopy/src/ClipCopy.cpp b/ClipCopy/src/ClipCopy.cpp index dba53e92..97732767 100644 --- a/ClipCopy/src/ClipCopy.cpp +++ b/ClipCopy/src/ClipCopy.cpp @@ -1,7 +1,10 @@ #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#ifdef UNICODE -#include "plugin.hpp" +#if defined FAR3 +#include +#include "plugin.v3.hpp" +#elif defined UNICODE +#include "plugin.v2.hpp" #else #include "plugin_ansi.hpp" #endif @@ -13,7 +16,9 @@ #endif #include -#ifdef UNICODE +#if defined FAR3 +#define EXP_NAME(p) p ## W +#elif defined UNICODE #define EXP_NAME(p) _export p ## W #else #define EXP_NAME(p) _export p @@ -39,6 +44,10 @@ enum static CONST TCHAR szUsingThePlugin[] = TEXT("Use"); static CONST TCHAR szLnk [] = TEXT(".lnk"); +// {fa871763-7379-4cb4-bdb0-e4ef6fb0b524} +static const GUID ClipCopyGuid = +{ 0xfa871763, 0x7379, 0x4cb4, { 0xbd, 0xb0, 0xe4, 0xef, 0x6f, 0xb0, 0xb5, 0x24 } }; + struct PluginStartupInfo Info; FARSTANDARDFUNCTIONS FSF; HANDLE hHeap; @@ -67,8 +76,13 @@ static VOID ShowErrorMsg(INT ErrorNumber, INT ErrorCode) if (wsprintf(buf, MsgText, ErrorCode) >= MsgTextLength) { LPCTSTR MsgItems[] = {MsgCaption, buf, MsgButtons}; - Info.Message(Info.ModuleNumber, FMSG_WARNING, szUsingThePlugin, MsgItems, - LENGTH_OF_ARRAY(MsgItems), 1); + Info.Message( +#ifdef FAR3 + &ClipCopyGuid, &ClipCopyGuid, +#else + Info.ModuleNumber, +#endif + FMSG_WARNING, szUsingThePlugin, MsgItems, LENGTH_OF_ARRAY(MsgItems), 1); } } } @@ -125,7 +139,11 @@ static inline HRESULT CreateLink(LPCTSTR lpszPathObj, LPCTSTR lpszPathLink) static inline VOID PanelsRedraw(VOID) { -#ifdef UNICODE +#if defined FAR3 + Info.AdvControl(&ClipCopyGuid, ACTL_SYNCHRO, NULL, NULL); + struct PanelInfo PInfo; + Info.PanelControl(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, 0, &PInfo); +#elif defined UNICODE Info.AdvControl(Info.ModuleNumber, ACTL_SYNCHRO, NULL); #else SetFileApisToOEM(); @@ -135,12 +153,24 @@ static inline VOID PanelsRedraw(VOID) } #ifdef UNICODE +#ifdef FAR3 +intptr_t WINAPI EXP_NAME(ProcessSynchroEvent)(const struct ProcessSynchroEventInfo *OInfo) +#else INT WINAPI ProcessSynchroEventW(INT Event, VOID *Param) +#endif { +#ifdef FAR3 + INT Event = OInfo->Event; +#endif if (Event == SE_COMMONSYNCHRO) { +#ifdef FAR3 + Info.PanelControl(INVALID_HANDLE_VALUE, FCTL_UPDATEPANEL, 0, NULL); + Info.PanelControl(INVALID_HANDLE_VALUE, FCTL_REDRAWPANEL, 0, NULL); +#else Info.Control(INVALID_HANDLE_VALUE, FCTL_UPDATEPANEL, 0, NULL); Info.Control(INVALID_HANDLE_VALUE, FCTL_REDRAWPANEL, 0, NULL); +#endif } return 0; @@ -179,7 +209,13 @@ static DWORD _stdcall CopyThread(LPVOID pci) static LPCTSTR GetMsg(INT MsgId) { - return (Info.GetMsg(Info.ModuleNumber, MsgId)); + return (Info.GetMsg( +#ifdef FAR3 + &ClipCopyGuid, (intptr_t)MsgId +#else + Info.ModuleNumber, MsgId +#endif + )); } #define NULCHAR TEXT('\0') @@ -270,7 +306,33 @@ static VOID parse_cmdline(LPTSTR cmdstart, LPTSTR *argv, LPTSTR args, LPUINT num } } +DWORD GetCurrDir(DWORD nBufLen, LPTSTR lpBuf) +{ + DWORD size; +#if defined FAR3 + int Size=Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELDIRECTORY,0,NULL); + FarPanelDirectory* dirInfo = (FarPanelDirectory*)new char[Size]; + dirInfo->StructSize = sizeof(FarPanelDirectory); + Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELDIRECTORY,Size,dirInfo); + size = lstrlen(dirInfo->Name); + if (size <= nBufLen) + wcscpy(lpBuf,dirInfo->Name); + else + size = 0; + delete[](char *)dirInfo; +#elif defined UNICODE + size = Info.Control(PANEL_ACTIVE, FCTL_GETCURRENTDIRECTORY, nBufLen, (LONG_PTR)lpBuf) - 1; +#else + size = GetCurrentDirectory(nBufLen, lpBuf); +#endif + return size; +} + +#ifdef FAR3 +HANDLE WINAPI EXP_NAME(Open)(const struct OpenInfo *OInfo) +#else HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) +#endif { static UINT CF_PREFERREDDROPEFFECT = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT); IDataObject *pData; @@ -284,12 +346,20 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) LPMALLOC pMalloc = NULL; LPITEMIDLIST *ppidl; LPVOID p; +#ifdef FAR3 + PanelInfo PInfo = {sizeof(PanelInfo)}; +#else struct PanelInfo PInfo; - DWORD effect; +#endif +DWORD effect; INT ExitCode = DoNothing; LPTSTR *SelectedFiles; INT SelectedFilesCount; +#ifdef FAR3 + INT OpenFrom = OInfo->OpenFrom; + INT_PTR Item = OInfo->Data; +#endif #ifdef UNICODE #define MY_MAX_PATH (32767) @@ -329,7 +399,11 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) OpenFrom = OPEN_PLUGINSMENU; ZeroMemory(&MenuItems, sizeof(MenuItems)); +#ifdef FAR3 + MenuItems[DoNothing].Flags = MIF_SEPARATOR; +#else MenuItems[DoNothing].Separator = 1; +#endif for (i = 0; i < DoCount; i++) { #ifdef UNICODE @@ -339,9 +413,17 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) #endif } - ExitCode = Info.Menu(Info.ModuleNumber, -1, -1, 0, FMENU_WRAPMODE, - GetMsg(MTitle), NULL, szUsingThePlugin, NULL, NULL, MenuItems, 5); -#ifdef UNICODE + ExitCode = Info.Menu( +#ifdef FAR3 + &ClipCopyGuid, &ClipCopyGuid, +#else + Info.ModuleNumber, +#endif + -1, -1, 0, FMENU_WRAPMODE, + GetMsg(MTitle), NULL, szUsingThePlugin, NULL, NULL, MenuItems, 5); +#if defined FAR3 + Info.PanelControl(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, 0, &PInfo); +#elif defined UNICODE Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, 0, (LONG_PTR)&PInfo); #else Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo); @@ -370,7 +452,11 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) #ifdef UNICODE for (i = 0; (INT)i < SelectedFilesCount; i++) { +#ifdef FAR3 + int size = Info.PanelControl(PANEL_ACTIVE, FCTL_GETSELECTEDPANELITEM, i, 0); +#else int size = Info.Control(INVALID_HANDLE_VALUE, FCTL_GETSELECTEDPANELITEM, i, 0); +#endif if (size > MaxSize) { MaxSize = size; @@ -389,7 +475,11 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) } else { -#ifdef UNICODE +#if defined FAR3 + FarGetPluginPanelItem FGPPI={sizeof(FarGetPluginPanelItem), MaxSize, PPI}; + size = Info.PanelControl(PANEL_ACTIVE, FCTL_GETSELECTEDPANELITEM, (int)i, &FGPPI); + filename = (LPTSTR)PPI->FileName; +#elif defined UNICODE Info.Control(INVALID_HANDLE_VALUE, FCTL_GETSELECTEDPANELITEM, i, (LONG_PTR)PPI); filename = PPI->FindData.lpwszFileName; #else @@ -546,19 +636,20 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) if SUCCEEDED(hres) { LPDWORD ci; + TCHAR tgtPath[MY_MAX_PATH]; - size = 0; count = DragQueryFile((HDROP)medium.hGlobal, 0xFFFFFFFF, NULL, 0); if (ExitCode == DoPaste) { + //*ci: (DWORD)struct_size (TCHAR[MY_MAX_PATH])to (TCHAR)0 (wchar_t?DWORD:0)0 (TCHAR[MY_MAX_PATH][count])from (TCHAR)0 ci = (DWORD*)HeapAlloc(hHeap, HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, - (count + 1) * (MY_MAX_PATH + 1) + sizeof(DWORD) + 2); -#ifdef UNICODE - size += Info.Control(PANEL_ACTIVE, FCTL_GETCURRENTDIRECTORY, - MY_MAX_PATH, (LONG_PTR)&ci[1]) + sizeof(DWORD) + 2 - 1; -#else - size += GetCurrentDirectory(MY_MAX_PATH, (LPTSTR)&ci[1]) + sizeof(DWORD) + 2; -#endif + (count + 1) * MY_MAX_PATH + sizeof(DWORD) + 2); + size = GetCurrDir(MY_MAX_PATH, (LPTSTR)&ci[1]) + sizeof(DWORD) + 2; + } + else + { + size = GetCurrDir(MY_MAX_PATH, (LPTSTR)&tgtPath); + tgtPath[size++] = '\\'; } for (i = 0; i < count; i++) @@ -572,6 +663,8 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) DragQueryFile((HDROP)medium.hGlobal, i, szName, MY_MAX_PATH); if (GetFullPathName(szName, MY_MAX_PATH, szPath, &pf) != 0) { + lstrcpy((LPTSTR)&tgtPath[size],pf); + pf = (LPTSTR)&tgtPath[size]; int j, cnt = 1; for (j = lstrlen(pf) - 1; j >= 0 && pf[j] != '.'; j--) @@ -585,12 +678,12 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) lstrcpy(&pf[j], szLnk); WIN32_FIND_DATA fd; HANDLE hFind; - while (hFind = FindFirstFile(pf, &fd), hFind != INVALID_HANDLE_VALUE) + while (hFind = FindFirstFile((LPTSTR)&tgtPath, &fd), hFind != INVALID_HANDLE_VALUE) { FindClose(hFind); wsprintf(&pf[j], TEXT(" (%d)%s"), ++cnt, szLnk); } - hres = CreateLink(szName, pf); + hres = CreateLink(szName, (LPTSTR)&tgtPath); } if FAILED(hres) { @@ -636,20 +729,35 @@ HANDLE WINAPI EXP_NAME(OpenPlugin)(INT OpenFrom, INT_PTR Item) HeapFree(hHeap, 0, szName); #endif +#ifdef FAR3 + return NULL; +#else return INVALID_HANDLE_VALUE; +#endif } VOID WINAPI EXP_NAME(GetPluginInfo)(struct PluginInfo *Info) { static LPCTSTR PluginMenuStrings[1]; PluginMenuStrings[0] = GetMsg(MTitle); - Info->PluginMenuStrings = PluginMenuStrings; Info->StructSize = sizeof(*Info); - Info->PluginMenuStringsNumber = LENGTH_OF_ARRAY(PluginMenuStrings); Info->CommandPrefix = TEXT("fclip"); +#ifdef FAR3 + Info->PluginMenu.Guids = &ClipCopyGuid; + Info->PluginMenu.Strings = PluginMenuStrings; + Info->PluginMenu.Count = _countof(PluginMenuStrings); + Info->PluginConfig.Guids = &ClipCopyGuid; + Info->PluginConfig.Strings = PluginMenuStrings; + Info->PluginConfig.Count = _countof(PluginMenuStrings); +#else + Info->PluginMenuStrings = PluginMenuStrings; + Info->PluginMenuStringsNumber = _countof(PluginMenuStrings); + Info->PluginConfigStrings = PluginMenuStrings; + Info->PluginConfigStringsNumber = _countof(PluginMenuStrings); +#endif } -VOID WINAPI EXP_NAME(SetStartupInfo)(CONST struct PluginStartupInfo *pInfo) +VOID WINAPI EXP_NAME(SetStartupInfo)(const struct PluginStartupInfo *pInfo) { Info = *pInfo; FSF = *pInfo->FSF; @@ -657,12 +765,22 @@ VOID WINAPI EXP_NAME(SetStartupInfo)(CONST struct PluginStartupInfo *pInfo) hHeap = GetProcessHeap(); } -#ifdef UNICODE +#ifndef FAR3 INT WINAPI EXP_NAME(GetMinFarVersion)(VOID) { -#ifdef UNICODE return MAKEFARVERSION(2, 0, 1148); +} #endif + +#ifdef FAR3 +VOID WINAPI EXP_NAME(GetGlobalInfo)(struct GlobalInfo *Info) { + Info->StructSize = sizeof(struct GlobalInfo); + Info->MinFarVersion = FARMANAGERVERSION; + Info->Version = MAKEFARVERSION(3,0,1,0,VS_RELEASE); + Info->Guid = ClipCopyGuid; + Info->Title = L"Clipboard"; + Info->Description = L"Explorer like copy using clipboard"; + Info->Author = L"Andrey Budko, Stanislav Mekhanoshin"; } #endif diff --git a/ClipCopy/src/ClipCopy.sln b/ClipCopy/src/ClipCopy.sln index 85ddffe6..af6753b0 100644 --- a/ClipCopy/src/ClipCopy.sln +++ b/ClipCopy/src/ClipCopy.sln @@ -1,24 +1,30 @@  -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ClipCopy", "ClipCopy.vcproj", "{159C015E-5132-49E0-B8DD-94A836145444}" +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ClipCopy", "ClipCopy.vcxproj", "{159C015E-5132-49E0-B8DD-94A836145444}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 DebugAnsi|Win32 = DebugAnsi|Win32 - Release|Win32 = Release|Win32 + DebugV2|Win32 = DebugV2|Win32 + DebugV3|Win32 = DebugV3|Win32 ReleaseAnsi|Win32 = ReleaseAnsi|Win32 + ReleaseV2|Win32 = ReleaseV2|Win32 + ReleaseV3|Win32 = ReleaseV3|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {159C015E-5132-49E0-B8DD-94A836145444}.Debug|Win32.ActiveCfg = Debug|Win32 - {159C015E-5132-49E0-B8DD-94A836145444}.Debug|Win32.Build.0 = Debug|Win32 {159C015E-5132-49E0-B8DD-94A836145444}.DebugAnsi|Win32.ActiveCfg = DebugAnsi|Win32 {159C015E-5132-49E0-B8DD-94A836145444}.DebugAnsi|Win32.Build.0 = DebugAnsi|Win32 - {159C015E-5132-49E0-B8DD-94A836145444}.Release|Win32.ActiveCfg = Release|Win32 - {159C015E-5132-49E0-B8DD-94A836145444}.Release|Win32.Build.0 = Release|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.DebugV2|Win32.ActiveCfg = DebugV2|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.DebugV2|Win32.Build.0 = DebugV2|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.DebugV3|Win32.ActiveCfg = DebugV3|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.DebugV3|Win32.Build.0 = DebugV3|Win32 {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseAnsi|Win32.ActiveCfg = ReleaseAnsi|Win32 {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseAnsi|Win32.Build.0 = ReleaseAnsi|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseV2|Win32.ActiveCfg = ReleaseV2|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseV2|Win32.Build.0 = ReleaseV2|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseV3|Win32.ActiveCfg = ReleaseV3|Win32 + {159C015E-5132-49E0-B8DD-94A836145444}.ReleaseV3|Win32.Build.0 = ReleaseV3|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ClipCopy/src/ClipCopy.def b/ClipCopy/src/ClipCopy.v2.def similarity index 79% rename from ClipCopy/src/ClipCopy.def rename to ClipCopy/src/ClipCopy.v2.def index c794061c..563fc1dc 100644 --- a/ClipCopy/src/ClipCopy.def +++ b/ClipCopy/src/ClipCopy.v2.def @@ -1,4 +1,4 @@ -LIBRARY ClipCopy +LIBRARY ClipCopyW EXPORTS SetStartupInfoW OpenPluginW diff --git a/ClipCopy/src/ClipCopy.v3.def b/ClipCopy/src/ClipCopy.v3.def new file mode 100644 index 00000000..feafdda2 --- /dev/null +++ b/ClipCopy/src/ClipCopy.v3.def @@ -0,0 +1,6 @@ +EXPORTS + SetStartupInfoW + OpenW + GetPluginInfoW + ProcessSynchroEventW + GetGlobalInfoW diff --git a/ClipCopy/src/ClipCopy.vcxproj b/ClipCopy/src/ClipCopy.vcxproj new file mode 100644 index 00000000..f77f70d3 --- /dev/null +++ b/ClipCopy/src/ClipCopy.vcxproj @@ -0,0 +1,591 @@ + + + + + DebugAnsi + x64 + + + DebugV2 + Win32 + + + DebugV2 + x64 + + + DebugV3 + Win32 + + + DebugAnsi + Win32 + + + DebugV3 + x64 + + + ReleaseAnsi + x64 + + + ReleaseV2 + Win32 + + + ReleaseV2 + x64 + + + ReleaseV3 + Win32 + + + ReleaseAnsi + Win32 + + + ReleaseV3 + x64 + + + + {159C015E-5132-49E0-B8DD-94A836145444} + ClipCopy + Win32Proj + + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + true + true + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + false + false + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + true + true + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + false + false + $(ProjectName)W3d + $(ProjectName)W3x64d + $(ProjectName)W3 + $(ProjectName)W3x64 + $(ProjectName)W + $(ProjectName)W + $(ProjectName)Wd + $(ProjectName)W + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + $(OutDir)$(TargetName)$(TargetExt) + ClipCopy.v2.def + true + Windows + MachineX86 + + + + + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + ProgramDatabase + + + $(OutDir)$(TargetName)$(TargetExt) + ClipCopy.v2.def + true + Windows + + + + + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;FAR3;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + ClipCopy.v3.def + true + Windows + MachineX86 + + + + + + + + + Disabled + _WIN64;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;FAR3;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + ProgramDatabase + + + ClipCopy.v3.def + true + Windows + + + + + + + + + MinSpace + OnlyExplicitInline + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + + + Level3 + ProgramDatabase + FastCall + + + $(OutDir)$(TargetName)$(TargetExt) + ClipCopy.v2.def + false + Windows + true + true + + + MachineX86 + + + + + MinSpace + OnlyExplicitInline + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + + + Level3 + ProgramDatabase + FastCall + + + $(OutDir)$(TargetName)$(TargetExt) + ClipCopy.v2.def + false + Windows + true + true + + + + + + + MinSpace + OnlyExplicitInline + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;FAR3;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + + + Level3 + ProgramDatabase + FastCall + + + ClipCopy.v3.def + false + Windows + true + true + + + MachineX86 + + + + + MinSpace + OnlyExplicitInline + true + _WIN64;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;FAR3;%(PreprocessorDefinitions) + true + + + false + + + Level3 + ProgramDatabase + FastCall + MultiThreadedDLL + + + ClipCopy.v3.def + false + Windows + true + true + + + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + ClipCopy_ansi.def + true + Windows + MachineX86 + + + + + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + ProgramDatabase + + + ClipCopy_ansi.def + true + Windows + + + + + + + + + MinSpace + OnlyExplicitInline + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + + + Level3 + ProgramDatabase + FastCall + + + ClipCopy_ansi.def + false + Windows + true + true + + + MachineX86 + + + + + MinSpace + OnlyExplicitInline + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;CLIPCOPY_EXPORTS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + + + Level3 + ProgramDatabase + FastCall + + + ClipCopy_ansi.def + false + Windows + true + true + + + + + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + + + + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/ClipCopy/src/ClipCopy.vcxproj.filters b/ClipCopy/src/ClipCopy.vcxproj.filters new file mode 100644 index 00000000..f6a4b4e4 --- /dev/null +++ b/ClipCopy/src/ClipCopy.vcxproj.filters @@ -0,0 +1,46 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + Header Files + + + Source Files + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/ClipCopy/src/makefile b/ClipCopy/src/makefile new file mode 100644 index 00000000..5c1bc3f4 --- /dev/null +++ b/ClipCopy/src/makefile @@ -0,0 +1,62 @@ +#path to the common folder from far plugins SVN +ifndef COMMON +COMMON = ../../../FAR/fardev/plugins/common +endif + +ifdef WIDE +SUFFIX= +ADDDEFINES=-D UNICODE -D _UNICODE +COMINC = $(COMMON)/unicode +else +SUFFIX=_ansi +COMINC = $(COMMON)/ascii +endif + +COMMONLIB = -L $(COMMON) -lCRT + +OBJDIR = ../o$(SUFFIX) +REOBJDIR = \.\.\/o$(SUFFIX)\/ +DLLDIR = ../bin +DLLNAME = ClipCopy$(SUFFIX).dll +DLLFULLNAME = $(DLLDIR)/$(DLLNAME) +SRCS = ClipCopy.cpp +DEF = ClipCopy$(SUFFIX).gcc.def + +CXX = g++ +DLLTOOL = dlltool +RM = rm -f +CP = cp -f +M4 = m4 -P +MV = mv -f +MKDIR = mkdir -p +CXXFLAGS = -mno-cygwin -Os -I $(COMMON) -I $(COMINC) -Wall -funsigned-char -fomit-frame-pointer -fstrict-aliasing -fno-rtti -fno-exceptions -fno-threadsafe-statics $(ADDDEFINES) +LNKFLAGS = -mno-cygwin -mdll -s -nostartfiles -nodefaultlibs -lgcc $(COMMONLIB) -luser32 -lkernel32 -ladvapi32 -lole32 -lshell32 -luuid + +OBJS = $(patsubst %.cpp,$(OBJDIR)/%.o,$(filter %.cpp,$(SRCS))) +DEPS = $(patsubst %.cpp,$(OBJDIR)/%.d,$(filter %.cpp,$(SRCS))) +MAP = $(patsubst %.dll,%.map,$(DLLFULLNAME)) + +all: $(DLLFULLNAME) + +$(OBJDIR)/%.d: %.cpp + @echo making depends for $< + @$(MKDIR) $(@D) + @$(SHELL) -ec '$(CXX) -c -MM $(CXXFLAGS) $< \ + | sed '\''s/\($*\)\.o[ :]*/$(REOBJDIR)\1.o $(REOBJDIR)\1.d: /g'\'' > $@; [ -s $@ ] || $(RM) $@' + +$(OBJDIR)/%.o: %.cpp + @echo compiling $< + @$(MKDIR) $(@D) + @$(CXX) $(CXXFLAGS) -c -o $@ $< + +$(DLLFULLNAME): $(OBJS) $(DEF) + @echo linking $@ + @$(MKDIR) $(@D) + @$(CXX) -mdll -o $(DLLNAME) -Xlinker --base-file -Xlinker $(DLLNAME).base $(OBJS) $(LNKFLAGS) + @$(DLLTOOL) --dllname $(DLLNAME) --base-file $(DLLNAME).base --output-exp $(DLLNAME).exp --def $(DEF) + @$(CXX) -mdll -o $(DLLNAME) $(OBJS) $(DLLNAME).exp $(LNKFLAGS) -Xlinker -Map -Xlinker $(MAP) + @$(MV) $(DLLNAME) $(DLLDIR) + @$(RM) $(DLLNAME).base + @$(RM) $(DLLNAME).exp + +-include $(DEPS) diff --git a/ClipCopy/src/plugin.v2.hpp b/ClipCopy/src/plugin.v2.hpp new file mode 100644 index 00000000..67e61fc7 --- /dev/null +++ b/ClipCopy/src/plugin.v2.hpp @@ -0,0 +1,1927 @@ +#pragma once +#ifndef __PLUGIN_HPP__ +#define __PLUGIN_HPP__ + +/* + plugin.hpp + + Plugin API for FAR Manager 2.0 build 1148 +*/ + +/* +Copyright (c) 1996 Eugene Roshal +Copyright (c) 2000 Far Group +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +EXCEPTION: +Far Manager plugins that use this header file can be distributed under any +other possible license with no implications from the above license on them. +*/ + +#define FARMANAGERVERSION_MAJOR 2 +#define FARMANAGERVERSION_MINOR 0 +#define FARMANAGERVERSION_BUILD 1148 + +#ifndef RC_INVOKED + +#define MAKEFARVERSION(major,minor,build) ( ((major)<<8) | (minor) | ((build)<<16)) + +#define FARMANAGERVERSION MAKEFARVERSION(FARMANAGERVERSION_MAJOR,FARMANAGERVERSION_MINOR,FARMANAGERVERSION_BUILD) + +#if !defined(_INC_WINDOWS) && !defined(_WINDOWS_) + #if (defined(__GNUC__) || defined(_MSC_VER)) && !defined(_WIN64) + #if !defined(_WINCON_H) && !defined(_WINCON_) + #define _WINCON_H + #define _WINCON_ // to prevent including wincon.h + #if defined(_MSC_VER) + #pragma pack(push,2) + #else + #pragma pack(2) + #endif + #include + #if defined(_MSC_VER) + #pragma pack(pop) + #else + #pragma pack() + #endif + #undef _WINCON_ + #undef _WINCON_H + + #if defined(_MSC_VER) + #pragma pack(push,8) + #else + #pragma pack(8) + #endif + #include + #if defined(_MSC_VER) + #pragma pack(pop) + #else + #pragma pack() + #endif + #endif + #define _WINCON_ + #else + #include + #endif +#endif + +#if defined(__BORLANDC__) + #ifndef _WIN64 + #pragma option -a2 + #endif +#elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) || defined(__LCC__) + #ifndef _WIN64 + #pragma pack(2) + #endif + #if defined(__LCC__) + #define _export __declspec(dllexport) + #endif +#else + #ifndef _WIN64 + #pragma pack(push,2) + #endif + #if _MSC_VER + #ifdef _export + #undef _export + #endif + #define _export + #endif +#endif + +#define NM 260 + +#undef DefDlgProc + +#define FARMACRO_KEY_EVENT (KEY_EVENT|0x8000) + +// To ensure compatibility of plugin.hpp with compilers not supporting C++, +// you can #define _FAR_NO_NAMELESS_UNIONS. In this case, to access, +// for example, the Data field of the FarDialogItem structure +// you will need to use Data.Data, and the Selected field - Param.Selected +//#define _FAR_NO_NAMELESS_UNIONS + +#ifndef _WINCON_ +typedef struct _INPUT_RECORD INPUT_RECORD; +typedef struct _CHAR_INFO CHAR_INFO; +#endif + +#define CP_UNICODE 1200 +#define CP_REVERSEBOM 1201 +#define CP_AUTODETECT ((UINT)-1) + +enum FARMESSAGEFLAGS{ + FMSG_WARNING = 0x00000001, + FMSG_ERRORTYPE = 0x00000002, + FMSG_KEEPBACKGROUND = 0x00000004, + FMSG_DOWN = 0x00000008, + FMSG_LEFTALIGN = 0x00000010, + + FMSG_ALLINONE = 0x00000020, + + FMSG_MB_OK = 0x00010000, + FMSG_MB_OKCANCEL = 0x00020000, + FMSG_MB_ABORTRETRYIGNORE = 0x00030000, + FMSG_MB_YESNO = 0x00040000, + FMSG_MB_YESNOCANCEL = 0x00050000, + FMSG_MB_RETRYCANCEL = 0x00060000, +}; + +typedef int (WINAPI *FARAPIMESSAGE)( + INT_PTR PluginNumber, + DWORD Flags, + const wchar_t *HelpTopic, + const wchar_t * const *Items, + int ItemsNumber, + int ButtonsNumber +); + + +enum DialogItemTypes { + DI_TEXT, + DI_VTEXT, + DI_SINGLEBOX, + DI_DOUBLEBOX, + DI_EDIT, + DI_PSWEDIT, + DI_FIXEDIT, + DI_BUTTON, + DI_CHECKBOX, + DI_RADIOBUTTON, + DI_COMBOBOX, + DI_LISTBOX, + + DI_USERCONTROL=255, +}; + +/* + Check diagol element type has inputstring? + (DI_EDIT, DI_FIXEDIT, DI_PSWEDIT, etc) +*/ +static __inline BOOL IsEdit(int Type) +{ + switch(Type) { + case DI_EDIT: + case DI_FIXEDIT: + case DI_PSWEDIT: + case DI_COMBOBOX: + return TRUE; + default: + return FALSE; + } +} + + +enum FarDialogItemFlags { + DIF_COLORMASK = 0x000000ffUL, + DIF_SETCOLOR = 0x00000100UL, + DIF_BOXCOLOR = 0x00000200UL, + DIF_GROUP = 0x00000400UL, + DIF_LEFTTEXT = 0x00000800UL, + DIF_MOVESELECT = 0x00001000UL, + DIF_SHOWAMPERSAND = 0x00002000UL, + DIF_CENTERGROUP = 0x00004000UL, + DIF_NOBRACKETS = 0x00008000UL, + DIF_MANUALADDHISTORY = 0x00008000UL, + DIF_SEPARATOR = 0x00010000UL, + DIF_SEPARATOR2 = 0x00020000UL, + DIF_EDITOR = 0x00020000UL, + DIF_LISTNOAMPERSAND = 0x00020000UL, + DIF_LISTNOBOX = 0x00040000UL, + DIF_HISTORY = 0x00040000UL, + DIF_BTNNOCLOSE = 0x00040000UL, + DIF_CENTERTEXT = 0x00040000UL, + DIF_NOTCVTUSERCONTROL = 0x00040000UL, + DIF_EDITEXPAND = 0x00080000UL, + DIF_DROPDOWNLIST = 0x00100000UL, + DIF_USELASTHISTORY = 0x00200000UL, + DIF_MASKEDIT = 0x00400000UL, + DIF_SELECTONENTRY = 0x00800000UL, + DIF_3STATE = 0x00800000UL, + DIF_LISTWRAPMODE = 0x01000000UL, + DIF_NOAUTOCOMPLETE = 0x02000000UL, + DIF_LISTAUTOHIGHLIGHT = 0x02000000UL, + DIF_LISTNOCLOSE = 0x04000000UL, + DIF_HIDDEN = 0x10000000UL, + DIF_READONLY = 0x20000000UL, + DIF_NOFOCUS = 0x40000000UL, + DIF_DISABLE = 0x80000000UL, +}; + +enum FarMessagesProc{ + DM_FIRST=0, + DM_CLOSE, + DM_ENABLE, + DM_ENABLEREDRAW, + DM_GETDLGDATA, + DM_GETDLGITEM, + DM_GETDLGRECT, + DM_GETTEXT, + DM_GETTEXTLENGTH, + DM_KEY, + DM_MOVEDIALOG, + DM_SETDLGDATA, + DM_SETDLGITEM, + DM_SETFOCUS, + DM_REDRAW, + DM_SETREDRAW=DM_REDRAW, + DM_SETTEXT, + DM_SETMAXTEXTLENGTH, + DM_SETTEXTLENGTH=DM_SETMAXTEXTLENGTH, + DM_SHOWDIALOG, + DM_GETFOCUS, + DM_GETCURSORPOS, + DM_SETCURSORPOS, + DM_GETTEXTPTR, + DM_SETTEXTPTR, + DM_SHOWITEM, + DM_ADDHISTORY, + + DM_GETCHECK, + DM_SETCHECK, + DM_SET3STATE, + + DM_LISTSORT, + DM_LISTGETITEM, + DM_LISTGETCURPOS, + DM_LISTSETCURPOS, + DM_LISTDELETE, + DM_LISTADD, + DM_LISTADDSTR, + DM_LISTUPDATE, + DM_LISTINSERT, + DM_LISTFINDSTRING, + DM_LISTINFO, + DM_LISTGETDATA, + DM_LISTSETDATA, + DM_LISTSETTITLES, + DM_LISTGETTITLES, + + DM_RESIZEDIALOG, + DM_SETITEMPOSITION, + + DM_GETDROPDOWNOPENED, + DM_SETDROPDOWNOPENED, + + DM_SETHISTORY, + + DM_GETITEMPOSITION, + DM_SETMOUSEEVENTNOTIFY, + + DM_EDITUNCHANGEDFLAG, + + DM_GETITEMDATA, + DM_SETITEMDATA, + + DM_LISTSET, + DM_LISTSETMOUSEREACTION, + + DM_GETCURSORSIZE, + DM_SETCURSORSIZE, + + DM_LISTGETDATASIZE, + + DM_GETSELECTION, + DM_SETSELECTION, + + DM_GETEDITPOSITION, + DM_SETEDITPOSITION, + + DM_SETCOMBOBOXEVENT, + DM_GETCOMBOBOXEVENT, + + DM_GETCONSTTEXTPTR, + DM_GETDLGITEMSHORT, + DM_SETDLGITEMSHORT, + + DM_GETDIALOGINFO, + + DN_FIRST=0x1000, + DN_BTNCLICK, + DN_CTLCOLORDIALOG, + DN_CTLCOLORDLGITEM, + DN_CTLCOLORDLGLIST, + DN_DRAWDIALOG, + DN_DRAWDLGITEM, + DN_EDITCHANGE, + DN_ENTERIDLE, + DN_GOTFOCUS, + DN_HELP, + DN_HOTKEY, + DN_INITDIALOG, + DN_KILLFOCUS, + DN_LISTCHANGE, + DN_MOUSECLICK, + DN_DRAGGED, + DN_RESIZECONSOLE, + DN_MOUSEEVENT, + DN_DRAWDIALOGDONE, + DN_LISTHOTKEY, + + DN_GETDIALOGINFO=DM_GETDIALOGINFO, + + DN_CLOSE=DM_CLOSE, + DN_KEY=DM_KEY, + + + DM_USER=0x4000, + +}; + +enum FARCHECKEDSTATE { + BSTATE_UNCHECKED = 0, + BSTATE_CHECKED = 1, + BSTATE_3STATE = 2, + BSTATE_TOGGLE = 3, +}; + +enum FARLISTMOUSEREACTIONTYPE{ + LMRT_ONLYFOCUS = 0, + LMRT_ALWAYS = 1, + LMRT_NEVER = 2, +}; + +enum FARCOMBOBOXEVENTTYPE{ + CBET_KEY = 0x00000001, + CBET_MOUSE = 0x00000002, +}; + +enum LISTITEMFLAGS { + LIF_SELECTED = 0x00010000UL, + LIF_CHECKED = 0x00020000UL, + LIF_SEPARATOR = 0x00040000UL, + LIF_DISABLE = 0x00080000UL, + LIF_GRAYED = 0x00100000UL, + LIF_HIDDEN = 0x00200000UL, + LIF_DELETEUSERDATA = 0x80000000UL, +}; + +struct FarListItem +{ + DWORD Flags; + const wchar_t *Text; + DWORD Reserved[3]; +}; + +struct FarListUpdate +{ + int Index; + struct FarListItem Item; +}; + +struct FarListInsert +{ + int Index; + struct FarListItem Item; +}; + +struct FarListGetItem +{ + int ItemIndex; + struct FarListItem Item; +}; + +struct FarListPos +{ + int SelectPos; + int TopPos; +}; + +enum FARLISTFINDFLAGS{ + LIFIND_EXACTMATCH = 0x00000001, +}; + +struct FarListFind +{ + int StartIndex; + const wchar_t *Pattern; + DWORD Flags; + DWORD Reserved; +}; + +struct FarListDelete +{ + int StartIndex; + int Count; +}; + +enum FARLISTINFOFLAGS{ + LINFO_SHOWNOBOX = 0x00000400, + LINFO_AUTOHIGHLIGHT = 0x00000800, + LINFO_REVERSEHIGHLIGHT = 0x00001000, + LINFO_WRAPMODE = 0x00008000, + LINFO_SHOWAMPERSAND = 0x00010000, +}; + +struct FarListInfo +{ + DWORD Flags; + int ItemsNumber; + int SelectPos; + int TopPos; + int MaxHeight; + int MaxLength; + DWORD Reserved[6]; +}; + +struct FarListItemData +{ + int Index; + int DataSize; + void *Data; + DWORD Reserved; +}; + +struct FarList +{ + int ItemsNumber; + struct FarListItem *Items; +}; + +struct FarListTitles +{ + int TitleLen; + const wchar_t *Title; + int BottomLen; + const wchar_t *Bottom; +}; + +struct FarListColors{ + DWORD Flags; + DWORD Reserved; + int ColorCount; + LPBYTE Colors; +}; + +struct FarDialogItem +{ + int Type; + int X1,Y1,X2,Y2; + int Focus; + union + { + DWORD_PTR Reserved; + int Selected; + const wchar_t *History; + const wchar_t *Mask; + struct FarList *ListItems; + int ListPos; + CHAR_INFO *VBuf; + } +#ifdef _FAR_NO_NAMELESS_UNIONS + Param +#endif + ; + DWORD Flags; + int DefaultButton; + + const wchar_t *PtrData; + size_t MaxLen; // terminate 0 not included (if == 0 string size is unlimited) +}; + +struct FarDialogItemData +{ + size_t PtrLength; + wchar_t *PtrData; +}; + +struct FarDialogEvent +{ + HANDLE hDlg; + int Msg; + int Param1; + LONG_PTR Param2; + LONG_PTR Result; +}; + +struct OpenDlgPluginData +{ + int ItemNumber; + HANDLE hDlg; +}; + +struct DialogInfo +{ + int StructSize; + GUID Id; +}; + +#define Dlg_RedrawDialog(Info,hDlg) Info.SendDlgMessage(hDlg,DM_REDRAW,0,0) + +#define Dlg_GetDlgData(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0) +#define Dlg_SetDlgData(Info,hDlg,Data) Info.SendDlgMessage(hDlg,DM_SETDLGDATA,0,(LONG_PTR)Data) + +#define Dlg_GetDlgItemData(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETITEMDATA,0,0) +#define Dlg_SetDlgItemData(Info,hDlg,ID,Data) Info.SendDlgMessage(hDlg,DM_SETITEMDATA,0,(LONG_PTR)Data) + +#define DlgItem_GetFocus(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETFOCUS,0,0) +#define DlgItem_SetFocus(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_SETFOCUS,ID,0) +#define DlgItem_Enable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,TRUE) +#define DlgItem_Disable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,FALSE) +#define DlgItem_IsEnable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,-1) +#define DlgItem_SetText(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,ID,(LONG_PTR)Str) + +#define DlgItem_GetCheck(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETCHECK,ID,0) +#define DlgItem_SetCheck(Info,hDlg,ID,State) Info.SendDlgMessage(hDlg,DM_SETCHECK,ID,State) + +#define DlgEdit_AddHistory(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_ADDHISTORY,ID,(LONG_PTR)Str) + +#define DlgList_AddString(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_LISTADDSTR,ID,(LONG_PTR)Str) +#define DlgList_GetCurPos(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,ID,0) +#define DlgList_SetCurPos(Info,hDlg,ID,NewPos) {struct FarListPos LPos={NewPos,-1};Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,ID,(LONG_PTR)&LPos);} +#define DlgList_ClearList(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,0) +#define DlgList_DeleteItem(Info,hDlg,ID,Index) {struct FarListDelete FLDItem={Index,1}; Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,(LONG_PTR)&FLDItem);} +#define DlgList_SortUp(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,0) +#define DlgList_SortDown(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,1) +#define DlgList_GetItemData(Info,hDlg,ID,Index) Info.SendDlgMessage(hDlg,DM_LISTGETDATA,ID,Index) +#define DlgList_SetItemStrAsData(Info,hDlg,ID,Index,Str) {struct FarListItemData FLID{Index,0,Str,0}; Info.SendDlgMessage(hDlg,DM_LISTSETDATA,ID,(LONG_PTR)&FLID);} + +enum FARDIALOGFLAGS{ + FDLG_WARNING = 0x00000001, + FDLG_SMALLDIALOG = 0x00000002, + FDLG_NODRAWSHADOW = 0x00000004, + FDLG_NODRAWPANEL = 0x00000008, +}; + +typedef LONG_PTR (WINAPI *FARWINDOWPROC)( + HANDLE hDlg, + int Msg, + int Param1, + LONG_PTR Param2 +); + +typedef LONG_PTR (WINAPI *FARAPISENDDLGMESSAGE)( + HANDLE hDlg, + int Msg, + int Param1, + LONG_PTR Param2 +); + +typedef LONG_PTR (WINAPI *FARAPIDEFDLGPROC)( + HANDLE hDlg, + int Msg, + int Param1, + LONG_PTR Param2 +); + +typedef HANDLE (WINAPI *FARAPIDIALOGINIT)( + INT_PTR PluginNumber, + int X1, + int Y1, + int X2, + int Y2, + const wchar_t *HelpTopic, + struct FarDialogItem *Item, + unsigned int ItemsNumber, + DWORD Reserved, + DWORD Flags, + FARWINDOWPROC DlgProc, + LONG_PTR Param +); + +typedef int (WINAPI *FARAPIDIALOGRUN)( + HANDLE hDlg +); + +typedef void (WINAPI *FARAPIDIALOGFREE)( + HANDLE hDlg +); + +struct FarMenuItem +{ + const wchar_t *Text; + int Selected; + int Checked; + int Separator; +}; + +enum MENUITEMFLAGS { + MIF_SELECTED = 0x00010000UL, + MIF_CHECKED = 0x00020000UL, + MIF_SEPARATOR = 0x00040000UL, + MIF_DISABLE = 0x00080000UL, + MIF_GRAYED = 0x00100000UL, + MIF_HIDDEN = 0x00200000UL, + MIF_USETEXTPTR = 0x80000000UL, +}; + +struct FarMenuItemEx +{ + DWORD Flags; + const wchar_t *Text; + DWORD AccelKey; + DWORD Reserved; + DWORD_PTR UserData; +}; + +enum FARMENUFLAGS{ + FMENU_SHOWAMPERSAND = 0x00000001, + FMENU_WRAPMODE = 0x00000002, + FMENU_AUTOHIGHLIGHT = 0x00000004, + FMENU_REVERSEAUTOHIGHLIGHT = 0x00000008, + FMENU_USEEXT = 0x00000020, + FMENU_CHANGECONSOLETITLE = 0x00000040, +}; + +typedef int (WINAPI *FARAPIMENU)( + INT_PTR PluginNumber, + int X, + int Y, + int MaxHeight, + DWORD Flags, + const wchar_t *Title, + const wchar_t *Bottom, + const wchar_t *HelpTopic, + const int *BreakKeys, + int *BreakCode, + const struct FarMenuItem *Item, + int ItemsNumber +); + + +enum PLUGINPANELITEMFLAGS{ + PPIF_PROCESSDESCR = 0x80000000, + PPIF_SELECTED = 0x40000000, + PPIF_USERDATA = 0x20000000, +}; + +struct FAR_FIND_DATA +{ + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + unsigned __int64 nFileSize; + unsigned __int64 nPackSize; + wchar_t *lpwszFileName; + wchar_t *lpwszAlternateFileName; +}; + +struct PluginPanelItem +{ + struct FAR_FIND_DATA FindData; + DWORD Flags; + DWORD NumberOfLinks; + wchar_t *Description; + wchar_t *Owner; + wchar_t **CustomColumnData; + int CustomColumnNumber; + DWORD_PTR UserData; + DWORD CRC32; + DWORD_PTR Reserved[2]; +}; + +enum PANELINFOFLAGS { + PFLAGS_SHOWHIDDEN = 0x00000001, + PFLAGS_HIGHLIGHT = 0x00000002, + PFLAGS_REVERSESORTORDER = 0x00000004, + PFLAGS_USESORTGROUPS = 0x00000008, + PFLAGS_SELECTEDFIRST = 0x00000010, + PFLAGS_REALNAMES = 0x00000020, + PFLAGS_NUMERICSORT = 0x00000040, + PFLAGS_PANELLEFT = 0x00000080, +}; + +enum PANELINFOTYPE{ + PTYPE_FILEPANEL, + PTYPE_TREEPANEL, + PTYPE_QVIEWPANEL, + PTYPE_INFOPANEL +}; + +struct PanelInfo +{ + int PanelType; + int Plugin; + RECT PanelRect; + int ItemsNumber; + int SelectedItemsNumber; + int CurrentItem; + int TopPanelItem; + int Visible; + int Focus; + int ViewMode; + int ShortNames; + int SortMode; + DWORD Flags; + DWORD Reserved; +}; + + +struct PanelRedrawInfo +{ + int CurrentItem; + int TopPanelItem; +}; + +struct CmdLineSelect +{ + int SelStart; + int SelEnd; +}; + +#define PANEL_NONE ((HANDLE)(-1)) +#define PANEL_ACTIVE ((HANDLE)(-1)) +#define PANEL_PASSIVE ((HANDLE)(-2)) + +enum FILE_CONTROL_COMMANDS{ + FCTL_CLOSEPLUGIN, + FCTL_GETPANELINFO, + FCTL_UPDATEPANEL, + FCTL_REDRAWPANEL, + FCTL_GETCMDLINE, + FCTL_SETCMDLINE, + FCTL_SETSELECTION, + FCTL_SETVIEWMODE, + FCTL_INSERTCMDLINE, + FCTL_SETUSERSCREEN, + FCTL_SETPANELDIR, + FCTL_SETCMDLINEPOS, + FCTL_GETCMDLINEPOS, + FCTL_SETSORTMODE, + FCTL_SETSORTORDER, + FCTL_GETCMDLINESELECTEDTEXT, + FCTL_SETCMDLINESELECTION, + FCTL_GETCMDLINESELECTION, + FCTL_CHECKPANELSEXIST, + FCTL_SETNUMERICSORT, + FCTL_GETUSERSCREEN, + FCTL_ISACTIVEPANEL, + FCTL_GETPANELITEM, + FCTL_GETSELECTEDPANELITEM, + FCTL_GETCURRENTPANELITEM, + FCTL_GETCURRENTDIRECTORY, + FCTL_GETCOLUMNTYPES, + FCTL_GETCOLUMNWIDTHS, + FCTL_BEGINSELECTION, + FCTL_ENDSELECTION, +}; + +typedef int (WINAPI *FARAPICONTROL)( + HANDLE hPlugin, + int Command, + int Param1, + LONG_PTR Param2 +); + +typedef void (WINAPI *FARAPITEXT)( + int X, + int Y, + int Color, + const wchar_t *Str +); + +typedef HANDLE (WINAPI *FARAPISAVESCREEN)(int X1, int Y1, int X2, int Y2); + +typedef void (WINAPI *FARAPIRESTORESCREEN)(HANDLE hScreen); + + +typedef int (WINAPI *FARAPIGETDIRLIST)( + const wchar_t *Dir, + struct FAR_FIND_DATA **pPanelItem, + int *pItemsNumber +); + +typedef int (WINAPI *FARAPIGETPLUGINDIRLIST)( + INT_PTR PluginNumber, + HANDLE hPlugin, + const wchar_t *Dir, + struct PluginPanelItem **pPanelItem, + int *pItemsNumber +); + +typedef void (WINAPI *FARAPIFREEDIRLIST)(struct FAR_FIND_DATA *PanelItem, int nItemsNumber); +typedef void (WINAPI *FARAPIFREEPLUGINDIRLIST)(struct PluginPanelItem *PanelItem, int nItemsNumber); + +enum VIEWER_FLAGS { + VF_NONMODAL = 0x00000001, + VF_DELETEONCLOSE = 0x00000002, + VF_ENABLE_F6 = 0x00000004, + VF_DISABLEHISTORY = 0x00000008, + VF_IMMEDIATERETURN = 0x00000100, + VF_DELETEONLYFILEONCLOSE = 0x00000200, +}; + +typedef int (WINAPI *FARAPIVIEWER)( + const wchar_t *FileName, + const wchar_t *Title, + int X1, + int Y1, + int X2, + int Y2, + DWORD Flags, + UINT CodePage +); + +enum EDITOR_FLAGS { + EF_NONMODAL = 0x00000001, + EF_CREATENEW = 0x00000002, + EF_ENABLE_F6 = 0x00000004, + EF_DISABLEHISTORY = 0x00000008, + EF_DELETEONCLOSE = 0x00000010, + EF_IMMEDIATERETURN = 0x00000100, + EF_DELETEONLYFILEONCLOSE = 0x00000200, +}; + +enum EDITOR_EXITCODE{ + EEC_OPEN_ERROR = 0, + EEC_MODIFIED = 1, + EEC_NOT_MODIFIED = 2, + EEC_LOADING_INTERRUPTED = 3, +}; + +typedef int (WINAPI *FARAPIEDITOR)( + const wchar_t *FileName, + const wchar_t *Title, + int X1, + int Y1, + int X2, + int Y2, + DWORD Flags, + int StartLine, + int StartChar, + UINT CodePage +); + +typedef int (WINAPI *FARAPICMPNAME)( + const wchar_t *Pattern, + const wchar_t *String, + int SkipPath +); + + +typedef const wchar_t* (WINAPI *FARAPIGETMSG)( + INT_PTR PluginNumber, + int MsgId +); + + +enum FarHelpFlags{ + FHELP_NOSHOWERROR = 0x80000000, + FHELP_SELFHELP = 0x00000000, + FHELP_FARHELP = 0x00000001, + FHELP_CUSTOMFILE = 0x00000002, + FHELP_CUSTOMPATH = 0x00000004, + FHELP_USECONTENTS = 0x40000000, +}; + +typedef BOOL (WINAPI *FARAPISHOWHELP)( + const wchar_t *ModuleName, + const wchar_t *Topic, + DWORD Flags +); + +enum ADVANCED_CONTROL_COMMANDS{ + ACTL_GETFARVERSION = 0, + ACTL_CONSOLEMODE = 1, + ACTL_GETSYSWORDDIV = 2, + ACTL_WAITKEY = 3, + ACTL_GETCOLOR = 4, + ACTL_GETARRAYCOLOR = 5, + ACTL_EJECTMEDIA = 6, + ACTL_KEYMACRO = 7, + ACTL_POSTKEYSEQUENCE = 8, + ACTL_GETWINDOWINFO = 9, + ACTL_GETWINDOWCOUNT = 10, + ACTL_SETCURRENTWINDOW = 11, + ACTL_COMMIT = 12, + ACTL_GETFARHWND = 13, + ACTL_GETSYSTEMSETTINGS = 14, + ACTL_GETPANELSETTINGS = 15, + ACTL_GETINTERFACESETTINGS = 16, + ACTL_GETCONFIRMATIONS = 17, + ACTL_GETDESCSETTINGS = 18, + ACTL_SETARRAYCOLOR = 19, + ACTL_GETWCHARMODE = 20, + ACTL_GETPLUGINMAXREADDATA = 21, + ACTL_GETDIALOGSETTINGS = 22, + ACTL_GETSHORTWINDOWINFO = 23, + ACTL_REDRAWALL = 27, + ACTL_SYNCHRO = 28, +}; + + +enum FarSystemSettings{ + FSS_CLEARROATTRIBUTE = 0x00000001, + FSS_DELETETORECYCLEBIN = 0x00000002, + FSS_USESYSTEMCOPYROUTINE = 0x00000004, + FSS_COPYFILESOPENEDFORWRITING = 0x00000008, + FSS_CREATEFOLDERSINUPPERCASE = 0x00000010, + FSS_SAVECOMMANDSHISTORY = 0x00000020, + FSS_SAVEFOLDERSHISTORY = 0x00000040, + FSS_SAVEVIEWANDEDITHISTORY = 0x00000080, + FSS_USEWINDOWSREGISTEREDTYPES = 0x00000100, + FSS_AUTOSAVESETUP = 0x00000200, + FSS_SCANSYMLINK = 0x00000400, +}; + +enum FarPanelSettings{ + FPS_SHOWHIDDENANDSYSTEMFILES = 0x00000001, + FPS_HIGHLIGHTFILES = 0x00000002, + FPS_AUTOCHANGEFOLDER = 0x00000004, + FPS_SELECTFOLDERS = 0x00000008, + FPS_ALLOWREVERSESORTMODES = 0x00000010, + FPS_SHOWCOLUMNTITLES = 0x00000020, + FPS_SHOWSTATUSLINE = 0x00000040, + FPS_SHOWFILESTOTALINFORMATION = 0x00000080, + FPS_SHOWFREESIZE = 0x00000100, + FPS_SHOWSCROLLBAR = 0x00000200, + FPS_SHOWBACKGROUNDSCREENSNUMBER = 0x00000400, + FPS_SHOWSORTMODELETTER = 0x00000800, +}; + +enum FarDialogSettings{ + FDIS_HISTORYINDIALOGEDITCONTROLS = 0x00000001, + FDIS_PERSISTENTBLOCKSINEDITCONTROLS = 0x00000002, + FDIS_AUTOCOMPLETEININPUTLINES = 0x00000004, + FDIS_BSDELETEUNCHANGEDTEXT = 0x00000008, + FDIS_DELREMOVESBLOCKS = 0x00000010, + FDIS_MOUSECLICKOUTSIDECLOSESDIALOG = 0x00000020, +}; + +enum FarInterfaceSettings{ + FIS_CLOCKINPANELS = 0x00000001, + FIS_CLOCKINVIEWERANDEDITOR = 0x00000002, + FIS_MOUSE = 0x00000004, + FIS_SHOWKEYBAR = 0x00000008, + FIS_ALWAYSSHOWMENUBAR = 0x00000010, + FIS_SHOWTOTALCOPYPROGRESSINDICATOR = 0x00000100, + FIS_SHOWCOPYINGTIMEINFO = 0x00000200, + FIS_USECTRLPGUPTOCHANGEDRIVE = 0x00000800, +}; + +enum FarConfirmationsSettings{ + FCS_COPYOVERWRITE = 0x00000001, + FCS_MOVEOVERWRITE = 0x00000002, + FCS_DRAGANDDROP = 0x00000004, + FCS_DELETE = 0x00000008, + FCS_DELETENONEMPTYFOLDERS = 0x00000010, + FCS_INTERRUPTOPERATION = 0x00000020, + FCS_DISCONNECTNETWORKDRIVE = 0x00000040, + FCS_RELOADEDITEDFILE = 0x00000080, + FCS_CLEARHISTORYLIST = 0x00000100, + FCS_EXIT = 0x00000200, + FCS_OVERWRITEDELETEROFILES = 0x00000400, +}; + +enum FarDescriptionSettings { + FDS_UPDATEALWAYS = 0x00000001, + FDS_UPDATEIFDISPLAYED = 0x00000002, + FDS_SETHIDDEN = 0x00000004, + FDS_UPDATEREADONLY = 0x00000008, +}; + +#define FAR_CONSOLE_GET_MODE (-2) +#define FAR_CONSOLE_TRIGGER (-1) +#define FAR_CONSOLE_SET_WINDOWED (0) +#define FAR_CONSOLE_SET_FULLSCREEN (1) +#define FAR_CONSOLE_WINDOWED (0) +#define FAR_CONSOLE_FULLSCREEN (1) + +enum FAREJECTMEDIAFLAGS{ + EJECT_NO_MESSAGE = 0x00000001, + EJECT_LOAD_MEDIA = 0x00000002, +}; + +struct ActlEjectMedia { + DWORD Letter; + DWORD Flags; +}; + + +enum FARKEYSEQUENCEFLAGS { + KSFLAGS_DISABLEOUTPUT = 0x00000001, + KSFLAGS_NOSENDKEYSTOPLUGINS = 0x00000002, + KSFLAGS_REG_MULTI_SZ = 0x00100000, +}; + +struct KeySequence{ + DWORD Flags; + int Count; + DWORD *Sequence; +}; + +enum FARMACROCOMMAND{ + MCMD_LOADALL = 0, + MCMD_SAVEALL = 1, + MCMD_POSTMACROSTRING = 2, + MCMD_GETSTATE = 5, +}; + +enum FARMACROSTATE { + MACROSTATE_NOMACRO =0, + MACROSTATE_EXECUTING =1, + MACROSTATE_EXECUTING_COMMON =2, + MACROSTATE_RECORDING =3, + MACROSTATE_RECORDING_COMMON =4, +}; + + +struct ActlKeyMacro{ + int Command; + union{ + struct { + wchar_t *SequenceText; + DWORD Flags; + } PlainText; + DWORD_PTR Reserved[3]; + } Param; +}; + +enum FARCOLORFLAGS{ + FCLR_REDRAW = 0x00000001, +}; + +struct FarSetColors{ + DWORD Flags; + int StartIndex; + int ColorCount; + LPBYTE Colors; +}; + +enum WINDOWINFO_TYPE{ + WTYPE_PANELS=1, + WTYPE_VIEWER, + WTYPE_EDITOR, + WTYPE_DIALOG, + WTYPE_VMENU, + WTYPE_HELP, +}; + +struct WindowInfo +{ + int Pos; + int Type; + int Modified; + int Current; + wchar_t *TypeName; + int TypeNameSize; + wchar_t *Name; + int NameSize; +}; + +typedef INT_PTR (WINAPI *FARAPIADVCONTROL)( + INT_PTR ModuleNumber, + int Command, + void *Param +); + + +enum VIEWER_CONTROL_COMMANDS { + VCTL_GETINFO, + VCTL_QUIT, + VCTL_REDRAW, + VCTL_SETKEYBAR, + VCTL_SETPOSITION, + VCTL_SELECT, + VCTL_SETMODE, +}; + +enum VIEWER_OPTIONS { + VOPT_SAVEFILEPOSITION=1, + VOPT_AUTODETECTCODEPAGE=2, +}; + +enum VIEWER_SETMODE_TYPES { + VSMT_HEX, + VSMT_WRAP, + VSMT_WORDWRAP, +}; + +enum VIEWER_SETMODEFLAGS_TYPES { + VSMFL_REDRAW = 0x00000001, +}; + +struct ViewerSetMode { + int Type; + union { + int iParam; + wchar_t *cParam; + } Param; + DWORD Flags; + DWORD Reserved; +}; + +struct ViewerSelect +{ + __int64 BlockStartPos; + int BlockLen; +}; + +enum VIEWER_SETPOS_FLAGS { + VSP_NOREDRAW = 0x0001, + VSP_PERCENT = 0x0002, + VSP_RELATIVE = 0x0004, + VSP_NORETNEWPOS = 0x0008, +}; + +struct ViewerSetPosition +{ + DWORD Flags; + __int64 StartPos; + __int64 LeftPos; +}; + +struct ViewerMode{ + UINT CodePage; + int Wrap; + int WordWrap; + int Hex; + DWORD Reserved[4]; +}; + +struct ViewerInfo +{ + int StructSize; + int ViewerID; + const wchar_t *FileName; + __int64 FileSize; + __int64 FilePos; + int WindowSizeX; + int WindowSizeY; + DWORD Options; + int TabSize; + struct ViewerMode CurMode; + __int64 LeftPos; +}; + +typedef int (WINAPI *FARAPIVIEWERCONTROL)( + int Command, + void *Param +); + +enum VIEWER_EVENTS { + VE_READ =0, + VE_CLOSE =1, + + VE_GOTFOCUS =6, + VE_KILLFOCUS =7, +}; + + +enum EDITOR_EVENTS { + EE_READ =0, + EE_SAVE =1, + EE_REDRAW =2, + EE_CLOSE =3, + + EE_GOTFOCUS =6, + EE_KILLFOCUS =7, +}; + +enum DIALOG_EVENTS { + DE_DLGPROCINIT =0, + DE_DEFDLGPROCINIT =1, + DE_DLGPROCEND =2, +}; + +enum SYNCHRO_EVENTS { + SE_COMMONSYNCHRO =0, +}; + +#define EEREDRAW_ALL (void*)0 +#define EEREDRAW_CHANGE (void*)1 +#define EEREDRAW_LINE (void*)2 + +enum EDITOR_CONTROL_COMMANDS { + ECTL_GETSTRING, + ECTL_SETSTRING, + ECTL_INSERTSTRING, + ECTL_DELETESTRING, + ECTL_DELETECHAR, + ECTL_INSERTTEXT, + ECTL_GETINFO, + ECTL_SETPOSITION, + ECTL_SELECT, + ECTL_REDRAW, + ECTL_TABTOREAL, + ECTL_REALTOTAB, + ECTL_EXPANDTABS, + ECTL_SETTITLE, + ECTL_READINPUT, + ECTL_PROCESSINPUT, + ECTL_ADDCOLOR, + ECTL_GETCOLOR, + ECTL_SAVEFILE, + ECTL_QUIT, + ECTL_SETKEYBAR, + ECTL_PROCESSKEY, + ECTL_SETPARAM, + ECTL_GETBOOKMARKS, + ECTL_TURNOFFMARKINGBLOCK, + ECTL_DELETEBLOCK, + ECTL_ADDSTACKBOOKMARK, + ECTL_PREVSTACKBOOKMARK, + ECTL_NEXTSTACKBOOKMARK, + ECTL_CLEARSTACKBOOKMARKS, + ECTL_DELETESTACKBOOKMARK, + ECTL_GETSTACKBOOKMARKS, + ECTL_UNDOREDO, + ECTL_GETFILENAME, +}; + +enum EDITOR_SETPARAMETER_TYPES { + ESPT_TABSIZE, + ESPT_EXPANDTABS, + ESPT_AUTOINDENT, + ESPT_CURSORBEYONDEOL, + ESPT_CHARCODEBASE, + ESPT_CODEPAGE, + ESPT_SAVEFILEPOSITION, + ESPT_LOCKMODE, + ESPT_SETWORDDIV, + ESPT_GETWORDDIV, +}; + + + +struct EditorSetParameter +{ + int Type; + union { + int iParam; + wchar_t *cParam; + DWORD Reserved1; + } Param; + DWORD Flags; + DWORD Reserved2; +}; + + +enum EDITOR_UNDOREDO_COMMANDS { + EUR_BEGIN, + EUR_END, + EUR_UNDO, + EUR_REDO +}; + + +struct EditorUndoRedo +{ + int Command; + DWORD_PTR Reserved[3]; +}; + +struct EditorGetString +{ + int StringNumber; + const wchar_t *StringText; + const wchar_t *StringEOL; + int StringLength; + int SelStart; + int SelEnd; +}; + + +struct EditorSetString +{ + int StringNumber; + const wchar_t *StringText; + const wchar_t *StringEOL; + int StringLength; +}; + +enum EXPAND_TABS { + EXPAND_NOTABS, + EXPAND_ALLTABS, + EXPAND_NEWTABS +}; + + +enum EDITOR_OPTIONS { + EOPT_EXPANDALLTABS = 0x00000001, + EOPT_PERSISTENTBLOCKS = 0x00000002, + EOPT_DELREMOVESBLOCKS = 0x00000004, + EOPT_AUTOINDENT = 0x00000008, + EOPT_SAVEFILEPOSITION = 0x00000010, + EOPT_AUTODETECTCODEPAGE = 0x00000020, + EOPT_CURSORBEYONDEOL = 0x00000040, + EOPT_EXPANDONLYNEWTABS = 0x00000080, +}; + + +enum EDITOR_BLOCK_TYPES { + BTYPE_NONE, + BTYPE_STREAM, + BTYPE_COLUMN +}; + +enum EDITOR_CURRENTSTATE { + ECSTATE_MODIFIED = 0x00000001, + ECSTATE_SAVED = 0x00000002, + ECSTATE_LOCKED = 0x00000004, +}; + + +struct EditorInfo +{ + int EditorID; + int WindowSizeX; + int WindowSizeY; + int TotalLines; + int CurLine; + int CurPos; + int CurTabPos; + int TopScreenLine; + int LeftPos; + int Overtype; + int BlockType; + int BlockStartLine; + DWORD Options; + int TabSize; + int BookMarkCount; + DWORD CurState; + UINT CodePage; + DWORD Reserved[5]; +}; + +struct EditorBookMarks +{ + long *Line; + long *Cursor; + long *ScreenLine; + long *LeftPos; + DWORD Reserved[4]; +}; + +struct EditorSetPosition +{ + int CurLine; + int CurPos; + int CurTabPos; + int TopScreenLine; + int LeftPos; + int Overtype; +}; + + +struct EditorSelect +{ + int BlockType; + int BlockStartLine; + int BlockStartPos; + int BlockWidth; + int BlockHeight; +}; + + +struct EditorConvertPos +{ + int StringNumber; + int SrcPos; + int DestPos; +}; + + +enum EDITORCOLORFLAGS{ + ECF_TAB1 = 0x10000, +}; + +struct EditorColor +{ + int StringNumber; + int ColorItem; + int StartPos; + int EndPos; + int Color; +}; + +struct EditorSaveFile +{ + const wchar_t *FileName; + const wchar_t *FileEOL; + UINT CodePage; +}; + +typedef int (WINAPI *FARAPIEDITORCONTROL)( + int Command, + void *Param +); + +enum INPUTBOXFLAGS{ + FIB_ENABLEEMPTY = 0x00000001, + FIB_PASSWORD = 0x00000002, + FIB_EXPANDENV = 0x00000004, + FIB_NOUSELASTHISTORY = 0x00000008, + FIB_BUTTONS = 0x00000010, + FIB_NOAMPERSAND = 0x00000020, +}; + +typedef int (WINAPI *FARAPIINPUTBOX)( + const wchar_t *Title, + const wchar_t *SubTitle, + const wchar_t *HistoryName, + const wchar_t *SrcText, + wchar_t *DestText, + int DestLength, + const wchar_t *HelpTopic, + DWORD Flags +); + +typedef int (WINAPI *FARAPIPLUGINSCONTROL)( + HANDLE hHandle, + int Command, + int Param1, + LONG_PTR Param2 +); + +typedef int (WINAPI *FARAPIFILEFILTERCONTROL)( + HANDLE hHandle, + int Command, + int Param1, + LONG_PTR Param2 +); + +typedef int (WINAPI *FARAPIREGEXPCONTROL)( + HANDLE hHandle, + int Command, + LONG_PTR Param +); + +// +typedef int (WINAPIV *FARSTDSPRINTF)(wchar_t *Buffer,const wchar_t *Format,...); +typedef int (WINAPIV *FARSTDSNPRINTF)(wchar_t *Buffer,size_t Sizebuf,const wchar_t *Format,...); +typedef int (WINAPIV *FARSTDSSCANF)(const wchar_t *Buffer, const wchar_t *Format,...); +// +typedef void (WINAPI *FARSTDQSORT)(void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *)); +typedef void (WINAPI *FARSTDQSORTEX)(void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *,void *userparam),void *userparam); +typedef void *(WINAPI *FARSTDBSEARCH)(const void *key, const void *base, size_t nelem, size_t width, int (__cdecl *fcmp)(const void *, const void *)); +typedef int (WINAPI *FARSTDGETFILEOWNER)(const wchar_t *Computer,const wchar_t *Name,wchar_t *Owner,int Size); +typedef int (WINAPI *FARSTDGETNUMBEROFLINKS)(const wchar_t *Name); +typedef int (WINAPI *FARSTDATOI)(const wchar_t *s); +typedef __int64 (WINAPI *FARSTDATOI64)(const wchar_t *s); +typedef wchar_t *(WINAPI *FARSTDITOA64)(__int64 value, wchar_t *string, int radix); +typedef wchar_t *(WINAPI *FARSTDITOA)(int value, wchar_t *string, int radix); +typedef wchar_t *(WINAPI *FARSTDLTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDRTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDTRUNCSTR)(wchar_t *Str,int MaxLength); +typedef wchar_t *(WINAPI *FARSTDTRUNCPATHSTR)(wchar_t *Str,int MaxLength); +typedef wchar_t *(WINAPI *FARSTDQUOTESPACEONLY)(wchar_t *Str); +typedef const wchar_t* (WINAPI *FARSTDPOINTTONAME)(const wchar_t *Path); +typedef int (WINAPI *FARSTDGETPATHROOT)(const wchar_t *Path,wchar_t *Root, int DestSize); +typedef BOOL (WINAPI *FARSTDADDENDSLASH)(wchar_t *Path); +typedef int (WINAPI *FARSTDCOPYTOCLIPBOARD)(const wchar_t *Data); +typedef wchar_t *(WINAPI *FARSTDPASTEFROMCLIPBOARD)(void); +typedef int (WINAPI *FARSTDINPUTRECORDTOKEY)(const INPUT_RECORD *r); +typedef int (WINAPI *FARSTDLOCALISLOWER)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISUPPER)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISALPHA)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISALPHANUM)(wchar_t Ch); +typedef wchar_t (WINAPI *FARSTDLOCALUPPER)(wchar_t LowerChar); +typedef wchar_t (WINAPI *FARSTDLOCALLOWER)(wchar_t UpperChar); +typedef void (WINAPI *FARSTDLOCALUPPERBUF)(wchar_t *Buf,int Length); +typedef void (WINAPI *FARSTDLOCALLOWERBUF)(wchar_t *Buf,int Length); +typedef void (WINAPI *FARSTDLOCALSTRUPR)(wchar_t *s1); +typedef void (WINAPI *FARSTDLOCALSTRLWR)(wchar_t *s1); +typedef int (WINAPI *FARSTDLOCALSTRICMP)(const wchar_t *s1,const wchar_t *s2); +typedef int (WINAPI *FARSTDLOCALSTRNICMP)(const wchar_t *s1,const wchar_t *s2,int n); + +enum PROCESSNAME_FLAGS{ + PN_CMPNAME = 0x00000000UL, + PN_CMPNAMELIST = 0x00010000UL, + PN_GENERATENAME = 0x00020000UL, + PN_SKIPPATH = 0x01000000UL, +}; + +typedef int (WINAPI *FARSTDPROCESSNAME)(const wchar_t *param1, wchar_t *param2, DWORD size, DWORD flags); + +typedef void (WINAPI *FARSTDUNQUOTE)(wchar_t *Str); + +enum XLATMODE{ + XLAT_SWITCHKEYBLAYOUT = 0x00000001UL, + XLAT_SWITCHKEYBBEEP = 0x00000002UL, +}; + +typedef size_t (WINAPI *FARSTDKEYTOKEYNAME)(int Key,wchar_t *KeyText,size_t Size); + +typedef wchar_t* (WINAPI *FARSTDXLAT)(wchar_t *Line,int StartPos,int EndPos,DWORD Flags); + +typedef int (WINAPI *FARSTDKEYNAMETOKEY)(const wchar_t *Name); + +typedef int (WINAPI *FRSUSERFUNC)( + const struct FAR_FIND_DATA *FData, + const wchar_t *FullName, + void *Param +); + +enum FRSMODE{ + FRS_RETUPDIR = 0x01, + FRS_RECUR = 0x02, + FRS_SCANSYMLINK = 0x04, +}; + +typedef void (WINAPI *FARSTDRECURSIVESEARCH)(const wchar_t *InitDir,const wchar_t *Mask,FRSUSERFUNC Func,DWORD Flags,void *Param); +typedef wchar_t* (WINAPI *FARSTDMKTEMP)(wchar_t *Dest, DWORD size, const wchar_t *Prefix); +typedef void (WINAPI *FARSTDDELETEBUFFER)(void *Buffer); + +enum MKLINKOP{ + FLINK_HARDLINK = 1, + FLINK_JUNCTION = 2, + FLINK_VOLMOUNT = 3, + FLINK_SYMLINKFILE = 4, + FLINK_SYMLINKDIR = 5, + + FLINK_SHOWERRMSG = 0x10000, + FLINK_DONOTUPDATEPANEL = 0x20000, +}; +typedef int (WINAPI *FARSTDMKLINK)(const wchar_t *Src,const wchar_t *Dest,DWORD Flags); +typedef int (WINAPI *FARGETREPARSEPOINTINFO)(const wchar_t *Src, wchar_t *Dest,int DestSize); + +enum CONVERTPATHMODES +{ + CPM_FULL, + CPM_REAL, +}; + +typedef int (WINAPI *FARCONVERTPATH)(CONVERTPATHMODES Mode, const wchar_t *Src, wchar_t *Dest, int DestSize); + +typedef struct FarStandardFunctions +{ + int StructSize; + + FARSTDATOI atoi; + FARSTDATOI64 atoi64; + FARSTDITOA itoa; + FARSTDITOA64 itoa64; + // + FARSTDSPRINTF sprintf; + FARSTDSSCANF sscanf; + // + FARSTDQSORT qsort; + FARSTDBSEARCH bsearch; + FARSTDQSORTEX qsortex; + // + FARSTDSNPRINTF snprintf; + // + + DWORD_PTR Reserved[8]; + + FARSTDLOCALISLOWER LIsLower; + FARSTDLOCALISUPPER LIsUpper; + FARSTDLOCALISALPHA LIsAlpha; + FARSTDLOCALISALPHANUM LIsAlphanum; + FARSTDLOCALUPPER LUpper; + FARSTDLOCALLOWER LLower; + FARSTDLOCALUPPERBUF LUpperBuf; + FARSTDLOCALLOWERBUF LLowerBuf; + FARSTDLOCALSTRUPR LStrupr; + FARSTDLOCALSTRLWR LStrlwr; + FARSTDLOCALSTRICMP LStricmp; + FARSTDLOCALSTRNICMP LStrnicmp; + + FARSTDUNQUOTE Unquote; + FARSTDLTRIM LTrim; + FARSTDRTRIM RTrim; + FARSTDTRIM Trim; + FARSTDTRUNCSTR TruncStr; + FARSTDTRUNCPATHSTR TruncPathStr; + FARSTDQUOTESPACEONLY QuoteSpaceOnly; + FARSTDPOINTTONAME PointToName; + FARSTDGETPATHROOT GetPathRoot; + FARSTDADDENDSLASH AddEndSlash; + FARSTDCOPYTOCLIPBOARD CopyToClipboard; + FARSTDPASTEFROMCLIPBOARD PasteFromClipboard; + FARSTDKEYTOKEYNAME FarKeyToName; + FARSTDKEYNAMETOKEY FarNameToKey; + FARSTDINPUTRECORDTOKEY FarInputRecordToKey; + FARSTDXLAT XLat; + FARSTDGETFILEOWNER GetFileOwner; + FARSTDGETNUMBEROFLINKS GetNumberOfLinks; + FARSTDRECURSIVESEARCH FarRecursiveSearch; + FARSTDMKTEMP MkTemp; + FARSTDDELETEBUFFER DeleteBuffer; + FARSTDPROCESSNAME ProcessName; + FARSTDMKLINK MkLink; + FARCONVERTPATH ConvertPath; + FARGETREPARSEPOINTINFO GetReparsePointInfo; +} FARSTANDARDFUNCTIONS; + +struct PluginStartupInfo +{ + int StructSize; + const wchar_t *ModuleName; + INT_PTR ModuleNumber; + const wchar_t *RootKey; + FARAPIMENU Menu; + FARAPIMESSAGE Message; + FARAPIGETMSG GetMsg; + FARAPICONTROL Control; + FARAPISAVESCREEN SaveScreen; + FARAPIRESTORESCREEN RestoreScreen; + FARAPIGETDIRLIST GetDirList; + FARAPIGETPLUGINDIRLIST GetPluginDirList; + FARAPIFREEDIRLIST FreeDirList; + FARAPIFREEPLUGINDIRLIST FreePluginDirList; + FARAPIVIEWER Viewer; + FARAPIEDITOR Editor; + FARAPICMPNAME CmpName; + FARAPITEXT Text; + FARAPIEDITORCONTROL EditorControl; + + FARSTANDARDFUNCTIONS *FSF; + + FARAPISHOWHELP ShowHelp; + FARAPIADVCONTROL AdvControl; + FARAPIINPUTBOX InputBox; + FARAPIDIALOGINIT DialogInit; + FARAPIDIALOGRUN DialogRun; + FARAPIDIALOGFREE DialogFree; + + FARAPISENDDLGMESSAGE SendDlgMessage; + FARAPIDEFDLGPROC DefDlgProc; + DWORD_PTR Reserved; + FARAPIVIEWERCONTROL ViewerControl; + FARAPIPLUGINSCONTROL PluginsControl; + FARAPIFILEFILTERCONTROL FileFilterControl; + FARAPIREGEXPCONTROL RegExpControl; +}; + + +enum PLUGIN_FLAGS { + PF_PRELOAD = 0x0001, + PF_DISABLEPANELS = 0x0002, + PF_EDITOR = 0x0004, + PF_VIEWER = 0x0008, + PF_FULLCMDLINE = 0x0010, + PF_DIALOG = 0x0020, +}; + +struct PluginInfo +{ + int StructSize; + DWORD Flags; + const wchar_t * const *DiskMenuStrings; + int *DiskMenuNumbers; + int DiskMenuStringsNumber; + const wchar_t * const *PluginMenuStrings; + int PluginMenuStringsNumber; + const wchar_t * const *PluginConfigStrings; + int PluginConfigStringsNumber; + const wchar_t *CommandPrefix; + DWORD Reserved; +}; + + + +struct InfoPanelLine +{ + const wchar_t *Text; + const wchar_t *Data; + int Separator; +}; + +struct PanelMode +{ + wchar_t *ColumnTypes; + wchar_t *ColumnWidths; + wchar_t **ColumnTitles; + int FullScreen; + int DetailedStatus; + int AlignExtensions; + int CaseConversion; + wchar_t *StatusColumnTypes; + wchar_t *StatusColumnWidths; + DWORD Reserved[2]; +}; + + +enum OPENPLUGININFO_FLAGS { + OPIF_USEFILTER = 0x00000001, + OPIF_USESORTGROUPS = 0x00000002, + OPIF_USEHIGHLIGHTING = 0x00000004, + OPIF_ADDDOTS = 0x00000008, + OPIF_RAWSELECTION = 0x00000010, + OPIF_REALNAMES = 0x00000020, + OPIF_SHOWNAMESONLY = 0x00000040, + OPIF_SHOWRIGHTALIGNNAMES = 0x00000080, + OPIF_SHOWPRESERVECASE = 0x00000100, + OPIF_FINDFOLDERS = 0x00000200, + OPIF_COMPAREFATTIME = 0x00000400, + OPIF_EXTERNALGET = 0x00000800, + OPIF_EXTERNALPUT = 0x00001000, + OPIF_EXTERNALDELETE = 0x00002000, + OPIF_EXTERNALMKDIR = 0x00004000, + OPIF_USEATTRHIGHLIGHTING = 0x00008000, +}; + + +enum OPENPLUGININFO_SORTMODES { + SM_DEFAULT, + SM_UNSORTED, + SM_NAME, + SM_EXT, + SM_MTIME, + SM_CTIME, + SM_ATIME, + SM_SIZE, + SM_DESCR, + SM_OWNER, + SM_COMPRESSEDSIZE, + SM_NUMLINKS +}; + + +struct KeyBarTitles +{ + wchar_t *Titles[12]; + wchar_t *CtrlTitles[12]; + wchar_t *AltTitles[12]; + wchar_t *ShiftTitles[12]; + + wchar_t *CtrlShiftTitles[12]; + wchar_t *AltShiftTitles[12]; + wchar_t *CtrlAltTitles[12]; +}; + + +enum OPERATION_MODES { + OPM_SILENT =0x0001, + OPM_FIND =0x0002, + OPM_VIEW =0x0004, + OPM_EDIT =0x0008, + OPM_TOPLEVEL =0x0010, + OPM_DESCR =0x0020, + OPM_QUICKVIEW =0x0040, +}; + +struct OpenPluginInfo +{ + int StructSize; + DWORD Flags; + const wchar_t *HostFile; + const wchar_t *CurDir; + const wchar_t *Format; + const wchar_t *PanelTitle; + const struct InfoPanelLine *InfoLines; + int InfoLinesNumber; + const wchar_t * const *DescrFiles; + int DescrFilesNumber; + const struct PanelMode *PanelModesArray; + int PanelModesNumber; + int StartPanelMode; + int StartSortMode; + int StartSortOrder; + const struct KeyBarTitles *KeyBar; + const wchar_t *ShortcutData; + long Reserved; +}; + +enum OPENPLUGIN_OPENFROM{ + OPEN_DISKMENU = 0, + OPEN_PLUGINSMENU = 1, + OPEN_FINDLIST = 2, + OPEN_SHORTCUT = 3, + OPEN_COMMANDLINE = 4, + OPEN_EDITOR = 5, + OPEN_VIEWER = 6, + OPEN_FILEPANEL = 7, + OPEN_DIALOG = 8, + OPEN_ANALYSE = 9, + OPEN_FROMMACRO = 0x10000, +}; + +enum FAR_PKF_FLAGS { + PKF_CONTROL = 0x00000001, + PKF_ALT = 0x00000002, + PKF_SHIFT = 0x00000004, + PKF_PREPROCESS = 0x00080000, // for "Key", function ProcessKey() +}; + +enum FAR_EVENTS { + FE_CHANGEVIEWMODE =0, + FE_REDRAW =1, + FE_IDLE =2, + FE_CLOSE =3, + FE_BREAK =4, + FE_COMMAND =5, + + FE_GOTFOCUS =6, + FE_KILLFOCUS =7, +}; + +enum FAR_PLUGINS_CONTROL_COMMANDS { + PCTL_LOADPLUGIN = 0, + PCTL_UNLOADPLUGIN, +}; + +enum FAR_PLUGIN_LOAD_TYPE { + PLT_PATH = 0, +}; + +enum FAR_FILE_FILTER_CONTROL_COMMANDS { + FFCTL_CREATEFILEFILTER = 0, + FFCTL_FREEFILEFILTER, + FFCTL_OPENFILTERSMENU, + FFCTL_STARTINGTOFILTER, + FFCTL_ISFILEINFILTER, +}; + +enum FAR_FILE_FILTER_TYPE +{ + FFT_PANEL = 0, + FFT_FINDFILE, + FFT_COPY, + FFT_SELECT, +}; + +enum FAR_REGEXP_CONTROL_COMMANDS { + RECTL_CREATE=0, + RECTL_FREE, + RECTL_COMPILE, + RECTL_OPTIMIZE, + RECTL_MATCHEX, + RECTL_SEARCHEX, + RECTL_BRACKETSCOUNT +}; + +struct RegExpMatch +{ + int start,end; +}; + +struct RegExpSearch +{ + const wchar_t* Text; + int Position; + int Length; + struct RegExpMatch* Match; + int Count; + void* Reserved; +}; + + +#if defined(__BORLANDC__) || defined(_MSC_VER) || defined(__GNUC__) || defined(__WATCOMC__) +#ifdef __cplusplus +extern "C"{ +#endif +// Exported Functions + +void WINAPI _export ClosePluginW(HANDLE hPlugin); +int WINAPI _export CompareW(HANDLE hPlugin,const struct PluginPanelItem *Item1,const struct PluginPanelItem *Item2,unsigned int Mode); +int WINAPI _export ConfigureW(int ItemNumber); +int WINAPI _export DeleteFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); +void WINAPI _export ExitFARW(void); +void WINAPI _export FreeFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); +void WINAPI _export FreeVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); +int WINAPI _export GetFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,const wchar_t **DestPath,int OpMode); +int WINAPI _export GetFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,int OpMode); +int WINAPI _export GetMinFarVersionW(void); +void WINAPI _export GetOpenPluginInfoW(HANDLE hPlugin,struct OpenPluginInfo *Info); +void WINAPI _export GetPluginInfoW(struct PluginInfo *Info); +int WINAPI _export GetVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,const wchar_t *Path); +int WINAPI _export MakeDirectoryW(HANDLE hPlugin,const wchar_t **Name,int OpMode); +HANDLE WINAPI _export OpenFilePluginW(const wchar_t *Name,const unsigned char *Data,int DataSize,int OpMode); +HANDLE WINAPI _export OpenPluginW(int OpenFrom,INT_PTR Item); +int WINAPI _export ProcessDialogEventW(int Event,void *Param); +int WINAPI _export ProcessEditorEventW(int Event,void *Param); +int WINAPI _export ProcessEditorInputW(const INPUT_RECORD *Rec); +int WINAPI _export ProcessEventW(HANDLE hPlugin,int Event,void *Param); +int WINAPI _export ProcessHostFileW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); +int WINAPI _export ProcessKeyW(HANDLE hPlugin,int Key,unsigned int ControlState); +int WINAPI _export ProcessSynchroEventW(int Event,void *Param); +int WINAPI _export ProcessViewerEventW(int Event,void *Param); +int WINAPI _export PutFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,int OpMode); +int WINAPI _export SetDirectoryW(HANDLE hPlugin,const wchar_t *Dir,int OpMode); +int WINAPI _export SetFindListW(HANDLE hPlugin,const struct PluginPanelItem *PanelItem,int ItemsNumber); +void WINAPI _export SetStartupInfoW(const struct PluginStartupInfo *Info); + +#ifdef __cplusplus +}; +#endif +#endif + +#ifndef _WIN64 +#if defined(__BORLANDC__) + #pragma option -a. +#elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) || defined(__LCC__) + #pragma pack() +#else + #pragma pack(pop) +#endif +#endif + +#endif /* RC_INVOKED */ + +#endif /* __PLUGIN_HPP__ */ diff --git a/ClipCopy/src/plugin.v3.hpp b/ClipCopy/src/plugin.v3.hpp new file mode 100644 index 00000000..ea84974b --- /dev/null +++ b/ClipCopy/src/plugin.v3.hpp @@ -0,0 +1,2646 @@ +#pragma once +#ifndef __PLUGIN_HPP__ +#define __PLUGIN_HPP__ + +/* + plugin.hpp + + Plugin API for Far Manager 3.0 build 3000 +*/ + +/* +Copyright © 1996 Eugene Roshal +Copyright © 2000 Far Group +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +EXCEPTION: +Far Manager plugins that use this header file can be distributed under any +other possible license with no implications from the above license on them. +*/ + +#define FARMANAGERVERSION_MAJOR 3 +#define FARMANAGERVERSION_MINOR 0 +#define FARMANAGERVERSION_REVISION 0 +#define FARMANAGERVERSION_BUILD 3000 +#define FARMANAGERVERSION_STAGE VS_RELEASE + +#ifndef RC_INVOKED + +#include +#include + +#undef DefDlgProc + +#define FARMACRO_KEY_EVENT (KEY_EVENT|0x8000) + + +#define CP_UNICODE ((uintptr_t)1200) +#define CP_REVERSEBOM ((uintptr_t)1201) +#define CP_DEFAULT ((uintptr_t)-1) +#define CP_REDETECT ((uintptr_t)-2) + +typedef unsigned __int64 FARCOLORFLAGS; +static const FARCOLORFLAGS + FCF_FG_4BIT = 0x0000000000000001ULL, + FCF_BG_4BIT = 0x0000000000000002ULL, + FCF_4BITMASK = 0x0000000000000003ULL, // FCF_FG_4BIT|FCF_BG_4BIT + + FCF_EXTENDEDFLAGS = 0xFFFFFFFFFFFFFFFCULL, // ~FCF_4BITMASK + + FCF_FG_BOLD = 0x1000000000000000ULL, + FCF_FG_ITALIC = 0x2000000000000000ULL, + FCF_FG_UNDERLINE = 0x4000000000000000ULL, + FCF_STYLEMASK = 0x7000000000000000ULL, // FCF_FG_BOLD|FCF_FG_ITALIC|FCF_FG_UNDERLINE + + FCF_NONE = 0; + +struct FarColor +{ + FARCOLORFLAGS Flags; + COLORREF ForegroundColor; + COLORREF BackgroundColor; + void* Reserved; +}; + +#define INDEXMASK 0x0000000f +#define COLORMASK 0x00ffffff +#define ALPHAMASK 0xff000000 + +#define INDEXVALUE(x) ((x)&INDEXMASK) +#define COLORVALUE(x) ((x)&COLORMASK) +#define ALPHAVALUE(x) ((x)&ALPHAMASK) + +#define IS_OPAQUE(x) (ALPHAVALUE(x)==ALPHAMASK) +#define IS_TRANSPARENT(x) (!ALPHAVALUE(x)) +#define MAKE_OPAQUE(x) (x|=ALPHAMASK) +#define MAKE_TRANSPARENT(x) (x&=COLORMASK) + +typedef unsigned __int64 COLORDIALOGFLAGS; +static const COLORDIALOGFLAGS + CDF_NONE = 0; + +typedef BOOL (WINAPI *FARAPICOLORDIALOG)( + const GUID* PluginId, + COLORDIALOGFLAGS Flags, + struct FarColor *Color +); + +typedef unsigned __int64 FARMESSAGEFLAGS; +static const FARMESSAGEFLAGS + FMSG_WARNING = 0x0000000000000001ULL, + FMSG_ERRORTYPE = 0x0000000000000002ULL, + FMSG_KEEPBACKGROUND = 0x0000000000000004ULL, + FMSG_LEFTALIGN = 0x0000000000000008ULL, + FMSG_ALLINONE = 0x0000000000000010ULL, + FMSG_MB_OK = 0x0000000000010000ULL, + FMSG_MB_OKCANCEL = 0x0000000000020000ULL, + FMSG_MB_ABORTRETRYIGNORE = 0x0000000000030000ULL, + FMSG_MB_YESNO = 0x0000000000040000ULL, + FMSG_MB_YESNOCANCEL = 0x0000000000050000ULL, + FMSG_MB_RETRYCANCEL = 0x0000000000060000ULL, + FMSG_NONE = 0; + +typedef intptr_t (WINAPI *FARAPIMESSAGE)( + const GUID* PluginId, + const GUID* Id, + FARMESSAGEFLAGS Flags, + const wchar_t *HelpTopic, + const wchar_t * const *Items, + size_t ItemsNumber, + intptr_t ButtonsNumber +); + +enum FARDIALOGITEMTYPES +{ + DI_TEXT = 0, + DI_VTEXT = 1, + DI_SINGLEBOX = 2, + DI_DOUBLEBOX = 3, + DI_EDIT = 4, + DI_PSWEDIT = 5, + DI_FIXEDIT = 6, + DI_BUTTON = 7, + DI_CHECKBOX = 8, + DI_RADIOBUTTON = 9, + DI_COMBOBOX = 10, + DI_LISTBOX = 11, + + DI_USERCONTROL =255, +}; + +/* + Check diagol element type has inputstring? + (DI_EDIT, DI_FIXEDIT, DI_PSWEDIT, etc) +*/ +static __inline BOOL IsEdit(enum FARDIALOGITEMTYPES Type) +{ + switch (Type) + { + case DI_EDIT: + case DI_FIXEDIT: + case DI_PSWEDIT: + case DI_COMBOBOX: + return TRUE; + default: + return FALSE; + } +} + +typedef unsigned __int64 FARDIALOGITEMFLAGS; +static const FARDIALOGITEMFLAGS + DIF_BOXCOLOR = 0x0000000000000200ULL, + DIF_GROUP = 0x0000000000000400ULL, + DIF_LEFTTEXT = 0x0000000000000800ULL, + DIF_MOVESELECT = 0x0000000000001000ULL, + DIF_SHOWAMPERSAND = 0x0000000000002000ULL, + DIF_CENTERGROUP = 0x0000000000004000ULL, + DIF_NOBRACKETS = 0x0000000000008000ULL, + DIF_MANUALADDHISTORY = 0x0000000000008000ULL, + DIF_SEPARATOR = 0x0000000000010000ULL, + DIF_SEPARATOR2 = 0x0000000000020000ULL, + DIF_EDITOR = 0x0000000000020000ULL, + DIF_LISTNOAMPERSAND = 0x0000000000020000ULL, + DIF_LISTNOBOX = 0x0000000000040000ULL, + DIF_HISTORY = 0x0000000000040000ULL, + DIF_BTNNOCLOSE = 0x0000000000040000ULL, + DIF_CENTERTEXT = 0x0000000000040000ULL, + DIF_SETSHIELD = 0x0000000000080000ULL, + DIF_EDITEXPAND = 0x0000000000080000ULL, + DIF_DROPDOWNLIST = 0x0000000000100000ULL, + DIF_USELASTHISTORY = 0x0000000000200000ULL, + DIF_MASKEDIT = 0x0000000000400000ULL, + DIF_LISTTRACKMOUSE = 0x0000000000400000ULL, + DIF_LISTTRACKMOUSEINFOCUS = 0x0000000000800000ULL, + DIF_SELECTONENTRY = 0x0000000000800000ULL, + DIF_3STATE = 0x0000000000800000ULL, + DIF_EDITPATH = 0x0000000001000000ULL, + DIF_LISTWRAPMODE = 0x0000000001000000ULL, + DIF_NOAUTOCOMPLETE = 0x0000000002000000ULL, + DIF_LISTAUTOHIGHLIGHT = 0x0000000002000000ULL, + DIF_LISTNOCLOSE = 0x0000000004000000ULL, + DIF_EDITPATHEXEC = 0x0000000004000000ULL, + DIF_HIDDEN = 0x0000000010000000ULL, + DIF_READONLY = 0x0000000020000000ULL, + DIF_NOFOCUS = 0x0000000040000000ULL, + DIF_DISABLE = 0x0000000080000000ULL, + DIF_DEFAULTBUTTON = 0x0000000100000000ULL, + DIF_FOCUS = 0x0000000200000000ULL, + DIF_NONE = 0; + +enum FARMESSAGE +{ + DM_FIRST = 0, + DM_CLOSE = 1, + DM_ENABLE = 2, + DM_ENABLEREDRAW = 3, + DM_GETDLGDATA = 4, + DM_GETDLGITEM = 5, + DM_GETDLGRECT = 6, + DM_GETTEXT = 7, + DM_KEY = 9, + DM_MOVEDIALOG = 10, + DM_SETDLGDATA = 11, + DM_SETDLGITEM = 12, + DM_SETFOCUS = 13, + DM_REDRAW = 14, + DM_SETTEXT = 15, + DM_SETMAXTEXTLENGTH = 16, + DM_SHOWDIALOG = 17, + DM_GETFOCUS = 18, + DM_GETCURSORPOS = 19, + DM_SETCURSORPOS = 20, + DM_SETTEXTPTR = 22, + DM_SHOWITEM = 23, + DM_ADDHISTORY = 24, + + DM_GETCHECK = 25, + DM_SETCHECK = 26, + DM_SET3STATE = 27, + + DM_LISTSORT = 28, + DM_LISTGETITEM = 29, + DM_LISTGETCURPOS = 30, + DM_LISTSETCURPOS = 31, + DM_LISTDELETE = 32, + DM_LISTADD = 33, + DM_LISTADDSTR = 34, + DM_LISTUPDATE = 35, + DM_LISTINSERT = 36, + DM_LISTFINDSTRING = 37, + DM_LISTINFO = 38, + DM_LISTGETDATA = 39, + DM_LISTSETDATA = 40, + DM_LISTSETTITLES = 41, + DM_LISTGETTITLES = 42, + + DM_RESIZEDIALOG = 43, + DM_SETITEMPOSITION = 44, + + DM_GETDROPDOWNOPENED = 45, + DM_SETDROPDOWNOPENED = 46, + + DM_SETHISTORY = 47, + + DM_GETITEMPOSITION = 48, + DM_SETMOUSEEVENTNOTIFY = 49, + + DM_EDITUNCHANGEDFLAG = 50, + + DM_GETITEMDATA = 51, + DM_SETITEMDATA = 52, + + DM_LISTSET = 53, + + DM_GETCURSORSIZE = 54, + DM_SETCURSORSIZE = 55, + + DM_LISTGETDATASIZE = 56, + + DM_GETSELECTION = 57, + DM_SETSELECTION = 58, + + DM_GETEDITPOSITION = 59, + DM_SETEDITPOSITION = 60, + + DM_SETCOMBOBOXEVENT = 61, + DM_GETCOMBOBOXEVENT = 62, + + DM_GETCONSTTEXTPTR = 63, + DM_GETDLGITEMSHORT = 64, + DM_SETDLGITEMSHORT = 65, + + DM_GETDIALOGINFO = 66, + + DN_FIRST = 4096, + DN_BTNCLICK = 4097, + DN_CTLCOLORDIALOG = 4098, + DN_CTLCOLORDLGITEM = 4099, + DN_CTLCOLORDLGLIST = 4100, + DN_DRAWDIALOG = 4101, + DN_DRAWDLGITEM = 4102, + DN_EDITCHANGE = 4103, + DN_ENTERIDLE = 4104, + DN_GOTFOCUS = 4105, + DN_HELP = 4106, + DN_HOTKEY = 4107, + DN_INITDIALOG = 4108, + DN_KILLFOCUS = 4109, + DN_LISTCHANGE = 4110, + DN_DRAGGED = 4111, + DN_RESIZECONSOLE = 4112, + DN_DRAWDIALOGDONE = 4113, + DN_LISTHOTKEY = 4114, + DN_INPUT = 4115, + DN_CONTROLINPUT = 4116, + DN_CLOSE = 4117, + DN_GETVALUE = 4118, + + DM_USER = 0x4000, + +}; + +enum FARCHECKEDSTATE +{ + BSTATE_UNCHECKED = 0, + BSTATE_CHECKED = 1, + BSTATE_3STATE = 2, + BSTATE_TOGGLE = 3, +}; + +enum FARCOMBOBOXEVENTTYPE +{ + CBET_KEY = 0x00000001, + CBET_MOUSE = 0x00000002, +}; + +typedef unsigned __int64 LISTITEMFLAGS; +static const LISTITEMFLAGS + LIF_SELECTED = 0x0000000000010000ULL, + LIF_CHECKED = 0x0000000000020000ULL, + LIF_SEPARATOR = 0x0000000000040000ULL, + LIF_DISABLE = 0x0000000000080000ULL, + LIF_GRAYED = 0x0000000000100000ULL, + LIF_HIDDEN = 0x0000000000200000ULL, + LIF_DELETEUSERDATA = 0x0000000080000000ULL, + LIF_NONE = 0; + + + +struct FarListItem +{ + LISTITEMFLAGS Flags; + const wchar_t *Text; + intptr_t Reserved[2]; +}; + +struct FarListUpdate +{ + size_t StructSize; + intptr_t Index; + struct FarListItem Item; +}; + +struct FarListInsert +{ + size_t StructSize; + intptr_t Index; + struct FarListItem Item; +}; + +struct FarListGetItem +{ + size_t StructSize; + intptr_t ItemIndex; + struct FarListItem Item; +}; + +struct FarListPos +{ + size_t StructSize; + intptr_t SelectPos; + intptr_t TopPos; +}; + +typedef unsigned __int64 FARLISTFINDFLAGS; +static const FARLISTFINDFLAGS + LIFIND_EXACTMATCH = 0x0000000000000001ULL, + LIFIND_NONE = 0; + + +struct FarListFind +{ + size_t StructSize; + intptr_t StartIndex; + const wchar_t *Pattern; + FARLISTFINDFLAGS Flags; +}; + +struct FarListDelete +{ + size_t StructSize; + intptr_t StartIndex; + intptr_t Count; +}; + +typedef unsigned __int64 FARLISTINFOFLAGS; +static const FARLISTINFOFLAGS + LINFO_SHOWNOBOX = 0x0000000000000400ULL, + LINFO_AUTOHIGHLIGHT = 0x0000000000000800ULL, + LINFO_REVERSEHIGHLIGHT = 0x0000000000001000ULL, + LINFO_WRAPMODE = 0x0000000000008000ULL, + LINFO_SHOWAMPERSAND = 0x0000000000010000ULL, + LINFO_NONE = 0; + +struct FarListInfo +{ + size_t StructSize; + FARLISTINFOFLAGS Flags; + size_t ItemsNumber; + intptr_t SelectPos; + intptr_t TopPos; + intptr_t MaxHeight; + intptr_t MaxLength; +}; + +struct FarListItemData +{ + size_t StructSize; + intptr_t Index; + size_t DataSize; + void *Data; +}; + +struct FarList +{ + size_t StructSize; + size_t ItemsNumber; + struct FarListItem *Items; +}; + +struct FarListTitles +{ + size_t StructSize; + size_t TitleSize; + const wchar_t *Title; + size_t BottomSize; + const wchar_t *Bottom; +}; + +struct FarDialogItemColors +{ + size_t StructSize; + unsigned __int64 Flags; + size_t ColorsCount; + struct FarColor* Colors; +}; + +struct FAR_CHAR_INFO +{ + WCHAR Char; + struct FarColor Attributes; +}; + +struct FarDialogItem +{ + enum FARDIALOGITEMTYPES Type; + intptr_t X1,Y1,X2,Y2; + union + { + intptr_t Selected; + struct FarList *ListItems; + struct FAR_CHAR_INFO *VBuf; + intptr_t Reserved0; + } +#ifndef __cplusplus + Param +#endif + ; + const wchar_t *History; + const wchar_t *Mask; + FARDIALOGITEMFLAGS Flags; + const wchar_t *Data; + size_t MaxLength; // terminate 0 not included (if == 0 string size is unlimited) + intptr_t UserData; + intptr_t Reserved[2]; +}; + +struct FarDialogItemData +{ + size_t StructSize; + size_t PtrLength; + wchar_t *PtrData; +}; + +struct FarDialogEvent +{ + size_t StructSize; + HANDLE hDlg; + intptr_t Msg; + intptr_t Param1; + void* Param2; + intptr_t Result; +}; + +struct OpenDlgPluginData +{ + size_t StructSize; + HANDLE hDlg; +}; + +struct DialogInfo +{ + size_t StructSize; + GUID Id; + GUID Owner; +}; + +struct FarGetDialogItem +{ + size_t StructSize; + size_t Size; + struct FarDialogItem* Item; +}; + +#define Dlg_RedrawDialog(Info,hDlg) Info.SendDlgMessage(hDlg,DM_REDRAW,0,0) + +#define Dlg_GetDlgData(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0) +#define Dlg_SetDlgData(Info,hDlg,Data) Info.SendDlgMessage(hDlg,DM_SETDLGDATA,0,(intptr_t)Data) + +#define Dlg_GetDlgItemData(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETITEMDATA,0,0) +#define Dlg_SetDlgItemData(Info,hDlg,ID,Data) Info.SendDlgMessage(hDlg,DM_SETITEMDATA,0,(intptr_t)Data) + +#define DlgItem_GetFocus(Info,hDlg) Info.SendDlgMessage(hDlg,DM_GETFOCUS,0,0) +#define DlgItem_SetFocus(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_SETFOCUS,ID,0) +#define DlgItem_Enable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,TRUE) +#define DlgItem_Disable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,FALSE) +#define DlgItem_IsEnable(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_ENABLE,ID,-1) +#define DlgItem_SetText(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,ID,(intptr_t)Str) + +#define DlgItem_GetCheck(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_GETCHECK,ID,0) +#define DlgItem_SetCheck(Info,hDlg,ID,State) Info.SendDlgMessage(hDlg,DM_SETCHECK,ID,State) + +#define DlgEdit_AddHistory(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_ADDHISTORY,ID,(intptr_t)Str) + +#define DlgList_AddString(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_LISTADDSTR,ID,(intptr_t)Str) +#define DlgList_GetCurPos(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,ID,0) +#define DlgList_SetCurPos(Info,hDlg,ID,NewPos) {struct FarListPos LPos={sizeof(FarListPos),NewPos,-1};Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,ID,(intptr_t)&LPos);} +#define DlgList_ClearList(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,0) +#define DlgList_DeleteItem(Info,hDlg,ID,Index) {struct FarListDelete FLDItem={sizeof(FarListDelete),Index,1}; Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,(intptr_t)&FLDItem);} +#define DlgList_SortUp(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,0) +#define DlgList_SortDown(Info,hDlg,ID) Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,1) +#define DlgList_GetItemData(Info,hDlg,ID,Index) Info.SendDlgMessage(hDlg,DM_LISTGETDATA,ID,Index) +#define DlgList_SetItemStrAsData(Info,hDlg,ID,Index,Str) {struct FarListItemData FLID{sizeof(FarListItemData),Index,0,Str,0}; Info.SendDlgMessage(hDlg,DM_LISTSETDATA,ID,(intptr_t)&FLID);} + +typedef unsigned __int64 FARDIALOGFLAGS; +static const FARDIALOGFLAGS + FDLG_WARNING = 0x0000000000000001ULL, + FDLG_SMALLDIALOG = 0x0000000000000002ULL, + FDLG_NODRAWSHADOW = 0x0000000000000004ULL, + FDLG_NODRAWPANEL = 0x0000000000000008ULL, + FDLG_KEEPCONSOLETITLE = 0x0000000000000010ULL, + FDLG_NONE = 0; + +typedef intptr_t(WINAPI *FARWINDOWPROC)( + HANDLE hDlg, + intptr_t Msg, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t(WINAPI *FARAPISENDDLGMESSAGE)( + HANDLE hDlg, + intptr_t Msg, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t(WINAPI *FARAPIDEFDLGPROC)( + HANDLE hDlg, + intptr_t Msg, + intptr_t Param1, + void* Param2 +); + +typedef HANDLE(WINAPI *FARAPIDIALOGINIT)( + const GUID* PluginId, + const GUID* Id, + intptr_t X1, + intptr_t Y1, + intptr_t X2, + intptr_t Y2, + const wchar_t *HelpTopic, + const struct FarDialogItem *Item, + size_t ItemsNumber, + intptr_t Reserved, + FARDIALOGFLAGS Flags, + FARWINDOWPROC DlgProc, + void* Param +); + +typedef intptr_t (WINAPI *FARAPIDIALOGRUN)( + HANDLE hDlg +); + +typedef void (WINAPI *FARAPIDIALOGFREE)( + HANDLE hDlg +); + +struct FarKey +{ + WORD VirtualKeyCode; + DWORD ControlKeyState; +}; + +typedef unsigned __int64 MENUITEMFLAGS; +static const MENUITEMFLAGS + MIF_SELECTED = 0x000000000010000ULL, + MIF_CHECKED = 0x000000000020000ULL, + MIF_SEPARATOR = 0x000000000040000ULL, + MIF_DISABLE = 0x000000000080000ULL, + MIF_GRAYED = 0x000000000100000ULL, + MIF_HIDDEN = 0x000000000200000ULL, + MIF_NONE = 0; + +struct FarMenuItem +{ + MENUITEMFLAGS Flags; + const wchar_t *Text; + struct FarKey AccelKey; + intptr_t UserData; + intptr_t Reserved[2]; +}; + +typedef unsigned __int64 FARMENUFLAGS; +static const FARMENUFLAGS + FMENU_SHOWAMPERSAND = 0x0000000000000001ULL, + FMENU_WRAPMODE = 0x0000000000000002ULL, + FMENU_AUTOHIGHLIGHT = 0x0000000000000004ULL, + FMENU_REVERSEAUTOHIGHLIGHT = 0x0000000000000008ULL, + FMENU_CHANGECONSOLETITLE = 0x0000000000000010ULL, + FMENU_NONE = 0; + +typedef intptr_t (WINAPI *FARAPIMENU)( + const GUID* PluginId, + const GUID* Id, + intptr_t X, + intptr_t Y, + intptr_t MaxHeight, + FARMENUFLAGS Flags, + const wchar_t *Title, + const wchar_t *Bottom, + const wchar_t *HelpTopic, + const struct FarKey *BreakKeys, + intptr_t *BreakCode, + const struct FarMenuItem *Item, + size_t ItemsNumber +); + + +typedef unsigned __int64 PLUGINPANELITEMFLAGS; +static const PLUGINPANELITEMFLAGS + PPIF_SELECTED = 0x0000000040000000ULL, + PPIF_PROCESSDESCR = 0x0000000080000000ULL, + PPIF_NONE = 0; + +struct FarPanelItemFreeInfo +{ + size_t StructSize; + HANDLE hPlugin; +}; + +typedef void (WINAPI *FARPANELITEMFREECALLBACK)(void* UserData, const struct FarPanelItemFreeInfo* Info); + +struct PluginPanelItem +{ + FILETIME CreationTime; + FILETIME LastAccessTime; + FILETIME LastWriteTime; + FILETIME ChangeTime; + unsigned __int64 FileSize; + unsigned __int64 AllocationSize; + const wchar_t *FileName; + const wchar_t *AlternateFileName; + const wchar_t *Description; + const wchar_t *Owner; + const wchar_t * const *CustomColumnData; + size_t CustomColumnNumber; + PLUGINPANELITEMFLAGS Flags; + struct + { + void* Data; + FARPANELITEMFREECALLBACK FreeData; + } UserData; + uintptr_t FileAttributes; + uintptr_t NumberOfLinks; + uintptr_t CRC32; + intptr_t Reserved[2]; +}; + +struct FarGetPluginPanelItem +{ + size_t StructSize; + size_t Size; + struct PluginPanelItem* Item; +}; + +typedef unsigned __int64 PANELINFOFLAGS; +static const PANELINFOFLAGS + PFLAGS_SHOWHIDDEN = 0x0000000000000001ULL, + PFLAGS_HIGHLIGHT = 0x0000000000000002ULL, + PFLAGS_REVERSESORTORDER = 0x0000000000000004ULL, + PFLAGS_USESORTGROUPS = 0x0000000000000008ULL, + PFLAGS_SELECTEDFIRST = 0x0000000000000010ULL, + PFLAGS_REALNAMES = 0x0000000000000020ULL, + PFLAGS_NUMERICSORT = 0x0000000000000040ULL, + PFLAGS_PANELLEFT = 0x0000000000000080ULL, + PFLAGS_DIRECTORIESFIRST = 0x0000000000000100ULL, + PFLAGS_USECRC32 = 0x0000000000000200ULL, + PFLAGS_CASESENSITIVESORT = 0x0000000000000400ULL, + PFLAGS_PLUGIN = 0x0000000000000800ULL, + PFLAGS_VISIBLE = 0x0000000000001000ULL, + PFLAGS_FOCUS = 0x0000000000002000ULL, + PFLAGS_ALTERNATIVENAMES = 0x0000000000004000ULL, + PFLAGS_SHORTCUT = 0x0000000000008000ULL, + PFLAGS_NONE = 0; + +enum PANELINFOTYPE +{ + PTYPE_FILEPANEL = 0, + PTYPE_TREEPANEL = 1, + PTYPE_QVIEWPANEL = 2, + PTYPE_INFOPANEL = 3, +}; + +enum OPENPANELINFO_SORTMODES +{ + SM_DEFAULT = 0, + SM_UNSORTED = 1, + SM_NAME = 2, + SM_EXT = 3, + SM_MTIME = 4, + SM_CTIME = 5, + SM_ATIME = 6, + SM_SIZE = 7, + SM_DESCR = 8, + SM_OWNER = 9, + SM_COMPRESSEDSIZE = 10, + SM_NUMLINKS = 11, + SM_NUMSTREAMS = 12, + SM_STREAMSSIZE = 13, + SM_FULLNAME = 14, + SM_CHTIME = 15, +}; + +struct PanelInfo +{ + size_t StructSize; + HANDLE PluginHandle; + GUID OwnerGuid; + PANELINFOFLAGS Flags; + size_t ItemsNumber; + size_t SelectedItemsNumber; + RECT PanelRect; + size_t CurrentItem; + size_t TopPanelItem; + intptr_t ViewMode; + enum PANELINFOTYPE PanelType; + enum OPENPANELINFO_SORTMODES SortMode; +}; + + +struct PanelRedrawInfo +{ + size_t StructSize; + size_t CurrentItem; + size_t TopPanelItem; +}; + +struct CmdLineSelect +{ + size_t StructSize; + intptr_t SelStart; + intptr_t SelEnd; +}; + +struct FarPanelDirectory +{ + size_t StructSize; + const wchar_t* Name; + const wchar_t* Param; + GUID PluginId; + const wchar_t* File; +}; + +#define PANEL_NONE ((HANDLE)(-1)) +#define PANEL_ACTIVE ((HANDLE)(-1)) +#define PANEL_PASSIVE ((HANDLE)(-2)) +#define PANEL_STOP ((HANDLE)(-1)) + +enum FILE_CONTROL_COMMANDS +{ + FCTL_CLOSEPANEL = 0, + FCTL_GETPANELINFO = 1, + FCTL_UPDATEPANEL = 2, + FCTL_REDRAWPANEL = 3, + FCTL_GETCMDLINE = 4, + FCTL_SETCMDLINE = 5, + FCTL_SETSELECTION = 6, + FCTL_SETVIEWMODE = 7, + FCTL_INSERTCMDLINE = 8, + FCTL_SETUSERSCREEN = 9, + FCTL_SETPANELDIRECTORY = 10, + FCTL_SETCMDLINEPOS = 11, + FCTL_GETCMDLINEPOS = 12, + FCTL_SETSORTMODE = 13, + FCTL_SETSORTORDER = 14, + FCTL_SETCMDLINESELECTION = 15, + FCTL_GETCMDLINESELECTION = 16, + FCTL_CHECKPANELSEXIST = 17, + FCTL_SETNUMERICSORT = 18, + FCTL_GETUSERSCREEN = 19, + FCTL_ISACTIVEPANEL = 20, + FCTL_GETPANELITEM = 21, + FCTL_GETSELECTEDPANELITEM = 22, + FCTL_GETCURRENTPANELITEM = 23, + FCTL_GETPANELDIRECTORY = 24, + FCTL_GETCOLUMNTYPES = 25, + FCTL_GETCOLUMNWIDTHS = 26, + FCTL_BEGINSELECTION = 27, + FCTL_ENDSELECTION = 28, + FCTL_CLEARSELECTION = 29, + FCTL_SETDIRECTORIESFIRST = 30, + FCTL_GETPANELFORMAT = 31, + FCTL_GETPANELHOSTFILE = 32, + FCTL_SETCASESENSITIVESORT = 33, + FCTL_GETPANELPREFIX = 34, +}; + +typedef void (WINAPI *FARAPITEXT)( + intptr_t X, + intptr_t Y, + const struct FarColor* Color, + const wchar_t *Str +); + +typedef HANDLE(WINAPI *FARAPISAVESCREEN)(intptr_t X1, intptr_t Y1, intptr_t X2, intptr_t Y2); + +typedef void (WINAPI *FARAPIRESTORESCREEN)(HANDLE hScreen); + + +typedef intptr_t (WINAPI *FARAPIGETDIRLIST)( + const wchar_t *Dir, + struct PluginPanelItem **pPanelItem, + size_t *pItemsNumber +); + +typedef intptr_t (WINAPI *FARAPIGETPLUGINDIRLIST)( + const GUID* PluginId, + HANDLE hPanel, + const wchar_t *Dir, + struct PluginPanelItem **pPanelItem, + size_t *pItemsNumber +); + +typedef void (WINAPI *FARAPIFREEDIRLIST)(struct PluginPanelItem *PanelItem, size_t nItemsNumber); +typedef void (WINAPI *FARAPIFREEPLUGINDIRLIST)(HANDLE hPanel, struct PluginPanelItem *PanelItem, size_t nItemsNumber); + +typedef unsigned __int64 VIEWER_FLAGS; +static const VIEWER_FLAGS + VF_NONMODAL = 0x0000000000000001ULL, + VF_DELETEONCLOSE = 0x0000000000000002ULL, + VF_ENABLE_F6 = 0x0000000000000004ULL, + VF_DISABLEHISTORY = 0x0000000000000008ULL, + VF_IMMEDIATERETURN = 0x0000000000000100ULL, + VF_DELETEONLYFILEONCLOSE = 0x0000000000000200ULL, + VF_NONE = 0; + +typedef intptr_t (WINAPI *FARAPIVIEWER)( + const wchar_t *FileName, + const wchar_t *Title, + intptr_t X1, + intptr_t Y1, + intptr_t X2, + intptr_t Y2, + VIEWER_FLAGS Flags, + uintptr_t CodePage +); + +typedef unsigned __int64 EDITOR_FLAGS; +static const EDITOR_FLAGS + EF_NONMODAL = 0x0000000000000001ULL, + EF_CREATENEW = 0x0000000000000002ULL, + EF_ENABLE_F6 = 0x0000000000000004ULL, + EF_DISABLEHISTORY = 0x0000000000000008ULL, + EF_DELETEONCLOSE = 0x0000000000000010ULL, + EF_IMMEDIATERETURN = 0x0000000000000100ULL, + EF_DELETEONLYFILEONCLOSE = 0x0000000000000200ULL, + EF_LOCKED = 0x0000000000000400ULL, + EF_DISABLESAVEPOS = 0x0000000000000800ULL, + EN_NONE = 0; + +enum EDITOR_EXITCODE +{ + EEC_OPEN_ERROR = 0, + EEC_MODIFIED = 1, + EEC_NOT_MODIFIED = 2, + EEC_LOADING_INTERRUPTED = 3, +}; + +typedef intptr_t (WINAPI *FARAPIEDITOR)( + const wchar_t *FileName, + const wchar_t *Title, + intptr_t X1, + intptr_t Y1, + intptr_t X2, + intptr_t Y2, + EDITOR_FLAGS Flags, + intptr_t StartLine, + intptr_t StartChar, + uintptr_t CodePage +); + +typedef const wchar_t*(WINAPI *FARAPIGETMSG)( + const GUID* PluginId, + intptr_t MsgId +); + +typedef unsigned __int64 FARHELPFLAGS; +static const FARHELPFLAGS + FHELP_NOSHOWERROR = 0x0000000080000000ULL, + FHELP_SELFHELP = 0x0000000000000000ULL, + FHELP_FARHELP = 0x0000000000000001ULL, + FHELP_CUSTOMFILE = 0x0000000000000002ULL, + FHELP_CUSTOMPATH = 0x0000000000000004ULL, + FHELP_USECONTENTS = 0x0000000040000000ULL, + FHELP_NONE = 0; + +typedef BOOL (WINAPI *FARAPISHOWHELP)( + const wchar_t *ModuleName, + const wchar_t *Topic, + FARHELPFLAGS Flags +); + +enum ADVANCED_CONTROL_COMMANDS +{ + ACTL_GETFARMANAGERVERSION = 0, + ACTL_WAITKEY = 2, + ACTL_GETCOLOR = 3, + ACTL_GETARRAYCOLOR = 4, + ACTL_GETWINDOWINFO = 6, + ACTL_GETWINDOWCOUNT = 7, + ACTL_SETCURRENTWINDOW = 8, + ACTL_COMMIT = 9, + ACTL_GETFARHWND = 10, + ACTL_SETARRAYCOLOR = 16, + ACTL_REDRAWALL = 19, + ACTL_SYNCHRO = 20, + ACTL_SETPROGRESSSTATE = 21, + ACTL_SETPROGRESSVALUE = 22, + ACTL_QUIT = 23, + ACTL_GETFARRECT = 24, + ACTL_GETCURSORPOS = 25, + ACTL_SETCURSORPOS = 26, + ACTL_PROGRESSNOTIFY = 27, + ACTL_GETWINDOWTYPE = 28, + + +}; + + + + +enum FAR_MACRO_CONTROL_COMMANDS +{ + MCTL_LOADALL = 0, + MCTL_SAVEALL = 1, + MCTL_SENDSTRING = 2, + MCTL_GETSTATE = 5, + MCTL_GETAREA = 6, + MCTL_ADDMACRO = 7, + MCTL_DELMACRO = 8, + MCTL_GETLASTERROR = 9, +}; + +typedef unsigned __int64 FARKEYMACROFLAGS; +static const FARKEYMACROFLAGS + KMFLAGS_DISABLEOUTPUT = 0x0000000000000001, + KMFLAGS_NOSENDKEYSTOPLUGINS = 0x0000000000000002, + KMFLAGS_SILENTCHECK = 0x0000000000000001, + KMFLAGS_NONE = 0; + +enum FARMACROSENDSTRINGCOMMAND +{ + MSSC_POST =0, + MSSC_CHECK =2, +}; + +enum FARMACROAREA +{ + MACROAREA_OTHER = 0, + MACROAREA_SHELL = 1, + MACROAREA_VIEWER = 2, + MACROAREA_EDITOR = 3, + MACROAREA_DIALOG = 4, + MACROAREA_SEARCH = 5, + MACROAREA_DISKS = 6, + MACROAREA_MAINMENU = 7, + MACROAREA_MENU = 8, + MACROAREA_HELP = 9, + MACROAREA_INFOPANEL = 10, + MACROAREA_QVIEWPANEL = 11, + MACROAREA_TREEPANEL = 12, + MACROAREA_FINDFOLDER = 13, + MACROAREA_USERMENU = 14, + MACROAREA_SHELLAUTOCOMPLETION = 15, + MACROAREA_DIALOGAUTOCOMPLETION = 16, + + MACROAREA_COMMON = 255, +}; + +enum FARMACROSTATE +{ + MACROSTATE_NOMACRO = 0, + MACROSTATE_EXECUTING = 1, + MACROSTATE_EXECUTING_COMMON = 2, + MACROSTATE_RECORDING = 3, + MACROSTATE_RECORDING_COMMON = 4, +}; + +enum FARMACROPARSEERRORCODE +{ + MPEC_SUCCESS = 0, + MPEC_ERROR = 1, +}; + +struct MacroParseResult +{ + size_t StructSize; + DWORD ErrCode; + COORD ErrPos; + const wchar_t *ErrSrc; +}; + + +struct MacroSendMacroText +{ + size_t StructSize; + FARKEYMACROFLAGS Flags; + INPUT_RECORD AKey; + const wchar_t *SequenceText; +}; + +typedef unsigned __int64 FARADDKEYMACROFLAGS; +static const FARADDKEYMACROFLAGS + AKMFLAGS_NONE = 0; + +typedef intptr_t (WINAPI *FARMACROCALLBACK)(void* Id,FARADDKEYMACROFLAGS Flags); + +struct MacroAddMacro +{ + size_t StructSize; + void* Id; + const wchar_t *SequenceText; + const wchar_t *Description; + FARKEYMACROFLAGS Flags; + INPUT_RECORD AKey; + enum FARMACROAREA Area; + FARMACROCALLBACK Callback; +}; + +enum FARMACROVARTYPE +{ + FMVT_UNKNOWN = 0, + FMVT_INTEGER = 1, + FMVT_STRING = 2, + FMVT_DOUBLE = 3, + FMVT_BOOLEAN = 4, + FMVT_BINARY = 5, +}; + +struct FarMacroValue +{ + enum FARMACROVARTYPE Type; + union + { + __int64 Integer; + __int64 Boolean; + double Double; + const wchar_t *String; + struct + { + void *Data; + size_t Size; + } Binary; + } +#ifndef __cplusplus + Value +#endif + ; +}; + +enum MACROPLUGINRETURNTYPE +{ + MPRT_NORMALFINISH = 0, + MPRT_ERRORFINISH = 1, + MPRT_ERRORPARSE = 2, + MPRT_KEYS = 3, + MPRT_PRINT = 4, + MPRT_PLUGINCALL = 5, + MPRT_PLUGINMENU = 6, + MPRT_PLUGINCONFIG = 7, + MPRT_PLUGINCOMMAND = 8, +}; + +struct MacroPluginReturn +{ + size_t Count; + struct FarMacroValue *Values; + enum MACROPLUGINRETURNTYPE ReturnType; +}; + +struct FarMacroCall +{ + size_t StructSize; + size_t Count; + struct FarMacroValue *Values; + void (WINAPI *Callback)(void *CallbackData, struct FarMacroValue *Values, size_t Count); + void *CallbackData; +}; + + +struct FarGetValue +{ + size_t StructSize; + intptr_t Type; + struct FarMacroValue Value; +}; + +typedef unsigned __int64 FARSETCOLORFLAGS; +static const FARSETCOLORFLAGS + FSETCLR_REDRAW = 0x0000000000000001ULL, + FSETCLR_NONE = 0; + +struct FarSetColors +{ + size_t StructSize; + FARSETCOLORFLAGS Flags; + size_t StartIndex; + size_t ColorsCount; + struct FarColor* Colors; +}; + +enum WINDOWINFO_TYPE +{ + WTYPE_PANELS = 1, + WTYPE_VIEWER = 2, + WTYPE_EDITOR = 3, + WTYPE_DIALOG = 4, + WTYPE_VMENU = 5, + WTYPE_HELP = 6, +}; + +typedef unsigned __int64 WINDOWINFO_FLAGS; +static const WINDOWINFO_FLAGS + WIF_MODIFIED = 0x0000000000000001ULL, + WIF_CURRENT = 0x0000000000000002ULL, + WIF_MODAL = 0x0000000000000004ULL; + +struct WindowInfo +{ + size_t StructSize; + intptr_t Id; + wchar_t *TypeName; + wchar_t *Name; + intptr_t TypeNameSize; + intptr_t NameSize; + intptr_t Pos; + enum WINDOWINFO_TYPE Type; + WINDOWINFO_FLAGS Flags; +}; + +struct WindowType +{ + size_t StructSize; + enum WINDOWINFO_TYPE Type; +}; + +enum TASKBARPROGRESSTATE +{ + TBPS_NOPROGRESS =0x0, + TBPS_INDETERMINATE=0x1, + TBPS_NORMAL =0x2, + TBPS_ERROR =0x4, + TBPS_PAUSED =0x8, +}; + +struct ProgressValue +{ + size_t StructSize; + unsigned __int64 Completed; + unsigned __int64 Total; +}; + +enum VIEWER_CONTROL_COMMANDS +{ + VCTL_GETINFO = 0, + VCTL_QUIT = 1, + VCTL_REDRAW = 2, + VCTL_SETKEYBAR = 3, + VCTL_SETPOSITION = 4, + VCTL_SELECT = 5, + VCTL_SETMODE = 6, + VCTL_GETFILENAME = 7, +}; + +typedef unsigned __int64 VIEWER_OPTIONS; +static const VIEWER_OPTIONS + VOPT_SAVEFILEPOSITION = 0x0000000000000001ULL, + VOPT_AUTODETECTCODEPAGE = 0x0000000000000002ULL, + VOPT_NONE = 0; + +enum VIEWER_SETMODE_TYPES +{ + VSMT_VIEWMODE = 0, + VSMT_WRAP = 1, + VSMT_WORDWRAP = 2, +}; + +typedef unsigned __int64 VIEWER_SETMODEFLAGS_TYPES; +static const VIEWER_SETMODEFLAGS_TYPES + VSMFL_REDRAW = 0x0000000000000001ULL; + +struct ViewerSetMode +{ + size_t StructSize; + enum VIEWER_SETMODE_TYPES Type; + union + { + intptr_t iParam; + wchar_t *wszParam; + } +#ifndef __cplusplus + Param +#endif + ; + VIEWER_SETMODEFLAGS_TYPES Flags; +}; + +struct ViewerSelect +{ + size_t StructSize; + __int64 BlockStartPos; + __int64 BlockLen; +}; + +typedef unsigned __int64 VIEWER_SETPOS_FLAGS; +static const VIEWER_SETPOS_FLAGS + VSP_NOREDRAW = 0x0000000000000001ULL, + VSP_PERCENT = 0x0000000000000002ULL, + VSP_RELATIVE = 0x0000000000000004ULL, + VSP_NORETNEWPOS = 0x0000000000000008ULL; + +struct ViewerSetPosition +{ + size_t StructSize; + VIEWER_SETPOS_FLAGS Flags; + __int64 StartPos; + __int64 LeftPos; +}; + +typedef unsigned __int64 VIEWER_MODE_FLAGS; +static const VIEWER_MODE_FLAGS + VMF_WRAP = 0x0000000000000001ULL, + VMF_WORDWRAP = 0x0000000000000002ULL; + +enum VIEWER_MODE_TYPE +{ + VMT_TEXT =0, + VMT_HEX =1, + VMT_DUMP =2, +}; + +struct ViewerMode +{ + uintptr_t CodePage; + VIEWER_MODE_FLAGS Flags; + enum VIEWER_MODE_TYPE ViewMode; +}; + +struct ViewerInfo +{ + size_t StructSize; + intptr_t ViewerID; + intptr_t TabSize; + struct ViewerMode CurMode; + __int64 FileSize; + __int64 FilePos; + __int64 LeftPos; + VIEWER_OPTIONS Options; + intptr_t WindowSizeX; + intptr_t WindowSizeY; +}; + +enum VIEWER_EVENTS +{ + VE_READ =0, + VE_CLOSE =1, + + VE_GOTFOCUS =6, + VE_KILLFOCUS =7, +}; + + +enum EDITOR_EVENTS +{ + EE_READ =0, + EE_SAVE =1, + EE_REDRAW =2, + EE_CLOSE =3, + + EE_GOTFOCUS =6, + EE_KILLFOCUS =7, + EE_CHANGE =8, +}; + +enum DIALOG_EVENTS +{ + DE_DLGPROCINIT =0, + DE_DEFDLGPROCINIT =1, + DE_DLGPROCEND =2, +}; + +enum SYNCHRO_EVENTS +{ + SE_COMMONSYNCHRO =0, +}; + +#define EEREDRAW_ALL (void*)0 +#define CURRENT_EDITOR -1 + +enum EDITOR_CONTROL_COMMANDS +{ + ECTL_GETSTRING = 0, + ECTL_SETSTRING = 1, + ECTL_INSERTSTRING = 2, + ECTL_DELETESTRING = 3, + ECTL_DELETECHAR = 4, + ECTL_INSERTTEXT = 5, + ECTL_GETINFO = 6, + ECTL_SETPOSITION = 7, + ECTL_SELECT = 8, + ECTL_REDRAW = 9, + ECTL_TABTOREAL = 10, + ECTL_REALTOTAB = 11, + ECTL_EXPANDTABS = 12, + ECTL_SETTITLE = 13, + ECTL_READINPUT = 14, + ECTL_PROCESSINPUT = 15, + ECTL_ADDCOLOR = 16, + ECTL_GETCOLOR = 17, + ECTL_SAVEFILE = 18, + ECTL_QUIT = 19, + ECTL_SETKEYBAR = 20, + + ECTL_SETPARAM = 22, + ECTL_GETBOOKMARKS = 23, + ECTL_DELETEBLOCK = 25, + ECTL_ADDSESSIONBOOKMARK = 26, + ECTL_PREVSESSIONBOOKMARK = 27, + ECTL_NEXTSESSIONBOOKMARK = 28, + ECTL_CLEARSESSIONBOOKMARKS = 29, + ECTL_DELETESESSIONBOOKMARK = 30, + ECTL_GETSESSIONBOOKMARKS = 31, + ECTL_UNDOREDO = 32, + ECTL_GETFILENAME = 33, + ECTL_DELCOLOR = 34, +}; + +enum EDITOR_SETPARAMETER_TYPES +{ + ESPT_TABSIZE = 0, + ESPT_EXPANDTABS = 1, + ESPT_AUTOINDENT = 2, + ESPT_CURSORBEYONDEOL = 3, + ESPT_CHARCODEBASE = 4, + ESPT_CODEPAGE = 5, + ESPT_SAVEFILEPOSITION = 6, + ESPT_LOCKMODE = 7, + ESPT_SETWORDDIV = 8, + ESPT_GETWORDDIV = 9, + ESPT_SHOWWHITESPACE = 10, + ESPT_SETBOM = 11, +}; + + + +struct EditorSetParameter +{ + size_t StructSize; + enum EDITOR_SETPARAMETER_TYPES Type; + union + { + intptr_t iParam; + wchar_t *wszParam; + intptr_t Reserved; + } +#ifndef __cplusplus + Param +#endif + ; + unsigned __int64 Flags; + size_t Size; +}; + + +enum EDITOR_UNDOREDO_COMMANDS +{ + EUR_BEGIN = 0, + EUR_END = 1, + EUR_UNDO = 2, + EUR_REDO = 3, +}; + + +struct EditorUndoRedo +{ + size_t StructSize; + enum EDITOR_UNDOREDO_COMMANDS Command; +}; + +struct EditorGetString +{ + size_t StructSize; + intptr_t StringNumber; + intptr_t StringLength; + const wchar_t *StringText; + const wchar_t *StringEOL; + intptr_t SelStart; + intptr_t SelEnd; +}; + + +struct EditorSetString +{ + size_t StructSize; + intptr_t StringNumber; + intptr_t StringLength; + const wchar_t *StringText; + const wchar_t *StringEOL; +}; + +enum EXPAND_TABS +{ + EXPAND_NOTABS = 0, + EXPAND_ALLTABS = 1, + EXPAND_NEWTABS = 2, +}; + + +enum EDITOR_OPTIONS +{ + EOPT_EXPANDALLTABS = 0x00000001, + EOPT_PERSISTENTBLOCKS = 0x00000002, + EOPT_DELREMOVESBLOCKS = 0x00000004, + EOPT_AUTOINDENT = 0x00000008, + EOPT_SAVEFILEPOSITION = 0x00000010, + EOPT_AUTODETECTCODEPAGE= 0x00000020, + EOPT_CURSORBEYONDEOL = 0x00000040, + EOPT_EXPANDONLYNEWTABS = 0x00000080, + EOPT_SHOWWHITESPACE = 0x00000100, + EOPT_BOM = 0x00000200, + EOPT_SHOWLINEBREAK = 0x00000400, +}; + + +enum EDITOR_BLOCK_TYPES +{ + BTYPE_NONE = 0, + BTYPE_STREAM = 1, + BTYPE_COLUMN = 2, +}; + +enum EDITOR_CURRENTSTATE +{ + ECSTATE_MODIFIED = 0x00000001, + ECSTATE_SAVED = 0x00000002, + ECSTATE_LOCKED = 0x00000004, +}; + + +struct EditorInfo +{ + size_t StructSize; + intptr_t EditorID; + intptr_t WindowSizeX; + intptr_t WindowSizeY; + intptr_t TotalLines; + intptr_t CurLine; + intptr_t CurPos; + intptr_t CurTabPos; + intptr_t TopScreenLine; + intptr_t LeftPos; + intptr_t Overtype; + intptr_t BlockType; + intptr_t BlockStartLine; + uintptr_t Options; + intptr_t TabSize; + size_t BookmarkCount; + size_t SessionBookmarkCount; + uintptr_t CurState; + uintptr_t CodePage; +}; + +struct EditorBookmarks +{ + size_t StructSize; + size_t Size; + size_t Count; + intptr_t *Line; + intptr_t *Cursor; + intptr_t *ScreenLine; + intptr_t *LeftPos; +}; + +struct EditorSetPosition +{ + size_t StructSize; + intptr_t CurLine; + intptr_t CurPos; + intptr_t CurTabPos; + intptr_t TopScreenLine; + intptr_t LeftPos; + intptr_t Overtype; +}; + + +struct EditorSelect +{ + size_t StructSize; + intptr_t BlockType; + intptr_t BlockStartLine; + intptr_t BlockStartPos; + intptr_t BlockWidth; + intptr_t BlockHeight; +}; + + +struct EditorConvertPos +{ + size_t StructSize; + intptr_t StringNumber; + intptr_t SrcPos; + intptr_t DestPos; +}; + + +typedef unsigned __int64 EDITORCOLORFLAGS; +static const EDITORCOLORFLAGS + ECF_TABMARKFIRST = 0x0000000000000001ULL, + ECF_TABMARKCURRENT = 0x0000000000000002ULL; + +struct EditorColor +{ + size_t StructSize; + intptr_t StringNumber; + intptr_t ColorItem; + intptr_t StartPos; + intptr_t EndPos; + uintptr_t Priority; + EDITORCOLORFLAGS Flags; + struct FarColor Color; + GUID Owner; +}; + +struct EditorDeleteColor +{ + size_t StructSize; + GUID Owner; + intptr_t StringNumber; + intptr_t StartPos; +}; + +#define EDITOR_COLOR_NORMAL_PRIORITY 0x80000000U + +struct EditorSaveFile +{ + size_t StructSize; + const wchar_t *FileName; + const wchar_t *FileEOL; + uintptr_t CodePage; +}; + +enum EDITOR_CHANGETYPE +{ + ECTYPE_CHANGED = 0, + ECTYPE_ADDED = 1, + ECTYPE_DELETED = 2, +}; + +struct EditorChange +{ + size_t StructSize; + enum EDITOR_CHANGETYPE Type; + intptr_t StringNumber; +}; + +typedef unsigned __int64 INPUTBOXFLAGS; +static const INPUTBOXFLAGS + FIB_ENABLEEMPTY = 0x0000000000000001ULL, + FIB_PASSWORD = 0x0000000000000002ULL, + FIB_EXPANDENV = 0x0000000000000004ULL, + FIB_NOUSELASTHISTORY = 0x0000000000000008ULL, + FIB_BUTTONS = 0x0000000000000010ULL, + FIB_NOAMPERSAND = 0x0000000000000020ULL, + FIB_EDITPATH = 0x0000000000000040ULL, + FIB_EDITPATHEXEC = 0x0000000000000080ULL, + FIB_NONE = 0; + +typedef intptr_t (WINAPI *FARAPIINPUTBOX)( + const GUID* PluginId, + const GUID* Id, + const wchar_t *Title, + const wchar_t *SubTitle, + const wchar_t *HistoryName, + const wchar_t *SrcText, + wchar_t *DestText, + size_t DestSize, + const wchar_t *HelpTopic, + INPUTBOXFLAGS Flags +); + +enum FAR_PLUGINS_CONTROL_COMMANDS +{ + PCTL_LOADPLUGIN = 0, + PCTL_UNLOADPLUGIN = 1, + PCTL_FORCEDLOADPLUGIN = 2, + PCTL_FINDPLUGIN = 3, + PCTL_GETPLUGININFORMATION = 4, + PCTL_GETPLUGINS = 5, +}; + +enum FAR_PLUGIN_LOAD_TYPE +{ + PLT_PATH = 0, +}; + +enum FAR_PLUGIN_FIND_TYPE +{ + PFM_GUID = 0, + PFM_MODULENAME = 1, +}; + +typedef unsigned __int64 FAR_PLUGIN_FLAGS; +static const FAR_PLUGIN_FLAGS + FPF_LOADED = 0x0000000000000001ULL, + FPF_ANSI = 0x1000000000000000ULL, + FPF_NONE = 0; + +enum FAR_FILE_FILTER_CONTROL_COMMANDS +{ + FFCTL_CREATEFILEFILTER = 0, + FFCTL_FREEFILEFILTER = 1, + FFCTL_OPENFILTERSMENU = 2, + FFCTL_STARTINGTOFILTER = 3, + FFCTL_ISFILEINFILTER = 4, +}; + +enum FAR_FILE_FILTER_TYPE +{ + FFT_PANEL = 0, + FFT_FINDFILE = 1, + FFT_COPY = 2, + FFT_SELECT = 3, + FFT_CUSTOM = 4, +}; + +enum FAR_REGEXP_CONTROL_COMMANDS +{ + RECTL_CREATE = 0, + RECTL_FREE = 1, + RECTL_COMPILE = 2, + RECTL_OPTIMIZE = 3, + RECTL_MATCHEX = 4, + RECTL_SEARCHEX = 5, + RECTL_BRACKETSCOUNT = 6, +}; + +struct RegExpMatch +{ + intptr_t start,end; +}; + +struct RegExpSearch +{ + const wchar_t* Text; + intptr_t Position; + intptr_t Length; + struct RegExpMatch* Match; + intptr_t Count; + void* Reserved; +}; + +enum FAR_SETTINGS_CONTROL_COMMANDS +{ + SCTL_CREATE = 0, + SCTL_FREE = 1, + SCTL_SET = 2, + SCTL_GET = 3, + SCTL_ENUM = 4, + SCTL_DELETE = 5, + SCTL_CREATESUBKEY = 6, + SCTL_OPENSUBKEY = 7, +}; + +enum FARSETTINGSTYPES +{ + FST_UNKNOWN = 0, + FST_SUBKEY = 1, + FST_QWORD = 2, + FST_STRING = 3, + FST_DATA = 4, +}; + +enum FARSETTINGS_SUBFOLDERS +{ + FSSF_ROOT = 0, + FSSF_HISTORY_CMD = 1, + FSSF_HISTORY_FOLDER = 2, + FSSF_HISTORY_VIEW = 3, + FSSF_HISTORY_EDIT = 4, + FSSF_HISTORY_EXTERNAL = 5, + FSSF_FOLDERSHORTCUT_0 = 6, + FSSF_FOLDERSHORTCUT_1 = 7, + FSSF_FOLDERSHORTCUT_2 = 8, + FSSF_FOLDERSHORTCUT_3 = 9, + FSSF_FOLDERSHORTCUT_4 = 10, + FSSF_FOLDERSHORTCUT_5 = 11, + FSSF_FOLDERSHORTCUT_6 = 12, + FSSF_FOLDERSHORTCUT_7 = 13, + FSSF_FOLDERSHORTCUT_8 = 14, + FSSF_FOLDERSHORTCUT_9 = 15, + FSSF_CONFIRMATIONS = 16, + FSSF_SYSTEM = 17, + FSSF_PANEL = 18, + FSSF_EDITOR = 19, + FSSF_SCREEN = 20, + FSSF_DIALOG = 21, + FSSF_INTERFACE = 22, + FSSF_PANELLAYOUT = 23, +}; + +enum FAR_PLUGIN_SETTINGS_LOCATION +{ + PSL_ROAMING = 0, + PSL_LOCAL = 1, +}; + +struct FarSettingsCreate +{ + size_t StructSize; + GUID Guid; + HANDLE Handle; +}; + +struct FarSettingsItem +{ + size_t StructSize; + size_t Root; + const wchar_t* Name; + enum FARSETTINGSTYPES Type; + union + { + unsigned __int64 Number; + const wchar_t* String; + struct + { + size_t Size; + const void* Data; + } Data; + } +#ifndef __cplusplus + Value +#endif + ; +}; + +struct FarSettingsName +{ + const wchar_t* Name; + enum FARSETTINGSTYPES Type; +}; + +struct FarSettingsHistory +{ + const wchar_t* Name; + const wchar_t* Param; + GUID PluginId; + const wchar_t* File; + FILETIME Time; + BOOL Lock; +}; + +struct FarSettingsEnum +{ + size_t StructSize; + size_t Root; + size_t Count; + union + { + const struct FarSettingsName* Items; + const struct FarSettingsHistory* Histories; + } +#ifndef __cplusplus + Value +#endif + ; +}; + +struct FarSettingsValue +{ + size_t StructSize; + size_t Root; + const wchar_t* Value; +}; + +typedef intptr_t (WINAPI *FARAPIPANELCONTROL)( + HANDLE hPanel, + enum FILE_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t(WINAPI *FARAPIADVCONTROL)( + const GUID* PluginId, + enum ADVANCED_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIVIEWERCONTROL)( + intptr_t ViewerID, + enum VIEWER_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIEDITORCONTROL)( + intptr_t EditorID, + enum EDITOR_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIMACROCONTROL)( + const GUID* PluginId, + enum FAR_MACRO_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIPLUGINSCONTROL)( + HANDLE hHandle, + enum FAR_PLUGINS_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIFILEFILTERCONTROL)( + HANDLE hHandle, + enum FAR_FILE_FILTER_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPIREGEXPCONTROL)( + HANDLE hHandle, + enum FAR_REGEXP_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +typedef intptr_t (WINAPI *FARAPISETTINGSCONTROL)( + HANDLE hHandle, + enum FAR_SETTINGS_CONTROL_COMMANDS Command, + intptr_t Param1, + void* Param2 +); + +enum FARCLIPBOARD_TYPE +{ + FCT_ANY=0, + FCT_STREAM=1, + FCT_COLUMN=2 +}; + +// +typedef int (WINAPIV *FARSTDSPRINTF)(wchar_t *Buffer,const wchar_t *Format,...); +typedef int (WINAPIV *FARSTDSNPRINTF)(wchar_t *Buffer,size_t Sizebuf,const wchar_t *Format,...); +typedef int (WINAPIV *FARSTDSSCANF)(const wchar_t *Buffer, const wchar_t *Format,...); +// +typedef void (WINAPI *FARSTDQSORT)(void *base, size_t nelem, size_t width, int (WINAPI *fcmp)(const void *, const void *,void *userparam),void *userparam); +typedef void *(WINAPI *FARSTDBSEARCH)(const void *key, const void *base, size_t nelem, size_t width, int (WINAPI *fcmp)(const void *, const void *,void *userparam),void *userparam); +typedef size_t (WINAPI *FARSTDGETFILEOWNER)(const wchar_t *Computer,const wchar_t *Name,wchar_t *Owner,size_t Size); +typedef size_t (WINAPI *FARSTDGETNUMBEROFLINKS)(const wchar_t *Name); +typedef int (WINAPI *FARSTDATOI)(const wchar_t *s); +typedef __int64 (WINAPI *FARSTDATOI64)(const wchar_t *s); +typedef wchar_t *(WINAPI *FARSTDITOA64)(__int64 value, wchar_t *string, int radix); +typedef wchar_t *(WINAPI *FARSTDITOA)(int value, wchar_t *string, int radix); +typedef wchar_t *(WINAPI *FARSTDLTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDRTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDTRIM)(wchar_t *Str); +typedef wchar_t *(WINAPI *FARSTDTRUNCSTR)(wchar_t *Str,intptr_t MaxLength); +typedef wchar_t *(WINAPI *FARSTDTRUNCPATHSTR)(wchar_t *Str,intptr_t MaxLength); +typedef wchar_t *(WINAPI *FARSTDQUOTESPACEONLY)(wchar_t *Str); +typedef const wchar_t*(WINAPI *FARSTDPOINTTONAME)(const wchar_t *Path); +typedef BOOL (WINAPI *FARSTDADDENDSLASH)(wchar_t *Path); +typedef BOOL (WINAPI *FARSTDCOPYTOCLIPBOARD)(enum FARCLIPBOARD_TYPE Type, const wchar_t *Data); +typedef size_t (WINAPI *FARSTDPASTEFROMCLIPBOARD)(enum FARCLIPBOARD_TYPE Type, wchar_t *Data, size_t Size); +typedef int (WINAPI *FARSTDLOCALISLOWER)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISUPPER)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISALPHA)(wchar_t Ch); +typedef int (WINAPI *FARSTDLOCALISALPHANUM)(wchar_t Ch); +typedef wchar_t (WINAPI *FARSTDLOCALUPPER)(wchar_t LowerChar); +typedef wchar_t (WINAPI *FARSTDLOCALLOWER)(wchar_t UpperChar); +typedef void (WINAPI *FARSTDLOCALUPPERBUF)(wchar_t *Buf,intptr_t Length); +typedef void (WINAPI *FARSTDLOCALLOWERBUF)(wchar_t *Buf,intptr_t Length); +typedef void (WINAPI *FARSTDLOCALSTRUPR)(wchar_t *s1); +typedef void (WINAPI *FARSTDLOCALSTRLWR)(wchar_t *s1); +typedef int (WINAPI *FARSTDLOCALSTRICMP)(const wchar_t *s1,const wchar_t *s2); +typedef int (WINAPI *FARSTDLOCALSTRNICMP)(const wchar_t *s1,const wchar_t *s2,intptr_t n); + +typedef unsigned __int64 PROCESSNAME_FLAGS; +static const PROCESSNAME_FLAGS + // 0xFFFF - length + // 0xFF0000 - mode + // 0xFFFFFFFFFF000000 - flags + PN_CMPNAME = 0x0000000000000000ULL, + PN_CMPNAMELIST = 0x0000000000010000ULL, + PN_GENERATENAME = 0x0000000000020000ULL, + PN_CHECKMASK = 0x0000000000030000ULL, + + PN_SKIPPATH = 0x0000000001000000ULL, + PN_SHOWERRORMESSAGE = 0x0000000002000000ULL; + +typedef size_t (WINAPI *FARSTDPROCESSNAME)(const wchar_t *param1, wchar_t *param2, size_t size, PROCESSNAME_FLAGS flags); + +typedef void (WINAPI *FARSTDUNQUOTE)(wchar_t *Str); + +typedef unsigned __int64 XLAT_FLAGS; +static const XLAT_FLAGS + XLAT_SWITCHKEYBLAYOUT = 0x0000000000000001ULL, + XLAT_SWITCHKEYBBEEP = 0x0000000000000002ULL, + XLAT_USEKEYBLAYOUTNAME = 0x0000000000000004ULL, + XLAT_CONVERTALLCMDLINE = 0x0000000000010000ULL, + XLAT_NONE = 0; + +typedef size_t (WINAPI *FARSTDINPUTRECORDTOKEYNAME)(const INPUT_RECORD* Key, wchar_t *KeyText, size_t Size); + +typedef wchar_t*(WINAPI *FARSTDXLAT)(wchar_t *Line,intptr_t StartPos,intptr_t EndPos,XLAT_FLAGS Flags); + +typedef BOOL (WINAPI *FARSTDKEYNAMETOINPUTRECORD)(const wchar_t *Name,INPUT_RECORD* Key); + +typedef int (WINAPI *FRSUSERFUNC)( + const struct PluginPanelItem *FData, + const wchar_t *FullName, + void *Param +); + +typedef unsigned __int64 FRSMODE; +static const FRSMODE + FRS_RETUPDIR = 0x0000000000000001ULL, + FRS_RECUR = 0x0000000000000002ULL, + FRS_SCANSYMLINK = 0x0000000000000004ULL; + +typedef void (WINAPI *FARSTDRECURSIVESEARCH)(const wchar_t *InitDir,const wchar_t *Mask,FRSUSERFUNC Func,FRSMODE Flags,void *Param); +typedef size_t (WINAPI *FARSTDMKTEMP)(wchar_t *Dest, size_t DestSize, const wchar_t *Prefix); +typedef size_t (WINAPI *FARSTDGETPATHROOT)(const wchar_t *Path,wchar_t *Root, size_t DestSize); + +enum LINK_TYPE +{ + LINK_HARDLINK = 1, + LINK_JUNCTION = 2, + LINK_VOLMOUNT = 3, + LINK_SYMLINKFILE = 4, + LINK_SYMLINKDIR = 5, + LINK_SYMLINK = 6, +}; + +typedef unsigned __int64 MKLINK_FLAGS; +static const MKLINK_FLAGS + MLF_SHOWERRMSG = 0x0000000000010000ULL, + MLF_DONOTUPDATEPANEL = 0x0000000000020000ULL, + MLF_NONE = 0; + +typedef BOOL (WINAPI *FARSTDMKLINK)(const wchar_t *Src,const wchar_t *Dest,enum LINK_TYPE Type, MKLINK_FLAGS Flags); +typedef size_t (WINAPI *FARGETREPARSEPOINTINFO)(const wchar_t *Src, wchar_t *Dest, size_t DestSize); + +enum CONVERTPATHMODES +{ + CPM_FULL = 0, + CPM_REAL = 1, + CPM_NATIVE = 2, +}; + +typedef size_t (WINAPI *FARCONVERTPATH)(enum CONVERTPATHMODES Mode, const wchar_t *Src, wchar_t *Dest, size_t DestSize); + +typedef size_t (WINAPI *FARGETCURRENTDIRECTORY)(size_t Size, wchar_t* Buffer); + +typedef unsigned __int64 FARFORMATFILESIZEFLAGS; +static const FARFORMATFILESIZEFLAGS + FFFS_COMMAS = 0x0100000000000000LL, + FFFS_FLOATSIZE = 0x0200000000000000LL, + FFFS_SHOWBYTESINDEX = 0x0400000000000000LL, + FFFS_ECONOMIC = 0x0800000000000000LL, + FFFS_THOUSAND = 0x1000000000000000LL, + FFFS_MINSIZEINDEX = 0x2000000000000000LL, + FFFS_MINSIZEINDEX_MASK = 0x0000000000000003LL; + +typedef size_t (WINAPI *FARFORMATFILESIZE)(unsigned __int64 Size, intptr_t Width, FARFORMATFILESIZEFLAGS Flags, wchar_t *Dest, size_t DestSize); + +typedef struct FarStandardFunctions +{ + size_t StructSize; + + FARSTDATOI atoi; + FARSTDATOI64 atoi64; + FARSTDITOA itoa; + FARSTDITOA64 itoa64; + // + FARSTDSPRINTF sprintf; + FARSTDSSCANF sscanf; + // + FARSTDQSORT qsort; + FARSTDBSEARCH bsearch; + // + FARSTDSNPRINTF snprintf; + // + + FARSTDLOCALISLOWER LIsLower; + FARSTDLOCALISUPPER LIsUpper; + FARSTDLOCALISALPHA LIsAlpha; + FARSTDLOCALISALPHANUM LIsAlphanum; + FARSTDLOCALUPPER LUpper; + FARSTDLOCALLOWER LLower; + FARSTDLOCALUPPERBUF LUpperBuf; + FARSTDLOCALLOWERBUF LLowerBuf; + FARSTDLOCALSTRUPR LStrupr; + FARSTDLOCALSTRLWR LStrlwr; + FARSTDLOCALSTRICMP LStricmp; + FARSTDLOCALSTRNICMP LStrnicmp; + + FARSTDUNQUOTE Unquote; + FARSTDLTRIM LTrim; + FARSTDRTRIM RTrim; + FARSTDTRIM Trim; + FARSTDTRUNCSTR TruncStr; + FARSTDTRUNCPATHSTR TruncPathStr; + FARSTDQUOTESPACEONLY QuoteSpaceOnly; + FARSTDPOINTTONAME PointToName; + FARSTDGETPATHROOT GetPathRoot; + FARSTDADDENDSLASH AddEndSlash; + FARSTDCOPYTOCLIPBOARD CopyToClipboard; + FARSTDPASTEFROMCLIPBOARD PasteFromClipboard; + FARSTDINPUTRECORDTOKEYNAME FarInputRecordToName; + FARSTDKEYNAMETOINPUTRECORD FarNameToInputRecord; + FARSTDXLAT XLat; + FARSTDGETFILEOWNER GetFileOwner; + FARSTDGETNUMBEROFLINKS GetNumberOfLinks; + FARSTDRECURSIVESEARCH FarRecursiveSearch; + FARSTDMKTEMP MkTemp; + FARSTDPROCESSNAME ProcessName; + FARSTDMKLINK MkLink; + FARCONVERTPATH ConvertPath; + FARGETREPARSEPOINTINFO GetReparsePointInfo; + FARGETCURRENTDIRECTORY GetCurrentDirectory; + FARFORMATFILESIZE FormatFileSize; +} FARSTANDARDFUNCTIONS; + +struct PluginStartupInfo +{ + size_t StructSize; + const wchar_t *ModuleName; + FARAPIMENU Menu; + FARAPIMESSAGE Message; + FARAPIGETMSG GetMsg; + FARAPIPANELCONTROL PanelControl; + FARAPISAVESCREEN SaveScreen; + FARAPIRESTORESCREEN RestoreScreen; + FARAPIGETDIRLIST GetDirList; + FARAPIGETPLUGINDIRLIST GetPluginDirList; + FARAPIFREEDIRLIST FreeDirList; + FARAPIFREEPLUGINDIRLIST FreePluginDirList; + FARAPIVIEWER Viewer; + FARAPIEDITOR Editor; + FARAPITEXT Text; + FARAPIEDITORCONTROL EditorControl; + + FARSTANDARDFUNCTIONS *FSF; + + FARAPISHOWHELP ShowHelp; + FARAPIADVCONTROL AdvControl; + FARAPIINPUTBOX InputBox; + FARAPICOLORDIALOG ColorDialog; + FARAPIDIALOGINIT DialogInit; + FARAPIDIALOGRUN DialogRun; + FARAPIDIALOGFREE DialogFree; + + FARAPISENDDLGMESSAGE SendDlgMessage; + FARAPIDEFDLGPROC DefDlgProc; + FARAPIVIEWERCONTROL ViewerControl; + FARAPIPLUGINSCONTROL PluginsControl; + FARAPIFILEFILTERCONTROL FileFilterControl; + FARAPIREGEXPCONTROL RegExpControl; + FARAPIMACROCONTROL MacroControl; + FARAPISETTINGSCONTROL SettingsControl; + void *Private; +}; + +typedef HANDLE (WINAPI *FARAPICREATEFILE)(const wchar_t *Object,DWORD DesiredAccess,DWORD ShareMode,LPSECURITY_ATTRIBUTES SecurityAttributes,DWORD CreationDistribution,DWORD FlagsAndAttributes,HANDLE TemplateFile); +typedef DWORD (WINAPI *FARAPIGETFILEATTRIBUTES)(const wchar_t *FileName); +typedef BOOL (WINAPI *FARAPISETFILEATTRIBUTES)(const wchar_t *FileName,DWORD dwFileAttributes); +typedef BOOL (WINAPI *FARAPIMOVEFILEEX)(const wchar_t *ExistingFileName,const wchar_t *NewFileName,DWORD dwFlags); +typedef BOOL (WINAPI *FARAPIDELETEFILE)(const wchar_t *FileName); +typedef BOOL (WINAPI *FARAPIREMOVEDIRECTORY)(const wchar_t *DirName); +typedef BOOL (WINAPI *FARAPICREATEDIRECTORY)(const wchar_t *PathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes); + +struct ArclitePrivateInfo +{ + size_t StructSize; + FARAPICREATEFILE CreateFile; + FARAPIGETFILEATTRIBUTES GetFileAttributes; + FARAPISETFILEATTRIBUTES SetFileAttributes; + FARAPIMOVEFILEEX MoveFileEx; + FARAPIDELETEFILE DeleteFile; + FARAPIREMOVEDIRECTORY RemoveDirectory; + FARAPICREATEDIRECTORY CreateDirectory; +}; + +typedef intptr_t (WINAPI *FARAPICALLFAR)(intptr_t CheckCode, struct FarMacroCall* Data); + +struct MacroPrivateInfo +{ + size_t StructSize; + FARAPICALLFAR CallFar; +}; + +typedef unsigned __int64 PLUGIN_FLAGS; +static const PLUGIN_FLAGS + PF_PRELOAD = 0x0000000000000001ULL, + PF_DISABLEPANELS = 0x0000000000000002ULL, + PF_EDITOR = 0x0000000000000004ULL, + PF_VIEWER = 0x0000000000000008ULL, + PF_FULLCMDLINE = 0x0000000000000010ULL, + PF_DIALOG = 0x0000000000000020ULL, + PF_NONE = 0; + +struct PluginMenuItem +{ + const GUID *Guids; + const wchar_t * const *Strings; + size_t Count; +}; + +enum VERSION_STAGE +{ + VS_RELEASE = 0, + VS_ALPHA = 1, + VS_BETA = 2, + VS_RC = 3, +}; + +struct VersionInfo +{ + DWORD Major; + DWORD Minor; + DWORD Revision; + DWORD Build; + enum VERSION_STAGE Stage; +}; + +static __inline BOOL CheckVersion(const struct VersionInfo* Current, const struct VersionInfo* Required) +{ + return (Current->Major > Required->Major) || (Current->Major == Required->Major && Current->Minor > Required->Minor) || (Current->Major == Required->Major && Current->Minor == Required->Minor && Current->Revision > Required->Revision) || (Current->Major == Required->Major && Current->Minor == Required->Minor && Current->Revision == Required->Revision && Current->Build >= Required->Build); +} + +static __inline struct VersionInfo MAKEFARVERSION(DWORD Major, DWORD Minor, DWORD Revision, DWORD Build, enum VERSION_STAGE Stage) +{ + struct VersionInfo Info = {Major, Minor, Revision, Build, Stage}; + return Info; +} + +#define FARMANAGERVERSION MAKEFARVERSION(FARMANAGERVERSION_MAJOR,FARMANAGERVERSION_MINOR, FARMANAGERVERSION_REVISION, FARMANAGERVERSION_BUILD, FARMANAGERVERSION_STAGE) + +struct GlobalInfo +{ + size_t StructSize; + struct VersionInfo MinFarVersion; + struct VersionInfo Version; + GUID Guid; + const wchar_t *Title; + const wchar_t *Description; + const wchar_t *Author; +}; + +struct PluginInfo +{ + size_t StructSize; + PLUGIN_FLAGS Flags; + struct PluginMenuItem DiskMenu; + struct PluginMenuItem PluginMenu; + struct PluginMenuItem PluginConfig; + const wchar_t *CommandPrefix; +}; + +struct FarGetPluginInformation +{ + size_t StructSize; + const wchar_t *ModuleName; + FAR_PLUGIN_FLAGS Flags; + struct PluginInfo *PInfo; + struct GlobalInfo *GInfo; +}; + +typedef unsigned __int64 INFOPANELLINE_FLAGS; +static const INFOPANELLINE_FLAGS + IPLFLAGS_SEPARATOR = 0x0000000000000001ULL; + +struct InfoPanelLine +{ + const wchar_t *Text; + const wchar_t *Data; + INFOPANELLINE_FLAGS Flags; +}; + +typedef unsigned __int64 PANELMODE_FLAGS; +static const PANELMODE_FLAGS + PMFLAGS_FULLSCREEN = 0x0000000000000001ULL, + PMFLAGS_DETAILEDSTATUS = 0x0000000000000002ULL, + PMFLAGS_ALIGNEXTENSIONS = 0x0000000000000004ULL, + PMFLAGS_CASECONVERSION = 0x0000000000000008ULL; + +struct PanelMode +{ + const wchar_t *ColumnTypes; + const wchar_t *ColumnWidths; + const wchar_t * const *ColumnTitles; + const wchar_t *StatusColumnTypes; + const wchar_t *StatusColumnWidths; + PANELMODE_FLAGS Flags; +}; + +typedef unsigned __int64 OPENPANELINFO_FLAGS; +static const OPENPANELINFO_FLAGS + OPIF_DISABLEFILTER = 0x0000000000000001ULL, + OPIF_DISABLESORTGROUPS = 0x0000000000000002ULL, + OPIF_DISABLEHIGHLIGHTING = 0x0000000000000004ULL, + OPIF_ADDDOTS = 0x0000000000000008ULL, + OPIF_RAWSELECTION = 0x0000000000000010ULL, + OPIF_REALNAMES = 0x0000000000000020ULL, + OPIF_SHOWNAMESONLY = 0x0000000000000040ULL, + OPIF_SHOWRIGHTALIGNNAMES = 0x0000000000000080ULL, + OPIF_SHOWPRESERVECASE = 0x0000000000000100ULL, + OPIF_COMPAREFATTIME = 0x0000000000000400ULL, + OPIF_EXTERNALGET = 0x0000000000000800ULL, + OPIF_EXTERNALPUT = 0x0000000000001000ULL, + OPIF_EXTERNALDELETE = 0x0000000000002000ULL, + OPIF_EXTERNALMKDIR = 0x0000000000004000ULL, + OPIF_USEATTRHIGHLIGHTING = 0x0000000000008000ULL, + OPIF_USECRC32 = 0x0000000000010000ULL, + OPIF_USEFREESIZE = 0x0000000000020000ULL, + OPIF_SHORTCUT = 0x0000000000040000ULL, + OPIF_NONE = 0; + +struct KeyBarLabel +{ + struct FarKey Key; + const wchar_t *Text; + const wchar_t *LongText; +}; + +struct KeyBarTitles +{ + size_t CountLabels; + struct KeyBarLabel *Labels; +}; + +struct FarSetKeyBarTitles +{ + size_t StructSize; + struct KeyBarTitles *Titles; +}; + +typedef unsigned __int64 OPERATION_MODES; +static const OPERATION_MODES + OPM_SILENT =0x0000000000000001ULL, + OPM_FIND =0x0000000000000002ULL, + OPM_VIEW =0x0000000000000004ULL, + OPM_EDIT =0x0000000000000008ULL, + OPM_TOPLEVEL =0x0000000000000010ULL, + OPM_DESCR =0x0000000000000020ULL, + OPM_QUICKVIEW =0x0000000000000040ULL, + OPM_PGDN =0x0000000000000080ULL, + OPM_COMMANDS =0x0000000000000100ULL, + OPM_NONE =0; + +struct OpenPanelInfo +{ + size_t StructSize; + HANDLE hPanel; + OPENPANELINFO_FLAGS Flags; + const wchar_t *HostFile; + const wchar_t *CurDir; + const wchar_t *Format; + const wchar_t *PanelTitle; + const struct InfoPanelLine *InfoLines; + size_t InfoLinesNumber; + const wchar_t * const *DescrFiles; + size_t DescrFilesNumber; + const struct PanelMode *PanelModesArray; + size_t PanelModesNumber; + intptr_t StartPanelMode; + enum OPENPANELINFO_SORTMODES StartSortMode; + intptr_t StartSortOrder; + const struct KeyBarTitles *KeyBar; + const wchar_t *ShortcutData; + unsigned __int64 FreeSize; +}; + +struct AnalyseInfo +{ + size_t StructSize; + const wchar_t *FileName; + void *Buffer; + size_t BufferSize; + OPERATION_MODES OpMode; +}; + +struct OpenAnalyseInfo +{ + size_t StructSize; + struct AnalyseInfo* Info; + HANDLE Handle; +}; + +struct OpenMacroInfo +{ + size_t StructSize; + size_t Count; + struct FarMacroValue *Values; +}; + +typedef unsigned __int64 FAROPENSHORTCUTFLAGS; +static const FAROPENSHORTCUTFLAGS + FOSF_ACTIVE = 0x0000000000000001ULL, + FOSF_NONE = 0; + +struct OpenShortcutInfo +{ + size_t StructSize; + const wchar_t *HostFile; + const wchar_t *ShortcutData; + FAROPENSHORTCUTFLAGS Flags; +}; + +struct OpenCommandLineInfo +{ + size_t StructSize; + const wchar_t *CommandLine; +}; + +enum OPENFROM +{ + OPEN_LEFTDISKMENU = 0, + OPEN_PLUGINSMENU = 1, + OPEN_FINDLIST = 2, + OPEN_SHORTCUT = 3, + OPEN_COMMANDLINE = 4, + OPEN_EDITOR = 5, + OPEN_VIEWER = 6, + OPEN_FILEPANEL = 7, + OPEN_DIALOG = 8, + OPEN_ANALYSE = 9, + OPEN_RIGHTDISKMENU = 10, + OPEN_FROMMACRO = 11, + OPEN_LUAMACRO = 100, +}; + +enum MACROCALLTYPE +{ + MCT_MACROINIT = 0, + MCT_MACROSTEP = 1, + MCT_MACROFINAL = 2, + MCT_MACROPARSE = 3, +}; + +struct OpenMacroPluginInfo +{ + size_t StructSize; + enum MACROCALLTYPE CallType; + HANDLE Handle; + struct FarMacroCall *Data; +}; + + +enum FAR_EVENTS +{ + FE_CHANGEVIEWMODE =0, + FE_REDRAW =1, + FE_IDLE =2, + FE_CLOSE =3, + FE_BREAK =4, + FE_COMMAND =5, + + FE_GOTFOCUS =6, + FE_KILLFOCUS =7, +}; + +struct OpenInfo +{ + size_t StructSize; + enum OPENFROM OpenFrom; + const GUID* Guid; + intptr_t Data; +}; + +struct SetDirectoryInfo +{ + size_t StructSize; + HANDLE hPanel; + const wchar_t *Dir; + intptr_t UserData; + OPERATION_MODES OpMode; +}; + +struct SetFindListInfo +{ + size_t StructSize; + HANDLE hPanel; + const struct PluginPanelItem *PanelItem; + size_t ItemsNumber; +}; + +struct PutFilesInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; + BOOL Move; + const wchar_t *SrcPath; + OPERATION_MODES OpMode; +}; + +struct ProcessHostFileInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; + OPERATION_MODES OpMode; +}; + +struct MakeDirectoryInfo +{ + size_t StructSize; + HANDLE hPanel; + const wchar_t *Name; + OPERATION_MODES OpMode; +}; + +struct CompareInfo +{ + size_t StructSize; + HANDLE hPanel; + const struct PluginPanelItem *Item1; + const struct PluginPanelItem *Item2; + enum OPENPANELINFO_SORTMODES Mode; +}; + +struct GetFindDataInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; + OPERATION_MODES OpMode; +}; + + +struct FreeFindDataInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; +}; + +struct GetFilesInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; + BOOL Move; + const wchar_t *DestPath; + OPERATION_MODES OpMode; +}; + +struct DeleteFilesInfo +{ + size_t StructSize; + HANDLE hPanel; + struct PluginPanelItem *PanelItem; + size_t ItemsNumber; + OPERATION_MODES OpMode; +}; + +struct ProcessPanelInputInfo +{ + size_t StructSize; + HANDLE hPanel; + INPUT_RECORD Rec; +}; + +struct ProcessEditorInputInfo +{ + size_t StructSize; + INPUT_RECORD Rec; +}; + +typedef unsigned __int64 PROCESSCONSOLEINPUT_FLAGS; +static const PROCESSCONSOLEINPUT_FLAGS + PCIF_FROMMAIN = 0x0000000000000001ULL, + PCIF_NONE = 0; + +struct ProcessConsoleInputInfo +{ + size_t StructSize; + PROCESSCONSOLEINPUT_FLAGS Flags; + INPUT_RECORD Rec; +}; + +struct ExitInfo +{ + size_t StructSize; +}; + +struct ProcessPanelEventInfo +{ + size_t StructSize; + intptr_t Event; + void* Param; + HANDLE hPanel; +}; + +struct ProcessEditorEventInfo +{ + size_t StructSize; + intptr_t Event; + void* Param; + intptr_t EditorID; +}; + +struct ProcessDialogEventInfo +{ + size_t StructSize; + intptr_t Event; + struct FarDialogEvent* Param; +}; + +struct ProcessSynchroEventInfo +{ + size_t StructSize; + intptr_t Event; + void* Param; +}; + +struct ProcessViewerEventInfo +{ + size_t StructSize; + intptr_t Event; + void* Param; + intptr_t ViewerID; +}; + +struct ClosePanelInfo +{ + size_t StructSize; + HANDLE hPanel; +}; + +struct CloseAnalyseInfo +{ + size_t StructSize; + HANDLE Handle; +}; + +struct ConfigureInfo +{ + size_t StructSize; + const GUID* Guid; +}; + +#ifdef __cplusplus +extern "C" +{ +#endif +// Exported Functions + + HANDLE WINAPI AnalyseW(const struct AnalyseInfo *Info); + void WINAPI CloseAnalyseW(const struct CloseAnalyseInfo *Info); + void WINAPI ClosePanelW(const struct ClosePanelInfo *Info); + intptr_t WINAPI CompareW(const struct CompareInfo *Info); + intptr_t WINAPI ConfigureW(const struct ConfigureInfo *Info); + intptr_t WINAPI DeleteFilesW(const struct DeleteFilesInfo *Info); + void WINAPI ExitFARW(const struct ExitInfo *Info); + void WINAPI FreeFindDataW(const struct FreeFindDataInfo *Info); + intptr_t WINAPI GetFilesW(struct GetFilesInfo *Info); + intptr_t WINAPI GetFindDataW(struct GetFindDataInfo *Info); + void WINAPI GetGlobalInfoW(struct GlobalInfo *Info); + void WINAPI GetOpenPanelInfoW(struct OpenPanelInfo *Info); + void WINAPI GetPluginInfoW(struct PluginInfo *Info); + intptr_t WINAPI MakeDirectoryW(struct MakeDirectoryInfo *Info); + HANDLE WINAPI OpenW(const struct OpenInfo *Info); + intptr_t WINAPI ProcessDialogEventW(const struct ProcessDialogEventInfo *Info); + intptr_t WINAPI ProcessEditorEventW(const struct ProcessEditorEventInfo *Info); + intptr_t WINAPI ProcessEditorInputW(const struct ProcessEditorInputInfo *Info); + intptr_t WINAPI ProcessPanelEventW(const struct ProcessPanelEventInfo *Info); + intptr_t WINAPI ProcessHostFileW(const struct ProcessHostFileInfo *Info); + intptr_t WINAPI ProcessPanelInputW(const struct ProcessPanelInputInfo *Info); + intptr_t WINAPI ProcessConsoleInputW(struct ProcessConsoleInputInfo *Info); + intptr_t WINAPI ProcessSynchroEventW(const struct ProcessSynchroEventInfo *Info); + intptr_t WINAPI ProcessViewerEventW(const struct ProcessViewerEventInfo *Info); + intptr_t WINAPI PutFilesW(const struct PutFilesInfo *Info); + intptr_t WINAPI SetDirectoryW(const struct SetDirectoryInfo *Info); + intptr_t WINAPI SetFindListW(const struct SetFindListInfo *Info); + void WINAPI SetStartupInfoW(const struct PluginStartupInfo *Info); + +#ifdef __cplusplus +}; +#endif + +#endif /* RC_INVOKED */ + +#endif /* __PLUGIN_HPP__ */ diff --git a/ClipCopy/src/unicode.bat b/ClipCopy/src/unicode.bat index 30b6395d..0f32f889 100644 --- a/ClipCopy/src/unicode.bat +++ b/ClipCopy/src/unicode.bat @@ -1,6 +1,7 @@ call vcvars32.bat @del ClipCopyW.dll -cl /O1i /GF /Gr /GR- /GX- /LD ClipCopy.cpp /D "UNICODE" /link /opt:nowin98 /out:ClipCopyW.dll /noentry /nodefaultlib /def:ClipCopy.def kernel32.lib user32.lib shell32.lib ole32.lib uuid.lib libc.lib +rem cl /O1i /GF /Gr /GR- /GX- /LD ClipCopy.cpp /D "UNICODE" /link /opt:nowin98 /out:ClipCopyW.dll /noentry /nodefaultlib /def:ClipCopy.def kernel32.lib user32.lib shell32.lib ole32.lib uuid.lib libc.lib +cl /O1i /GF /Gr /GR- /GX- /LD ClipCopy.cpp /D "UNICODE" /link /out:ClipCopyW.dll /noentry /nodefaultlib /def:ClipCopy.def kernel32.lib user32.lib shell32.lib ole32.lib uuid.lib libcmt.lib rem /merge:.rdata=.text rem /FAsc /Fa ClipCopy.asm /W4 /WX rem @copy ClipCopy.dll D:\TOOLS\FAR\Unicode\Plugins\ClipCopy\ClipCopyW.dll /Y