// FarPlugin.h #ifndef __FARPLUGIN_H #define __FARPLUGIN_H #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) #pragma option -a1 #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) #pragma pack(1) #else #pragma pack(push,1) #if _MSC_VER #define _export #endif #endif #define NM 260 struct FarFindData { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; char cFileName[ MAX_PATH ]; char cAlternateFileName[ 14 ]; }; struct PluginPanelItem { FarFindData FindData; DWORD PackSizeHigh; DWORD PackSize; DWORD Flags; DWORD NumberOfLinks; char *Description; char *Owner; char **CustomColumnData; int CustomColumnNumber; DWORD UserData; DWORD Reserved[3]; }; #define PPIF_PROCESSDESCR 0x80000000 #define PPIF_SELECTED 0x40000000 #define PPIF_USERDATA 0x20000000 enum { FMENU_SHOWAMPERSAND=1, FMENU_WRAPMODE=2, FMENU_AUTOHIGHLIGHT=4, FMENU_REVERSEAUTOHIGHLIGHT=8 }; typedef int (WINAPI *FARAPIMENU)( int PluginNumber, int X, int Y, int MaxHeight, unsigned int Flags, char *Title, char *Bottom, char *HelpTopic, int *BreakKeys, int *BreakCode, struct FarMenuItem *Item, int ItemsNumber ); typedef int (WINAPI *FARAPIDIALOG)( int PluginNumber, int X1, int Y1, int X2, int Y2, char *HelpTopic, struct FarDialogItem *Item, int ItemsNumber ); enum { FMSG_WARNING=1, FMSG_ERRORTYPE=2, FMSG_KEEPBACKGROUND=4, FMSG_DOWN=8, FMSG_LEFTALIGN=16 }; typedef int (WINAPI *FARAPIMESSAGE)( int PluginNumber, unsigned int Flags, char *HelpTopic, char **Items, int ItemsNumber, int ButtonsNumber ); typedef char* (WINAPI *FARAPIGETMSG)( int PluginNumber, int MsgId ); enum DialogItemTypes { DI_TEXT, DI_VTEXT, DI_SINGLEBOX, DI_DOUBLEBOX, DI_EDIT, DI_PSWEDIT, DI_FIXEDIT, DI_BUTTON, DI_CHECKBOX, DI_RADIOBUTTON }; enum FarDialogItemFlags { DIF_COLORMASK = 0xff, DIF_SETCOLOR = 0x100, DIF_BOXCOLOR = 0x200, DIF_GROUP = 0x400, DIF_LEFTTEXT = 0x800, DIF_MOVESELECT = 0x1000, DIF_SHOWAMPERSAND = 0x2000, DIF_CENTERGROUP = 0x4000, DIF_NOBRACKETS = 0x8000, DIF_SEPARATOR = 0x10000, DIF_EDITOR = 0x20000, DIF_HISTORY = 0x40000 }; struct FarDialogItem { int Type; int X1,Y1,X2,Y2; int Focus; union { int Selected; const char *History; const char *Mask; struct FarList *ListItems; int ListPos; CHAR_INFO *VBuf; }; unsigned int Flags; int DefaultButton; char Data[512]; }; struct FarMenuItem { char Text[128]; int Selected; int Checked; int Separator; }; enum {FCTL_CLOSEPLUGIN,FCTL_GETPANELINFO,FCTL_GETANOTHERPANELINFO, FCTL_UPDATEPANEL,FCTL_UPDATEANOTHERPANEL, FCTL_REDRAWPANEL,FCTL_REDRAWANOTHERPANEL, FCTL_SETANOTHERPANELDIR,FCTL_GETCMDLINE,FCTL_SETCMDLINE, FCTL_SETSELECTION,FCTL_SETANOTHERSELECTION, FCTL_SETVIEWMODE,FCTL_SETANOTHERVIEWMODE,FCTL_INSERTCMDLINE, FCTL_SETUSERSCREEN,FCTL_SETPANELDIR,FCTL_SETCMDLINEPOS, FCTL_GETCMDLINEPOS }; enum {PTYPE_FILEPANEL,PTYPE_TREEPANEL,PTYPE_QVIEWPANEL,PTYPE_INFOPANEL}; struct PanelInfo { int PanelType; int Plugin; RECT PanelRect; struct PluginPanelItem *PanelItems; int ItemsNumber; struct PluginPanelItem *SelectedItems; int SelectedItemsNumber; int CurrentItem; int TopPanelItem; int Visible; int Focus; int ViewMode; char ColumnTypes[80]; char ColumnWidths[80]; char CurDir[NM]; int ShortNames; int SortMode; DWORD Reserved[2]; }; struct PanelRedrawInfo { int CurrentItem; int TopPanelItem; }; typedef int (WINAPI *FARAPICONTROL)( HANDLE hPlugin, int Command, void *Param ); typedef HANDLE (WINAPI *FARAPISAVESCREEN)(int X1,int Y1,int X2,int Y2); typedef void (WINAPI *FARAPIRESTORESCREEN)(HANDLE hScreen); typedef int (WINAPI *FARAPIGETDIRLIST)( char *Dir, struct PluginPanelItem **pPanelItem, int *pItemsNumber ); typedef int (WINAPI *FARAPIGETPLUGINDIRLIST)( int PluginNumber, HANDLE hPlugin, char *Dir, struct PluginPanelItem **pPanelItem, int *pItemsNumber ); typedef void (WINAPI *FARAPIFREEDIRLIST)(struct PluginPanelItem *PanelItem); enum VIEWER_FLAGS { VF_NONMODAL=1,VF_DELETEONCLOSE=2 }; typedef int (WINAPI *FARAPIVIEWER)( char *FileName, char *Title, int X1, int Y1, int X2, int Y2, DWORD Flags ); typedef int (WINAPI *FARAPIEDITOR)( char *FileName, char *Title, int X1, int Y1, int X2, int Y2, DWORD Flags, int StartLine, int StartChar ); typedef int (WINAPI *FARAPICMPNAME)( char *Pattern, char *String, int SkipPath ); #define FCT_DETECT 0x40000000 struct CharTableSet { char DecodeTable[256]; char EncodeTable[256]; char UpperTable[256]; char LowerTable[256]; char TableName[128]; }; typedef int (WINAPI *FARAPICHARTABLE)( int Command, char *Buffer, int BufferSize ); typedef void (WINAPI *FARAPITEXT)( int X, int Y, int Color, char *Str ); typedef int (WINAPI *FARAPIEDITORCONTROL)( int Command, void *Param ); enum EDITOR_EVENTS { EE_READ,EE_SAVE,EE_REDRAW,EE_CLOSE }; 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_EDITORTOOEM,ECTL_OEMTOEDITOR, ECTL_TABTOREAL,ECTL_REALTOTAB,ECTL_EXPANDTABS,ECTL_SETTITLE, ECTL_READINPUT,ECTL_PROCESSINPUT,ECTL_ADDCOLOR,ECTL_GETCOLOR }; struct EditorGetString { int StringNumber; char *StringText; char *StringEOL; int StringLength; int SelStart; int SelEnd; }; struct EditorSetString { int StringNumber; char *StringText; char *StringEOL; int StringLength; }; enum EDITOR_OPTIONS { EOPT_EXPANDTABS=1,EOPT_PERSISTENTBLOCKS=2,EOPT_DELREMOVESBLOCKS=4, EOPT_AUTOINDENT=8,EOPT_SAVEFILEPOSITION=16,EOPT_AUTODETECTTABLE=32, EOPT_CURSORBEYONDEOL=64 }; enum EDITOR_BLOCK_TYPES { BTYPE_NONE,BTYPE_STREAM,BTYPE_COLUMN }; struct EditorInfo { int EditorID; char *FileName; int WindowSizeX; int WindowSizeY; int TotalLines; int CurLine; int CurPos; int CurTabPos; int TopScreenLine; int LeftPos; int Overtype; int BlockType; int BlockStartLine; int AnsiMode; int TableNum; DWORD Options; int TabSize; DWORD Reserved[8]; }; 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 EditorConvertText { char *Text; int TextLength; }; struct EditorConvertPos { int StringNumber; int SrcPos; int DestPos; }; struct EditorColor { int StringNumber; int ColorItem; int StartPos; int EndPos; int Color; }; struct PluginStartupInfo { int StructSize; char ModuleName[NM]; int ModuleNumber; char *RootKey; FARAPIMENU Menu; FARAPIDIALOG Dialog; FARAPIMESSAGE Message; FARAPIGETMSG GetMsg; FARAPICONTROL Control; FARAPISAVESCREEN SaveScreen; FARAPIRESTORESCREEN RestoreScreen; FARAPIGETDIRLIST GetDirList; FARAPIGETPLUGINDIRLIST GetPluginDirList; FARAPIFREEDIRLIST FreeDirList; FARAPIVIEWER Viewer; FARAPIEDITOR Editor; FARAPICMPNAME CmpName; FARAPICHARTABLE CharTable; FARAPITEXT Text; FARAPIEDITORCONTROL EditorControl; }; enum PLUGIN_FLAGS { PF_PRELOAD = 0x0001, PF_DISABLEPANELS = 0x0002, PF_EDITOR = 0x0004, PF_VIEWER = 0x0008 }; struct PluginInfo { int StructSize; DWORD Flags; char **DiskMenuStrings; int *DiskMenuNumbers; int DiskMenuStringsNumber; char **PluginMenuStrings; int PluginMenuStringsNumber; char **PluginConfigStrings; int PluginConfigStringsNumber; char *CommandPrefix; }; const int kInfoPanelLineSize = 80; struct InfoPanelLine { char Text[kInfoPanelLineSize]; char Data[kInfoPanelLineSize]; int Separator; }; struct PanelMode { char *ColumnTypes; char *ColumnWidths; char **ColumnTitles; int FullScreen; int DetailedStatus; int AlignExtensions; int CaseConversion; char *StatusColumnTypes; char *StatusColumnWidths; DWORD Reserved[2]; }; enum OPENPLUGININFO_FLAGS { OPIF_USEFILTER = 0x0001, OPIF_USESORTGROUPS = 0x0002, OPIF_USEHIGHLIGHTING = 0x0004, OPIF_ADDDOTS = 0x0008, OPIF_RAWSELECTION = 0x0010, OPIF_REALNAMES = 0x0020, OPIF_SHOWNAMESONLY = 0x0040, OPIF_SHOWRIGHTALIGNNAMES = 0x0080, OPIF_SHOWPRESERVECASE = 0x0100, OPIF_FINDFOLDERS = 0x0200, OPIF_COMPAREFATTIME = 0x0400, OPIF_EXTERNALGET = 0x0800, OPIF_EXTERNALPUT = 0x1000, OPIF_EXTERNALDELETE = 0x2000, OPIF_EXTERNALMKDIR = 0x4000, OPIF_USEATTRHIGHLIGHTING = 0x8000 }; 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 { char *Titles[12]; char *CtrlTitles[12]; char *AltTitles[12]; char *ShiftTitles[12]; }; struct OpenPluginInfo { int StructSize; DWORD Flags; char *HostFile; char *CurDir; char *Format; char *PanelTitle; struct InfoPanelLine *InfoLines; int InfoLinesNumber; char **DescrFiles; int DescrFilesNumber; struct PanelMode *PanelModesArray; int PanelModesNumber; int StartPanelMode; int StartSortMode; int StartSortOrder; struct KeyBarTitles *KeyBar; char *ShortcutData; }; enum { OPEN_DISKMENU, OPEN_PLUGINSMENU, OPEN_FINDLIST, OPEN_SHORTCUT, OPEN_COMMANDLINE, OPEN_EDITOR, OPEN_VIEWER }; enum {PKF_CONTROL=1,PKF_ALT=2,PKF_SHIFT=4}; enum FAR_EVENTS { FE_CHANGEVIEWMODE, FE_REDRAW, FE_IDLE, FE_CLOSE, FE_BREAK, FE_COMMAND }; enum OPERATION_MODES { OPM_SILENT=1, OPM_FIND=2, OPM_VIEW=4, OPM_EDIT=8, OPM_TOPLEVEL=16, OPM_DESCR=32 }; #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) #pragma option -a. #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) #pragma pack() #else #pragma pack(pop) #endif #endif