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