1 /*
2   Plugin API for Far Manager 3.0 build 5445
3   License: Public Domain
4 */
5 
6 module farplugin;
7 
8 import std.stdint;
9 import core.sys.windows.windows;
10 
11 const FARMANAGERVERSION_MAJOR = 3;
12 const FARMANAGERVERSION_MINOR = 0;
13 const FARMANAGERVERSION_REVISION = 0;
14 const FARMANAGERVERSION_BUILD = 5445;
15 const FARMANAGERVERSION_STAGE = VERSION_STAGE.VS_RELEASE;
16 
17 const CP_UNICODE    = cast(uintptr_t)1200;
18 const CP_REVERSEBOM = cast(uintptr_t)1201;
19 const CP_DEFAULT    = cast(uintptr_t)-1;
20 const CP_REDETECT   = cast(uintptr_t)-2;
21 
22 alias FARCOLORFLAGS = ulong;
23 const FARCOLORFLAGS
24     FCF_FG_4BIT = 0x0000000000000001UL,
25     FCF_BG_4BIT = 0x0000000000000002UL,
26     FCF_4BITMASK = FCF_FG_4BIT|FCF_BG_4BIT, // 0x0000000000000003UL
27 
28     FCF_RAWATTR_MASK = 0x000000000000FF00UL, // stored console attributes
29 
30     FCF_EXTENDEDFLAGS = ~FCF_4BITMASK, // 0xFFFFFFFFFFFFFFFCUL
31     FCF_FG_BOLD = 0x1000000000000000UL,
32     FCF_FG_ITALIC = 0x2000000000000000UL,
33     FCF_FG_UNDERLINE = 0x4000000000000000UL,
34     FCF_STYLEMASK = FCF_FG_BOLD|FCF_FG_ITALIC|FCF_FG_UNDERLINE, // 0x7000000000000000UL
35     FCF_NONE = 0UL;
36 
37 struct rgba { byte r, g, b, a; }
38 
39 struct FarColor
40 {
41     FARCOLORFLAGS Flags;
42     union
43     {
44         COLORREF ForegroundColor;
45         rgba ForegroundRGBA;
46     }
47     union
48     {
49         COLORREF BackgroundColor;
50         rgba BackgroundRGBA;
51     }
52     void* Reserved;
53 
54     bool IsBg4Bit() const
55     {
56         return (Flags & FCF_BG_4BIT) != 0;
57     }
58 
59     bool IsFg4Bit() const
60     {
61         return (Flags & FCF_FG_4BIT) != 0;
62     }
63 
64     FarColor SetBg4Bit(bool Value)
65     {
66         Value? Flags |= FCF_BG_4BIT : (Flags &= ~FCF_BG_4BIT);
67         return this;
68     }
69 
70     FarColor SetFg4Bit(bool Value)
71     {
72         Value? Flags |= FCF_FG_4BIT : (Flags &= ~FCF_FG_4BIT);
73         return this;
74     }
75 }
76 
77 const INDEXMASK = 0x0000000F;
78 const COLORMASK = 0x00FFFFFF;
79 const ALPHAMASK = 0xFF000000;
80 
81 auto INDEXVALUE(ARG1)(ARG1 x) { return ((x)&INDEXMASK); }
82 auto COLORVALUE(ARG1)(ARG1 x) { return ((x)&COLORMASK); }
83 auto ALPHAVALUE(ARG1)(ARG1 x) { return ((x)&ALPHAMASK); }
84 
85 auto IS_OPAQUE(ARG1)(ARG1 x) { return (ALPHAVALUE(x)==ALPHAMASK); }
86 auto IS_TRANSPARENT(ARG1)(ARG1 x) { return (!ALPHAVALUE(x)); }
87 void MAKE_OPAQUE(ARG1)(ref ARG1 x) { (x|=ALPHAMASK); }
88 void MAKE_TRANSPARENT(ARG1)(ref ARG1 x) { (x&=COLORMASK); }
89 
90 alias COLORDIALOGFLAGS = ulong;
91 const COLORDIALOGFLAGS CDF_NONE = 0UL;
92 
93 alias FARAPICOLORDIALOG = extern (Windows) BOOL function(
94     in GUID* PluginId,
95     COLORDIALOGFLAGS Flags,
96     FarColor* Color);
97 
98 alias FARMESSAGEFLAGS = ulong;
99 const FARMESSAGEFLAGS
100     FMSG_WARNING             = 0x0000000000000001UL,
101     FMSG_ERRORTYPE           = 0x0000000000000002UL,
102     FMSG_KEEPBACKGROUND      = 0x0000000000000004UL,
103     FMSG_LEFTALIGN           = 0x0000000000000008UL,
104     FMSG_ALLINONE            = 0x0000000000000010UL,
105     FMSG_MB_OK               = 0x0000000000010000UL,
106     FMSG_MB_OKCANCEL         = 0x0000000000020000UL,
107     FMSG_MB_ABORTRETRYIGNORE = 0x0000000000030000UL,
108     FMSG_MB_YESNO            = 0x0000000000040000UL,
109     FMSG_MB_YESNOCANCEL      = 0x0000000000050000UL,
110     FMSG_MB_RETRYCANCEL      = 0x0000000000060000UL,
111     FMSG_NONE                = 0UL;
112 
113 alias FARAPIMESSAGE = extern (Windows) intptr_t function(
114     in GUID* PluginId,
115     in GUID* Id,
116     FARMESSAGEFLAGS Flags,
117     in wchar* HelpTopic,
118     in wchar** Items,
119     size_t ItemsNumber,
120     intptr_t ButtonsNumber);
121 
122 enum FARDIALOGITEMTYPES
123 {
124     DI_TEXT                         =  0,
125     DI_VTEXT                        =  1,
126     DI_SINGLEBOX                    =  2,
127     DI_DOUBLEBOX                    =  3,
128     DI_EDIT                         =  4,
129     DI_PSWEDIT                      =  5,
130     DI_FIXEDIT                      =  6,
131     DI_BUTTON                       =  7,
132     DI_CHECKBOX                     =  8,
133     DI_RADIOBUTTON                  =  9,
134     DI_COMBOBOX                     = 10,
135     DI_LISTBOX                      = 11,
136 
137     DI_USERCONTROL                  =255,
138 }
139 
140 /*
141    Check diagol element type has inputstring?
142    (DI_EDIT, DI_FIXEDIT, DI_PSWEDIT, etc)
143 */
144 BOOL  IsEdit(FARDIALOGITEMTYPES Type)
145 {
146     with (FARDIALOGITEMTYPES)
147         switch (Type)
148         {
149             case DI_EDIT:
150             case DI_FIXEDIT:
151             case DI_PSWEDIT:
152             case DI_COMBOBOX:
153                 return TRUE;
154             default:
155                 return FALSE;
156         }
157 }
158 
159 alias FARDIALOGITEMFLAGS = ulong;
160 const FARDIALOGITEMFLAGS
161     DIF_BOXCOLOR              = 0x0000000000000200UL,
162     DIF_GROUP                 = 0x0000000000000400UL,
163     DIF_LEFTTEXT              = 0x0000000000000800UL,
164     DIF_MOVESELECT            = 0x0000000000001000UL,
165     DIF_SHOWAMPERSAND         = 0x0000000000002000UL,
166     DIF_CENTERGROUP           = 0x0000000000004000UL,
167     DIF_NOBRACKETS            = 0x0000000000008000UL,
168     DIF_MANUALADDHISTORY      = 0x0000000000008000UL,
169     DIF_SEPARATOR             = 0x0000000000010000UL,
170     DIF_SEPARATOR2            = 0x0000000000020000UL,
171     DIF_EDITOR                = 0x0000000000020000UL,
172     DIF_LISTNOAMPERSAND       = 0x0000000000020000UL,
173     DIF_LISTNOBOX             = 0x0000000000040000UL,
174     DIF_HISTORY               = 0x0000000000040000UL,
175     DIF_BTNNOCLOSE            = 0x0000000000040000UL,
176     DIF_CENTERTEXT            = 0x0000000000040000UL,
177     DIF_SEPARATORUSER         = 0x0000000000080000UL,
178     DIF_SETSHIELD             = 0x0000000000080000UL,
179     DIF_EDITEXPAND            = 0x0000000000080000UL,
180     DIF_DROPDOWNLIST          = 0x0000000000100000UL,
181     DIF_USELASTHISTORY        = 0x0000000000200000UL,
182     DIF_MASKEDIT              = 0x0000000000400000UL,
183     DIF_LISTTRACKMOUSE        = 0x0000000000400000UL,
184     DIF_LISTTRACKMOUSEINFOCUS = 0x0000000000800000UL,
185     DIF_SELECTONENTRY         = 0x0000000000800000UL,
186     DIF_3STATE                = 0x0000000000800000UL,
187     DIF_EDITPATH              = 0x0000000001000000UL,
188     DIF_LISTWRAPMODE          = 0x0000000001000000UL,
189     DIF_NOAUTOCOMPLETE        = 0x0000000002000000UL,
190     DIF_LISTAUTOHIGHLIGHT     = 0x0000000002000000UL,
191     DIF_LISTNOCLOSE           = 0x0000000004000000UL,
192     DIF_EDITPATHEXEC          = 0x0000000004000000UL,
193     DIF_HIDDEN                = 0x0000000010000000UL,
194     DIF_READONLY              = 0x0000000020000000UL,
195     DIF_NOFOCUS               = 0x0000000040000000UL,
196     DIF_DISABLE               = 0x0000000080000000UL,
197     DIF_DEFAULTBUTTON         = 0x0000000100000000UL,
198     DIF_FOCUS                 = 0x0000000200000000UL,
199     DIF_RIGHTTEXT             = 0x0000000400000000UL,
200     DIF_WORDWRAP              = 0x0000000800000000UL,
201     DIF_NONE                  = 0UL;
202 
203 enum FARMESSAGE
204 {
205     DM_FIRST                        = 0,
206     DM_CLOSE                        = 1,
207     DM_ENABLE                       = 2,
208     DM_ENABLEREDRAW                 = 3,
209     DM_GETDLGDATA                   = 4,
210     DM_GETDLGITEM                   = 5,
211     DM_GETDLGRECT                   = 6,
212     DM_GETTEXT                      = 7,
213     DM_KEY                          = 9,
214     DM_MOVEDIALOG                   = 10,
215     DM_SETDLGDATA                   = 11,
216     DM_SETDLGITEM                   = 12,
217     DM_SETFOCUS                     = 13,
218     DM_REDRAW                       = 14,
219     DM_SETTEXT                      = 15,
220     DM_SETMAXTEXTLENGTH             = 16,
221     DM_SHOWDIALOG                   = 17,
222     DM_GETFOCUS                     = 18,
223     DM_GETCURSORPOS                 = 19,
224     DM_SETCURSORPOS                 = 20,
225     DM_SETTEXTPTR                   = 22,
226     DM_SHOWITEM                     = 23,
227     DM_ADDHISTORY                   = 24,
228 
229     DM_GETCHECK                     = 25,
230     DM_SETCHECK                     = 26,
231     DM_SET3STATE                    = 27,
232 
233     DM_LISTSORT                     = 28,
234     DM_LISTGETITEM                  = 29,
235     DM_LISTGETCURPOS                = 30,
236     DM_LISTSETCURPOS                = 31,
237     DM_LISTDELETE                   = 32,
238     DM_LISTADD                      = 33,
239     DM_LISTADDSTR                   = 34,
240     DM_LISTUPDATE                   = 35,
241     DM_LISTINSERT                   = 36,
242     DM_LISTFINDSTRING               = 37,
243     DM_LISTINFO                     = 38,
244     DM_LISTGETDATA                  = 39,
245     DM_LISTSETDATA                  = 40,
246     DM_LISTSETTITLES                = 41,
247     DM_LISTGETTITLES                = 42,
248 
249     DM_RESIZEDIALOG                 = 43,
250     DM_SETITEMPOSITION              = 44,
251 
252     DM_GETDROPDOWNOPENED            = 45,
253     DM_SETDROPDOWNOPENED            = 46,
254 
255     DM_SETHISTORY                   = 47,
256 
257     DM_GETITEMPOSITION              = 48,
258     DM_SETINPUTNOTIFY               = 49,
259     DM_SETMOUSEEVENTNOTIFY          = DM_SETINPUTNOTIFY,
260 
261     DM_EDITUNCHANGEDFLAG            = 50,
262 
263     DM_GETITEMDATA                  = 51,
264     DM_SETITEMDATA                  = 52,
265 
266     DM_LISTSET                      = 53,
267 
268     DM_GETCURSORSIZE                = 54,
269     DM_SETCURSORSIZE                = 55,
270 
271     DM_LISTGETDATASIZE              = 56,
272 
273     DM_GETSELECTION                 = 57,
274     DM_SETSELECTION                 = 58,
275 
276     DM_GETEDITPOSITION              = 59,
277     DM_SETEDITPOSITION              = 60,
278 
279     DM_SETCOMBOBOXEVENT             = 61,
280     DM_GETCOMBOBOXEVENT             = 62,
281 
282     DM_GETCONSTTEXTPTR              = 63,
283     DM_GETDLGITEMSHORT              = 64,
284     DM_SETDLGITEMSHORT              = 65,
285 
286     DM_GETDIALOGINFO                = 66,
287 
288     DM_GETDIALOGTITLE               = 67,
289 
290     DN_FIRST                        = 4096,
291     DN_BTNCLICK                     = 4097,
292     DN_CTLCOLORDIALOG               = 4098,
293     DN_CTLCOLORDLGITEM              = 4099,
294     DN_CTLCOLORDLGLIST              = 4100,
295     DN_DRAWDIALOG                   = 4101,
296     DN_DRAWDLGITEM                  = 4102,
297     DN_EDITCHANGE                   = 4103,
298     DN_ENTERIDLE                    = 4104,
299     DN_GOTFOCUS                     = 4105,
300     DN_HELP                         = 4106,
301     DN_HOTKEY                       = 4107,
302     DN_INITDIALOG                   = 4108,
303     DN_KILLFOCUS                    = 4109,
304     DN_LISTCHANGE                   = 4110,
305     DN_DRAGGED                      = 4111,
306     DN_RESIZECONSOLE                = 4112,
307     DN_DRAWDIALOGDONE               = 4113,
308     DN_LISTHOTKEY                   = 4114,
309     DN_INPUT                        = 4115,
310     DN_CONTROLINPUT                 = 4116,
311     DN_CLOSE                        = 4117,
312     DN_GETVALUE                     = 4118,
313     DN_DROPDOWNOPENED               = 4119,
314     DN_DRAWDLGITEMDONE              = 4120,
315 
316     DM_USER                         = 0x4000,
317 }
318 
319 enum FARCHECKEDSTATE
320 {
321     BSTATE_UNCHECKED = 0,
322     BSTATE_CHECKED   = 1,
323     BSTATE_3STATE    = 2,
324     BSTATE_TOGGLE    = 3,
325 }
326 
327 enum FARCOMBOBOXEVENTTYPE
328 {
329     CBET_KEY         = 0x00000001,
330     CBET_MOUSE       = 0x00000002,
331 }
332 
333 alias LISTITEMFLAGS = ulong;
334 const LISTITEMFLAGS
335     LIF_SELECTED           = 0x0000000000010000UL,
336     LIF_CHECKED            = 0x0000000000020000UL,
337     LIF_SEPARATOR          = 0x0000000000040000UL,
338     LIF_DISABLE            = 0x0000000000080000UL,
339     LIF_GRAYED             = 0x0000000000100000UL,
340     LIF_HIDDEN             = 0x0000000000200000UL,
341     LIF_DELETEUSERDATA     = 0x0000000080000000UL,
342     LIF_NONE               = 0UL;
343 
344 struct FarListItem
345 {
346     LISTITEMFLAGS Flags;
347     const(wchar)* Text;
348     intptr_t UserData;
349     intptr_t Reserved;
350 }
351 
352 struct FarListUpdate
353 {
354     size_t StructSize;
355     intptr_t Index;
356     FarListItem Item;
357 }
358 
359 struct FarListInsert
360 {
361     size_t StructSize;
362     intptr_t Index;
363     FarListItem Item;
364 }
365 
366 struct FarListGetItem
367 {
368     size_t StructSize;
369     intptr_t ItemIndex;
370     FarListItem Item;
371 }
372 
373 struct FarListPos
374 {
375     size_t StructSize;
376     intptr_t SelectPos;
377     intptr_t TopPos;
378 }
379 
380 alias FARLISTFINDFLAGS = ulong;
381 const FARLISTFINDFLAGS
382     LIFIND_EXACTMATCH = 0x0000000000000001UL,
383     LIFIND_NONE       = 0UL;
384 
385 struct FarListFind
386 {
387     size_t StructSize;
388     intptr_t StartIndex;
389     const(wchar)* Pattern;
390     FARLISTFINDFLAGS Flags;
391 }
392 
393 struct FarListDelete
394 {
395     size_t StructSize;
396     intptr_t StartIndex;
397     intptr_t Count;
398 }
399 
400 alias FARLISTINFOFLAGS = ulong;
401 const FARLISTINFOFLAGS
402     LINFO_SHOWNOBOX             = 0x0000000000000400UL,
403     LINFO_AUTOHIGHLIGHT         = 0x0000000000000800UL,
404     LINFO_REVERSEHIGHLIGHT      = 0x0000000000001000UL,
405     LINFO_WRAPMODE              = 0x0000000000008000UL,
406     LINFO_SHOWAMPERSAND         = 0x0000000000010000UL,
407     LINFO_NONE                  = 0UL;
408 
409 struct FarListInfo
410 {
411     size_t StructSize;
412     FARLISTINFOFLAGS Flags;
413     size_t ItemsNumber;
414     intptr_t SelectPos;
415     intptr_t TopPos;
416     intptr_t MaxHeight;
417     intptr_t MaxLength;
418 }
419 
420 struct FarListItemData
421 {
422     size_t StructSize;
423     intptr_t Index;
424     size_t DataSize;
425     void* Data;
426 }
427 
428 struct FarList
429 {
430     size_t StructSize;
431     size_t ItemsNumber;
432     FarListItem* Items;
433 }
434 
435 struct FarListTitles
436 {
437     size_t StructSize;
438     size_t TitleSize;
439     const(wchar)* Title;
440     size_t BottomSize;
441     const(wchar)* Bottom;
442 }
443 
444 struct FarDialogItemColors
445 {
446     size_t StructSize;
447     ulong Flags;
448     size_t ColorsCount;
449     FarColor* Colors;
450 }
451 
452 struct FAR_CHAR_INFO
453 {
454     wchar Char;
455     FarColor Attributes;
456 
457     static FAR_CHAR_INFO make(wchar Char, in FarColor Attributes)
458     {
459         return FAR_CHAR_INFO(Char, cast(FarColor) Attributes);
460     }
461 }
462 
463 struct FarDialogItem
464 {
465     FARDIALOGITEMTYPES Type;
466     intptr_t X1,Y1,X2,Y2;
467     union
468     {
469         intptr_t Selected;
470         FarList* ListItems;
471         FAR_CHAR_INFO* VBuf;
472         intptr_t Reserved0;
473     }
474     const(wchar)* History;
475     const(wchar)* Mask;
476     FARDIALOGITEMFLAGS Flags;
477     const(wchar)* Data;
478     size_t MaxLength; // terminate 0 not included (if == 0 string size is unlimited)
479     intptr_t UserData;
480     intptr_t[2] Reserved;
481 }
482 
483 struct FarDialogItemData
484 {
485     size_t StructSize;
486     size_t PtrLength;
487     wchar* PtrData;
488 }
489 
490 struct FarDialogEvent
491 {
492     size_t StructSize;
493     HANDLE hDlg;
494     intptr_t Msg;
495     intptr_t Param1;
496     void* Param2;
497     intptr_t Result;
498 }
499 
500 struct OpenDlgPluginData
501 {
502     size_t StructSize;
503     HANDLE hDlg;
504 }
505 
506 struct DialogInfo
507 {
508     size_t StructSize;
509     GUID Id;
510     GUID Owner;
511 }
512 
513 struct FarGetDialogItem
514 {
515     size_t StructSize;
516     size_t Size;
517     FarDialogItem* Item;
518 }
519 
520 alias FARDIALOGFLAGS = ulong;
521 const FARDIALOGFLAGS
522     FDLG_WARNING             = 0x0000000000000001UL,
523     FDLG_SMALLDIALOG         = 0x0000000000000002UL,
524     FDLG_NODRAWSHADOW        = 0x0000000000000004UL,
525     FDLG_NODRAWPANEL         = 0x0000000000000008UL,
526     FDLG_KEEPCONSOLETITLE    = 0x0000000000000010UL,
527     FDLG_NONMODAL            = 0x0000000000000020UL,
528     FDLG_NONE                = 0UL;
529 
530 alias FARWINDOWPROC = extern (Windows) intptr_t function(HANDLE hDlg, intptr_t Msg, intptr_t Param1, void* Param2);
531 
532 alias FARAPISENDDLGMESSAGE = extern (Windows) intptr_t function(HANDLE hDlg, intptr_t Msg, intptr_t Param1, void* Param2);
533 
534 alias FARAPIDEFDLGPROC = extern (Windows) intptr_t function(HANDLE hDlg, intptr_t Msg, intptr_t Param1, void* Param2);
535 
536 alias FARAPIDIALOGINIT = extern (Windows) HANDLE function(
537     in GUID* PluginId,
538     in GUID* Id,
539     intptr_t X1,
540     intptr_t Y1,
541     intptr_t X2,
542     intptr_t Y2,
543     in wchar* HelpTopic,
544     in FarDialogItem* Item,
545     size_t ItemsNumber,
546     intptr_t Reserved,
547     FARDIALOGFLAGS Flags,
548     FARWINDOWPROC DlgProc,
549     void* Param);
550 
551 alias FARAPIDIALOGRUN = extern (Windows) intptr_t function(HANDLE hDlg);
552 
553 alias FARAPIDIALOGFREE = extern (Windows) void function(HANDLE hDlg);
554 
555 struct FarKey
556 {
557     WORD VirtualKeyCode;
558     DWORD ControlKeyState;
559 }
560 
561 alias MENUITEMFLAGS = ulong;
562 const MENUITEMFLAGS
563     MIF_SELECTED   = 0x0000000000010000UL,
564     MIF_CHECKED    = 0x0000000000020000UL,
565     MIF_SEPARATOR  = 0x0000000000040000UL,
566     MIF_DISABLE    = 0x0000000000080000UL,
567     MIF_GRAYED     = 0x0000000000100000UL,
568     MIF_HIDDEN     = 0x0000000000200000UL,
569     MIF_NONE       = 0UL;
570 
571 struct FarMenuItem
572 {
573     MENUITEMFLAGS Flags;
574     const(wchar)* Text;
575     FarKey AccelKey;
576     intptr_t UserData;
577     intptr_t[2] Reserved;
578 }
579 
580 alias FARMENUFLAGS = ulong;
581 const FARMENUFLAGS
582     FMENU_SHOWAMPERSAND        = 0x0000000000000001UL,
583     FMENU_WRAPMODE             = 0x0000000000000002UL,
584     FMENU_AUTOHIGHLIGHT        = 0x0000000000000004UL,
585     FMENU_REVERSEAUTOHIGHLIGHT = 0x0000000000000008UL,
586     FMENU_CHANGECONSOLETITLE   = 0x0000000000000010UL,
587     FMENU_NONE                 = 0UL;
588 
589 alias FARAPIMENU = extern (Windows) intptr_t function(
590     in GUID* PluginId,
591     in GUID* Id,
592     intptr_t X,
593     intptr_t Y,
594     intptr_t MaxHeight,
595     const FARMENUFLAGS Flags,
596     in wchar* Title,
597     in wchar* Bottom,
598     in wchar* HelpTopic,
599     in FarKey* BreakKeys,
600     intptr_t* BreakCode,
601     in FarMenuItem* Item,
602     size_t ItemsNumber);
603 
604 alias PLUGINPANELITEMFLAGS = ulong;
605 const PLUGINPANELITEMFLAGS
606     PPIF_SELECTED               = 0x0000000040000000UL,
607     PPIF_PROCESSDESCR           = 0x0000000080000000UL,
608     PPIF_NONE                   = 0UL;
609 
610 struct FarPanelItemFreeInfo
611 {
612     size_t StructSize;
613     HANDLE hPlugin;
614 }
615 
616 alias FARPANELITEMFREECALLBACK = extern (Windows) void function(
617     void* UserData,
618     in FarPanelItemFreeInfo* Info);
619 
620 struct UserDataItem
621 {
622     void* Data;
623     FARPANELITEMFREECALLBACK FreeData;
624 }
625 
626 struct PluginPanelItem
627 {
628     FILETIME CreationTime;
629     FILETIME LastAccessTime;
630     FILETIME LastWriteTime;
631     FILETIME ChangeTime;
632     ulong FileSize;
633     ulong AllocationSize;
634     const(wchar)* FileName;
635     const(wchar)* AlternateFileName;
636     const(wchar)* Description;
637     const(wchar)* Owner;
638     const(wchar*)* CustomColumnData;
639     size_t CustomColumnNumber;
640     PLUGINPANELITEMFLAGS Flags;
641     UserDataItem UserData;
642     uintptr_t FileAttributes;
643     uintptr_t NumberOfLinks;
644     uintptr_t CRC32;
645     intptr_t[2] Reserved;
646 }
647 
648 struct FarGetPluginPanelItem
649 {
650     size_t StructSize;
651     size_t Size;
652     PluginPanelItem* Item;
653 }
654 
655 struct SortingPanelItem
656 {
657     FILETIME CreationTime;
658     FILETIME LastAccessTime;
659     FILETIME LastWriteTime;
660     FILETIME ChangeTime;
661     ulong FileSize;
662     ulong AllocationSize;
663     const(wchar)* FileName;
664     const(wchar)* AlternateFileName;
665     const(wchar)* Description;
666     const(wchar)* Owner;
667     const(wchar*)* CustomColumnData;
668     size_t CustomColumnNumber;
669     PLUGINPANELITEMFLAGS Flags;
670     UserDataItem UserData;
671     uintptr_t FileAttributes;
672     uintptr_t NumberOfLinks;
673     uintptr_t CRC32;
674     intptr_t Position;
675     intptr_t SortGroup;
676     uintptr_t NumberOfStreams;
677     ulong StreamsSize;
678 }
679 
680 alias PANELINFOFLAGS = ulong;
681 const PANELINFOFLAGS
682     PFLAGS_SHOWHIDDEN         = 0x0000000000000001UL,
683     PFLAGS_HIGHLIGHT          = 0x0000000000000002UL,
684     PFLAGS_REVERSESORTORDER   = 0x0000000000000004UL,
685     PFLAGS_USESORTGROUPS      = 0x0000000000000008UL,
686     PFLAGS_SELECTEDFIRST      = 0x0000000000000010UL,
687     PFLAGS_REALNAMES          = 0x0000000000000020UL,
688     PFLAGS_PANELLEFT          = 0x0000000000000080UL,
689     PFLAGS_DIRECTORIESFIRST   = 0x0000000000000100UL,
690     PFLAGS_USECRC32           = 0x0000000000000200UL,
691     PFLAGS_PLUGIN             = 0x0000000000000800UL,
692     PFLAGS_VISIBLE            = 0x0000000000001000UL,
693     PFLAGS_FOCUS              = 0x0000000000002000UL,
694     PFLAGS_ALTERNATIVENAMES   = 0x0000000000004000UL,
695     PFLAGS_SHORTCUT           = 0x0000000000008000UL,
696     PFLAGS_NONE               = 0UL;
697 
698 enum PANELINFOTYPE
699 {
700     PTYPE_FILEPANEL                 = 0,
701     PTYPE_TREEPANEL                 = 1,
702     PTYPE_QVIEWPANEL                = 2,
703     PTYPE_INFOPANEL                 = 3,
704 }
705 
706 enum OPENPANELINFO_SORTMODES
707 {
708     SM_DEFAULT                   =  0,
709     SM_UNSORTED                  =  1,
710     SM_NAME                      =  2,
711     SM_EXT                       =  3,
712     SM_MTIME                     =  4,
713     SM_CTIME                     =  5,
714     SM_ATIME                     =  6,
715     SM_SIZE                      =  7,
716     SM_DESCR                     =  8,
717     SM_OWNER                     =  9,
718     SM_COMPRESSEDSIZE            = 10,
719     SM_NUMLINKS                  = 11,
720     SM_NUMSTREAMS                = 12,
721     SM_STREAMSSIZE               = 13,
722     SM_FULLNAME                  = 14,
723     SM_CHTIME                    = 15,
724 
725     SM_COUNT
726 }
727 
728 struct PanelInfo
729 {
730     size_t StructSize;
731     HANDLE PluginHandle;
732     GUID OwnerGuid;
733     PANELINFOFLAGS Flags;
734     size_t ItemsNumber;
735     size_t SelectedItemsNumber;
736     RECT PanelRect;
737     size_t CurrentItem;
738     size_t TopPanelItem;
739     intptr_t ViewMode;
740     PANELINFOTYPE PanelType;
741     OPENPANELINFO_SORTMODES SortMode;
742 }
743 
744 struct PanelRedrawInfo
745 {
746     size_t StructSize;
747     size_t CurrentItem;
748     size_t TopPanelItem;
749 }
750 
751 struct CmdLineSelect
752 {
753     size_t StructSize;
754     intptr_t SelStart;
755     intptr_t SelEnd;
756 }
757 
758 struct FarPanelDirectory
759 {
760     size_t StructSize;
761     const(wchar)* Name;
762     const(wchar)* Param;
763     GUID PluginId;
764     const(wchar)* File;
765 }
766 
767 const PANEL_NONE = cast(HANDLE)-1;
768 const PANEL_ACTIVE = cast(HANDLE)-1;
769 const PANEL_PASSIVE = cast(HANDLE)-2;
770 const PANEL_STOP = cast(HANDLE)-1;
771 
772 enum FILE_CONTROL_COMMANDS
773 {
774     FCTL_CLOSEPANEL                 = 0,
775     FCTL_GETPANELINFO               = 1,
776     FCTL_UPDATEPANEL                = 2,
777     FCTL_REDRAWPANEL                = 3,
778     FCTL_GETCMDLINE                 = 4,
779     FCTL_SETCMDLINE                 = 5,
780     FCTL_SETSELECTION               = 6,
781     FCTL_SETVIEWMODE                = 7,
782     FCTL_INSERTCMDLINE              = 8,
783     FCTL_SETUSERSCREEN              = 9,
784     FCTL_SETPANELDIRECTORY          = 10,
785     FCTL_SETCMDLINEPOS              = 11,
786     FCTL_GETCMDLINEPOS              = 12,
787     FCTL_SETSORTMODE                = 13,
788     FCTL_SETSORTORDER               = 14,
789     FCTL_SETCMDLINESELECTION        = 15,
790     FCTL_GETCMDLINESELECTION        = 16,
791     FCTL_CHECKPANELSEXIST           = 17,
792     FCTL_GETUSERSCREEN              = 19,
793     FCTL_ISACTIVEPANEL              = 20,
794     FCTL_GETPANELITEM               = 21,
795     FCTL_GETSELECTEDPANELITEM       = 22,
796     FCTL_GETCURRENTPANELITEM        = 23,
797     FCTL_GETPANELDIRECTORY          = 24,
798     FCTL_GETCOLUMNTYPES             = 25,
799     FCTL_GETCOLUMNWIDTHS            = 26,
800     FCTL_BEGINSELECTION             = 27,
801     FCTL_ENDSELECTION               = 28,
802     FCTL_CLEARSELECTION             = 29,
803     FCTL_SETDIRECTORIESFIRST        = 30,
804     FCTL_GETPANELFORMAT             = 31,
805     FCTL_GETPANELHOSTFILE           = 32,
806     FCTL_GETPANELPREFIX             = 34,
807     FCTL_SETACTIVEPANEL             = 35,
808 }
809 
810 alias FARAPITEXT = extern (Windows) void function(
811     intptr_t X,
812     intptr_t Y,
813     in FarColor* Color,
814     in wchar* Str);
815 
816 alias FARAPISAVESCREEN = extern (Windows) HANDLE function(intptr_t X1, intptr_t Y1, intptr_t X2, intptr_t Y2);
817 
818 alias FARAPIRESTORESCREEN = extern (Windows) void function(HANDLE hScreen);
819 
820 alias FARAPIGETDIRLIST = extern (Windows) intptr_t function(
821     in wchar* Dir,
822     PluginPanelItem** pPanelItem,
823     size_t* pItemsNumber);
824 
825 alias FARAPIGETPLUGINDIRLIST = extern (Windows) intptr_t function(
826     in GUID* PluginId,
827     HANDLE hPanel,
828     in wchar* Dir,
829     PluginPanelItem** pPanelItem,
830     size_t* pItemsNumber);
831 
832 alias FARAPIFREEDIRLIST = extern (Windows) void function(PluginPanelItem* PanelItem, size_t nItemsNumber);
833 
834 alias FARAPIFREEPLUGINDIRLIST = extern (Windows) void function(HANDLE hPanel, PluginPanelItem* PanelItem, size_t nItemsNumber);
835 
836 alias VIEWER_FLAGS = ulong;
837 const VIEWER_FLAGS
838     VF_NONMODAL              = 0x0000000000000001UL,
839     VF_DELETEONCLOSE         = 0x0000000000000002UL,
840     VF_ENABLE_F6             = 0x0000000000000004UL,
841     VF_DISABLEHISTORY        = 0x0000000000000008UL,
842     VF_IMMEDIATERETURN       = 0x0000000000000100UL,
843     VF_DELETEONLYFILEONCLOSE = 0x0000000000000200UL,
844     VF_NONE                  = 0UL;
845 
846 alias FARAPIVIEWER = extern (Windows) intptr_t function(
847     in wchar* FileName,
848     in wchar* Title,
849     intptr_t X1,
850     intptr_t Y1,
851     intptr_t X2,
852     intptr_t Y2,
853     VIEWER_FLAGS Flags,
854     uintptr_t CodePage);
855 
856 alias EDITOR_FLAGS = ulong;
857 const EDITOR_FLAGS
858     EF_NONMODAL              = 0x0000000000000001UL,
859     EF_CREATENEW             = 0x0000000000000002UL,
860     EF_ENABLE_F6             = 0x0000000000000004UL,
861     EF_DISABLEHISTORY        = 0x0000000000000008UL,
862     EF_DELETEONCLOSE         = 0x0000000000000010UL,
863     EF_IMMEDIATERETURN       = 0x0000000000000100UL,
864     EF_DELETEONLYFILEONCLOSE = 0x0000000000000200UL,
865     EF_LOCKED                = 0x0000000000000400UL,
866     EF_DISABLESAVEPOS        = 0x0000000000000800UL,
867     EF_OPENMODE_MASK         = 0x00000000F0000000UL,
868     EF_OPENMODE_QUERY        = 0x0000000000000000UL,
869     EF_OPENMODE_NEWIFOPEN    = 0x0000000010000000UL,
870     EF_OPENMODE_USEEXISTING  = 0x0000000020000000UL,
871     EF_OPENMODE_BREAKIFOPEN  = 0x0000000030000000UL,
872     EF_OPENMODE_RELOADIFOPEN = 0x0000000040000000UL,
873     EN_NONE                  = 0UL;
874 
875 enum EDITOR_EXITCODE
876 {
877     EEC_OPEN_ERROR          = 0,
878     EEC_MODIFIED            = 1,
879     EEC_NOT_MODIFIED        = 2,
880     EEC_LOADING_INTERRUPTED = 3,
881 }
882 
883 alias FARAPIEDITOR = extern (Windows) intptr_t function(
884     in wchar* FileName,
885     in wchar* Title,
886     intptr_t X1,
887     intptr_t Y1,
888     intptr_t X2,
889     intptr_t Y2,
890     EDITOR_FLAGS Flags,
891     int StartLine,
892     int StartChar,
893     uintptr_t CodePage);
894 
895 alias FARAPIGETMSG = extern (Windows) const(wchar)* function(
896     in GUID* PluginId,
897     intptr_t MsgId);
898 
899 alias FARHELPFLAGS = ulong;
900 const FARHELPFLAGS
901     FHELP_NOSHOWERROR = 0x0000000080000000UL,
902     FHELP_SELFHELP    = 0x0000000000000000UL,
903     FHELP_FARHELP     = 0x0000000000000001UL,
904     FHELP_CUSTOMFILE  = 0x0000000000000002UL,
905     FHELP_CUSTOMPATH  = 0x0000000000000004UL,
906     FHELP_GUID        = 0x0000000000000008UL,
907     FHELP_USECONTENTS = 0x0000000040000000UL,
908     FHELP_NONE        = 0UL;
909 
910 alias FARAPISHOWHELP = extern (Windows) BOOL function(
911     in wchar* ModuleName,
912     in wchar* Topic,
913     FARHELPFLAGS Flags);
914 
915 enum ADVANCED_CONTROL_COMMANDS
916 {
917     ACTL_GETFARMANAGERVERSION       = 0,
918     ACTL_WAITKEY                    = 2,
919     ACTL_GETCOLOR                   = 3,
920     ACTL_GETARRAYCOLOR              = 4,
921     ACTL_GETWINDOWINFO              = 6,
922     ACTL_GETWINDOWCOUNT             = 7,
923     ACTL_SETCURRENTWINDOW           = 8,
924     ACTL_COMMIT                     = 9,
925     ACTL_GETFARHWND                 = 10,
926     ACTL_SETARRAYCOLOR              = 16,
927     ACTL_REDRAWALL                  = 19,
928     ACTL_SYNCHRO                    = 20,
929     ACTL_SETPROGRESSSTATE           = 21,
930     ACTL_SETPROGRESSVALUE           = 22,
931     ACTL_QUIT                       = 23,
932     ACTL_GETFARRECT                 = 24,
933     ACTL_GETCURSORPOS               = 25,
934     ACTL_SETCURSORPOS               = 26,
935     ACTL_PROGRESSNOTIFY             = 27,
936     ACTL_GETWINDOWTYPE              = 28,
937 }
938 
939 enum FAR_MACRO_CONTROL_COMMANDS
940 {
941     MCTL_LOADALL           = 0,
942     MCTL_SAVEALL           = 1,
943     MCTL_SENDSTRING        = 2,
944     MCTL_GETSTATE          = 5,
945     MCTL_GETAREA           = 6,
946     MCTL_ADDMACRO          = 7,
947     MCTL_DELMACRO          = 8,
948     MCTL_GETLASTERROR      = 9,
949     MCTL_EXECSTRING        = 10,
950 }
951 
952 alias FARKEYMACROFLAGS = ulong;
953 const FARKEYMACROFLAGS
954     KMFLAGS_SILENTCHECK         = 0x0000000000000001UL,
955     KMFLAGS_NOSENDKEYSTOPLUGINS = 0x0000000000000002UL,
956     KMFLAGS_ENABLEOUTPUT        = 0x0000000000000004UL,
957     KMFLAGS_LANGMASK            = 0x0000000000000070UL, // 3 bits reserved for 8 languages
958     KMFLAGS_LUA                 = 0x0000000000000000UL,
959     KMFLAGS_MOONSCRIPT          = 0x0000000000000010UL,
960     KMFLAGS_NONE                = 0UL;
961 
962 enum FARMACROSENDSTRINGCOMMAND
963 {
964     MSSC_POST              =0,
965     MSSC_CHECK             =2,
966 }
967 
968 enum FARMACROAREA
969 {
970     MACROAREA_OTHER                      =   0,   // Reserved
971     MACROAREA_SHELL                      =   1,   // File panels
972     MACROAREA_VIEWER                     =   2,   // Internal viewer program
973     MACROAREA_EDITOR                     =   3,   // Editor
974     MACROAREA_DIALOG                     =   4,   // Dialogs
975     MACROAREA_SEARCH                     =   5,   // Quick search in panels
976     MACROAREA_DISKS                      =   6,   // Menu of disk selection
977     MACROAREA_MAINMENU                   =   7,   // Main menu
978     MACROAREA_MENU                       =   8,   // Other menus
979     MACROAREA_HELP                       =   9,   // Help system
980     MACROAREA_INFOPANEL                  =  10,   // Info panel
981     MACROAREA_QVIEWPANEL                 =  11,   // Quick view panel
982     MACROAREA_TREEPANEL                  =  12,   // Folders tree panel
983     MACROAREA_FINDFOLDER                 =  13,   // Find folder
984     MACROAREA_USERMENU                   =  14,   // User menu
985     MACROAREA_SHELLAUTOCOMPLETION        =  15,   // Autocompletion list in command line
986     MACROAREA_DIALOGAUTOCOMPLETION       =  16,   // Autocompletion list in dialogs
987     MACROAREA_GRABBER                    =  17,   // Mode of copying text from the screen
988     MACROAREA_DESKTOP                    =  18,   // Desktop
989 
990     MACROAREA_COMMON                     = 255,
991 }
992 
993 enum FARMACROSTATE
994 {
995     MACROSTATE_NOMACRO          = 0,
996     MACROSTATE_EXECUTING        = 1,
997     MACROSTATE_EXECUTING_COMMON = 2,
998     MACROSTATE_RECORDING        = 3,
999     MACROSTATE_RECORDING_COMMON = 4,
1000 }
1001 
1002 enum FARMACROPARSEERRORCODE
1003 {
1004     MPEC_SUCCESS = 0,
1005     MPEC_ERROR   = 1,
1006 }
1007 
1008 struct MacroParseResult
1009 {
1010     size_t StructSize;
1011     DWORD ErrCode;
1012     COORD ErrPos;
1013     const(wchar)* ErrSrc;
1014 }
1015 
1016 struct MacroSendMacroText
1017 {
1018     size_t StructSize;
1019     FARKEYMACROFLAGS Flags;
1020     INPUT_RECORD AKey;
1021     const(wchar)* SequenceText;
1022 }
1023 
1024 alias FARADDKEYMACROFLAGS = ulong;
1025 const FARADDKEYMACROFLAGS AKMFLAGS_NONE = 0UL;
1026 
1027 alias FARMACROCALLBACK = extern (Windows) intptr_t function(void* Id, FARADDKEYMACROFLAGS Flags);
1028 
1029 struct MacroAddMacro
1030 {
1031     size_t StructSize;
1032     void* Id;
1033     const(wchar)* SequenceText;
1034     const(wchar)* Description;
1035     FARKEYMACROFLAGS Flags;
1036     INPUT_RECORD AKey;
1037     FARMACROAREA Area;
1038     FARMACROCALLBACK Callback;
1039     intptr_t Priority;
1040 }
1041 
1042 enum FARMACROVARTYPE
1043 {
1044     FMVT_UNKNOWN                = 0,
1045     FMVT_INTEGER                = 1,
1046     FMVT_STRING                 = 2,
1047     FMVT_DOUBLE                 = 3,
1048     FMVT_BOOLEAN                = 4,
1049     FMVT_BINARY                 = 5,
1050     FMVT_POINTER                = 6,
1051     FMVT_NIL                    = 7,
1052     FMVT_ARRAY                  = 8,
1053     FMVT_PANEL                  = 9,
1054 }
1055 
1056 struct FarMacroValueBinary
1057 {
1058     void* Data;
1059     size_t Size;
1060 }
1061 
1062 struct FarMacroValueArray
1063 {
1064     FarMacroValue* Values;
1065     size_t Count;
1066 }
1067 
1068 struct FarMacroValue
1069 {
1070     FARMACROVARTYPE Type = FARMACROVARTYPE.FMVT_NIL;
1071     union
1072     {
1073         long Integer;
1074         long Boolean;
1075         double Double;
1076         const(wchar)* String;
1077         void* Pointer;
1078         FarMacroValueBinary Binary;
1079         FarMacroValueArray Array;
1080     }
1081 
1082     this(int v)              { Type=FARMACROVARTYPE.FMVT_INTEGER; Integer=v; }
1083     this(uint v)             { Type=FARMACROVARTYPE.FMVT_INTEGER; Integer=v; }
1084     this(long v)             { Type=FARMACROVARTYPE.FMVT_INTEGER; Integer=v; }
1085     this(ulong v)            { Type=FARMACROVARTYPE.FMVT_INTEGER; Integer=v; }
1086     this(bool v)             { Type=FARMACROVARTYPE.FMVT_BOOLEAN; Boolean=v; }
1087     this(double v)           { Type=FARMACROVARTYPE.FMVT_DOUBLE; Double=v; }
1088     this(const(wchar)* v)  { Type=FARMACROVARTYPE.FMVT_STRING; String=v; }
1089     this(void* v)            { Type=FARMACROVARTYPE.FMVT_POINTER; Pointer=v; }
1090     this(ref const GUID v)   { Type=FARMACROVARTYPE.FMVT_BINARY; Binary.Data=cast(void*)&v; Binary.Size=GUID.sizeof; }
1091     this(FarMacroValue* arr,size_t count) { Type=FARMACROVARTYPE.FMVT_ARRAY; Array.Values=arr; Array.Count=count; }
1092 }
1093 
1094 struct FarMacroCall
1095 {
1096     size_t StructSize;
1097     size_t Count;
1098     FarMacroValue* Values;
1099     extern (Windows) void function(void* CallbackData, FarMacroValue* Values, size_t Count) Callback;
1100     void* CallbackData;
1101 }
1102 
1103 struct FarGetValue
1104 {
1105     size_t StructSize;
1106     intptr_t Type;
1107     FarMacroValue Value;
1108 }
1109 
1110 struct MacroExecuteString
1111 {
1112     size_t StructSize;
1113     FARKEYMACROFLAGS Flags;
1114     const(wchar)* SequenceText;
1115     size_t InCount;
1116     FarMacroValue* InValues;
1117     size_t OutCount;
1118     const(FarMacroValue)* OutValues;
1119 }
1120 
1121 struct FarMacroLoad
1122 {
1123     size_t StructSize;
1124     const(wchar)* Path;
1125     ulong Flags;
1126 }
1127 
1128 alias FARSETCOLORFLAGS = ulong;
1129 const FARSETCOLORFLAGS
1130     FSETCLR_REDRAW                 = 0x0000000000000001UL,
1131     FSETCLR_NONE                   = 0UL;
1132 
1133 struct FarSetColors
1134 {
1135     size_t StructSize;
1136     FARSETCOLORFLAGS Flags;
1137     size_t StartIndex;
1138     size_t ColorsCount;
1139     FarColor* Colors;
1140 }
1141 
1142 enum WINDOWINFO_TYPE
1143 {
1144     WTYPE_DESKTOP                   = 0,
1145     WTYPE_PANELS                    = 1,
1146     WTYPE_VIEWER                    = 2,
1147     WTYPE_EDITOR                    = 3,
1148     WTYPE_DIALOG                    = 4,
1149     WTYPE_VMENU                     = 5,
1150     WTYPE_HELP                      = 6,
1151     WTYPE_COMBOBOX                  = 7,
1152     WTYPE_GRABBER                   = 8,
1153     WTYPE_HMENU                     = 9,
1154 }
1155 
1156 alias WINDOWINFO_FLAGS = ulong;
1157 const WINDOWINFO_FLAGS
1158     WIF_MODIFIED = 0x0000000000000001UL,
1159     WIF_CURRENT  = 0x0000000000000002UL,
1160     WIF_MODAL    = 0x0000000000000004UL,
1161     WIF_NONE     = 0;
1162 
1163 struct WindowInfo
1164 {
1165     size_t StructSize;
1166     intptr_t Id;
1167     wchar* TypeName;
1168     wchar* Name;
1169     intptr_t TypeNameSize;
1170     intptr_t NameSize;
1171     intptr_t Pos;
1172     WINDOWINFO_TYPE Type;
1173     WINDOWINFO_FLAGS Flags;
1174 }
1175 
1176 struct WindowType
1177 {
1178     size_t StructSize;
1179     WINDOWINFO_TYPE Type;
1180 }
1181 
1182 enum TASKBARPROGRESSTATE
1183 {
1184     TBPS_NOPROGRESS   =0x0,
1185     TBPS_INDETERMINATE=0x1,
1186     TBPS_NORMAL       =0x2,
1187     TBPS_ERROR        =0x4,
1188     TBPS_PAUSED       =0x8,
1189 }
1190 
1191 struct ProgressValue
1192 {
1193     size_t StructSize;
1194     ulong Completed;
1195     ulong Total;
1196 }
1197 
1198 enum VIEWER_CONTROL_COMMANDS
1199 {
1200     VCTL_GETINFO                    = 0,
1201     VCTL_QUIT                       = 1,
1202     VCTL_REDRAW                     = 2,
1203     VCTL_SETKEYBAR                  = 3,
1204     VCTL_SETPOSITION                = 4,
1205     VCTL_SELECT                     = 5,
1206     VCTL_SETMODE                    = 6,
1207     VCTL_GETFILENAME                = 7,
1208 }
1209 
1210 alias VIEWER_OPTIONS = ulong;
1211 const VIEWER_OPTIONS
1212     VOPT_SAVEFILEPOSITION   = 0x0000000000000001UL,
1213     VOPT_AUTODETECTCODEPAGE = 0x0000000000000002UL,
1214     VOPT_SHOWTITLEBAR       = 0x0000000000000004UL,
1215     VOPT_SHOWKEYBAR         = 0x0000000000000008UL,
1216     VOPT_SHOWSCROLLBAR      = 0x0000000000000010UL,
1217     VOPT_QUICKVIEW          = 0x0000000000000020UL,
1218     VOPT_NONE               = 0UL;
1219 
1220 enum VIEWER_SETMODE_TYPES
1221 {
1222     VSMT_VIEWMODE                   = 0,
1223     VSMT_WRAP                       = 1,
1224     VSMT_WORDWRAP                   = 2,
1225 }
1226 
1227 alias VIEWER_SETMODEFLAGS_TYPES = ulong;
1228 const VIEWER_SETMODEFLAGS_TYPES
1229     VSMFL_REDRAW    = 0x0000000000000001UL,
1230     VSMFL_NONE      = 0;
1231 
1232 struct ViewerSetMode
1233 {
1234     size_t StructSize;
1235     VIEWER_SETMODE_TYPES Type;
1236     union
1237     {
1238         intptr_t iParam;
1239         wchar* wszParam;
1240     }
1241     VIEWER_SETMODEFLAGS_TYPES Flags;
1242 }
1243 
1244 struct ViewerSelect
1245 {
1246     size_t StructSize;
1247     long BlockStartPos;
1248     long BlockLen;
1249 }
1250 
1251 alias VIEWER_SETPOS_FLAGS = ulong;
1252 const VIEWER_SETPOS_FLAGS
1253     VSP_NOREDRAW    = 0x0000000000000001UL,
1254     VSP_PERCENT     = 0x0000000000000002UL,
1255     VSP_RELATIVE    = 0x0000000000000004UL,
1256     VSP_NORETNEWPOS = 0x0000000000000008UL,
1257     VSP_NONE        = 0;
1258 
1259 struct ViewerSetPosition
1260 {
1261     size_t StructSize;
1262     VIEWER_SETPOS_FLAGS Flags;
1263     long StartPos;
1264     long LeftPos;
1265 }
1266 
1267 alias VIEWER_MODE_FLAGS = ulong;
1268 const VIEWER_MODE_FLAGS
1269     VMF_WRAP     = 0x0000000000000001UL,
1270     VMF_WORDWRAP = 0x0000000000000002UL,
1271     VMF_NONE     = 0;
1272 
1273 enum VIEWER_MODE_TYPE
1274 {
1275     VMT_TEXT    =0,
1276     VMT_HEX     =1,
1277     VMT_DUMP    =2,
1278 }
1279 
1280 struct ViewerMode
1281 {
1282     uintptr_t CodePage;
1283     VIEWER_MODE_FLAGS Flags;
1284     VIEWER_MODE_TYPE ViewMode;
1285 }
1286 
1287 struct ViewerInfo
1288 {
1289     size_t StructSize;
1290     intptr_t ViewerID;
1291     intptr_t TabSize;
1292     ViewerMode CurMode;
1293     long FileSize;
1294     long FilePos;
1295     long LeftPos;
1296     VIEWER_OPTIONS Options;
1297     intptr_t WindowSizeX;
1298     intptr_t WindowSizeY;
1299 }
1300 
1301 enum VIEWER_EVENTS
1302 {
1303     VE_READ       =0,
1304     VE_CLOSE      =1,
1305 
1306     VE_GOTFOCUS   =6,
1307     VE_KILLFOCUS  =7,
1308 }
1309 
1310 enum EDITOR_EVENTS
1311 {
1312     EE_READ       =0,
1313     EE_SAVE       =1,
1314     EE_REDRAW     =2,
1315     EE_CLOSE      =3,
1316 
1317     EE_GOTFOCUS   =6,
1318     EE_KILLFOCUS  =7,
1319     EE_CHANGE     =8,
1320 }
1321 
1322 enum DIALOG_EVENTS
1323 {
1324     DE_DLGPROCINIT    =0,
1325     DE_DEFDLGPROCINIT =1,
1326     DE_DLGPROCEND     =2,
1327 }
1328 
1329 enum SYNCHRO_EVENTS
1330 {
1331     SE_COMMONSYNCHRO  =0,
1332 }
1333 
1334 const EEREDRAW_ALL   = cast(void*)0;
1335 const CURRENT_EDITOR = -1;
1336 
1337 enum EDITOR_CONTROL_COMMANDS
1338 {
1339     ECTL_GETSTRING                  = 0,
1340     ECTL_SETSTRING                  = 1,
1341     ECTL_INSERTSTRING               = 2,
1342     ECTL_DELETESTRING               = 3,
1343     ECTL_DELETECHAR                 = 4,
1344     ECTL_INSERTTEXT                 = 5,
1345     ECTL_GETINFO                    = 6,
1346     ECTL_SETPOSITION                = 7,
1347     ECTL_SELECT                     = 8,
1348     ECTL_REDRAW                     = 9,
1349     ECTL_TABTOREAL                  = 10,
1350     ECTL_REALTOTAB                  = 11,
1351     ECTL_EXPANDTABS                 = 12,
1352     ECTL_SETTITLE                   = 13,
1353     ECTL_READINPUT                  = 14,
1354     ECTL_PROCESSINPUT               = 15,
1355     ECTL_ADDCOLOR                   = 16,
1356     ECTL_GETCOLOR                   = 17,
1357     ECTL_SAVEFILE                   = 18,
1358     ECTL_QUIT                       = 19,
1359     ECTL_SETKEYBAR                  = 20,
1360 
1361     ECTL_SETPARAM                   = 22,
1362     ECTL_GETBOOKMARKS               = 23,
1363     ECTL_DELETEBLOCK                = 25,
1364     ECTL_ADDSESSIONBOOKMARK         = 26,
1365     ECTL_PREVSESSIONBOOKMARK        = 27,
1366     ECTL_NEXTSESSIONBOOKMARK        = 28,
1367     ECTL_CLEARSESSIONBOOKMARKS      = 29,
1368     ECTL_DELETESESSIONBOOKMARK      = 30,
1369     ECTL_GETSESSIONBOOKMARKS        = 31,
1370     ECTL_UNDOREDO                   = 32,
1371     ECTL_GETFILENAME                = 33,
1372     ECTL_DELCOLOR                   = 34,
1373     ECTL_SUBSCRIBECHANGEEVENT       = 36,
1374     ECTL_UNSUBSCRIBECHANGEEVENT     = 37,
1375     ECTL_GETTITLE                   = 38,
1376 }
1377 
1378 enum EDITOR_SETPARAMETER_TYPES
1379 {
1380     ESPT_TABSIZE                    = 0,
1381     ESPT_EXPANDTABS                 = 1,
1382     ESPT_AUTOINDENT                 = 2,
1383     ESPT_CURSORBEYONDEOL            = 3,
1384     ESPT_CHARCODEBASE               = 4,
1385     ESPT_CODEPAGE                   = 5,
1386     ESPT_SAVEFILEPOSITION           = 6,
1387     ESPT_LOCKMODE                   = 7,
1388     ESPT_SETWORDDIV                 = 8,
1389     ESPT_GETWORDDIV                 = 9,
1390     ESPT_SHOWWHITESPACE             = 10,
1391     ESPT_SETBOM                     = 11,
1392 }
1393 
1394 struct EditorSetParameter
1395 {
1396     size_t StructSize;
1397     EDITOR_SETPARAMETER_TYPES Type;
1398     union
1399     {
1400         intptr_t iParam;
1401         wchar* wszParam;
1402         intptr_t Reserved;
1403     }
1404     ulong Flags;
1405     size_t Size;
1406 }
1407 
1408 enum EDITOR_UNDOREDO_COMMANDS
1409 {
1410     EUR_BEGIN                       = 0,
1411     EUR_END                         = 1,
1412     EUR_UNDO                        = 2,
1413     EUR_REDO                        = 3,
1414 }
1415 
1416 struct EditorUndoRedo
1417 {
1418     size_t StructSize;
1419     EDITOR_UNDOREDO_COMMANDS Command;
1420 }
1421 
1422 struct EditorGetString
1423 {
1424     size_t StructSize;
1425     intptr_t StringNumber;
1426     intptr_t StringLength;
1427     const(wchar)* StringText;
1428     const(wchar)* StringEOL;
1429     intptr_t SelStart;
1430     intptr_t SelEnd;
1431 }
1432 
1433 struct EditorSetString
1434 {
1435     size_t StructSize;
1436     intptr_t StringNumber;
1437     intptr_t StringLength;
1438     const(wchar)* StringText;
1439     const(wchar)* StringEOL;
1440 }
1441 
1442 enum EXPAND_TABS
1443 {
1444     EXPAND_NOTABS                   = 0,
1445     EXPAND_ALLTABS                  = 1,
1446     EXPAND_NEWTABS                  = 2,
1447 }
1448 
1449 enum EDITOR_OPTIONS
1450 {
1451     EOPT_EXPANDALLTABS     = 0x00000001,
1452     EOPT_PERSISTENTBLOCKS  = 0x00000002,
1453     EOPT_DELREMOVESBLOCKS  = 0x00000004,
1454     EOPT_AUTOINDENT        = 0x00000008,
1455     EOPT_SAVEFILEPOSITION  = 0x00000010,
1456     EOPT_AUTODETECTCODEPAGE= 0x00000020,
1457     EOPT_CURSORBEYONDEOL   = 0x00000040,
1458     EOPT_EXPANDONLYNEWTABS = 0x00000080,
1459     EOPT_SHOWWHITESPACE    = 0x00000100,
1460     EOPT_BOM               = 0x00000200,
1461     EOPT_SHOWLINEBREAK     = 0x00000400,
1462     EOPT_SHOWTITLEBAR      = 0x00000800,
1463     EOPT_SHOWKEYBAR        = 0x00001000,
1464     EOPT_SHOWSCROLLBAR     = 0x00002000,
1465 }
1466 
1467 enum EDITOR_BLOCK_TYPES
1468 {
1469     BTYPE_NONE                      = 0,
1470     BTYPE_STREAM                    = 1,
1471     BTYPE_COLUMN                    = 2,
1472 }
1473 
1474 enum EDITOR_CURRENTSTATE
1475 {
1476     ECSTATE_MODIFIED       = 0x00000001,
1477     ECSTATE_SAVED          = 0x00000002,
1478     ECSTATE_LOCKED         = 0x00000004,
1479 }
1480 
1481 struct EditorInfo
1482 {
1483     size_t StructSize;
1484     intptr_t EditorID;
1485     intptr_t WindowSizeX;
1486     intptr_t WindowSizeY;
1487     intptr_t TotalLines;
1488     intptr_t CurLine;
1489     intptr_t CurPos;
1490     intptr_t CurTabPos;
1491     intptr_t TopScreenLine;
1492     intptr_t LeftPos;
1493     intptr_t Overtype;
1494     intptr_t BlockType;
1495     intptr_t BlockStartLine;
1496     uintptr_t Options;
1497     intptr_t TabSize;
1498     size_t BookmarkCount;
1499     size_t SessionBookmarkCount;
1500     uintptr_t CurState;
1501     uintptr_t CodePage;
1502 }
1503 
1504 struct EditorBookmarks
1505 {
1506     size_t StructSize;
1507     size_t Size;
1508     size_t Count;
1509     intptr_t* Line;
1510     intptr_t* Cursor;
1511     intptr_t* ScreenLine;
1512     intptr_t* LeftPos;
1513 }
1514 
1515 struct EditorSetPosition
1516 {
1517     size_t StructSize;
1518     intptr_t CurLine;
1519     intptr_t CurPos;
1520     intptr_t CurTabPos;
1521     intptr_t TopScreenLine;
1522     intptr_t LeftPos;
1523     intptr_t Overtype;
1524 }
1525 
1526 struct EditorSelect
1527 {
1528     size_t StructSize;
1529     intptr_t BlockType;
1530     intptr_t BlockStartLine;
1531     intptr_t BlockStartPos;
1532     intptr_t BlockWidth;
1533     intptr_t BlockHeight;
1534 }
1535 
1536 struct EditorConvertPos
1537 {
1538     size_t StructSize;
1539     intptr_t StringNumber;
1540     intptr_t SrcPos;
1541     intptr_t DestPos;
1542 }
1543 
1544 
1545 alias EDITORCOLORFLAGS = ulong;
1546 const EDITORCOLORFLAGS
1547     ECF_TABMARKFIRST   = 0x0000000000000001UL,
1548     ECF_TABMARKCURRENT = 0x0000000000000002UL,
1549     ECF_AUTODELETE     = 0x0000000000000004UL,
1550     ECF_NONE           = 0;
1551 
1552 struct EditorColor
1553 {
1554     size_t StructSize;
1555     intptr_t StringNumber;
1556     intptr_t ColorItem;
1557     intptr_t StartPos;
1558     intptr_t EndPos;
1559     uintptr_t Priority;
1560     EDITORCOLORFLAGS Flags;
1561     FarColor Color;
1562     GUID Owner;
1563 }
1564 
1565 struct EditorDeleteColor
1566 {
1567     size_t StructSize;
1568     GUID Owner;
1569     intptr_t StringNumber;
1570     intptr_t StartPos;
1571 }
1572 
1573 const EDITOR_COLOR_NORMAL_PRIORITY = 0x80000000U;
1574 
1575 struct EditorSaveFile
1576 {
1577     size_t StructSize;
1578     const(wchar)* FileName;
1579     const(wchar)* FileEOL;
1580     uintptr_t CodePage;
1581 }
1582 
1583 enum EDITOR_CHANGETYPE
1584 {
1585     ECTYPE_CHANGED = 0,
1586     ECTYPE_ADDED   = 1,
1587     ECTYPE_DELETED = 2,
1588 }
1589 
1590 struct EditorChange
1591 {
1592     size_t StructSize;
1593     EDITOR_CHANGETYPE Type;
1594     intptr_t StringNumber;
1595 }
1596 
1597 struct EditorSubscribeChangeEvent
1598 {
1599     size_t StructSize;
1600     GUID PluginId;
1601 }
1602 
1603 alias INPUTBOXFLAGS = ulong;
1604 const INPUTBOXFLAGS
1605     FIB_ENABLEEMPTY      = 0x0000000000000001UL,
1606     FIB_PASSWORD         = 0x0000000000000002UL,
1607     FIB_EXPANDENV        = 0x0000000000000004UL,
1608     FIB_NOUSELASTHISTORY = 0x0000000000000008UL,
1609     FIB_BUTTONS          = 0x0000000000000010UL,
1610     FIB_NOAMPERSAND      = 0x0000000000000020UL,
1611     FIB_EDITPATH         = 0x0000000000000040UL,
1612     FIB_EDITPATHEXEC     = 0x0000000000000080UL,
1613     FIB_NONE             = 0UL;
1614 
1615 alias FARAPIINPUTBOX = extern (Windows) intptr_t function(
1616     in GUID* PluginId,
1617     in GUID* Id,
1618     in wchar* Title,
1619     in wchar* SubTitle,
1620     in wchar* HistoryName,
1621     in wchar* SrcText,
1622     wchar* DestText,
1623     size_t DestSize,
1624     in wchar* HelpTopic,
1625     INPUTBOXFLAGS Flags);
1626 
1627 enum FAR_PLUGINS_CONTROL_COMMANDS
1628 {
1629     PCTL_LOADPLUGIN           = 0,
1630     PCTL_UNLOADPLUGIN         = 1,
1631     PCTL_FORCEDLOADPLUGIN     = 2,
1632     PCTL_FINDPLUGIN           = 3,
1633     PCTL_GETPLUGININFORMATION = 4,
1634     PCTL_GETPLUGINS           = 5,
1635 }
1636 
1637 enum FAR_PLUGIN_LOAD_TYPE
1638 {
1639     PLT_PATH = 0,
1640 }
1641 
1642 enum FAR_PLUGIN_FIND_TYPE
1643 {
1644     PFM_GUID       = 0,
1645     PFM_MODULENAME = 1,
1646 }
1647 
1648 alias FAR_PLUGIN_FLAGS = ulong;
1649 const FAR_PLUGIN_FLAGS
1650     FPF_LOADED         = 0x0000000000000001UL,
1651     FPF_ANSI           = 0x1000000000000000UL,
1652     FPF_NONE           = 0UL;
1653 
1654 enum FAR_FILE_FILTER_CONTROL_COMMANDS
1655 {
1656     FFCTL_CREATEFILEFILTER          = 0,
1657     FFCTL_FREEFILEFILTER            = 1,
1658     FFCTL_OPENFILTERSMENU           = 2,
1659     FFCTL_STARTINGTOFILTER          = 3,
1660     FFCTL_ISFILEINFILTER            = 4,
1661 }
1662 
1663 enum FAR_FILE_FILTER_TYPE
1664 {
1665     FFT_PANEL                       = 0,
1666     FFT_FINDFILE                    = 1,
1667     FFT_COPY                        = 2,
1668     FFT_SELECT                      = 3,
1669     FFT_CUSTOM                      = 4,
1670 }
1671 
1672 enum FAR_REGEXP_CONTROL_COMMANDS
1673 {
1674     RECTL_CREATE                    = 0,
1675     RECTL_FREE                      = 1,
1676     RECTL_COMPILE                   = 2,
1677     RECTL_OPTIMIZE                  = 3,
1678     RECTL_MATCHEX                   = 4,
1679     RECTL_SEARCHEX                  = 5,
1680     RECTL_BRACKETSCOUNT             = 6,
1681 }
1682 
1683 struct RegExpMatch
1684 {
1685     intptr_t start,end;
1686 }
1687 
1688 struct RegExpSearch
1689 {
1690     const(wchar)* Text;
1691     intptr_t Position;
1692     intptr_t Length;
1693     RegExpMatch* Match;
1694     intptr_t Count;
1695     void* Reserved;
1696 }
1697 
1698 enum FAR_SETTINGS_CONTROL_COMMANDS
1699 {
1700     SCTL_CREATE                     = 0,
1701     SCTL_FREE                       = 1,
1702     SCTL_SET                        = 2,
1703     SCTL_GET                        = 3,
1704     SCTL_ENUM                       = 4,
1705     SCTL_DELETE                     = 5,
1706     SCTL_CREATESUBKEY               = 6,
1707     SCTL_OPENSUBKEY                 = 7,
1708 }
1709 
1710 enum FARSETTINGSTYPES
1711 {
1712     FST_UNKNOWN                     = 0,
1713     FST_SUBKEY                      = 1,
1714     FST_QWORD                       = 2,
1715     FST_STRING                      = 3,
1716     FST_DATA                        = 4,
1717 }
1718 
1719 enum FARSETTINGS_SUBFOLDERS
1720 {
1721     FSSF_ROOT                       =  0,
1722     FSSF_HISTORY_CMD                =  1,
1723     FSSF_HISTORY_FOLDER             =  2,
1724     FSSF_HISTORY_VIEW               =  3,
1725     FSSF_HISTORY_EDIT               =  4,
1726     FSSF_HISTORY_EXTERNAL           =  5,
1727     FSSF_FOLDERSHORTCUT_0           =  6,
1728     FSSF_FOLDERSHORTCUT_1           =  7,
1729     FSSF_FOLDERSHORTCUT_2           =  8,
1730     FSSF_FOLDERSHORTCUT_3           =  9,
1731     FSSF_FOLDERSHORTCUT_4           = 10,
1732     FSSF_FOLDERSHORTCUT_5           = 11,
1733     FSSF_FOLDERSHORTCUT_6           = 12,
1734     FSSF_FOLDERSHORTCUT_7           = 13,
1735     FSSF_FOLDERSHORTCUT_8           = 14,
1736     FSSF_FOLDERSHORTCUT_9           = 15,
1737     FSSF_CONFIRMATIONS              = 16,
1738     FSSF_SYSTEM                     = 17,
1739     FSSF_PANEL                      = 18,
1740     FSSF_EDITOR                     = 19,
1741     FSSF_SCREEN                     = 20,
1742     FSSF_DIALOG                     = 21,
1743     FSSF_INTERFACE                  = 22,
1744     FSSF_PANELLAYOUT                = 23,
1745 }
1746 
1747 enum FAR_PLUGIN_SETTINGS_LOCATION
1748 {
1749     PSL_ROAMING = 0,
1750     PSL_LOCAL   = 1,
1751 }
1752 
1753 struct FarSettingsCreate
1754 {
1755     size_t StructSize;
1756     GUID Guid;
1757     HANDLE Handle;
1758 }
1759 
1760 struct FarSettingsItemData
1761 {
1762     size_t Size;
1763     const(void)* Data;
1764 }
1765 
1766 struct FarSettingsItem
1767 {
1768     size_t StructSize;
1769     size_t Root;
1770     const(wchar)* Name;
1771     FARSETTINGSTYPES Type;
1772     union
1773     {
1774         ulong Number;
1775         const(wchar)* String;
1776         FarSettingsItemData Data;
1777     }
1778 }
1779 
1780 struct FarSettingsName
1781 {
1782     const(wchar)* Name;
1783     FARSETTINGSTYPES Type;
1784 }
1785 
1786 struct FarSettingsHistory
1787 {
1788     const(wchar)* Name;
1789     const(wchar)* Param;
1790     GUID PluginId;
1791     const(wchar)* File;
1792     FILETIME Time;
1793     BOOL Lock;
1794 }
1795 
1796 struct FarSettingsEnum
1797 {
1798     size_t StructSize;
1799     size_t Root;
1800     size_t Count;
1801     union
1802     {
1803         const(FarSettingsName)* Items;
1804         const(FarSettingsHistory)* Histories;
1805     }
1806 }
1807 
1808 struct FarSettingsValue
1809 {
1810     size_t StructSize;
1811     size_t Root;
1812     const(wchar)* Value;
1813 }
1814 
1815 alias FARAPIPANELCONTROL = extern (Windows) intptr_t function(HANDLE hPanel, FILE_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1816 
1817 alias FARAPIADVCONTROL = extern (Windows) intptr_t function(
1818     in GUID* PluginId,
1819     ADVANCED_CONTROL_COMMANDS Command,
1820     intptr_t Param1,
1821     void* Param2);
1822 
1823 alias FARAPIVIEWERCONTROL = extern (Windows) intptr_t function(intptr_t ViewerID, VIEWER_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1824 
1825 alias FARAPIEDITORCONTROL = extern (Windows) intptr_t function(intptr_t EditorID, EDITOR_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1826 
1827 alias FARAPIMACROCONTROL = extern (Windows) intptr_t function(
1828     in GUID* PluginId,
1829     FAR_MACRO_CONTROL_COMMANDS Command,
1830     intptr_t Param1,
1831     void* Param2);
1832 
1833 alias FARAPIPLUGINSCONTROL = extern (Windows) intptr_t function(HANDLE hHandle, FAR_PLUGINS_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1834 
1835 alias FARAPIFILEFILTERCONTROL = extern (Windows) intptr_t function(HANDLE hHandle, FAR_FILE_FILTER_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1836 
1837 alias FARAPIREGEXPCONTROL = extern (Windows) intptr_t function(HANDLE hHandle, FAR_REGEXP_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1838 
1839 alias FARAPISETTINGSCONTROL = extern (Windows) intptr_t function(HANDLE hHandle, FAR_SETTINGS_CONTROL_COMMANDS Command, intptr_t Param1, void* Param2);
1840 
1841 enum FARCLIPBOARD_TYPE
1842 {
1843     FCT_ANY=0,
1844     FCT_STREAM=1,
1845     FCT_COLUMN=2
1846 }
1847 
1848 alias FARSTDSPRINTF = extern (C) int function(wchar* Buffer, in wchar* Format, ...);
1849 
1850 alias FARSTDSNPRINTF = extern (C) int function(wchar* Buffer, size_t Sizebuf, in wchar* Format, ...);
1851 
1852 alias FARSTDSSCANF = extern (C) int function(in wchar* Buffer, in wchar* Format, ...);
1853 
1854 alias FARSTDQSORT = extern (Windows) void function(void* base, size_t nelem, size_t width, int function(in void* , in void* , void* userparam)fcmp, void* userparam);
1855 
1856 alias FARSTDBSEARCH = extern (Windows) void* function(in void* key, in void* base, size_t nelem, size_t width, int function(in void* , in void* , void* userparam)fcmp, void* userparam);
1857 
1858 alias FARSTDGETFILEOWNER = extern (Windows) size_t function(in wchar* Computer, in wchar* Name, wchar* Owner, size_t Size);
1859 
1860 alias FARSTDGETNUMBEROFLINKS = extern (Windows) size_t function(in wchar* Name);
1861 
1862 alias FARSTDATOI = extern (Windows) int function(in wchar* s);
1863 
1864 alias FARSTDATOI64 = extern (Windows) long function(in wchar* s);
1865 
1866 alias FARSTDITOA64 = extern (Windows) wchar* function(long value, wchar* Str, int radix);
1867 
1868 alias FARSTDITOA = extern (Windows) wchar* function(int value, wchar* Str, int radix);
1869 
1870 alias FARSTDLTRIM = extern (Windows) wchar* function(wchar* Str);
1871 
1872 alias FARSTDRTRIM = extern (Windows) wchar* function(wchar* Str);
1873 
1874 alias FARSTDTRIM = extern (Windows) wchar* function(wchar* Str);
1875 
1876 alias FARSTDTRUNCSTR = extern (Windows) wchar* function(wchar* Str, intptr_t MaxLength);
1877 
1878 alias FARSTDTRUNCPATHSTR = extern (Windows) wchar* function(wchar* Str, intptr_t MaxLength);
1879 
1880 alias FARSTDQUOTESPACEONLY = extern (Windows) wchar* function(wchar* Str);
1881 
1882 alias FARSTDPOINTTONAME = extern (Windows) const(wchar)* function(in wchar* Path);
1883 
1884 alias FARSTDADDENDSLASH = extern (Windows) BOOL function(wchar* Path);
1885 
1886 alias FARSTDCOPYTOCLIPBOARD = extern (Windows) BOOL function(FARCLIPBOARD_TYPE Type, in wchar* Data);
1887 
1888 alias FARSTDPASTEFROMCLIPBOARD = extern (Windows) size_t function(FARCLIPBOARD_TYPE Type, wchar* Data, size_t Size);
1889 
1890 alias FARSTDLOCALISLOWER = extern (Windows) int function(wchar Ch);
1891 
1892 alias FARSTDLOCALISUPPER = extern (Windows) int function(wchar Ch);
1893 
1894 alias FARSTDLOCALISALPHA = extern (Windows) int function(wchar Ch);
1895 
1896 alias FARSTDLOCALISALPHANUM = extern (Windows) int function(wchar Ch);
1897 
1898 alias FARSTDLOCALUPPER = extern (Windows) wchar function(wchar LowerChar);
1899 
1900 alias FARSTDLOCALLOWER = extern (Windows) wchar function(wchar UpperChar);
1901 
1902 alias FARSTDLOCALUPPERBUF = extern (Windows) void function(wchar* Buf, intptr_t Length);
1903 
1904 alias FARSTDLOCALLOWERBUF = extern (Windows) void function(wchar* Buf, intptr_t Length);
1905 
1906 alias FARSTDLOCALSTRUPR = extern (Windows) void function(wchar* s1);
1907 
1908 alias FARSTDLOCALSTRLWR = extern (Windows) void function(wchar* s1);
1909 
1910 deprecated
1911 alias FARSTDLOCALSTRICMP = extern (Windows) int function(in wchar* s1, in wchar* s2);
1912 
1913 deprecated
1914 alias FARSTDLOCALSTRNICMP = extern (Windows) int function(in wchar* s1, in wchar* s2, intptr_t n);
1915 
1916 alias FARSTDFARCLOCK = extern (Windows) ulong function();
1917 
1918 alias FARSTDCOMPARESTRINGS = extern (Windows) int function(in wchar* Str1, size_t Size1, in wchar* Str2, size_t Size2);
1919 
1920 alias PROCESSNAME_FLAGS = ulong;
1921 const PROCESSNAME_FLAGS
1922     //             0xFFFF - length
1923     //           0xFF0000 - mode
1924     // 0xFFFFFFFFFF000000 - flags
1925     PN_CMPNAME          = 0x0000000000000000UL,
1926     PN_CMPNAMELIST      = 0x0000000000010000UL,
1927     PN_GENERATENAME     = 0x0000000000020000UL,
1928     PN_CHECKMASK        = 0x0000000000030000UL,
1929     PN_SKIPPATH         = 0x0000000001000000UL,
1930     PN_SHOWERRORMESSAGE = 0x0000000002000000UL,
1931     PN_NONE             = 0;
1932 
1933 alias FARSTDPROCESSNAME = extern (Windows) size_t function(
1934     in wchar* param1,
1935     wchar* param2,
1936     size_t size,
1937     PROCESSNAME_FLAGS flags);
1938 
1939 alias FARSTDUNQUOTE = extern (Windows) void function(wchar* Str);
1940 
1941 alias XLAT_FLAGS = ulong;
1942 const XLAT_FLAGS
1943     XLAT_SWITCHKEYBLAYOUT  = 0x0000000000000001UL,
1944     XLAT_SWITCHKEYBBEEP    = 0x0000000000000002UL,
1945     XLAT_USEKEYBLAYOUTNAME = 0x0000000000000004UL,
1946     XLAT_CONVERTALLCMDLINE = 0x0000000000010000UL,
1947     XLAT_NONE              = 0UL;
1948 
1949 alias FARSTDINPUTRECORDTOKEYNAME = extern (Windows) size_t function(
1950     in INPUT_RECORD* Key,
1951     wchar* KeyText,
1952     size_t Size);
1953 
1954 alias FARSTDXLAT = extern (Windows) wchar* function(wchar* Line, intptr_t StartPos, intptr_t EndPos, XLAT_FLAGS Flags);
1955 
1956 alias FARSTDKEYNAMETOINPUTRECORD = extern (Windows) BOOL function(
1957     in wchar* Name,
1958     INPUT_RECORD* Key);
1959 
1960 alias FRSUSERFUNC = extern (Windows) int function(
1961     in PluginPanelItem* FData,
1962     in wchar* FullName,
1963     void* Param);
1964 
1965 alias FRSMODE = ulong;
1966 const FRSMODE
1967     FRS_RETUPDIR             = 0x0000000000000001UL,
1968     FRS_RECUR                = 0x0000000000000002UL,
1969     FRS_SCANSYMLINK          = 0x0000000000000004UL,
1970     FRS_NONE                 = 0;
1971 
1972 alias FARSTDRECURSIVESEARCH = extern (Windows) void function(
1973     in wchar* InitDir,
1974     in wchar* Mask,
1975     FRSUSERFUNC Func,
1976     FRSMODE Flags,
1977     void* Param);
1978 
1979 alias FARSTDMKTEMP = extern (Windows) size_t function(
1980     wchar* Dest,
1981     size_t DestSize,
1982     in wchar* Prefix);
1983 
1984 alias FARSTDGETPATHROOT = extern (Windows) size_t function(
1985     in wchar* Path,
1986     wchar* Root,
1987     size_t DestSize);
1988 
1989 enum LINK_TYPE
1990 {
1991     LINK_HARDLINK         = 1,
1992     LINK_JUNCTION         = 2,
1993     LINK_VOLMOUNT         = 3,
1994     LINK_SYMLINKFILE      = 4,
1995     LINK_SYMLINKDIR       = 5,
1996     LINK_SYMLINK          = 6,
1997 }
1998 
1999 alias MKLINK_FLAGS = ulong;
2000 const MKLINK_FLAGS
2001     MLF_SHOWERRMSG       = 0x0000000000010000UL,
2002     MLF_DONOTUPDATEPANEL = 0x0000000000020000UL,
2003     MLF_HOLDTARGET       = 0x0000000000040000UL,
2004     MLF_NONE             = 0UL;
2005 
2006 alias FARSTDMKLINK = extern (Windows) BOOL function(
2007     in wchar* Src,
2008     in wchar* Dest,
2009     LINK_TYPE Type,
2010     MKLINK_FLAGS Flags);
2011 
2012 alias FARGETREPARSEPOINTINFO = extern (Windows) size_t function(
2013     in wchar* Src,
2014     wchar* Dest,
2015     size_t DestSize);
2016 
2017 enum CONVERTPATHMODES
2018 {
2019     CPM_FULL                        = 0,
2020     CPM_REAL                        = 1,
2021     CPM_NATIVE                      = 2,
2022 }
2023 
2024 alias FARCONVERTPATH = extern (Windows) size_t function(
2025     CONVERTPATHMODES Mode,
2026     in wchar* Src,
2027     wchar* Dest,
2028     size_t DestSize);
2029 
2030 alias FARGETCURRENTDIRECTORY = extern (Windows) size_t function(size_t Size, wchar* Buffer);
2031 
2032 alias FARFORMATFILESIZEFLAGS = ulong;
2033 const FARFORMATFILESIZEFLAGS
2034     FFFS_COMMAS                 = 0x0100000000000000UL,
2035     FFFS_FLOATSIZE              = 0x0200000000000000UL,
2036     FFFS_SHOWBYTESINDEX         = 0x0400000000000000UL,
2037     FFFS_ECONOMIC               = 0x0800000000000000UL,
2038     FFFS_THOUSAND               = 0x1000000000000000UL,
2039     FFFS_MINSIZEINDEX           = 0x2000000000000000UL,
2040     FFFS_MINSIZEINDEX_MASK      = 0x0000000000000003UL,
2041     FFFS_NONE                   = 0;
2042 
2043 alias FARFORMATFILESIZE = extern (Windows) size_t function(ulong Size, intptr_t Width, FARFORMATFILESIZEFLAGS Flags, wchar* Dest, size_t DestSize);
2044 
2045 struct FarStandardFunctions
2046 {
2047     size_t StructSize;
2048     FARSTDATOI atoi;
2049     FARSTDATOI64 atoi64;
2050     FARSTDITOA itoa;
2051     FARSTDITOA64 itoa64;
2052     FARSTDSPRINTF sprintf;
2053     FARSTDSSCANF sscanf;
2054     FARSTDQSORT qsort;
2055     FARSTDBSEARCH bsearch;
2056     FARSTDSNPRINTF snprintf;
2057     FARSTDLOCALISLOWER LIsLower;
2058     FARSTDLOCALISUPPER LIsUpper;
2059     FARSTDLOCALISALPHA LIsAlpha;
2060     FARSTDLOCALISALPHANUM LIsAlphanum;
2061     FARSTDLOCALUPPER LUpper;
2062     FARSTDLOCALLOWER LLower;
2063     FARSTDLOCALUPPERBUF LUpperBuf;
2064     FARSTDLOCALLOWERBUF LLowerBuf;
2065     FARSTDLOCALSTRUPR LStrupr;
2066     FARSTDLOCALSTRLWR LStrlwr;
2067     deprecated FARSTDLOCALSTRICMP LStricmp;
2068     deprecated FARSTDLOCALSTRNICMP LStrnicmp;
2069     FARSTDUNQUOTE Unquote;
2070     FARSTDLTRIM LTrim;
2071     FARSTDRTRIM RTrim;
2072     FARSTDTRIM Trim;
2073     FARSTDTRUNCSTR TruncStr;
2074     FARSTDTRUNCPATHSTR TruncPathStr;
2075     FARSTDQUOTESPACEONLY QuoteSpaceOnly;
2076     FARSTDPOINTTONAME PointToName;
2077     FARSTDGETPATHROOT GetPathRoot;
2078     FARSTDADDENDSLASH AddEndSlash;
2079     FARSTDCOPYTOCLIPBOARD CopyToClipboard;
2080     FARSTDPASTEFROMCLIPBOARD PasteFromClipboard;
2081     FARSTDINPUTRECORDTOKEYNAME FarInputRecordToName;
2082     FARSTDKEYNAMETOINPUTRECORD FarNameToInputRecord;
2083     FARSTDXLAT XLat;
2084     FARSTDGETFILEOWNER GetFileOwner;
2085     FARSTDGETNUMBEROFLINKS GetNumberOfLinks;
2086     FARSTDRECURSIVESEARCH FarRecursiveSearch;
2087     FARSTDMKTEMP MkTemp;
2088     FARSTDPROCESSNAME ProcessName;
2089     FARSTDMKLINK MkLink;
2090     FARCONVERTPATH ConvertPath;
2091     FARGETREPARSEPOINTINFO GetReparsePointInfo;
2092     FARGETCURRENTDIRECTORY GetCurrentDirectory;
2093     FARFORMATFILESIZE FormatFileSize;
2094     FARSTDFARCLOCK FarClock;
2095     FARSTDCOMPARESTRINGS CompareStrings;
2096 }
2097 alias FARSTANDARDFUNCTIONS = FarStandardFunctions;
2098 
2099 struct PluginStartupInfo
2100 {
2101     size_t StructSize;
2102     const(wchar)* ModuleName;
2103     FARAPIMENU Menu;
2104     FARAPIMESSAGE Message;
2105     FARAPIGETMSG GetMsg;
2106     FARAPIPANELCONTROL PanelControl;
2107     FARAPISAVESCREEN SaveScreen;
2108     FARAPIRESTORESCREEN RestoreScreen;
2109     FARAPIGETDIRLIST GetDirList;
2110     FARAPIGETPLUGINDIRLIST GetPluginDirList;
2111     FARAPIFREEDIRLIST FreeDirList;
2112     FARAPIFREEPLUGINDIRLIST FreePluginDirList;
2113     FARAPIVIEWER Viewer;
2114     FARAPIEDITOR Editor;
2115     FARAPITEXT Text;
2116     FARAPIEDITORCONTROL EditorControl;
2117     FARSTANDARDFUNCTIONS* FSF;
2118     FARAPISHOWHELP ShowHelp;
2119     FARAPIADVCONTROL AdvControl;
2120     FARAPIINPUTBOX InputBox;
2121     FARAPICOLORDIALOG ColorDialog;
2122     FARAPIDIALOGINIT DialogInit;
2123     FARAPIDIALOGRUN DialogRun;
2124     FARAPIDIALOGFREE DialogFree;
2125     FARAPISENDDLGMESSAGE SendDlgMessage;
2126     FARAPIDEFDLGPROC DefDlgProc;
2127     FARAPIVIEWERCONTROL ViewerControl;
2128     FARAPIPLUGINSCONTROL PluginsControl;
2129     FARAPIFILEFILTERCONTROL FileFilterControl;
2130     FARAPIREGEXPCONTROL RegExpControl;
2131     FARAPIMACROCONTROL MacroControl;
2132     FARAPISETTINGSCONTROL SettingsControl;
2133     const(void)* Private;
2134     void* Instance;
2135 }
2136 
2137 alias FARAPICREATEFILE = extern (Windows) HANDLE function(
2138     in wchar* Object,
2139     DWORD DesiredAccess,
2140     DWORD ShareMode,
2141     LPSECURITY_ATTRIBUTES SecurityAttributes,
2142     DWORD CreationDistribution,
2143     DWORD FlagsAndAttributes,
2144     HANDLE TemplateFile);
2145 
2146 alias FARAPIGETFILEATTRIBUTES = extern (Windows) DWORD function(in wchar* FileName);
2147 
2148 alias FARAPISETFILEATTRIBUTES = extern (Windows) BOOL function(
2149     in wchar* FileName,
2150     DWORD dwFileAttributes);
2151 
2152 alias FARAPIMOVEFILEEX = extern (Windows) BOOL function(
2153     in wchar* ExistingFileName,
2154     in wchar* NewFileName,
2155     DWORD dwFlags);
2156 
2157 alias FARAPIDELETEFILE = extern (Windows) BOOL function(in wchar* FileName);
2158 
2159 alias FARAPIREMOVEDIRECTORY = extern (Windows) BOOL function(in wchar* DirName);
2160 
2161 alias FARAPICREATEDIRECTORY = extern (Windows) BOOL function(
2162     in wchar* PathName,
2163     LPSECURITY_ATTRIBUTES lpSecurityAttributes);
2164 
2165 struct ArclitePrivateInfo
2166 {
2167     size_t StructSize;
2168     FARAPICREATEFILE CreateFile;
2169     FARAPIGETFILEATTRIBUTES GetFileAttributes;
2170     FARAPISETFILEATTRIBUTES SetFileAttributes;
2171     FARAPIMOVEFILEEX MoveFileEx;
2172     FARAPIDELETEFILE DeleteFile;
2173     FARAPIREMOVEDIRECTORY RemoveDirectory;
2174     FARAPICREATEDIRECTORY CreateDirectory;
2175 }
2176 
2177 struct NetBoxPrivateInfo
2178 {
2179     size_t StructSize;
2180     FARAPICREATEFILE CreateFile;
2181     FARAPIGETFILEATTRIBUTES GetFileAttributes;
2182     FARAPISETFILEATTRIBUTES SetFileAttributes;
2183     FARAPIMOVEFILEEX MoveFileEx;
2184     FARAPIDELETEFILE DeleteFile;
2185     FARAPIREMOVEDIRECTORY RemoveDirectory;
2186     FARAPICREATEDIRECTORY CreateDirectory;
2187 }
2188 
2189 struct MacroPluginReturn
2190 {
2191     intptr_t ReturnType;
2192     size_t Count;
2193     FarMacroValue* Values;
2194 }
2195 
2196 alias FARAPICALLFAR = extern (Windows) intptr_t function(intptr_t CheckCode, FarMacroCall* Data);
2197 
2198 struct MacroPrivateInfo
2199 {
2200     size_t StructSize;
2201     FARAPICALLFAR CallFar;
2202 }
2203 
2204 alias PLUGIN_FLAGS = ulong;
2205 const PLUGIN_FLAGS
2206     PF_PRELOAD        = 0x0000000000000001UL,
2207     PF_DISABLEPANELS  = 0x0000000000000002UL,
2208     PF_EDITOR         = 0x0000000000000004UL,
2209     PF_VIEWER         = 0x0000000000000008UL,
2210     PF_FULLCMDLINE    = 0x0000000000000010UL,
2211     PF_DIALOG         = 0x0000000000000020UL,
2212     PF_NONE           = 0UL;
2213 
2214 struct PluginMenuItem
2215 {
2216     const(GUID)* Guids;
2217     const(wchar*)* Strings;
2218     size_t Count;
2219 }
2220 
2221 enum VERSION_STAGE
2222 {
2223     VS_RELEASE                      = 0,
2224     VS_ALPHA                        = 1,
2225     VS_BETA                         = 2,
2226     VS_RC                           = 3,
2227     VS_SPECIAL                      = 4,
2228     VS_PRIVATE                      = 5,
2229 }
2230 
2231 struct VersionInfo
2232 {
2233     DWORD Major;
2234     DWORD Minor;
2235     DWORD Revision;
2236     DWORD Build;
2237     VERSION_STAGE Stage;
2238 }
2239 
2240 BOOL CheckVersion(in VersionInfo* Current, in VersionInfo* Required)
2241 {
2242     return (Current.Major > Required.Major)
2243         || (Current.Major == Required.Major && Current.Minor > Required.Minor)
2244         || (Current.Major == Required.Major && Current.Minor == Required.Minor && Current.Revision > Required.Revision)
2245         || (Current.Major == Required.Major && Current.Minor == Required.Minor && Current.Revision == Required.Revision && Current.Build >= Required.Build);
2246 }
2247 
2248 VersionInfo MakeFarVersion(DWORD Major, DWORD Minor, DWORD Revision, DWORD Build, VERSION_STAGE Stage)
2249 {
2250     return VersionInfo(Major, Minor, Revision, Build, Stage);
2251 }
2252 auto FARMANAGERVERSION() { return MakeFarVersion(FARMANAGERVERSION_MAJOR, FARMANAGERVERSION_MINOR, FARMANAGERVERSION_REVISION, FARMANAGERVERSION_BUILD, FARMANAGERVERSION_STAGE); }
2253 
2254 struct GlobalInfo
2255 {
2256     size_t StructSize;
2257     VersionInfo MinFarVersion;
2258     VersionInfo Version;
2259     GUID Guid;
2260     const(wchar)* Title;
2261     const(wchar)* Description;
2262     const(wchar)* Author;
2263     void* Instance;
2264 }
2265 
2266 struct PluginInfo
2267 {
2268     size_t StructSize;
2269     PLUGIN_FLAGS Flags;
2270     PluginMenuItem DiskMenu;
2271     PluginMenuItem PluginMenu;
2272     PluginMenuItem PluginConfig;
2273     const(wchar)* CommandPrefix;
2274     void* Instance;
2275 }
2276 
2277 struct FarGetPluginInformation
2278 {
2279     size_t StructSize;
2280     const(wchar)* ModuleName;
2281     FAR_PLUGIN_FLAGS Flags;
2282     PluginInfo* PInfo;
2283     GlobalInfo* GInfo;
2284 }
2285 
2286 alias INFOPANELLINE_FLAGS = ulong;
2287 const INFOPANELLINE_FLAGS
2288     IPLFLAGS_SEPARATOR      = 0x0000000000000001UL,
2289     IPLFLAGS_NONE           = 0;
2290 
2291 struct InfoPanelLine
2292 {
2293     const(wchar)* Text;
2294     const(wchar)* Data;
2295     INFOPANELLINE_FLAGS Flags;
2296 }
2297 
2298 alias PANELMODE_FLAGS = ulong;
2299 const PANELMODE_FLAGS
2300     PMFLAGS_FULLSCREEN      = 0x0000000000000001UL,
2301     PMFLAGS_DETAILEDSTATUS  = 0x0000000000000002UL,
2302     PMFLAGS_ALIGNEXTENSIONS = 0x0000000000000004UL,
2303     PMFLAGS_CASECONVERSION  = 0x0000000000000008UL,
2304     PMFLAGS_NONE            = 0;
2305 
2306 struct PanelMode
2307 {
2308     const(wchar)* ColumnTypes;
2309     const(wchar)* ColumnWidths;
2310     const(wchar*)* ColumnTitles;
2311     const(wchar)* StatusColumnTypes;
2312     const(wchar)* StatusColumnWidths;
2313     PANELMODE_FLAGS Flags;
2314 }
2315 
2316 alias OPENPANELINFO_FLAGS = ulong;
2317 const OPENPANELINFO_FLAGS
2318     OPIF_DISABLEFILTER           = 0x0000000000000001UL,
2319     OPIF_DISABLESORTGROUPS       = 0x0000000000000002UL,
2320     OPIF_DISABLEHIGHLIGHTING     = 0x0000000000000004UL,
2321     OPIF_ADDDOTS                 = 0x0000000000000008UL,
2322     OPIF_RAWSELECTION            = 0x0000000000000010UL,
2323     OPIF_REALNAMES               = 0x0000000000000020UL,
2324     OPIF_SHOWNAMESONLY           = 0x0000000000000040UL,
2325     OPIF_SHOWRIGHTALIGNNAMES     = 0x0000000000000080UL,
2326     OPIF_SHOWPRESERVECASE        = 0x0000000000000100UL,
2327     OPIF_COMPAREFATTIME          = 0x0000000000000400UL,
2328     OPIF_EXTERNALGET             = 0x0000000000000800UL,
2329     OPIF_EXTERNALPUT             = 0x0000000000001000UL,
2330     OPIF_EXTERNALDELETE          = 0x0000000000002000UL,
2331     OPIF_EXTERNALMKDIR           = 0x0000000000004000UL,
2332     OPIF_USEATTRHIGHLIGHTING     = 0x0000000000008000UL,
2333     OPIF_USECRC32                = 0x0000000000010000UL,
2334     OPIF_USEFREESIZE             = 0x0000000000020000UL,
2335     OPIF_SHORTCUT                = 0x0000000000040000UL,
2336     OPIF_NONE                    = 0UL;
2337 
2338 struct KeyBarLabel
2339 {
2340     FarKey Key;
2341     const(wchar)* Text;
2342     const(wchar)* LongText;
2343 }
2344 
2345 struct KeyBarTitles
2346 {
2347     size_t CountLabels;
2348     KeyBarLabel* Labels;
2349 }
2350 
2351 struct FarSetKeyBarTitles
2352 {
2353     size_t StructSize;
2354     KeyBarTitles* Titles;
2355 }
2356 
2357 alias OPERATION_MODES = ulong;
2358 const OPERATION_MODES
2359     OPM_SILENT     =0x0000000000000001UL,
2360     OPM_FIND       =0x0000000000000002UL,
2361     OPM_VIEW       =0x0000000000000004UL,
2362     OPM_EDIT       =0x0000000000000008UL,
2363     OPM_TOPLEVEL   =0x0000000000000010UL,
2364     OPM_DESCR      =0x0000000000000020UL,
2365     OPM_QUICKVIEW  =0x0000000000000040UL,
2366     OPM_PGDN       =0x0000000000000080UL,
2367     OPM_COMMANDS   =0x0000000000000100UL,
2368     OPM_NONE       =0UL;
2369 
2370 struct OpenPanelInfo
2371 {
2372     size_t StructSize;
2373     HANDLE hPanel;
2374     OPENPANELINFO_FLAGS Flags;
2375     const(wchar)* HostFile;
2376     const(wchar)* CurDir;
2377     const(wchar)* Format;
2378     const(wchar)* PanelTitle;
2379     const(InfoPanelLine)* InfoLines;
2380     size_t InfoLinesNumber;
2381     const(wchar*)* DescrFiles;
2382     size_t DescrFilesNumber;
2383     const(PanelMode)* PanelModesArray;
2384     size_t PanelModesNumber;
2385     intptr_t StartPanelMode;
2386     OPENPANELINFO_SORTMODES StartSortMode;
2387     intptr_t StartSortOrder;
2388     const(KeyBarTitles)* KeyBar;
2389     const(wchar)* ShortcutData;
2390     ulong FreeSize;
2391     UserDataItem UserData;
2392     void* Instance;
2393 }
2394 
2395 struct AnalyseInfo
2396 {
2397     size_t StructSize;
2398     const(wchar)* FileName;
2399     void* Buffer;
2400     size_t BufferSize;
2401     OPERATION_MODES OpMode;
2402     void* Instance;
2403 }
2404 
2405 struct OpenAnalyseInfo
2406 {
2407     size_t StructSize;
2408     AnalyseInfo* Info;
2409     HANDLE Handle;
2410 }
2411 
2412 struct OpenMacroInfo
2413 {
2414     size_t StructSize;
2415     size_t Count;
2416     FarMacroValue* Values;
2417 }
2418 
2419 alias FAROPENSHORTCUTFLAGS = ulong;
2420 const FAROPENSHORTCUTFLAGS
2421     FOSF_ACTIVE = 0x0000000000000001UL,
2422     FOSF_NONE   = 0;
2423 
2424 struct OpenShortcutInfo
2425 {
2426     size_t StructSize;
2427     const(wchar)* HostFile;
2428     const(wchar)* ShortcutData;
2429     FAROPENSHORTCUTFLAGS Flags;
2430 }
2431 
2432 struct OpenCommandLineInfo
2433 {
2434     size_t StructSize;
2435     const(wchar)* CommandLine;
2436 }
2437 
2438 enum OPENFROM
2439 {
2440     OPEN_LEFTDISKMENU       = 0,
2441     OPEN_PLUGINSMENU        = 1,
2442     OPEN_FINDLIST           = 2,
2443     OPEN_SHORTCUT           = 3,
2444     OPEN_COMMANDLINE        = 4,
2445     OPEN_EDITOR             = 5,
2446     OPEN_VIEWER             = 6,
2447     OPEN_FILEPANEL          = 7,
2448     OPEN_DIALOG             = 8,
2449     OPEN_ANALYSE            = 9,
2450     OPEN_RIGHTDISKMENU      = 10,
2451     OPEN_FROMMACRO          = 11,
2452     OPEN_LUAMACRO           = 100,
2453 }
2454 
2455 enum MACROCALLTYPE
2456 {
2457     MCT_MACROPARSE         = 0,
2458     MCT_LOADMACROS         = 1,
2459     MCT_ENUMMACROS         = 2,
2460     MCT_WRITEMACROS        = 3,
2461     MCT_GETMACRO           = 4,
2462     MCT_RECORDEDMACRO      = 5,
2463     MCT_DELMACRO           = 6,
2464     MCT_RUNSTARTMACRO      = 7,
2465     MCT_EXECSTRING         = 8,
2466     MCT_PANELSORT          = 9,
2467     MCT_GETCUSTOMSORTMODES = 10,
2468     MCT_ADDMACRO           = 11,
2469     MCT_KEYMACRO           = 12,
2470     MCT_CANPANELSORT       = 13,
2471 }
2472 
2473 enum MACROPLUGINRETURNTYPE
2474 {
2475     MPRT_NORMALFINISH  = 0,
2476     MPRT_ERRORFINISH   = 1,
2477     MPRT_ERRORPARSE    = 2,
2478     MPRT_KEYS          = 3,
2479     MPRT_PRINT         = 4,
2480     MPRT_PLUGINCALL    = 5,
2481     MPRT_PLUGINMENU    = 6,
2482     MPRT_PLUGINCONFIG  = 7,
2483     MPRT_PLUGINCOMMAND = 8,
2484     MPRT_USERMENU      = 9,
2485     MPRT_HASNOMACRO    = 10,
2486 }
2487 
2488 struct OpenMacroPluginInfo
2489 {
2490     MACROCALLTYPE CallType;
2491     FarMacroCall* Data;
2492     MacroPluginReturn Ret;
2493 }
2494 
2495 enum FAR_EVENTS
2496 {
2497     FE_CHANGEVIEWMODE   =0,
2498     FE_REDRAW           =1,
2499     FE_IDLE             =2,
2500     FE_CLOSE            =3,
2501     FE_BREAK            =4,
2502     FE_COMMAND          =5,
2503 
2504     FE_GOTFOCUS         =6,
2505     FE_KILLFOCUS        =7,
2506     FE_CHANGESORTPARAMS =8,
2507 }
2508 
2509 struct OpenInfo
2510 {
2511     size_t StructSize;
2512     OPENFROM OpenFrom;
2513     const(GUID)* Guid;
2514     intptr_t Data;
2515     void* Instance;
2516 }
2517 
2518 struct SetDirectoryInfo
2519 {
2520     size_t StructSize;
2521     HANDLE hPanel;
2522     const(wchar)* Dir;
2523     intptr_t Reserved;
2524     OPERATION_MODES OpMode;
2525     UserDataItem UserData;
2526     void* Instance;
2527 }
2528 
2529 struct SetFindListInfo
2530 {
2531     size_t StructSize;
2532     HANDLE hPanel;
2533     const(PluginPanelItem)* PanelItem;
2534     size_t ItemsNumber;
2535     void* Instance;
2536 }
2537 
2538 struct PutFilesInfo
2539 {
2540     size_t StructSize;
2541     HANDLE hPanel;
2542     PluginPanelItem* PanelItem;
2543     size_t ItemsNumber;
2544     BOOL Move;
2545     const(wchar)* SrcPath;
2546     OPERATION_MODES OpMode;
2547     void* Instance;
2548 }
2549 
2550 struct ProcessHostFileInfo
2551 {
2552     size_t StructSize;
2553     HANDLE hPanel;
2554     PluginPanelItem* PanelItem;
2555     size_t ItemsNumber;
2556     OPERATION_MODES OpMode;
2557     void* Instance;
2558 }
2559 
2560 struct MakeDirectoryInfo
2561 {
2562     size_t StructSize;
2563     HANDLE hPanel;
2564     const(wchar)* Name;
2565     OPERATION_MODES OpMode;
2566     void* Instance;
2567 }
2568 
2569 struct CompareInfo
2570 {
2571     size_t StructSize;
2572     HANDLE hPanel;
2573     const(PluginPanelItem)* Item1;
2574     const(PluginPanelItem)* Item2;
2575     OPENPANELINFO_SORTMODES Mode;
2576     void* Instance;
2577 }
2578 
2579 struct GetFindDataInfo
2580 {
2581     size_t StructSize;
2582     HANDLE hPanel;
2583     PluginPanelItem* PanelItem;
2584     size_t ItemsNumber;
2585     OPERATION_MODES OpMode;
2586     void* Instance;
2587 }
2588 
2589 struct FreeFindDataInfo
2590 {
2591     size_t StructSize;
2592     HANDLE hPanel;
2593     PluginPanelItem* PanelItem;
2594     size_t ItemsNumber;
2595     void* Instance;
2596 }
2597 
2598 struct GetFilesInfo
2599 {
2600     size_t StructSize;
2601     HANDLE hPanel;
2602     PluginPanelItem* PanelItem;
2603     size_t ItemsNumber;
2604     BOOL Move;
2605     const(wchar)* DestPath;
2606     OPERATION_MODES OpMode;
2607     void* Instance;
2608 }
2609 
2610 struct DeleteFilesInfo
2611 {
2612     size_t StructSize;
2613     HANDLE hPanel;
2614     PluginPanelItem* PanelItem;
2615     size_t ItemsNumber;
2616     OPERATION_MODES OpMode;
2617     void* Instance;
2618 }
2619 
2620 struct ProcessPanelInputInfo
2621 {
2622     size_t StructSize;
2623     HANDLE hPanel;
2624     INPUT_RECORD Rec;
2625     void* Instance;
2626 }
2627 
2628 struct ProcessEditorInputInfo
2629 {
2630     size_t StructSize;
2631     INPUT_RECORD Rec;
2632     void* Instance;
2633 }
2634 
2635 alias PROCESSCONSOLEINPUT_FLAGS = ulong;
2636 const PROCESSCONSOLEINPUT_FLAGS
2637     PCIF_NONE     = 0;
2638 
2639 struct ProcessConsoleInputInfo
2640 {
2641     size_t StructSize;
2642     PROCESSCONSOLEINPUT_FLAGS Flags;
2643     INPUT_RECORD Rec;
2644     void* Instance;
2645 }
2646 
2647 struct ExitInfo
2648 {
2649     size_t StructSize;
2650     void* Instance;
2651 }
2652 
2653 struct ProcessPanelEventInfo
2654 {
2655     size_t StructSize;
2656     intptr_t Event;
2657     void* Param;
2658     HANDLE hPanel;
2659     void* Instance;
2660 }
2661 
2662 struct ProcessEditorEventInfo
2663 {
2664     size_t StructSize;
2665     intptr_t Event;
2666     void* Param;
2667     intptr_t EditorID;
2668     void* Instance;
2669 }
2670 
2671 struct ProcessDialogEventInfo
2672 {
2673     size_t StructSize;
2674     intptr_t Event;
2675     FarDialogEvent* Param;
2676     void* Instance;
2677 }
2678 
2679 struct ProcessSynchroEventInfo
2680 {
2681     size_t StructSize;
2682     intptr_t Event;
2683     void* Param;
2684     void* Instance;
2685 }
2686 
2687 struct ProcessViewerEventInfo
2688 {
2689     size_t StructSize;
2690     intptr_t Event;
2691     void* Param;
2692     intptr_t ViewerID;
2693     void* Instance;
2694 }
2695 
2696 struct ClosePanelInfo
2697 {
2698     size_t StructSize;
2699     HANDLE hPanel;
2700     void* Instance;
2701 }
2702 
2703 struct CloseAnalyseInfo
2704 {
2705     size_t StructSize;
2706     HANDLE Handle;
2707     void* Instance;
2708 }
2709 
2710 struct ConfigureInfo
2711 {
2712     size_t StructSize;
2713     const(GUID)* Guid;
2714     void* Instance;
2715 }
2716 
2717 struct GetContentFieldsInfo
2718 {
2719     size_t StructSize;
2720     size_t Count;
2721     const(wchar*)* Names;
2722     void* Instance;
2723 }
2724 
2725 struct GetContentDataInfo
2726 {
2727     size_t StructSize;
2728     const(wchar)* FilePath;
2729     size_t Count;
2730     const(wchar*)* Names;
2731     const(wchar)** Values;
2732     void* Instance;
2733 }
2734 
2735 struct ErrorInfo
2736 {
2737     size_t StructSize;
2738     const(wchar)* Summary;
2739     const(wchar)* Description;
2740 }
2741 
2742 GUID FarGuid = {0x00000000, 0x0000, 0x0000, [0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00]};
2743 
2744 // Exported Functions
2745 
2746 extern (Windows) HANDLE AnalyseW(in AnalyseInfo* Info);
2747 
2748 extern (Windows) void CloseAnalyseW(in CloseAnalyseInfo* Info);
2749 
2750 extern (Windows) void ClosePanelW(in ClosePanelInfo* Info);
2751 
2752 extern (Windows) intptr_t CompareW(in CompareInfo* Info);
2753 
2754 extern (Windows) intptr_t ConfigureW(in ConfigureInfo* Info);
2755 
2756 extern (Windows) intptr_t DeleteFilesW(in DeleteFilesInfo* Info);
2757 
2758 extern (Windows) void ExitFARW(in ExitInfo* Info);
2759 
2760 extern (Windows) void FreeFindDataW(in FreeFindDataInfo* Info);
2761 
2762 extern (Windows) intptr_t GetFilesW(GetFilesInfo* Info);
2763 
2764 extern (Windows) intptr_t GetFindDataW(GetFindDataInfo* Info);
2765 
2766 extern (Windows) void GetGlobalInfoW(GlobalInfo* Info);
2767 
2768 extern (Windows) void GetOpenPanelInfoW(OpenPanelInfo* Info);
2769 
2770 extern (Windows) void GetPluginInfoW(PluginInfo* Info);
2771 
2772 extern (Windows) intptr_t MakeDirectoryW(MakeDirectoryInfo* Info);
2773 
2774 extern (Windows) HANDLE OpenW(in OpenInfo* Info);
2775 
2776 extern (Windows) intptr_t ProcessDialogEventW(in ProcessDialogEventInfo* Info);
2777 
2778 extern (Windows) intptr_t ProcessEditorEventW(in ProcessEditorEventInfo* Info);
2779 
2780 extern (Windows) intptr_t ProcessEditorInputW(in ProcessEditorInputInfo* Info);
2781 
2782 extern (Windows) intptr_t ProcessPanelEventW(in ProcessPanelEventInfo* Info);
2783 
2784 extern (Windows) intptr_t ProcessHostFileW(in ProcessHostFileInfo* Info);
2785 
2786 extern (Windows) intptr_t ProcessPanelInputW(in ProcessPanelInputInfo* Info);
2787 
2788 extern (Windows) intptr_t ProcessConsoleInputW(ProcessConsoleInputInfo* Info);
2789 
2790 extern (Windows) intptr_t ProcessSynchroEventW(in ProcessSynchroEventInfo* Info);
2791 
2792 extern (Windows) intptr_t ProcessViewerEventW(in ProcessViewerEventInfo* Info);
2793 
2794 extern (Windows) intptr_t PutFilesW(in PutFilesInfo* Info);
2795 
2796 extern (Windows) intptr_t SetDirectoryW(in SetDirectoryInfo* Info);
2797 
2798 extern (Windows) intptr_t SetFindListW(in SetFindListInfo* Info);
2799 
2800 extern (Windows) void SetStartupInfoW(in PluginStartupInfo* Info);
2801 
2802 extern (Windows) intptr_t GetContentFieldsW(in GetContentFieldsInfo* Info);
2803 
2804 extern (Windows) intptr_t GetContentDataW(GetContentDataInfo* Info);
2805 
2806 extern (Windows) void FreeContentDataW(in GetContentDataInfo* Info);