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