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