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