1 // FarPlugin.h 2 3 // #include "plugin.hpp" 4 5 const int kInfoPanelLineSize = 80; 6 7 // #define __FAR_PLUGIN_H 8 9 #ifdef UNDER_CE 10 typedef struct { 11 union { 12 WCHAR UnicodeChar; 13 CHAR AsciiChar; 14 } Char; 15 WORD Attributes; 16 } CHAR_INFO, *PCHAR_INFO; 17 #endif 18 19 #ifndef ZIP7_INC_FAR_PLUGIN_H 20 #define ZIP7_INC_FAR_PLUGIN_H 21 22 #ifndef _WIN64 23 #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) 24 #pragma option -a1 25 #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) 26 #pragma pack(1) 27 #else 28 #pragma pack(push,1) 29 #endif 30 #endif 31 32 // #if _MSC_VER 33 #define _export 34 // #endif 35 36 #define NM 260 37 38 struct FarFindData 39 { 40 DWORD dwFileAttributes; 41 FILETIME ftCreationTime; 42 FILETIME ftLastAccessTime; 43 FILETIME ftLastWriteTime; 44 DWORD nFileSizeHigh; 45 DWORD nFileSizeLow; 46 DWORD dwReserved0; 47 DWORD dwReserved1; 48 char cFileName[ MAX_PATH ]; 49 char cAlternateFileName[ 14 ]; 50 }; 51 52 struct PluginPanelItem 53 { 54 FarFindData FindData; 55 DWORD PackSizeHigh; 56 DWORD PackSize; 57 DWORD Flags; 58 DWORD NumberOfLinks; 59 char *Description; 60 char *Owner; 61 char **CustomColumnData; 62 int CustomColumnNumber; 63 DWORD_PTR UserData; 64 DWORD CRC32; 65 DWORD_PTR Reserved[2]; 66 }; 67 68 #define PPIF_PROCESSDESCR 0x80000000 69 #define PPIF_SELECTED 0x40000000 70 #define PPIF_USERDATA 0x20000000 71 72 enum { 73 FMENU_SHOWAMPERSAND=1, 74 FMENU_WRAPMODE=2, 75 FMENU_AUTOHIGHLIGHT=4, 76 FMENU_REVERSEAUTOHIGHLIGHT=8 77 }; 78 79 80 typedef int (WINAPI *FARAPIMENU)( 81 INT_PTR PluginNumber, 82 int X, 83 int Y, 84 int MaxHeight, 85 unsigned Flags, 86 char *Title, 87 char *Bottom, 88 char *HelpTopic, 89 int *BreakKeys, 90 int *BreakCode, 91 struct FarMenuItem *Item, 92 int ItemsNumber 93 ); 94 95 typedef int (WINAPI *FARAPIDIALOG)( 96 INT_PTR PluginNumber, 97 int X1, 98 int Y1, 99 int X2, 100 int Y2, 101 char *HelpTopic, 102 struct FarDialogItem *Item, 103 int ItemsNumber 104 ); 105 106 enum { 107 FMSG_WARNING = 0x00000001, 108 FMSG_ERRORTYPE = 0x00000002, 109 FMSG_KEEPBACKGROUND = 0x00000004, 110 FMSG_DOWN = 0x00000008, 111 FMSG_LEFTALIGN = 0x00000010, 112 113 FMSG_ALLINONE = 0x00000020, 114 115 FMSG_MB_OK = 0x00010000, 116 FMSG_MB_OKCANCEL = 0x00020000, 117 FMSG_MB_ABORTRETRYIGNORE = 0x00030000, 118 FMSG_MB_YESNO = 0x00040000, 119 FMSG_MB_YESNOCANCEL = 0x00050000, 120 FMSG_MB_RETRYCANCEL = 0x00060000 121 }; 122 123 typedef int (WINAPI *FARAPIMESSAGE)( 124 INT_PTR PluginNumber, 125 unsigned Flags, 126 const char *HelpTopic, 127 const char * const *Items, 128 int ItemsNumber, 129 int ButtonsNumber 130 ); 131 132 typedef char* (WINAPI *FARAPIGETMSG)( 133 INT_PTR PluginNumber, 134 int MsgId 135 ); 136 137 138 enum DialogItemTypes { 139 DI_TEXT, 140 DI_VTEXT, 141 DI_SINGLEBOX, 142 DI_DOUBLEBOX, 143 DI_EDIT, 144 DI_PSWEDIT, 145 DI_FIXEDIT, 146 DI_BUTTON, 147 DI_CHECKBOX, 148 DI_RADIOBUTTON 149 }; 150 151 enum FarDialogItemFlags { 152 DIF_COLORMASK = 0xff, 153 DIF_SETCOLOR = 0x100, 154 DIF_BOXCOLOR = 0x200, 155 DIF_GROUP = 0x400, 156 DIF_LEFTTEXT = 0x800, 157 DIF_MOVESELECT = 0x1000, 158 DIF_SHOWAMPERSAND = 0x2000, 159 DIF_CENTERGROUP = 0x4000, 160 DIF_NOBRACKETS = 0x8000, 161 DIF_SEPARATOR = 0x10000, 162 DIF_EDITOR = 0x20000, 163 DIF_HISTORY = 0x40000 164 }; 165 166 struct FarDialogItem 167 { 168 int Type; 169 int X1,Y1,X2,Y2; 170 int Focus; 171 union 172 { 173 int Selected; 174 const char *History; 175 const char *Mask; 176 struct FarList *ListItems; 177 int ListPos; 178 CHAR_INFO *VBuf; 179 }; 180 unsigned Flags; 181 int DefaultButton; 182 char Data[512]; 183 }; 184 185 186 struct FarMenuItem 187 { 188 char Text[128]; 189 int Selected; 190 int Checked; 191 int Separator; 192 }; 193 194 195 enum {FCTL_CLOSEPLUGIN,FCTL_GETPANELINFO,FCTL_GETANOTHERPANELINFO, 196 FCTL_UPDATEPANEL,FCTL_UPDATEANOTHERPANEL, 197 FCTL_REDRAWPANEL,FCTL_REDRAWANOTHERPANEL, 198 FCTL_SETANOTHERPANELDIR,FCTL_GETCMDLINE,FCTL_SETCMDLINE, 199 FCTL_SETSELECTION,FCTL_SETANOTHERSELECTION, 200 FCTL_SETVIEWMODE,FCTL_SETANOTHERVIEWMODE,FCTL_INSERTCMDLINE, 201 FCTL_SETUSERSCREEN,FCTL_SETPANELDIR,FCTL_SETCMDLINEPOS, 202 FCTL_GETCMDLINEPOS 203 }; 204 205 enum {PTYPE_FILEPANEL,PTYPE_TREEPANEL,PTYPE_QVIEWPANEL,PTYPE_INFOPANEL}; 206 207 struct PanelInfo 208 { 209 int PanelType; 210 int Plugin; 211 RECT PanelRect; 212 struct PluginPanelItem *PanelItems; 213 int ItemsNumber; 214 struct PluginPanelItem *SelectedItems; 215 int SelectedItemsNumber; 216 int CurrentItem; 217 int TopPanelItem; 218 int Visible; 219 int Focus; 220 int ViewMode; 221 char ColumnTypes[80]; 222 char ColumnWidths[80]; 223 char CurDir[NM]; 224 int ShortNames; 225 int SortMode; 226 DWORD Flags; 227 DWORD Reserved; 228 }; 229 230 231 struct PanelRedrawInfo 232 { 233 int CurrentItem; 234 int TopPanelItem; 235 }; 236 237 238 typedef int (WINAPI *FARAPICONTROL)( 239 HANDLE hPlugin, 240 int Command, 241 void *Param 242 ); 243 244 typedef HANDLE (WINAPI *FARAPISAVESCREEN)(int X1,int Y1,int X2,int Y2); 245 246 typedef void (WINAPI *FARAPIRESTORESCREEN)(HANDLE hScreen); 247 248 typedef int (WINAPI *FARAPIGETDIRLIST)( 249 char *Dir, 250 struct PluginPanelItem **pPanelItem, 251 int *pItemsNumber 252 ); 253 254 typedef int (WINAPI *FARAPIGETPLUGINDIRLIST)( 255 INT_PTR PluginNumber, 256 HANDLE hPlugin, 257 char *Dir, 258 struct PluginPanelItem **pPanelItem, 259 int *pItemsNumber 260 ); 261 262 typedef void (WINAPI *FARAPIFREEDIRLIST)(struct PluginPanelItem *PanelItem); 263 264 enum VIEWER_FLAGS { 265 VF_NONMODAL=1,VF_DELETEONCLOSE=2 266 }; 267 268 typedef int (WINAPI *FARAPIVIEWER)( 269 char *FileName, 270 char *Title, 271 int X1, 272 int Y1, 273 int X2, 274 int Y2, 275 DWORD Flags 276 ); 277 278 typedef int (WINAPI *FARAPIEDITOR)( 279 char *FileName, 280 char *Title, 281 int X1, 282 int Y1, 283 int X2, 284 int Y2, 285 DWORD Flags, 286 int StartLine, 287 int StartChar 288 ); 289 290 typedef int (WINAPI *FARAPICMPNAME)( 291 char *Pattern, 292 char *String, 293 int SkipPath 294 ); 295 296 297 #define FCT_DETECT 0x40000000 298 299 struct CharTableSet 300 { 301 char DecodeTable[256]; 302 char EncodeTable[256]; 303 char UpperTable[256]; 304 char LowerTable[256]; 305 char TableName[128]; 306 }; 307 308 typedef int (WINAPI *FARAPICHARTABLE)( 309 int Command, 310 char *Buffer, 311 int BufferSize 312 ); 313 314 typedef void (WINAPI *FARAPITEXT)( 315 int X, 316 int Y, 317 int Color, 318 char *Str 319 ); 320 321 322 typedef int (WINAPI *FARAPIEDITORCONTROL)( 323 int Command, 324 void *Param 325 ); 326 327 struct PluginStartupInfo 328 { 329 int StructSize; 330 char ModuleName[NM]; 331 INT_PTR ModuleNumber; 332 char *RootKey; 333 FARAPIMENU Menu; 334 FARAPIDIALOG Dialog; 335 FARAPIMESSAGE Message; 336 FARAPIGETMSG GetMsg; 337 FARAPICONTROL Control; 338 FARAPISAVESCREEN SaveScreen; 339 FARAPIRESTORESCREEN RestoreScreen; 340 FARAPIGETDIRLIST GetDirList; 341 FARAPIGETPLUGINDIRLIST GetPluginDirList; 342 FARAPIFREEDIRLIST FreeDirList; 343 FARAPIVIEWER Viewer; 344 FARAPIEDITOR Editor; 345 FARAPICMPNAME CmpName; 346 FARAPICHARTABLE CharTable; 347 FARAPITEXT Text; 348 FARAPIEDITORCONTROL EditorControl; 349 }; 350 351 352 enum PLUGIN_FLAGS { 353 PF_PRELOAD = 0x0001, 354 PF_DISABLEPANELS = 0x0002, 355 PF_EDITOR = 0x0004, 356 PF_VIEWER = 0x0008 357 }; 358 359 360 struct PluginInfo 361 { 362 int StructSize; 363 DWORD Flags; 364 char **DiskMenuStrings; 365 int *DiskMenuNumbers; 366 int DiskMenuStringsNumber; 367 char **PluginMenuStrings; 368 int PluginMenuStringsNumber; 369 char **PluginConfigStrings; 370 int PluginConfigStringsNumber; 371 char *CommandPrefix; 372 }; 373 374 struct InfoPanelLine 375 { 376 char Text[kInfoPanelLineSize]; 377 char Data[kInfoPanelLineSize]; 378 int Separator; 379 }; 380 381 382 struct PanelMode 383 { 384 char *ColumnTypes; 385 char *ColumnWidths; 386 char **ColumnTitles; 387 int FullScreen; 388 int DetailedStatus; 389 int AlignExtensions; 390 int CaseConversion; 391 char *StatusColumnTypes; 392 char *StatusColumnWidths; 393 DWORD Reserved[2]; 394 }; 395 396 397 enum OPENPLUGININFO_FLAGS { 398 OPIF_USEFILTER = 0x0001, 399 OPIF_USESORTGROUPS = 0x0002, 400 OPIF_USEHIGHLIGHTING = 0x0004, 401 OPIF_ADDDOTS = 0x0008, 402 OPIF_RAWSELECTION = 0x0010, 403 OPIF_REALNAMES = 0x0020, 404 OPIF_SHOWNAMESONLY = 0x0040, 405 OPIF_SHOWRIGHTALIGNNAMES = 0x0080, 406 OPIF_SHOWPRESERVECASE = 0x0100, 407 OPIF_FINDFOLDERS = 0x0200, 408 OPIF_COMPAREFATTIME = 0x0400, 409 OPIF_EXTERNALGET = 0x0800, 410 OPIF_EXTERNALPUT = 0x1000, 411 OPIF_EXTERNALDELETE = 0x2000, 412 OPIF_EXTERNALMKDIR = 0x4000, 413 OPIF_USEATTRHIGHLIGHTING = 0x8000 414 }; 415 416 417 enum OPENPLUGININFO_SORTMODES { 418 SM_DEFAULT,SM_UNSORTED,SM_NAME,SM_EXT,SM_MTIME,SM_CTIME, 419 SM_ATIME,SM_SIZE,SM_DESCR,SM_OWNER,SM_COMPRESSEDSIZE,SM_NUMLINKS 420 }; 421 422 423 struct KeyBarTitles 424 { 425 char *Titles[12]; 426 char *CtrlTitles[12]; 427 char *AltTitles[12]; 428 char *ShiftTitles[12]; 429 }; 430 431 432 struct OpenPluginInfo 433 { 434 int StructSize; 435 DWORD Flags; 436 const char *HostFile; 437 const char *CurDir; 438 const char *Format; 439 const char *PanelTitle; 440 const struct InfoPanelLine *InfoLines; 441 int InfoLinesNumber; 442 const char * const *DescrFiles; 443 int DescrFilesNumber; 444 const struct PanelMode *PanelModesArray; 445 int PanelModesNumber; 446 int StartPanelMode; 447 int StartSortMode; 448 int StartSortOrder; 449 const struct KeyBarTitles *KeyBar; 450 const char *ShortcutData; 451 // long Reserverd; 452 }; 453 454 enum { 455 OPEN_DISKMENU, 456 OPEN_PLUGINSMENU, 457 OPEN_FINDLIST, 458 OPEN_SHORTCUT, 459 OPEN_COMMANDLINE, 460 OPEN_EDITOR, 461 OPEN_VIEWER 462 }; 463 464 enum {PKF_CONTROL=1,PKF_ALT=2,PKF_SHIFT=4}; 465 466 enum FAR_EVENTS { 467 FE_CHANGEVIEWMODE, 468 FE_REDRAW, 469 FE_IDLE, 470 FE_CLOSE, 471 FE_BREAK, 472 FE_COMMAND 473 }; 474 475 enum OPERATION_MODES { 476 OPM_SILENT=1, 477 OPM_FIND=2, 478 OPM_VIEW=4, 479 OPM_EDIT=8, 480 OPM_TOPLEVEL=16, 481 OPM_DESCR=32 482 }; 483 484 #ifndef _WIN64 485 #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) 486 #pragma option -a. 487 #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) 488 #pragma pack() 489 #else 490 #pragma pack(pop) 491 #endif 492 #endif 493 494 /* 495 EXTERN_C_BEGIN 496 497 void WINAPI _export ClosePluginW(HANDLE hPlugin); 498 int WINAPI _export CompareW(HANDLE hPlugin,const struct PluginPanelItem *Item1,const struct PluginPanelItem *Item2,unsigned Mode); 499 int WINAPI _export ConfigureW(int ItemNumber); 500 int WINAPI _export DeleteFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); 501 void WINAPI _export ExitFARW(void); 502 void WINAPI _export FreeFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); 503 void WINAPI _export FreeVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); 504 int WINAPI _export GetFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,const wchar_t **DestPath,int OpMode); 505 int WINAPI _export GetFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,int OpMode); 506 int WINAPI _export GetMinFarVersionW(void); 507 void WINAPI _export GetOpenPluginInfoW(HANDLE hPlugin,struct OpenPluginInfo *Info); 508 void WINAPI _export GetPluginInfoW(struct PluginInfo *Info); 509 int WINAPI _export GetVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,const wchar_t *Path); 510 int WINAPI _export MakeDirectoryW(HANDLE hPlugin,const wchar_t **Name,int OpMode); 511 HANDLE WINAPI _export OpenFilePluginW(const wchar_t *Name,const unsigned char *Data,int DataSize,int OpMode); 512 HANDLE WINAPI _export OpenPluginW(int OpenFrom,INT_PTR Item); 513 int WINAPI _export ProcessDialogEventW(int Event,void *Param); 514 int WINAPI _export ProcessEditorEventW(int Event,void *Param); 515 int WINAPI _export ProcessEditorInputW(const INPUT_RECORD *Rec); 516 int WINAPI _export ProcessEventW(HANDLE hPlugin,int Event,void *Param); 517 int WINAPI _export ProcessHostFileW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); 518 int WINAPI _export ProcessKeyW(HANDLE hPlugin,int Key,unsigned ControlState); 519 int WINAPI _export ProcessSynchroEventW(int Event,void *Param); 520 int WINAPI _export ProcessViewerEventW(int Event,void *Param); 521 int WINAPI _export PutFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,const wchar_t *SrcPath,int OpMode); 522 int WINAPI _export SetDirectoryW(HANDLE hPlugin,const wchar_t *Dir,int OpMode); 523 int WINAPI _export SetFindListW(HANDLE hPlugin,const struct PluginPanelItem *PanelItem,int ItemsNumber); 524 void WINAPI _export SetStartupInfoW(const struct PluginStartupInfo *Info); 525 526 EXTERN_C_END 527 */ 528 EXTERN_C_BEGIN 529 530 void WINAPI _export ClosePlugin(HANDLE hPlugin); 531 int WINAPI _export Compare(HANDLE hPlugin,const struct PluginPanelItem *Item1,const struct PluginPanelItem *Item2,unsigned Mode); 532 int WINAPI _export Configure(int ItemNumber); 533 int WINAPI _export DeleteFiles(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); 534 void WINAPI _export ExitFAR(void); 535 void WINAPI _export FreeFindData(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); 536 void WINAPI _export FreeVirtualFindData(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); 537 int WINAPI _export GetFiles(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,char *DestPath,int OpMode); 538 int WINAPI _export GetFindData(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,int OpMode); 539 int WINAPI _export GetMinFarVersion(void); 540 void WINAPI _export GetOpenPluginInfo(HANDLE hPlugin,struct OpenPluginInfo *Info); 541 void WINAPI _export GetPluginInfo(struct PluginInfo *Info); 542 int WINAPI _export GetVirtualFindData(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,const char *Path); 543 int WINAPI _export MakeDirectory(HANDLE hPlugin,char *Name,int OpMode); 544 HANDLE WINAPI _export OpenFilePlugin(char *Name,const BYTE *Data,int DataSize); 545 HANDLE WINAPI _export OpenPlugin(int OpenFrom,INT_PTR Item); 546 int WINAPI _export ProcessDialogEvent(int Event,void *Param); 547 int WINAPI _export ProcessEditorEvent(int Event,void *Param); 548 int WINAPI _export ProcessEditorInput(const INPUT_RECORD *Rec); 549 int WINAPI _export ProcessEvent(HANDLE hPlugin,int Event,void *Param); 550 int WINAPI _export ProcessHostFile(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); 551 int WINAPI _export ProcessKey(HANDLE hPlugin,int Key,unsigned ControlState); 552 int WINAPI _export ProcessViewerEvent(int Event,void *Param); 553 int WINAPI _export PutFiles(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,int OpMode); 554 int WINAPI _export SetDirectory(HANDLE hPlugin,const char *Dir,int OpMode); 555 int WINAPI _export SetFindList(HANDLE hPlugin,const struct PluginPanelItem *PanelItem,int ItemsNumber); 556 void WINAPI _export SetStartupInfo(const struct PluginStartupInfo *Info); 557 558 EXTERN_C_END 559 560 #endif 561