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